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

View File

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

View File

@ -509,6 +509,7 @@ SECTIONS {
asm/zeldaFollower.o(.text); asm/zeldaFollower.o(.text);
asm/melari.o(.text); asm/melari.o(.text);
asm/bladeBrothers.o(.text); asm/bladeBrothers.o(.text);
src/cow.o(.text);
asm/cow.o(.text); asm/cow.o(.text);
asm/goron.o(.text); asm/goron.o(.text);
asm/goronMerchant.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);
}