first 3 functions

This commit is contained in:
lemon-sherbet 2020-06-13 10:59:01 +02:00
parent a3be262635
commit 791738fa5c
4 changed files with 336 additions and 207 deletions

402
asm/cow.s
View File

@ -7,210 +7,210 @@
.text
thumb_func_start sub_08068F98
sub_08068F98: @ 0x08068F98
push {r4, lr}
adds r4, r0, #0
ldr r1, _08068FBC @ =gUnk_08111914
ldrb r0, [r4, #0xc]
lsls r0, r0, #2
adds r0, r0, r1
ldr r1, [r0]
adds r0, r4, #0
bl _call_via_r1
adds r0, r4, #0
bl sub_0806ED78
adds r0, r4, #0
bl sub_0806920C
pop {r4, pc}
.align 2, 0
_08068FBC: .4byte gUnk_08111914
@ thumb_func_start sub_08068F98
@sub_08068F98: @ 0x08068F98
@ push {r4, lr}
@ adds r4, r0, #0
@ ldr r1, _08068FBC @ =gUnk_08111914
@ ldrb r0, [r4, #0xc]
@ lsls r0, r0, #2
@ adds r0, r0, r1
@ ldr r1, [r0]
@ adds r0, r4, #0
@ bl _call_via_r1
@ adds r0, r4, #0
@ bl sub_0806ED78
@ adds r0, r4, #0
@ bl sub_0806920C
@ pop {r4, pc}
@ .align 2, 0
@_08068FBC: .4byte gUnk_08111914
thumb_func_start sub_08068FC0
sub_08068FC0: @ 0x08068FC0
push {r4, lr}
adds r4, r0, #0
movs r0, #1
strb r0, [r4, #0xc]
ldrb r0, [r4, #0xb]
strb r0, [r4, #0x14]
movs r0, #0x40
strh r0, [r4, #0x24]
adds r1, r4, #0
adds r1, #0x6d
movs r0, #0xff
strb r0, [r1]
adds r0, r4, #0
bl sub_0805ACC0
adds r2, r0, #0
cmp r2, #0
bne _08068FF4
ldrh r0, [r4, #0x2e]
adds r1, r4, #0
adds r1, #0x68
strh r0, [r1]
ldrh r0, [r4, #0x32]
adds r1, #2
strh r0, [r1]
b _08069000
_08068FF4:
lsrs r1, r2, #0x10
adds r0, r4, #0
adds r0, #0x68
strh r1, [r0]
adds r0, #2
strh r2, [r0]
_08069000:
adds r0, r4, #0
bl sub_0801E99C
adds r1, r4, #0
adds r1, #0x6c
strb r0, [r1]
ldrb r1, [r4, #0x14]
adds r1, #4
adds r0, r4, #0
bl LoadAnimation
pop {r4, pc}
@ thumb_func_start sub_08068FC0
@sub_08068FC0: @ 0x08068FC0
@ push {r4, lr}
@ adds r4, r0, #0
@ movs r0, #1
@ strb r0, [r4, #0xc]
@ ldrb r0, [r4, #0xb]
@ strb r0, [r4, #0x14]
@ movs r0, #0x40
@ strh r0, [r4, #0x24]
@ adds r1, r4, #0
@ adds r1, #0x6d
@ movs r0, #0xff
@ strb r0, [r1]
@ adds r0, r4, #0
@ bl sub_0805ACC0
@ adds r2, r0, #0
@ cmp r2, #0
@ bne _08068FF4
@ ldrh r0, [r4, #0x2e]
@ adds r1, r4, #0
@ adds r1, #0x68
@ strh r0, [r1]
@ ldrh r0, [r4, #0x32]
@ adds r1, #2
@ strh r0, [r1]
@ b _08069000
@_08068FF4:
@ lsrs r1, r2, #0x10
@ adds r0, r4, #0
@ adds r0, #0x68
@ strh r1, [r0]
@ adds r0, #2
@ strh r2, [r0]
@_08069000:
@ adds r0, r4, #0
@ bl sub_0801E99C
@ adds r1, r4, #0
@ adds r1, #0x6c
@ strb r0, [r1]
@ ldrb r1, [r4, #0x14]
@ adds r1, #4
@ adds r0, r4, #0
@ bl LoadAnimation
@ pop {r4, pc}
thumb_func_start sub_08069018
sub_08069018: @ 0x08069018
push {r4, lr}
adds r4, r0, #0
ldrb r0, [r4, #0xd]
cmp r0, #0
bne _0806903A
adds r0, #1
strb r0, [r4, #0xd]
bl Random
movs r1, #0x3f
ands r0, r1
adds r0, #0x3c
strb r0, [r4, #0xf]
ldrb r1, [r4, #0x14]
adds r0, r4, #0
bl LoadAnimation
_0806903A:
adds r0, r4, #0
bl sub_080042B8
ldrb r0, [r4, #0xf]
subs r0, #1
strb r0, [r4, #0xf]
lsls r0, r0, #0x18
lsrs r1, r0, #0x18
cmp r1, #0
bne _0806905E
ldrb r0, [r4, #0xe]
cmp r0, #0
bne _08069058
movs r0, #2
b _0806905A
_08069058:
movs r0, #3
_0806905A:
strb r0, [r4, #0xc]
strb r1, [r4, #0xd]
_0806905E:
adds r0, r4, #0
bl sub_0806924C
pop {r4, pc}
.align 2, 0
@ thumb_func_start sub_08069018
@sub_08069018: @ 0x08069018
@ push {r4, lr}
@ adds r4, r0, #0
@ ldrb r0, [r4, #0xd]
@ cmp r0, #0
@ bne _0806903A
@ adds r0, #1
@ strb r0, [r4, #0xd]
@ bl Random
@ movs r1, #0x3f
@ ands r0, r1
@ adds r0, #0x3c
@ strb r0, [r4, #0xf]
@ ldrb r1, [r4, #0x14]
@ adds r0, r4, #0
@ bl LoadAnimation
@_0806903A:
@ adds r0, r4, #0
@ bl sub_080042B8
@ ldrb r0, [r4, #0xf]
@ subs r0, #1
@ strb r0, [r4, #0xf]
@ lsls r0, r0, #0x18
@ lsrs r1, r0, #0x18
@ cmp r1, #0
@ bne _0806905E
@ ldrb r0, [r4, #0xe]
@ cmp r0, #0
@ bne _08069058
@ movs r0, #2
@ b _0806905A
@_08069058:
@ movs r0, #3
@_0806905A:
@ strb r0, [r4, #0xc]
@ strb r1, [r4, #0xd]
@_0806905E:
@ adds r0, r4, #0
@ bl sub_0806924C
@ pop {r4, pc}
@ .align 2, 0
thumb_func_start sub_08069068
sub_08069068: @ 0x08069068
push {r4, r5, lr}
adds r4, r0, #0
ldrb r0, [r4, #0xd]
cmp r0, #0
bne _080690A4
adds r0, #1
strb r0, [r4, #0xd]
bl Random
movs r1, #2
ands r1, r0
subs r1, #1
ldrb r0, [r4, #0x14]
adds r1, r1, r0
movs r0, #3
ands r1, r0
strb r1, [r4, #0x14]
lsls r1, r1, #3
strb r1, [r4, #0x15]
bl Random
movs r1, #0x3f
ands r0, r1
adds r0, #0x3c
strb r0, [r4, #0xf]
ldrb r1, [r4, #0x14]
adds r1, #4
adds r0, r4, #0
bl LoadAnimation
_080690A4:
adds r0, r4, #0
bl sub_080AEF88
adds r0, r4, #0
bl sub_080042B8
movs r0, #0x2e
ldrsh r1, [r4, r0]
adds r2, r4, #0
adds r2, #0x68
movs r3, #0
ldrsh r0, [r2, r3]
subs r1, r1, r0
cmp r1, #0x10
ble _080690CC
ldrh r0, [r2]
adds r0, #0x10
strh r0, [r4, #0x2e]
movs r0, #1
strb r0, [r4, #0xf]
_080690CC:
movs r3, #0x10
rsbs r3, r3, #0
cmp r1, r3
bge _080690DE
ldrh r0, [r2]
subs r0, #0x10
strh r0, [r4, #0x2e]
movs r0, #1
strb r0, [r4, #0xf]
_080690DE:
movs r5, #0x32
ldrsh r1, [r4, r5]
adds r2, r4, #0
adds r2, #0x6a
movs r5, #0
ldrsh r0, [r2, r5]
subs r1, r1, r0
cmp r1, #0x10
ble _080690FA
ldrh r0, [r2]
adds r0, #0x10
strh r0, [r4, #0x32]
movs r0, #1
strb r0, [r4, #0xf]
_080690FA:
cmp r1, r3
bge _08069108
ldrh r0, [r2]
subs r0, #0x10
strh r0, [r4, #0x32]
movs r0, #1
strb r0, [r4, #0xf]
_08069108:
ldrb r0, [r4, #0xf]
subs r0, #1
strb r0, [r4, #0xf]
lsls r0, r0, #0x18
lsrs r1, r0, #0x18
cmp r1, #0
bne _0806911C
movs r0, #3
strb r0, [r4, #0xc]
strb r1, [r4, #0xd]
_0806911C:
adds r0, r4, #0
bl sub_0806924C
pop {r4, r5, pc}
@ thumb_func_start sub_08069068
@sub_08069068: @ 0x08069068
@ push {r4, r5, lr}
@ adds r4, r0, #0
@ ldrb r0, [r4, #0xd]
@ cmp r0, #0
@ bne _080690A4
@ adds r0, #1
@ strb r0, [r4, #0xd]
@ bl Random
@ movs r1, #2
@ ands r1, r0
@ subs r1, #1
@ ldrb r0, [r4, #0x14]
@ adds r1, r1, r0
@ movs r0, #3
@ ands r1, r0
@ strb r1, [r4, #0x14]
@ lsls r1, r1, #3
@ strb r1, [r4, #0x15]
@ bl Random
@ movs r1, #0x3f
@ ands r0, r1
@ adds r0, #0x3c
@ strb r0, [r4, #0xf]
@ ldrb r1, [r4, #0x14]
@ adds r1, #4
@ adds r0, r4, #0
@ bl LoadAnimation
@_080690A4:
@ adds r0, r4, #0
@ bl sub_080AEF88
@ adds r0, r4, #0
@ bl sub_080042B8
@ movs r0, #0x2e
@ ldrsh r1, [r4, r0]
@ adds r2, r4, #0
@ adds r2, #0x68
@ movs r3, #0
@ ldrsh r0, [r2, r3]
@ subs r1, r1, r0
@ cmp r1, #0x10
@ ble _080690CC
@ ldrh r0, [r2]
@ adds r0, #0x10
@ strh r0, [r4, #0x2e]
@ movs r0, #1
@ strb r0, [r4, #0xf]
@_080690CC:
@ movs r3, #0x10
@ rsbs r3, r3, #0
@ cmp r1, r3
@ bge _080690DE
@ ldrh r0, [r2]
@ subs r0, #0x10
@ strh r0, [r4, #0x2e]
@ movs r0, #1
@ strb r0, [r4, #0xf]
@_080690DE:
@ movs r5, #0x32
@ ldrsh r1, [r4, r5]
@ adds r2, r4, #0
@ adds r2, #0x6a
@ movs r5, #0
@ ldrsh r0, [r2, r5]
@ subs r1, r1, r0
@ cmp r1, #0x10
@ ble _080690FA
@ ldrh r0, [r2]
@ adds r0, #0x10
@ strh r0, [r4, #0x32]
@ movs r0, #1
@ strb r0, [r4, #0xf]
@_080690FA:
@ cmp r1, r3
@ bge _08069108
@ ldrh r0, [r2]
@ subs r0, #0x10
@ strh r0, [r4, #0x32]
@ movs r0, #1
@ strb r0, [r4, #0xf]
@_08069108:
@ ldrb r0, [r4, #0xf]
@ subs r0, #1
@ strb r0, [r4, #0xf]
@ lsls r0, r0, #0x18
@ lsrs r1, r0, #0x18
@ cmp r1, #0
@ bne _0806911C
@ movs r0, #3
@ strb r0, [r4, #0xc]
@ strb r1, [r4, #0xd]
@_0806911C:
@ adds r0, r4, #0
@ bl sub_0806924C
@ pop {r4, r5, pc}
thumb_func_start sub_08069124
sub_08069124: @ 0x08069124

View File

@ -124,13 +124,14 @@ typedef struct Entity
u8 field_0x5e;
u8 field_0x5f;
u16 spriteVramOffset;
u8 spriteOffsetX;
u8 spriteOffsetY;
u8 spriteRenderPositionOffset;
u8 field_0x63;
u32 * otherEntity;
u8 field_0x68;
u8 field_0x69;
u16 field_0x68;
u16 field_0x6a;
u8 filler4[8];
u8 field_0x6b;
u8 field_0x6c;
u8 filler4[6];
u32 * heldObjectPtr;
u8 filler3[2];
u16 itemCooldown;
@ -142,4 +143,4 @@ typedef struct Entity
} Entity;
#endif
#endif

View File

@ -509,6 +509,7 @@ SECTIONS {
asm/zeldaFollower.o(.text);
asm/melari.o(.text);
asm/bladeBrothers.o(.text);
src/cow.o(.text);
asm/cow.o(.text);
asm/goron.o(.text);
asm/goronMerchant.o(.text);

127
src/cow.c Normal file
View File

@ -0,0 +1,127 @@
#include "global.h"
#include "entity.h"
extern void sub_0806ED78(Entity*);
extern void sub_0806920C(Entity*);
extern void sub_080042B8(Entity*);
extern u32 sub_0805ACC0(Entity*);
extern u32 sub_0801E99C(Entity*);
extern void sub_0806924C(Entity*);
extern void sub_080AEF88(Entity*);
extern void (*gUnk_08111914[1])(Entity*);
extern void LoadAnimation();
extern u32 Random();
void sub_08068F98(Entity* ent) {
gUnk_08111914[ent->action](ent);
sub_0806ED78(ent);
sub_0806920C(ent);
}
void sub_08068FC0(Entity* ent) {
u32 r2;
ent->action = 1;
ent->animationState = ent->entityType.parameter2;
ent->nonPlanarMovement = 0x40;
ent->field_0x6c = 0xFF;
r2 = sub_0805ACC0(ent);
if (r2 == 0) {
u16 x, y;
x = ent->x.HALF.HI;
ent->field_0x68 = x;
y = ent->y.HALF.HI;
ent->field_0x6a = y;
} else {
ent->field_0x68 = r2 >> 0x10;
ent->field_0x6a = r2;
}
ent->field_0x6b = sub_0801E99C(ent);
LoadAnimation(ent, ent->animationState + 4);
}
void sub_08069018(Entity* ent) {
u32 var0;
if (ent->previousActionFlag == 0) {
ent->previousActionFlag++;
ent->field_0xf = (Random() & 0x3F) + 0x3C;
LoadAnimation(ent, ent->animationState);
}
sub_080042B8(ent);
var0 = --ent->field_0xf;
var0 = (var0 << 24) >> 24;
if (var0 == 0) {
if (ent->parameter3 == 0) {
ent->action = 2;
} else {
ent->action = 3;
}
ent->previousActionFlag = var0;
}
sub_0806924C(ent);
}
void sub_08069068(Entity* ent) {
u32 var0;
if (ent->previousActionFlag == 0) {
u32 anim;
ent->previousActionFlag++;
anim = (Random() & 2) - 1;
anim = (anim + ent->animationState) & 3;
ent->animationState = anim;
ent->direction = anim <<= 3;
ent->field_0xf = (Random() & 0x3F) + 0x3C;
LoadAnimation(ent, ent->animationState + 4);
}
sub_080AEF88(ent);
sub_080042B8(ent);
{
s32 x = ent->x.HALF.HI;
s16* x2 = &ent->field_0x68;
x -= *x2;
if (x > 16) {
ent->x.HALF.HI = *x2 + 16;
ent->field_0xf = 1;
}
if (x < -16) {
ent->x.HALF.HI = *x2 - 16;
ent->field_0xf = 1;
}
}
{
s32 y = ent->y.HALF.HI;
s16* y2 = &ent->field_0x6a;
y -= *y2;
if (y > 16) {
ent->y.HALF.HI = *y2 + 16;
ent->field_0xf = 1;
}
if (y < -16) {
ent->y.HALF.HI = *y2 - 16;
ent->field_0xf = 1;
}
}
var0 = --ent->field_0xf;
var0 = (var0 << 24) >> 24;
if (var0 == 0) {
ent->action = 3;
ent->previousActionFlag = var0;
}
sub_0806924C(ent);
}