diff --git a/patch_mp/maps/mp/gametypes/_class.gsc b/patch_mp/maps/mp/gametypes/_class.gsc index b22d67f..ab2e570 100644 --- a/patch_mp/maps/mp/gametypes/_class.gsc +++ b/patch_mp/maps/mp/gametypes/_class.gsc @@ -1,3 +1,4 @@ +//checked includes match cerberus output #include maps/mp/_challenges; #include maps/mp/gametypes/_dev; #include maps/mp/teams/_teams; @@ -8,7 +9,7 @@ #include maps/mp/_utility; #include common_scripts/utility; -init() +init() //checked partially changed to match cerberus output and beta dump did not change while loop to for loop see github for more info { level.classmap[ "class_smg" ] = "CLASS_SMG"; level.classmap[ "class_cqb" ] = "CLASS_CQB"; @@ -101,39 +102,29 @@ init() i++; continue; } - else + if ( !isDefined( level.tbl_weaponids[ i ] ) || level.tbl_weaponids[ i ][ "reference" ] == "" ) { - if ( !isDefined( level.tbl_weaponids[ i ] ) || level.tbl_weaponids[ i ][ "reference" ] == "" ) + i++; + continue; + } + weapon_type = level.tbl_weaponids[ i ][ "group" ]; + weapon = level.tbl_weaponids[ i ][ "reference" ]; + attachment = level.tbl_weaponids[ i ][ "attachment" ]; + weapon_class_register( weapon + "_mp", weapon_type ); + if ( isDefined( attachment ) && attachment != "" ) + { + attachment_tokens = strtok( attachment, " " ); + if ( isDefined( attachment_tokens ) ) { - i++; - continue; - } - else - { - weapon_type = level.tbl_weaponids[ i ][ "group" ]; - weapon = level.tbl_weaponids[ i ][ "reference" ]; - attachment = level.tbl_weaponids[ i ][ "attachment" ]; - weapon_class_register( weapon + "_mp", weapon_type ); - while ( isDefined( attachment ) && attachment != "" ) + if ( attachment_tokens.size == 0 ) { - attachment_tokens = strtok( attachment, " " ); - while ( isDefined( attachment_tokens ) ) + weapon_class_register( ( weapon + "_" ) + attachment + "_mp", weapon_type ); + } + else + { + for ( k = 0; k < attachment_tokens.size; k++ ) { - if ( attachment_tokens.size == 0 ) - { - weapon_class_register( ( weapon + "_" ) + attachment + "_mp", weapon_type ); - i++; - continue; - } - else - { - k = 0; - while ( k < attachment_tokens.size ) - { - weapon_class_register( ( weapon + "_" ) + attachment_tokens[ k ] + "_mp", weapon_type ); - k++; - } - } + weapon_class_register( ( weapon + "_" ) + attachment_tokens[ k ] + "_mp", weapon_type ); } } } @@ -144,59 +135,55 @@ init() level thread onplayerconnecting(); } -create_class_exclusion_list() +create_class_exclusion_list() //checked changed to match the beta dump { currentdvar = 0; level.itemexclusions = []; - while ( getDvarInt( 853497292 + currentdvar ) ) + while ( getDvarInt( "item_exclusion_" + currentdvar ) ) { - level.itemexclusions[ currentdvar ] = getDvarInt( 853497292 + currentdvar ); + level.itemexclusions[ currentdvar ] = getDvarInt( "item_exclusion_" + currentdvar ); currentdvar++; } level.attachmentexclusions = []; currentdvar = 0; - while ( getDvar( 2137981926 + currentdvar ) != "" ) + while ( getDvar( "attachment_exclusion_" + currentdvar ) != "" ) { - level.attachmentexclusions[ currentdvar ] = getDvar( 2137981926 + currentdvar ); + level.attachmentexclusions[ currentdvar ] = getDvar( "attachment_exclusion_" + currentdvar ); currentdvar++; } } -is_item_excluded( itemindex ) +is_item_excluded( itemindex ) //checked changed to match cerberus output { if ( !level.onlinegame ) { return 0; } numexclusions = level.itemexclusions.size; - exclusionindex = 0; - while ( exclusionindex < numexclusions ) + for ( exclusionindex = 0; exclusionindex < numexclusions; exclusionindex++ ) { if ( itemindex == level.itemexclusions[ exclusionindex ] ) { return 1; } - exclusionindex++; } return 0; } -is_attachment_excluded( attachment ) +is_attachment_excluded( attachment ) //checked changed to match cerberus output { numexclusions = level.attachmentexclusions.size; - exclusionindex = 0; - while ( exclusionindex < numexclusions ) + for ( exclusionindex = 0; exclusionindex < numexclusions; exclusionindex++ ) { if ( attachment == level.attachmentexclusions[ exclusionindex ] ) { return 1; } - exclusionindex++; } return 0; } -set_statstable_id() +set_statstable_id() //checked matches cerberus output { if ( !isDefined( level.statstableid ) ) { @@ -204,7 +191,7 @@ set_statstable_id() } } -get_item_count( itemreference ) +get_item_count( itemreference ) //checked matches cerberus output { set_statstable_id(); itemcount = int( tablelookup( level.statstableid, 4, itemreference, 5 ) ); @@ -215,7 +202,7 @@ get_item_count( itemreference ) return itemcount; } -getdefaultclassslotwithexclusions( classname, slotname ) +getdefaultclassslotwithexclusions( classname, slotname ) //checked matches cerberus output { itemreference = getdefaultclassslot( classname, slotname ); set_statstable_id(); @@ -227,12 +214,12 @@ getdefaultclassslotwithexclusions( classname, slotname ) return itemreference; } -load_default_loadout( class, classnum ) +load_default_loadout( class, classnum ) //checked matches cerberus output { level.classtoclassnum[ class ] = classnum; } -weapon_class_register( weapon, weapon_type ) +weapon_class_register( weapon, weapon_type ) //checked matches cerberus output { if ( issubstr( "weapon_smg weapon_cqb weapon_assault weapon_lmg weapon_sniper weapon_shotgun weapon_launcher weapon_special", weapon_type ) ) { @@ -256,18 +243,19 @@ weapon_class_register( weapon, weapon_type ) } else { + /* /# assert( 0, "Weapon group info is missing from statsTable for: " + weapon_type ); #/ + */ } } -cac_init() +cac_init() //checked changed to match cerberus output { level.tbl_weaponids = []; set_statstable_id(); - i = 0; - while ( i < 256 ) + for ( i = 0; i < 256; i++ ) { itemrow = tablelookuprownum( level.statstableid, 0, i ); if ( itemrow > -1 ) @@ -285,11 +273,9 @@ cac_init() } } } - i++; } level.perknames = []; - i = 0; - while ( i < 256 ) + for ( i = 0; i < 256; i++ ) { itemrow = tablelookuprownum( level.statstableid, 0, i ); if ( itemrow > -1 ) @@ -308,13 +294,11 @@ cac_init() } } } - i++; } level.killstreaknames = []; level.killstreakicons = []; level.killstreakindices = []; - i = 0; - while ( i < 256 ) + for ( i = 0; i < 256; i++ ) { itemrow = tablelookuprownum( level.statstableid, 0, i ); if ( itemrow > -1 ) @@ -338,19 +322,20 @@ cac_init() } } } - i++; } } -getclasschoice( response ) +getclasschoice( response ) //checked matches cerberus output { + /* /# assert( isDefined( level.classmap[ response ] ) ); #/ + */ return level.classmap[ response ]; } -getloadoutitemfromddlstats( customclassnum, loadoutslot ) +getloadoutitemfromddlstats( customclassnum, loadoutslot ) //checked matches cerberus output { itemindex = self getloadoutitem( customclassnum, loadoutslot ); if ( is_item_excluded( itemindex ) && !is_warlord_perk( itemindex ) ) @@ -360,7 +345,7 @@ getloadoutitemfromddlstats( customclassnum, loadoutslot ) return itemindex; } -getattachmentstring( weaponnum, attachmentnum ) +getattachmentstring( weaponnum, attachmentnum ) //checked matches cerberus output { attachmentstring = getitemattachment( weaponnum, attachmentnum ); if ( attachmentstring != "none" && !is_attachment_excluded( attachmentstring ) ) @@ -374,7 +359,7 @@ getattachmentstring( weaponnum, attachmentnum ) return attachmentstring; } -getattachmentsdisabled() +getattachmentsdisabled() //checked matches cerberus output { if ( !isDefined( level.attachmentsdisabled ) ) { @@ -383,13 +368,13 @@ getattachmentsdisabled() return level.attachmentsdisabled; } -getkillstreakindex( class, killstreaknum ) +getkillstreakindex( class, killstreaknum ) //checked changed to match beta dump { killstreaknum++; killstreakstring = "killstreak" + killstreaknum; - if ( getDvarInt( #"826EB3B9" ) == 2 ) + if ( getDvarInt( "custom_killstreak_mode" ) == 2 ) { - return getDvarInt( 3788714527 + killstreakstring ); + return getDvarInt( "custom_" + killstreakstring ); } else { @@ -397,7 +382,7 @@ getkillstreakindex( class, killstreaknum ) } } -givekillstreaks( classnum ) +givekillstreaks( classnum ) //checked changed to match cerberus output { self.killstreak = []; if ( !level.loadoutkillstreaksenabled ) @@ -406,15 +391,16 @@ givekillstreaks( classnum ) } sortedkillstreaks = []; currentkillstreak = 0; - killstreaknum = 0; - while ( killstreaknum < level.maxkillstreaks ) + for ( killstreaknum = 0; killstreaknum < level.maxkillstreaks; killstreaknum++ ) { killstreakindex = getkillstreakindex( classnum, killstreaknum ); if ( isDefined( killstreakindex ) && killstreakindex > 0 ) { + /* /# assert( isDefined( level.tbl_killstreakdata[ killstreakindex ] ), "KillStreak #:" + killstreakindex + "'s data is undefined" ); #/ + */ if ( isDefined( level.tbl_killstreakdata[ killstreakindex ] ) ) { self.killstreak[ currentkillstreak ] = level.tbl_killstreakdata[ killstreakindex ]; @@ -446,7 +432,6 @@ givekillstreaks( classnum ) { self maps/mp/gametypes/_class::setweaponammooverall( weapon, 0 ); } - break; } else { @@ -462,24 +447,16 @@ givekillstreaks( classnum ) sortdata.cost = level.killstreaks[ killstreaktype ].momentumcost; sortdata.weapon = weapon; sortindex = 0; - sortindex = 0; - while ( sortindex < sortedkillstreaks.size ) + for ( sortindex = 0; sortindex < sortedkillstreaks.size; sortindex++ ) { if ( sortedkillstreaks[ sortindex ].cost > sortdata.cost ) { break; } - else - { - sortindex++; - } } - i = sortedkillstreaks.size; - while ( i > sortindex ) + for ( i = sortedkillstreaks.size; i > sortindex; i-- ) { sortedkillstreaks[ i ] = sortedkillstreaks[ i - 1 ]; - i--; - } sortedkillstreaks[ sortindex ] = sortdata; } @@ -487,7 +464,6 @@ givekillstreaks( classnum ) currentkillstreak++; } } - killstreaknum++; } actionslotorder = []; actionslotorder[ 0 ] = 4; @@ -504,7 +480,7 @@ givekillstreaks( classnum ) } } -is_warlord_perk( itemindex ) +is_warlord_perk( itemindex ) //checked matches cerberus output { if ( itemindex == 168 || itemindex == 169 ) { @@ -516,47 +492,46 @@ is_warlord_perk( itemindex ) } } -isperkgroup( perkname ) +isperkgroup( perkname ) //checked changed at own discretion { - if ( isDefined( perkname ) ) + if ( isDefined( perkname ) && isstring( perkname ) ) { - return isstring( perkname ); + return 1; } + return 0; } -logclasschoice( class, primaryweapon, specialtype, perks ) +logclasschoice( class, primaryweapon, specialtype, perks ) //checked changed to match cerberus output { if ( class == self.lastclass ) { return; } self logstring( "choseclass: " + class + " weapon: " + primaryweapon + " special: " + specialtype ); - i = 0; - while ( i < perks.size ) + for ( i = 0; i < perks.size; i++ ) { self logstring( "perk" + i + ": " + perks[ i ] ); - i++; } self.lastclass = class; } -reset_specialty_slots( class_num ) +reset_specialty_slots( class_num ) //checked matches cerberus output { self.specialty = []; } -initstaticweaponstime() +initstaticweaponstime() //checked matches cerberus output { self.staticweaponsstarttime = getTime(); } -initweaponattachments( weaponname ) +initweaponattachments( weaponname ) //checked matches cerberus output { self.currentweaponstarttime = getTime(); self.currentweapon = weaponname; } -isequipmentallowed( equipment ) +isequipmentallowed( equipment ) //checked matches cerberus output { if ( equipment == "camera_spike_mp" && self issplitscreen() ) { @@ -569,7 +544,7 @@ isequipmentallowed( equipment ) return 1; } -isleagueitemrestricted( item ) +isleagueitemrestricted( item ) //checked matches cerberus output { if ( level.leaguematch ) { @@ -578,7 +553,7 @@ isleagueitemrestricted( item ) return 0; } -giveloadoutlevelspecific( team, class ) +giveloadoutlevelspecific( team, class ) //checked matches cerberus output { pixbeginevent( "giveLoadoutLevelSpecific" ); if ( isDefined( level.givecustomcharacters ) ) @@ -592,41 +567,35 @@ giveloadoutlevelspecific( team, class ) pixendevent(); } -removeduplicateattachments( weapon ) +removeduplicateattachments( weapon ) //checked changed to match cerberus output { if ( !isDefined( weapon ) ) { return undefined; } attachments = strtok( weapon, "+" ); - attachmentindex = 1; - while ( attachmentindex < attachments.size ) + for ( attachmentindex = 1; attachmentindex < attachments.size; attachmentindex++ ) { - attachmentindex2 = attachmentindex + 1; - while ( attachmentindex2 < attachments.size ) + for ( attachmentindex2 = attachmentindex + 1; attachmentindex2 < attachments.size; attachmentindex2++ ) { if ( attachments[ attachmentindex ] == attachments[ attachmentindex2 ] ) { attachments[ attachmentindex2 ] = "none"; } - attachmentindex2++; } - attachmentindex++; } uniqueattachmentsweapon = attachments[ 0 ]; - attachmentindex = 1; - while ( attachmentindex < attachments.size ) + for ( attachmentindex = 1; attachmentindex < attachments.size; attachmentindex++ ) { if ( attachments[ attachmentindex ] != "none" ) { uniqueattachmentsweapon = ( uniqueattachmentsweapon + "+" ) + attachments[ attachmentindex ]; } - attachmentindex++; } return uniqueattachmentsweapon; } -giveloadout( team, class ) +giveloadout( team, class ) //checked partially changed to match cerberus output did not use continue in for loop see github for more info { pixbeginevent( "giveLoadout" ); self takeallweapons(); @@ -659,9 +628,11 @@ giveloadout( team, class ) else { pixbeginevent( "default class" ); + /* /# assert( isDefined( self.pers[ "class" ] ), "Player during spawn and loadout got no class!" ); #/ + */ class_num = level.classtoclassnum[ class ]; self.class_num = class_num; pixendevent(); @@ -669,10 +640,9 @@ giveloadout( team, class ) knifeweaponoptions = self calcweaponoptions( class_num, 2 ); self giveweapon( "knife_mp", 0, knifeweaponoptions ); self.specialty = self getloadoutperks( class_num ); - while ( level.leaguematch ) + if ( level.leaguematch ) { - i = 0; - while ( i < self.specialty.size ) + for ( i = 0; i < self.specialty.size; i++ ) { if ( isleagueitemrestricted( self.specialty[ i ] ) ) { @@ -680,7 +650,6 @@ giveloadout( team, class ) i--; } - i++; } } self register_perks(); @@ -717,16 +686,13 @@ giveloadout( team, class ) self.secondaryloadoutweapon = sidearm; self.secondaryloadoutaltweapon = weaponaltweaponname( sidearm ); } - else + else if ( self isbonuscardactive( 0, self.class_num ) ) { - if ( self isbonuscardactive( 0, self.class_num ) ) - { - self.primaryloadoutweapon = weapon; - } - if ( self isbonuscardactive( 1, self.class_num ) ) - { - self.secondaryloadoutweapon = sidearm; - } + self.primaryloadoutweapon = weapon; + } + if ( self isbonuscardactive( 1, self.class_num ) ) + { + self.secondaryloadoutweapon = sidearm; } if ( sidearm != "weapon_null_mp" ) { @@ -750,9 +716,11 @@ giveloadout( team, class ) primaryweapon = weapon; primarytokens = strtok( primaryweapon, "_" ); self.pers[ "primaryWeapon" ] = primarytokens[ 0 ]; + /* /# println( "^5GiveWeapon( " + weapon + " ) -- weapon" ); #/ + */ if ( primaryweapon != "" && primaryweapon != "weapon_null_mp" && primaryweapon != "weapon_null" ) { if ( self hasperk( "specialty_extraammo" ) ) @@ -780,9 +748,11 @@ giveloadout( team, class ) spawnweapon = self.spawnweapon; } self.pers[ "changed_class" ] = 0; + /* /# assert( spawnweapon != "" ); #/ + */ self.spawnweapon = spawnweapon; self.pers[ "spawnWeapon" ] = self.spawnweapon; self setspawnweapon( spawnweapon ); @@ -825,9 +795,11 @@ giveloadout( team, class ) grenadetypeprimary = level.weapons[ "flash" ]; } } + /* /# println( "^5GiveWeapon( " + grenadetypeprimary + " ) -- grenadeTypePrimary" ); #/ + */ self giveweapon( grenadetypeprimary ); self setweaponammoclip( grenadetypeprimary, primarygrenadecount ); self switchtooffhand( grenadetypeprimary ); @@ -840,9 +812,11 @@ giveloadout( team, class ) if ( grenadetypesecondary != "" && grenadetypesecondary != "weapon_null_mp" && isequipmentallowed( grenadetypesecondary ) ) { self setoffhandsecondaryclass( grenadetypesecondary ); + /* /# println( "^5GiveWeapon( " + grenadetypesecondary + " ) -- grenadeTypeSecondary" ); #/ + */ self giveweapon( grenadetypesecondary ); self setweaponammoclip( grenadetypesecondary, grenadesecondarycount ); self.grenadetypesecondary = grenadetypesecondary; @@ -851,20 +825,16 @@ giveloadout( team, class ) self bbclasschoice( class_num, primaryweapon, sidearm ); if ( !sessionmodeiszombiesgame() ) { - i = 0; - while ( i < 3 ) + for ( i = 0; i < 3; i++ ) { if ( level.loadoutkillstreaksenabled && isDefined( self.killstreak[ i ] ) && isDefined( level.killstreakindices[ self.killstreak[ i ] ] ) ) { killstreaks[ i ] = level.killstreakindices[ self.killstreak[ i ] ]; - i++; - continue; } else { killstreaks[ i ] = 0; } - i++; } self recordloadoutperksandkillstreaks( primaryweapon, sidearm, grenadetypeprimary, grenadetypesecondary, killstreaks[ 0 ], killstreaks[ 1 ], killstreaks[ 2 ] ); } @@ -904,7 +874,7 @@ giveloadout( team, class ) pixendevent(); } -setweaponammooverall( weaponname, amount ) +setweaponammooverall( weaponname, amount ) //checked matches cerberus output { if ( isweaponcliponly( weaponname ) ) { @@ -914,14 +884,16 @@ setweaponammooverall( weaponname, amount ) { self setweaponammoclip( weaponname, amount ); diff = amount - self getweaponammoclip( weaponname ); + /* /# assert( diff >= 0 ); #/ + */ self setweaponammostock( weaponname, diff ); } } -onplayerconnecting() +onplayerconnecting() //checked matches cerberus output { for ( ;; ) { @@ -943,19 +915,19 @@ onplayerconnecting() } } -fadeaway( waitdelay, fadedelay ) +fadeaway( waitdelay, fadedelay ) //checked matches cerberus output { wait waitdelay; self fadeovertime( fadedelay ); self.alpha = 0; } -setclass( newclass ) +setclass( newclass ) //checked matches cerberus output { self.curclass = newclass; } -initperkdvars() +initperkdvars() //checked matches cerberus output { level.cac_armorpiercing_data = cac_get_dvar_int( "perk_armorpiercing", "40" ) / 100; level.cac_bulletdamage_data = cac_get_dvar_int( "perk_bulletDamage", "35" ); @@ -966,60 +938,51 @@ initperkdvars() level.cac_flakjacket_hardcore_data = cac_get_dvar_int( "perk_flakJacket_hardcore", "9" ); } -cac_selector() +cac_selector() //checked changed to match cerberus output { perks = self.specialty; self.detectexplosives = 0; - i = 0; - while ( i < perks.size ) + for ( i = 0; i < perks.size; i++ ) { perk = perks[ i ]; if ( perk == "specialty_detectexplosive" ) { self.detectexplosives = 1; } - i++; } } -register_perks() +register_perks() //checked changed at own discretion did not use continue in for loop see github for more info { perks = self.specialty; self clearperks(); - i = 0; - while ( i < perks.size ) + for ( i = 0; i < perks.size; i++ ) { perk = perks[ i ]; - if ( perk != "specialty_null" || issubstr( perk, "specialty_weapon_" ) && perk == "weapon_null" ) + if ( perk == "specialty_null" || issubstr( perk, "specialty_weapon_" ) || perk == "weapon_null" ) + { + } + else if ( !level.perksenabled ) { - i++; - continue; } else { - if ( !level.perksenabled ) - { - i++; - continue; - } - else - { - self setperk( perk ); - } + self setperk( perk ); } - i++; } + /* /# maps/mp/gametypes/_dev::giveextraperks(); #/ + */ } -cac_get_dvar_int( dvar, def ) +cac_get_dvar_int( dvar, def ) //checked matches cerberus output { return int( cac_get_dvar( dvar, def ) ); } -cac_get_dvar( dvar, def ) +cac_get_dvar( dvar, def ) //checked matches cerberus output { if ( getDvar( dvar ) != "" ) { @@ -1032,13 +995,13 @@ cac_get_dvar( dvar, def ) } } -cac_modified_vehicle_damage( victim, attacker, damage, meansofdeath, weapon, inflictor ) +cac_modified_vehicle_damage( victim, attacker, damage, meansofdeath, weapon, inflictor ) //checked changed to match cerberus output dvars obtained from beta dump { - if ( isDefined( victim ) || !isDefined( attacker ) && !isplayer( attacker ) ) + if ( !isDefined( victim ) || !isDefined( attacker ) || !isplayer( attacker ) ) { return damage; } - if ( isDefined( damage ) || !isDefined( meansofdeath ) && !isDefined( weapon ) ) + if ( !isDefined( damage ) || !isDefined( meansofdeath ) || !isDefined( weapon ) ) { return damage; } @@ -1047,41 +1010,45 @@ cac_modified_vehicle_damage( victim, attacker, damage, meansofdeath, weapon, inf if ( attacker hasperk( "specialty_bulletdamage" ) && isprimarydamage( meansofdeath ) ) { final_damage = ( damage * ( 100 + level.cac_bulletdamage_data ) ) / 100; + /* /# - if ( getDvarInt( #"5ABA6445" ) ) + if ( getDvarInt( "scr_perkdebug" ) ) { println( "Perk/> " + attacker.name + "'s bullet damage did extra damage to vehicle" ); #/ } + */ + } + else if ( attacker hasperk( "specialty_explosivedamage" ) && isplayerexplosiveweapon( weapon, meansofdeath ) ) + { + final_damage = ( damage * ( 100 + level.cac_explosivedamage_data ) ) / 100; + /* +/# + if ( getDvarInt( "scr_perkdebug" ) ) + { + println( "Perk/> " + attacker.name + "'s explosive damage did extra damage to vehicle" ); +#/ + } + */ } else { - if ( attacker hasperk( "specialty_explosivedamage" ) && isplayerexplosiveweapon( weapon, meansofdeath ) ) - { - final_damage = ( damage * ( 100 + level.cac_explosivedamage_data ) ) / 100; -/# - if ( getDvarInt( #"5ABA6445" ) ) - { - println( "Perk/> " + attacker.name + "'s explosive damage did extra damage to vehicle" ); -#/ - } - } - else - { - final_damage = old_damage; - } + final_damage = old_damage; } + /* /# - if ( getDvarInt( #"5ABA6445" ) ) + if ( getDvarInt( "scr_perkdebug" ) ) { println( "Perk/> Damage Factor: " + ( final_damage / old_damage ) + " - Pre Damage: " + old_damage + " - Post Damage: " + final_damage ); #/ } + */ return int( final_damage ); } -cac_modified_damage( victim, attacker, damage, mod, weapon, inflictor, hitloc ) +cac_modified_damage( victim, attacker, damage, mod, weapon, inflictor, hitloc ) //checked changed to match cerberus output certain order of operations changed to match beta dump { + /* /# assert( isDefined( victim ) ); #/ @@ -1091,6 +1058,7 @@ cac_modified_damage( victim, attacker, damage, mod, weapon, inflictor, hitloc ) /# assert( isplayer( victim ) ); #/ + */ if ( victim == attacker ) { return damage; @@ -1103,106 +1071,106 @@ cac_modified_damage( victim, attacker, damage, mod, weapon, inflictor, hitloc ) { return damage; } + /* /# debug = 0; - if ( getDvarInt( #"5ABA6445" ) ) + if ( getDvarInt( "scr_perkdebug" ) ) { debug = 1; #/ } + */ final_damage = damage; if ( attacker hasperk( "specialty_bulletdamage" ) && isprimarydamage( mod ) ) { if ( victim hasperk( "specialty_armorvest" ) && !isheaddamage( hitloc ) ) { + /* /# if ( debug ) { println( "Perk/> " + victim.name + "'s armor countered " + attacker.name + "'s increased bullet damage" ); #/ } + */ } else { - final_damage = ( damage * ( 100 + level.cac_bulletdamage_data ) ) / 100; + final_damage = damage * ( 100 + level.cac_bulletdamage_data ) / 100; + /* /# if ( debug ) { println( "Perk/> " + attacker.name + "'s bullet damage did extra damage to " + victim.name ); #/ } + */ } } - else + else if ( victim hasperk( "specialty_armorvest" ) && isprimarydamage( mod ) && !isheaddamage( hitloc ) ) { - if ( victim hasperk( "specialty_armorvest" ) && isprimarydamage( mod ) && !isheaddamage( hitloc ) ) - { - final_damage = damage * ( level.cac_armorvest_data * 0,01 ); + final_damage = damage * ( level.cac_armorvest_data * 0.01 ); + /* /# - if ( debug ) - { - println( "Perk/> " + attacker.name + "'s bullet damage did less damage to " + victim.name ); + if ( debug ) + { + println( "Perk/> " + attacker.name + "'s bullet damage did less damage to " + victim.name ); #/ - } + } + */ + } + else if ( victim hasperk( "specialty_fireproof" ) && isfiredamage( weapon, mod ) ) + { + final_damage = damage * ( ( 100 - level.cac_fireproof_data ) / 100 ); + /* +/# + if ( debug ) + { + println( "Perk/> " + attacker.name + "'s flames did less damage to " + victim.name ); +#/ + } + */ + } + else if ( attacker hasperk( "specialty_explosivedamage" ) && isplayerexplosiveweapon( weapon, mod ) ) + { + final_damage = damage * ( 100 + level.cac_explosivedamage_data ) / 100; + /* +/# + if ( debug ) + { + println( "Perk/> " + attacker.name + "'s explosive damage did extra damage to " + victim.name ); +#/ + } + */ + } + else if ( victim hasperk( "specialty_flakjacket" ) && isexplosivedamage( weapon, mod ) && !victim grenadestuck( inflictor ) ) + { + if ( level.hardcoremode ) + { } else { - if ( victim hasperk( "specialty_fireproof" ) && isfiredamage( weapon, mod ) ) - { - final_damage = damage * ( ( 100 - level.cac_fireproof_data ) / 100 ); -/# - if ( debug ) - { - println( "Perk/> " + attacker.name + "'s flames did less damage to " + victim.name ); -#/ - } - } - else - { - if ( attacker hasperk( "specialty_explosivedamage" ) && isplayerexplosiveweapon( weapon, mod ) ) - { - final_damage = ( damage * ( 100 + level.cac_explosivedamage_data ) ) / 100; -/# - if ( debug ) - { - println( "Perk/> " + attacker.name + "'s explosive damage did extra damage to " + victim.name ); -#/ - } - } - else - { - if ( victim hasperk( "specialty_flakjacket" ) && isexplosivedamage( weapon, mod ) && !victim grenadestuck( inflictor ) ) - { - if ( level.hardcoremode ) - { - } - else - { - } - cac_data = level.cac_flakjacket_data; - if ( level.teambased && attacker.team != victim.team ) - { - victim thread maps/mp/_challenges::flakjacketprotected( weapon, attacker ); - } - else - { - if ( attacker != victim ) - { - victim thread maps/mp/_challenges::flakjacketprotected( weapon, attacker ); - } - } - final_damage = int( damage * ( cac_data / 100 ) ); -/# - if ( debug ) - { - println( "Perk/> " + victim.name + "'s flak jacket decreased " + attacker.name + "'s grenade damage" ); -#/ - } - } - } - } } + cac_data = level.cac_flakjacket_data; + if ( level.teambased && attacker.team != victim.team ) + { + victim thread maps/mp/_challenges::flakjacketprotected( weapon, attacker ); + } + else if ( attacker != victim ) + { + victim thread maps/mp/_challenges::flakjacketprotected( weapon, attacker ); + } + final_damage = int( damage * ( cac_data / 100 ) ); + /* +/# + if ( debug ) + { + println( "Perk/> " + victim.name + "'s flak jacket decreased " + attacker.name + "'s grenade damage" ); +#/ + } + */ } + /* /# victim.cac_debug_damage_type = tolower( mod ); victim.cac_debug_original_damage = damage; @@ -1215,6 +1183,7 @@ cac_modified_damage( victim, attacker, damage, mod, weapon, inflictor, hitloc ) println( "Perk/> Damage Factor: " + ( final_damage / damage ) + " - Pre Damage: " + damage + " - Post Damage: " + final_damage ); #/ } + */ final_damage = int( final_damage ); if ( final_damage < 1 ) { @@ -1223,7 +1192,7 @@ cac_modified_damage( victim, attacker, damage, mod, weapon, inflictor, hitloc ) return final_damage; } -isexplosivedamage( weapon, meansofdeath ) +isexplosivedamage( weapon, meansofdeath ) //checked matches cerberus output { if ( isDefined( weapon ) ) { @@ -1250,25 +1219,39 @@ isexplosivedamage( weapon, meansofdeath ) return 0; } -hastacticalmask( player ) +hastacticalmask( player ) //checked changed at own discretion { - if ( !player hasperk( "specialty_stunprotection" ) && !player hasperk( "specialty_flashprotection" ) ) + if ( player hasperk( "specialty_stunprotection" ) || player hasperk( "specialty_flashprotection" ) || player hasperk( "specialty_proximityprotection" ) ) { - return player hasperk( "specialty_proximityprotection" ); + return 1; } + return 0; } -isprimarydamage( meansofdeath ) +isprimarydamage( meansofdeath ) //checked changed at own discretion { - if ( meansofdeath != "MOD_RIFLE_BULLET" ) + if ( meansofdeath != "MOD_RIFLE_BULLET" || meansofdeath == "MOD_PISTOL_BULLET" ) { - return meansofdeath == "MOD_PISTOL_BULLET"; + return 1; } + return 0; } -isfiredamage( weapon, meansofdeath ) +isfiredamage( weapon, meansofdeath ) //checked changed at own discretion { - if ( !issubstr( weapon, "flame" ) && !issubstr( weapon, "napalmblob_" ) && issubstr( weapon, "napalm_" ) && meansofdeath != "MOD_BURNED" || meansofdeath == "MOD_GRENADE" && meansofdeath == "MOD_GRENADE_SPLASH" ) + if ( ( meansofdeath == "MOD_BURNED" || meansofdeath == "MOD_GRENADE" ) && isSubStr( weapon, "napalm_" ) ) + { + return 1; + } + if ( isSubStr( weapon, "napalm_" ) && meansofdeath == "MOD_GRENADE_SPLASH" ) + { + return 1; + } + if ( ( isSubStr( weapon, "flame" ) || isSubStr( weapon, "napalmblob_" ) ) && ( meansofdeath == "MOD_BURNED" || meansofdeath == "MOD_GRENADE" ) ) + { + return 1; + } + if ( ( isSubStr( weapon, "flame" ) || isSubStr( weapon, "napalmblob_" ) ) && meansofdeath == "MOD_GRENADE_SPLASH" ) { return 1; } @@ -1279,7 +1262,7 @@ isfiredamage( weapon, meansofdeath ) return 0; } -isplayerexplosiveweapon( weapon, meansofdeath ) +isplayerexplosiveweapon( weapon, meansofdeath ) //checked matches cerberus output { if ( !isexplosivedamage( weapon, meansofdeath ) ) { @@ -1298,18 +1281,22 @@ isplayerexplosiveweapon( weapon, meansofdeath ) return 1; } -isheaddamage( hitloc ) +isheaddamage( hitloc ) //checked changed at own discretion { - if ( hitloc != "helmet" && hitloc != "head" ) + if ( hitloc == "helmet" && hitloc == "head" || hitloc == "neck" ) { - return hitloc == "neck"; + return 1; } + return 0; } -grenadestuck( inflictor ) +grenadestuck( inflictor ) //checked changed at own discretion { - if ( isDefined( inflictor ) && isDefined( inflictor.stucktoplayer ) ) + if ( isDefined( inflictor ) && isDefined( inflictor.stucktoplayer ) && inflictor.stucktoplayer == self ) { - return inflictor.stucktoplayer == self; + return 1; } + return 0; } + + diff --git a/patch_mp/maps/mp/gametypes/_globallogic_actor.gsc b/patch_mp/maps/mp/gametypes/_globallogic_actor.gsc index 700c908..ef4983d 100644 --- a/patch_mp/maps/mp/gametypes/_globallogic_actor.gsc +++ b/patch_mp/maps/mp/gametypes/_globallogic_actor.gsc @@ -1,3 +1,4 @@ +//checked includes match cerberus output #include maps/mp/_challenges; #include maps/mp/_scoreevents; #include maps/mp/gametypes/_damagefeedback; @@ -7,7 +8,7 @@ #include maps/mp/gametypes/_globallogic_player; #include maps/mp/_utility; -callback_actordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) +callback_actordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) //checked changed to match cerberus output { if ( game[ "state" ] == "postgame" ) { @@ -45,12 +46,9 @@ callback_actordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sw { return; } - else + else if ( smeansofdeath == "MOD_HEAD_SHOT" ) { - if ( smeansofdeath == "MOD_HEAD_SHOT" ) - { - idamage = 150; - } + idamage = 150; } } if ( smeansofdeath == "MOD_BURNED" ) @@ -70,12 +68,9 @@ callback_actordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sw { sweapon = "explodable_barrel_mp"; } - else + else if ( isDefined( einflictor.destructible_type ) && issubstr( einflictor.destructible_type, "vehicle_" ) ) { - if ( isDefined( einflictor.destructible_type ) && issubstr( einflictor.destructible_type, "vehicle_" ) ) - { - sweapon = "destructible_car_mp"; - } + sweapon = "destructible_car_mp"; } } if ( idflags & level.idflags_no_protection ) @@ -104,56 +99,55 @@ callback_actordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sw { return; } - else + else if ( level.friendlyfire == 3 ) { - if ( level.friendlyfire == 3 ) + idamage = int( idamage * 0,5 ); + if ( idamage < 1 ) { - idamage = int( idamage * 0,5 ); - if ( idamage < 1 ) - { - idamage = 1; - } - self.lastdamagewasfromenemy = 0; - self finishactordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); + idamage = 1; } + self.lastdamagewasfromenemy = 0; + self finishactordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); } friendly = 1; } + else if ( isDefined( eattacker ) && isDefined( self.script_owner ) && eattacker == self.script_owner && !level.hardcoremode ) + { + return; + } + if ( isDefined( eattacker ) && isDefined( self.script_owner ) && isDefined( eattacker.script_owner ) && eattacker.script_owner == self.script_owner ) + { + return; + } + if ( idamage < 1 ) + { + idamage = 1; + } + if ( isDefined( eattacker ) && isplayer( eattacker ) && isDefined( sweapon ) && !issubstr( smeansofdeath, "MOD_MELEE" ) ) + { + eattacker thread maps/mp/gametypes/_weapons::checkhit( sweapon ); + } + if ( issubstr( smeansofdeath, "MOD_GRENADE" ) && isDefined( einflictor ) && isDefined( einflictor.iscooked ) ) + { + self.wascooked = getTime(); + } else { - if ( isDefined( eattacker ) && isDefined( self.script_owner ) && eattacker == self.script_owner && !level.hardcoremode ) - { - return; - } - if ( isDefined( eattacker ) && isDefined( self.script_owner ) && isDefined( eattacker.script_owner ) && eattacker.script_owner == self.script_owner ) - { - return; - } - if ( idamage < 1 ) - { - idamage = 1; - } - if ( isDefined( eattacker ) && isplayer( eattacker ) && isDefined( sweapon ) && !issubstr( smeansofdeath, "MOD_MELEE" ) ) - { - eattacker thread maps/mp/gametypes/_weapons::checkhit( sweapon ); - } - if ( issubstr( smeansofdeath, "MOD_GRENADE" ) && isDefined( einflictor ) && isDefined( einflictor.iscooked ) ) - { - self.wascooked = getTime(); - } - else - { - self.wascooked = undefined; - } - if ( isDefined( eattacker ) ) - { - self.lastdamagewasfromenemy = eattacker != self; - } - self finishactordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); + self.wascooked = undefined; } if ( isDefined( eattacker ) && eattacker != self ) { - if ( sweapon != "artillery_mp" || !isDefined( einflictor ) && !isai( einflictor ) ) + self.lastdamagewasfromenemy = 1; + } + else + { + self.lastdamagewasfromenemy = 0; + } + self finishactordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); + } + if ( isDefined( eattacker ) && eattacker != self ) + { + if ( sweapon != "artillery_mp" && !isDefined( einflictor ) || !isai( einflictor ) ) { if ( idamage > 0 ) { @@ -162,12 +156,14 @@ callback_actordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sw } } } + /* /# if ( getDvarInt( "g_debugDamage" ) ) { println( "actor:" + self getentitynumber() + " health:" + self.health + " attacker:" + eattacker.clientid + " inflictor is player:" + isplayer( einflictor ) + " damage:" + idamage + " hitLoc:" + shitloc ); #/ } + */ if ( 1 ) { lpselfnum = self getentitynumber(); @@ -191,7 +187,7 @@ callback_actordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sw } } -callback_actorkilled( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime ) +callback_actorkilled( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime ) //checked matches cerberus output { if ( game[ "state" ] == "postgame" ) { @@ -219,3 +215,4 @@ callback_actorkilled( einflictor, attacker, idamage, smeansofdeath, sweapon, vdi } } } + diff --git a/patch_mp/maps/mp/gametypes/_globallogic_defaults.gsc b/patch_mp/maps/mp/gametypes/_globallogic_defaults.gsc index 7363578..1c66075 100644 --- a/patch_mp/maps/mp/gametypes/_globallogic_defaults.gsc +++ b/patch_mp/maps/mp/gametypes/_globallogic_defaults.gsc @@ -1,3 +1,4 @@ +//checked includes match cerberus output #include maps/mp/gametypes/_rank; #include maps/mp/killstreaks/_killstreaks; #include maps/mp/gametypes/_spawnlogic; @@ -8,23 +9,20 @@ #include maps/mp/_utility; #include common_scripts/utility; -getwinningteamfromloser( losing_team ) +getwinningteamfromloser( losing_team ) //checked changed to match cerberus output { if ( level.multiteam ) { return "tie"; } - else + else if ( losing_team == "axis" ) { - if ( losing_team == "axis" ) - { - return "allies"; - } + return "allies"; } return "axis"; } -default_onforfeit( team ) +default_onforfeit( team ) //checked matches cerberus output { level.gameforfeited = 1; level notify( "forfeit in progress" ); @@ -56,12 +54,14 @@ default_onforfeit( team ) } else { + /* /# assert( isDefined( team ), "Forfeited team is not defined" ); #/ /# assert( 0, "Forfeited team " + team + " is not allies or axis" ); #/ + */ winner = "tie"; } level.forcedend = 1; @@ -76,7 +76,7 @@ default_onforfeit( team ) thread maps/mp/gametypes/_globallogic::endgame( winner, endreason ); } -default_ondeadevent( team ) +default_ondeadevent( team ) //checked changed to match cerberus output { if ( isDefined( level.teams[ team ] ) ) { @@ -88,20 +88,23 @@ default_ondeadevent( team ) maps/mp/gametypes/_globallogic_utils::logteamwinstring( "team eliminated", winner ); thread maps/mp/gametypes/_globallogic::endgame( winner, eliminatedstring ); } - else makedvarserverinfo( "ui_text_endreason", game[ "strings" ][ "tie" ] ); - setdvar( "ui_text_endreason", game[ "strings" ][ "tie" ] ); - maps/mp/gametypes/_globallogic_utils::logteamwinstring( "tie" ); - if ( level.teambased ) + else { - thread maps/mp/gametypes/_globallogic::endgame( "tie", game[ "strings" ][ "tie" ] ); - } - else - { - thread maps/mp/gametypes/_globallogic::endgame( undefined, game[ "strings" ][ "tie" ] ); + makedvarserverinfo( "ui_text_endreason", game[ "strings" ][ "tie" ] ); + setdvar( "ui_text_endreason", game[ "strings" ][ "tie" ] ); + maps/mp/gametypes/_globallogic_utils::logteamwinstring( "tie" ); + if ( level.teambased ) + { + thread maps/mp/gametypes/_globallogic::endgame( "tie", game[ "strings" ][ "tie" ] ); + } + else + { + thread maps/mp/gametypes/_globallogic::endgame( undefined, game[ "strings" ][ "tie" ] ); + } } } -default_onlastteamaliveevent( team ) +default_onlastteamaliveevent( team ) //checked changed to match cerberus output { if ( isDefined( level.teams[ team ] ) ) { @@ -113,29 +116,32 @@ default_onlastteamaliveevent( team ) maps/mp/gametypes/_globallogic_utils::logteamwinstring( "team eliminated", winner ); thread maps/mp/gametypes/_globallogic::endgame( winner, eliminatedstring ); } - else makedvarserverinfo( "ui_text_endreason", game[ "strings" ][ "tie" ] ); - setdvar( "ui_text_endreason", game[ "strings" ][ "tie" ] ); - maps/mp/gametypes/_globallogic_utils::logteamwinstring( "tie" ); - if ( level.teambased ) + else { - thread maps/mp/gametypes/_globallogic::endgame( "tie", game[ "strings" ][ "tie" ] ); - } - else - { - thread maps/mp/gametypes/_globallogic::endgame( undefined, game[ "strings" ][ "tie" ] ); + makedvarserverinfo( "ui_text_endreason", game[ "strings" ][ "tie" ] ); + setdvar( "ui_text_endreason", game[ "strings" ][ "tie" ] ); + maps/mp/gametypes/_globallogic_utils::logteamwinstring( "tie" ); + if ( level.teambased ) + { + thread maps/mp/gametypes/_globallogic::endgame( "tie", game[ "strings" ][ "tie" ] ); + } + else + { + thread maps/mp/gametypes/_globallogic::endgame( undefined, game[ "strings" ][ "tie" ] ); + } } } -default_onalivecountchange( team ) +default_onalivecountchange( team ) //checked matches cerberus output { } -default_onroundendgame( winner ) +default_onroundendgame( winner ) //checked matches cerberus output { return winner; } -default_ononeleftevent( team ) +default_ononeleftevent( team ) //checked partially changed to match beta dump did not change while loop to for loop see github for more info { if ( !level.teambased ) { @@ -161,21 +167,18 @@ default_ononeleftevent( team ) index++; continue; } - else if ( !isDefined( player.pers[ "team" ] ) || player.pers[ "team" ] != team ) + if ( !isDefined( player.pers[ "team" ] ) || player.pers[ "team" ] != team ) { index++; continue; } - else - { - player maps/mp/gametypes/_globallogic_audio::leaderdialogonplayer( "sudden_death" ); - } + player maps/mp/gametypes/_globallogic_audio::leaderdialogonplayer( "sudden_death" ); index++; } } } -default_ontimelimit() +default_ontimelimit() //checked changed to match cerberus output { winner = undefined; if ( level.teambased ) @@ -183,21 +186,24 @@ default_ontimelimit() winner = maps/mp/gametypes/_globallogic::determineteamwinnerbygamestat( "teamScores" ); maps/mp/gametypes/_globallogic_utils::logteamwinstring( "time limit", winner ); } - else winner = maps/mp/gametypes/_globallogic_score::gethighestscoringplayer(); - if ( isDefined( winner ) ) + else { - logstring( "time limit, win: " + winner.name ); - } - else - { - logstring( "time limit, tie" ); + winner = maps/mp/gametypes/_globallogic_score::gethighestscoringplayer(); + if ( isDefined( winner ) ) + { + logstring( "time limit, win: " + winner.name ); + } + else + { + logstring( "time limit, tie" ); + } } makedvarserverinfo( "ui_text_endreason", game[ "strings" ][ "time_limit_reached" ] ); setdvar( "ui_text_endreason", game[ "strings" ][ "time_limit_reached" ] ); thread maps/mp/gametypes/_globallogic::endgame( winner, game[ "strings" ][ "time_limit_reached" ] ); } -default_onscorelimit() +default_onscorelimit() //checked changed to match cerberus output { if ( !level.endgameonscorelimit ) { @@ -209,14 +215,17 @@ default_onscorelimit() winner = maps/mp/gametypes/_globallogic::determineteamwinnerbygamestat( "teamScores" ); maps/mp/gametypes/_globallogic_utils::logteamwinstring( "scorelimit", winner ); } - else winner = maps/mp/gametypes/_globallogic_score::gethighestscoringplayer(); - if ( isDefined( winner ) ) + else { - logstring( "scorelimit, win: " + winner.name ); - } - else - { - logstring( "scorelimit, tie" ); + winner = maps/mp/gametypes/_globallogic_score::gethighestscoringplayer(); + if ( isDefined( winner ) ) + { + logstring( "scorelimit, win: " + winner.name ); + } + else + { + logstring( "scorelimit, tie" ); + } } makedvarserverinfo( "ui_text_endreason", game[ "strings" ][ "score_limit_reached" ] ); setdvar( "ui_text_endreason", game[ "strings" ][ "score_limit_reached" ] ); @@ -224,7 +233,7 @@ default_onscorelimit() return 1; } -default_onspawnspectator( origin, angles ) +default_onspawnspectator( origin, angles ) //checked matches cerberus output { if ( isDefined( origin ) && isDefined( angles ) ) { @@ -233,14 +242,16 @@ default_onspawnspectator( origin, angles ) } spawnpointname = "mp_global_intermission"; spawnpoints = getentarray( spawnpointname, "classname" ); + /* /# assert( spawnpoints.size, "There are no mp_global_intermission spawn points in the map. There must be at least one." ); #/ + */ spawnpoint = maps/mp/gametypes/_spawnlogic::getspawnpoint_random( spawnpoints ); self spawn( spawnpoint.origin, spawnpoint.angles ); } -default_onspawnintermission() +default_onspawnintermission() //checked matches cerberus output { spawnpointname = "mp_global_intermission"; spawnpoints = getentarray( spawnpointname, "classname" ); @@ -251,18 +262,20 @@ default_onspawnintermission() } else { + /* /# maps/mp/_utility::error( "NO " + spawnpointname + " SPAWNPOINTS IN MAP" ); #/ + */ } } -default_gettimelimit() +default_gettimelimit() //checked matches cerberus output { return clamp( getgametypesetting( "timeLimit" ), level.timelimitmin, level.timelimitmax ); } -default_getteamkillpenalty( einflictor, attacker, smeansofdeath, sweapon ) +default_getteamkillpenalty( einflictor, attacker, smeansofdeath, sweapon ) //checked matches cerberus output { teamkill_penalty = 1; score = maps/mp/gametypes/_globallogic_score::_getplayerscore( attacker ); @@ -277,7 +290,8 @@ default_getteamkillpenalty( einflictor, attacker, smeansofdeath, sweapon ) return teamkill_penalty; } -default_getteamkillscore( einflictor, attacker, smeansofdeath, sweapon ) +default_getteamkillscore( einflictor, attacker, smeansofdeath, sweapon ) //checked matches cerberus output { return maps/mp/gametypes/_rank::getscoreinfovalue( "team_kill" ); } + diff --git a/patch_mp/maps/mp/gametypes/_globallogic_ui.gsc b/patch_mp/maps/mp/gametypes/_globallogic_ui.gsc index 2aff74d..ccbe364 100644 --- a/patch_mp/maps/mp/gametypes/_globallogic_ui.gsc +++ b/patch_mp/maps/mp/gametypes/_globallogic_ui.gsc @@ -1,3 +1,4 @@ +//checked includes match cerberus output #include maps/mp/gametypes/_class; #include maps/mp/gametypes/_globallogic_player; #include maps/mp/gametypes/_spectating; @@ -10,7 +11,7 @@ #include common_scripts/utility; #include maps/mp/_utility; -init() +init() //checked matches cerberus output { precachestring( &"MP_HALFTIME" ); precachestring( &"MP_OVERTIME" ); @@ -37,7 +38,7 @@ init() } } -setupcallbacks() +setupcallbacks() //checked matches cerberus output { level.autoassign = ::menuautoassign; level.spectator = ::menuspectator; @@ -45,16 +46,16 @@ setupcallbacks() level.teammenu = ::menuteam; } -hideloadoutaftertime( delay ) +hideloadoutaftertime( delay ) //checked matches cerberus output { self endon( "disconnect" ); self endon( "perks_hidden" ); wait delay; - self thread hideallperks( 0,4 ); + self thread hideallperks( 0.4 ); self notify( "perks_hidden" ); } -hideloadoutondeath() +hideloadoutondeath() //checked matches cerberus output { self endon( "disconnect" ); self endon( "perks_hidden" ); @@ -63,7 +64,7 @@ hideloadoutondeath() self notify( "perks_hidden" ); } -hideloadoutonkill() +hideloadoutonkill() //checked matches cerberus output { self endon( "disconnect" ); self endon( "death" ); @@ -73,19 +74,17 @@ hideloadoutonkill() self notify( "perks_hidden" ); } -freegameplayhudelems() +freegameplayhudelems() //checked changed to match cerberus output { - while ( isDefined( self.perkicon ) ) + if ( isDefined( self.perkicon ) ) { - numspecialties = 0; - while ( numspecialties < level.maxspecialties ) + for ( numspecialties = 0; numspecialties < level.maxspecialties; numspecialties++ ) { if ( isDefined( self.perkicon[ numspecialties ] ) ) { self.perkicon[ numspecialties ] destroyelem(); self.perkname[ numspecialties ] destroyelem(); } - numspecialties++; } } if ( isDefined( self.perkhudelem ) ) @@ -139,14 +138,11 @@ freegameplayhudelems() maps/mp/killstreaks/_killstreaks::destroykillstreaktimers(); } -teamplayercountsequal( playercounts ) +teamplayercountsequal( playercounts ) //checked partially changed to match cerberus output did not use continue see github for more info { count = undefined; - _a146 = level.teams; - _k146 = getFirstArrayKey( _a146 ); - while ( isDefined( _k146 ) ) + foreach ( team in level.teams ) { - team = _a146[ _k146 ]; if ( !isDefined( count ) ) { count = playercounts[ team ]; @@ -158,31 +154,26 @@ teamplayercountsequal( playercounts ) return 0; } } - _k146 = getNextArrayKey( _a146, _k146 ); } return 1; } -teamwithlowestplayercount( playercounts, ignore_team ) +teamwithlowestplayercount( playercounts, ignore_team ) //checked changed to match cerberus output { count = 9999; lowest_team = undefined; - _a165 = level.teams; - _k165 = getFirstArrayKey( _a165 ); - while ( isDefined( _k165 ) ) + foreach ( team in level.teams ) { - team = _a165[ _k165 ]; if ( count > playercounts[ team ] ) { count = playercounts[ team ]; lowest_team = team; } - _k165 = getNextArrayKey( _a165, _k165 ); } return lowest_team; } -menuautoassign( comingfrommenu ) +menuautoassign( comingfrommenu ) //checked changed to match cerberus output { teamkeys = getarraykeys( level.teams ); assignment = teamkeys[ randomint( teamkeys.size ) ]; @@ -191,80 +182,78 @@ menuautoassign( comingfrommenu ) { assignment = "allies"; } - else + else if ( level.teambased ) { - if ( level.teambased ) + if ( getDvarInt( "party_autoteams" ) == 1 ) { - if ( getDvarInt( "party_autoteams" ) == 1 ) + if ( level.allow_teamchange == "1" || self.hasspawned && comingfrommenu ) { - if ( level.allow_teamchange == "1" || self.hasspawned && comingfrommenu ) - { - assignment = ""; + assignment = ""; + } + } + else + { + team = getassignedteam( self ); + switch( team ) + { + case 1: + assignment = teamkeys[ 1 ]; break; - } - else - { - team = getassignedteam( self ); - switch( team ) - { - case 1: - assignment = teamkeys[ 1 ]; - break; - case 2: - assignment = teamkeys[ 0 ]; - break; - case 3: - assignment = teamkeys[ 2 ]; - break; - case 4: - if ( !isDefined( level.forceautoassign ) || !level.forceautoassign ) - { - self setclientscriptmainmenu( game[ "menu_class" ] ); - return; - } - default: - assignment = ""; - if ( isDefined( level.teams[ team ] ) ) - { - assignment = team; - } - else - { - if ( team == "spectator" && !level.forceautoassign ) - { - self setclientscriptmainmenu( game[ "menu_class" ] ); - return; - } - } + case 2: + assignment = teamkeys[ 0 ]; + break; + case 3: + assignment = teamkeys[ 2 ]; + break; + case 4: + if ( !isDefined( level.forceautoassign ) || !level.forceautoassign ) + { + self setclientscriptmainmenu( game[ "menu_class" ] ); + return; + } + default: + assignment = ""; + if ( isDefined( level.teams[ team ] ) ) + { + assignment = team; + } + else if ( team == "spectator" && !level.forceautoassign ) + { + self setclientscriptmainmenu( game[ "menu_class" ] ); + return; } - } } - if ( assignment == "" || getDvarInt( "party_autoteams" ) == 0 ) + } + if ( assignment == "" || getDvarInt( "party_autoteams" ) == 0 ) + { + if ( sessionmodeiszombiesgame() ) { - if ( sessionmodeiszombiesgame() ) - { - assignment = "allies"; - } - else if ( maps/mp/bots/_bot::is_bot_comp_stomp() ) - { - host = gethostplayerforbots(); + assignment = "allies"; + } + else if ( maps/mp/bots/_bot::is_bot_comp_stomp() ) + { + host = gethostplayerforbots(); + /* /# - assert( isDefined( host ) ); + assert( isDefined( host ) ); #/ - if ( !isDefined( host.team ) || host.team == "spectator" ) - { - host.team = random( teamkeys ); - } - if ( !self is_bot() ) - { - assignment = host.team; - } - else - { - assignment = getotherteam( host.team ); - } + */ + if ( !isDefined( host.team ) || host.team == "spectator" ) + { + host.team = random( teamkeys ); } - else playercounts = self maps/mp/teams/_teams::countplayers(); + if ( !self is_bot() ) + { + assignment = host.team; + } + else + { + assignment = getotherteam( host.team ); + } + } + else + { + playercounts = self maps/mp/teams/_teams::countplayers(); if ( teamplayercountsequal( playercounts ) ) { if ( !level.splitscreen && self issplitscreen() ) @@ -285,33 +274,30 @@ menuautoassign( comingfrommenu ) assignment = teamwithlowestplayercount( playercounts, "none" ); } } - if ( assignment == self.pers[ "team" ] || self.sessionstate == "playing" && self.sessionstate == "dead" ) + } + if ( assignment == self.pers[ "team" ] && self.sessionstate == "playing" || self.sessionstate == "dead" ) + { + self beginclasschoice(); + return; + } + } + else if ( getDvarInt( "party_autoteams" ) == 1 ) + { + if ( level.allow_teamchange != "1" || !self.hasspawned && !comingfrommenu ) + { + team = getassignedteam( self ); + if ( isDefined( level.teams[ team ] ) ) { - self beginclasschoice(); + assignment = team; + } + else if ( team == "spectator" && !level.forceautoassign ) + { + self setclientscriptmainmenu( game[ "menu_class" ] ); return; } } - else if ( getDvarInt( "party_autoteams" ) == 1 ) - { - if ( level.allow_teamchange != "1" || !self.hasspawned && !comingfrommenu ) - { - team = getassignedteam( self ); - if ( isDefined( level.teams[ team ] ) ) - { - assignment = team; - } - else - { - if ( team == "spectator" && !level.forceautoassign ) - { - self setclientscriptmainmenu( game[ "menu_class" ] ); - return; - } - } - } - } } - if ( assignment != self.pers[ "team" ] || self.sessionstate == "playing" && self.sessionstate == "dead" ) + if ( assignment != self.pers[ "team" ] && self.sessionstate == "playing" || self.sessionstate == "dead" ) { self.switching_teams = 1; self.joining_team = assignment; @@ -320,7 +306,10 @@ menuautoassign( comingfrommenu ) } self.pers[ "team" ] = assignment; self.team = assignment; + self.pers["class"] = undefined; self.class = undefined; + self.pers["weapon"] = undefined; + self.pers["savedmodel"] = undefined; self updateobjectivetext(); if ( level.teambased ) { @@ -367,14 +356,11 @@ menuautoassign( comingfrommenu ) self setclientscriptmainmenu( game[ "menu_class" ] ); } -teamscoresequal() +teamscoresequal() //checked partially changed to match cerberus output did not use continue in foreach see github for more info { score = undefined; - _a397 = level.teams; - _k397 = getFirstArrayKey( _a397 ); - while ( isDefined( _k397 ) ) + foreach ( team in level.teams ) { - team = _a397[ _k397 ]; if ( !isDefined( score ) ) { score = getteamscore( team ); @@ -386,7 +372,6 @@ teamscoresequal() return 0; } } - _k397 = getNextArrayKey( _a397, _k397 ); } return 1; } @@ -395,21 +380,17 @@ teamwithlowestscore() { score = 99999999; lowest_team = undefined; - _a416 = level.teams; - _k416 = getFirstArrayKey( _a416 ); - while ( isDefined( _k416 ) ) + foreach ( team in level.teams ) { - team = _a416[ _k416 ]; if ( score > getteamscore( team ) ) { lowest_team = team; } - _k416 = getNextArrayKey( _a416, _k416 ); } return lowest_team; } -pickteamfromscores( teams ) +pickteamfromscores( teams ) //checked matches cerberus output { assignment = "allies"; if ( teamscoresequal() ) @@ -423,7 +404,7 @@ pickteamfromscores( teams ) return assignment; } -getsplitscreenteam() +getsplitscreenteam() //checked partially changed to match cerberus output did not use for loop see github for more info { index = 0; while ( index < level.players.size ) @@ -433,30 +414,27 @@ getsplitscreenteam() index++; continue; } - else if ( level.players[ index ] == self ) + if ( level.players[ index ] == self ) { index++; continue; } - else if ( !self isplayeronsamemachine( level.players[ index ] ) ) + if ( !self isplayeronsamemachine( level.players[ index ] ) ) { index++; continue; } - else + team = level.players[ index ].sessionteam; + if ( team != "spectator" ) { - team = level.players[ index ].sessionteam; - if ( team != "spectator" ) - { - return team; - } + return team; } index++; } return ""; } -updateobjectivetext() +updateobjectivetext() //checked matches cerberus output { if ( sessionmodeiszombiesgame() || self.pers[ "team" ] == "spectator" ) { @@ -473,17 +451,19 @@ updateobjectivetext() } } -closemenus() +closemenus() //checked matches cerberus output { self closemenu(); self closeingamemenu(); } -beginclasschoice( forcenewchoice ) +beginclasschoice( forcenewchoice ) //checked matches cerberus output { + /* /# assert( isDefined( level.teams[ self.pers[ "team" ] ] ) ); #/ + */ team = self.pers[ "team" ]; if ( level.disableclassselection == 1 || getDvarInt( "migration_soak" ) == 1 ) { @@ -511,11 +491,13 @@ beginclasschoice( forcenewchoice ) } } -showmainmenuforteam() +showmainmenuforteam() //checked matches cerberus output { + /* /# assert( isDefined( level.teams[ self.pers[ "team" ] ] ) ); #/ + */ team = self.pers[ "team" ]; if ( level.wagermatch ) { @@ -527,7 +509,7 @@ showmainmenuforteam() } } -menuteam( team ) +menuteam( team ) //checked changed to match cerberus output { self closemenus(); if ( !level.console && level.allow_teamchange == "0" && isDefined( self.hasdonecombat ) && self.hasdonecombat ) @@ -549,7 +531,10 @@ menuteam( team ) } self.pers[ "team" ] = team; self.team = team; + self.pers[ "class" ] = undefined; self.class = undefined; + self.pers[ "weapon" ] = undefined; + self.pers[ "savedmodel" ] = undefined; self updateobjectivetext(); if ( !level.rankedmatch && !level.leaguematch ) { @@ -572,7 +557,7 @@ menuteam( team ) self beginclasschoice(); } -menuspectator() +menuspectator() //checked changed to match cerberus output { self closemenus(); if ( self.pers[ "team" ] != "spectator" ) @@ -586,7 +571,10 @@ menuspectator() } self.pers[ "team" ] = "spectator"; self.team = "spectator"; + self.pers[ "class" ] = undefined; self.class = undefined; + self.pers[ "weapon" ] = undefined; + self.pers[ "savedmodel" ] = undefined; self updateobjectivetext(); self.sessionteam = "spectator"; if ( !level.teambased ) @@ -600,7 +588,7 @@ menuspectator() } } -menuclass( response ) +menuclass( response ) //checked changed to match cerberus output { self closemenus(); if ( !isDefined( self.pers[ "team" ] ) || !isDefined( level.teams[ self.pers[ "team" ] ] ) ) @@ -635,7 +623,7 @@ menuclass( response ) supplystationclasschange = self.usingsupplystation; } self.usingsupplystation = 0; - if ( level.ingraceperiod || !self.hasdonecombat && supplystationclasschange ) + if ( level.ingraceperiod && !self.hasdonecombat || supplystationclasschange ) { self maps/mp/gametypes/_class::setclass( self.pers[ "class" ] ); self.tag_stowed_back = undefined; @@ -643,18 +631,16 @@ menuclass( response ) self maps/mp/gametypes/_class::giveloadout( self.pers[ "team" ], self.pers[ "class" ] ); self maps/mp/killstreaks/_killstreaks::giveownedkillstreak(); } - else + else if ( !self issplitscreen() ) { - if ( !self issplitscreen() ) - { - self iprintlnbold( game[ "strings" ][ "change_class" ] ); - } + self iprintlnbold( game[ "strings" ][ "change_class" ] ); } } else { self.pers[ "class" ] = class; self.class = class; + self.pers[ "weapon" ] = undefined; if ( game[ "state" ] == "postgame" ) { return; @@ -689,7 +675,7 @@ menuclass( response ) self thread maps/mp/gametypes/_spectating::setspectatepermissionsformachine(); } -removespawnmessageshortly( delay ) +removespawnmessageshortly( delay ) //checked matches cerberus output { self endon( "disconnect" ); waittillframeend; @@ -697,3 +683,4 @@ removespawnmessageshortly( delay ) wait delay; self clearlowermessage( 2 ); } + diff --git a/patch_mp/maps/mp/gametypes/_globallogic_utils.gsc b/patch_mp/maps/mp/gametypes/_globallogic_utils.gsc index 7e172c9..2d929c2 100644 --- a/patch_mp/maps/mp/gametypes/_globallogic_utils.gsc +++ b/patch_mp/maps/mp/gametypes/_globallogic_utils.gsc @@ -1,19 +1,20 @@ +//checked includes match cerberus output #include maps/mp/gametypes/_globallogic_score; #include maps/mp/gametypes/_hostmigration; #include maps/mp/killstreaks/_killstreaks; #include maps/mp/gametypes/_hud_message; #include maps/mp/_utility; -waittillslowprocessallowed() +waittillslowprocessallowed() //checked matches cerberus output { while ( level.lastslowprocessframe == getTime() ) { - wait 0,05; + wait 0.05; } level.lastslowprocessframe = getTime(); } -testmenu() +testmenu() //checked matches cerberus output { self endon( "death" ); self endon( "disconnect" ); @@ -28,7 +29,7 @@ testmenu() } } -testshock() +testshock() //checked changed to match cerberus output { self endon( "death" ); self endon( "disconnect" ); @@ -36,18 +37,16 @@ testshock() { wait 3; numshots = randomint( 6 ); - i = 0; - while ( i < numshots ) + for ( i = 0; i < numshots; i++ ) { iprintlnbold( numshots ); self shellshock( "frag_grenade_mp", 0,2 ); - wait 0,1; - i++; + wait 0.1; } } } -testhps() +testhps() //checked matches cerberus output { self endon( "death" ); self endon( "disconnect" ); @@ -66,7 +65,7 @@ testhps() } } -timeuntilroundend() +timeuntilroundend() //checked matches cerberus output { if ( level.gameended ) { @@ -95,12 +94,12 @@ timeuntilroundend() return timeremaining + level.postroundtime; } -gettimeremaining() +gettimeremaining() //checked matches cerberus output { return ( ( level.timelimit * 60 ) * 1000 ) - gettimepassed(); } -registerpostroundevent( eventfunc ) +registerpostroundevent( eventfunc ) //checked matches cerberus output { if ( !isDefined( level.postroundevents ) ) { @@ -109,98 +108,86 @@ registerpostroundevent( eventfunc ) level.postroundevents[ level.postroundevents.size ] = eventfunc; } -executepostroundevents() +executepostroundevents() //checked changed to match cerberus output { if ( !isDefined( level.postroundevents ) ) { return; } - i = 0; - while ( i < level.postroundevents.size ) + for ( i = 0; i < level.postroundevents.size; i++ ) { [[ level.postroundevents[ i ] ]](); - i++; } } -getvalueinrange( value, minvalue, maxvalue ) +getvalueinrange( value, minvalue, maxvalue ) //checked changed to match cerberus output { if ( value > maxvalue ) { return maxvalue; } + else if ( value < minvalue ) + { + return minvalue; + } else { - if ( value < minvalue ) - { - return minvalue; - } - else - { - return value; - } + return value; } } -assertproperplacement() +assertproperplacement() //checked partially changed to match cerberus output changed at own discretion { + /* /# numplayers = level.placement[ "all" ].size; if ( level.teambased ) { - i = 0; - while ( i < ( numplayers - 1 ) ) + for ( i = 0; i < numplayers - 1; i++ ) { if ( level.placement[ "all" ][ i ].score < level.placement[ "all" ][ i + 1 ].score ) { println( "^1Placement array:" ); - i = 0; - while ( i < numplayers ) + for ( i = 0; i < numplayers; i++ ) { player = level.placement[ "all" ][ i ]; println( "^1" + i + ". " + player.name + ": " + player.score ); - i++; } assertmsg( "Placement array was not properly sorted" ); break; } - else - { - i++; - } } } - else i = 0; - while ( i < ( numplayers - 1 ) ) + else { - if ( level.placement[ "all" ][ i ].pointstowin < level.placement[ "all" ][ i + 1 ].pointstowin ) + for ( i = 0; i < numplayers - 1; i++ ) { - println( "^1Placement array:" ); - i = 0; - while ( i < numplayers ) + if ( level.placement[ "all" ][ i ].pointstowin < level.placement[ "all" ][ i + 1 ].pointstowin ) { - player = level.placement[ "all" ][ i ]; - println( "^1" + i + ". " + player.name + ": " + player.pointstowin ); - i++; + println( "^1Placement array:" ); + for ( i = 0; i < numplayers; i++ ) + { + player = level.placement[ "all" ][ i ]; + println( "^1" + i + ". " + player.name + ": " + player.pointstowin ); + } + assertmsg( "Placement array was not properly sorted" ); + break; } - assertmsg( "Placement array was not properly sorted" ); - return; - } - else - { - i++; -#/ } } +#/ + */ } -isvalidclass( class ) +isvalidclass( class ) //checked matches cerberus output { if ( level.oldschool || sessionmodeiszombiesgame() ) { + /* /# assert( !isDefined( class ) ); #/ + */ return 1; } if ( isDefined( class ) ) @@ -209,7 +196,7 @@ isvalidclass( class ) } } -playtickingsound( gametype_tick_sound ) +playtickingsound( gametype_tick_sound ) //checked matches cerberus output { self endon( "death" ); self endon( "stop_ticking" ); @@ -226,28 +213,28 @@ playtickingsound( gametype_tick_sound ) else if ( time > 4 ) { time -= 0,5; - wait 0,5; + wait 0.5; } else if ( time > 1 ) { time -= 0,4; - wait 0,4; + wait 0.4; } else { time -= 0,3; - wait 0,3; + wait 0.3; } maps/mp/gametypes/_hostmigration::waittillhostmigrationdone(); } } -stoptickingsound() +stoptickingsound() //checked matches cerberus output { self notify( "stop_ticking" ); } -gametimer() +gametimer() //checked changed to match cerberus output { level endon( "game_ended" ); level waittill( "prematch_over" ); @@ -256,6 +243,7 @@ gametimer() if ( isDefined( game[ "roundMillisecondsAlreadyPassed" ] ) ) { level.starttime -= game[ "roundMillisecondsAlreadyPassed" ]; + game["roundMillisecondsAlreadyPassed"] = undefined; } prevtime = getTime(); while ( game[ "state" ] == "playing" ) @@ -269,7 +257,7 @@ gametimer() } } -gettimepassed() +gettimepassed() //checked matches cerberus output { if ( !isDefined( level.starttime ) ) { @@ -285,7 +273,7 @@ gettimepassed() } } -pausetimer() +pausetimer() //checked matches cerberus output { if ( level.timerstopped ) { @@ -295,7 +283,7 @@ pausetimer() level.timerpausetime = getTime(); } -resumetimer() +resumetimer() //checked matches cerberus output { if ( !level.timerstopped ) { @@ -305,14 +293,16 @@ resumetimer() level.discardtime += getTime() - level.timerpausetime; } -getscoreremaining( team ) +getscoreremaining( team ) //checked matches cerberus output { + /* /# if ( !isplayer( self ) ) { assert( isDefined( team ) ); } #/ + */ scorelimit = level.scorelimit; if ( isplayer( self ) ) { @@ -324,7 +314,7 @@ getscoreremaining( team ) } } -getteamscoreforround( team ) +getteamscoreforround( team ) //checked matches cerberus output { if ( level.roundscorecarry && isDefined( game[ "lastroundscore" ][ team ] ) ) { @@ -333,17 +323,19 @@ getteamscoreforround( team ) return getteamscore( team ); } -getscoreperminute( team ) +getscoreperminute( team ) //checked matches cerberus output { + /* /# if ( !isplayer( self ) ) { assert( isDefined( team ) ); } #/ + */ scorelimit = level.scorelimit; timelimit = level.timelimit; - minutespassed = ( gettimepassed() / 60000 ) + 0,0001; + minutespassed = ( gettimepassed() / 60000 ) + 0.0001; if ( isplayer( self ) ) { return maps/mp/gametypes/_globallogic_score::_getplayerscore( self ) / minutespassed; @@ -354,14 +346,16 @@ getscoreperminute( team ) } } -getestimatedtimeuntilscorelimit( team ) +getestimatedtimeuntilscorelimit( team ) //checked matches cerberus output { + /* /# if ( !isplayer( self ) ) { assert( isDefined( team ) ); } #/ + */ scoreperminute = self getscoreperminute( team ); scoreremaining = self getscoreremaining( team ); if ( !scoreperminute ) @@ -371,36 +365,38 @@ getestimatedtimeuntilscorelimit( team ) return scoreremaining / scoreperminute; } -rumbler() +rumbler() //checked matches cerberus output { self endon( "disconnect" ); while ( 1 ) { - wait 0,1; + wait 0.1; self playrumbleonentity( "damage_heavy" ); } } -waitfortimeornotify( time, notifyname ) +waitfortimeornotify( time, notifyname ) //checked matches cerberus output { self endon( notifyname ); wait time; } -waitfortimeornotifynoartillery( time, notifyname ) +waitfortimeornotifynoartillery( time, notifyname ) //checked matches cerberus output { self endon( notifyname ); wait time; while ( isDefined( level.artilleryinprogress ) ) { + /* /# assert( level.artilleryinprogress ); #/ - wait 0,25; + */ + wait 0.25; } } -isheadshot( sweapon, shitloc, smeansofdeath, einflictor ) +isheadshot( sweapon, shitloc, smeansofdeath, einflictor ) //checked changed to match cerberus output { if ( shitloc != "head" && shitloc != "helmet" ) { @@ -419,7 +415,7 @@ isheadshot( sweapon, shitloc, smeansofdeath, einflictor ) } if ( maps/mp/killstreaks/_killstreaks::iskillstreakweapon( sweapon ) ) { - if ( isDefined( einflictor ) || !isDefined( einflictor.controlled ) && einflictor.controlled == 0 ) + if ( isDefined( einflictor ) || !isDefined( einflictor.controlled ) || einflictor.controlled == 0 ) { return 0; } @@ -427,7 +423,7 @@ isheadshot( sweapon, shitloc, smeansofdeath, einflictor ) return 1; } -gethitlocheight( shitloc ) +gethitlocheight( shitloc ) //checked matches cerberus output { switch( shitloc ) { @@ -459,34 +455,32 @@ gethitlocheight( shitloc ) return 48; } -debugline( start, end ) +debugline( start, end ) //checked changed to match cerberus output { + /* /# - i = 0; - while ( i < 50 ) + for ( i = 0; i < 50; i++ ) { line( start, end ); - wait 0,05; - i++; + wait 0.05; #/ } + */ } -isexcluded( entity, entitylist ) +isexcluded( entity, entitylist ) //checked changed to match cerberus output { - index = 0; - while ( index < entitylist.size ) + for ( index = 0; index < entitylist.size; index++ ) { if ( entity == entitylist[ index ] ) { return 1; } - index++; } return 0; } -waitfortimeornotifies( desireddelay ) +waitfortimeornotifies( desireddelay ) //checked matches cerberus output { startedwaiting = getTime(); waitedtime = ( getTime() - startedwaiting ) / 1000; @@ -501,20 +495,17 @@ waitfortimeornotifies( desireddelay ) } } -logteamwinstring( wintype, winner ) +logteamwinstring( wintype, winner ) //checked changed to match cerberus output { log_string = wintype; if ( isDefined( winner ) ) { log_string = ( log_string + ", win: " ) + winner; } - _a495 = level.teams; - _k495 = getFirstArrayKey( _a495 ); - while ( isDefined( _k495 ) ) + foreach ( team in level.teams ) { - team = _a495[ _k495 ]; log_string = ( log_string + ", " ) + team + ": " + game[ "teamScores" ][ team ]; - _k495 = getNextArrayKey( _a495, _k495 ); } logstring( log_string ); } + diff --git a/patch_mp/maps/mp/gametypes/_globallogic_vehicle.gsc b/patch_mp/maps/mp/gametypes/_globallogic_vehicle.gsc index 46a7a9f..c4a14cc 100644 --- a/patch_mp/maps/mp/gametypes/_globallogic_vehicle.gsc +++ b/patch_mp/maps/mp/gametypes/_globallogic_vehicle.gsc @@ -1,3 +1,4 @@ +//checked includes match cerberus output #include maps/mp/gametypes/_damagefeedback; #include maps/mp/gametypes/_globallogic_player; #include maps/mp/gametypes/_weapons; @@ -5,7 +6,7 @@ #include maps/mp/gametypes/_class; #include maps/mp/_utility; -callback_vehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname ) +callback_vehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname ) //checked partially changed to match cerberus output partially changed to match beta dump //changed at own discretion { if ( level.idflags_radius & idflags ) { @@ -38,12 +39,9 @@ callback_vehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, { sweapon = "explodable_barrel_mp"; } - else + else if ( isDefined( einflictor.destructible_type ) && issubstr( einflictor.destructible_type, "vehicle_" ) ) { - if ( isDefined( einflictor.destructible_type ) && issubstr( einflictor.destructible_type, "vehicle_" ) ) - { - sweapon = "destructible_car_mp"; - } + sweapon = "destructible_car_mp"; } } if ( idflags & level.idflags_no_protection ) @@ -55,28 +53,22 @@ callback_vehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, if ( smeansofdeath == "MOD_PISTOL_BULLET" || smeansofdeath == "MOD_RIFLE_BULLET" ) { } - else + else if ( smeansofdeath == "MOD_PROJECTILE" || smeansofdeath == "MOD_GRENADE" ) { - if ( smeansofdeath == "MOD_PROJECTILE" || smeansofdeath == "MOD_GRENADE" ) + idamage *= getvehicleprojectilescalar( sweapon ); + idamage = int( idamage ); + if ( idamage == 0 ) { - idamage *= getvehicleprojectilescalar( sweapon ); - idamage = int( idamage ); - if ( idamage == 0 ) - { - return; - } + return; } - else + } + else if ( smeansofdeath == "MOD_GRENADE_SPLASH" ) + { + idamage *= getvehicleunderneathsplashscalar( sweapon ); + idamage = int( idamage ); + if ( idamage == 0 ) { - if ( smeansofdeath == "MOD_GRENADE_SPLASH" ) - { - idamage *= getvehicleunderneathsplashscalar( sweapon ); - idamage = int( idamage ); - if ( idamage == 0 ) - { - return; - } - } + return; } } idamage *= level.vehicledamagescalar; @@ -131,18 +123,15 @@ callback_vehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, self.lastdamagewasfromenemy = 0; self finishvehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname, 1 ); } - else + else if ( level.friendlyfire == 3 ) { - if ( level.friendlyfire == 3 ) + idamage = int( idamage * 0,5 ); + if ( idamage < 1 ) { - idamage = int( idamage * 0,5 ); - if ( idamage < 1 ) - { - idamage = 1; - } - self.lastdamagewasfromenemy = 0; - self finishvehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname, 0 ); + idamage = 1; } + self.lastdamagewasfromenemy = 0; + self finishvehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname, 0 ); } friendly = 1; } @@ -152,48 +141,46 @@ callback_vehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, { return; } + else if ( !level.teambased && isDefined( self.targetname ) && self.targetname == "rcbomb" ) + { + } + else if ( isDefined( self.owner ) && isDefined( eattacker ) && self.owner == eattacker ) + { + return; + } + if ( idamage < 1 ) + { + idamage = 1; + } + if ( isDefined( eattacker ) && isplayer( eattacker ) && isDefined( sweapon ) ) + { + eattacker thread maps/mp/gametypes/_weapons::checkhit( sweapon ); + } + if ( issubstr( smeansofdeath, "MOD_GRENADE" ) && isDefined( einflictor.iscooked ) ) + { + self.wascooked = getTime(); + } else { - if ( !level.teambased && isDefined( self.targetname ) && self.targetname == "rcbomb" ) - { - } - else - { - if ( isDefined( self.owner ) && isDefined( eattacker ) && self.owner == eattacker ) - { - return; - } - } - if ( idamage < 1 ) - { - idamage = 1; - } - if ( isDefined( eattacker ) && isplayer( eattacker ) && isDefined( sweapon ) ) - { - eattacker thread maps/mp/gametypes/_weapons::checkhit( sweapon ); - } - if ( issubstr( smeansofdeath, "MOD_GRENADE" ) && isDefined( einflictor.iscooked ) ) - { - self.wascooked = getTime(); - } - else - { - self.wascooked = undefined; - } - attacker_seat = undefined; - if ( isDefined( eattacker ) ) - { - attacker_seat = self getoccupantseat( eattacker ); - } - if ( isDefined( eattacker ) ) - { - self.lastdamagewasfromenemy = !isDefined( attacker_seat ); - } - self finishvehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname, 0 ); - if ( level.gametype == "hack" && sweapon != "emp_grenade_mp" ) - { - idamage = 0; - } + self.wascooked = undefined; + } + attacker_seat = undefined; + if ( isDefined( eattacker ) ) + { + attacker_seat = self getoccupantseat( eattacker ); + } + if ( isDefined( eattacker ) && !isDefined( attacker_seat ) ) + { + self.lastdamagewasfromenemy = 1; + } + else + { + self.lastdamagewasfromenemy = 0; + } + self finishvehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname, 0 ); + if ( level.gametype == "hack" && sweapon != "emp_grenade_mp" ) + { + idamage = 0; } } if ( isDefined( eattacker ) && eattacker != self ) @@ -207,12 +194,14 @@ callback_vehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, } } } + /* /# if ( getDvarInt( "g_debugDamage" ) ) { println( "actor:" + self getentitynumber() + " health:" + self.health + " attacker:" + eattacker.clientid + " inflictor is player:" + isplayer( einflictor ) + " damage:" + idamage + " hitLoc:" + shitloc ); #/ } + */ if ( 1 ) { lpselfnum = self getentitynumber(); @@ -236,7 +225,7 @@ callback_vehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, } } -callback_vehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, psoffsettime ) +callback_vehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, psoffsettime ) //checked changed to match beta dump { idamage = maps/mp/gametypes/_class::cac_modified_vehicle_damage( self, eattacker, idamage, smeansofdeath, sweapon, einflictor ); finnerdamage = maps/mp/gametypes/_class::cac_modified_vehicle_damage( self, eattacker, finnerdamage, smeansofdeath, sweapon, einflictor ); @@ -252,13 +241,13 @@ callback_vehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fout return; } friendly = 0; - if ( idflags & level.idflags_no_protection ) + if ( !idflags & !level.idflags_no_protection ) { if ( self isvehicleimmunetodamage( idflags, smeansofdeath, sweapon ) ) { return; } - if ( smeansofdeath != "MOD_PROJECTILE_SPLASH" || smeansofdeath == "MOD_GRENADE_SPLASH" && smeansofdeath == "MOD_EXPLOSIVE" ) + if ( smeansofdeath == "MOD_PROJECTILE_SPLASH" || smeansofdeath == "MOD_GRENADE_SPLASH" || smeansofdeath == "MOD_EXPLOSIVE" ) { scalar = getvehicleprojectilesplashscalar( sweapon ); idamage = int( idamage * scalar ); @@ -325,28 +314,23 @@ callback_vehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fout } } friendly = 1; - return; } - else + else { if ( !level.hardcoremode && isDefined( self.owner ) && isDefined( eattacker.owner ) && self.owner == eattacker.owner ) { return; - return; } - else + else if ( idamage < 1 ) { - if ( idamage < 1 ) - { - idamage = 1; - } - self finishvehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, psoffsettime ); + idamage = 1; } + self finishvehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, psoffsettime ); } } } -vehiclecrush() +vehiclecrush() //checked matches cerberus output { self endon( "disconnect" ); if ( isDefined( level._effect ) && isDefined( level._effect[ "tanksquish" ] ) ) @@ -356,7 +340,7 @@ vehiclecrush() self playsound( "chr_crunch" ); } -getvehicleprojectilescalar( sweapon ) +getvehicleprojectilescalar( sweapon ) //checked matches cerberus output { if ( sweapon == "remote_missile_missile_mp" ) { @@ -368,11 +352,11 @@ getvehicleprojectilescalar( sweapon ) } else if ( sweapon == "smaw_mp" ) { - scale = 0,2; + scale = 0.2; } else if ( sweapon == "fhj18_mp" ) { - scale = 0,2; + scale = 0.2; } else { @@ -381,7 +365,7 @@ getvehicleprojectilescalar( sweapon ) return scale; } -getvehicleprojectilesplashscalar( sweapon ) +getvehicleprojectilesplashscalar( sweapon ) //checked matches cerberus output { if ( sweapon == "remote_missile_missile_mp" ) { @@ -393,7 +377,7 @@ getvehicleprojectilesplashscalar( sweapon ) } else if ( sweapon == "chopper_minigun_mp" ) { - scale = 0,5; + scale = 0.5; } else { @@ -402,7 +386,7 @@ getvehicleprojectilesplashscalar( sweapon ) return scale; } -getvehicleunderneathsplashscalar( sweapon ) +getvehicleunderneathsplashscalar( sweapon ) //checked matches cerberus output { if ( sweapon == "satchel_charge_mp" ) { @@ -416,7 +400,7 @@ getvehicleunderneathsplashscalar( sweapon ) return scale; } -getvehiclebulletdamage( sweapon ) +getvehiclebulletdamage( sweapon ) //checked matches cerberus output { if ( issubstr( sweapon, "ptrs41_" ) ) { @@ -437,7 +421,7 @@ getvehiclebulletdamage( sweapon ) return idamage; } -allowfriendlyfiredamage( einflictor, eattacker, smeansofdeath, sweapon ) +allowfriendlyfiredamage( einflictor, eattacker, smeansofdeath, sweapon ) //checked matches cerberus output { if ( isDefined( self.allowfriendlyfiredamageoverride ) ) { @@ -446,3 +430,4 @@ allowfriendlyfiredamage( einflictor, eattacker, smeansofdeath, sweapon ) vehicle = eattacker getvehicleoccupied(); return 0; } + diff --git a/patch_mp/readme.md b/patch_mp/readme.md index 24cd39d..e286b51 100644 --- a/patch_mp/readme.md +++ b/patch_mp/readme.md @@ -39,6 +39,11 @@ patch_mp/maps/mp/gametypes/_damagefeedback.gsc patch_mp/maps/mp/gametypes/_deathicons.gsc patch_mp/maps/mp/gametypes/_friendicons.gsc patch_mp/maps/mp/gametypes/_globallogic.gsc +patch_mp/maps/mp/gametypes/_globallogic_actor.gsc +patch_mp/maps/mp/gametypes/_globallogic_defaults.gsc +patch_mp/maps/mp/gametypes/_globallogic_ui.gsc +patch_mp/maps/mp/gametypes/_globallogic_utils.gsc +patch_mp/maps/mp/gametypes/_globallogic_vehicle.gsc patch_mp/maps/mp/gametypes/_healthoverlay.gsc patch_mp/maps/mp/gametypes/_hostmigration.gsc patch_mp/maps/mp/gametypes/_hud.gsc @@ -73,15 +78,10 @@ patch_mp/maps/mp/gametypes/tdm.gsc ### The following scripts are not checked yet, uploaded to setup a baseline: ``` patch_mp/maps/mp/gametypes/_gameobjects.gsc -patch_mp/maps/mp/gametypes/_globallogic_actor.gsc patch_mp/maps/mp/gametypes/_globallogic_audio.gsc -patch_mp/maps/mp/gametypes/_globallogic_defaults.gsc patch_mp/maps/mp/gametypes/_globallogic_player.gsc patch_mp/maps/mp/gametypes/_globallogic_score.gsc patch_mp/maps/mp/gametypes/_globallogic_spawn.gsc -patch_mp/maps/mp/gametypes/_globallogic_ui.gsc -patch_mp/maps/mp/gametypes/_globallogic_utils.gsc -patch_mp/maps/mp/gametypes/_globallogic_vehicle.gsc patch_mp/maps/mp/gametypes/_hud_message.gsc patch_mp/maps/mp/gametypes/_hud_util.gsc patch_mp/maps/mp/gametypes/_spawning.gsc diff --git a/patch_zm/maps/mp/gametypes_zm/_globallogic_actor.gsc b/patch_zm/maps/mp/gametypes_zm/_globallogic_actor.gsc index 08518fb..d572446 100644 --- a/patch_zm/maps/mp/gametypes_zm/_globallogic_actor.gsc +++ b/patch_zm/maps/mp/gametypes_zm/_globallogic_actor.gsc @@ -1,3 +1,4 @@ +//checked includes match cerberus output #include maps/mp/_challenges; #include maps/mp/gametypes_zm/_damagefeedback; #include maps/mp/gametypes_zm/_weapons; @@ -5,7 +6,7 @@ #include maps/mp/gametypes_zm/_globallogic_player; #include maps/mp/_utility; -callback_actordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) +callback_actordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) //checked changed to match cerberus output { if ( game[ "state" ] == "postgame" ) { @@ -43,12 +44,9 @@ callback_actordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sw { return; } - else + else if ( smeansofdeath == "MOD_HEAD_SHOT" ) { - if ( smeansofdeath == "MOD_HEAD_SHOT" ) - { - idamage = 150; - } + idamage = 150; } } if ( sweapon == "none" && isDefined( einflictor ) ) @@ -57,12 +55,9 @@ callback_actordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sw { sweapon = "explodable_barrel_mp"; } - else + else if ( isDefined( einflictor.destructible_type ) && issubstr( einflictor.destructible_type, "vehicle_" ) ) { - if ( isDefined( einflictor.destructible_type ) && issubstr( einflictor.destructible_type, "vehicle_" ) ) - { - sweapon = "destructible_car_mp"; - } + sweapon = "destructible_car_mp"; } } if ( idflags & level.idflags_no_protection ) @@ -91,56 +86,54 @@ callback_actordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sw { return; } - else + else if ( level.friendlyfire == 3 ) { - if ( level.friendlyfire == 3 ) + idamage = int( idamage * 0,5 ); + if ( idamage < 1 ) { - idamage = int( idamage * 0,5 ); - if ( idamage < 1 ) - { - idamage = 1; - } - self.lastdamagewasfromenemy = 0; - self finishactordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); + idamage = 1; } + self.lastdamagewasfromenemy = 0; + self finishactordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); } friendly = 1; } + else if ( isDefined( eattacker ) && isDefined( self.script_owner ) && eattacker == self.script_owner && !level.hardcoremode ) + { + return; + } + if ( isDefined( eattacker ) && isDefined( self.script_owner ) && isDefined( eattacker.script_owner ) && eattacker.script_owner == self.script_owner ) + { + return; + } + if ( idamage < 1 ) + { + idamage = 1; + } + if ( isDefined( eattacker ) && isplayer( eattacker ) && isDefined( sweapon ) && !issubstr( smeansofdeath, "MOD_MELEE" ) ) + { + eattacker thread maps/mp/gametypes/_weapons::checkhit( sweapon ); + } + if ( issubstr( smeansofdeath, "MOD_GRENADE" ) && isDefined( einflictor ) && isDefined( einflictor.iscooked ) ) + { + self.wascooked = getTime(); + } else { - if ( isDefined( eattacker ) && isDefined( self.script_owner ) && eattacker == self.script_owner && !level.hardcoremode ) - { - return; - } - if ( isDefined( eattacker ) && isDefined( self.script_owner ) && isDefined( eattacker.script_owner ) && eattacker.script_owner == self.script_owner ) - { - return; - } - if ( idamage < 1 ) - { - idamage = 1; - } - if ( isDefined( eattacker ) && isplayer( eattacker ) && isDefined( sweapon ) && !issubstr( smeansofdeath, "MOD_MELEE" ) ) - { - eattacker thread maps/mp/gametypes_zm/_weapons::checkhit( sweapon ); - } - if ( issubstr( smeansofdeath, "MOD_GRENADE" ) && isDefined( einflictor ) && isDefined( einflictor.iscooked ) ) - { - self.wascooked = getTime(); - } - else - { - self.wascooked = undefined; - } - if ( isDefined( eattacker ) ) - { - self.lastdamagewasfromenemy = eattacker != self; - } - self finishactordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); + self.wascooked = undefined; } if ( isDefined( eattacker ) && eattacker != self ) { - if ( sweapon != "artillery_mp" || !isDefined( einflictor ) && !isai( einflictor ) ) + self.lastdamagewasfromenemy = 1; + } + else + { + self.lastdamagewasfromenemy = 0; + } + self finishactordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); + if ( isDefined( eattacker ) && eattacker != self ) + { + if ( sweapon != "artillery_mp" && !isDefined( einflictor ) || !isai( einflictor ) ) { if ( idamage > 0 ) { @@ -149,12 +142,14 @@ callback_actordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sw } } } + /* /# if ( getDvarInt( "g_debugDamage" ) ) { println( "actor:" + self getentitynumber() + " health:" + self.health + " attacker:" + eattacker.clientid + " inflictor is player:" + isplayer( einflictor ) + " damage:" + idamage + shitloc + ";" + boneindex + "\n" ); #/ } + */ if ( 1 ) { lpselfnum = self getentitynumber(); @@ -178,7 +173,7 @@ callback_actordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sw } } -callback_actorkilled( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime ) +callback_actorkilled( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime ) //checked matches cerberus output { if ( game[ "state" ] == "postgame" ) { @@ -205,3 +200,5 @@ callback_actorkilled( einflictor, attacker, idamage, smeansofdeath, sweapon, vdi } } } + + diff --git a/patch_zm/readme.md b/patch_zm/readme.md index b6f744b..861cf65 100644 --- a/patch_zm/readme.md +++ b/patch_zm/readme.md @@ -51,6 +51,7 @@ patch_zm/maps/mp/zombies/_zm_pers_upgrades_functions.gsc ``` patch_zm/maps/mp/gametypes_zm/_callbacksetup.gsc patch_zm/maps/mp/gametypes_zm/_damagefeedback.gsc +patch_zm/maps/mp/gametypes_zm/_globallogic_actor.gsc patch_zm/maps/mp/gametypes_zm/_healthoverlay.gsc patch_zm/maps/mp/gametypes_zm/_hostmigration.gsc patch_zm/maps/mp/gametypes_zm/_hud.gsc @@ -81,7 +82,6 @@ patch_zm/maps/mp/zombies/_zm_weap_cymbal_monkey.gsc ### The following scripts are not checked yet, uploaded to setup a baseline: ``` patch_zm/maps/mp/gametypes_zm/_gameobjects.gsc -patch_zm/maps/mp/gametypes_zm/_globallogic_actor.gsc patch_zm/maps/mp/gametypes_zm/_globallogic_audio.gsc patch_zm/maps/mp/gametypes_zm/_globallogic_defaults.gsc patch_zm/maps/mp/gametypes_zm/_globallogic_player.gsc diff --git a/zm_nuked_patch/maps/mp/zm_nuked.gsc b/zm_nuked_patch/maps/mp/zm_nuked.gsc index 603d747..a5d21bc 100644 --- a/zm_nuked_patch/maps/mp/zm_nuked.gsc +++ b/zm_nuked_patch/maps/mp/zm_nuked.gsc @@ -8,22 +8,32 @@ #include maps/mp/zombies/_zm_powerups; #include maps/mp/zombies/_zm_net; #include maps/mp/zombies/_zm_zonemgr; +#include maps/mp/zombies/_zm_weap_ballistic_knife; +#include maps/mp/zombies/_zm_weap_claymore; +#include maps/mp/zombies/_zm_weap_cymbal_monkey; +#include maps/mp/zombies/_zm_weap_bowie; +#include maps/mp/zombies/_zm_weap_tazer_knuckles; +#include maps/mp/_sticky_grenade; #include maps/mp/zm_nuked_perks; #include maps/mp/gametypes_zm/_spawning; #include maps/mp/teams/_teamset_cdc; +#include maps/mp/zombies/_load; #include maps/mp/animscripts/zm_death; +#include maps/mp/zombies/_zm; +#include maps/mp/zm_nuked_fx; #include maps/mp/zm_nuked_ffotd; +#include maps/mp/zm_nuked_gamemodes; #include maps/mp/zombies/_zm_weapons; #include maps/mp/zombies/_zm_utility; #include maps/mp/_utility; #include common_scripts/utility; -gamemode_callback_setup() +gamemode_callback_setup() //checked matches cerberus output { maps/mp/zm_nuked_gamemodes::init(); } -survival_init() +survival_init() //checked matches cerberus output { level.force_team_characters = 1; level.should_use_cia = 0; @@ -36,12 +46,12 @@ survival_init() flag_wait( "start_zombie_round_logic" ); } -zstandard_preinit() +zstandard_preinit() //checked matches cerberus output { survival_init(); } -createfx_callback() +createfx_callback() //checked matches cerberus output { ents = getentarray(); i = 0; @@ -55,7 +65,7 @@ createfx_callback() } } -main() +main() //checked matches cerberus output { level thread maps/mp/zm_nuked_ffotd::main_start(); level.level_createfx_callback_thread = ::createfx_callback; @@ -67,7 +77,7 @@ main() setup_rex_starts(); maps/mp/zm_nuked_fx::main(); maps/mp/zombies/_zm::init_fx(); - maps/mp/animscripts/zm_death::precache_gib_fx(); + //maps/mp/animscripts/zm_death::precache_gib_fx(); level.zombiemode = 1; level._no_water_risers = 1; precachemodel( "p6_zm_nuked_rocket_cam" ); @@ -82,6 +92,7 @@ main() { return; } + maps/mp/teams/_teamset_cdc::level_init(); maps/mp/gametypes_zm/_spawning::level_use_unified_spawning( 1 ); level.givecustomloadout = ::givecustomloadout; @@ -116,13 +127,7 @@ main() registerclientfield( "world", "zombie_eye_change", 4000, 1, "int" ); maps/mp/zm_nuked_perks::init_nuked_perks(); maps/mp/zombies/_zm::init(); - if ( level.splitscreen && getDvarInt( "splitscreen_playerCount" ) > 2 ) - { - } - else - { - level.custom_intermission = ::nuked_standard_intermission; - } + level.custom_intermission = ::nuked_standard_intermission; level thread maps/mp/_sticky_grenade::init(); maps/mp/zombies/_zm_weap_tazer_knuckles::init(); maps/mp/zombies/_zm_weap_bowie::init(); @@ -130,10 +135,12 @@ main() maps/mp/zombies/_zm_weap_cymbal_monkey::init(); maps/mp/zombies/_zm_weap_claymore::init(); maps/mp/zombies/_zm_weap_ballistic_knife::init(); + //return; level.special_weapon_magicbox_check = ::nuked_special_weapon_magicbox_check; precacheitem( "death_throe_zm" ); level.zones = []; level.zone_manager_init_func = ::nuked_zone_init; + init_zones = []; init_zones[ 0 ] = "culdesac_yellow_zone"; init_zones[ 1 ] = "culdesac_green_zone"; level thread maps/mp/zombies/_zm_zonemgr::manage_zones( init_zones ); @@ -171,7 +178,7 @@ main() level thread maps/mp/zm_nuked_ffotd::main_end(); } -door_powerup_drop( powerup_name, drop_spot, powerup_team, powerup_location ) +door_powerup_drop( powerup_name, drop_spot, powerup_team, powerup_location ) //checked matches cerberus output { if ( isDefined( level.door_powerup ) ) { @@ -190,7 +197,7 @@ door_powerup_drop( powerup_name, drop_spot, powerup_team, powerup_location ) } } -perks_behind_door() +perks_behind_door() //checked matches cerberus output { if ( isDefined( level.enable_magic ) && !level.enable_magic ) { @@ -222,7 +229,7 @@ perks_behind_door() } } -nuked_doomsday_clock_think() +nuked_doomsday_clock_think() //checked matches cerberus output { min_hand_model = getent( "clock_min_hand", "targetname" ); min_hand_model.position = 0; @@ -233,11 +240,11 @@ nuked_doomsday_clock_think() } } -update_doomsday_clock( min_hand_model ) +update_doomsday_clock( min_hand_model ) //checked partially changed to match cerberus output { while ( is_true( min_hand_model.is_updating ) ) { - wait 0,05; + wait 0.05; } min_hand_model.is_updating = 1; if ( min_hand_model.position == 0 ) @@ -260,13 +267,13 @@ update_doomsday_clock( min_hand_model ) min_hand_model.is_updating = 0; } -fall_down( vdir, stance ) +fall_down( vdir, stance ) //checked partially changed to match cerberus output { self endon( "disconnect" ); level endon( "game_module_ended" ); self ghost(); origin = self.origin; - xyspeed = ( 0, 1, 0 ); + xyspeed = ( 0, 0, 0 ); angles = self getplayerangles(); angles = ( angles[ 0 ], angles[ 1 ], angles[ 2 ] + randomfloatrange( -5, 5 ) ); if ( isDefined( vdir ) && length( vdir ) > 0 ) @@ -274,7 +281,7 @@ fall_down( vdir, stance ) xyspeedmag = 40 + randomint( 12 ) + randomint( 12 ); xyspeed = xyspeedmag * vectornormalize( ( vdir[ 0 ], vdir[ 1 ], 0 ) ); } - linker = spawn( "script_origin", ( 0, 1, 0 ) ); + linker = spawn( "script_origin", ( 0, 0, 0 ) ); linker.origin = origin; linker.angles = angles; self._fall_down_anchor = linker; @@ -287,7 +294,7 @@ fall_down( vdir, stance ) eye = self get_eye(); floor_height = ( 10 + origin[ 2 ] ) - eye[ 2 ]; origin += ( 0, 0, floor_height ); - lerptime = 0,5; + lerptime = 0.5; linker moveto( origin, lerptime, lerptime ); linker rotateto( angles, lerptime, lerptime ); } @@ -301,11 +308,11 @@ fall_down( vdir, stance ) if ( falling ) { bounce = randomint( 4 ) + 8; - origin = ( origin + ( 0, 0, bounce ) ) - ( xyspeed * 0,1 ); + origin = ( origin + ( 0, 0, bounce ) ) - ( xyspeed * 0.1 ); lerptime = bounce / 50; linker moveto( origin, lerptime, 0, lerptime ); linker waittill( "movedone" ); - origin = ( origin + ( 0, 0, bounce * -1 ) ) + ( xyspeed * 0,1 ); + origin = ( origin + ( 0, 0, bounce * -1 ) ) + ( xyspeed * 0.1 ); lerptime /= 2; linker moveto( origin, lerptime, lerptime ); linker waittill( "movedone" ); @@ -315,7 +322,7 @@ fall_down( vdir, stance ) linker delete(); } -nuked_player_fake_death_cleanup() +nuked_player_fake_death_cleanup() //chcecked matches cerberus output { if ( isDefined( self._fall_down_anchor ) ) { @@ -324,7 +331,7 @@ nuked_player_fake_death_cleanup() } } -nuked_player_fake_death( vdir ) +nuked_player_fake_death( vdir ) //checked partially changed to match cerberus output { level notify( "fake_death" ); self notify( "fake_death" ); @@ -338,7 +345,7 @@ nuked_player_fake_death( vdir ) self allowprone( 1 ); self allowcrouch( 0 ); self allowstand( 0 ); - wait 0,25; + wait 0.25; self freezecontrols( 1 ); } else @@ -349,12 +356,12 @@ nuked_player_fake_death( vdir ) } } -initial_round_wait_func() +initial_round_wait_func() //checked matches cerberus output { flag_wait( "initial_blackscreen_passed" ); } -melee_miss_func() +melee_miss_func() //checked matches cerberus output { if ( isDefined( self.enemy ) ) { @@ -370,7 +377,7 @@ melee_miss_func() } } -zombie_init_done() +zombie_init_done() //checked matches cerberus output { self.allowpain = 0; if ( isDefined( self.script_parameters ) && self.script_parameters == "crater" ) @@ -380,13 +387,13 @@ zombie_init_done() self setphysparams( 15, 0, 48 ); } -zombie_crater_locomotion() +zombie_crater_locomotion() //checked partially changed to match cerberus output { self endon( "death" ); stand_trigger = getentarray( "zombie_crawler_standup", "targetname" ); while ( is_true( self.needs_run_update ) ) { - wait 0,1; + wait 0.1; } self allowpitchangle( 1 ); self setpitchorient(); @@ -408,32 +415,28 @@ zombie_crater_locomotion() return; } i = 0; - while ( i < stand_trigger.size ) + for(i = 0; i < stand_trigger.size; i++) { - if ( self istouching( stand_trigger[ i ] ) ) + if(self istouching(stand_trigger[i])) { touched = 1; break; } - else - { - i++; - } } - wait 0,1; + wait 0.1; } self allowpitchangle( 0 ); self clearpitchorient(); self maps/mp/animscripts/zm_run::needsupdate(); } -zombie_path_timer_override() +zombie_path_timer_override() //checked matches cerberus output { timer = getTime() + 100; return timer; } -nuked_update_traversals() +nuked_update_traversals() //checked partially changed to match cerberus output { level.yellow_awning_clip = getentarray( "yellow_awning_clip", "targetname" ); level.yellow_patio_clip = getentarray( "yellow_patio_clip", "targetname" ); @@ -464,186 +467,160 @@ nuked_update_traversals() set_green_patio( 0 ); } } + else if ( !level.yellow_backyard && !level.green_backyard && !level.other ) + { + set_yellow_awning( 0 ); + set_yellow_patio( 1 ); + set_green_awning( 0 ); + set_green_patio( 1 ); + } + else if ( !level.other ) + { + set_yellow_awning( 0 ); + set_yellow_patio( 0 ); + set_green_awning( 0 ); + set_green_patio( 0 ); + } else { - if ( !level.yellow_backyard && !level.green_backyard && !level.other ) - { - set_yellow_awning( 0 ); - set_yellow_patio( 1 ); - set_green_awning( 0 ); - set_green_patio( 1 ); - break; - } - else - { - if ( !level.other ) - { - set_yellow_awning( 0 ); - set_yellow_patio( 0 ); - set_green_awning( 0 ); - set_green_patio( 0 ); - break; - } - else - { - set_yellow_awning( 1 ); - set_yellow_patio( 1 ); - set_green_awning( 1 ); - set_green_patio( 1 ); - } - } + set_yellow_awning( 1 ); + set_yellow_patio( 1 ); + set_green_awning( 1 ); + set_green_patio( 1 ); } - wait 0,2; + wait 0.2; } } -set_yellow_awning( enable ) +set_yellow_awning( enable ) //checked changed to match cerberus output { - if ( enable ) + if(enable) { - if ( !level.yellow_awning ) + if(!level.yellow_awning) { level.yellow_awning = 1; - house_clip( level.yellow_awning_clip, 1 ); + house_clip(level.yellow_awning_clip, 1); } } - else + else if(level.yellow_awning) { - if ( level.yellow_awning ) - { - level.yellow_awning = 0; - house_clip( level.yellow_awning_clip, 0 ); - } + level.yellow_awning = 0; + house_clip(level.yellow_awning_clip, 0); } } -set_yellow_patio( enable ) +set_yellow_patio( enable ) //checked changed to match cerberus output { - if ( enable ) + if(enable) { - if ( !level.yellow_patio ) + if(!level.yellow_patio) { level.yellow_patio = 1; - house_clip( level.yellow_patio_clip, 1 ); + house_clip(level.yellow_patio_clip, 1); } } - else + else if(level.yellow_patio) { - if ( level.yellow_patio ) - { - level.yellow_patio = 0; - house_clip( level.yellow_patio_clip, 0 ); - } + level.yellow_patio = 0; + house_clip(level.yellow_patio_clip, 0); } } -set_green_awning( enable ) +set_green_awning( enable ) //checked changed to match cerberus output { - if ( enable ) + if(enable) { - if ( !level.green_awning ) + if(!level.green_awning) { level.green_awning = 1; - house_clip( level.green_awning_clip, 1 ); + house_clip(level.green_awning_clip, 1); } } - else + else if(level.green_awning) { - if ( level.green_awning ) - { - level.green_awning = 0; - house_clip( level.green_awning_clip, 0 ); - } + level.green_awning = 0; + house_clip(level.green_awning_clip, 0); } } -set_green_patio( enable ) +set_green_patio( enable ) //checked changed to match cerberus output { - if ( enable ) + if(enable) { - if ( !level.green_patio ) + if(!level.green_patio) { level.green_patio = 1; - house_clip( level.green_patio_clip, 1 ); + house_clip(level.green_patio_clip, 1); } } - else + else if(level.green_patio) { - if ( level.green_patio ) - { - level.green_patio = 0; - house_clip( level.green_patio_clip, 0 ); - } + level.green_patio = 0; + house_clip(level.green_patio_clip, 0); } } -nuked_update_player_zones() +nuked_update_player_zones() //checked changed to match cerberus output { players = get_players(); i = 0; while ( i < players.size ) { - if ( is_player_valid( players[ i ] ) ) + if(is_player_valid(players[i])) { - if ( players[ i ] maps/mp/zombies/_zm_zonemgr::entity_in_zone( "openhouse1_backyard_zone" ) ) + if(players[i] maps/mp/zombies/_zm_zonemgr::entity_in_zone("openhouse1_backyard_zone")) { level.green_backyard++; i++; continue; } - else if ( players[ i ] maps/mp/zombies/_zm_zonemgr::entity_in_zone( "openhouse2_backyard_zone" ) ) + if(players[i] maps/mp/zombies/_zm_zonemgr::entity_in_zone("openhouse2_backyard_zone")) { level.yellow_backyard++; i++; continue; } - else if ( players[ i ] maps/mp/zombies/_zm_zonemgr::entity_in_zone( "culdesac_green_zone" ) || players[ i ] maps/mp/zombies/_zm_zonemgr::entity_in_zone( "culdesac_yellow_zone" ) ) + if(players[i] maps/mp/zombies/_zm_zonemgr::entity_in_zone("culdesac_green_zone") || players[i] maps/mp/zombies/_zm_zonemgr::entity_in_zone("culdesac_yellow_zone")) { level.culdesac++; i++; continue; } - else - { - level.other++; - } + level.other++; } i++; } } -house_clip( clips, connect ) +house_clip( clips, connect ) //checked changed to match cerberus output { i = 0; while ( i < clips.size ) { - if ( connect ) + if(connect) { - clips[ i ] notsolid(); - clips[ i ] connectpaths(); + clips[i] notsolid(); + clips[i] connectpaths(); i++; continue; } - else - { - clips[ i ] solid(); - clips[ i ] disconnectpaths(); - } + clips[i] solid(); + clips[i] disconnectpaths(); i++; } } -setup_rex_starts() +setup_rex_starts() //checked matches cerberus output { add_gametype( "zstandard", ::dummy, "zstandard", ::dummy ); add_gameloc( "nuked", ::dummy, "nuked", ::dummy ); } -dummy() +dummy() //checked matches cerberus output { } -precache_team_characters() +precache_team_characters() //checked matches cerberus output { precachemodel( "c_zom_player_cdc_fb" ); precachemodel( "c_zom_hazmat_viewhands_light" ); @@ -651,7 +628,7 @@ precache_team_characters() precachemodel( "c_zom_suit_viewhands" ); } -give_team_characters() +give_team_characters() //checked matches cerberus output { if ( isDefined( level.hotjoin_player_setup ) && [[ level.hotjoin_player_setup ]]( "c_zom_suit_viewhands" ) ) { @@ -677,12 +654,12 @@ give_team_characters() self set_player_tombstone_index(); } -initcharacterstartindex() +initcharacterstartindex() //checked matches cerberus output { level.characterstartindex = randomint( 4 ); } -selectcharacterindextouse() +selectcharacterindextouse() //checked matchers cerberus output { if ( level.characterstartindex >= 4 ) { @@ -693,13 +670,13 @@ selectcharacterindextouse() return self.characterindex; } -givecustomloadout( takeallweapons, alreadyspawned ) +givecustomloadout( takeallweapons, alreadyspawned ) //checked matches cerberus output { self giveweapon( "knife_zm" ); self give_start_weapon( 1 ); } -nuked_zone_init() +nuked_zone_init() //checked matches cerberus output { flag_init( "always_on" ); flag_set( "always_on" ); @@ -719,7 +696,7 @@ nuked_zone_init() add_adjacent_zone( "openhouse2_backyard_zone", "ammo_door_zone", "openhouse2_backyard_2_ammo_door" ); } -include_powerups() +include_powerups() //checked matches cerberus output { include_powerup( "nuke" ); include_powerup( "insta_kill" ); @@ -728,15 +705,15 @@ include_powerups() include_powerup( "fire_sale" ); } -include_perks() +include_perks() //checked matches cerberus output { } -include_equipment_for_level() +include_equipment_for_level() //checked matches cerberus output { } -include_weapons() +include_weapons() //checked matches cerberus output { include_weapon( "knife_zm", 0 ); include_weapon( "frag_grenade_zm", 0 ); @@ -833,7 +810,7 @@ include_weapons() } } -offhand_weapon_overrride() +offhand_weapon_overrride() //checked matches cerberus output { register_lethal_grenade_for_level( "frag_grenade_zm" ); register_lethal_grenade_for_level( "sticky_grenade_zm" ); @@ -849,7 +826,7 @@ offhand_weapon_overrride() level.zombie_equipment_player_init = undefined; } -offhand_weapon_give_override( str_weapon ) +offhand_weapon_give_override( str_weapon ) //checked matches cerberus output { self endon( "death" ); if ( is_tactical_grenade( str_weapon ) && isDefined( self get_player_tactical_grenade() ) && !self is_player_tactical_grenade( str_weapon ) ) @@ -860,7 +837,7 @@ offhand_weapon_give_override( str_weapon ) return 0; } -custom_add_weapons() +custom_add_weapons() //checked matches cerberus output { add_zombie_weapon( "m1911_zm", "m1911_upgraded_zm", &"ZOMBIE_WEAPON_M1911", 50, "", "", undefined ); add_zombie_weapon( "python_zm", "python_upgraded_zm", &"ZOMBIE_WEAPON_PYTHON", 50, "wpck_python", "", undefined, 1 ); @@ -907,7 +884,7 @@ custom_add_weapons() } } -nuked_population_sign_think() +nuked_population_sign_think() //checked partially changed to match cerberus output { tens_model = getent( "counter_tens", "targetname" ); ones_model = getent( "counter_ones", "targetname" ); @@ -915,8 +892,8 @@ nuked_population_sign_think() ones = 0; tens = 0; local_zombies_killed = 0; - tens_model rotateroll( step, 0,05 ); - ones_model rotateroll( step, 0,05 ); + tens_model rotateroll( step, 0.05 ); + ones_model rotateroll( step, 0.05 ); while ( 1 ) { if ( local_zombies_killed < ( level.total_zombies_killed - level.zombie_total_subtract ) ) @@ -940,83 +917,72 @@ nuked_population_sign_think() ones_model playsound( "zmb_counter_flip" ); ones_model waittill( "rotatedone" ); level.population_count = ones + ( tens * 10 ); - if ( level.population_count != 0 && level.population_count != 33 || level.population_count == 66 && level.population_count == 99 ) + if(level.population_count == 0 || level.population_count == 33 || level.population_count == 66 || level.population_count == 99) { - level notify( "update_doomsday_clock" ); + level notify("update_doomsday_clock"); } local_zombies_killed++; } - wait 0,05; + wait 0.05; } } -assign_lowest_unused_character_index() +assign_lowest_unused_character_index() //checked changed to match cerberus output { charindexarray = []; - charindexarray[ 0 ] = 0; - charindexarray[ 1 ] = 1; - charindexarray[ 2 ] = 2; - charindexarray[ 3 ] = 3; + charindexarray[0] = 0; + charindexarray[1] = 1; + charindexarray[2] = 2; + charindexarray[3] = 3; players = get_players(); - if ( players.size == 1 ) + if(players.size == 1) { - charindexarray = array_randomize( charindexarray ); - return charindexarray[ 0 ]; + charindexarray = array_randomize(charindexarray); + return charindexarray[0]; + } + else if(players.size == 2) + { + foreach(player in players) + { + if(isdefined(player.characterindex)) + { + if(player.characterindex == 0 || player.characterindex == 1) + { + if(randomint(100) > 50) + { + return 2; + } + return 3; + } + if(player.characterindex == 2 || player.characterindex == 3) + { + if(randomint(100) > 50) + { + return 0; + } + return 1; + } + } + } } else { - if ( players.size == 2 ) + foreach(player in players) { - _a1214 = players; - _k1214 = getFirstArrayKey( _a1214 ); - while ( isDefined( _k1214 ) ) + if(isdefined(player.characterindex)) { - player = _a1214[ _k1214 ]; - if ( isDefined( player.characterindex ) ) - { - if ( player.characterindex == 0 || player.characterindex == 1 ) - { - if ( randomint( 100 ) > 50 ) - { - return 2; - } - return 3; - } - else - { - if ( player.characterindex == 2 || player.characterindex == 3 ) - { - if ( randomint( 100 ) > 50 ) - { - return 0; - } - return 1; - } - } - } - _k1214 = getNextArrayKey( _a1214, _k1214 ); + arrayremovevalue(charindexarray, player.characterindex, 0); } } - else _a1240 = players; - _k1240 = getFirstArrayKey( _a1240 ); - while ( isDefined( _k1240 ) ) + if(charindexarray.size > 0) { - player = _a1240[ _k1240 ]; - if ( isDefined( player.characterindex ) ) - { - arrayremovevalue( charindexarray, player.characterindex, 0 ); - } - _k1240 = getNextArrayKey( _a1240, _k1240 ); - } - if ( charindexarray.size > 0 ) - { - return charindexarray[ 0 ]; + return charindexarray[0]; } } return 0; } -nuked_mannequin_init() +nuked_mannequin_init() //checked partially matches cerberus output did not change { keep_count = 28; level.mannequin_count = 0; @@ -1032,13 +998,17 @@ nuked_mannequin_init() i = 0; while ( i < remove_count ) { + /* /# assert( isDefined( mannequins[ i ].target ) ); #/ + */ collision = getent( mannequins[ i ].target, "targetname" ); + /* /# assert( isDefined( collision ) ); #/ + */ collision delete(); mannequins[ i ] delete(); level.mannequin_count--; @@ -1049,7 +1019,7 @@ nuked_mannequin_init() level.mannequin_time = getTime(); } -nuked_mannequin_filter( destructibles ) +nuked_mannequin_filter( destructibles ) //checked partially matches cerberus output did not change { mannequins = []; i = 0; @@ -1066,147 +1036,121 @@ nuked_mannequin_filter( destructibles ) return mannequins; } -custom_debris_function() +custom_debris_function() //checked changed to match cerberus output { cost = 1000; - if ( isDefined( self.zombie_cost ) ) + if(isdefined(self.zombie_cost)) { cost = self.zombie_cost; } - for ( ;; ) + while(1) { - while ( 1 ) + if(isdefined(self.script_noteworthy)) { - if ( isDefined( self.script_noteworthy ) ) + if(self.script_noteworthy == "electric_door" || self.script_noteworthy == "electric_buyable_door") { - if ( self.script_noteworthy == "electric_door" || self.script_noteworthy == "electric_buyable_door" ) - { - self sethintstring( &"ZOMBIE_NEED_POWER" ); - flag_wait( "power_on" ); - } + self sethintstring(&"ZOMBIE_NEED_POWER"); + flag_wait("power_on"); } - self set_hint_string( self, "default_buy_door", cost ); - self waittill( "trigger", who, force ); - if ( getDvarInt( "zombie_unlock_all" ) > 0 || is_true( force ) ) + } + self set_hint_string(self, "default_buy_door", cost); + self waittill("trigger", who, force); + if(!who usebuttonpressed()) + { + continue; + } + if(who in_revive_trigger()) + { + continue; + } + if(is_player_valid(who)) + { + players = get_players(); + if(who.score >= self.zombie_cost) { + who maps/mp/zombies/_zm_score::minus_to_player_score(self.zombie_cost); + break; } else { - while ( !who usebuttonpressed() ) - { - continue; - } - while ( who in_revive_trigger() ) - { - continue; - } + play_sound_at_pos("no_purchase", self.origin); + who maps/mp/zombies/_zm_audio::create_and_play_dialog("general", "door_deny", undefined, 1); + continue; } - if ( is_player_valid( who ) ) + bbprint("zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", who.name, who.score, level.round_number, self.zombie_cost, self.script_flag, self.origin, "door"); + junk = getentarray(self.target, "targetname"); + if(isdefined(self.script_flag)) { - players = get_players(); - if ( getDvarInt( "zombie_unlock_all" ) > 0 ) + tokens = strtok(self.script_flag, ","); + for(i = 0; i < tokens.size; i++) { - break; - } - else if ( who.score >= self.zombie_cost ) - { - who maps/mp/zombies/_zm_score::minus_to_player_score( self.zombie_cost ); - break; - } - else - { - play_sound_at_pos( "no_purchase", self.origin ); - who maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "door_deny", undefined, 1 ); + flag_set(tokens[i]); } } - bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", who.name, who.score, level.round_number, self.zombie_cost, self.script_flag, self.origin, "door" ); - junk = getentarray( self.target, "targetname" ); - while ( isDefined( self.script_flag ) ) - { - tokens = strtok( self.script_flag, "," ); - i = 0; - while ( i < tokens.size ) - { - flag_set( tokens[ i ] ); - i++; - } - } - play_sound_at_pos( "purchase", self.origin ); - level notify( "junk purchased" ); + play_sound_at_pos("purchase", self.origin); + level notify("junk purchased"); move_ent = undefined; clip = undefined; - i = 0; - while ( i < junk.size ) + for(i = 0; i < junk.size; i++) { - junk[ i ] connectpaths(); - if ( isDefined( junk[ i ].script_noteworthy ) ) + junk[i] connectpaths(); + if(isdefined(junk[i].script_noteworthy)) { - if ( junk[ i ].script_noteworthy == "clip" ) + if(junk[i].script_noteworthy == "clip") { - clip = junk[ i ]; - i++; + clip = junk[i]; continue; } } - else struct = undefined; - if ( isDefined( junk[ i ].script_linkto ) ) + struct = undefined; + if(isdefined(junk[i].script_linkto)) { - struct = getstruct( junk[ i ].script_linkto, "script_linkname" ); - if ( isDefined( struct ) ) + struct = getstruct(junk[i].script_linkto, "script_linkname"); + if(isdefined(struct)) { - move_ent = junk[ i ]; - junk[ i ] thread maps/mp/zombies/_zm_blockers::debris_move( struct ); + move_ent = junk[i]; + junk[i] thread maps/mp/zombies/_zm_blockers::debris_move(struct); } else { - junk[ i ] delete(); + junk[i] delete(); } - i++; continue; } - else - { - junk[ i ] delete(); - } - i++; + junk[i] delete(); } - all_trigs = getentarray( self.target, "target" ); - i = 0; - while ( i < all_trigs.size ) + all_trigs = getentarray(self.target, "target"); + for(i = 0; i < all_trigs.size; i++) { - all_trigs[ i ] delete(); - i++; + all_trigs[i] delete(); } - if ( isDefined( clip ) ) + if(isdefined(clip)) { - if ( isDefined( move_ent ) ) + if(isdefined(move_ent)) { - move_ent waittill( "movedone" ); + move_ent waittill("movedone"); } clip delete(); } - return; - } - else - { + break; } } } -sndgameend() +sndgameend() //checked partially changed to match cerberus output { level waittill( "intermission" ); - playsoundatposition( "zmb_endgame", ( 0, 1, 0 ) ); + playsoundatposition( "zmb_endgame", ( 0, 0, 0 ) ); } -sndmusiceastereggs() +sndmusiceastereggs() //checked matches cerberus output { level.music_override = 0; level thread sndmusegg1(); level thread sndmusegg2(); } -sndmusegg1() +sndmusegg1() //checked matches cerberus output { level waittill( "nuke_clock_moved" ); level waittill( "magic_door_power_up_grabbed" ); @@ -1217,7 +1161,7 @@ sndmusegg1() } } -sndmusegg2() +sndmusegg2() //checked matches cerberus output { origins = []; origins[ 0 ] = ( -1998, 632, -48 ); @@ -1233,7 +1177,7 @@ sndmusegg2() } } -sndmusegg2_wait( bear_origin ) +sndmusegg2_wait( bear_origin ) //checked partially changed to match cerberus output { temp_ent = spawn( "script_origin", bear_origin ); temp_ent playloopsound( "zmb_meteor_loop" ); @@ -1248,12 +1192,12 @@ sndmusegg2_wait( bear_origin ) } else { - wait 1,5; + wait 1.5; temp_ent delete(); } } -sndmusegg2_override() +sndmusegg2_override() //checked matches cerberus output { if ( isDefined( level.music_override ) && level.music_override ) { @@ -1262,15 +1206,13 @@ sndmusegg2_override() return 1; } -sndmusegg3_counter( event, attacker ) +sndmusegg3_counter( event, attacker ) //checked partially changed to match cerberus output { if ( level.mannequin_count <= 0 ) { return; } -/# - println( "CAYERS: " + level.mannequin_count ); -#/ + level.mannequin_count--; if ( level.mannequin_count <= 0 ) @@ -1279,11 +1221,11 @@ sndmusegg3_counter( event, attacker ) { wait 5; } - level thread sndmuseggplay( spawn( "script_origin", ( 0, 1, 0 ) ), "zmb_nuked_song_3", 80 ); + level thread sndmuseggplay( spawn( "script_origin", ( 0, 0, 0 ) ), "zmb_nuked_song_3", 80 ); } } -sndmuseggplay( ent, alias, time ) +sndmuseggplay( ent, alias, time ) //checked partially changed to match cerberus output { level.music_override = 1; wait 1; @@ -1291,19 +1233,19 @@ sndmuseggplay( ent, alias, time ) level thread sndeggmusicwait( time ); level waittill_either( "end_game", "sndSongDone" ); ent stopsounds(); - wait 0,05; + wait 0.05; ent delete(); level.music_override = 0; } -sndeggmusicwait( time ) +sndeggmusicwait( time ) //checked matches cerberus output { level endon( "end_game" ); wait time; level notify( "sndSongDone" ); } -nuked_standard_intermission() +nuked_standard_intermission() //checked partially changed to match cerberus output { self closemenu(); self closeingamemenu(); @@ -1329,7 +1271,7 @@ nuked_standard_intermission() self.game_over_bg.alpha = 1; clientnotify( "znfg" ); level thread moon_rocket_follow_path(); - wait 0,1; + wait 0.1; self.game_over_bg fadeovertime( 1 ); self.game_over_bg.alpha = 0; flag_wait( "rocket_hit_nuketown" ); @@ -1337,7 +1279,7 @@ nuked_standard_intermission() self.game_over_bg.alpha = 1; } -moon_rocket_follow_path() +moon_rocket_follow_path() //checked partially changed to match cerberus output { rocket_start_struct = getstruct( "inertmission_rocket_start", "targetname" ); rocket_end_struct = getstruct( "inertmission_rocket_end", "targetname" ); @@ -1353,19 +1295,15 @@ moon_rocket_follow_path() camera setmodel( "tag_origin" ); exploder( 676 ); players = get_players(); - _a1653 = players; - _k1653 = getFirstArrayKey( _a1653 ); - while ( isDefined( _k1653 ) ) + foreach ( player in players ) { - player = _a1653[ _k1653 ]; player setclientuivisibilityflag( "hud_visible", 0 ); player thread player_rocket_rumble(); player thread intermission_rocket_blur(); - player setdepthoffield( 0, 128, 7000, 10000, 6, 1,8 ); + player setdepthoffield( 0, 128, 7000, 10000, 6, 1.8 ); player camerasetposition( camera ); player camerasetlookat(); player cameraactivate( 1 ); - _k1653 = getNextArrayKey( _a1653, _k1653 ); } rocket moveto( rocket_end_struct.origin, 9 ); rocket rotateto( rocket_end_struct.angles, 11 ); @@ -1373,11 +1311,11 @@ moon_rocket_follow_path() camera rotateto( rocket_cam_end_struct.angles, 8 ); playfxontag( level._effect[ "rocket_entry" ], rocket, "tag_fx" ); playfxontag( level._effect[ "rocket_entry_light" ], rocket, "tag_fx" ); - wait 7,5; + wait 7.5; flag_set( "rocket_hit_nuketown" ); } -intermission_rocket_blur() +intermission_rocket_blur() //checked matches cerberus output { while ( !flag( "rocket_hit_nuketown" ) ) { @@ -1387,13 +1325,13 @@ intermission_rocket_blur() } } -inermission_rocket_init() +inermission_rocket_init() //checked matches cerberus output { rocket = getent( "intermission_rocket", "targetname" ); rocket hide(); } -player_rocket_rumble() +player_rocket_rumble() //checked matches cerberus output { while ( !flag( "rocket_hit_nuketown" ) ) { @@ -1402,7 +1340,7 @@ player_rocket_rumble() } } -bus_taser_blocker() +bus_taser_blocker() //checked matches cerberus output { trig = getent( "bus_taser_trigger", "targetname" ); if ( isDefined( trig ) ) @@ -1416,7 +1354,7 @@ bus_taser_blocker() } } -marlton_vo_inside_bunker() +marlton_vo_inside_bunker() //checked matches cerberus output { marlton_bunker_trig = getent( "marlton_bunker_trig", "targetname" ); marlton_sound_pos = marlton_bunker_trig.origin; @@ -1443,7 +1381,7 @@ marlton_vo_inside_bunker() } } -wait_for_next_round( current_round ) +wait_for_next_round( current_round ) //checked matches cerberus output { while ( level.round_number <= current_round ) { @@ -1451,7 +1389,7 @@ wait_for_next_round( current_round ) } } -moon_transmission_vo() +moon_transmission_vo() //checked matches cerberus output { start_round = 3; end_round = 25; @@ -1469,7 +1407,7 @@ moon_transmission_vo() flag_set( "moon_transmission_over" ); } -wait_for_round_range( round ) +wait_for_round_range( round ) //checked matches cerberus output { while ( level.round_number < round ) { @@ -1477,14 +1415,11 @@ wait_for_round_range( round ) } } -death_to_all_zombies() +death_to_all_zombies() //checked does not match cerberus output did not change { zombies = getaiarray( level.zombie_team ); - _a1807 = zombies; - index = getFirstArrayKey( _a1807 ); - while ( isDefined( index ) ) + foreach ( zombie in zombies ) { - zombie = _a1807[ index ]; if ( !isalive( zombie ) ) { } @@ -1499,11 +1434,10 @@ death_to_all_zombies() wait_network_frame(); } } - index = getNextArrayKey( _a1807, index ); } } -zombie_eye_glow_change() +zombie_eye_glow_change() //checked matches cerberus output { flag_wait( "moon_transmission_over" ); flag_clear( "spawn_zombies" ); @@ -1517,20 +1451,20 @@ zombie_eye_glow_change() level setclientfield( "zombie_eye_change", 1 ); } -switch_announcer_to_richtofen() +switch_announcer_to_richtofen() //checked matches cerberus output { flag_wait( "moon_transmission_over" ); sndswitchannouncervox( "richtofen" ); } -bus_random_horn() +bus_random_horn() //checked matches cerberus output { horn_struct = getstruct( "bus_horn_struct", "targetname" ); wait_for_round_range( randomintrange( 5, 10 ) ); playsoundatposition( "zmb_bus_horn_leave", horn_struct.origin ); } -fake_lighting_cleanup() +fake_lighting_cleanup() //checked matches cerberus output { ent = getent( "nuke_reflection", "targetname" ); if ( isDefined( ent ) ) @@ -1539,14 +1473,14 @@ fake_lighting_cleanup() } } -nuked_collision_patch() +nuked_collision_patch() //checked partially changed to match cerberus output { minimap_upperr = spawn( "script_origin", ( 2146, 1354, 384 ) ); minimap_upperr.targetname = "minimap_corner"; maps/mp/_compass::setupminimap( "compass_map_zm_nuked" ); collision1 = spawn( "script_model", ( -48, -700, 100 ) ); collision1 setmodel( "collision_wall_128x128x10_standard" ); - collision1.angles = ( 0, 1, 0 ); + collision1.angles = ( 0, 0, 0 ); collision1 ghost(); collision2 = spawn( "script_model", ( 11, -759, 100 ) ); collision2 setmodel( "collision_wall_128x128x10_standard" ); @@ -1554,7 +1488,7 @@ nuked_collision_patch() collision2 ghost(); collision3 = spawn( "script_model", ( -48, -818, 100 ) ); collision3 setmodel( "collision_wall_128x128x10_standard" ); - collision3.angles = ( 0, 1, 0 ); + collision3.angles = ( 0, 0, 0 ); collision3 ghost(); collision4 = spawn( "script_model", ( -107, -759, 100 ) ); collision4 setmodel( "collision_wall_128x128x10_standard" ); @@ -1570,23 +1504,23 @@ nuked_collision_patch() collision6 ghost(); collision7 = spawn( "script_model", ( -490, 963, 63 ) ); collision7 setmodel( "collision_player_256x256x10" ); - collision7.angles = ( 0, 25,2, -90 ); + collision7.angles = ( 0, 25.2, -90 ); collision7 ghost(); collision8 = spawn( "script_model", ( 752, 1079, 120 ) ); collision8 setmodel( "collision_player_512x512x10" ); - collision8.angles = vectorScale( ( 0, 1, 0 ), 90 ); + collision8.angles = vectorScale( ( 0, 0, -1 ), 90 ); collision8 ghost(); collision9 = spawn( "script_model", ( -1349, 1016, 0 ) ); collision9 setmodel( "collision_wall_128x128x10_standard" ); - collision9.angles = vectorScale( ( 0, 1, 0 ), 339,8 ); + collision9.angles = vectorScale( ( 0, 1, 0 ), 339.8 ); collision9 ghost(); collision10 = spawn( "script_model", ( 132, 280, 25 ) ); collision10 setmodel( "collision_wall_128x128x10_standard" ); - collision10.angles = vectorScale( ( 0, 1, 0 ), 20,4 ); + collision10.angles = vectorScale( ( 0, 1, 0 ), 20.4 ); collision10 ghost(); } -nuked_special_weapon_magicbox_check( weapon ) +nuked_special_weapon_magicbox_check( weapon ) //checked matches cerberus output { if ( isDefined( level.raygun2_included ) && level.raygun2_included ) { @@ -1611,3 +1545,6 @@ nuked_special_weapon_magicbox_check( weapon ) } return 1; } + + + diff --git a/zm_nuked_patch/readme.md b/zm_nuked_patch/readme.md index ca33379..00e97dc 100644 --- a/zm_nuked_patch/readme.md +++ b/zm_nuked_patch/readme.md @@ -1,6 +1,7 @@ ### The following gscs compile and run successfully with no known errors: ``` zm_nuked_patch/maps/mp/gametypes_zm/zstandard.gsc +zm_nuked_patch/maps/mp/zm_nuked.gsc ``` ### The following scripts compile and run successfully with minor errors: