-
Notifications
You must be signed in to change notification settings - Fork 79
/
Copy pathnpc.h
387 lines (371 loc) · 8.89 KB
/
npc.h
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
#ifndef NPC_H
#define NPC_H
#include "global.h"
#include "asm.h"
#include "common.h"
#include "sound.h"
#include "effects.h"
#include "room.h"
#include "flags.h"
#include "physics.h"
#include "message.h"
#include "script.h"
#include "save.h"
#include "entity.h"
#include "player.h"
#include "structures.h"
typedef enum {
DIALOG_ROOM_FLAG,
DIALOG_LOCAL_FLAG,
DIALOG_GLOBAL_FLAG,
DIALOG_KINSTONE,
DIALOG_INVENTORY,
} DialogFlagType;
typedef enum {
DIALOG_NONE,
DIALOG_NORMAL,
DIALOG_SET_FLAG,
DIALOG_TOGGLE_FLAG,
DIALOG_CHECK_FLAG,
DIALOG_CALL_FUNC,
DIALOG_MINISH,
} DialogType;
typedef struct {
u32 flag : 12;
DialogFlagType flagType : 4;
DialogType type : 4;
u32 fromSelf : 1;
union {
struct {
u16 a;
u16 b;
} indices;
void (*func)(Entity* e);
} data;
} Dialog;
typedef struct {
/*0x00*/ u8 id;
/*0x01*/ u8 type;
/*0x02*/ u8 type2;
/*0x03*/ u8 collisionLayer;
/*0x04*/ u16 x;
/*0x06*/ u16 y;
/*0x08*/ u16* script;
/*0x0c*/ u16 timer;
/*0x0e*/ u16 progressBitfield; /**< For which gSave.global_process this NPC should appear. */
} NPCStruct;
extern NPCStruct gNPCData[50];
void sub_0806EC20(Entity* ent);
void sub_0806EC38(void);
u32 sub_0806ED78(Entity* ent);
s32 GetAnimationStateInRectRadius(Entity*, u32, u32);
u32 GetAnimationState(Entity* ent);
s32 GetFacingDirectionInRectRadius(Entity* ent, u32 x, u32 y);
void sub_0806EE04(Entity* ent, void* a2, u32 a3);
u32 sub_0806EE20(Entity* ent);
s32 sub_0806F078(Entity* ent, s32 a2);
void InitializeNPCFusion(Entity* ent);
void MarkFuserDone(Entity* ent);
void ShowNPCDialogue(Entity* ent, const Dialog* dia);
Entity* CreateNPC(u32 subtype, u32 form, u32 parameter);
u32 UpdateFuseInteraction(Entity*);
void NPCInit(Entity* ent);
void CollideFollowers(void);
// TODO move?
void AddInteractableWhenBigFuser(Entity* ent, u32 kinstoneId);
u32 GetFusionToOffer(Entity*);
void AddInteractableWhenBigObject(Entity*);
void sub_0807000C(Entity*);
void AddInteractableAsMinishFuser(Entity* ent, u32 kinstoneId);
enum NPC {
/*0x00*/ NPC_NONE_0,
/*0x01*/ GENTARI,
/*0x02*/ FESTARI,
/*0x03*/ FOREST_MINISH,
/*0x04*/ POSTMAN,
/*0x05*/ NPC_UNK_5,
/*0x06*/ TPWNSPERSON,
/*0x07*/ KID,
/*0x08*/ GUARD,
/*0x09*/ NPC_UNK_9,
/*0x0a*/ STAMP,
/*0x0b*/ MAID,
/*0x0c*/ MARCY,
/*0x0d*/ WHEATON,
/*0x0e*/ PITA,
/*0x0f*/ MINISH_EZLO,
/*0x10*/ MAILBOX,
/*0x11*/ BEEDLE,
/*0x12*/ BROCCO,
/*0x13*/ SITTING_PERSON,
/*0x14*/ PINA,
/*0x15*/ GUARD_1,
/*0x16*/ MAID_1,
/*0x17*/ DIN,
/*0x18*/ NAYRU,
/*0x19*/ FARORE,
/*0x1a*/ STURGEON,
/*0x1b*/ TINGLE_SIBLINGS,
/*0x1c*/ STOCKWELL,
/*0x1d*/ TALON,
/*0x1e*/ MALON,
/*0x1f*/ EPONA,
/*0x20*/ MILK_CART,
/*0x21*/ GHOST_BROTHERS,
/*0x22*/ SMITH,
/*0x23*/ NPC_UNK_23,
/*0x24*/ KING_DALTUS,
/*0x25*/ MINISTER_POTHO,
/*0x26*/ NPC_UNK_26,
/*0x27*/ VAATI,
/*0x28*/ ZELDA,
/*0x29*/ MUTOH,
/*0x2a*/ CARPENTER,
/*0x2b*/ CASTOR_WILDS_STATUE,
/*0x2c*/ CAT,
/*0x2d*/ MOUNTAIN_MINISH,
/*0x2e*/ ZELDA_FOLLOWER,
/*0x2f*/ MELARI,
/*0x30*/ BLADE_BROTHERS,
/*0x31*/ COW,
/*0x32*/ GORON,
/*0x33*/ GORON_MERCHANT,
/*0x34*/ GORMAN,
/*0x35*/ DOG,
/*0x36*/ SYRUP,
/*0x37*/ REM,
/*0x38*/ TOWN_MINISH,
/*0x39*/ LIBRARI,
/*0x3a*/ PERCY,
/*0x3b*/ VAATI_REBORN,
/*0x3c*/ MOBLIN_LADY,
/*0x3d*/ LIBRARIANS,
/*0x3e*/ FARMERS,
/*0x3f*/ CARLOV,
/*0x40*/ DAMPE,
/*0x41*/ DR_LEFT,
/*0x42*/ KING_GUSTAF,
/*0x43*/ GINA,
/*0x44*/ SIMON,
/*0x45*/ ANJU,
/*0x46*/ MAMA,
/*0x47*/ EMMA,
/*0x48*/ TEACHERS,
/*0x49*/ WIND_TRIBESPEOPLE,
/*0x4a*/ GREGAL,
/*0x4b*/ MAYOR_HAGEN,
/*0x4c*/ BIG_GORON,
/*0x4d*/ EZLO,
/*0x4e*/ NPC_UNK_4E,
/*0x4f*/ NPC_UNK_4F,
/*0x50*/ CLOTHES_RACK,
/*0x51*/ PICOLYTE_BOTTLE,
/*0x52*/ SMALL_TOWN_MINISH,
/*0x53*/ HURDY_GURDY_MAN,
/*0x54*/ CUCCO,
/*0x55*/ CUCCO_CHICK,
/*0x56*/ FUSION_MENU_NPC,
/*0x57*/ PHONOGRAPH,
/*0x58*/ NPC_UNK_58,
/*0x59*/ NPC_NONE_1,
/*0x5a*/ NPC_NONE_2,
/*0x5b*/ NPC_NONE_3,
/*0x5c*/ NPC_NONE_4,
/*0x5d*/ NPC_NONE_5,
/*0x5e*/ NPC_NONE_6,
/*0x5f*/ NPC_NONE_7,
/*0x60*/ NPC_NONE_8,
/*0x61*/ NPC_NONE_9,
/*0x62*/ NPC_NONE_10,
/*0x63*/ NPC_NONE_11,
/*0x64*/ NPC_NONE_12,
/*0x65*/ NPC_NONE_13,
/*0x66*/ NPC_NONE_14,
/*0x67*/ NPC_NONE_15,
/*0x68*/ NPC_NONE_16,
/*0x69*/ NPC_NONE_17,
/*0x6a*/ NPC_NONE_18,
/*0x6b*/ NPC_NONE_19,
/*0x6c*/ NPC_NONE_20,
/*0x6d*/ NPC_NONE_21,
/*0x6e*/ NPC_NONE_22,
/*0x6f*/ NPC_NONE_23,
/*0x70*/ NPC_NONE_24,
/*0x71*/ NPC_NONE_25,
/*0x72*/ NPC_NONE_26,
/*0x73*/ NPC_NONE_27,
/*0x74*/ NPC_NONE_28,
/*0x75*/ NPC_NONE_29,
/*0x76*/ NPC_NONE_30,
/*0x77*/ NPC_NONE_31,
/*0x78*/ NPC_NONE_32,
/*0x79*/ NPC_NONE_33,
/*0x7a*/ NPC_NONE_34,
/*0x7b*/ NPC_NONE_35,
/*0x7c*/ NPC_NONE_36,
/*0x7d*/ NPC_NONE_37,
/*0x7e*/ NPC_NONE_38,
/*0x7f*/ NPC_NONE_39,
};
void Gentari();
void Gentari_Fusion(Entity*);
void Festari();
void Festari_Fusion();
void ForestMinish();
void ForestMinish_Head(Entity*);
void ForestMinish_Fusion(Entity*);
void Postman();
void Postman_Fusion(Entity*);
void NPC5();
void Townsperson(Entity*);
void Townsperson_Head(Entity*);
void Townsperson_Fusion(Entity*);
void Kid();
void Kid_Head(Entity*);
void Kid_Fusion(Entity*);
void Guard();
void Guard_Head(Entity*);
void NPC9(Entity*);
void Stamp(Entity*);
void Maid(Entity*);
void Maid_Head(Entity*);
void Marcy(Entity*);
void Wheaton(Entity*);
void Pita();
void MinishEzlo(Entity*);
void MinishEzlo_Head(Entity*);
void Mailbox(Entity*);
void Beedle(Entity*);
void Beedle_Head(Entity*);
void Brocco();
void Brocco_Fusion(Entity*);
void SittingPerson();
void SittingPerson_Head(Entity*);
void SittingPerson_Fusion(Entity*);
void Pina();
void Pina_Fusion(Entity*);
void Din();
void Din_Fusion(Entity*);
void Nayru();
void Nayru_Fusion(Entity*);
void Farore();
void Farore_Fusion(Entity*);
void Sturgeon();
void Sturgeon_Head(Entity*);
void Sturgeon_Fusion(Entity*);
void TingleSiblings(Entity*);
void TingleSiblings_Fusion(Entity*);
void Stockwell();
void Talon();
void Talon_Head(Entity*);
void Talon_Fusion(Entity*);
void Malon();
void Malon_Fusion(Entity*);
void Epona();
void Epona_Fusion();
void MilkCart(Entity*);
void GhostBrothers();
void GhostBrothers_Fusion(Entity*);
void Smith();
void Smith_Head(Entity*);
void Smith_Fusion(Entity*);
void NPC23();
void KingDaltus();
void KingDaltus_Fusion(Entity*);
void MinisterPotho();
void MinisterPotho_Fusion(Entity*);
void NPC26(Entity*);
void Vaati(Entity*);
void Zelda(Entity*);
void Mutoh();
void Mutoh_Head(Entity*);
void Mutoh_Fusion(Entity*);
void Carpenter();
void Carpenter_Head(Entity*);
void Carpenter_Fusion(Entity*);
void CastorWildsStatue();
void CastorWildsStatue_Fusion(Entity*);
void Cat();
void Cat_Fusion(Entity*);
void MountainMinish();
void MountainMinish_Head(Entity*);
void MountainMinish_Fusion(Entity*);
void ZeldaFollower(Entity*);
void Melari(Entity*);
void Melari_Head(Entity*);
void Melari_Fusion(Entity*);
void BladeBrothers();
void BladeBrothers_Fusion(Entity*);
void Cow();
void Cow_Fusion();
void Goron();
void Goron_Fusion(Entity*);
void GoronMerchant(Entity*);
void Gorman();
void Gorman_Head(Entity*);
void Dog();
void Dog_Head();
void Dog_Fusion();
void Syrup();
void Syrup_Head(Entity*);
void Rem();
void TownMinish();
void TownMinish_Head();
void TownMinish_Fusion(Entity*);
void Librari();
void Librari_Fusion(Entity*);
void Percy();
void Percy_Head(Entity*);
void Percy_Fusion(Entity*);
void VaatiReborn(Entity*);
void MoblinLady(Entity*);
void Librarians(Entity*);
void Farmers(Entity*);
void Farmers_Head(Entity*);
void Farmers_Fusion(Entity*);
void Carlov(Entity*);
void Dampe(Entity*);
void Dampe_Fusion(Entity*);
void DrLeft(Entity*);
void KingGustaf(Entity*);
void Gina();
void Gina_Fusion(Entity*);
void Simon(Entity*);
void Anju();
void Anju_Fusion();
void Mama();
void Mama_Head(Entity*);
void Mama_Fusion(Entity*);
void Emma(Entity*);
void Teachers();
void Teachers_Head(Entity*);
void Teachers_Fusion(Entity*);
void WindTribespeople(Entity*);
void WindTribespeople_Head(Entity*);
void WindTribespeople_Fusion(Entity*);
void Gregal();
void Gregal_Fusion(Entity*);
void MayorHagen();
void MayorHagen_Fusion(Entity*);
void BigGoron();
void Ezlo(Entity*);
void NPC4E(Entity*);
void NPC4E_Fusion(Entity*);
void NPC4F(Entity*);
void ClothesRack(Entity*);
void PicolyteBottle(Entity*);
void SmallTownMinish(Entity*);
void HurdyGurdyMan();
void HurdyGurdyMan_Head(Entity*);
void HurdyGurdyMan_Fusion(Entity*);
void Cucco();
void Cucco_Fusion(Entity*);
void CuccoChick();
void CuccoChick_Fusion();
void FusionMenuNPC(Entity*);
void FusionMenuNPC_Head(Entity*);
void Phonograph(Entity*);
void NPC58();
void NPC58_Head();
extern void (*const gNPCFunctions[128][3])(Entity*);
#endif // NPC_H