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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
#include "ActorBehavior.h"
#include <libultraship/bridge/consolevariablebridge.h>
#include "CustomItem/CustomItem.h"
extern "C" {
#include "variables.h"
#include "overlays/actors/ovl_En_Gamelupy/z_en_gamelupy.h"
}
#define IS_AT(xx, zz) (actor->home.pos.x == xx && actor->home.pos.z == zz)
RandoCheckId IdentifyGameLupy(Actor* actor) {
RandoCheckId randoCheckId = RC_UNKNOWN;
switch (CURRENT_DAY) {
case 1: {
if (IS_AT(-100.0f, 150.0f)) {
randoCheckId = RC_DEKU_PLAYGROUND_DAY_1_RUPEE_01;
} else if (IS_AT(100.0f, -50.0f)) {
randoCheckId = RC_DEKU_PLAYGROUND_DAY_1_RUPEE_02;
} else if (IS_AT(-200.0f, -250.0f)) {
randoCheckId = RC_DEKU_PLAYGROUND_DAY_1_RUPEE_03;
} else if (IS_AT(200.0f, 350.0f)) {
randoCheckId = RC_DEKU_PLAYGROUND_DAY_1_RUPEE_04;
} else if (IS_AT(-500.0f, 350.0f)) {
randoCheckId = RC_DEKU_PLAYGROUND_DAY_1_RUPEE_05;
} else if (IS_AT(500.0f, -250.0f)) {
randoCheckId = RC_DEKU_PLAYGROUND_DAY_1_RUPEE_06;
}
} break;
case 2: {
if (IS_AT(-100.0f, -50.0f)) {
randoCheckId = RC_DEKU_PLAYGROUND_DAY_2_RUPEE_01;
} else if (IS_AT(300.0f, -250.0f)) {
randoCheckId = RC_DEKU_PLAYGROUND_DAY_2_RUPEE_02;
} else if (IS_AT(500.0f, 550.0f)) {
randoCheckId = RC_DEKU_PLAYGROUND_DAY_2_RUPEE_03;
} else if (IS_AT(100.0f, 150.0f)) {
randoCheckId = RC_DEKU_PLAYGROUND_DAY_2_RUPEE_04;
} else if (IS_AT(-300.0f, 350.0f)) {
randoCheckId = RC_DEKU_PLAYGROUND_DAY_2_RUPEE_05;
} else if (IS_AT(-500.0f, -450.0f)) {
randoCheckId = RC_DEKU_PLAYGROUND_DAY_2_RUPEE_06;
}
} break;
case 3: {
if (IS_AT(-100.0f, -50.0f)) {
randoCheckId = RC_DEKU_PLAYGROUND_DAY_3_RUPEE_01;
} else if (IS_AT(100.0f, 150.0f)) {
randoCheckId = RC_DEKU_PLAYGROUND_DAY_3_RUPEE_02;
} else if (IS_AT(-300.0f, 250.0f)) {
randoCheckId = RC_DEKU_PLAYGROUND_DAY_3_RUPEE_03;
} else if (IS_AT(300.0f, -150.0f)) {
randoCheckId = RC_DEKU_PLAYGROUND_DAY_3_RUPEE_04;
} else if (IS_AT(-500.0f, -450.0f)) {
randoCheckId = RC_DEKU_PLAYGROUND_DAY_3_RUPEE_05;
} else if (IS_AT(500.0f, 550.0f)) {
randoCheckId = RC_DEKU_PLAYGROUND_DAY_3_RUPEE_06;
}
} break;
}
return randoCheckId;
}
void Gamelupy_RandoDrawFunc(Actor* actor, PlayState* play) {
auto randoSaveCheck = RANDO_SAVE_CHECKS[(RandoCheckId)actor->home.rot.x];
Matrix_Scale(20.0f, 20.0f, 20.0f, MTXMODE_APPLY);
Rando::DrawItem(Rando::ConvertItem(randoSaveCheck.randoItemId, (RandoCheckId)actor->home.rot.x),
(RandoCheckId)actor->home.rot.x, actor);
}
void Rando::ActorBehavior::InitEnGamelupyBehavior() {
COND_ID_HOOK(OnActorInit, ACTOR_EN_GAMELUPY, IS_RANDO, [](Actor* actor) {
if (gPlayState->sceneId != SCENE_DEKUTES) {
return;
}
RandoCheckId randoCheckId = IdentifyGameLupy(actor);
if (randoCheckId == RC_UNKNOWN) {
return;
}
auto& randoSaveCheck = RANDO_SAVE_CHECKS[randoCheckId];
if (randoSaveCheck.cycleObtained || !randoSaveCheck.shuffled) {
return;
}
actor->home.rot.x = randoCheckId;
actor->draw = Gamelupy_RandoDrawFunc;
});
COND_VB_SHOULD(VB_COLLECT_PLAYGROUND_RUPEE, IS_RANDO, {
if (!*should) {
return;
}
EnGamelupy* gameLupy = va_arg(args, EnGamelupy*);
if (gameLupy->actor.home.rot.x == RC_UNKNOWN) {
return;
}
auto& randoSaveCheck = RANDO_SAVE_CHECKS[(RandoCheckId)gameLupy->actor.home.rot.x];
randoSaveCheck.eligible = true;
*should = false;
*gameLupy->minigameScore += ENGAMELUPY_POINTS;
Actor_Kill(&gameLupy->actor);
});
}
|