Merge branch 'upstream/master' into main

This commit is contained in:
theo3 2021-01-31 11:24:17 -08:00
commit 82e6c864bd
22 changed files with 5896 additions and 6131 deletions

View File

@ -1,200 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start sub_0805C6B8
sub_0805C6B8: @ 0x0805C6B8
push {lr}
ldr r2, _0805C6CC @ =gUnk_08108D04
ldrb r1, [r0, #0xc]
lsls r1, r1, #2
adds r1, r1, r2
ldr r1, [r1]
bl _call_via_r1
pop {pc}
.align 2, 0
_0805C6CC: .4byte gUnk_08108D04
thumb_func_start sub_0805C6D0
sub_0805C6D0: @ 0x0805C6D0
push {r4, r5, r6, r7, lr}
sub sp, #4
adds r5, r0, #0
ldrb r0, [r5, #0xa]
bl GetCurrentRoomProperty
adds r4, r0, #0
cmp r4, #0
bne _0805C6EA
adds r0, r5, #0
bl DeleteManager
b _0805C79A
_0805C6EA:
ldr r3, _0805C784 @ =gRoomControls
ldrh r0, [r3, #8]
ldrb r1, [r5, #0xe]
adds r0, r0, r1
movs r1, #0
strh r0, [r5, #0x2a]
strb r1, [r5, #0xe]
adds r0, r5, #0
adds r0, #0x28
strb r1, [r0]
adds r2, r5, #0
adds r2, #0x29
strb r1, [r2]
ldrb r0, [r4]
cmp r0, #0xff
beq _0805C778
ldrb r0, [r5, #0xe]
cmp r0, #0x1f
bhi _0805C778
adds r7, r3, #0
movs r3, #1
adds r6, r2, #0
_0805C716:
ldrb r1, [r4, #1]
ldrb r2, [r4, #2]
movs r0, #0x4c
str r3, [sp]
bl CreateObject
adds r2, r0, #0
ldr r3, [sp]
cmp r2, #0
beq _0805C762
ldrb r0, [r4, #3]
strb r0, [r2, #0xe]
ldrh r0, [r4, #4]
ldrh r1, [r7, #6]
adds r0, r0, r1
strh r0, [r2, #0x2e]
ldrh r0, [r4, #6]
ldrh r1, [r7, #8]
adds r0, r0, r1
strh r0, [r2, #0x32]
str r5, [r2, #0x50]
adds r0, r2, #0
adds r0, #0x38
strb r3, [r0]
ldrb r0, [r5, #0xe]
adds r1, r2, #0
adds r1, #0x83
strb r0, [r1]
ldrb r1, [r4]
adds r0, r2, #0
adds r0, #0x82
strb r1, [r0]
adds r0, r3, #0
ldrb r1, [r5, #0xe]
lsls r0, r1
ldrb r1, [r6]
orrs r0, r1
strb r0, [r6]
_0805C762:
adds r4, #8
ldrb r0, [r5, #0xe]
adds r1, r0, #1
strb r1, [r5, #0xe]
ldrb r0, [r4]
cmp r0, #0xff
beq _0805C778
lsls r0, r1, #0x18
lsrs r0, r0, #0x18
cmp r0, #0x1f
bls _0805C716
_0805C778:
ldrb r0, [r5, #0xb]
cmp r0, #0xff
bne _0805C788
movs r0, #2
b _0805C798
.align 2, 0
_0805C784: .4byte gRoomControls
_0805C788:
ldrb r0, [r5, #0xb]
bl CheckLocalFlag
cmp r0, #0
beq _0805C796
movs r0, #2
b _0805C798
_0805C796:
movs r0, #1
_0805C798:
strb r0, [r5, #0xc]
_0805C79A:
add sp, #4
pop {r4, r5, r6, r7, pc}
.align 2, 0
thumb_func_start sub_0805C7A0
sub_0805C7A0: @ 0x0805C7A0
push {r4, lr}
adds r4, r0, #0
adds r0, #0x28
adds r1, r4, #0
adds r1, #0x29
ldrb r0, [r0]
ldrb r1, [r1]
cmp r0, r1
bne _0805C7BC
movs r0, #2
strb r0, [r4, #0xc]
ldrb r0, [r4, #0xb]
bl SetLocalFlag
_0805C7BC:
adds r0, r4, #0
bl sub_0805C7CC
pop {r4, pc}
thumb_func_start sub_0805C7C4
sub_0805C7C4: @ 0x0805C7C4
push {lr}
bl sub_0805C7CC
pop {pc}
thumb_func_start sub_0805C7CC
sub_0805C7CC: @ 0x0805C7CC
push {lr}
adds r2, r0, #0
ldr r0, _0805C7F0 @ =gPlayerState
ldr r0, [r0, #0x30]
movs r1, #0x80
ands r0, r1
cmp r0, #0
beq _0805C7FC
ldr r0, _0805C7F4 @ =gPlayerEntity
movs r3, #0x32
ldrsh r1, [r0, r3]
ldrh r0, [r2, #0x2a]
adds r0, #0x10
cmp r1, r0
bge _0805C7F8
movs r0, #1
b _0805C816
.align 2, 0
_0805C7F0: .4byte gPlayerState
_0805C7F4: .4byte gPlayerEntity
_0805C7F8:
movs r0, #0
b _0805C816
_0805C7FC:
ldr r0, _0805C810 @ =gPlayerEntity
movs r3, #0x32
ldrsh r1, [r0, r3]
ldrh r0, [r2, #0x2a]
adds r0, #0x28
cmp r1, r0
bge _0805C814
movs r0, #3
b _0805C816
.align 2, 0
_0805C810: .4byte gPlayerEntity
_0805C814:
movs r0, #2
_0805C816:
strb r0, [r2, #0xd]
pop {pc}
.align 2, 0

View File

@ -1,342 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start sub_0805C934
sub_0805C934: @ 0x0805C934
push {lr}
ldr r2, _0805C948 @ =gUnk_08108D28
ldrb r1, [r0, #0xc]
lsls r1, r1, #2
adds r1, r1, r2
ldr r1, [r1]
bl _call_via_r1
pop {pc}
.align 2, 0
_0805C948: .4byte gUnk_08108D28
thumb_func_start sub_0805C94C
sub_0805C94C: @ 0x0805C94C
push {r4, r5, r6, lr}
adds r4, r0, #0
ldrb r0, [r4, #0xa]
cmp r0, #0
bne _0805C9B0
adds r6, r4, #0
adds r6, #0x20
adds r1, r6, #0
movs r2, #0
adds r0, r4, #0
adds r0, #0x3c
_0805C962:
str r2, [r0]
subs r0, #4
cmp r0, r1
bge _0805C962
adds r0, r4, #0
bl sub_0805CA6C
adds r5, r0, #0
cmp r5, #1
ble _0805C9A8
bl GetEmptyManager
adds r2, r0, #0
cmp r2, #0
beq _0805C9A8
movs r0, #9
strb r0, [r2, #8]
movs r0, #0x28
strb r0, [r2, #9]
movs r0, #1
strb r0, [r2, #0xa]
strb r5, [r2, #0xe]
adds r1, r2, #0
adds r1, #0x20
adds r0, r6, #0
ldm r0!, {r3, r5, r6}
stm r1!, {r3, r5, r6}
ldm r0!, {r3, r5, r6}
stm r1!, {r3, r5, r6}
ldm r0!, {r3, r5}
stm r1!, {r3, r5}
adds r0, r2, #0
movs r1, #6
bl AppendEntityToList
_0805C9A8:
adds r0, r4, #0
bl DeleteManager
b _0805C9B8
_0805C9B0:
movs r1, #0
movs r0, #1
strb r0, [r4, #0xc]
strb r1, [r4, #0xf]
_0805C9B8:
pop {r4, r5, r6, pc}
.align 2, 0
thumb_func_start sub_0805C9BC
sub_0805C9BC: @ 0x0805C9BC
push {r4, r5, r6, r7, lr}
mov r7, sb
mov r6, r8
push {r6, r7}
sub sp, #4
adds r6, r0, #0
bl sub_0805CB48
ldrb r0, [r6, #0xe]
subs r0, #1
mov sb, r0
ldrb r1, [r6, #0xf]
adds r0, r1, #1
strb r0, [r6, #0xf]
movs r0, #1
ands r0, r1
cmp r0, #0
beq _0805CA22
movs r2, #0
cmp r2, sb
bge _0805CA62
movs r0, #0x20
adds r0, r0, r6
mov r8, r0
_0805C9EC:
lsls r1, r2, #2
adds r0, r6, #0
adds r0, #0x20
adds r0, r0, r1
ldr r3, [r0]
adds r4, r2, #1
adds r5, r4, #0
ldrb r1, [r6, #0xe]
cmp r5, r1
bge _0805CA1A
lsls r0, r5, #2
mov r1, r8
adds r7, r0, r1
_0805CA06:
ldm r7!, {r1}
adds r0, r3, #0
str r3, [sp]
bl sub_08004484
adds r4, #1
ldr r3, [sp]
ldrb r0, [r6, #0xe]
cmp r4, r0
blt _0805CA06
_0805CA1A:
adds r2, r5, #0
cmp r2, sb
blt _0805C9EC
b _0805CA62
_0805CA22:
movs r2, #0
cmp r2, sb
bge _0805CA62
movs r1, #0x20
adds r1, r1, r6
mov r8, r1
_0805CA2E:
lsls r1, r2, #2
adds r0, r6, #0
adds r0, #0x20
adds r0, r0, r1
ldr r3, [r0]
adds r4, r2, #1
adds r5, r4, #0
ldrb r0, [r6, #0xe]
cmp r5, r0
bge _0805CA5C
lsls r0, r5, #2
mov r1, r8
adds r7, r0, r1
_0805CA48:
ldm r7!, {r0}
adds r1, r3, #0
str r3, [sp]
bl sub_08004484
adds r4, #1
ldr r3, [sp]
ldrb r0, [r6, #0xe]
cmp r4, r0
blt _0805CA48
_0805CA5C:
adds r2, r5, #0
cmp r2, sb
blt _0805CA2E
_0805CA62:
add sp, #4
pop {r3, r4}
mov r8, r3
mov sb, r4
pop {r4, r5, r6, r7, pc}
thumb_func_start sub_0805CA6C
sub_0805CA6C: @ 0x0805CA6C
push {r4, r5, r6, lr}
adds r6, r0, #0
movs r5, #0
ldrb r0, [r6, #0xb]
bl GetCurrentRoomProperty
adds r4, r0, #0
cmp r4, #0
bne _0805CACE
movs r0, #0
b _0805CAE4
_0805CA82:
movs r0, #8
b _0805CAE4
_0805CA86:
movs r0, #0xf
ands r0, r2
cmp r0, #3
bne _0805CACC
adds r0, r4, #0
bl sub_0805CAF0
adds r2, r0, #0
cmp r2, #0
beq _0805CACC
movs r3, #0
cmp r3, r5
bhs _0805CAB8
ldr r0, [r6, #0x20]
cmp r0, r2
beq _0805CAB8
adds r1, r6, #0
adds r1, #0x20
_0805CAAA:
adds r1, #4
adds r3, #1
cmp r3, r5
bhs _0805CAB8
ldr r0, [r1]
cmp r0, r2
bne _0805CAAA
_0805CAB8:
cmp r3, r5
bne _0805CACC
lsls r1, r5, #2
adds r0, r6, #0
adds r0, #0x20
adds r0, r0, r1
str r2, [r0]
adds r5, #1
cmp r5, #8
beq _0805CA82
_0805CACC:
adds r4, #0x10
_0805CACE:
ldrb r2, [r4]
adds r0, r2, #0
cmp r0, #0xff
beq _0805CAE2
ldr r0, [r4]
ldr r1, _0805CAE8 @ =0x00FF000F
ands r0, r1
ldr r1, _0805CAEC @ =0x00280009
cmp r0, r1
bne _0805CA86
_0805CAE2:
adds r0, r5, #0
_0805CAE4:
pop {r4, r5, r6, pc}
.align 2, 0
_0805CAE8: .4byte 0x00FF000F
_0805CAEC: .4byte 0x00280009
thumb_func_start sub_0805CAF0
sub_0805CAF0: @ 0x0805CAF0
push {r4, r5, r6, lr}
adds r3, r0, #0
ldrh r1, [r3, #8]
ldr r2, _0805CB34 @ =gRoomControls
ldrh r0, [r2, #6]
adds r5, r1, r0
ldrh r1, [r3, #0xa]
ldrh r0, [r2, #8]
adds r4, r1, r0
ldr r1, _0805CB38 @ =gUnk_03003D90
ldr r2, [r1, #4]
cmp r2, r1
beq _0805CB42
_0805CB0A:
movs r6, #0x2e
ldrsh r0, [r2, r6]
cmp r5, r0
bne _0805CB3C
movs r6, #0x32
ldrsh r0, [r2, r6]
cmp r4, r0
bne _0805CB3C
ldrb r0, [r3, #2]
ldrb r6, [r2, #9]
cmp r0, r6
bne _0805CB3C
ldrb r0, [r2, #8]
cmp r0, #3
bne _0805CB3C
ldrb r0, [r3, #3]
ldrb r6, [r2, #0xa]
cmp r0, r6
bne _0805CB3C
adds r0, r2, #0
b _0805CB44
.align 2, 0
_0805CB34: .4byte gRoomControls
_0805CB38: .4byte gUnk_03003D90
_0805CB3C:
ldr r2, [r2, #4]
cmp r2, r1
bne _0805CB0A
_0805CB42:
movs r0, #0
_0805CB44:
pop {r4, r5, r6, pc}
.align 2, 0
thumb_func_start sub_0805CB48
sub_0805CB48: @ 0x0805CB48
push {r4, r5, r6, lr}
adds r4, r0, #0
movs r5, #0
ldrb r1, [r4, #0xe]
cmp r5, r1
bge _0805CB84
adds r3, r4, #0
adds r3, #0x20
adds r6, r3, #0
_0805CB5A:
ldr r0, [r3]
ldr r2, [r0, #4]
cmp r2, #0
bne _0805CB7A
subs r0, r1, #1
cmp r0, r5
bne _0805CB6C
str r2, [r3]
b _0805CB74
_0805CB6C:
lsls r0, r0, #2
adds r0, r6, r0
ldr r0, [r0]
str r0, [r3]
_0805CB74:
ldrb r0, [r4, #0xe]
subs r0, #1
strb r0, [r4, #0xe]
_0805CB7A:
adds r3, #4
adds r5, #1
ldrb r1, [r4, #0xe]
cmp r5, r1
blt _0805CB5A
_0805CB84:
ldrb r0, [r4, #0xe]
cmp r0, #1
bhi _0805CB8E
bl DeleteThisEntity
_0805CB8E:
pop {r4, r5, r6, pc}

View File

@ -0,0 +1,56 @@
sub_0805C94C: @ 0x0805C94C
push {r4, r5, r6, lr}
add r4, r0, #0
ldrb r0, [r4, #0xa]
cmp r0, #0
bne _0805C9B0
add r6, r4, #0
add r6, r6, #0x20
add r1, r6, #0
mov r2, #0
add r0, r4, #0
add r0, r0, #0x3c
_0805C962:
str r2, [r0]
sub r0, r0, #0x4
cmp r0, r1
bge _0805C962
add r0, r4, #0
bl Manager28_FindMatchingEntities
add r5, r0, #0
cmp r5, #0x1
ble _0805C9A8
bl GetEmptyManager
add r2, r0, #0
cmp r2, #0
beq _0805C9A8
mov r0, #0x9
strb r0, [r2, #0x8]
mov r0, #0x28
strb r0, [r2, #0x9]
mov r0, #0x1
strb r0, [r2, #0xa]
strb r5, [r2, #0xe]
add r1, r2, #0
add r1, r1, #0x20
add r0, r6, #0
ldm r0!, {r3, r5, r6}
stm r1!, {r3, r5, r6}
ldm r0!, {r3, r5, r6}
stm r1!, {r3, r5, r6}
ldm r0!, {r3, r5}
stm r1!, {r3, r5}
add r0, r2, #0
mov r1, #0x6
bl AppendEntityToList
_0805C9A8:
add r0, r4, #0
bl DeleteManager
b _0805C9B8
_0805C9B0:
mov r1, #0
mov r0, #0x1
strb r0, [r4, #0xc]
strb r1, [r4, #0xf]
_0805C9B8:
pop {r4, r5, r6, pc}

File diff suppressed because it is too large Load Diff

5558
data/data_08108D30.s Normal file

File diff suppressed because it is too large Load Diff

View File

@ -135,6 +135,16 @@ typedef struct Entity {
/*0x86*/ union SplitHWord field_0x86;
} Entity;
typedef struct LinkedList {
Entity* last;
Entity* first;
} LinkedList;
extern LinkedList gEntityLists[9];
extern LinkedList gUnk_03003D90;
extern LinkedList gUnk_03003DA0;
#define TILE(x, y) \
((((x - gRoomControls.roomOriginX) >> 4) & 0x3fU) | \
(((y - gRoomControls.roomOriginY) >> 4) & 0x3fU) << 6)
@ -189,6 +199,4 @@ enum {
#define Direction8ToAnimationState(expr) (Direction8RoundUp(expr) >> 2)
#define Direction8FromAnimationState(expr) (expr << 2)
extern Entity gUnk_03003DA0;
#endif

View File

@ -323,4 +323,5 @@ extern void sub_0804ACF8();
extern void sub_08073904(Entity*);
extern u32 sub_08056134(void);
extern u32 sub_0807CF30(void*);
extern void sub_08004484(Entity*, Entity*);
#endif

View File

@ -124,4 +124,13 @@ extern struct {
extern DiggingCaveEntrance* gUnk_08107DC0[];
typedef struct {
u8 unk_00;
u8 unk_01;
u8 unk_02;
u8 unk_03;
u16 unk_04;
u16 unk_06;
} UnkManager26HelperStruct;
#endif

View File

@ -81,4 +81,6 @@ extern RoomVars gRoomVars;
extern void SetTileType(u32, u32, u32);
extern void sub_08080964(u32 time, u32 magnitude); // shake screen
extern void* GetCurrentRoomProperty(u32);
#endif

View File

@ -507,9 +507,9 @@ SECTIONS {
asm/manager23.o(.text);
asm/manager24.o(.text);
asm/manager25.o(.text);
asm/manager26.o(.text);
src/manager/manager26.o(.text);
src/manager/manager27.o(.text);
asm/manager28.o(.text);
src/manager/manager28.o(.text);
asm/manager29.o(.text);
asm/manager2A.o(.text);
asm/manager2B.o(.text);
@ -1007,6 +1007,10 @@ SECTIONS {
data/data_08108308.o(.rodata);
src/manager/manager1E.o(.rodata);
data/data_08108C94.o(.rodata);
src/manager/manager26.o(.rodata);
src/manager/manager27.o(.rodata);
src/manager/manager28.o(.rodata);
data/data_08108D30.o(.rodata);
src/item.o(.rodata);
data/data_0811BD44.o(.rodata);
data/room_headers.o(.rodata);

View File

@ -4,7 +4,6 @@
extern void sub_080A2CC0();
extern void sub_0806F69C();
extern void EnqueueSFX();
extern Entity* GetCurrentRoomProperty();
void BladeTrap(Entity* ent) {
u16 uVar1;

View File

@ -132,12 +132,6 @@ void ClearDeletedEntity(Entity* ent) {
gEntCount--;
}
typedef struct LinkedList {
Entity* last;
Entity* first;
} LinkedList;
extern LinkedList gEntityLists[9];
extern EntityType gUnk_03003DB8;
void DeleteAllEntities(void) {

View File

@ -3,7 +3,6 @@
#include "flags.h"
void LoadRoomEntityList(EntityData* dat);
extern EntityData* GetCurrentRoomProperty(u32 unk);
extern void sub_0804B058(EntityData* dat);
extern void LoadRoomTileEntities(EntityData* dat);
extern void sub_0801AC98();

95
src/manager/manager26.c Normal file
View File

@ -0,0 +1,95 @@
#include "global.h"
#include "manager.h"
#include "entity.h"
#include "flags.h"
#include "room.h"
#include "functions.h"
typedef struct {
Manager manager;
u8 unk_20[0x8];
u8 unk_28;
u8 unk_29;
u16 unk_2a;
} Manager26;
void sub_0805C6D0(Manager26*);
void sub_0805C7A0(Manager26*);
void sub_0805C7C4(Manager26*);
void (* const gUnk_08108D04[])(Manager26*) = {
sub_0805C6D0,
sub_0805C7A0,
sub_0805C7C4
};
void sub_0805C7CC(Manager26*);
void sub_0805C6B8(Manager26* this) {
gUnk_08108D04[this->manager.action](this);
}
void sub_0805C6D0(Manager26* this) {
UnkManager26HelperStruct* tmp = GetCurrentRoomProperty(this->manager.unk_0a);
if (!tmp) {
DeleteManager(&this->manager);
return;
}
this->unk_2a = gRoomControls.roomOriginY + this->manager.unk_0e;
this->manager.unk_0e = 0;
this->unk_28 = 0;
this->unk_29 = 0;
while (tmp->unk_00 != 0xFF && this->manager.unk_0e < 0x20) {
Entity* obj;
obj = CreateObject(0x4C, tmp->unk_01, tmp->unk_02);
if (obj) {
obj->actionDelay = tmp->unk_03;
obj->x.HALF.HI = gRoomControls.roomOriginX + tmp->unk_04;
obj->y.HALF.HI = gRoomControls.roomOriginY + tmp->unk_06;
obj->parent = (Entity*) this;
obj->collisionLayer = 1;
obj->field_0x82.HALF.HI = this->manager.unk_0e;
obj->field_0x82.HALF.LO = tmp->unk_00;
this->unk_29 |= 1 << this->manager.unk_0e;
}
tmp++;
this->manager.unk_0e++;
}
if (this->manager.unk_0b == 0xFF) {
this->manager.action = 2;
} else {
if (CheckLocalFlag(this->manager.unk_0b)) {
this->manager.action = 2;
} else {
this->manager.action = 1;
}
}
}
void sub_0805C7A0(Manager26* this) {
if (this->unk_28 == this->unk_29) {
this->manager.action = 2;
SetLocalFlag(this->manager.unk_0b);
}
sub_0805C7CC(this);
}
void sub_0805C7C4(Manager26* this) {
sub_0805C7CC(this);
}
void sub_0805C7CC(Manager26* this) {
if (gPlayerState.flags.all & 0x80) {
if (gPlayerEntity.y.HALF.HI < this->unk_2a + 0x10) {
this->manager.unk_0d = 1;
} else {
this->manager.unk_0d = 0;
}
} else {
if (gPlayerEntity.y.HALF.HI < this->unk_2a + 0x28) {
this->manager.unk_0d = 3;
} else {
this->manager.unk_0d = 2;
}
}
}

View File

@ -5,9 +5,22 @@
extern u32 sub_0805C920(Entity*);
extern void LoadPaletteGroup(u32);
extern void (*const gUnk_08108D10[])(Entity*);
extern u8 gUnk_08108D20[];
void sub_0805C874(Entity*);
void sub_0805C894(Entity*);
void sub_0805C8B4(Entity*);
void sub_0805C908(Entity*);
void (*const gUnk_08108D10[])(Entity*) = {
sub_0805C874,
sub_0805C894,
sub_0805C8B4,
sub_0805C908
};
const u8 gUnk_08108D20[] = {
0x6F, 0x70, 0x71, 0x72, 0x71, 0x70
};
void Manager27(Entity* this) {
@ -33,7 +46,6 @@ void sub_0805C874(Entity* this) {
}
void sub_0805C894(Entity* this) {
if (sub_0805C920(this)) {
this->action = 2;
this->actionDelay = 1;

143
src/manager/manager28.c Normal file
View File

@ -0,0 +1,143 @@
#include "global.h"
#include "manager.h"
#include "entity.h"
#include "room.h"
#include "functions.h"
typedef struct {
Manager manager;
Entity* enemies[8];
} Manager28;
void Manager28_Entry(Manager28*);
void Manager28_Init(Manager28*);
void Manager28_Main(Manager28*);
u32 Manager28_FindMatchingEntities(Manager28*);
Entity* Manager28_FindMatchingEntity(EntityData*);
void Manager28_RemoveDeletedEntities(Manager28*);
void (* const Manager28_ActionFuncs[])(Manager28*) = {
Manager28_Init,
Manager28_Main
};
enum Manager28_Action {
Init = 0,
Main = 1
};
enum Manager28_InitState {
DoInit = 0,
DoNotInit = 1
};
void Manager28_Entry(Manager28* this) {
Manager28_ActionFuncs[this->manager.action](this);
}
NONMATCH("asm/non_matching/manager28/Manager28_Init.inc", void Manager28_Init(Manager28* this)) {
if (this->manager.unk_0a == DoInit) {
s32 tmp2;
int tmp4;
for (tmp4 = 0; tmp4 < 8; tmp4++) {
this->enemies[tmp4] = 0;
}
tmp2 = Manager28_FindMatchingEntities(this);
if (tmp2 > 1) {
Manager28* tmp3 = (Manager28*) GetEmptyManager();
if (tmp3) {
tmp3->manager.type = 9;
tmp3->manager.subtype = 0x28;
tmp3->manager.unk_0a = DoNotInit;
tmp3->manager.unk_0e = tmp2;
for (tmp4 = 0; tmp4 < 8; tmp4++) {
tmp3->enemies[tmp4] = this->enemies[tmp4];
}
AppendEntityToList(tmp3, 6);
}
}
DeleteManager(&this->manager);
} else {
this->manager.action = Main;
this->manager.unk_0f = 0;
}
}
END_NONMATCH
void Manager28_Main(Manager28* this) {
s32 n;
s32 i;
s32 j;
Entity* tmp;
Manager28_RemoveDeletedEntities(this);
n = this->manager.unk_0e - 1;
if ((this->manager.unk_0f++) & 1) {
for (i = 0; i < n; i++) {
tmp = this->enemies[i];
for (j = i + 1; j < this->manager.unk_0e; j++) {
sub_08004484(tmp, this->enemies[j]);
}
}
} else {
for (i = 0; i < n; i++) {
tmp = this->enemies[i];
for (j = i + 1; j < this->manager.unk_0e; j++) {
sub_08004484(this->enemies[j], tmp);
}
}
}
}
u32 Manager28_FindMatchingEntities(Manager28* this) {
u32 re = 0;
EntityData * tmp = GetCurrentRoomProperty(this->manager.unk_0b);
if (!tmp) return 0;
for (; *((u8*) tmp) != 0xFF && !(tmp->type == 9 && tmp->subtype == 0x28); tmp++) {
Entity* tmp2;
u32 i;
if (tmp->type != 3) continue;
tmp2 = Manager28_FindMatchingEntity(tmp);
if (!tmp2) continue;
for (i = 0; i < re; i++) {
if (this->enemies[i] == tmp2) break;
}
if (i != re) continue;
this->enemies[re++] = tmp2;
if (re == 8) return 8;
}
return re;
}
Entity* Manager28_FindMatchingEntity(EntityData* unk1) {
u32 x, y;
Entity* i;
LinkedList* tmp;
x = unk1->xPos + gRoomControls.roomOriginX;
y = unk1->yPos + gRoomControls.roomOriginY;
tmp = &gUnk_03003D90;
for (i = tmp->first; (u32) i != (u32) tmp; i = i->next) {
if (x == i->x.HALF.HI
&& y == i->y.HALF.HI
&& unk1->subtype == i->entityType.subtype
&& 3 == i->entityType.type
&& unk1->form == i->entityType.form) {
return i;
}
}
return 0;
}
void Manager28_RemoveDeletedEntities(Manager28* this) {
s32 i;
for (i = 0; i < this->manager.unk_0e; i++) {
if (this->enemies[i]->next == 0) {
if (this->manager.unk_0e-1 == i) {
this->enemies[i] = 0;
} else {
this->enemies[i] = this->enemies[this->manager.unk_0e-1];
}
this->manager.unk_0e--;
}
}
if (this->manager.unk_0e <= 1) DeleteThisEntity();
}

View File

@ -83,7 +83,6 @@ void ManagerB_WaitForDone(ManagerB* this) {
ManagerBHelper* CreateHelper(Manager*);
void ManagerBHelper_Monitor(ManagerBHelper*, Entity*, u32);
extern EntityData* GetCurrentRoomProperty(u8);
extern Entity* LoadRoomEntity(EntityData*);
void ManagerB_LoadFight(Manager* this) {

View File

@ -4,7 +4,6 @@
#include "flags.h"
#include "room.h"
extern Entity* GetCurrentRoomProperty(u8);
extern void LoadRoomEntityList(Entity*);
extern void DeleteThisEntity(void);
extern void DeleteManager(Manager*);

View File

@ -26,7 +26,6 @@ static u8 sub_08086954(Entity*);
extern u32 sub_080562CC(u32, u32, u32, u32);
extern void sub_08078AC0(u32, u32, u32);
extern void* GetCurrentRoomProperty(u8);
extern void (*const gUnk_081206B4[])(Entity*);
extern BoundingBox gUnk_081206AC; // TODO: should be const

View File

@ -9,7 +9,6 @@ extern void sub_0809EAD8(Entity*);
extern void sub_0809EABC(Entity*);
extern void EnqueueSFX(u32);
extern void sub_080A2CC0(Entity*, Entity**, u16*);
extern Entity* GetCurrentRoomProperty(u32);
extern void SetTile(u32, u32, u32);
extern void sub_0806F69C(Entity*);

View File

@ -3,7 +3,6 @@
#include "functions.h"
#include "player.h"
extern Entity* GetCurrentRoomProperty(u32);
extern void sub_080A2CC0(Entity*, Entity**, u16*);
extern u16 gUnk_08123318[];

View File

@ -323,7 +323,7 @@ void sub_0808EBB8(Entity* this) {
}
static Entity* sub_0808EC80(int form) {
Entity* entityA = &gUnk_03003DA0;
Entity* entityA = (Entity*) &gUnk_03003DA0;
Entity* entityB = entityA->next;
while (entityB != entityA) {
if ((entityB->entityType.type == 0x6 && entityB->entityType.subtype == 0x48) &&