mirror of https://github.com/zeldaret/tmc.git
label some asm functions
This commit is contained in:
parent
d07c416641
commit
72509b18a0
|
@ -10,41 +10,43 @@ CheckBits: @ 0x08000F10
|
||||||
ldr r3, _08000F50 @ =ram_CheckBits
|
ldr r3, _08000F50 @ =ram_CheckBits
|
||||||
bx r3
|
bx r3
|
||||||
|
|
||||||
thumb_func_start sub_08000F14
|
// sum 3 drop probability vectors
|
||||||
sub_08000F14: @ 0x08000F14
|
thumb_func_start SumDropProbabilities
|
||||||
|
SumDropProbabilities: @ 0x08000F14
|
||||||
push {r4, r5, r6}
|
push {r4, r5, r6}
|
||||||
movs r4, #0x1e
|
movs r4, #30 // vector addition for 16 shorts in reverse
|
||||||
_08000F18:
|
_08000F18:
|
||||||
ldrsh r5, [r1, r4]
|
ldrsh r5, [r1, r4] // row 1
|
||||||
ldrsh r6, [r2, r4]
|
ldrsh r6, [r2, r4] // + row 2
|
||||||
adds r5, r5, r6
|
adds r5, r6
|
||||||
ldrsh r6, [r3, r4]
|
ldrsh r6, [r3, r4] // + row 3
|
||||||
adds r5, r5, r6
|
adds r5, r6
|
||||||
strh r5, [r0, r4]
|
strh r5, [r0, r4] // store in output
|
||||||
subs r4, #2
|
subs r4, #2
|
||||||
bpl _08000F18
|
bpl _08000F18
|
||||||
pop {r4, r5, r6}
|
pop {r4, r5, r6}
|
||||||
bx lr
|
bx lr
|
||||||
|
|
||||||
thumb_func_start sub_08000F2C
|
// sum 3 drop probabilities, clamp to 0, return scalar sum
|
||||||
sub_08000F2C: @ 0x08000F2C
|
thumb_func_start SumDropProbabilities2
|
||||||
|
SumDropProbabilities2: @ 0x08000F2C
|
||||||
push {r4, r5, r6, r7}
|
push {r4, r5, r6, r7}
|
||||||
movs r4, #0x1e
|
movs r4, #30
|
||||||
movs r7, #0
|
movs r7, #0 // sum
|
||||||
_08000F32:
|
_08000F32:
|
||||||
ldrsh r5, [r1, r4]
|
ldrsh r5, [r1, r4] // row 1
|
||||||
ldrsh r6, [r2, r4]
|
ldrsh r6, [r2, r4] // + row 2
|
||||||
adds r5, r5, r6
|
adds r5, r6
|
||||||
ldrsh r6, [r3, r4]
|
ldrsh r6, [r3, r4] // + row 3
|
||||||
adds r5, r5, r6
|
adds r5, r6
|
||||||
bpl _08000F40
|
bpl positive_drop_chance // clamp to 0
|
||||||
movs r5, #0
|
movs r5, #0
|
||||||
_08000F40:
|
positive_drop_chance:
|
||||||
strh r5, [r0, r4]
|
strh r5, [r0, r4] // store in output
|
||||||
adds r7, r7, r5
|
adds r7, r5
|
||||||
subs r4, #2
|
subs r4, #2
|
||||||
bpl _08000F32
|
bpl _08000F32
|
||||||
adds r0, r7, #0
|
adds r0, r7, #0 // return sum
|
||||||
pop {r4, r5, r6, r7}
|
pop {r4, r5, r6, r7}
|
||||||
bx lr
|
bx lr
|
||||||
.align 2, 0
|
.align 2, 0
|
||||||
|
|
|
@ -6,7 +6,9 @@
|
||||||
#include "color.h"
|
#include "color.h"
|
||||||
#include "sprite.h"
|
#include "sprite.h"
|
||||||
|
|
||||||
#define MAX_ENTITIES 71
|
#define MAX_ENTITIES 72
|
||||||
|
#define MAX_MANAGERS 32
|
||||||
|
#define MAX_AUX_PLAYER_ENTITIES 7
|
||||||
|
|
||||||
/** Kinds of Entity's supported by the game. */
|
/** Kinds of Entity's supported by the game. */
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
@ -38,6 +40,8 @@ typedef enum {
|
||||||
typedef enum {
|
typedef enum {
|
||||||
ENT_DID_INIT = 0x1, /**< Graphics and other data loaded. */
|
ENT_DID_INIT = 0x1, /**< Graphics and other data loaded. */
|
||||||
ENT_SCRIPTED = 0x2, /**< Execute in a scripted environment. */
|
ENT_SCRIPTED = 0x2, /**< Execute in a scripted environment. */
|
||||||
|
ENT_UNUSED1 = 0x4, /**< Unused delete flag. */
|
||||||
|
ENT_UNUSED2 = 0x8, /**< Unused delete flag. */
|
||||||
ENT_DELETED = 0x10, /**< Queue deletion next frame. */
|
ENT_DELETED = 0x10, /**< Queue deletion next frame. */
|
||||||
ENT_PERSIST = 0x20, /**< Persist between rooms. */
|
ENT_PERSIST = 0x20, /**< Persist between rooms. */
|
||||||
ENT_COLLIDE = 0x80, /**< Collide with other Entity's. */
|
ENT_COLLIDE = 0x80, /**< Collide with other Entity's. */
|
||||||
|
@ -238,6 +242,15 @@ typedef struct LinkedList {
|
||||||
Entity* first;
|
Entity* first;
|
||||||
} LinkedList;
|
} LinkedList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* LinkedList's which point to allocate Entities.
|
||||||
|
* These work together with Entity.prev and Entity.next fields
|
||||||
|
* to allow the iteration of all Entity's.
|
||||||
|
*/
|
||||||
|
extern LinkedList gEntityLists[9];
|
||||||
|
extern Entity gAuxPlayerEntities[MAX_AUX_PLAYER_ENTITIES];
|
||||||
|
extern Entity gEntities[MAX_ENTITIES];
|
||||||
|
|
||||||
typedef void(EntityAction)(Entity*);
|
typedef void(EntityAction)(Entity*);
|
||||||
typedef void (*EntityActionPtr)(Entity*);
|
typedef void (*EntityActionPtr)(Entity*);
|
||||||
typedef void (*const* EntityActionArray)(Entity*);
|
typedef void (*const* EntityActionArray)(Entity*);
|
||||||
|
@ -283,7 +296,7 @@ Entity* CreateEnemy(u32 id, u32 type);
|
||||||
Entity* CreateNPC(u32 id, u32 type, u32 type2);
|
Entity* CreateNPC(u32 id, u32 type, u32 type2);
|
||||||
Entity* CreateObject(u32 id, u32 type, u32 type2);
|
Entity* CreateObject(u32 id, u32 type, u32 type2);
|
||||||
Entity* CreateObjectWithParent(Entity* parent, u32 id, u32 type, u32 type2);
|
Entity* CreateObjectWithParent(Entity* parent, u32 id, u32 type, u32 type2);
|
||||||
Entity* CreateItemGetEntity(void);
|
Entity* CreateAuxPlayerEntity(void);
|
||||||
Entity* CreateFx(Entity* parent, u32 type, u32 type2);
|
Entity* CreateFx(Entity* parent, u32 type, u32 type2);
|
||||||
/// @}
|
/// @}
|
||||||
|
|
||||||
|
@ -484,14 +497,6 @@ void ClearEventPriority(void);
|
||||||
|
|
||||||
void sub_0805E958(void);
|
void sub_0805E958(void);
|
||||||
|
|
||||||
/**
|
|
||||||
* LinkedList's which point to allocate Entities.
|
|
||||||
* These work together with Entity.prev and Entity.next fields
|
|
||||||
* to allow the iteration of all Entity's.
|
|
||||||
*/
|
|
||||||
extern LinkedList gEntityLists[9];
|
|
||||||
extern Entity gItemGetEntities[7];
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
u8 unk_0;
|
u8 unk_0;
|
||||||
u8 unk_1;
|
u8 unk_1;
|
||||||
|
|
|
@ -192,7 +192,7 @@ static_assert(sizeof(gActiveItems) == 0x70);
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
u8 event_priority; // system requested priority
|
u8 event_priority; // system requested priority
|
||||||
u8 ent_priority; // entity requested priority
|
u8 ent_priority; // entity requested priority
|
||||||
u8 queued_priority;
|
u8 queued_priority;
|
||||||
u8 queued_priority_reset;
|
u8 queued_priority_reset;
|
||||||
Entity* requester;
|
Entity* requester;
|
||||||
|
|
|
@ -132,8 +132,8 @@ SECTIONS {
|
||||||
. = 0x000010A0; gRoomTransition = .;
|
. = 0x000010A0; gRoomTransition = .;
|
||||||
. = 0x00001150; gRand = .;
|
. = 0x00001150; gRand = .;
|
||||||
. = 0x00001160; gPlayerEntity = .;
|
. = 0x00001160; gPlayerEntity = .;
|
||||||
. = 0x000011E8; gItemGetEntities = .;
|
. = 0x000011E8; gAuxPlayerEntities = .;
|
||||||
. = 0x000015A0; gUnk_030015A0 = .;
|
. = 0x000015A0; gEntities = .;
|
||||||
. = 0x00003BE0; gCarriedEntity = .;
|
. = 0x00003BE0; gCarriedEntity = .;
|
||||||
. = 0x00003C70; gUnk_03003C70 = .;
|
. = 0x00003C70; gUnk_03003C70 = .;
|
||||||
. = 0x00003D70; gEntityLists = .;
|
. = 0x00003D70; gEntityLists = .;
|
||||||
|
|
|
@ -240,7 +240,7 @@ void AcroBandit_Type0Action5(Entity* this) {
|
||||||
|
|
||||||
GetNextFrame(this);
|
GetNextFrame(this);
|
||||||
if (this->frame & ANIM_DONE) {
|
if (this->frame & ANIM_DONE) {
|
||||||
if (gEntCount < MAX_ENTITIES - 4) {
|
if (gEntCount < MAX_ENTITIES - 5) {
|
||||||
u32 tmp = Random();
|
u32 tmp = Random();
|
||||||
tmp &= 3;
|
tmp &= 3;
|
||||||
|
|
||||||
|
|
|
@ -81,7 +81,7 @@ void FireballGuy_Action2(Entity* this) {
|
||||||
|
|
||||||
/* Can we create enough new entities? */
|
/* Can we create enough new entities? */
|
||||||
count = typeEntityCount[this->type];
|
count = typeEntityCount[this->type];
|
||||||
if (MAX_ENTITIES + 1 - count <= gEntCount)
|
if (MAX_ENTITIES - count <= gEntCount)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* Create 2-5 new MiniFireballGuy */
|
/* Create 2-5 new MiniFireballGuy */
|
||||||
|
|
|
@ -105,7 +105,7 @@ void sub_080450A8(Entity* this) {
|
||||||
|
|
||||||
/* Can we create enough new entities? */
|
/* Can we create enough new entities? */
|
||||||
count = typeEntityCount[this->type];
|
count = typeEntityCount[this->type];
|
||||||
if (MAX_ENTITIES + 1 - count <= gEntCount)
|
if (MAX_ENTITIES - count <= gEntCount)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* Create 2-4 new MiniSlime */
|
/* Create 2-4 new MiniSlime */
|
||||||
|
|
36
src/entity.c
36
src/entity.c
|
@ -6,6 +6,12 @@
|
||||||
#include "npc.h"
|
#include "npc.h"
|
||||||
#include "manager/diggingCaveEntranceManager.h"
|
#include "manager/diggingCaveEntranceManager.h"
|
||||||
|
|
||||||
|
typedef struct Temp {
|
||||||
|
void* prev;
|
||||||
|
void* next;
|
||||||
|
u8 _0[0x38];
|
||||||
|
} Temp;
|
||||||
|
|
||||||
extern u8 gUpdateVisibleTiles;
|
extern u8 gUpdateVisibleTiles;
|
||||||
extern Manager gUnk_02033290;
|
extern Manager gUnk_02033290;
|
||||||
void UpdatePlayerInput(void);
|
void UpdatePlayerInput(void);
|
||||||
|
@ -241,8 +247,6 @@ void EraseAllEntities(void) {
|
||||||
gOAMControls.unk[1].unk6 = 1;
|
gOAMControls.unk[1].unk6 = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern Entity gUnk_030015A0[0x48];
|
|
||||||
|
|
||||||
Entity* GetEmptyEntity() {
|
Entity* GetEmptyEntity() {
|
||||||
u8 flags_ip;
|
u8 flags_ip;
|
||||||
Entity* end;
|
Entity* end;
|
||||||
|
@ -253,9 +257,9 @@ Entity* GetEmptyEntity() {
|
||||||
LinkedList* listPtr;
|
LinkedList* listPtr;
|
||||||
LinkedList* endListPtr;
|
LinkedList* endListPtr;
|
||||||
|
|
||||||
if (gEntCount <= 0x46) {
|
if (gEntCount < MAX_ENTITIES - 1) {
|
||||||
currentEnt = gUnk_030015A0;
|
currentEnt = gEntities;
|
||||||
end = currentEnt + ARRAY_COUNT(gUnk_030015A0);
|
end = currentEnt + ARRAY_COUNT(gEntities);
|
||||||
|
|
||||||
do {
|
do {
|
||||||
if (currentEnt->prev == 0) {
|
if (currentEnt->prev == 0) {
|
||||||
|
@ -267,7 +271,8 @@ Entity* GetEmptyEntity() {
|
||||||
currentEnt = &gPlayerEntity;
|
currentEnt = &gPlayerEntity;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
if ((s32)currentEnt->prev < 0 && (currentEnt->flags & 0xc) && currentEnt != gUpdateContext.current_entity) {
|
if ((s32)currentEnt->prev < 0 && (currentEnt->flags & (ENT_UNUSED1 | ENT_UNUSED2)) &&
|
||||||
|
currentEnt != gUpdateContext.current_entity) {
|
||||||
ClearDeletedEntity(currentEnt);
|
ClearDeletedEntity(currentEnt);
|
||||||
return currentEnt;
|
return currentEnt;
|
||||||
}
|
}
|
||||||
|
@ -282,9 +287,10 @@ Entity* GetEmptyEntity() {
|
||||||
currentEnt = listPtr->first;
|
currentEnt = listPtr->first;
|
||||||
nextList = listPtr + 1;
|
nextList = listPtr + 1;
|
||||||
while ((u32)currentEnt != (u32)listPtr) {
|
while ((u32)currentEnt != (u32)listPtr) {
|
||||||
if (currentEnt->kind != MANAGER && flags_ip < (currentEnt->flags & 0x1c) &&
|
if (currentEnt->kind != MANAGER &&
|
||||||
|
flags_ip < (currentEnt->flags & (ENT_UNUSED1 | ENT_UNUSED2 | ENT_DELETED)) &&
|
||||||
gUpdateContext.current_entity != currentEnt) {
|
gUpdateContext.current_entity != currentEnt) {
|
||||||
flags_ip = currentEnt->flags & 0x1c;
|
flags_ip = currentEnt->flags & (ENT_UNUSED1 | ENT_UNUSED2 | ENT_DELETED);
|
||||||
rv = currentEnt;
|
rv = currentEnt;
|
||||||
}
|
}
|
||||||
currentEnt = currentEnt->next;
|
currentEnt = currentEnt->next;
|
||||||
|
@ -301,16 +307,16 @@ Entity* GetEmptyEntity() {
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern Entity gItemGetEntities[7];
|
extern Entity gAuxPlayerEntities[7];
|
||||||
|
|
||||||
Entity* CreateItemGetEntity(void) {
|
Entity* CreateAuxPlayerEntity(void) {
|
||||||
Entity* ent = gItemGetEntities;
|
Entity* ent = gAuxPlayerEntities;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
if (ent->prev == NULL) {
|
if (ent->prev == NULL) {
|
||||||
return ent;
|
return ent;
|
||||||
}
|
}
|
||||||
} while (++ent < &gItemGetEntities[7]);
|
} while (++ent < &gAuxPlayerEntities[7]);
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -407,12 +413,6 @@ void DeleteAllEntities(void) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef struct Temp {
|
|
||||||
void* prev;
|
|
||||||
void* next;
|
|
||||||
u8 _0[0x38];
|
|
||||||
} Temp;
|
|
||||||
|
|
||||||
// fix this
|
// fix this
|
||||||
Manager* GetEmptyManager(void) {
|
Manager* GetEmptyManager(void) {
|
||||||
Temp* it;
|
Temp* it;
|
||||||
|
|
|
@ -403,8 +403,8 @@ void EnableRandomDrops(void) {
|
||||||
gRoomVars.randomDropsDisabled = FALSE;
|
gRoomVars.randomDropsDisabled = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern void sub_08000F14(s16*, const s16*, const s16*, const s16*);
|
extern void SumDropProbabilities(s16*, const s16*, const s16*, const s16*);
|
||||||
extern u32 sub_08000F2C(s16*, const s16*, const s16*, const s16*);
|
extern u32 SumDropProbabilities2(s16*, const s16*, const s16*, const s16*);
|
||||||
u32 CreateItemDrop(Entity* arg0, u32 itemId, u32 itemParameter);
|
u32 CreateItemDrop(Entity* arg0, u32 itemId, u32 itemParameter);
|
||||||
u32 CreateRandomItemDrop(Entity* arg0, u32 arg1) {
|
u32 CreateRandomItemDrop(Entity* arg0, u32 arg1) {
|
||||||
extern const u8 gUnk_080FE1B4[] /* = {
|
extern const u8 gUnk_080FE1B4[] /* = {
|
||||||
|
@ -459,7 +459,7 @@ u32 CreateRandomItemDrop(Entity* arg0, u32 arg1) {
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
// vector addition, s0 = ptr4 + ptr2 + ptr3
|
// vector addition, s0 = ptr4 + ptr2 + ptr3
|
||||||
sub_08000F14(droptable.a, ptr4->a, ptr2->a, ptr3->a);
|
SumDropProbabilities(droptable.a, ptr4->a, ptr2->a, ptr3->a);
|
||||||
if (gSave.stats.health <= 8) {
|
if (gSave.stats.health <= 8) {
|
||||||
droptable.s.hearts += 5;
|
droptable.s.hearts += 5;
|
||||||
}
|
}
|
||||||
|
@ -486,7 +486,7 @@ u32 CreateRandomItemDrop(Entity* arg0, u32 arg1) {
|
||||||
// vector addition, s0 = s0 + ptr2 + ptr3
|
// vector addition, s0 = s0 + ptr2 + ptr3
|
||||||
// resulting values are clamped to be >= 0
|
// resulting values are clamped to be >= 0
|
||||||
// returns sum over s0
|
// returns sum over s0
|
||||||
summOdds = sub_08000F2C(droptable.a, droptable.a, ptr2->a, ptr3->a);
|
summOdds = SumDropProbabilities2(droptable.a, droptable.a, ptr2->a, ptr3->a);
|
||||||
rand = Random();
|
rand = Random();
|
||||||
item = (rand >> 0x18);
|
item = (rand >> 0x18);
|
||||||
item &= 0xF;
|
item &= 0xF;
|
||||||
|
|
|
@ -96,7 +96,7 @@ void sub_080921BC(GentariCurtainEntity* this) {
|
||||||
GenericEntity* pEVar1;
|
GenericEntity* pEVar1;
|
||||||
GenericEntity* end;
|
GenericEntity* end;
|
||||||
|
|
||||||
pEVar1 = (GenericEntity*)gItemGetEntities;
|
pEVar1 = (GenericEntity*)gAuxPlayerEntities;
|
||||||
end = pEVar1 + 0x4f;
|
end = pEVar1 + 0x4f;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
|
|
|
@ -31,7 +31,7 @@ const s8 gUnk_08126EEC[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
Entity* CreateLinkAnimation(Entity* parent, u32 type, u32 type2) {
|
Entity* CreateLinkAnimation(Entity* parent, u32 type, u32 type2) {
|
||||||
Entity* e = CreateItemGetEntity();
|
Entity* e = CreateAuxPlayerEntity();
|
||||||
if (e != NULL) {
|
if (e != NULL) {
|
||||||
LinkAnimationEntity* this = (LinkAnimationEntity*)e;
|
LinkAnimationEntity* this = (LinkAnimationEntity*)e;
|
||||||
e->id = LINK_ANIMATION;
|
e->id = LINK_ANIMATION;
|
||||||
|
|
|
@ -36,7 +36,7 @@ static Entity* GiveItemWithCutscene(u32 item, u32 type2, u32 delay) {
|
||||||
item = ITEM_RUPEE50;
|
item = ITEM_RUPEE50;
|
||||||
type2 = 0;
|
type2 = 0;
|
||||||
}
|
}
|
||||||
e = CreateItemGetEntity();
|
e = CreateAuxPlayerEntity();
|
||||||
if (e != NULL) {
|
if (e != NULL) {
|
||||||
e->type = item;
|
e->type = item;
|
||||||
e->type2 = type2;
|
e->type2 = type2;
|
||||||
|
|
|
@ -462,7 +462,7 @@ Entity* CreatePlayerItemWithParent(ItemBehavior* this, u32 id) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void* CreateItemGetPlayerItemWithParent(ItemBehavior* this) {
|
void* CreateItemGetPlayerItemWithParent(ItemBehavior* this) {
|
||||||
GenericEntity* playerItem = (GenericEntity*)CreateItemGetEntity();
|
GenericEntity* playerItem = (GenericEntity*)CreateAuxPlayerEntity();
|
||||||
if (playerItem != NULL) {
|
if (playerItem != NULL) {
|
||||||
playerItem->base.id = gItemDefinitions[this->behaviorId].playerItemId;
|
playerItem->base.id = gItemDefinitions[this->behaviorId].playerItemId;
|
||||||
playerItem->base.kind = PLAYER_ITEM;
|
playerItem->base.kind = PLAYER_ITEM;
|
||||||
|
@ -501,7 +501,7 @@ Entity* CreatePlayerItem(u32 id, u32 type, u32 type2, u32 unk) {
|
||||||
Entity* sub_08077CF8(u32 id, u32 type, u32 type2, u32 unk) {
|
Entity* sub_08077CF8(u32 id, u32 type, u32 type2, u32 unk) {
|
||||||
GenericEntity* ent;
|
GenericEntity* ent;
|
||||||
|
|
||||||
ent = (GenericEntity*)CreateItemGetEntity();
|
ent = (GenericEntity*)CreateAuxPlayerEntity();
|
||||||
if (ent != NULL) {
|
if (ent != NULL) {
|
||||||
ent->base.flags = ENT_COLLIDE;
|
ent->base.flags = ENT_COLLIDE;
|
||||||
ent->base.kind = PLAYER_ITEM;
|
ent->base.kind = PLAYER_ITEM;
|
||||||
|
|
3
src/ui.c
3
src/ui.c
|
@ -626,7 +626,8 @@ void ButtonUIElement_Action1(UIElement* element) {
|
||||||
|
|
||||||
MAX_MOVEMENT = (!element->type2) ? 4 : 8;
|
MAX_MOVEMENT = (!element->type2) ? 4 : 8;
|
||||||
|
|
||||||
if (element->type2 == 0 && (((gUnk_0200AF00.unk_1 >> element->type) & 1) || (gMessage.state & MESSAGE_ACTIVE) != 0)) {
|
if (element->type2 == 0 &&
|
||||||
|
(((gUnk_0200AF00.unk_1 >> element->type) & 1) || (gMessage.state & MESSAGE_ACTIVE) != 0)) {
|
||||||
y = (s16)gUnk_0200AF00.buttonY[element->type] - 0x28;
|
y = (s16)gUnk_0200AF00.buttonY[element->type] - 0x28;
|
||||||
} else {
|
} else {
|
||||||
y = (s16)gUnk_0200AF00.buttonY[element->type];
|
y = (s16)gUnk_0200AF00.buttonY[element->type];
|
||||||
|
|
Loading…
Reference in New Issue