Skip to content

Commit fea263b

Browse files
committed
Start Enemy Ape
1 parent 0e1c773 commit fea263b

File tree

3 files changed

+120
-209
lines changed

3 files changed

+120
-209
lines changed

asm/enemy_ape.s

Lines changed: 8 additions & 209 deletions
Original file line numberDiff line numberDiff line change
@@ -5,209 +5,8 @@
55
.syntax unified
66
.arm
77

8-
thumb_func_start CreateEntity_Ape_0
9-
CreateEntity_Ape_0: @ 0x0805A4BC
10-
push {r4, r5, r6, r7, lr}
11-
mov r7, sl
12-
mov r6, sb
13-
mov r5, r8
14-
push {r5, r6, r7}
15-
sub sp, #0xc
16-
adds r7, r0, #0
17-
adds r6, r1, #0
18-
mov r8, r2
19-
adds r5, r3, #0
20-
lsls r6, r6, #0x10
21-
lsrs r6, r6, #0x10
22-
mov r0, r8
23-
lsls r0, r0, #0x10
24-
lsrs r0, r0, #0x10
25-
mov r8, r0
26-
lsls r5, r5, #0x18
27-
lsrs r5, r5, #0x18
28-
ldr r0, _0805A580 @ =sub_805A764
29-
movs r2, #0x84
30-
lsls r2, r2, #6
31-
ldr r1, _0805A584 @ =sub_805ACF0
32-
str r1, [sp]
33-
movs r1, #0x7c
34-
movs r3, #0
35-
bl TaskCreate
36-
ldrh r0, [r0, #6]
37-
mov sb, r0
38-
movs r4, #0xc0
39-
lsls r4, r4, #0x12
40-
add r4, sb
41-
str r7, [r4]
42-
ldrb r0, [r7]
43-
movs r1, #0
44-
mov sl, r1
45-
strb r0, [r4, #5]
46-
strb r5, [r4, #4]
47-
movs r2, #0
48-
strh r6, [r4, #0xa]
49-
mov r0, r8
50-
strh r0, [r4, #0xc]
51-
ldrb r1, [r7]
52-
lsls r1, r1, #0xb
53-
str r1, [r4, #0x1c]
54-
ldrb r0, [r7, #1]
55-
lsls r0, r0, #0xb
56-
str r0, [r4, #0x20]
57-
str r1, [r4, #0x14]
58-
str r0, [r4, #0x18]
59-
movs r0, #0xc0
60-
strh r0, [r4, #8]
61-
movs r0, #0x16
62-
strh r0, [r4, #0xe]
63-
strb r2, [r4, #6]
64-
add r0, sp, #4
65-
mov r1, sl
66-
strh r1, [r0]
67-
ldr r1, _0805A588 @ =0x03000078
68-
add r1, sb
69-
ldr r5, _0805A58C @ =0x01000002
70-
adds r2, r5, #0
71-
bl CpuSet
72-
mov r0, sp
73-
adds r0, #6
74-
mov r1, sl
75-
strh r1, [r0]
76-
ldr r1, _0805A590 @ =0x03000070
77-
add r1, sb
78-
adds r2, r5, #0
79-
bl CpuSet
80-
add r0, sp, #8
81-
mov r1, sl
82-
strh r1, [r0]
83-
ldr r1, _0805A594 @ =0x03000048
84-
add sb, r1
85-
mov r1, sb
86-
adds r2, r5, #0
87-
bl CpuSet
88-
adds r0, r4, #0
89-
bl sub_805A674
90-
movs r1, #2
91-
rsbs r1, r1, #0
92-
adds r0, r1, #0
93-
strb r0, [r7]
94-
add sp, #0xc
95-
pop {r3, r4, r5}
96-
mov r8, r3
97-
mov sb, r4
98-
mov sl, r5
99-
pop {r4, r5, r6, r7}
100-
pop {r0}
101-
bx r0
102-
.align 2, 0
103-
_0805A580: .4byte sub_805A764
104-
_0805A584: .4byte sub_805ACF0
105-
_0805A588: .4byte 0x03000078
106-
_0805A58C: .4byte 0x01000002
107-
_0805A590: .4byte 0x03000070
108-
_0805A594: .4byte 0x03000048
109-
110-
thumb_func_start CreateEntity_Ape_1
111-
CreateEntity_Ape_1: @ 0x0805A598
112-
push {r4, r5, r6, r7, lr}
113-
mov r7, sl
114-
mov r6, sb
115-
mov r5, r8
116-
push {r5, r6, r7}
117-
sub sp, #0xc
118-
adds r7, r0, #0
119-
adds r6, r1, #0
120-
mov r8, r2
121-
adds r5, r3, #0
122-
lsls r6, r6, #0x10
123-
lsrs r6, r6, #0x10
124-
mov r0, r8
125-
lsls r0, r0, #0x10
126-
lsrs r0, r0, #0x10
127-
mov r8, r0
128-
lsls r5, r5, #0x18
129-
lsrs r5, r5, #0x18
130-
ldr r0, _0805A65C @ =sub_805A764
131-
movs r2, #0x84
132-
lsls r2, r2, #6
133-
ldr r1, _0805A660 @ =sub_805ACF0
134-
str r1, [sp]
135-
movs r1, #0x7c
136-
movs r3, #0
137-
bl TaskCreate
138-
ldrh r0, [r0, #6]
139-
mov sb, r0
140-
movs r4, #0xc0
141-
lsls r4, r4, #0x12
142-
add r4, sb
143-
str r7, [r4]
144-
ldrb r0, [r7]
145-
movs r1, #0
146-
mov sl, r1
147-
strb r0, [r4, #5]
148-
strb r5, [r4, #4]
149-
movs r2, #0
150-
strh r6, [r4, #0xa]
151-
mov r0, r8
152-
strh r0, [r4, #0xc]
153-
ldrb r1, [r7]
154-
lsls r1, r1, #0xb
155-
str r1, [r4, #0x1c]
156-
ldrb r0, [r7, #1]
157-
lsls r0, r0, #0xb
158-
str r0, [r4, #0x20]
159-
str r1, [r4, #0x14]
160-
str r0, [r4, #0x18]
161-
movs r0, #0x40
162-
strh r0, [r4, #8]
163-
movs r0, #0x16
164-
strh r0, [r4, #0xe]
165-
strb r2, [r4, #6]
166-
add r0, sp, #4
167-
mov r1, sl
168-
strh r1, [r0]
169-
ldr r1, _0805A664 @ =0x03000078
170-
add r1, sb
171-
ldr r5, _0805A668 @ =0x01000002
172-
adds r2, r5, #0
173-
bl CpuSet
174-
mov r0, sp
175-
adds r0, #6
176-
mov r1, sl
177-
strh r1, [r0]
178-
ldr r1, _0805A66C @ =0x03000070
179-
add r1, sb
180-
adds r2, r5, #0
181-
bl CpuSet
182-
add r0, sp, #8
183-
mov r1, sl
184-
strh r1, [r0]
185-
ldr r1, _0805A670 @ =0x03000048
186-
add sb, r1
187-
mov r1, sb
188-
adds r2, r5, #0
189-
bl CpuSet
190-
adds r0, r4, #0
191-
bl sub_805A674
192-
movs r1, #2
193-
rsbs r1, r1, #0
194-
adds r0, r1, #0
195-
strb r0, [r7]
196-
add sp, #0xc
197-
pop {r3, r4, r5}
198-
mov r8, r3
199-
mov sb, r4
200-
mov sl, r5
201-
pop {r4, r5, r6, r7}
202-
pop {r0}
203-
bx r0
204-
.align 2, 0
205-
_0805A65C: .4byte sub_805A764
206-
_0805A660: .4byte sub_805ACF0
207-
_0805A664: .4byte 0x03000078
208-
_0805A668: .4byte 0x01000002
209-
_0805A66C: .4byte 0x03000070
210-
_0805A670: .4byte 0x03000048
8+
.if 0
9+
.endif
21110

21211
thumb_func_start sub_805A674
21312
sub_805A674: @ 0x0805A674
@@ -328,8 +127,8 @@ sub_805A674: @ 0x0805A674
328127
_0805A75C: .4byte gUnknown_080D1ECC
329128
_0805A760: .4byte gCamera
330129

331-
thumb_func_start sub_805A764
332-
sub_805A764: @ 0x0805A764
130+
thumb_func_start Task_ApeMain
131+
Task_ApeMain: @ 0x0805A764
333132
push {r4, lr}
334133
ldr r0, _0805A7A0 @ =gCurTask
335134
ldr r0, [r0]
@@ -477,7 +276,7 @@ _0805A870:
477276
strb r3, [r5, #6]
478277
ldr r0, _0805A8A8 @ =gCurTask
479278
ldr r1, [r0]
480-
ldr r0, _0805A8AC @ =sub_805A764
279+
ldr r0, _0805A8AC @ =Task_ApeMain
481280
str r0, [r1, #8]
482281
_0805A898:
483282
add sp, #4
@@ -488,7 +287,7 @@ _0805A898:
488287
_0805A8A0: .4byte gUnknown_080D1ECC
489288
_0805A8A4: .4byte gStageData
490289
_0805A8A8: .4byte gCurTask
491-
_0805A8AC: .4byte sub_805A764
290+
_0805A8AC: .4byte Task_ApeMain
492291

493292
thumb_func_start sub_805A8B0
494293
sub_805A8B0: @ 0x0805A8B0
@@ -1057,8 +856,8 @@ sub_805ACB4: @ 0x0805ACB4
1057856
pop {r1}
1058857
bx r1
1059858

1060-
thumb_func_start sub_805ACF0
1061-
sub_805ACF0: @ 0x0805ACF0
859+
thumb_func_start TaskDestructor_Ape
860+
TaskDestructor_Ape: @ 0x0805ACF0
1062861
push {lr}
1063862
ldrh r0, [r0, #6]
1064863
movs r1, #0xc0

ldscript.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ SECTIONS {
117117
build/sa3/src/game/enemies/condor.o(.text);
118118
build/sa3/src/game/enemies/gekogeko.o(.text);
119119
build/sa3/src/game/enemies/buzzer.o(.text);
120+
build/sa3/src/game/enemies/ape.o(.text);
120121
build/sa3/asm/enemy_ape.o(.text);
121122
build/sa3/src/game/enemies/minimole.o(.text);
122123
build/sa3/src/game/enemies/takkon.o(.text);

src/game/enemies/ape.c

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
#include "global.h"
2+
#include "trig.h"
3+
#include "malloc_vram.h"
4+
#include "module_unclear.h"
5+
#include "game/camera.h"
6+
#include "game/entity.h"
7+
#include "game/enemy_unknown.h"
8+
#include "game/stage.h"
9+
10+
#include "constants/animations.h"
11+
#include "constants/anim_sizes.h"
12+
13+
typedef struct {
14+
/* 0x00 */ MapEntity *me;
15+
/* 0x04 */ u8 id;
16+
/* 0x05 */ u8 spriteX;
17+
/* 0x06 */ u8 unk6;
18+
/* 0x07 */ s8 direction;
19+
/* 0x08 */ u16 unk8;
20+
/* 0x0A */ u16 region[2];
21+
/* 0x0E */ u16 unkE;
22+
u8 filler10[4];
23+
/* 0x14 */ Vec2_32 qUnk14;
24+
/* 0x1C */ Vec2_32 qPos;
25+
/* 0x24 */ Sprite s;
26+
/* 0x4C */ Sprite s2;
27+
/* 0x54 */ Hitbox reserved;
28+
} Ape; /* size: 0x7C */
29+
30+
typedef struct {
31+
/* 0x00 */ u16 region[2];
32+
/* 0x04 */ u16 theta;
33+
u8 filler4[0x2];
34+
/* 0x08 */ Vec2_32 qUnk8;
35+
/* 0x10 */ Vec2_32 qPos;
36+
/* 0x18 */ Sprite s;
37+
/* 0x40 */ Hitbox reserved;
38+
} ApeProjectile; /* size: 0x48 */
39+
40+
void Task_ApeMain(void);
41+
void sub_805A674(Ape *);
42+
void TaskDestructor_Ape(struct Task *t);
43+
44+
extern const TileInfo2 gUnknown_080D1EAC[6]; // Buzzer
45+
extern const TileInfo2 gUnknown_080D1EC4[2]; // proj
46+
47+
#define isBetween(v, min, onePastMax) (((v) >= (min)) && ((v) < onePastMax))
48+
49+
void CreateEntity_Ape_0(MapEntity *me, u16 regionX, u16 regionY, u8 id)
50+
{
51+
struct Task *t = TaskCreate(Task_ApeMain, sizeof(Ape), 0x2100, 0, TaskDestructor_Ape);
52+
Ape *enemy = TASK_DATA(t);
53+
s32 qX, qY;
54+
55+
enemy->me = me;
56+
enemy->spriteX = me->x;
57+
enemy->id = id;
58+
enemy->region[0] = regionX;
59+
enemy->region[1] = regionY;
60+
61+
qX = Q(me->x * TILE_WIDTH);
62+
enemy->qPos.x = qX;
63+
qY = Q(me->y * TILE_WIDTH);
64+
enemy->qPos.y = qY;
65+
66+
enemy->qUnk14.x = qX;
67+
enemy->qUnk14.y = qY;
68+
enemy->unk8 = 0xC0;
69+
enemy->unkE = 22;
70+
enemy->unk6 = 0;
71+
72+
CpuFill16(0, &enemy->reserved.b, sizeof(enemy->reserved.b));
73+
CpuFill16(0, &enemy->s2.hitboxes[0].b, sizeof(enemy->s2.hitboxes[0].b));
74+
CpuFill16(0, &enemy->s.hitboxes[0].b, sizeof(enemy->s.hitboxes[0].b));
75+
76+
sub_805A674(enemy);
77+
78+
SET_MAP_ENTITY_INITIALIZED(me);
79+
}
80+
81+
void CreateEntity_Ape_1(MapEntity *me, u16 regionX, u16 regionY, u8 id)
82+
{
83+
struct Task *t = TaskCreate(Task_ApeMain, sizeof(Ape), 0x2100, 0, TaskDestructor_Ape);
84+
Ape *enemy = TASK_DATA(t);
85+
s32 qX, qY;
86+
87+
enemy->me = me;
88+
enemy->spriteX = me->x;
89+
enemy->id = id;
90+
enemy->region[0] = regionX;
91+
enemy->region[1] = regionY;
92+
93+
qX = Q(me->x * TILE_WIDTH);
94+
enemy->qPos.x = qX;
95+
qY = Q(me->y * TILE_WIDTH);
96+
enemy->qPos.y = qY;
97+
98+
enemy->qUnk14.x = qX;
99+
enemy->qUnk14.y = qY;
100+
enemy->unk8 = 0x40;
101+
enemy->unkE = 22;
102+
enemy->unk6 = 0;
103+
104+
CpuFill16(0, &enemy->reserved.b, sizeof(enemy->reserved.b));
105+
CpuFill16(0, &enemy->s2.hitboxes[0].b, sizeof(enemy->s2.hitboxes[0].b));
106+
CpuFill16(0, &enemy->s.hitboxes[0].b, sizeof(enemy->s.hitboxes[0].b));
107+
108+
sub_805A674(enemy);
109+
110+
SET_MAP_ENTITY_INITIALIZED(me);
111+
}

0 commit comments

Comments
 (0)