Condition Helpers

I made some macros to help with the condition events

//If Character
#define IfCharacter(conditionid,chara,iftrue,iffalse)    "IFCA 0x00 conditionid chara; CALL iftrue; ELSE conditionid+1; ENIF conditionid; CALL iffalse; ENIF conditionid+1"
//If Character is on the map
#define IfPresentChar(conditionid,chara,iftrue,iffalse)  "IFUF 0x00 conditionid chara; CALL iftrue; ELSE conditionid+1; ENIF conditionid; CALL iffalse; ENIF conditionid+1"
//If Character is dead
#define IfDeadChar(conditionid,chara,iftrue,iffalse)    "IFCD conditionid chara; CALL iftrue; ELSE conditionid+1; ENIF conditionid; CALL iffalse; ENIF conditionid+1"
//If is Turn X
#define IfTurn(conditionid,turn,iftrue,iffalse)          "IFTU conditionid turn; CALL iftrue; ELSE conditionid+1; ENIF conditionid; CALL iffalse; ENIF conditionid+1"
//If Event X is True
#define IfEventTrue(conditionid,eventid,iftrue,iffalse)  "IFET conditionid eventid; CALL iftrue; ELSE conditionid+1; ENIF conditionid; CALL iffalse; ENIF conditionid+1"
//If Event X is False
#define IfEventFalse(conditionid,eventid,iftrue,iffalse) "IFEF conditionid eventid; CALL iftrue; ELSE conditionid+1; ENIF conditionid; CALL iffalse; ENIF conditionid+1"
//If ASM condition is True
#define IfASMTrue(conditionid,asmpoint,iftrue,iffalse)   "IFAT conditionid asmpoint; CALL iftrue; ELSE conditionid+1; ENIF conditionid; CALL iffalse; ENIF conditionid+1"
//If ASM condition is False
#define IfASMFalse(conditionid,asmpoint,iftrue,iffalse)  "IFAF conditionid asmpoint; CALL iftrue; ELSE conditionid+1; ENIF conditionid; CALL iffalse; ENIF conditionid+1"
//If you chose Yes in a convo
#define IfYesChose(conditionid,iftrue,iffalse)           "IFYN conditionid; CALL iftrue; ELSE conditionid+1; ENIF conditionid; CALL iffalse; ENIF conditionid+1"
//If you chose No in a convo
#define IfNoChose(conditionid,iftrue,iffalse)            "IFNY conditionid; CALL iftrue; ELSE conditionid+1; ENIF conditionid; CALL iffalse; ENIF conditionid+1"
//If is Hector Mode
#define IfHM(conditionid,iftrue,iffalse)                 "IFHM conditionid; CALL iftrue; ELSE conditionid+1; ENIF conditionid; CALL iffalse; ENIF conditionid+1"
//If is Eliwood Mode
#define IfEM(conditionid,iftrue,iffalse)                 "IFEM conditionid; CALL iftrue; ELSE conditionid+1; ENIF conditionid; CALL iffalse; ENIF conditionid+1"
//If is Tutorial Mode
#define IfTM(conditionid,iftrue,iffalse)                 "IFTM conditionid; CALL iftrue; ELSE conditionid+1; ENIF conditionid; CALL iffalse; ENIF conditionid+1"
//If character is not on the map (FE6 only)
#define IfAbsentChar(conditionid,chara,iftrue,iffalse)   "IFCNA conditionid chara; CALL iftrue; ELSE conditionid+1; ENIF conditionid; CALL iffalse; ENIF conditionid+1"

An example of how to use them:

Opening_event:
//Some commands
IfCharacter(0x00,Eliwood,IfEliwood,IfNoEliwood)
//Other commands
ENDA

IfEliwood:
MUS1 0x01
LOU1 Units1
ENUN
ENDA

IfNoEliwood:
LOU1 Units2
ENUN
TEX1 0xFFFF
REMA
ENDA

I haven’t tested all the conditions, but it works pretty well with IFCA, IFDC and IFUF.

Alternatively you can use them in this way to put all the commands in a sigle line:

