////////////////////// /// stdTriforce.zh /// ////////////////////////////////////////////////////////////////////////////// /// v7.0-Alpha : By ZoriaRPG, Dated: 3rd May, 2014 /// ////////////////////////////////////////////////////////////////////////////// /// Credits for orignal Scripts (alphabetical): /// /// grayswandir /// /// MoscowModder /// /// ZoriaRPG /// ///------------------------------------------------------------------------/// /// If your name is absent from this list, and it uses your original code, /// /// please PM me, so that I may update the script /// ////////////////////////////////////////////////////////////////////////////// /// Information & Set-Up Details /// ////////////////////////////////////////////////////////////////////////////// /// This header is designed to permit questmakers to use non-standard FFCs /// /// and global functions, to use a Triforce Piece count other than the ZC /// /// standard of 3-Piece, 6-Piece, or 8-Piece sets. /// ///------------------------------------------------------------------------/// /// It includes a basic global script, some global functions, that work to /// /// determine if the player has enough Triforce pieces, or similar game /// /// items, required to pass checkpoints. /// /// /// /// This work by a set of global components, that allocate all Triforce /// /// pieces to the player, upon completing a special set that is defined by /// /// the questmaker. /// /// /// /// At present, the counting system works in one of two methods: /// /// Use COunters: Establish the number of Triforce pieces in your game, /// /// and then set the appropriate constants for those pieces. The actual /// /// game counter need not be visible, if you so desire, and instead you /// /// may activate a whole TF pice when the player colelcts three pieces, /// /// assuming an eight-level quest with three relics per level that when /// /// combined create a whole TF piece. /// /// /// /// You may also opt to award the 'full Triforce' then whe player gathers /// /// all of your Triforce-esque objects, operating fully on counters for /// /// this set of function. /// /// /// /// Another alternative is to use sets of items, that when assembled act /// /// to createn an 'entire' Triforce, or a 'partial Triforce. It's possoble /// /// to modify the sets in this header to suit your needs. /// /// /// ///----------------------------{TF Checks}---------------------------------/// /// /// /// You may use standard Triforce Rooms, to check for a 'complete' set of /// /// Triforce pieces, or you may use the included FFCs to create custom /// /// TF check rooms, or TF check spots, that when the player has the proper /// /// number of, or proper set of Triforce pieces, acrivate a custom-defined /// /// Triforce check. /// /// /// /// For example you could have a room with a door, guarded by a spell, in /// /// a way not unlike the lightning bolt in Triforce of the Gods (Lttp) /// /// that prevents entry into the Agahnim rooms in that game, by setting /// /// up a combo-based barrier, that when the player stands on, or near to a /// /// certain spot, triggers a TF check; and if the player has the complted /// /// Triforce, the FFC dispels the barrier by changing the combos for it /// /// into something that the player can pass. /// /// /// /// I suggest non-walkale combos, including doors, barriers, blocks, or /// /// other similar things of this nature. it also allows for screen-wide /// /// changes to occur if the player has the whole Triforce. /// /// /// ///----------------------------{FFC Usage}---------------------------------/// /// /// /// Aside from automated checks for normal TF Room screens, this header /// /// adds three FFCs that serve to activate TF triggers. One is screen-wide /// /// another is based on proximity, and third requires the player to be /// /// standing on (or in contact with) the FFC that makes the check. /// /// /// /// If you have more than one combo to change per screen, such as a combo /// /// that is two-tioes wide, simply place two instancs of this FFC on the /// /// screen at an one time, and set the and the settings /// /// in the FFC arguments, for each, with the source combo (or flag), and /// /// the destination to replace those combos (or flags) on a successful /// /// Triforce check. /// /// /// ///-------------------------{Sounds & Messages}----------------------------/// /// /// /// For each FFC, you may set a sound file to play and a message that ZC /// /// should display when activating a TF check. These will only play if no /// /// TF check was made, so there is no danger of overlapping, or otherwise /// /// duplicating the sounds, or messages, if you have more than one FFC in /// /// operation. /// /// /// /// That said, it is best to use flags, and screens, to change combos, if /// /// tou set up TF check rooms to have more than one combo to change. /// ////////////////////////////////////////////////////////////////////////////// //import std.zh // Enable if you don;t call this elsewhere. //import "ffcscript.zh" // Enable if you don't call this elsewhere. //import stdExtra.zh // Enable if you don't call this elsewhere. Note: the latest version of stdEtra has a function // pair named void drawTime, which is broken, as it uses functions from some other header to operate. If you are // using a version with drawTime, and this won't compile, because the variables strlen and itoa aren't defined, // disable lines 577 through 595 of stdExtral to allow it to compile. bool hasWholeTriforce = false; bool playedTriforceCheckSound = false; bool playedTriforceMessage = false; const int CR_TRIFORCE = 7; //Sets TF COunter. 7 is Script1. int triforcePieces; bool touchingTriforceFFC(ffc this){ return LinkCollision(this); } bool standingOnTriforceFFC(ffc this){ return DistanceLink(this) <= 8; } global script active { void run() { while(true) { TF_Item_SetS(); triforceCheck(); Waitdraw(); Waitframe(); } } } void triforceCheck() { if ( Game->Counter[CR_TRIFORCE] >= 999 ) //Change 999 to the number of TF pieces in your game. { SetLevelItem(1, LI_TRIFORCE, true); SetLevelItem(2, LI_TRIFORCE, true); SetLevelItem(3, LI_TRIFORCE, true); SetLevelItem(4, LI_TRIFORCE, true); SetLevelItem(5, LI_TRIFORCE, true); SetLevelItem(6, LI_TRIFORCE, true); SetLevelItem(7, LI_TRIFORCE, true); SetLevelItem(8, LI_TRIFORCE, true); hasWholeTriforce = true; } } // Place this FFC on the screen, on which you want to perform a Triforce check. // Arguments // D0: : This is what combos that this trigger will change when it is actually triggered. // If positive, it specifies that all combos on screen with the given Combo ID will be changed // (e.g. a 12 means change all instances of combo 12). If negative, it specifies that all combos on // screen with the given flag will be changed (e.g. a -CF_SECRETS01 means to change all combos with the // Secret 1 flag on them). // // D1: : This is what the target combos are changed to. // If positive, it specifies a combo id to change them to. // If negative, it instead specifies a map and screen to grab combos from. // The format is "-MMMYXX", where MMM is the map number, Y is the screen's Y position on that map // (from 0 to 7), and XX is the screen's X position on that map (from 0 to 15). Every target // combo is changed to whatever combo is at the same coordinates on that screen. // // D2: : If positive, this causes this ffc to cancel if the combo underneath the // ffc every changes its Combo ID. // // D3: : If this is non-zero, it causes the given sound to be played when the trigger occurs. // // D4: : If this is non-zero, it causes the given message to be displayed when the trigger occurs. // // Note: If you use multiple combo pairs (before, after), then place one FFC on the screen for each pair. ffc script triforceCheckScreenFFC { void run(int target, int result, int dieOnComboChange, int sound, int message) { int loc = ComboAt(CenterX(this), CenterY(this)); // Grab the combo id underneath us so we can tell when it changes. int underComboId = Screen->ComboD[loc]; int map; int screen; if (result < 0) { // Interpret if it is negative. map = (result * -0.001) >> 0; screen = ((result * -0.01 % 10) >> 0) * 16 + (-result % 100);} bool waiting = true; // Wait for something to happen. while (waiting) { if ( dieOnComboChange > 0 && Screen->ComboD[loc] != underComboId ) { // If is set and the combo does change, terminate. return; } if ( hasWholeTriforce == true ) { waiting = false; } Waitframe(); // Advance to next frame. } // If we reach this point, it means that the player has the whole Triforce. for ( loc = 0; loc < 176; loc++ ) { // Now loop through every combo on screen looking for combos matching . bool match = false; if ( target > 0 ) { // If is positive, test for Combo ID. if (Screen->ComboD[loc] == target) { match = true; } } else if ( target < 0 ) { // If is negative, test for the flag being present. if (ComboFI(loc, -target)) { match = true; } } if (match) { // If the current combo is a match, then transform the combo according to . if ( result > 0 ) { // If is positive, just change the target to . Screen->ComboD[loc] = result; } else if ( result < 0 ) { // If is negative, grab the combo from the given screen. Screen->ComboD[loc] = Game->GetComboData(map, screen, loc); } } } if ( sound != 0 && playedTriforceCheckSound == false ) { Game->PlaySound(sound); // Now play the message and sound, if appropriate. playedTriforceCheckSound = true; } if ( message != 0 && playedTriforceMessage ) { Screen->Message(message); playedTriforceMessage = true; } } } ffc script triforceCheckSpotPreciseFFC { // Use this if instead of an enire TF room, you want to make a spot on the floor, to check for the TF. // Instead of being in a room, that opens op a barrier, this can be placed on a magic circle, or TF mark, and if Link is // standing on the mark where you place this FFC< thwn the TF check routine will run. // Note: If you use multiple combo pairs (before, after), then overlay multiple FFCs on the same spot, with one for each pair of combos. void run(int target, int result, int dieOnComboChange, int sound, int message) { int loc = ComboAt(CenterX(this), CenterY(this)); // Grab the combo id underneath us so we can tell when it changes. int underComboId = Screen->ComboD[loc]; int map; int screen; if (result < 0) { // Interpret if it is negative. map = (result * -0.001) >> 0; screen = ((result * -0.01 % 10) >> 0) * 16 + (-result % 100);} bool waiting = true; // Wait for something to happen. while (waiting) { if (dieOnComboChange > 0 && Screen->ComboD[loc] != underComboId) { // If is set and the combo does change, terminate. return; } if ( LinkCollision(this) == true && hasWholeTriforce == true ) { waiting = false; } Waitframe(); // Advance to next frame. } // If we reach this point, it means that the player has the whole Triforce. for ( loc = 0; loc < 176; loc++ ) { // Now loop through every combo on screen looking for combos matching . bool match = false; if ( target > 0 ) { // If is positive, test for Combo ID. if (Screen->ComboD[loc] == target) { match = true; } } else if ( target < 0 ) { // If is negative, test for the flag being present. if (ComboFI(loc, -target)) { match = true; } } if (match) { // If the current combo is a match, then transform the combo according to . if ( result > 0 ) { // If is positive, just change the target to . Screen->ComboD[loc] = result; } else if ( result < 0 ) { // If is negative, grab the combo from the given screen. Screen->ComboD[loc] = Game->GetComboData(map, screen, loc); } } } if ( sound != 0 && playedTriforceCheckSound == false ) { Game->PlaySound(sound); // Now play the message and sound, if appropriate. playedTriforceCheckSound = true; } if ( message != 0 && playedTriforceMessage ) { Screen->Message(message); playedTriforceMessage = true; } } } ffc script triforceCheckSpotPRangeFFC { //This is like a sensitive warp bersion of triforceCheckSpotPreciseFFC. //Place this FFC on the area that you want to use to activat the TF check. // Note: If you use multiple combo pairs (before, after), then overlay multiple FFCs on the same spot, with one for each pair of combos. // Set FFC_Distance (Argument D5) to the proximity Link must be in relation to the FFC to trigger it. Good values are 8, 16, 24, and 32. // The smaler the number, the closer Link must be to trigger the effects. void run(int target, int result, int dieOnComboChange, int sound, int message, int FFC_Distance) { int loc = ComboAt(CenterX(this), CenterY(this)); // Grab the combo id underneath us so we can tell when it changes. int underComboId = Screen->ComboD[loc]; int map; int screen; if ( result < 0 ) { // Interpret if it is negative. map = (result * -0.001) >> 0; screen = ((result * -0.01 % 10) >> 0) * 16 + (-result % 100);} bool waiting = true; // Wait for something to happen. while (waiting) { if ( dieOnComboChange > 0 && Screen->ComboD[loc] != underComboId ) { // If is set and the combo does change, terminate. return; } if ( DistanceLink(this) <= FFC_Distance && hasWholeTriforce == true ) { waiting = false; } Waitframe(); // Advance to next frame. } // If we reach this point, it means that the player has the whole Triforce. for ( loc = 0; loc < 176; loc++ ) { // Now loop through every combo on screen looking for combos matching . bool match = false; if ( target > 0 ) { // If is positive, test for Combo ID. if (Screen->ComboD[loc] == target) { match = true; } } else if ( target < 0 ) { // If is negative, test for the flag being present. if (ComboFI(loc, -target)) { match = true; } } if (match) { // If the current combo is a match, then transform the combo according to . if (result > 0) { // If is positive, just change the target to . Screen->ComboD[loc] = result; } else if (result < 0) { // If is negative, grab the combo from the given screen. Screen->ComboD[loc] = Game->GetComboData(map, screen, loc); } } } if ( sound != 0 && playedTriforceCheckSound == false) { Game->PlaySound(sound); // Now play the message and sound, if appropriate. playedTriforceCheckSound = true; } if ( message != 0 && playedTriforceMessage == false ) { Screen->Message(message); playedTriforceMessage = true; } } } item script triforcePieceCounter{ //Set as Pick-Up Script void run(int CR_TRIFORCE, int numberOfPieces, int specificPiece, int increaseTF_Counter, int newMaxTF, int totalPieces) { if ( totalPieces > 0 ) { //Set specfic MCounter on pick-up of TF Piece. Game->MCounter[CR_TRIFORCE] = totalPieces; //Set to maximum for TF Piece Counter. } if ( specificPiece == 0 ){ Game->Counter[CR_TRIFORCE] += numberOfPieces; if ( increaseTF_Counter > 0 ) { Game->MCounter[CR_TRIFORCE] += newMaxTF; } else if ( newMaxTF > 0 ) { Game->MCounter[CR_TRIFORCE] = newMaxTF; } } else if ( specificPiece > 0 && specificPiece < 9 ) { SetLevelItem(specificPiece, LI_TRIFORCE, true); } } } ///Triforce item constants for 24 pieces. Transform into an array later to save on gloal constants. const int TF_object01 = 100; const int TF_object02 = 100; const int TF_object03 = 100; const int TF_object04 = 100; const int TF_object05 = 100; const int TF_object06 = 100; const int TF_object07 = 100; const int TF_object08 = 100; const int TF_object09 = 100; const int TF_object10 = 100; const int TF_object11 = 100; const int TF_object12 = 100; const int TF_object13 = 100; const int TF_object14 = 100; const int TF_object15 = 100; const int TF_object16 = 100; const int TF_object17 = 100; const int TF_object18 = 100; const int TF_object19 = 100; const int TF_object20 = 100; const int TF_object21 = 100; const int TF_object22 = 100; const int TF_object23 = 100; const int TF_object24 = 100; // Items grabted by TF piece sets (eight sets of three pieces). void TF_Item_SetS() { TF_ItemSetOne(); TF_ItemSetTwo(); TF_ItemSetThree(); TF_ItemSetFour(); TF_ItemSetFive(); TF_ItemSetSix(); TF_ItemSetSeven(); TF_ItemSetEight(); } void TF_ItemSetOne() { if ( Link->Item[TF_object01] == true && Link->Item[TF_object02] == true && Link->Item[TF_object03] == true ) { SetLevelItem(1, LI_TRIFORCE, true); Link->Item[I_FARORESWIND] = true; Link->MaxHP += 32; // Gives Link +1 Heart Container. Link->HP = Link->MaxHP; // Refills HP. Link->MaxMP += 16; // Gives Link +1 Magic container. Link->MP = Link->MaxMP; // Refills MP. } } void TF_ItemSetTwo() { if ( Link->Item[TF_object04] == true && Link->Item[TF_object05] == true && Link->Item[TF_object06] == true ) { SetLevelItem(2, LI_TRIFORCE, true); Link->Item[I_HEARTRING1] = true; Link->MaxHP += 32; // Gives Link +1 Heart Container. Link->HP = Link->MaxHP; // Refills HP. Link->MaxMP += 16; // Gives Link +1 Magic container. Link->MP = Link->MaxMP; // Refills MP. } } void TF_ItemSetThree() { if ( Link->Item[TF_object07] == true && Link->Item[TF_object08] == true && Link->Item[TF_object08] == true ) { SetLevelItem(3, LI_TRIFORCE, true); Link->Item[I_ROCSFEATHER] = true; Link->MaxHP += 32; // Gives Link +1 Heart Container. Link->HP = Link->MaxHP; // Refills HP. Link->MaxMP += 16; // Gives Link +1 Magic container. Link->MP = Link->MaxMP; // Refills MP. } } void TF_ItemSetFour() { if ( Link->Item[TF_object10] == true && Link->Item[TF_object11] == true && Link->Item[TF_object12]== true ) { SetLevelItem(4, LI_TRIFORCE, true); Link->Item[I_NAYRUSLOVE] = true; Link->MaxHP += 32; // Gives Link +1 Heart Container. Link->HP = Link->MaxHP; // Refills HP. Link->MaxMP += 16; // Gives Link +1 Magic container. Link->MP = Link->MaxMP; // Refills MP. } } void TF_ItemSetFive() { if ( Link->Item[TF_object13] == true && Link->Item[TF_object14] == true && Link->Item[TF_object15] == true ) { SetLevelItem(5, LI_TRIFORCE, true); Link->Item[I_WHIMSICALRING] = true; Link->MaxHP += 32; // Gives Link +1 Heart Container. Link->HP = Link->MaxHP; // Refills HP. Link->MaxMP += 16; // Gives Link +1 Magic container. Link->MP = Link->MaxMP; // Refills MP. } } void TF_ItemSetSix() { if ( Link->Item[TF_object16] == true && Link->Item[TF_object17] == true && Link->Item[TF_object18] == true ) { SetLevelItem(6, LI_TRIFORCE, true); Link->Item[I_DINSFIRE] = true; Link->MaxHP += 32; // Gives Link +1 Heart Container. Link->HP = Link->MaxHP; // Refills HP. Link->MaxMP += 16; // Gives Link +1 Magic container. Link->MP = Link->MaxMP; // Refills MP. } } void TF_ItemSetSeven() { if ( Link->Item[TF_object19] == true && Link->Item[TF_object20] == true && Link->Item[TF_object21] == true ) { SetLevelItem(7, LI_TRIFORCE, true); Link->Item[I_MAGICRING2] = true; Link->MaxHP += 32; // Gives Link +1 Heart Container. Link->HP = Link->MaxHP; // Refills HP. Link->MaxMP += 16; // Gives Link +1 Magic container. Link->MP = Link->MaxMP; // Refills MP. } } void TF_ItemSetEight() { if ( Link->Item[TF_object22] == true && Link->Item[TF_object23] == true && Link->Item[TF_object24] == true ) { SetLevelItem(8, LI_TRIFORCE, true); Link->Item[I_SWORD4] = true; Link->MaxHP += 32; // Gives Link +1 Heart Container. Link->HP = Link->MaxHP; // Refills HP. Link->MaxMP += 16; // Gives Link +1 Magic container. Link->MP = Link->MaxMP; // Refills MP. } } void triforceObjects() { if (Link->Item[TF_object01] == true && Link->Item[TF_object02] == true && Link->Item[TF_object03] == true && Link->Item[TF_object04] == true && Link->Item[TF_object05] == true && Link->Item[TF_object06] == true && Link->Item[TF_object07] == true && Link->Item[TF_object08] == true && Link->Item[TF_object09] == true && Link->Item[TF_object10] == true && Link->Item[TF_object11] == true && Link->Item[TF_object12] == true && Link->Item[TF_object13] == true && Link->Item[TF_object14] == true && Link->Item[TF_object15] == true && Link->Item[TF_object16] == true && Link->Item[TF_object17] == true && Link->Item[TF_object18] == true && Link->Item[TF_object19] == true && Link->Item[TF_object20] == true && Link->Item[TF_object21] == true && Link->Item[TF_object22] == true && Link->Item[TF_object23] == true && Link->Item[TF_object24] == true ) { SetLevelItem(1, LI_TRIFORCE, true); SetLevelItem(2, LI_TRIFORCE, true); SetLevelItem(3, LI_TRIFORCE, true); SetLevelItem(4, LI_TRIFORCE, true); SetLevelItem(5, LI_TRIFORCE, true); SetLevelItem(6, LI_TRIFORCE, true); SetLevelItem(7, LI_TRIFORCE, true); SetLevelItem(8, LI_TRIFORCE, true); hasWholeTriforce = true; } } void setTF_Objects( int TF_object01, int TF_object02, int TF_object03, int TF_object04, int TF_object05, int TF_object06, int TF_object07, int TF_object08, int TF_object09, int TF_object10, int TF_object11, int TF_object12, int TF_object13, int TF_object14, int TF_object15, int TF_object16, int TF_object17, int TF_object18, int TF_object19, int TF_object20, int TF_object21, int TF_object22, int TF_object23, int TF_object24, bool TF_object01_Boolean, bool TF_object02_Boolean, bool TF_object03_Boolean, bool TF_object04_Boolean, bool TF_object05_Boolean, bool TF_object06_Boolean, bool TF_object07_Boolean, bool TF_object08_Boolean, bool TF_object09_Boolean, bool TF_object10_Boolean, bool TF_object11_Boolean, bool TF_object12_Boolean, bool TF_object13_Boolean, bool TF_object14_Boolean, bool TF_object15_Boolean, bool TF_object16_Boolean, bool TF_object17_Boolean, bool TF_object18_Boolean, bool TF_object19_Boolean, bool TF_object20_Boolean, bool TF_object21_Boolean, bool TF_object22_Boolean, bool TF_object23_Boolean, bool TF_object24_Boolean ) { TF_object01 = 100; //Set to item editr id of TF item 01. TF_object02 = 100; //Set to item editr id of TF item 02. TF_object03 = 100; //Set to item editr id of TF item 03. TF_object04 = 100; //Set to item editr id of TF item 04. TF_object05 = 100; //Set to item editr id of TF item 05. TF_object06 = 100; //Set to item editr id of TF item 06. TF_object07 = 100; //Set to item editr id of TF item 07. TF_object08 = 100; //Set to item editr id of TF item 08. TF_object09 = 100; //Set to item editr id of TF item 09. TF_object10 = 100; //Set to item editr id of TF item 10. TF_object11 = 100; //Set to item editr id of TF item 11. TF_object12 = 100; //Set to item editr id of TF item 12. TF_object13 = 100; //Set to item editr id of TF item 13. TF_object14 = 100; //Set to item editr id of TF item 14. TF_object15 = 100; //Set to item editr id of TF item 15. TF_object16 = 100; //Set to item editr id of TF item 16. TF_object17 = 100; //Set to item editr id of TF item 17. TF_object18 = 100; //Set to item editr id of TF item 18. TF_object19 = 100; //Set to item editr id of TF item 19. TF_object20 = 100; //Set to item editr id of TF item 20. TF_object21 = 100; //Set to item editr id of TF item 21. TF_object22 = 100; //Set to item editr id of TF item 22. TF_object23 = 100; //Set to item editr id of TF item 23. TF_object24 = 100; //Set to item editr id of TF item 24. int args[24] = { TF_object01, TF_object02, TF_object03, TF_object04, TF_object05, TF_object06, TF_object07, TF_object08, TF_object09, TF_object10, TF_object11, TF_object12, TF_object13, TF_object14, TF_object15, TF_object16, TF_object17, TF_object18, TF_object19, TF_object20, TF_object21, TF_object22, TF_object23, TF_object24 // TF_object01_Boolean, // TF_object02_Boolean, // TF_object03_Boolean, // TF_object04_Boolean, // TF_object05_Boolean, // TF_object06_Boolean, // TF_object07_Boolean, // TF_object08_Boolean, // TF_object09_Boolean, // TF_object10_Boolean, // TF_object11_Boolean, // TF_object12_Boolean, // TF_object13_Boolean, // TF_object14_Boolean, // TF_object15_Boolean, // TF_object16_Boolean, // TF_object17_Boolean, // TF_object18_Boolean, // TF_object19_Boolean, // TF_object20_Boolean, // TF_object21_Boolean, // TF_object22_Boolean, // TF_object23_Boolean, // TF_object24_Boolean }; //useTriforceObjects(args); } void useTriforceObjects( int TF_object01, int TF_object02, int TF_object03, int TF_object04, int TF_object05, int TF_object06, int TF_object07, int TF_object08, int TF_object09, int TF_object10, int TF_object11, int TF_object12, int TF_object13, int TF_object14, int TF_object15, int TF_object16, int TF_object17, int TF_object18, int TF_object19, int TF_object20, int TF_object21, int TF_object22, int TF_object23, int TF_object24, bool TF_object01_Boolean, bool TF_object02_Boolean, bool TF_object03_Boolean, bool TF_object04_Boolean, bool TF_object05_Boolean, bool TF_object06_Boolean, bool TF_object07_Boolean, bool TF_object08_Boolean, bool TF_object09_Boolean, bool TF_object10_Boolean, bool TF_object11_Boolean, bool TF_object12_Boolean, bool TF_object13_Boolean, bool TF_object14_Boolean, bool TF_object15_Boolean, bool TF_object16_Boolean, bool TF_object17_Boolean, bool TF_object18_Boolean, bool TF_object19_Boolean, bool TF_object20_Boolean, bool TF_object21_Boolean, bool TF_object22_Boolean, bool TF_object23_Boolean, bool TF_object24_Boolean ) { }