mirror of
https://github.com/zeldaret/tmc
synced 2026-07-08 22:44:46 -04:00
Merge branch 'master' into pot
This commit is contained in:
@@ -56,4 +56,21 @@ void sub_08045654(Entity *this)
|
||||
if (sub_08003FC4(this, 0x1800) == 0) {
|
||||
sub_08045678(this);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08045678(Entity *this)
|
||||
{
|
||||
|
||||
this->field_0x20 = 0x1c000;
|
||||
if (this->actionDelay != 0) {
|
||||
this->actionDelay--;
|
||||
} else {
|
||||
this->actionDelay = Random() & 3;
|
||||
if ((sub_08049FA0(this) == 0) && (Random() & 3)) {
|
||||
this->direction = (sub_08049EE4(this) - 4 + (Random() & 8)) & 0x18;
|
||||
}
|
||||
else {
|
||||
this->direction = Random() & 0x18;
|
||||
}
|
||||
}
|
||||
}
|
||||
+123
@@ -0,0 +1,123 @@
|
||||
#include "global.h"
|
||||
#include "entity.h"
|
||||
#include "functions.h"
|
||||
#include "textbox.h"
|
||||
|
||||
typedef struct {
|
||||
s8 unk0;
|
||||
u8 unk1;
|
||||
u8 unk2;
|
||||
u8 unk3;
|
||||
u8 unk4;
|
||||
u8 unk5;
|
||||
u8 unk6;
|
||||
u8 unk7;
|
||||
u8 unk8;
|
||||
u8 unk9;
|
||||
u8 unkA;
|
||||
u8 unkB;
|
||||
u16 unkC;
|
||||
u16 unkE;
|
||||
u16 unk10;
|
||||
u8 unk12;
|
||||
u8 unk13;
|
||||
} Element;
|
||||
|
||||
typedef struct {
|
||||
u8 unk0[0x24];
|
||||
u8 ezloNagFuncIndex;
|
||||
} struct_0200AF00;
|
||||
|
||||
extern struct_0200AF00 gUnk_0200AF00;
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
extern void sub_0805ECEC(u32, u32, u32, u32);
|
||||
extern void sub_0801CAD0(Element*);
|
||||
|
||||
extern void (*const gUnk_080C904C[])(Element*);
|
||||
|
||||
extern u16 gUnk_080C9058[];
|
||||
|
||||
void EzloNag(Element* arg0) {
|
||||
gUnk_080C904C[arg0->unk4](arg0);
|
||||
}
|
||||
|
||||
#ifdef NON_MATCHING // REG SWAP
|
||||
extern u32 gUnk_080C9094;
|
||||
|
||||
void sub_0801CED8(Element* arg0) {
|
||||
if (gUnk_0200AF00.ezloNagFuncIndex == 1) {
|
||||
gUnk_0200AF00.ezloNagFuncIndex = 2;
|
||||
arg0->unkC = 0x10;
|
||||
arg0->unkE = 0x90;
|
||||
arg0->unk6 = 0;
|
||||
arg0->unk1 = 7;
|
||||
arg0->unk4 = 1;
|
||||
arg0->unk0 |= 2;
|
||||
sub_0801CAB8(arg0, &gUnk_080C9094);
|
||||
}
|
||||
}
|
||||
#else
|
||||
NAKED
|
||||
void sub_0801CED8(Element* arg0) {
|
||||
asm_unified("\
|
||||
push {r4, lr}\n\
|
||||
adds r3, r0, #0\n\
|
||||
ldr r0, _0801CF10 @ =gUnk_0200AF00\n\
|
||||
adds r1, r0, #0\n\
|
||||
adds r1, #0x24\n\
|
||||
ldrb r4, [r1]\n\
|
||||
cmp r4, #1\n\
|
||||
bne _0801CF0E\n\
|
||||
movs r2, #2\n\
|
||||
movs r0, #2\n\
|
||||
strb r0, [r1]\n\
|
||||
movs r1, #0\n\
|
||||
movs r0, #0x10\n\
|
||||
strh r0, [r3, #0xc]\n\
|
||||
movs r0, #0x90\n\
|
||||
strh r0, [r3, #0xe]\n\
|
||||
strb r1, [r3, #6]\n\
|
||||
movs r0, #7\n\
|
||||
strb r0, [r3, #1]\n\
|
||||
strb r4, [r3, #4]\n\
|
||||
ldrb r0, [r3]\n\
|
||||
orrs r0, r2\n\
|
||||
strb r0, [r3]\n\
|
||||
ldr r1, _0801CF14 @ =gUnk_080C9094\n\
|
||||
adds r0, r3, #0\n\
|
||||
bl sub_0801CAB8\n\
|
||||
_0801CF0E:\n\
|
||||
pop {r4, pc}\n\
|
||||
.align 2, 0\n\
|
||||
_0801CF10: .4byte gUnk_0200AF00\n\
|
||||
_0801CF14: .4byte gUnk_080C9094");
|
||||
}
|
||||
#endif
|
||||
|
||||
void sub_0801CF18(Element* arg0) {
|
||||
u32 temp;
|
||||
|
||||
temp = gUnk_080C9058[arg0->unk6++];
|
||||
sub_0805ECEC(0, temp, temp, 0);
|
||||
if (temp == 0) {
|
||||
arg0->unk4 = 2;
|
||||
arg0->unk1 = 8;
|
||||
gUnk_0200AF00.ezloNagFuncIndex = 3;
|
||||
PlaySFX(0x173);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0801CF60(Element* arg0) {
|
||||
|
||||
if ((gUnk_0200AF00.ezloNagFuncIndex >= 5) || (gTextBox.doTextBox & 0x7f)) {
|
||||
arg0->unk4 = 0;
|
||||
arg0->unk0 &= -3;
|
||||
return;
|
||||
}
|
||||
sub_0801CAD0(arg0);
|
||||
if (arg0->unk13 == 1) {
|
||||
gUnk_0200AF00.ezloNagFuncIndex = 4;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,168 @@
|
||||
#include "global.h"
|
||||
#include "entity.h"
|
||||
#include "player.h"
|
||||
#include "manager.h"
|
||||
#include "flags.h"
|
||||
#include "area.h"
|
||||
|
||||
|
||||
extern void (*gUnk_081081F4[])(Manager*);
|
||||
|
||||
void sub_08058380(Manager* this) {
|
||||
gUnk_081081F4[this->unk_0c](this);
|
||||
}
|
||||
|
||||
|
||||
|
||||
extern void sub_0805E3A0(Manager*, u32);
|
||||
|
||||
void sub_08058398(Manager* this) {
|
||||
|
||||
if (CheckFlags(this->unk_3c) != 0) {
|
||||
DeleteThisEntity();
|
||||
}
|
||||
this->unk_24 = this->unk_3a<<3;
|
||||
this->unk_26 = this->unk_3b<<3;
|
||||
this->unk_20 = this->unk_24 + (this->unk_38<<4);
|
||||
this->unk_22 = this->unk_26 + (this->unk_39<<4);
|
||||
sub_0805E3A0(this, 0x06);
|
||||
if (this->unk_3e == 0) {
|
||||
this->unk_0c = 2;
|
||||
} else {
|
||||
this->unk_0c = 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void sub_08058408(Manager*);
|
||||
|
||||
void sub_080583EC(Manager* this) {
|
||||
if (CheckFlags(this->unk_3e) != 0) {
|
||||
this->unk_0c = 2;
|
||||
sub_08058408(this);
|
||||
}
|
||||
}
|
||||
|
||||
extern u32 CheckPlayerInRegion(u32, u32, u32, u32);
|
||||
extern void sub_0805E544(void);
|
||||
extern void sub_08078A90(u32);
|
||||
extern void sub_08078AA8(u32, u32);
|
||||
extern void sub_080186C0(u16);
|
||||
extern void sub_08078B48(void);
|
||||
|
||||
u32 sub_0805848C(Manager*);
|
||||
void sub_080585DC(Manager*);
|
||||
|
||||
void sub_08058408(Manager* this){
|
||||
u32 tmp2;
|
||||
tmp2 = (gPlayerState.flags.all & 0x08);
|
||||
if (tmp2 != 0) return;
|
||||
if (!CheckPlayerInRegion(this->unk_20, this->unk_22, this->unk_24, this->unk_26)) return;
|
||||
switch (this->unk_0a) {
|
||||
case 1:
|
||||
return;
|
||||
case 2:
|
||||
sub_080585DC(this);
|
||||
if ((gPlayerState.flags.all & 0x80) == 0) return;
|
||||
case 0:
|
||||
default:
|
||||
sub_080585DC(this);
|
||||
if (sub_0805848C(this) == 0) return;
|
||||
sub_08078A90(3);
|
||||
sub_08078B48();
|
||||
sub_0805E544();
|
||||
this->unk_0c = 3;
|
||||
this->unk_0d = 0;
|
||||
this->unk_0e = 0x1e;
|
||||
return;
|
||||
case 3:
|
||||
this->unk_0c = 4;
|
||||
this->unk_0d = tmp2;
|
||||
sub_080186C0(this->unk_36);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
u32 sub_0805848C(Manager* this) {
|
||||
switch (gPlayerState.field_0xa8[0]-5) {
|
||||
case 0:
|
||||
case 2:
|
||||
case 3:
|
||||
case 5:
|
||||
case 6:
|
||||
case 7:
|
||||
case 8:
|
||||
case 9:
|
||||
case 10:
|
||||
case 11:
|
||||
case 12:
|
||||
case 13:
|
||||
case 14:
|
||||
case 15:
|
||||
case 16:
|
||||
case 17:
|
||||
case 18:
|
||||
case 19:
|
||||
case 22:
|
||||
case 23:
|
||||
return 0;
|
||||
case 1:
|
||||
case 4:
|
||||
case 20:
|
||||
case 21:
|
||||
default:
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
extern void UnfreezeTime(void);
|
||||
|
||||
void sub_08058514(Manager* this) {
|
||||
switch (this->unk_0d) {
|
||||
case 1:
|
||||
if ((gPlayerState.flags.all & 0x1235) != 0)
|
||||
return;
|
||||
if (gPlayerEntity.height.HALF.HI != 0)
|
||||
return;
|
||||
gPlayerState.jumpStatus = 0;
|
||||
sub_08078AA8(this->unk_36, this->unk_35);
|
||||
this->unk_0d++;
|
||||
this->unk_0e = 0x1E;
|
||||
return;
|
||||
case 0:
|
||||
case 2:
|
||||
if (((--this->unk_0e)<<0x18) == 0) {
|
||||
this->unk_0d++;
|
||||
}
|
||||
return;
|
||||
case 3:
|
||||
if (gPlayerEntity.action != 1 && gPlayerEntity.action != 9) return;
|
||||
gPlayerState.field_0x8b = 1;
|
||||
UnfreezeTime();
|
||||
SetFlag(this->unk_3c);
|
||||
DeleteThisEntity();
|
||||
return;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
extern void sub_0801855C(void);
|
||||
|
||||
void sub_080585B0(Manager* this) {
|
||||
if (gArea.filler4[0] != 0xFF) {
|
||||
DeleteThisEntity();
|
||||
}
|
||||
if (CheckFlags(this->unk_3c)) {
|
||||
sub_0801855C();
|
||||
DeleteThisEntity();
|
||||
}
|
||||
}
|
||||
void sub_080585DC(Manager* this) {
|
||||
if (CheckFlags(this->unk_3c)) {
|
||||
DeleteThisEntity();
|
||||
}
|
||||
}
|
||||
@@ -9,7 +9,6 @@
|
||||
#include "readKeyInput.h"
|
||||
#include "structures.h"
|
||||
|
||||
extern bool32 sub_080AE008(Entity*, int, int);
|
||||
extern int sub_0807A094(int);
|
||||
extern u32 sub_0801D754(const u8*, u8, u8);
|
||||
extern u32 sub_080041EC(int, int);
|
||||
|
||||
+1
-1
@@ -38,7 +38,7 @@ void sub_0808222C(Entity* this) {
|
||||
this->boundingBox = &gUnk_080FD338;
|
||||
this->nonPlanarMovement = 0x80;
|
||||
this->y.HALF.HI += 3;
|
||||
this->possibleBool = 0;
|
||||
this->field_0x16 = 0;
|
||||
this->flags |= 0x80;
|
||||
this->currentHealth = 1;
|
||||
this->field_0x3c = 7;
|
||||
|
||||
@@ -1,9 +1,62 @@
|
||||
#include "global.h"
|
||||
#include "entity.h"
|
||||
#include "player.h"
|
||||
#include "functions.h"
|
||||
|
||||
extern void (*gUnk_0811B9E0[])(Entity*);
|
||||
|
||||
extern BoundingBox gUnk_08114F88;
|
||||
|
||||
// inject
|
||||
void sub_08070680(Entity* this) {
|
||||
gUnk_0811B9E0[this->action](this);
|
||||
}
|
||||
|
||||
|
||||
void sub_08070698(Entity *this)
|
||||
{
|
||||
u32 uVar1;
|
||||
int iVar2;
|
||||
Entity *ent;
|
||||
|
||||
gPlayerState.field_0x0[0] = 0xff;
|
||||
gPlayerState.field_0x14[1] = gPlayerEntity.x.HALF.HI;
|
||||
gPlayerState.field_0x14[2] = gPlayerEntity.y.HALF.HI;
|
||||
this->flags = this->flags | 0x80;
|
||||
this->spritePriority.b0 = 0xc;
|
||||
this->spritePriority.b1 = 1;
|
||||
this->spriteSettings.b.shadow = 1;
|
||||
this->field_0x16 = 0x20;
|
||||
this->flags2 = 8;
|
||||
this->damageType = 0x79;
|
||||
this->boundingBox = &gUnk_08114F88;
|
||||
this->spriteIndex = 1;
|
||||
gPlayerState.field_0x8 = 0x100;
|
||||
sub_0806FDA0(this);
|
||||
sub_080AE008(this, 1, 2);
|
||||
InitAnimationForceUpdate(this, 2);
|
||||
if (this->collisionLayer == 0) {
|
||||
sub_08016A30(this);
|
||||
}
|
||||
uVar1 = IsItemEquipped(0x10);
|
||||
if (uVar1 != 2) {
|
||||
sub_08077728();
|
||||
}
|
||||
sub_0807A108();
|
||||
sub_0807AEE4();
|
||||
iVar2 = sub_08078EFC();
|
||||
if (iVar2 == 0) {
|
||||
sub_0807921C();
|
||||
sub_0807A1B8();
|
||||
if (gPlayerState.swimState != 0) {
|
||||
gPlayerState.swimState = 1;
|
||||
sub_08079938();
|
||||
gPlayerState.field_0xa8[0] = 7;
|
||||
sub_0807ACCC(this);
|
||||
ent = sub_0805EB2C(0x6, 0xf, 0x6, 0xb, 0x0);
|
||||
if (ent != NULL) {
|
||||
DeleteEntity(ent);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user