#define IfCharacter(conditionid,chara,iftrue,iffalse)    "IFCA 0x00 conditionid chara; iftrue; ELSE conditionid+1; ENIF conditionid; iffalse; ENIF conditionid+1"
#define IfPresentChar(conditionid,chara,iftrue,iffalse)  "IFUF 0x00 conditionid chara; iftrue; ELSE conditionid+1; ENIF conditionid; iffalse; ENIF conditionid+1"
#define IfDeadChar(conditionid,chara,iftrue,iffalse)    "IFCD conditionid chara; iftrue; ELSE conditionid+1; ENIF conditionid; iffalse; ENIF conditionid+1"
#define IfTurn(conditionid,turn,iftrue,iffalse)          "IFTU conditionid turn; iftrue; ELSE conditionid+1; ENIF conditionid; iffalse; ENIF conditionid+1"
#define IfEventTrue(conditionid,eventid,iftrue,iffalse)  "IFET conditionid eventid; iftrue; ELSE conditionid+1; ENIF conditionid; iffalse; ENIF conditionid+1"
#define IfEventFalse(conditionid,eventid,iftrue,iffalse) "IFEF conditionid eventid; iftrue; ELSE conditionid+1; ENIF conditionid; iffalse; ENIF conditionid+1"
#define IfASMTrue(conditionid,asmpoint,iftrue,iffalse)   "IFAT conditionid asmpoint; iftrue; ELSE conditionid+1; ENIF conditionid; iffalse; ENIF conditionid+1"
#define IfASMFalse(conditionid,asmpoint,iftrue,iffalse)  "IFAF conditionid asmpoint; iftrue; ELSE conditionid+1; ENIF conditionid; iffalse; ENIF conditionid+1"
#define IfYesChose(conditionid,iftrue,iffalse)           "IFYN conditionid; iftrue; ELSE conditionid+1; ENIF conditionid; iffalse; ENIF conditionid+1"
#define IfNoChose(conditionid,iftrue,iffalse)            "IFNY conditionid; iftrue; ELSE conditionid+1; ENIF conditionid; iffalse; ENIF conditionid+1"
#define IfHM(conditionid,iftrue,iffalse)                 "IFHM conditionid; iftrue; ELSE conditionid+1; ENIF conditionid; iffalse; ENIF conditionid+1"
#define IfEM(conditionid,iftrue,iffalse)                 "IFEM conditionid; iftrue; ELSE conditionid+1; ENIF conditionid; iffalse; ENIF conditionid+1"
#define IfTM(conditionid,iftrue,iffalse)                 "IFTM conditionid; iftrue; ELSE conditionid+1; ENIF conditionid; iffalse; ENIF conditionid+1"
#define IfAbsentChar(conditionid,chara,iftrue,iffalse)   "IFCNA conditionid chara; iftrue; ELSE conditionid+1; ENIF conditionid; iffalse; ENIF conditionid+1"

Example:

Opening_event:
//Some commands
IfCharacter(0x00,Eliwood,"MUS1 0x01; LOU1 Units1; ENUN;","LOU1 Units; ENUN; TEX1 0xFFFF; REMA;")
//Other commands
ENDA

NOTE: In both cases you’ll be forced to use even OR odd numbered condition IDs, because the macros adds a number to the condition ID to work.

EDIT
I added some other macros for False or True responses only:

