finish cow.c, delete cow.s

This commit is contained in:
lemon-sherbet 2020-06-13 13:43:14 +02:00
parent 791738fa5c
commit 556308d774
4 changed files with 168 additions and 508 deletions

448
asm/cow.s
View File

@ -1,448 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.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_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_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
push {r4, lr}
adds r4, r0, #0
bl sub_080042B8
ldr r1, _08069144 @ =gUnk_08111928
ldrb r0, [r4, #0xd]
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_0806924C
pop {r4, pc}
.align 2, 0
_08069144: .4byte gUnk_08111928
thumb_func_start sub_08069148
sub_08069148: @ 0x08069148
push {r4, lr}
adds r4, r0, #0
bl Random
movs r1, #3
ands r0, r1
adds r0, #3
strb r0, [r4, #0xf]
movs r0, #1
strb r0, [r4, #0xd]
ldrb r1, [r4, #0x14]
adds r1, #8
adds r0, r4, #0
bl LoadAnimation
pop {r4, pc}
thumb_func_start sub_08069168
sub_08069168: @ 0x08069168
push {lr}
adds r2, r0, #0
adds r0, #0x5a
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
cmp r0, #0
bge _08069186
movs r0, #2
strb r0, [r2, #0xd]
ldrb r1, [r2, #0x14]
adds r1, #0xc
adds r0, r2, #0
bl LoadAnimation
_08069186:
pop {pc}
thumb_func_start sub_08069188
sub_08069188: @ 0x08069188
push {lr}
adds r2, r0, #0
adds r3, r2, #0
adds r3, #0x5a
ldrb r1, [r3]
movs r0, #1
ands r0, r1
cmp r0, #0
beq _080691B8
movs r0, #0
strb r0, [r3]
ldrb r0, [r2, #0xf]
subs r0, #1
strb r0, [r2, #0xf]
lsls r0, r0, #0x18
cmp r0, #0
bne _080691B8
movs r0, #3
strb r0, [r2, #0xd]
ldrb r1, [r2, #0x14]
adds r1, #0x10
adds r0, r2, #0
bl LoadAnimation
_080691B8:
pop {pc}
.align 2, 0
thumb_func_start sub_080691BC
sub_080691BC: @ 0x080691BC
push {lr}
adds r2, r0, #0
adds r0, #0x5a
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
cmp r0, #0
bge _080691DE
movs r1, #0
movs r0, #1
strb r0, [r2, #0xc]
strb r1, [r2, #0xd]
ldrb r1, [r2, #0x14]
adds r1, #4
adds r0, r2, #0
bl LoadAnimation
_080691DE:
pop {pc}
thumb_func_start sub_080691E0
sub_080691E0: @ 0x080691E0
push {r4, lr}
adds r4, r0, #0
bl UpdateFuseInteraction
cmp r0, #0
beq _080691F4
movs r1, #0
movs r0, #1
strb r0, [r4, #0xc]
strb r1, [r4, #0xd]
_080691F4:
pop {r4, pc}
.align 2, 0
thumb_func_start sub_080691F8
sub_080691F8: @ 0x080691F8
push {lr}
ldrb r1, [r0, #0xa]
lsls r1, r1, #3
ldr r2, _08069208 @ =gUnk_08111938
adds r1, r1, r2
bl sub_0806F1AC
pop {pc}
.align 2, 0
_08069208: .4byte gUnk_08111938
thumb_func_start sub_0806920C
sub_0806920C: @ 0x0806920C
push {r4, r5, lr}
adds r4, r0, #0
ldr r0, _08069234 @ =gLinkState
ldr r0, [r0, #0x30]
movs r1, #0x80
ands r0, r1
rsbs r0, r0, #0
lsrs r5, r0, #0x1f
adds r0, r4, #0
adds r0, #0x6d
ldrb r0, [r0]
cmp r5, r0
beq _08069244
cmp r5, #0
bne _08069238
adds r0, r4, #0
bl sub_08078778
b _08069244
.align 2, 0
_08069234: .4byte gLinkState
_08069238:
adds r0, r4, #0
adds r0, #0x6c
ldrb r1, [r0]
adds r0, r4, #0
bl sub_080787A8
_08069244:
adds r0, r4, #0
adds r0, #0x6d
strb r5, [r0]
pop {r4, r5, pc}
thumb_func_start sub_0806924C
sub_0806924C: @ 0x0806924C
push {r4, lr}
adds r4, r0, #0
adds r0, #0x39
movs r2, #0
ldrsb r2, [r0, r2]
cmp r2, #0
beq _0806929C
ldr r0, _08069278 @ =gLinkState
ldr r0, [r0, #0x30]
movs r1, #0x80
ands r0, r1
cmp r0, #0
beq _08069284
cmp r2, #2
bne _0806927C
movs r0, #4
strb r0, [r4, #0xc]
adds r0, r4, #0
bl sub_0806F118
b _0806928E
.align 2, 0
_08069278: .4byte gLinkState
_0806927C:
adds r0, r4, #0
bl sub_080691F8
b _0806928E
_08069284:
adds r0, r4, #0
bl sub_080691F8
bl sub_080791D0
_0806928E:
movs r0, #0xd4
bl PlaySFX
adds r1, r4, #0
adds r1, #0x39
movs r0, #0
strb r0, [r1]
_0806929C:
pop {r4, pc}
.align 2, 0
thumb_func_start sub_080692A0
sub_080692A0: @ 0x080692A0
push {lr}
adds r2, r0, #0
ldrb r0, [r2, #0xc]
cmp r0, #0
bne _080692C6
adds r0, #1
strb r0, [r2, #0xc]
ldrb r1, [r2, #0x18]
movs r0, #4
rsbs r0, r0, #0
ands r0, r1
movs r1, #1
orrs r0, r1
strb r0, [r2, #0x18]
adds r0, r2, #0
movs r1, #0xf
bl LoadAnimation
b _080692CC
_080692C6:
adds r0, r2, #0
bl sub_080042B8
_080692CC:
pop {pc}
.align 2, 0

View File

@ -124,13 +124,14 @@ typedef struct Entity
u8 field_0x5e;
u8 field_0x5f;
u16 spriteVramOffset;
u8 spriteRenderPositionOffset;
u8 field_0x63;
u8 spriteOffsetX;
u8 spriteOffsetY;
u32 * otherEntity;
u16 field_0x68;
u8 field_0x68;
u8 field_0x69;
u16 field_0x6a;
u8 field_0x6b;
u8 field_0x6c;
u8 field_0x6d;
u8 filler4[6];
u32 * heldObjectPtr;
u8 filler3[2];

View File

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

218
src/cow.c
View File

@ -1,5 +1,6 @@
#include "global.h"
#include "entity.h"
#include "link.h"
extern void sub_0806ED78(Entity*);
extern void sub_0806920C(Entity*);
@ -8,9 +9,19 @@ 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 sub_0806F1AC(Entity*, u32*);
extern void sub_08078778(Entity*);
extern void sub_080787A8(Entity*, u32);
extern void sub_0806F118(Entity*);
extern void sub_080791D0();
extern void (*gUnk_08111914[])(Entity*);
extern void (*gUnk_08111928[])(Entity*);
extern u32 gUnk_08111938[];
extern void LoadAnimation();
extern void PlaySFX(u32);
extern u32 Random();
extern u32 UpdateFuseInteraction(Entity*);
extern LinkState gLinkState;
void sub_08068F98(Entity* ent) {
gUnk_08111914[ent->action](ent);
@ -25,28 +36,30 @@ void sub_08068FC0(Entity* ent) {
ent->animationState = ent->entityType.parameter2;
ent->nonPlanarMovement = 0x40;
ent->field_0x6c = 0xFF;
ent->field_0x6d = 0xFF;
r2 = sub_0805ACC0(ent);
if (r2 == 0) {
u16 x, y;
x = ent->x.HALF.HI;
ent->field_0x68 = x;
*(u16*)&ent->field_0x68 = x;
y = ent->y.HALF.HI;
ent->field_0x6a = y;
} else {
ent->field_0x68 = r2 >> 0x10;
u32 var1 = r2 >> 16;
//0x68+0x69 probably a SplitWord
*(u16*)&ent->field_0x68 = var1;
ent->field_0x6a = r2;
}
ent->field_0x6b = sub_0801E99C(ent);
ent->field_0x6c = sub_0801E99C(ent);
LoadAnimation(ent, ent->animationState + 4);
}
void sub_08069018(Entity* ent) {
u32 var0;
s32 var0;
if (ent->previousActionFlag == 0) {
ent->previousActionFlag++;
@ -56,7 +69,6 @@ void sub_08069018(Entity* ent) {
sub_080042B8(ent);
var0 = --ent->field_0xf;
var0 = (var0 << 24) >> 24;
if (var0 == 0) {
if (ent->parameter3 == 0) {
ent->action = 2;
@ -69,59 +81,155 @@ void sub_08069018(Entity* ent) {
sub_0806924C(ent);
}
void sub_08069068(Entity* ent) {
u32 var0;
void sub_08069068(Entity *ent) {
s32 var0;
if (ent->previousActionFlag == 0) {
u32 anim;
if (ent->previousActionFlag == 0) {
u32 anim;
ent->previousActionFlag++;
ent->previousActionFlag++;
anim = (Random() & 2) - 1;
anim = (anim + ent->animationState) & 3;
ent->animationState = anim;
ent->direction = anim <<= 3;
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;
ent->field_0xf = (Random() & 0x3F) + 0x3C;
LoadAnimation(ent, ent->animationState + 4);
}
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_080AEF88(ent);
sub_080042B8(ent);
sub_0806924C(ent);
{
s32 x = ent->x.HALF.HI;
s16 *x2 = (s16 *)&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;
if (var0 == 0) {
ent->action = 3;
ent->previousActionFlag = var0;
}
sub_0806924C(ent);
}
void sub_08069124(Entity* ent) {
sub_080042B8(ent);
gUnk_08111928[ent->previousActionFlag](ent);
sub_0806924C(ent);
}
void sub_08069148(Entity* ent) {
u32 var0 = Random() & 3;
var0 += 3;
ent->field_0xf = var0;
ent->previousActionFlag = 1;
LoadAnimation(ent, ent->animationState + 8);
}
void sub_08069168(Entity* ent) {
if ((s8)ent->frames.all < 0) {
ent->previousActionFlag = 2;
LoadAnimation(ent, ent->animationState + 12);
}
}
void sub_08069188(Entity* ent) {
if (ent->frames.f2 == 0) return;
ent->frames.all = 0;
if (((s8) --ent->field_0xf) != 0) return;
ent->previousActionFlag = 3;
LoadAnimation(ent, ent->animationState + 16);
}
void sub_080691BC(Entity* ent) {
if ((s8)ent->frames.all < 0) {
ent->action = 1;
ent->previousActionFlag = 0;
LoadAnimation(ent, ent->animationState + 4);
}
}
void sub_080691E0(Entity* ent) {
if (UpdateFuseInteraction(ent) != 0) {
ent->action = 1;
ent->previousActionFlag = 0;
}
}
void sub_080691F8(Entity* ent) {
u32 var0 = ent->entityType.parameter1;
u32* var1 = gUnk_08111938 + (var0 * 2);
sub_0806F1AC(ent, var1);
}
void sub_0806920C(Entity* ent) {
//TODO: figure out what bitfield flag this is
u32 var0 = gLinkState.flags.all & 0x80;
u32 var1 = -var0 >> 0x1F;
if (var1 != ent->field_0x6d) {
if (var1 == 0) {
sub_08078778(ent);
} else {
sub_080787A8(ent, ent->field_0x6c);
}
}
ent->field_0x6d = var1;
}
void sub_0806924C(Entity* ent) {
s8 itype = ent->interactType;
if (itype != 0) {
//TODO: figure out what bitfield flag this is
if ((gLinkState.flags.all & 0x80) != 0) {
if (itype == 2) {
ent->action = 4;
sub_0806F118(ent);
} else {
sub_080691F8(ent);
}
} else {
sub_080691F8(ent);
sub_080791D0();
}
PlaySFX(212);
ent->interactType = 0;
}
}
void sub_080692A0(Entity* ent) {
if (ent->action == 0) {
ent->action++;
ent->spriteSettings.b.ss0 = 1;
LoadAnimation(ent, 15);
} else {
sub_080042B8(ent);
}
}