blob: 9c06a928e281b3595b66da995079cd21f408d0b2 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
/**
* @file minishSizedEntranceManager.c
* @ingroup Managers
*
* @brief Spawns MINISH_SIZED_ENTRANCE at the locations in the room property super->unk_0a when they are visible on the
* screen.
*/
#include "manager/minishSizedEntranceManager.h"
#include "object.h"
#include "flags.h"
#include "room.h"
#include "script.h"
#include "asm.h"
typedef struct {
u16 x;
u16 y;
u16 field_0x4;
u16 timer;
} MinishEntranceSpawnData;
bool32 sub_0805B8CC(u32);
void MinishSizedEntranceManager_Main(MinishSizedEntranceManager* this) {
MinishEntranceSpawnData* spawnData;
u32 count;
if (super->action == 0) {
super->action = 1;
this->field_0x20 = 0;
}
spawnData = (MinishEntranceSpawnData*)GetCurrentRoomProperty(super->type);
for (count = 0; (spawnData->x != 0) && (count < 0x20); ++count) {
if (CheckRectOnScreen(spawnData->x, spawnData->y, 4, 4) != 0) {
if (((this->field_0x20 & (1 << count)) == 0) && (sub_0805B8CC(spawnData->field_0x4) != 0)) {
Entity* object = CreateObject(MINISH_SIZED_ENTRANCE, 1, 0);
if (object != NULL) {
object->timer = spawnData->timer;
object->subtimer = count;
object->x.HALF.HI = gRoomControls.origin_x + spawnData->x;
object->y.HALF.HI = gRoomControls.origin_y + spawnData->y;
object->parent = (Entity*)this;
ResolveCollisionLayer(object);
this->field_0x20 |= 1 << count;
}
}
} else {
this->field_0x20 &= ~(1 << count);
}
spawnData++;
}
}
bool32 sub_0805B8CC(u32 param_1) {
if (param_1 == 4) {
return CheckGlobalFlag(TATEKAKE_HOUSE);
}
if (param_1 < 5) {
return TRUE;
}
if (param_1 > 6) {
return TRUE;
}
return FALSE;
}
|