True Only
#define IfCharacter(conditionid,chara,iftrue)    "IFCA 0x00 conditionid chara; CALL iftrue; ELSE conditionid+1; ENIF conditionid; ENIF conditionid+1"
#define IfPresentChar(conditionid,chara,iftrue)  "IFUF 0x00 conditionid chara; CALL iftrue; ELSE conditionid+1; ENIF conditionid; ENIF conditionid+1"
#define IfDeadChar(conditionid,chara,iftrue)    "IFCD conditionid chara; CALL iftrue; ELSE conditionid+1; ENIF conditionid; ENIF conditionid+1"
#define IfTurn(conditionid,turn,iftrue)          "IFTU conditionid turn; CALL iftrue; ELSE conditionid+1; ENIF conditionid; ENIF conditionid+1"
#define IfEventTrue(conditionid,eventid,iftrue)  "IFET conditionid eventid; CALL iftrue; ELSE conditionid+1; ENIF conditionid; ENIF conditionid+1"
#define IfEventFalse(conditionid,eventid,iftrue) "IFEF conditionid eventid; CALL iftrue; ELSE conditionid+1; ENIF conditionid; ENIF conditionid+1"
#define IfASMTrue(conditionid,asmpoint,iftrue)   "IFAT conditionid asmpoint; CALL iftrue; ELSE conditionid+1; ENIF conditionid; ENIF conditionid+1"
#define IfASMFalse(conditionid,asmpoint,iftrue)  "IFAF conditionid asmpoint; CALL iftrue; ELSE conditionid+1; ENIF conditionid; ENIF conditionid+1"
#define IfYesChose(conditionid,iftrue)           "IFYN conditionid; CALL iftrue; ELSE conditionid+1; ENIF conditionid; ENIF conditionid+1"
#define IfNoChose(conditionid,iftrue)            "IFNY conditionid; CALL iftrue; ELSE conditionid+1; ENIF conditionid; ENIF conditionid+1"
#define IfHM(conditionid,iftrue)                 "IFHM conditionid; CALL iftrue; ELSE conditionid+1; ENIF conditionid; ENIF conditionid+1"
#define IfEM(conditionid,iftrue)                 "IFEM conditionid; CALL iftrue; ELSE conditionid+1; ENIF conditionid; ENIF conditionid+1"
#define IfTM(conditionid,iftrue)                 "IFTM conditionid; CALL iftrue; ELSE conditionid+1; ENIF conditionid; ENIF conditionid+1"
#define IfAbsentChar(conditionid,chara,iftrue)        "IFCNA conditionid chara; CALL iftrue; ELSE conditionid+1; ENIF conditionid; ENIF conditionid+1"

False Only
#define IfCharacterF(conditionid,chara,iffalse)         "IFCA 0x00 conditionid chara; ELSE conditionid+1; ENIF conditionid; CALL iffalse; ENIF conditionid+1"
#define IfPresentCharF(conditionid,chara,iffalse)     "IFUF 0x00 conditionid chara; ELSE conditionid+1; ENIF conditionid; CALL iffalse; ENIF conditionid+1"
#define IfDeathCharF(conditionid,chara,iffalse)         "IFCD conditionid chara; ELSE conditionid+1; ENIF conditionid; CALL iffalse; ENIF conditionid+1"
#define IfTurnF(conditionid,turn,iffalse)             "IFTU conditionid turn; ELSE conditionid+1; ENIF conditionid; CALL iffalse; ENIF conditionid+1"
#define IfEventTrueF(conditionid,eventid,iffalse)     "IFET conditionid eventid; ELSE conditionid+1; ENIF conditionid; CALL iffalse; ENIF conditionid+1"
#define IfEventFalseF(conditionid,eventid,iffalse)     "IFEF conditionid eventid; ELSE conditionid+1; ENIF conditionid; CALL iffalse; ENIF conditionid+1"
#define IfASMTrueF(conditionid,asmpoint,iffalse)         "IFAT conditionid asmpoint; ELSE conditionid+1; ENIF conditionid; CALL iffalse; ENIF conditionid+1"
#define IfASMFalseF(conditionid,asmpoint,iffalse)     "IFAF conditionid asmpoint; ELSE conditionid+1; ENIF conditionid; CALL iffalse; ENIF conditionid+1"
#define IfYesChoseF(conditionid,iffalse)                 "IFYN conditionid; ELSE conditionid+1; ENIF conditionid; CALL iffalse; ENIF conditionid+1"
#define IfNoChoseF(conditionid,iffalse)                 "IFNY conditionid; ELSE conditionid+1; ENIF conditionid; CALL iffalse; ENIF conditionid+1"
#define IfHMF(conditionid,iffalse)                    "IFHM conditionid; ELSE conditionid+1; ENIF conditionid; CALL iffalse; ENIF conditionid+1"
#define IfEMF(conditionid,iffalse)                    "IFEM conditionid; ELSE conditionid+1; ENIF conditionid; CALL iffalse; ENIF conditionid+1"
#define IfTMF(conditionid,iffalse)                    "IFTM conditionid; ELSE conditionid+1; ENIF conditionid; CALL iffalse; ENIF conditionid+1"
#define IfAbsentCharF(conditionid,chara,iffalse)        "IFCNA conditionid chara; ELSE conditionid+1; ENIF conditionid; CALL iffalse; ENIF conditionid+1"
5 Likes

I like it. Though, if you’re chaining conditions, a little bit of caution is needed since the macros use conditionid+1 under the hood. People will want to stick to either all even or all odd numbers to avoid id collisions. Just a heads up.

1 Like

I’ll add that as a note. Thanks for the advice.