Merge branch 'master' into doc-overworld

This commit is contained in:
GriffinR
2020-07-08 15:51:58 -04:00
committed by GitHub
498 changed files with 8011 additions and 7053 deletions

View File

@@ -28,6 +28,7 @@
#include "constants/items.h"
#include "constants/mauville_old_man.h"
#include "constants/trainer_types.h"
#include "constants/union_room.h"
// this file was known as evobjmv.c in Game Freak's original source
@@ -97,7 +98,7 @@ static void DoRippleFieldEffect(struct ObjectEvent*, struct Sprite*);
static void DoGroundEffects_OnSpawn(struct ObjectEvent*, struct Sprite*);
static void DoGroundEffects_OnBeginStep(struct ObjectEvent*, struct Sprite*);
static void DoGroundEffects_OnFinishStep(struct ObjectEvent*, struct Sprite*);
static void sub_8097D68(struct Sprite*);
static void UpdateObjectEventSpritePosition(struct Sprite*);
static void ApplyLevitateMovement(u8);
static bool8 MovementType_Disguise_Callback(struct ObjectEvent *, struct Sprite *);
static bool8 MovementType_Hidden_Callback(struct ObjectEvent *, struct Sprite *);
@@ -132,6 +133,7 @@ static void oamt_npc_ministep_reset(struct Sprite *, u8, u8);
static void UpdateObjectEventSpriteSubpriorityAndVisibility(struct Sprite *);
static void InitSpriteForFigure8Anim(struct Sprite *sprite);
static bool8 AnimateSpriteInFigure8(struct Sprite *sprite);
static void UpdateObjectEventSprite(struct Sprite *);
const u8 gReflectionEffectPaletteMap[] = {1, 1, 6, 7, 8, 9, 6, 7, 8, 9, 11, 11, 0, 0, 0, 0};
@@ -1524,7 +1526,9 @@ u8 AddPseudoObjectEvent(u16 graphicsId, void (*callback)(struct Sprite *), s16 x
return spriteId;
}
u8 sprite_new(u8 graphicsId, u8 a1, s16 x, s16 y, u8 z, u8 direction)
// Used to create sprite object events instead of a full object event
// Used when resources are limiting, e.g. for the audience in contests or group members in Union Room
u8 CreateObjectSprite(u8 graphicsId, u8 a1, s16 x, s16 y, u8 z, u8 direction)
{
u8 spriteId;
struct Sprite *sprite;
@@ -1533,11 +1537,11 @@ u8 sprite_new(u8 graphicsId, u8 a1, s16 x, s16 y, u8 z, u8 direction)
const struct ObjectEventGraphicsInfo *graphicsInfo;
graphicsInfo = GetObjectEventGraphicsInfo(graphicsId);
MakeObjectTemplateFromObjectEventGraphicsInfo(graphicsId, UpdateObjectEventSpriteSubpriorityAndVisibility, &spriteTemplate, &subspriteTables);
MakeObjectTemplateFromObjectEventGraphicsInfo(graphicsId, UpdateObjectEventSprite, &spriteTemplate, &subspriteTables);
*(u16 *)&spriteTemplate.paletteTag = 0xFFFF;
x += 7;
y += 7;
sub_80930E0(&x, &y, 8, 16);
SetSpritePosToOffsetMapCoords(&x, &y, 8, 16);
spriteId = CreateSpriteAtEnd(&spriteTemplate, x, y, 0);
if (spriteId != MAX_SPRITES)
{
@@ -2365,7 +2369,8 @@ static u8 GetObjectTrainerTypeByObjectEventId(u8 objectEventId)
return gObjectEvents[objectEventId].trainerType;
}
u8 sub_808F0D4(u8 localId, u8 mapNum, u8 mapGroup)
// Unused
u8 GetObjectEventBerryTreeIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup)
{
u8 objectEventId;
@@ -2376,7 +2381,7 @@ u8 sub_808F0D4(u8 localId, u8 mapNum, u8 mapGroup)
return gObjectEvents[objectEventId].trainerRange_berryTreeId;
}
u8 ObjectEventGetBerryTreeId(u8 objectEventId)
u8 GetObjectEventBerryTreeId(u8 objectEventId)
{
return gObjectEvents[objectEventId].trainerRange_berryTreeId;
}
@@ -4866,22 +4871,22 @@ void SetSpritePosToMapCoords(s16 mapX, s16 mapY, s16 *destX, s16 *destY)
s16 dx = -gTotalCameraPixelOffsetX - gFieldCamera.x;
s16 dy = -gTotalCameraPixelOffsetY - gFieldCamera.y;
if (gFieldCamera.x > 0)
dx += 1 << 4;
dx += 16;
if (gFieldCamera.x < 0)
dx -= 1 << 4;
dx -= 16;
if (gFieldCamera.y > 0)
dy += 1 << 4;
dy += 16;
if (gFieldCamera.y < 0)
dy -= 1 << 4;
dy -= 16;
*destX = ((mapX - gSaveBlock1Ptr->pos.x) << 4) + dx;
*destY = ((mapY - gSaveBlock1Ptr->pos.y) << 4) + dy;
}
void sub_80930E0(s16 *x, s16 *y, s16 dx, s16 dy)
void SetSpritePosToOffsetMapCoords(s16 *x, s16 *y, s16 dx, s16 dy)
{
SetSpritePosToMapCoords(*x, *y, x, y);
*x += dx;
@@ -8632,51 +8637,56 @@ void UpdateObjectEventSpriteVisibility(struct Sprite *sprite, bool8 invisible)
sprite->invisible = TRUE;
}
static void UpdateObjectEventSpriteSubpriorityAndVisibility(struct Sprite *sprite)
#define tInvisible data[2]
#define tAnimNum data[3]
#define tAnimState data[4]
static void UpdateObjectEventSprite(struct Sprite *sprite)
{
sub_8097D68(sprite);
UpdateObjectEventSpritePosition(sprite);
SetObjectSubpriorityByZCoord(sprite->data[1], sprite, 1);
UpdateObjectEventSpriteVisibility(sprite, sprite->data[2]);
UpdateObjectEventSpriteVisibility(sprite, sprite->tInvisible);
}
void sub_8097AF0(void)
// Unused
static void DestroyObjectEventSprites(void)
{
int i;
for(i = 0; i < MAX_SPRITES; i++)
for (i = 0; i < MAX_SPRITES; i++)
{
struct Sprite *sprite = &gSprites[i];
if(sprite->inUse && sprite->callback == UpdateObjectEventSpriteSubpriorityAndVisibility)
if(sprite->inUse && sprite->callback == UpdateObjectEventSprite)
DestroySprite(sprite);
}
}
int sub_8097B2C(u8 var) // this should return a u8, because all that call this shifts to u8, but it wont match because it doesnt shift u8 at the end.
static int GetObjectEventSpriteId(u8 var) // this should return a u8, because all that call this shifts to u8, but it wont match because it doesnt shift u8 at the end.
{
int i;
for(i = 0; i < MAX_SPRITES; i++)
for (i = 0; i < MAX_SPRITES; i++)
{
struct Sprite *sprite = &gSprites[i];
if(sprite->inUse && sprite->callback == UpdateObjectEventSpriteSubpriorityAndVisibility && (u8)sprite->data[0] == var)
if(sprite->inUse && sprite->callback == UpdateObjectEventSprite && (u8)sprite->data[0] == var)
return i;
}
return MAX_SPRITES;
}
void sub_8097B78(u8 var1, u8 var2)
void TurnObjectEventSprite(u8 objectEventId, u8 direction)
{
u8 spriteId = sub_8097B2C(var1);
u8 spriteId = GetObjectEventSpriteId(objectEventId);
if(spriteId != MAX_SPRITES)
StartSpriteAnim(&gSprites[spriteId], GetFaceDirectionAnimNum(var2));
if (spriteId != MAX_SPRITES)
StartSpriteAnim(&gSprites[spriteId], GetFaceDirectionAnimNum(direction));
}
void sub_8097BB4(u8 var1, u8 graphicsId)
void SetObjectEventSpriteGraphics(u8 objectEventId, u8 graphicsId)
{
int spriteId = sub_8097B2C(var1);
int spriteId = GetObjectEventSpriteId(objectEventId);
if(spriteId != MAX_SPRITES)
if (spriteId != MAX_SPRITES)
{
struct Sprite *sprite = &gSprites[spriteId];
const struct ObjectEventGraphicsInfo *graphicsInfo = GetObjectEventGraphicsInfo(graphicsId);
@@ -8687,7 +8697,7 @@ void sub_8097BB4(u8 var1, u8 graphicsId)
sprite->oam.paletteNum = graphicsInfo->paletteSlot;
sprite->images = graphicsInfo->images;
if(graphicsInfo->subspriteTables == NULL)
if (graphicsInfo->subspriteTables == NULL)
{
sprite->subspriteTables = NULL;
sprite->subspriteTableNum = 0;
@@ -8702,102 +8712,102 @@ void sub_8097BB4(u8 var1, u8 graphicsId)
}
}
void sub_8097C44(u8 var, bool32 var2)
void SetObjectEventSpriteInvisibility(u8 objectEventId, bool32 invisible)
{
u8 spriteId = sub_8097B2C(var);
u8 spriteId = GetObjectEventSpriteId(objectEventId);
if(spriteId == MAX_SPRITES)
if (spriteId == MAX_SPRITES)
return;
if(var2)
gSprites[spriteId].data[2] = 1;
if (invisible)
gSprites[spriteId].tInvisible = TRUE;
else
gSprites[spriteId].data[2] = 0;
gSprites[spriteId].tInvisible = FALSE;
}
bool32 sub_8097C8C(u8 var)
bool32 IsObjectEventSpriteInvisible(u8 objectEventId)
{
u8 spriteId = sub_8097B2C(var);
u8 spriteId = GetObjectEventSpriteId(objectEventId);
if(spriteId == MAX_SPRITES)
if (spriteId == MAX_SPRITES)
return FALSE;
return (gSprites[spriteId].data[2] == TRUE);
return (gSprites[spriteId].tInvisible == TRUE);
}
void sub_8097CC4(u8 var1, u8 var2)
void SetObjectEventSpriteAnim(u8 objectEventId, u8 animNum)
{
u8 spriteId = sub_8097B2C(var1);
u8 spriteId = GetObjectEventSpriteId(objectEventId);
if(spriteId != MAX_SPRITES)
if (spriteId != MAX_SPRITES)
{
gSprites[spriteId].data[3] = var2;
gSprites[spriteId].data[4] = 0;
gSprites[spriteId].tAnimNum = animNum;
gSprites[spriteId].tAnimState = 0;
}
}
void sub_8097CF4(struct Sprite *sprite)
static void MoveUnionRoomObjectUp(struct Sprite *sprite)
{
switch(sprite->data[4])
switch(sprite->tAnimState)
{
case 0:
sprite->pos2.y = 0;
sprite->data[4]++;
sprite->tAnimState++;
case 1:
sprite->pos2.y -= 8;
if(sprite->pos2.y == -160)
if (sprite->pos2.y == -160)
{
sprite->pos2.y = 0;
sprite->data[2] = 1;
sprite->data[3] = 0;
sprite->data[4] = 0;
sprite->tInvisible = TRUE;
sprite->tAnimNum = 0;
sprite->tAnimState = 0;
}
}
}
void sub_8097D30(struct Sprite *sprite)
static void MoveUnionRoomObjectDown(struct Sprite *sprite)
{
switch(sprite->data[4])
switch(sprite->tAnimState)
{
case 0:
sprite->pos2.y = -160;
sprite->data[4]++;
sprite->tAnimState++;
case 1:
sprite->pos2.y += 8;
if(sprite->pos2.y == 0)
{
sprite->data[3] = 0;
sprite->data[4] = 0;
sprite->tAnimNum = 0;
sprite->tAnimState = 0;
}
}
}
static void sub_8097D68(struct Sprite *sprite)
static void UpdateObjectEventSpritePosition(struct Sprite *sprite)
{
switch(sprite->data[3])
switch(sprite->tAnimNum)
{
case 1:
sub_8097D30(sprite);
case UNION_ROOM_SPAWN_IN:
MoveUnionRoomObjectDown(sprite);
break;
case 2:
sub_8097CF4(sprite);
case UNION_ROOM_SPAWN_OUT:
MoveUnionRoomObjectUp(sprite);
break;
case 0:
break;
default:
sprite->data[3] = 0;
sprite->tAnimNum = 0;
break;
}
}
bool32 sub_8097D9C(u8 var)
bool32 IsObjectEventSpriteAnimating(u8 var)
{
u8 spriteId = sub_8097B2C(var);
u8 spriteId = GetObjectEventSpriteId(var);
if(spriteId == MAX_SPRITES)
if (spriteId == MAX_SPRITES)
return FALSE;
if(gSprites[spriteId].data[3] != FALSE)
if (gSprites[spriteId].tAnimNum != 0)
return TRUE;
return FALSE;