Paper Mario DX
Paper Mario (N64) modding
Loading...
Searching...
No Matches
macros.h
Go to the documentation of this file.
1
#ifndef _SCRIPT_API_MACROS_H_
2
#define _SCRIPT_API_MACROS_H_
3
4
#include "
evt.h
"
5
#include <stdarg.h>
6
7
#ifdef _LANGUAGE_C_PLUS_PLUS
8
extern
"C"
{
9
#endif
10
11
/****** EXPRESSIONS ***************************************************************************************************/
12
20
23
24
#define EVT_LOCAL_VAR_CUTOFF -20000000
25
#define EVT_LOCAL_VAR_OFFSET 30000000
26
#define EVT_MAP_VAR_CUTOFF -40000000
27
#define EVT_MAP_VAR_OFFSET 50000000
28
#define EVT_LOCAL_FLAG_CUTOFF -60000000
29
#define EVT_LOCAL_FLAG_OFFSET 70000000
30
#define EVT_MAP_FLAG_CUTOFF -80000000
31
#define EVT_MAP_FLAG_OFFSET 90000000
32
#define EVT_AREA_FLAG_CUTOFF -100000000
33
#define EVT_AREA_FLAG_OFFSET 110000000
34
#define EVT_GAME_FLAG_CUTOFF -120000000
35
#define EVT_GAME_FLAG_OFFSET 130000000
36
#define EVT_AREA_BYTE_CUTOFF -140000000
37
#define EVT_AREA_BYTE_OFFSET 150000000
38
#define EVT_GAME_BYTE_CUTOFF -160000000
39
#define EVT_GAME_BYTE_OFFSET 170000000
40
#define EVT_ARRAY_VAR_CUTOFF -180000000
41
#define EVT_ARRAY_VAR_OFFSET 190000000
42
#define EVT_ARRAY_FLAG_CUTOFF -200000000
43
#define EVT_ARRAY_FLAG_OFFSET 210000000
44
#define EVT_FIXED_CUTOFF -220000000
45
#define EVT_FIXED_OFFSET 230000000
46
#define EVT_FIXED_END -240000000
47
#define EVT_IGNORE_ARG -250000000
// used by a couple functions to selectively ignore args
48
#define EVT_LIMIT -270000000
// TODO better name
49
50
// This fixes an issue with fixed point numbers not being correct. Potentially a truncation vs round difference.
51
#define FLOAT_ROUND(x) ((x) >=0 ? (f64)((x) + 0.9) : (f64)(x))
52
#define Float(DOUBLE) ((Bytecode)FLOAT_ROUND(((DOUBLE) * 1024.0f)) - EVT_FIXED_OFFSET)
53
55
#define EVT_FIXED_TO_FLOAT(x) ({f32 var = (x) + EVT_FIXED_OFFSET; var /= 1024.0f; var;})
56
58
#define FLOAT_TO_FIXED(x) (((x) * 1024.0f) + -EVT_FIXED_OFFSET)
59
61
#define Ref(sym) ((Bytecode) &(sym))
62
68
#define LocalVar(INDEX) ((INDEX) - EVT_LOCAL_VAR_OFFSET)
69
74
#define MapVar(INDEX) ((INDEX) - EVT_MAP_VAR_OFFSET)
75
81
#define LocalFlag(INDEX) ((INDEX) - EVT_LOCAL_FLAG_OFFSET)
82
87
#define MapFlag(INDEX) ((INDEX) - EVT_MAP_FLAG_OFFSET)
88
95
#define AreaFlag(INDEX) ((INDEX) - EVT_AREA_FLAG_OFFSET)
96
102
#define GameFlag(INDEX) ((INDEX) - EVT_GAME_FLAG_OFFSET)
103
111
#define AreaByte(INDEX) ((INDEX) - EVT_AREA_BYTE_OFFSET)
112
116
#define GameByte(INDEX) ((INDEX) - EVT_GAME_BYTE_OFFSET)
117
123
#define ArrayVar(INDEX) ((INDEX) - EVT_ARRAY_VAR_OFFSET)
124
129
#define ArrayFlag(INDEX) ((INDEX) - EVT_ARRAY_FLAG_OFFSET)
130
133
#define EVT_ENTITY_ID_BIT 0x4000
134
#define EVT_ENTITY_INDEX(entityIndex) ((entityIndex) + EVT_ENTITY_ID_BIT)
135
136
// inverse macros for obtaining the index of a variable from its encoded form
137
#define EVT_INDEX_OF_LOCAL_VAR(v) ((v) + EVT_LOCAL_VAR_OFFSET)
138
#define EVT_INDEX_OF_LOCAL_FLAG(v) ((v) + EVT_LOCAL_FLAG_OFFSET)
139
#define EVT_INDEX_OF_MAP_VAR(v) ((v) + EVT_MAP_VAR_OFFSET)
140
#define EVT_INDEX_OF_MAP_FLAG(v) ((v) + EVT_MAP_FLAG_OFFSET)
141
#define EVT_INDEX_OF_AREA_FLAG(v) ((v) + EVT_AREA_FLAG_OFFSET)
142
#define EVT_INDEX_OF_AREA_BYTE(v) ((v) + EVT_AREA_BYTE_OFFSET)
143
#define EVT_INDEX_OF_GAME_FLAG(v) ((v) + EVT_GAME_FLAG_OFFSET)
144
#define EVT_INDEX_OF_GAME_BYTE(v) ((v) + EVT_GAME_BYTE_OFFSET)
145
#define EVT_INDEX_OF_ARRAY_FLAG(v) ((v) + EVT_ARRAY_FLAG_OFFSET)
146
#define EVT_INDEX_OF_ARRAY_VAR(v) ((v) + EVT_ARRAY_VAR_OFFSET)
147
148
// shorthand names for LocalVar
149
#define LVar0 LocalVar(0)
150
#define LVar1 LocalVar(1)
151
#define LVar2 LocalVar(2)
152
#define LVar3 LocalVar(3)
153
#define LVar4 LocalVar(4)
154
#define LVar5 LocalVar(5)
155
#define LVar6 LocalVar(6)
156
#define LVar7 LocalVar(7)
157
#define LVar8 LocalVar(8)
158
#define LVar9 LocalVar(9)
159
#define LVarA LocalVar(10)
160
#define LVarB LocalVar(11)
161
#define LVarC LocalVar(12)
162
#define LVarD LocalVar(13)
163
#define LVarE LocalVar(14)
164
#define LVarF LocalVar(15)
165
166
// shorthand names for common LocalFlags
167
// these actually run all the way up to LocalFlag(96), but nothing past 15 is ever used
168
#define LFlag0 LocalFlag(0)
169
#define LFlag1 LocalFlag(1)
170
#define LFlag2 LocalFlag(2)
171
#define LFlag3 LocalFlag(3)
172
#define LFlag4 LocalFlag(4)
173
#define LFlag5 LocalFlag(5)
174
#define LFlag6 LocalFlag(6)
175
#define LFlag7 LocalFlag(7)
176
#define LFlag8 LocalFlag(8)
177
#define LFlag9 LocalFlag(9)
178
#define LFlagA LocalFlag(10)
179
#define LFlagB LocalFlag(11)
180
#define LFlagC LocalFlag(12)
181
#define LFlagD LocalFlag(13)
182
#define LFlagE LocalFlag(14)
183
#define LFlagF LocalFlag(15)
184
185
/****** INSTRUCTIONS **************************************************************************************************/
186
199
207
208
#define EVT_CMD(opcode, argv...) \
209
opcode, \
210
(sizeof((Bytecode[]){argv})/sizeof(Bytecode)), \
211
##argv
212
214
#define End EVT_CMD(EVT_OP_END),
215
218
#define Return EVT_CMD(EVT_OP_RETURN),
219
223
#define Jump(EVT_SOURCE) EVT_CMD(EVT_OP_JUMP, (Bytecode) EVT_SOURCE),
224
228
#define Label(LABEL_ID) EVT_CMD(EVT_OP_LABEL, LABEL_ID),
229
233
#define Goto(LABEL_ID) EVT_CMD(EVT_OP_GOTO, LABEL_ID),
234
246
#define Loop(TIMES) EVT_CMD(EVT_OP_LOOP, TIMES),
247
249
#define EndLoop EVT_CMD(EVT_OP_END_LOOP),
250
252
#define BreakLoop EVT_CMD(EVT_OP_BREAK_LOOP),
253
255
#define Wait(NUM_FRAMES) EVT_CMD(EVT_OP_WAIT_FRAMES, NUM_FRAMES),
256
257
259
#define WaitSecs(NUM_SECONDS) EVT_CMD(EVT_OP_WAIT_SECS, NUM_SECONDS),
260
270
#define IfEq(LVAR, RVAR) EVT_CMD(EVT_OP_IF_EQ, LVAR, RVAR),
271
273
#define IfNe(LVAR, RVAR) EVT_CMD(EVT_OP_IF_NE, LVAR, RVAR),
274
276
#define IfLt(LVAR, RVAR) EVT_CMD(EVT_OP_IF_LT, LVAR, RVAR),
277
279
#define IfGt(LVAR, RVAR) EVT_CMD(EVT_OP_IF_GT, LVAR, RVAR),
280
282
#define IfLe(LVAR, RVAR) EVT_CMD(EVT_OP_IF_LE, LVAR, RVAR),
283
285
#define IfGe(LVAR, RVAR) EVT_CMD(EVT_OP_IF_GE, LVAR, RVAR),
286
289
#define IfFlag(LVAR, RVAR) EVT_CMD(EVT_OP_IF_FLAG, LVAR, RVAR),
290
293
#define IfNotFlag(LVAR, RVAR) EVT_CMD(EVT_OP_IF_NOT_FLAG, LVAR, RVAR),
294
296
#define Else EVT_CMD(EVT_OP_ELSE),
297
299
#define EndIf EVT_CMD(EVT_OP_END_IF),
300
312
#define Switch(LVAR) EVT_CMD(EVT_OP_SWITCH, LVAR),
313
317
#define SwitchConst(LCONST) EVT_CMD(EVT_OP_SWITCH_CONST, LCONST),
318
320
#define CaseEq(RVAR) EVT_CMD(EVT_OP_CASE_EQ, RVAR),
321
323
#define CaseNe(RVAR) EVT_CMD(EVT_OP_CASE_NE, RVAR),
324
326
#define CaseLt(RVAR) EVT_CMD(EVT_OP_CASE_LT, RVAR),
327
329
#define CaseGt(RVAR) EVT_CMD(EVT_OP_CASE_GT, RVAR),
330
332
#define CaseLe(RVAR) EVT_CMD(EVT_OP_CASE_LE, RVAR),
333
335
#define CaseGe(RVAR) EVT_CMD(EVT_OP_CASE_GE, RVAR),
336
338
#define CaseDefault EVT_CMD(EVT_OP_CASE_DEFAULT),
339
342
#define CaseOrEq(RVAR) EVT_CMD(EVT_OP_CASE_OR_EQ, RVAR),
343
346
#define CaseAndEq(RVAR) EVT_CMD(EVT_OP_CASE_AND_EQ, RVAR),
347
350
#define CaseFlag(RVAR) EVT_CMD(EVT_OP_CASE_FLAG, RVAR),
351
353
#define EndCaseGroup EVT_CMD(EVT_OP_END_CASE_GROUP),
354
357
#define CaseRange(MIN, MAX) EVT_CMD(EVT_OP_CASE_RANGE, MIN, MAX),
358
360
#define BreakSwitch EVT_CMD(EVT_OP_BREAK_SWITCH),
361
363
#define EndSwitch EVT_CMD(EVT_OP_END_SWITCH),
364
366
#define Set(VAR, INT_VALUE) EVT_CMD(EVT_OP_SET, VAR, (Bytecode) INT_VALUE),
367
371
#define SetConst(VAR, CONST) EVT_CMD(EVT_OP_SET_CONST, VAR, (Bytecode) CONST),
372
374
#define SetF(VAR, FLOAT_VALUE) EVT_CMD(EVT_OP_SETF, VAR, FLOAT_VALUE),
375
376
// Basic arithmetic operations.
377
#define Add(VAR, INT_VALUE) EVT_CMD(EVT_OP_ADD, VAR, INT_VALUE),
378
#define Sub(VAR, INT_VALUE) EVT_CMD(EVT_OP_SUB, VAR, INT_VALUE),
379
#define Mul(VAR, INT_VALUE) EVT_CMD(EVT_OP_MUL, VAR, INT_VALUE),
380
#define Div(VAR, INT_VALUE) EVT_CMD(EVT_OP_DIV, VAR, INT_VALUE),
381
#define Mod(VAR, INT_VALUE) EVT_CMD(EVT_OP_MOD, VAR, INT_VALUE),
382
383
// Basic floating-point arithmetic operations.
384
#define AddF(VAR, FLOAT_VALUE) EVT_CMD(EVT_OP_ADDF, VAR, FLOAT_VALUE),
385
#define SubF(VAR, FLOAT_VALUE) EVT_CMD(EVT_OP_SUBF, VAR, FLOAT_VALUE),
386
#define MulF(VAR, FLOAT_VALUE) EVT_CMD(EVT_OP_MULF, VAR, FLOAT_VALUE),
387
#define DivF(VAR, FLOAT_VALUE) EVT_CMD(EVT_OP_DIVF, VAR, FLOAT_VALUE),
388
390
#define UseBuf(INT_PTR) EVT_CMD(EVT_OP_USE_BUF, (Bytecode) INT_PTR),
391
393
#define BufRead1(VAR) EVT_CMD(EVT_OP_BUF_READ1, VAR),
394
396
#define BufRead2(VAR1, VAR2) EVT_CMD(EVT_OP_BUF_READ2, VAR1, VAR2),
397
399
#define BufRead3(VAR1, VAR2, VAR3) EVT_CMD(EVT_OP_BUF_READ3, VAR1, VAR2, VAR3),
400
402
#define BufRead4(VAR1, VAR2, VAR3, VAR4) EVT_CMD(EVT_OP_BUF_READ4, VAR1, VAR2, VAR3, VAR4),
403
405
#define BufPeek(OFFSET, VAR) EVT_CMD(EVT_OP_BUF_PEEK, OFFSET, VAR),
406
408
#define UseFBuf(FLOAT_PTR) EVT_CMD(EVT_OP_USE_FBUF, (Bytecode) FLOAT_PTR),
409
411
#define FBufRead1(VAR) EVT_CMD(EVT_OP_FBUF_READ1, VAR),
412
414
#define FBufRead2(VAR1, VAR2) EVT_CMD(EVT_OP_FBUF_READ2, VAR1, VAR2),
415
417
#define FBufRead3(VAR1, VAR2, VAR3) EVT_CMD(EVT_OP_FBUF_READ3, VAR1, VAR2, VAR3),
418
420
#define FBufRead4(VAR1, VAR2, VAR3, VAR4) EVT_CMD(EVT_OP_FBUF_READ4, VAR1, VAR2, VAR3, VAR4),
421
423
#define FBufPeek(OFFSET, VAR) EVT_CMD(EVT_OP_FBUF_PEEK, OFFSET, VAR),
424
426
#define UseArray(INT_PTR) EVT_CMD(EVT_OP_USE_ARRAY, (Bytecode) INT_PTR),
427
430
#define UseFlagArray(PACKED_FLAGS_PTR) EVT_CMD(EVT_OP_USE_FLAG_ARRAY, (Bytecode) PACKED_FLAGS_PTR),
431
434
#define MallocArray(SIZE, OUT_PTR_VAR) EVT_CMD(EVT_OP_MALLOC_ARRAY, SIZE, OUT_PTR_VAR),
435
437
#define BitwiseAnd(VAR, VALUE) EVT_CMD(EVT_OP_BITWISE_AND, VAR, VALUE),
438
440
#define BitwiseAndConst(VAR, CONST) EVT_CMD(EVT_OP_BITWISE_AND_CONST, VAR, CONST),
441
443
#define BitwiseOr(VAR, VALUE) EVT_CMD(EVT_OP_BITWISE_OR, VAR, VALUE),
444
446
#define BitwiseOrConst(VAR, CONST) EVT_CMD(EVT_OP_BITWISE_OR_CONST, VAR, CONST),
447
456
#define Exec(EVT_SOURCE) EVT_CMD(EVT_OP_EXEC, (Bytecode) EVT_SOURCE),
457
461
#define ExecGetTID(EVT_SOURCE, OUTVAR) EVT_CMD(EVT_OP_EXEC_GET_TID, (Bytecode) EVT_SOURCE, OUTVAR),
462
476
#define ExecWait(EVT_SOURCE) EVT_CMD(EVT_OP_EXEC_WAIT, (Bytecode) EVT_SOURCE),
477
500
#define BindTrigger(EVT_SOURCE, TRIGGER, COLLIDER_ID, UNK_A3, TRIGGER_PTR_OUTVAR) \
501
EVT_CMD(EVT_OP_BIND_TRIGGER, (Bytecode) EVT_SOURCE, TRIGGER, (Bytecode) COLLIDER_ID, UNK_A3, TRIGGER_PTR_OUTVAR),
502
504
#define BindPadlock(EVT_SOURCE, TRIGGER, COLLIDER_ID, ITEM_LIST, UNK_A3, TRIGGER_PTR_OUTVAR) \
505
EVT_CMD(EVT_OP_BIND_PADLOCK, (Bytecode) EVT_SOURCE, TRIGGER, COLLIDER_ID, (Bytecode) ITEM_LIST, UNK_A3, TRIGGER_PTR_OUTVAR),
506
508
#define Unbind EVT_CMD(EVT_OP_UNBIND),
509
511
#define KillThread(TID) EVT_CMD(EVT_OP_KILL_THREAD, TID),
512
514
#define SetPriority(PRIORITY) EVT_CMD(EVT_OP_SET_PRIORITY, PRIORITY),
515
517
#define SetTimescale(TIMESCALE) EVT_CMD(EVT_OP_SET_TIMESCALE, TIMESCALE),
518
520
#define SetGroup(GROUP) EVT_CMD(EVT_OP_SET_GROUP, GROUP),
521
523
#define SuspendGroup(GROUP) EVT_CMD(EVT_OP_SUSPEND_GROUP, GROUP),
524
526
#define ResumeGroup(GROUP) EVT_CMD(EVT_OP_RESUME_GROUP, GROUP),
527
529
#define SuspendOthers(GROUP) EVT_CMD(EVT_OP_SUSPEND_OTHERS, GROUP),
530
532
#define ResumeOthers(GROUP) EVT_CMD(EVT_OP_RESUME_OTHERS, GROUP),
533
535
#define SuspendThread(TID) EVT_CMD(EVT_OP_SUSPEND_THREAD, TID),
536
538
#define ResumeThread(TID) EVT_CMD(EVT_OP_RESUME_THREAD, TID),
539
541
#define IsThreadRunning(TID, OUTVAR) EVT_CMD(EVT_OP_IS_THREAD_RUNNING, TID, OUTVAR),
542
545
#define Thread EVT_CMD(EVT_OP_THREAD),
546
548
#define EndThread EVT_CMD(EVT_OP_END_THREAD),
549
561
#define ChildThread EVT_CMD(EVT_OP_CHILD_THREAD),
562
564
#define EndChildThread EVT_CMD(EVT_OP_END_CHILD_THREAD),
565
577
#define Call(FUNC, ARGS...) EVT_CMD(EVT_OP_CALL, (Bytecode) FUNC, ##ARGS),
578
580
#define EVT_DEBUG_LOG(STRING) EVT_CMD(EVT_OP_DEBUG_LOG, STRING),
581
583
#define DebugPrintVar(VAR) EVT_CMD(EVT_OP_DEBUG_PRINT_VAR, VAR),
584
586
#define BreakPoint(TEXT) EVT_CMD(EVT_OP_DEBUG_BREAKPOINT, Ref(TEXT)),
587
588
/****** VECTOR OPERATIONS *********************************************************************************************/
589
590
// expand vector components
591
#define EVT_AS_VEC2(baseVar) (baseVar), (baseVar + 1)
592
#define EVT_AS_VEC3(baseVar) (baseVar), (baseVar + 1), (baseVar + 2)
593
594
// extract components from vector
595
#define EVT_VEC_X(baseVar) (baseVar)
596
#define EVT_VEC_Y(baseVar) (baseVar + 1)
597
#define EVT_VEC_Z(baseVar) (baseVar + 2)
598
599
#define EVT_VEC2_OP(OPERATION, MUT_BASE, x, y) \
600
OPERATION(MUT_BASE + 0, x) \
601
OPERATION(MUT_BASE + 1, y)
602
603
#define EVT_VEC3_OP(OPERATION, MUT_BASE, x, y, z) \
604
OPERATION(MUT_BASE + 0, x) \
605
OPERATION(MUT_BASE + 1, y) \
606
OPERATION(MUT_BASE + 2, z)
607
608
#define EVT_VEC2_VOP(OPERATION, MUT_BASE, AMT_BASE) \
609
OPERATION(MUT_BASE + 0, AMT_BASE + 0) \
610
OPERATION(MUT_BASE + 1, AMT_BASE + 1)
611
612
#define EVT_VEC3_VOP(OPERATION, MUT_BASE, AMT_BASE) \
613
OPERATION(MUT_BASE + 0, AMT_BASE + 0) \
614
OPERATION(MUT_BASE + 1, AMT_BASE + 1) \
615
OPERATION(MUT_BASE + 2, AMT_BASE + 2)
616
617
#define EVT_VEC2I_SET(baseVar, x, y) EVT_VEC2_OP(Set, baseVar, x, y)
618
#define EVT_VEC2F_SET(baseVar, x, y) EVT_VEC2_OP(SetF, baseVar, x, y)
619
#define EVT_VEC3I_SET(baseVar, x, y, z) EVT_VEC3_OP(Set, baseVar, x, y, z)
620
#define EVT_VEC3F_SET(baseVar, x, y, z) EVT_VEC3_OP(SetF, baseVar, x, y, z)
621
622
#define EVT_VEC2I_VSET(baseVar, baseSrc) EVT_VEC2_VOP(Set, baseVar, baseSrc)
623
#define EVT_VEC2F_VSET(baseVar, baseSrc) EVT_VEC2_VOP(SetF, baseVar, baseSrc)
624
#define EVT_VEC3I_VSET(baseVar, baseSrc) EVT_VEC3_VOP(Set, baseVar, baseSrc)
625
#define EVT_VEC3F_VSET(baseVar, baseSrc) EVT_VEC3_VOP(SetF, baseVar, baseSrc)
626
627
#define EVT_VEC2I_ADD(baseVar, x, y) EVT_VEC2_OP(Add, baseVar, x, y)
628
#define EVT_VEC2F_ADD(baseVar, x, y) EVT_VEC2_OP(AddF, baseVar, x, y)
629
#define EVT_VEC3I_ADD(baseVar, x, y, z) EVT_VEC3_OP(Add, baseVar, x, y, z)
630
#define EVT_VEC3F_ADD(baseVar, x, y, z) EVT_VEC3_OP(AddF, baseVar, x, y, z)
631
632
#define EVT_VEC2I_VADD(baseVar, baseAmt) EVT_VEC2_VOP(Add, baseVar, baseAmt)
633
#define EVT_VEC2F_VADD(baseVar, baseAmt) EVT_VEC2_VOP(AddF, baseVar, baseAmt)
634
#define EVT_VEC3I_VADD(baseVar, baseAmt) EVT_VEC3_VOP(Add, baseVar, baseAmt)
635
#define EVT_VEC3F_VADD(baseVar, baseAmt) EVT_VEC3_VOP(AddF, baseVar, baseAmt)
636
637
#define EVT_VEC2I_SUB(baseVar, x, y) EVT_VEC2_OP(Sub, baseVar, x, y)
638
#define EVT_VEC2F_SUB(baseVar, x, y) EVT_VEC2_OP(SubF, baseVar, x, y)
639
#define EVT_VEC3I_SUB(baseVar, x, y, z) EVT_VEC3_OP(Sub, baseVar, x, y, z)
640
#define EVT_VEC3F_SUB(baseVar, x, y, z) EVT_VEC3_OP(SubF, baseVar, x, y, z)
641
642
#define EVT_VEC2I_VSUB(baseVar, baseAmt) EVT_VEC2_VOP(Sub, baseVar, baseAmt)
643
#define EVT_VEC2F_VSUB(baseVar, baseAmt) EVT_VEC2_VOP(SubF, baseVar, baseAmt)
644
#define EVT_VEC3I_VSUB(baseVar, baseAmt) EVT_VEC3_VOP(Sub, baseVar, baseAmt)
645
#define EVT_VEC3F_VSUB(baseVar, baseAmt) EVT_VEC3_VOP(SubF, baseVar, baseAmt)
646
647
/****** COMMON SCRIPTS ************************************************************************************************/
648
649
#define IfTrue(b) IfNe(b, 0)
650
#define IfFalse(b) IfEq(b, 0)
651
652
#define EVT_EXIT_WALK(walkDistance, exitIdx, map, entryIdx) \
653
{ \
654
SetGroup(EVT_GROUP_EXIT_MAP) \
655
Call(DisablePlayerInput, TRUE) \
656
Call(UseExitHeading, walkDistance, exitIdx) \
657
Exec(ExitWalk) \
658
Call(GotoMap, Ref(map), entryIdx) \
659
Wait(100) \
660
Return \
661
End \
662
}
663
664
// alternate version of EVT_EXIT_WALK used on Pleasant Path which does not join EVT_GROUP_EXIT_MAP
665
#define EVT_EXIT_WALK_NOK(walkDistance, exitIdx, map, entryIdx) \
666
{ \
667
Call(UseExitHeading, walkDistance, exitIdx) \
668
Exec(ExitWalk) \
669
Call(GotoMap, Ref(map), entryIdx) \
670
Wait(100) \
671
Return \
672
End \
673
}
674
675
#define EVT_EXIT_SINGLE_DOOR(exitIdx, map, entryIdx, colliderID, modelID, swingDir) \
676
{ \
677
SetGroup(EVT_GROUP_EXIT_MAP) \
678
Call(DisablePlayerInput, TRUE) \
679
Set(LVar0, exitIdx) \
680
Set(LVar1, colliderID) \
681
Set(LVar2, modelID) \
682
Set(LVar3, swingDir) \
683
Exec(ExitSingleDoor) \
684
Wait(17) \
685
Call(GotoMap, Ref(map), entryIdx) \
686
Wait(100) \
687
Return \
688
End \
689
}
690
691
#define EVT_EXIT_SINGLE_DOOR_SET_SOUNDS(exitIdx, map, entryIdx, colliderID, modelID, swingDir, sounds) \
692
{ \
693
SetGroup(EVT_GROUP_EXIT_MAP) \
694
Call(DisablePlayerInput, TRUE) \
695
Call(UseDoorSounds, sounds) \
696
Set(LVar0, exitIdx) \
697
Set(LVar1, colliderID) \
698
Set(LVar2, modelID) \
699
Set(LVar3, swingDir) \
700
Exec(ExitSingleDoor) \
701
Wait(17) \
702
Call(GotoMap, Ref(map), entryIdx) \
703
Wait(100) \
704
Return \
705
End \
706
}
707
708
#define EVT_EXIT_SPLIT_SINGLE_DOOR(exitIdx, map, entryIdx, colliderID, topModelID, bottomModelID, swingDir) \
709
{ \
710
SetGroup(EVT_GROUP_EXIT_MAP) \
711
Call(DisablePlayerInput, TRUE) \
712
Set(LVar0, exitIdx) \
713
Set(LVar1, colliderID) \
714
Set(LVar2, topModelID) \
715
Set(LVar4, bottomModelID) \
716
Set(LVar3, swingDir) \
717
Exec(ExitSplitSingleDoor) \
718
Wait(17) \
719
Call(GotoMap, Ref(map), entryIdx) \
720
Wait(100) \
721
Return \
722
End \
723
}
724
725
#define EVT_EXIT_DOUBLE_DOOR(exitIdx, map, entryIdx, colliderID, leftDoorModelID, rightDoorModelID) \
726
{ \
727
SetGroup(EVT_GROUP_EXIT_MAP) \
728
Call(DisablePlayerInput, TRUE) \
729
Set(LVar0, exitIdx) \
730
Set(LVar1, colliderID) \
731
Set(LVar2, leftDoorModelID) \
732
Set(LVar3, rightDoorModelID) \
733
Exec(ExitDoubleDoor) \
734
Wait(17) \
735
Call(GotoMap, Ref(map), entryIdx) \
736
Wait(100) \
737
Return \
738
End \
739
}
740
741
#define EVT_EXIT_DOUBLE_DOOR_SET_SOUNDS(exitIdx, map, entryIdx, colliderID, leftDoorModelID, rightDoorModelID, sounds) \
742
{ \
743
SetGroup(EVT_GROUP_EXIT_MAP) \
744
Call(DisablePlayerInput, TRUE) \
745
Call(UseDoorSounds, sounds) \
746
Set(LVar0, exitIdx) \
747
Set(LVar1, colliderID) \
748
Set(LVar2, leftDoorModelID) \
749
Set(LVar3, rightDoorModelID) \
750
Exec(ExitDoubleDoor) \
751
Wait(17) \
752
Call(GotoMap, Ref(map), entryIdx) \
753
Wait(100) \
754
Return \
755
End \
756
}
757
762
#define EVT_SETUP_CAMERA_DEFAULT(r, g, b) \
763
Call(SetCamPerspective, CAM_DEFAULT, CAM_UPDATE_FROM_ZONE, 25, 16, 4096) \
764
Call(SetCamBGColor, CAM_DEFAULT, r, g, b) \
765
Call(SetCamEnabled, CAM_DEFAULT, TRUE)
766
771
#define EVT_SETUP_CAMERA_NO_LEAD(r, g, b) \
772
Call(SetCamPerspective, CAM_DEFAULT, CAM_UPDATE_FROM_ZONE, 25, 16, 4096) \
773
Call(SetCamBGColor, CAM_DEFAULT, r, g, b) \
774
Call(SetCamLeadPlayer, CAM_DEFAULT, FALSE) \
775
Call(SetCamEnabled, CAM_DEFAULT, TRUE)
776
778
#define EVT_SETUP_CAMERA_MIM() \
779
Call(SetCamPerspective, CAM_DEFAULT, CAM_UPDATE_FROM_ZONE, 25, 16, 650) \
780
Call(SetCamBGColor, CAM_DEFAULT, 0, 0, 0) \
781
Call(SetCamLeadPlayer, CAM_DEFAULT, FALSE) \
782
Call(SetCamEnabled, CAM_DEFAULT, TRUE)
783
784
// allow macros with variable number of arguments
785
// see https://stackoverflow.com/questions/11761703/overloading-macro-on-number-of-arguments
786
// solution provided by R1tschY and edited by Gabriel Staples
787
#define __NARG__(args...) \
788
__NARG_I_(args,__RSEQ_N())
789
#define __NARG_I_(args...) \
790
__ARG_N(args)
791
#define __ARG_N( \
792
_1, _2, _3, _4, _5, _6, _7, _8, _9,_10, \
793
_11,_12,_13,_14,_15,_16,_17,_18,_19,_20, \
794
_21,_22,_23,_24,_25,_26,_27,_28,_29,_30, \
795
_31,_32,_33,_34,_35,_36,_37,_38,_39,_40, \
796
_41,_42,_43,_44,_45,_46,_47,_48,_49,_50, \
797
_51,_52,_53,_54,_55,_56,_57,_58,_59,_60, \
798
_61,_62,_63,N,...) N
799
#define __RSEQ_N() \
800
63,62,61,60, \
801
59,58,57,56,55,54,53,52,51,50, \
802
49,48,47,46,45,44,43,42,41,40, \
803
39,38,37,36,35,34,33,32,31,30, \
804
29,28,27,26,25,24,23,22,21,20, \
805
19,18,17,16,15,14,13,12,11,10, \
806
9,8,7,6,5,4,3,2,1,0
807
#define _VFUNC_(name, n) name##n
808
#define _VFUNC(name, n) _VFUNC_(name, n)
809
#define VFUNC(func, args...) _VFUNC(func, __NARG__(args)) (args)
810
811
#define PlayEffect(args...) VFUNC(PlayEffect, args)
812
#define PlayEffect1(effect) \
813
Call(PlayEffect_impl, effect, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
814
#define PlayEffect2(effect, subtype) \
815
Call(PlayEffect_impl, effect, subtype, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
816
#define PlayEffect3(effect, subtype, a) \
817
Call(PlayEffect_impl, effect, subtype, a, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
818
#define PlayEffect4(effect, subtype, a, b) \
819
Call(PlayEffect_impl, effect, subtype, a, b, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
820
#define PlayEffect5(effect, subtype, a, b, c) \
821
Call(PlayEffect_impl, effect, subtype, a, b, c, 0, 0, 0, 0, 0, 0, 0, 0, 0)
822
#define PlayEffect6(effect, subtype, a, b, c, d) \
823
Call(PlayEffect_impl, effect, subtype, a, b, c, d, 0, 0, 0, 0, 0, 0, 0, 0)
824
#define PlayEffect7(effect, subtype, a, b, c, d, e) \
825
Call(PlayEffect_impl, effect, subtype, a, b, c, d, e, 0, 0, 0, 0, 0, 0, 0)
826
#define PlayEffect8(effect, subtype, a, b, c, d, e, f) \
827
Call(PlayEffect_impl, effect, subtype, a, b, c, d, e, f, 0, 0, 0, 0, 0, 0)
828
#define PlayEffect9(effect, subtype, a, b, c, d, e, f, g) \
829
Call(PlayEffect_impl, effect, subtype, a, b, c, d, e, f, g, 0, 0, 0, 0, 0)
830
#define PlayEffect10(effect, subtype, a, b, c, d, e, f, g, h) \
831
Call(PlayEffect_impl, effect, subtype, a, b, c, d, e, f, g, h, 0, 0, 0, 0)
832
#define PlayEffect11(effect, subtype, a, b, c, d, e, f, g, h, i) \
833
Call(PlayEffect_impl, effect, subtype, a, b, c, d, e, f, g, h, i, 0, 0, 0)
834
#define PlayEffect12(effect, subtype, a, b, c, d, e, f, g, h, i, j) \
835
Call(PlayEffect_impl, effect, subtype, a, b, c, d, e, f, g, h, i, j, 0, 0)
836
#define PlayEffect13(effect, subtype, a, b, c, d, e, f, g, h, i, j, k) \
837
Call(PlayEffect_impl, effect, subtype, a, b, c, d, e, f, g, h, i, j, k, 0)
838
#define PlayEffect14(effect, subtype, a, b, c, d, e, f, g, h, i, j, k, l) \
839
Call(PlayEffect_impl, effect, subtype, a, b, c, d, e, f, g, h, i, j, k, l)
840
841
#ifdef _LANGUAGE_C_PLUS_PLUS
842
}
// extern "C"
843
#endif
844
845
#endif
evt.h
include
script_api
macros.h
Generated by
1.10.0