const int FONT_DIALOGUE_BRANCH = 0; //Default font for dialogue branches. See FONT_ in std_constants.zh const int C_FONT_DIALOGUE_BRANCH = 0x01; //Color of the font ffc script DialogueBranch_Simple{ void run(int op1, int op2, int op3, int out1, int out2, int out3){ WaitNoAction(); int op1s[256] = " "; int op2s[256] = " "; int op3s[256] = " "; int selection; if(op1>0){ Game->GetMessage(op1, op1s); String_Cap(op1s); } if(op2>0){ Game->GetMessage(op2, op2s); String_Cap(op2s); } if(op3>0){ Game->GetMessage(op3, op3s); String_Cap(op3s); int options[] = {op1s, op2s, op3s}; selection = DialogueBox_Run(128, 88, options, TIL_DB_DIALOGUE_BOX, CS_DB_DIALOGUE_BOX, C_DB_DIALOGUE_BOX_BG, FONT_DIALOGUE_BRANCH, C_FONT_DIALOGUE_BRANCH, TIL_DB_DIALOGUE_SELECTOR, CS_DB_DIALOGUE_SELECTOR); } else{ int options[] = {op1s, op2s}; selection = DialogueBox_Run(128, 88, options, TIL_DB_DIALOGUE_BOX, CS_DB_DIALOGUE_BOX, C_DB_DIALOGUE_BOX_BG, FONT_DIALOGUE_BRANCH, C_FONT_DIALOGUE_BRANCH, TIL_DB_DIALOGUE_SELECTOR, CS_DB_DIALOGUE_SELECTOR); } if(selection==0){ Screen->Message(out1); WaitNoAction(); } else if(selection==1){ Screen->Message(out2); WaitNoAction(); } else if(selection==2){ Screen->Message(out3); WaitNoAction(); } } } ffc script DialogueBranch_Advanced{ void run(int controlString){ int currentString = controlString; int i; int j; int k; int m; int o; int p; int count; int code_mcc[] = "#MCC"; code_mcc[0] = CHAR_MCC_MARKER; //Moosh control code int code_br[] = "#BRANCH"; code_br[0] = CHAR_MCC_MARKER; //Branch int code_a[] = "#APPEND"; code_a[0] = CHAR_MCC_MARKER; //Append int code_rs[] = "#SCRIPT"; code_rs[0] = CHAR_MCC_MARKER; //Run Script int code_gi[] = "#GIVEITEM"; code_gi[0] = CHAR_MCC_MARKER; //Give item int code_ci[] = "#HASITEM"; code_ci[0] = CHAR_MCC_MARKER; //Check item int code_cc[] = "#HASCOUNTER"; code_cc[0] = CHAR_MCC_MARKER; //Check counter int code_secret[] = "#SECRET"; code_secret[0] = CHAR_MCC_MARKER; //Trigger screen secret int code_issecret[] = "#ISSECRET"; code_issecret[0] = CHAR_MCC_MARKER; //Check screen secret int code_warp[] = "#WARP"; code_warp[0] = CHAR_MCC_MARKER; //Warp int code_rand[] = "#RAND"; code_rand[0] = CHAR_MCC_MARKER; //Rand int code_string[] = "#STRING"; code_string[0] = CHAR_MCC_MARKER; //String int code_hastriforce[] = "#HASTRIFORCE"; code_hastriforce[0] = CHAR_MCC_MARKER; //Has Triforce int stringIndex; int lowIndex; int highIndex; int ctrlStr[1024]; int prompt; int strA; int strB; int options[16]; int outcomes[16]; //Load in the first string Game->GetMessage(controlString, ctrlStr); String_Cap(ctrlStr); String_ToUppercase(ctrlStr); while(true){ currentString = controlString; //In case we forgot, let's keep this updated if(String_StartsWith(ctrlStr, code_mcc)){ //If the string is a control code it will start with #MCC while(String_Contains(ctrlStr, code_a)){ //If an append code is found, append the specified string over it //First we find the start of the append code stringIndex = String_FindStr(ctrlStr, 0, 0, code_a, 1); //Then we find and load the number at the start k = String_FindLoadInt(ctrlStr, stringIndex, 0, 1); if(k==-1){ DB_LOG(1, currentString); //Expected number Quit(); } currentString = k; int tempStr[256]; Game->GetMessage(j, tempStr); String_WriteOver(ctrlStr, stringIndex, tempStr); String_Cap(ctrlStr); String_ToUppercase(ctrlStr); DB_LOG(400, j); //Appended string } if(String_Contains(ctrlStr, code_br)){ //Branch control code #BRANCH String, Input(*n), Output(*n) //Get first argument: Prompt string lowIndex = String_FindStr(ctrlStr, 0, 0, code_br, 1); highIndex = String_FindChar(ctrlStr, lowIndex+1, 0, ',', 1); k = String_FindLoadInt(ctrlStr, lowIndex, highIndex, 1); //If no argument found, return an error if(k==-1){ DB_LOG(1, currentString); //Missing argument (#BRANCH) Quit(); } currentString = k; prompt = k; for(i=0; i<16; i++){ options[i] = 0; outcomes[i] = 0; } lowIndex = highIndex; highIndex = String_FindChar(ctrlStr, lowIndex+1, 0, ',', 1); //Get second arguments: Options for(i=0; i<16; i++){ k = String_FindLoadInt(ctrlStr, lowIndex, highIndex, i+1); if(k>-1){ options[i] = -k; //This is negative because of how DialogueBox.zh reads strings. Positive = ZScript string, Negative = ZQuest string } else break; } count = i; lowIndex = highIndex; //Get third arguments: Outcomes for(i=0; i<16; i++){ k = String_FindLoadInt(ctrlStr, lowIndex, 0, i+1); if(k>-1){ outcomes[i] = k; } else break; } //Input and output should have the same number of arguments in them, if not, print an error if(i!=count){ DB_LOG(2, controlString); //Argument mismatch (#BRANCH) Quit(); } if(prompt>0){ Screen->Message(prompt); WaitNoAction(); } k = DialogueBox_Run(128, 88, options, TIL_DB_DIALOGUE_BOX, CS_DB_DIALOGUE_BOX, C_DB_DIALOGUE_BOX_BG, FONT_DIALOGUE_BRANCH, C_FONT_DIALOGUE_BRANCH, TIL_DB_DIALOGUE_SELECTOR, CS_DB_DIALOGUE_SELECTOR); controlString = outcomes[k]; //The outcome of the selection sets the next control string DB_LoadControlString(ctrlStr, controlString); } else if(String_Contains(ctrlStr, code_rs)){ //Script control code #SCRIPT String, ScriptID, Args(*8) //Get first argument: String lowIndex = String_FindStr(ctrlStr, 0, 0, code_rs, 1); highIndex = String_FindChar(ctrlStr, lowIndex+1, 0, ',', 1); k = String_FindLoadInt(ctrlStr, lowIndex, highIndex, 1); //If no argument found, return an error if(k==-1){ DB_LOG(3, currentString); //Missing argument (#SCRIPT) Quit(); } prompt = k; //Get second argument: ScriptID lowIndex = highIndex; highIndex = String_FindChar(ctrlStr, lowIndex+1, 0, ',', 1); k = String_FindLoadInt(ctrlStr, lowIndex, highIndex, 1); //If no argument found, return an error if(k==-1){ DB_LOG(3, currentString); //Missing argument (#SCRIPT) Quit(); } int scriptid = k; //Get arguments 3-11: FFC args int args[8]; for(i=0; i<8; i++){ lowIndex = highIndex; highIndex = String_FindChar(ctrlStr, lowIndex+1, 0, ',', 1); k = String_FindLoadInt(ctrlStr, lowIndex, highIndex, 1); if(k==-1) break; args[i] = k; } if(prompt>0){ Screen->Message(prompt); WaitNoAction(); } RunFFCScript(scriptid, args); Quit(); } else if(String_Contains(ctrlStr, code_gi)){ //Give item control code #GIVEITEM String, ItemID, NextString //Get first argument: String lowIndex = String_FindStr(ctrlStr, 0, 0, code_gi, 1); highIndex = String_FindChar(ctrlStr, lowIndex+1, 0, ',', 1); k = String_FindLoadInt(ctrlStr, lowIndex, highIndex, 1); //If no argument found, return an error if(k==-1){ DB_LOG(4, currentString); //Missing argument (#GIVEITEM) Quit(); } prompt = k; //Get second argument: Item ID lowIndex = highIndex; highIndex = String_FindChar(ctrlStr, lowIndex+1, 0, ',', 1); k = String_FindLoadInt(ctrlStr, lowIndex, highIndex, 1); //If no argument found, return an error if(k==-1){ DB_LOG(4, currentString); //Missing argument (#GIVEITEM) Quit(); } j = k; //Get third argument: String 2 lowIndex = highIndex; k = String_FindLoadInt(ctrlStr, lowIndex, 0, 1); //The last argument is optional controlString = 0; if(k>-1){ controlString = k; } if(prompt>0){ Screen->Message(prompt); WaitNoAction(); } item itm = CreateItemAt(j, Link->X, Link->Y); itm->Pickup = IP_HOLDUP; while(itm->isValid()){ itm->X = Link->X; itm->Y = Link->Y; WaitNoAction(); } while(Link->Action==LA_HOLD1LAND||Link->Action==LA_HOLD2LAND||Link->Action==LA_HOLD1WATER||Link->Action==LA_HOLD2WATER){ WaitNoAction(); } DB_LoadControlString(ctrlStr, controlString); } else if(String_Contains(ctrlStr, code_ci)){ //Check item control code #HASITEM String, ItemID, HasItem, NoItem //Get first argument: String lowIndex = String_FindStr(ctrlStr, 0, 0, code_ci, 1); highIndex = String_FindChar(ctrlStr, lowIndex+1, 0, ',', 1); k = String_FindLoadInt(ctrlStr, lowIndex, highIndex, 1); //If no argument found, return an error if(k==-1){ DB_LOG(5, currentString); //Missing argument (#HASITEM) Quit(); } prompt = k; //Get second argument: Item ID lowIndex = highIndex; highIndex = String_FindChar(ctrlStr, lowIndex+1, 0, ',', 1); k = String_FindLoadInt(ctrlStr, lowIndex, highIndex, 1); //If no argument found, return an error if(k==-1){ DB_LOG(5, currentString); //Missing argument (#HASITEM) Quit(); } j = k; //Get third argument: Has Item String lowIndex = highIndex; highIndex = String_FindChar(ctrlStr, lowIndex+1, 0, ',', 1); k = String_FindLoadInt(ctrlStr, lowIndex, highIndex, 1); //If no argument found, return an error if(k==-1){ DB_LOG(5, currentString); //Missing argument (#HASITEM) Quit(); } strA = k; //Get fourth argument: No Item String lowIndex = highIndex; k = String_FindLoadInt(ctrlStr, lowIndex, 0, 1); //If no argument found, return an error if(k==-1){ DB_LOG(5, currentString); //Missing argument (#HASITEM) Quit(); } strB = k; if(prompt>0){ Screen->Message(prompt); WaitNoAction(); } //Set the next control string based on if Link has the item if(Link->Item[j]){ controlString = strA; } else{ controlString = strB; } DB_LoadControlString(ctrlStr, controlString); } else if(String_Contains(ctrlStr, code_cc)){ //Check counter control code #HASCOUNTER String, CounterID, CounterAmount, HasCounter, NoCounter, Take //Get first argument: String lowIndex = String_FindStr(ctrlStr, 0, 0, code_cc, 1); highIndex = String_FindChar(ctrlStr, lowIndex+1, 0, ',', 1); k = String_FindLoadInt(ctrlStr, lowIndex, highIndex, 1); //If no argument found, return an error if(k==-1){ DB_LOG(6, currentString); //Missing argument (#HASCOUNTER) Quit(); } prompt = k; //Get second argument: Counter ID lowIndex = highIndex; highIndex = String_FindChar(ctrlStr, lowIndex+1, 0, ',', 1); k = String_FindLoadInt(ctrlStr, lowIndex, highIndex, 1); //If no argument found, return an error if(k==-1){ DB_LOG(6, currentString); //Missing argument (#HASCOUNTER) Quit(); } j = k; //Get third argument: Counter amount lowIndex = highIndex; highIndex = String_FindChar(ctrlStr, lowIndex+1, 0, ',', 1); k = String_FindLoadInt(ctrlStr, lowIndex, highIndex, 1); //If no argument found, return an error if(k==-1){ DB_LOG(6, currentString); //Missing argument (#HASCOUNTER) Quit(); } m = k; //Get fourth argument: Has Counter String lowIndex = highIndex; highIndex = String_FindChar(ctrlStr, lowIndex+1, 0, ',', 1); k = String_FindLoadInt(ctrlStr, lowIndex, highIndex, 1); //If no argument found, return an error if(k==-1){ DB_LOG(6, currentString); //Missing argument (#HASCOUNTER) Quit(); } strA = k; //Get fifth argument: No Counter String lowIndex = highIndex; highIndex = String_FindChar(ctrlStr, lowIndex+1, 0, ',', 1); k = String_FindLoadInt(ctrlStr, lowIndex, 0, 1); //If no argument found, return an error if(k==-1){ DB_LOG(6, currentString); //Missing argument (#HASCOUNTER) Quit(); } strB = k; //Get sixth argument: Take (0=No, 1=Instant, 2=Drain) lowIndex = highIndex; k = String_FindLoadInt(ctrlStr, lowIndex, 0, 1); //The last argument is optional o = 0; if(k>-1){ o = k; } if(prompt>0){ Screen->Message(prompt); WaitNoAction(); } //Set the next control string based on if the counter is high enough if(Game->Counter[j]+Game->DCounter[j]>=m){ if(o==1){ Game->Counter[j] -= m; } else if(o==2){ Game->DCounter[j] -= m; } controlString = strA; } else{ controlString = strB; } DB_LoadControlString(ctrlStr, controlString); } else if(String_Contains(ctrlStr, code_secret)){ //Secret trigger control code #SECRET String, PermSecret, NextString //Get first argument: String lowIndex = String_FindStr(ctrlStr, 0, 0, code_secret, 1); highIndex = String_FindChar(ctrlStr, lowIndex+1, 0, ',', 1); k = String_FindLoadInt(ctrlStr, lowIndex, highIndex, 1); //If no argument found, return an error if(k==-1){ DB_LOG(7, currentString); //Missing argument (#SECRET) Quit(); } prompt = k; //Get second argument: Perm Secret (0=No, 1=Yes) lowIndex = highIndex; highIndex = String_FindChar(ctrlStr, lowIndex+1, 0, ',', 1); k = String_FindLoadInt(ctrlStr, lowIndex, highIndex, 1); //If no argument found, return an error if(k==-1){ DB_LOG(7, currentString); //Missing argument (#SECRET) Quit(); } m = k; //Get third argument: Next String lowIndex = highIndex; highIndex = String_FindChar(ctrlStr, lowIndex+1, 0, ',', 1); k = String_FindLoadInt(ctrlStr, lowIndex, highIndex, 1); //If no argument found, return an error if(k==-1){ DB_LOG(7, currentString); //Missing argument (#SECRET) Quit(); } controlString = k; if(prompt>0){ Screen->Message(prompt); WaitNoAction(); } Screen->TriggerSecrets(); if(m==1) Screen->State[ST_SECRET] = true; DB_LoadControlString(ctrlStr, controlString); } else if(String_Contains(ctrlStr, code_issecret)){ //Secret check control code #ISSECRET String, IsSecret, NoSecret //Get first argument: String lowIndex = String_FindStr(ctrlStr, 0, 0, code_issecret, 1); highIndex = String_FindChar(ctrlStr, lowIndex+1, 0, ',', 1); k = String_FindLoadInt(ctrlStr, lowIndex, highIndex, 1); //If no argument found, return an error if(k==-1){ DB_LOG(8, currentString); //Missing argument (#ISSECRET) Quit(); } prompt = k; //Get second argument: Secret Message lowIndex = highIndex; highIndex = String_FindChar(ctrlStr, lowIndex+1, 0, ',', 1); k = String_FindLoadInt(ctrlStr, lowIndex, highIndex, 1); //If no argument found, return an error if(k==-1){ DB_LOG(8, currentString); //Missing argument (#ISSECRET) Quit(); } strA = k; //Get third argument: No Secret Message lowIndex = highIndex; k = String_FindLoadInt(ctrlStr, lowIndex, 0, 1); //If no argument found, return an error if(k==-1){ DB_LOG(8, currentString); //Missing argument (#ISSECRET) Quit(); } strB = k; if(prompt>0){ Screen->Message(prompt); WaitNoAction(); } if(Screen->State[ST_SECRET]){ controlString = strA; } else{ controlString = strB; } DB_LoadControlString(ctrlStr, controlString); } else if(String_Contains(ctrlStr, code_warp)){ //Warp control code #WARP String, DMap, Screen, Direct //Get first argument: String lowIndex = String_FindStr(ctrlStr, 0, 0, code_warp, 1); highIndex = String_FindChar(ctrlStr, lowIndex+1, 0, ',', 1); k = String_FindLoadInt(ctrlStr, lowIndex, highIndex, 1); //If no argument found, return an error if(k==-1){ DB_LOG(9, currentString); //Missing argument (#WARP) Quit(); } prompt = k; //Get second argument: DMap lowIndex = highIndex; highIndex = String_FindChar(ctrlStr, lowIndex+1, 0, ',', 1); k = String_FindLoadInt(ctrlStr, lowIndex, highIndex, 1); //If no argument found, return an error if(k==-1){ DB_LOG(9, currentString); //Missing argument (#WARP) Quit(); } m = k; //Get third argument: Screen lowIndex = highIndex; highIndex = String_FindChar(ctrlStr, lowIndex+1, 0, ',', 1); k = String_FindLoadInt(ctrlStr, lowIndex, highIndex, 1); //If no argument found, return an error if(k==-1){ DB_LOG(9, currentString); //Missing argument (#WARP) Quit(); } o = k; //Get fourth argument: Direct (0=No, 1=Yes) lowIndex = highIndex; k = String_FindLoadInt(ctrlStr, lowIndex, 0, 1); //If no argument found, return an error if(k==-1){ DB_LOG(9, currentString); //Missing argument (#WARP) Quit(); } p = k; if(prompt>0){ Screen->Message(prompt); WaitNoAction(); } if(p==1){ Link->PitWarp(m, o); } else{ Link->Warp(m, o); } WaitNoAction(); Quit(); } else if(String_Contains(ctrlStr, code_rand)){ //Random string control code #RAND String, Output(*n) //Get first argument: String lowIndex = String_FindStr(ctrlStr, 0, 0, code_rand, 1); highIndex = String_FindChar(ctrlStr, lowIndex+1, 0, ',', 1); k = String_FindLoadInt(ctrlStr, lowIndex, highIndex, 1); //If no argument found, return an error if(k==-1){ DB_LOG(10, currentString); //Missing argument (#RAND) Quit(); } prompt = k; for(i=0; i<16; i++){ options[i] = 0; } //Load however many numbers as the next set of arguments count = 0; for(i=0; i<16; i++){ k = String_FindLoadInt(ctrlStr, lowIndex, 0, i+1); if(k>-1){ options[i] = k; } else break; } count = i; //It's not all that random if there's less than 2, now, is it? if(count<2){ DB_LOG(10, currentString); //Missing argument (#RAND) Quit(); } //Get a random string from the arguments k = Rand(count); controlString = options[k]; if(prompt>0){ Screen->Message(prompt); WaitNoAction(); } DB_LoadControlString(ctrlStr, controlString); } else if(String_Contains(ctrlStr, code_string)){ //Play string control code #STRING String, NextString //Get first argument: String lowIndex = String_FindStr(ctrlStr, 0, 0, code_string, 1); highIndex = String_FindChar(ctrlStr, lowIndex+1, 0, ',', 1); k = String_FindLoadInt(ctrlStr, lowIndex, highIndex, 1); //If no argument found, return an error if(k==-1){ DB_LOG(11, currentString); //Missing argument (#STRING) Quit(); } prompt = k; //Get second argument: Next String lowIndex = highIndex; k = String_FindLoadInt(ctrlStr, lowIndex, 0, 1); //If no argument found, return an error if(k==-1){ DB_LOG(11, currentString); //Missing argument (#STRING) Quit(); } controlString = k; if(prompt>0){ Screen->Message(prompt); WaitNoAction(); } DB_LoadControlString(ctrlStr, controlString); } else if(String_Contains(ctrlStr, code_hastriforce)){ //Check Triforce control code #HASTRIFORCE String, CheckCount, Count, HasTriforce, NoTriforce //Get first argument: String lowIndex = String_FindStr(ctrlStr, 0, 0, code_hastriforce, 1); highIndex = String_FindChar(ctrlStr, lowIndex+1, 0, ',', 1); k = String_FindLoadInt(ctrlStr, lowIndex, highIndex, 1); //If no argument found, return an error if(k==-1){ DB_LOG(12, currentString); //Missing argument (#HASTRIFORCE) Quit(); } prompt = k; //Get second argument: Whether to check total count? lowIndex = highIndex; highIndex = String_FindChar(ctrlStr, lowIndex+1, 0, ',', 1); k = String_FindLoadInt(ctrlStr, lowIndex, highIndex, 1); //If no argument found, return an error if(k==-1){ DB_LOG(12, currentString); //Missing argument (#HASTRIFORCE) Quit(); } //Get third argument: List of pieces/number of pieces if(k==0){ //List of pieces lowIndex = highIndex; highIndex = String_FindChar(ctrlStr, lowIndex+1, 0, ',', 1); //Load however many numbers as the next set of arguments count = 0; for(i=0; i<16; i++){ k = String_FindLoadInt(ctrlStr, lowIndex, highIndex, i+1); if(k>-1){ options[i] = k; } else break; } count = i; //Has to check for at least one triforce piece if(count<1){ DB_LOG(12, currentString); //Missing argument (#HASTRIFORCE) Quit(); } //For each triforce piece, if Link doesn't have it, set result to false j = 1; for(i=0; i<count; i++){ if(!(Game->LItems[options[i]]&LI_TRIFORCE)) j = 0; } } else{ //Number of pieces lowIndex = highIndex; highIndex = String_FindChar(ctrlStr, lowIndex+1, 0, ',', 1); k = String_FindLoadInt(ctrlStr, lowIndex, highIndex, 1); //If no argument found, return an error if(k==-1){ DB_LOG(12, currentString); //Missing argument (#HASTRIFORCE) Quit(); } j = 0; if(NumTriforcePieces()>=k) j = 1; } //Get fourth argument: Has Triforce String lowIndex = highIndex; highIndex = String_FindChar(ctrlStr, lowIndex+1, 0, ',', 1); k = String_FindLoadInt(ctrlStr, lowIndex, highIndex, 1); //If no argument found, return an error if(k==-1){ DB_LOG(12, currentString); //Missing argument (#HASTRIFORCE) Quit(); } strA = k; //Get fifth argument: No Triforce String lowIndex = highIndex; k = String_FindLoadInt(ctrlStr, lowIndex, 0, 1); //If no argument found, return an error if(k==-1){ DB_LOG(12, currentString); //Missing argument (#HASTRIFORCE) Quit(); } strB = k; if(prompt>0){ Screen->Message(prompt); WaitNoAction(); } //Set the next control string based on if Link has the required Triforce if(j){ controlString = strA; } else{ controlString = strB; } DB_LoadControlString(ctrlStr, controlString); } else{ DB_LOG(-1, currentString); //Unidentified control code Quit(); } } else{ Screen->Message(controlString); WaitNoAction(); Quit(); } } } void DB_LoadControlString(int ctrlStr, int id){ if(id==0) Quit(); Game->GetMessage(id, ctrlStr); String_Cap(ctrlStr); String_ToUppercase(ctrlStr); } void DB_LOG(int id, int misc){ if(!MCC_ENABLE_DEBUG) return; if(id==-1){ int error[] = "ERROR: Unidentified control code in string: "; TraceS(error); Trace(misc); TraceNL(); } if(id==0){ int error[] = "ERROR: "; TraceS(error); TraceNL(); } else if(id==1){ int error[] = "ERROR: Missing argument in control code #BRANCH. String: "; TraceS(error); Trace(misc); TraceNL(); } else if(id==2){ int error[] = "ERROR: Arguments mismatched in control code #BRANCH. String: "; TraceS(error); Trace(misc); TraceNL(); } else if(id==3){ int error[] = "ERROR: Missing argument in control code #SCRIPT. String: "; TraceS(error); Trace(misc); TraceNL(); } else if(id==4){ int error[] = "ERROR: Missing argument in control code #GIVEITEM. String: "; TraceS(error); Trace(misc); TraceNL(); } else if(id==5){ int error[] = "ERROR: Missing argument in control code #HASITEM. String: "; TraceS(error); Trace(misc); TraceNL(); } else if(id==6){ int error[] = "ERROR: Missing argument in control code #HASCOUNTER. String: "; TraceS(error); Trace(misc); TraceNL(); } else if(id==7){ int error[] = "ERROR: Missing argument in control code #SECRET. String: "; TraceS(error); Trace(misc); TraceNL(); } else if(id==8){ int error[] = "ERROR: Missing argument in control code #ISSECRET. String: "; TraceS(error); Trace(misc); TraceNL(); } else if(id==9){ int error[] = "ERROR: Missing argument in control code #WARP. String: "; TraceS(error); Trace(misc); TraceNL(); } else if(id==10){ int error[] = "ERROR: Missing argument in control code #RAND. String: "; TraceS(error); Trace(misc); TraceNL(); } else if(id==11){ int error[] = "ERROR: Missing argument in control code #STRING. String: "; TraceS(error); Trace(misc); TraceNL(); } else if(id==12){ int error[] = "ERROR: Missing argument in control code #HASTRIFORCE. String: "; TraceS(error); Trace(misc); TraceNL(); } else if(id==400){ int error[] = "Appended string: "; TraceS(error); Trace(misc); TraceNL(); } } }