diff --git a/7za.exe b/7za.exe index bbec817..7f6bf86 100644 Binary files a/7za.exe and b/7za.exe differ diff --git a/compile.bat b/compile.bat index bbe5ffa..bdb4e82 100644 --- a/compile.bat +++ b/compile.bat @@ -8,13 +8,13 @@ @echo off -SET mod_name=promodlive205 +SET mod_name=promodlive210 SET work_directory=%~dp0 cd %work_directory% del ..\%mod_name%\*.iwd -7za a -r -mx=9 -mpass=15 -mfb=258 -mmt=on -mtc=off -tzip ..\%mod_name%\%mod_name%.iwd weapons images sound default_mp.cfg +7za a -r -mx=9 -mpass=15 -mfb=258 -mmt=on -mtc=off -tzip ..\%mod_name%\%mod_name%.iwd weapons images sound 7za a -r -mx=9 -mpass=15 -mfb=258 -mmt=on -mtc=off -tzip ..\%mod_name%\z_custom_ruleset.iwd promod_ruleset compile_fastfile.bat diff --git a/compile_fastfile.bat b/compile_fastfile.bat index 6fc0379..a3f735a 100644 --- a/compile_fastfile.bat +++ b/compile_fastfile.bat @@ -8,6 +8,9 @@ @echo off +SET work_directory=%~dp0 +cd %work_directory% + xcopy maps ..\..\raw\maps\ /SY xcopy promod ..\..\raw\promod\ /SY xcopy shock ..\..\raw\shock\ /SY @@ -21,7 +24,7 @@ copy promod.str ..\..\raw\english\localizedstrings /Y cd ..\..\bin linker_pc.exe -language english -compress -cleanup mod -verbose -cd ..\mods\promodlive205 +cd ..\mods\promodlive210 copy ..\..\zone\english\mod.ff pause diff --git a/default_mp.cfg b/default_mp.cfg deleted file mode 100644 index 67ae6fb..0000000 --- a/default_mp.cfg +++ /dev/null @@ -1,11 +0,0 @@ -exec default_mp_gamesettings.cfg - -set ui_buildLocation -60 460 - -sets __promod_attack_score "" -sets __promod_defence_score "" -sets __promod_ticker "" -sets __promod_version "" -sets __promod_mode "" - -con_showchannel * \ No newline at end of file diff --git a/iwd.cfg b/iwd.cfg new file mode 100644 index 0000000..5637114 --- /dev/null +++ b/iwd.cfg @@ -0,0 +1,14 @@ +pb_sv_md5tool a "" v main/iw_00.iwd SZ167780172 AT0 LEN2048 BC02FE65F2C013DB4C1480D59F1CB93F +pb_sv_md5tool a "" v main/iw_01.iwd SZ167885112 AT0 LEN2048 "55EFD479424E487756BC3EE3A7AF3799 4FDB703797393D3493E4B4BAE0B0A3CF" +pb_sv_md5tool a "" v main/iw_02.iwd SZ166957774 AT0 LEN2048 "8067C044C6A133C2F5D1B3E2B3E59CDC 1438B3EAED4FD8D654326933263C6C9F" +pb_sv_md5tool a "" v main/iw_03.iwd SZ166904484 AT0 LEN2048 "724442AC8D8E6415425C0B3E9FE6AC5A E47150F42B30F5F4F928F7AA8B6ACBEC" +pb_sv_md5tool a "" v main/iw_04.iwd SZ167682009 AT0 LEN2048 "5688EA7D04308440876DE31B84484419 70199C90F845078AE6B3EC53DAA1BDF8" +pb_sv_md5tool a "" v main/iw_05.iwd SZ167489996 AT0 LEN2048 "4865724D59BB73514DCBF557A9B21CFE A74997AFC0FE4A2BB9E9CB78DD0E1C05" +pb_sv_md5tool a "" v main/iw_06.iwd SZ167754503 AT0 LEN2048 "8CD0E80D88FD95AE3D5DF80D0AD29EB7 D74754503B511CDCA5B146DB3D9A24E8" +pb_sv_md5tool a "" v main/iw_07.iwd SZ162987361 AT0 LEN2048 E20C159359BED1E6BD9C23FC6D52631F +pb_sv_md5tool a "" v main/iw_08.iwd SZ167544651 AT0 LEN2048 F5B2959EDFED674AB47E59CFA1B2A3DA +pb_sv_md5tool a "" v main/iw_09.iwd SZ167076481 AT0 LEN2048 310374CB0F5ABF3880AEE5798FE269C9 +pb_sv_md5tool a "" v main/iw_10.iwd SZ165389824 AT0 LEN2048 9D53044FAD09B8BAF10FE4E9F08DFA59 +pb_sv_md5tool a "" v main/iw_11.iwd SZ151420446 AT0 LEN2048 3D429842C2F904EB13C5129E8A77582B +pb_sv_md5tool a "" v main/iw_12.iwd SZ5559373 AT0 LEN2048 6A0F0960BA6BCE04A8134A5B2E88D3EE +pb_sv_md5tool a "" v main/iw_13.iwd SZ28644036 AT0 LEN2048 89BD98431CD72ED0FD3E08DB87952BD5 \ No newline at end of file diff --git a/maps/createfx/mp_backlot_fx.gsc b/maps/createfx/mp_backlot_fx.gsc index 6ee7460..afca4a5 100644 --- a/maps/createfx/mp_backlot_fx.gsc +++ b/maps/createfx/mp_backlot_fx.gsc @@ -1,4 +1,2 @@ //_createfx generated. Do not touch!! -main() -{ -} +main(){} \ No newline at end of file diff --git a/maps/createfx/mp_bloc_fx.gsc b/maps/createfx/mp_bloc_fx.gsc index 6ee7460..afca4a5 100644 --- a/maps/createfx/mp_bloc_fx.gsc +++ b/maps/createfx/mp_bloc_fx.gsc @@ -1,4 +1,2 @@ //_createfx generated. Do not touch!! -main() -{ -} +main(){} \ No newline at end of file diff --git a/maps/createfx/mp_bog_fx.gsc b/maps/createfx/mp_bog_fx.gsc index 6ee7460..afca4a5 100644 --- a/maps/createfx/mp_bog_fx.gsc +++ b/maps/createfx/mp_bog_fx.gsc @@ -1,4 +1,2 @@ //_createfx generated. Do not touch!! -main() -{ -} +main(){} \ No newline at end of file diff --git a/maps/createfx/mp_broadcast_fx.gsc b/maps/createfx/mp_broadcast_fx.gsc index 6ee7460..afca4a5 100644 --- a/maps/createfx/mp_broadcast_fx.gsc +++ b/maps/createfx/mp_broadcast_fx.gsc @@ -1,4 +1,2 @@ //_createfx generated. Do not touch!! -main() -{ -} +main(){} \ No newline at end of file diff --git a/maps/createfx/mp_carentan_fx.gsc b/maps/createfx/mp_carentan_fx.gsc index 6ee7460..afca4a5 100644 --- a/maps/createfx/mp_carentan_fx.gsc +++ b/maps/createfx/mp_carentan_fx.gsc @@ -1,4 +1,2 @@ //_createfx generated. Do not touch!! -main() -{ -} +main(){} \ No newline at end of file diff --git a/maps/createfx/mp_cargoship_fx.gsc b/maps/createfx/mp_cargoship_fx.gsc index 6ee7460..afca4a5 100644 --- a/maps/createfx/mp_cargoship_fx.gsc +++ b/maps/createfx/mp_cargoship_fx.gsc @@ -1,4 +1,2 @@ //_createfx generated. Do not touch!! -main() -{ -} +main(){} \ No newline at end of file diff --git a/maps/createfx/mp_citystreets_fx.gsc b/maps/createfx/mp_citystreets_fx.gsc index 6ee7460..afca4a5 100644 --- a/maps/createfx/mp_citystreets_fx.gsc +++ b/maps/createfx/mp_citystreets_fx.gsc @@ -1,4 +1,2 @@ //_createfx generated. Do not touch!! -main() -{ -} +main(){} \ No newline at end of file diff --git a/maps/createfx/mp_convoy_fx.gsc b/maps/createfx/mp_convoy_fx.gsc index 6ee7460..afca4a5 100644 --- a/maps/createfx/mp_convoy_fx.gsc +++ b/maps/createfx/mp_convoy_fx.gsc @@ -1,4 +1,2 @@ //_createfx generated. Do not touch!! -main() -{ -} +main(){} \ No newline at end of file diff --git a/maps/createfx/mp_countdown_fx.gsc b/maps/createfx/mp_countdown_fx.gsc index 6ee7460..afca4a5 100644 --- a/maps/createfx/mp_countdown_fx.gsc +++ b/maps/createfx/mp_countdown_fx.gsc @@ -1,4 +1,2 @@ //_createfx generated. Do not touch!! -main() -{ -} +main(){} \ No newline at end of file diff --git a/maps/createfx/mp_crash_fx.gsc b/maps/createfx/mp_crash_fx.gsc index 6ee7460..afca4a5 100644 --- a/maps/createfx/mp_crash_fx.gsc +++ b/maps/createfx/mp_crash_fx.gsc @@ -1,4 +1,2 @@ //_createfx generated. Do not touch!! -main() -{ -} +main(){} \ No newline at end of file diff --git a/maps/createfx/mp_crash_snow_fx.gsc b/maps/createfx/mp_crash_snow_fx.gsc index 6ee7460..afca4a5 100644 --- a/maps/createfx/mp_crash_snow_fx.gsc +++ b/maps/createfx/mp_crash_snow_fx.gsc @@ -1,4 +1,2 @@ //_createfx generated. Do not touch!! -main() -{ -} +main(){} \ No newline at end of file diff --git a/maps/createfx/mp_creek_fx.gsc b/maps/createfx/mp_creek_fx.gsc index 6ee7460..afca4a5 100644 --- a/maps/createfx/mp_creek_fx.gsc +++ b/maps/createfx/mp_creek_fx.gsc @@ -1,4 +1,2 @@ //_createfx generated. Do not touch!! -main() -{ -} +main(){} \ No newline at end of file diff --git a/maps/createfx/mp_crossfire_fx.gsc b/maps/createfx/mp_crossfire_fx.gsc index 6ee7460..afca4a5 100644 --- a/maps/createfx/mp_crossfire_fx.gsc +++ b/maps/createfx/mp_crossfire_fx.gsc @@ -1,4 +1,2 @@ //_createfx generated. Do not touch!! -main() -{ -} +main(){} \ No newline at end of file diff --git a/maps/createfx/mp_farm_fx.gsc b/maps/createfx/mp_farm_fx.gsc index 6ee7460..afca4a5 100644 --- a/maps/createfx/mp_farm_fx.gsc +++ b/maps/createfx/mp_farm_fx.gsc @@ -1,4 +1,2 @@ //_createfx generated. Do not touch!! -main() -{ -} +main(){} \ No newline at end of file diff --git a/maps/createfx/mp_killhouse_fx.gsc b/maps/createfx/mp_killhouse_fx.gsc index 6ee7460..afca4a5 100644 --- a/maps/createfx/mp_killhouse_fx.gsc +++ b/maps/createfx/mp_killhouse_fx.gsc @@ -1,4 +1,2 @@ //_createfx generated. Do not touch!! -main() -{ -} +main(){} \ No newline at end of file diff --git a/maps/createfx/mp_overgrown_fx.gsc b/maps/createfx/mp_overgrown_fx.gsc index 6ee7460..afca4a5 100644 --- a/maps/createfx/mp_overgrown_fx.gsc +++ b/maps/createfx/mp_overgrown_fx.gsc @@ -1,4 +1,2 @@ //_createfx generated. Do not touch!! -main() -{ -} +main(){} \ No newline at end of file diff --git a/maps/createfx/mp_pipeline_fx.gsc b/maps/createfx/mp_pipeline_fx.gsc index 6ee7460..afca4a5 100644 --- a/maps/createfx/mp_pipeline_fx.gsc +++ b/maps/createfx/mp_pipeline_fx.gsc @@ -1,4 +1,2 @@ //_createfx generated. Do not touch!! -main() -{ -} +main(){} \ No newline at end of file diff --git a/maps/createfx/mp_shipment_fx.gsc b/maps/createfx/mp_shipment_fx.gsc index 6ee7460..afca4a5 100644 --- a/maps/createfx/mp_shipment_fx.gsc +++ b/maps/createfx/mp_shipment_fx.gsc @@ -1,4 +1,2 @@ //_createfx generated. Do not touch!! -main() -{ -} +main(){} \ No newline at end of file diff --git a/maps/createfx/mp_showdown_fx.gsc b/maps/createfx/mp_showdown_fx.gsc index 6ee7460..afca4a5 100644 --- a/maps/createfx/mp_showdown_fx.gsc +++ b/maps/createfx/mp_showdown_fx.gsc @@ -1,4 +1,2 @@ //_createfx generated. Do not touch!! -main() -{ -} +main(){} \ No newline at end of file diff --git a/maps/createfx/mp_strike_fx.gsc b/maps/createfx/mp_strike_fx.gsc index 6ee7460..afca4a5 100644 --- a/maps/createfx/mp_strike_fx.gsc +++ b/maps/createfx/mp_strike_fx.gsc @@ -1,4 +1,2 @@ //_createfx generated. Do not touch!! -main() -{ -} +main(){} \ No newline at end of file diff --git a/maps/createfx/mp_vacant_fx.gsc b/maps/createfx/mp_vacant_fx.gsc index 6ee7460..afca4a5 100644 --- a/maps/createfx/mp_vacant_fx.gsc +++ b/maps/createfx/mp_vacant_fx.gsc @@ -1,4 +1,2 @@ //_createfx generated. Do not touch!! -main() -{ -} +main(){} \ No newline at end of file diff --git a/maps/mp/_destructible.gsc b/maps/mp/_destructible.gsc index cfc0100..cc209bf 100644 --- a/maps/mp/_destructible.gsc +++ b/maps/mp/_destructible.gsc @@ -261,7 +261,7 @@ find_destructibles() array_thread( getentarray( "destructible", "targetname" ), ::setup_destructibles ); } -precache_destructibles( ) +precache_destructibles() { if ( isdefined( level.destructible_type[self.destuctableInfo].parts ) ) { @@ -339,7 +339,7 @@ damage_mirror( parent, modelName, tagName ) parent endon( "stop_taking_damage" ); self setCanDamage( true ); - for ( ;; ) + for(;;) { self waittill ( "damage", damage, attacker, direction_vec, point, type ); parent notify ( "damage", damage, attacker, direction_vec, point, type, modelName, tagName ); @@ -353,12 +353,7 @@ destructible_think() { self waittill( "damage", damage, attacker, direction_vec, point, type, modelName, tagName, partName, dflags ); - if ( !isdefined( damage ) ) - continue; - if ( damage <= 0 ) - continue; - - if ( isDefined( level.strat_over ) && !level.strat_over ) + if ( !isdefined( damage ) || damage <= 0 || ( isDefined( level.strat_over ) && !level.strat_over ) ) continue; if ( isDefined( attacker ) && isPlayer( attacker ) ) @@ -395,9 +390,7 @@ destructible_think() destructible_update_part( damage, modelName, tagName, point, direction_vec, attacker, damageType ) { - if ( !isdefined( self.destructible_parts ) ) - return; - if ( !self.destructible_parts.size ) + if ( !isdefined( self.destructible_parts ) || !self.destructible_parts.size ) return; partIndex = -1; @@ -415,22 +408,13 @@ destructible_update_part( damage, modelName, tagName, point, direction_vec, atta { stateIndex = self.destructible_parts[ i ].v[ "currentState" ]; - if( level.destructible_type[ self.destuctableInfo ].parts[ i ].size <= stateIndex ) - continue; - - if( !isdefined( tagName ) ) - continue; - - if( !isdefined( level.destructible_type[ self.destuctableInfo ].parts[ i ][ stateIndex ].v[ "modelName" ] ) ) + if( level.destructible_type[ self.destuctableInfo ].parts[ i ].size <= stateIndex || !isdefined( tagName ) || !isdefined( level.destructible_type[ self.destuctableInfo ].parts[ i ][ stateIndex ].v[ "modelName" ] ) ) continue; - if ( isDefined( level.destructible_type[ self.destuctableInfo ].parts[ i ][ stateIndex ].v[ "tagName" ] ) ) + if ( isDefined( level.destructible_type[ self.destuctableInfo ].parts[ i ][ stateIndex ].v[ "tagName" ] ) && level.destructible_type[ self.destuctableInfo ].parts[ i ][ stateIndex ].v[ "tagName" ] == tagName ) { - if ( level.destructible_type[ self.destuctableInfo ].parts[ i ][ stateIndex ].v[ "tagName" ] == tagName ) - { - partIndex = i; - break; - } + partIndex = i; + break; } } assert( stateIndex >= 0 ); @@ -448,19 +432,14 @@ destructible_update_part( damage, modelName, tagName, point, direction_vec, atta if ( !isdefined( level.destructible_type[ self.destuctableInfo ].parts[ partIndex ][ stateIndex ] ) ) break; - if ( isdefined( level.destructible_type[ self.destuctableInfo ].parts[ partIndex ][ 0 ].v[ "alsoDamageParent" ] ) ) + if ( isdefined( level.destructible_type[ self.destuctableInfo ].parts[ partIndex ][ 0 ].v[ "alsoDamageParent" ] ) && getDamageType( damageType ) != "splash" ) { - if ( getDamageType( damageType ) != "splash" ) - { - ratio = level.destructible_type[ self.destuctableInfo ].parts[ partIndex ][ 0 ].v[ "alsoDamageParent" ]; - parentDamage = int( damage * ratio ); - self thread notifyDamageAfterFrame( parentDamage, attacker, direction_vec, point, damageType, "", "" ); - } + ratio = level.destructible_type[ self.destuctableInfo ].parts[ partIndex ][ 0 ].v[ "alsoDamageParent" ]; + parentDamage = int( damage * ratio ); + self thread notifyDamageAfterFrame( parentDamage, attacker, direction_vec, point, damageType, "", "" ); } - if ( !isdefined( level.destructible_type[ self.destuctableInfo ].parts[ partIndex ][ stateIndex ].v[ "health" ] ) ) - break; - if ( !isdefined( self.destructible_parts[ partIndex ].v[ "health" ] ) ) + if ( !isdefined( level.destructible_type[ self.destuctableInfo ].parts[ partIndex ][ stateIndex ].v[ "health" ] ) || !isdefined( self.destructible_parts[ partIndex ].v[ "health" ] ) ) break; if ( updateHealthValue ) @@ -481,23 +460,17 @@ destructible_update_part( damage, modelName, tagName, point, direction_vec, atta } if ( self.destructible_parts[ partIndex ].v[ "health" ] > 0 ) - { return; - } damage = int( abs( self.destructible_parts[ partIndex ].v[ "health" ] ) ); if ( damage < 0 ) - { return; - } self.destructible_parts[ partIndex ].v[ "currentState" ]++; stateIndex = self.destructible_parts[ partIndex ].v[ "currentState" ]; actionStateIndex = ( stateIndex - 1 ); if ( !isdefined( level.destructible_type[ self.destuctableInfo ].parts[ partIndex ][ actionStateIndex ] ) ) - { return; - } if ( isdefined( level.destructible_type[ self.destuctableInfo ].parts[ partIndex ][ actionStateIndex ].v[ "explode_force_min" ] ) ) self.exploding = true; @@ -505,9 +478,7 @@ destructible_update_part( damage, modelName, tagName, point, direction_vec, atta if ( ( isdefined( self.loopingSoundStopNotifies ) ) && ( isdefined( self.loopingSoundStopNotifies[ string( partIndex ) ] ) ) ) { for( i = 0 ; i < self.loopingSoundStopNotifies[ string( partIndex ) ].size ; i++ ) - { self notify( self.loopingSoundStopNotifies[ string( partIndex ) ][ i ] ); - } self.loopingSoundStopNotifies[ string( partIndex ) ] = undefined; } @@ -536,9 +507,7 @@ destructible_update_part( damage, modelName, tagName, point, direction_vec, atta fx_tag = level.destructible_type[ self.destuctableInfo ].parts[ partIndex ][ actionStateIndex ].v[ "fx_tag" ]; self notify( "FX_State_Change" + partIndex ); if ( level.destructible_type[ self.destuctableInfo ].parts[ partIndex ][ actionStateIndex ].v[ "fx_useTagAngles" ] ) - { playfxontag ( fx, self, fx_tag ); - } else { fxOrigin = self getTagOrigin( fx_tag ); @@ -557,35 +526,29 @@ destructible_update_part( damage, modelName, tagName, point, direction_vec, atta self thread loopfx_onTag( loopfx, loopfx_tag, loopRate, partIndex ); } - if ( !isdefined( self.exploded ) ) + if ( !isdefined( self.exploded ) && isdefined( level.destructible_type[ self.destuctableInfo ].parts[ partIndex ][ actionStateIndex ].v[ "anim" ] ) ) { - if ( isdefined( level.destructible_type[ self.destuctableInfo ].parts[ partIndex ][ actionStateIndex ].v[ "anim" ] ) ) - { - animName = level.destructible_type[ self.destuctableInfo ].parts[ partIndex ][ actionStateIndex ].v[ "anim" ]; - animTree = level.destructible_type[ self.destuctableInfo ].parts[ partIndex ][ actionStateIndex ].v[ "animTree" ]; - if ( !isdefined( self.animsApplied ) ) - self.animsApplied = []; - self.animsApplied[ self.animsApplied.size ] = animName; - - if ( !partIndex ) - self thread explodeAnim(); - } + animName = level.destructible_type[ self.destuctableInfo ].parts[ partIndex ][ actionStateIndex ].v[ "anim" ]; + animTree = level.destructible_type[ self.destuctableInfo ].parts[ partIndex ][ actionStateIndex ].v[ "animTree" ]; + if ( !isdefined( self.animsApplied ) ) + self.animsApplied = []; + self.animsApplied[ self.animsApplied.size ] = animName; + + if ( !partIndex ) + self thread explodeAnim(); } - if ( !isdefined( self.exploded ) ) + if ( !isdefined( self.exploded ) && isdefined( level.destructible_type[ self.destuctableInfo ].parts[ partIndex ][ actionStateIndex ].v[ "sound" ] ) ) { - if ( isdefined( level.destructible_type[ self.destuctableInfo ].parts[ partIndex ][ actionStateIndex ].v[ "sound" ] ) ) + for( i = 0 ; i < level.destructible_type[ self.destuctableInfo ].parts[ partIndex ][ actionStateIndex ].v[ "sound" ].size ; i++ ) { - for( i = 0 ; i < level.destructible_type[ self.destuctableInfo ].parts[ partIndex ][ actionStateIndex ].v[ "sound" ].size ; i++ ) + validSoundCause = self isValidSoundCause( "soundCause", partIndex, actionStateIndex, i, damageType ); + if ( validSoundCause ) { - validSoundCause = self isValidSoundCause( "soundCause", partIndex, actionStateIndex, i, damageType ); - if ( validSoundCause ) - { - soundAlias = level.destructible_type[ self.destuctableInfo ].parts[ partIndex ][ actionStateIndex ].v[ "sound" ][ i ]; - soundTagName = level.destructible_type[ self.destuctableInfo ].parts[ partIndex ][ actionStateIndex ].v[ "tagName" ]; + soundAlias = level.destructible_type[ self.destuctableInfo ].parts[ partIndex ][ actionStateIndex ].v[ "sound" ][ i ]; + soundTagName = level.destructible_type[ self.destuctableInfo ].parts[ partIndex ][ actionStateIndex ].v[ "tagName" ]; - self thread play_sound_on_tag( soundAlias, soundTagName ); - } + self thread play_sound_on_tag( soundAlias, soundTagName ); } } } @@ -645,10 +608,7 @@ destructible_update_part( damage, modelName, tagName, point, direction_vec, atta destructible_splash_damage( damage, point, direction_vec, attacker, damageType ) { - if ( damage <= 0 ) - return; - - if ( isDefined( self.exploded ) ) + if ( damage <= 0 || isDefined( self.exploded ) ) return; damagedParts = []; @@ -692,11 +652,7 @@ destructible_splash_damage( damage, point, direction_vec, attacker, damageType ) } } - if ( !isdefined( closestPartDist ) ) - return; - if ( closestPartDist < 0 ) - return; - if ( damagedParts.size <= 0 ) + if ( !isdefined( closestPartDist ) || closestPartDist < 0 || damagedParts.size <= 0 ) return; for( i = 0 ; i < damagedParts.size ; i++ ) @@ -704,10 +660,7 @@ destructible_splash_damage( damage, point, direction_vec, attacker, damageType ) distanceMod = ( damagedParts[ i ].v[ "distance" ] * 1.4 ); damageAmount = ( damage - ( distanceMod - closestPartDist ) ); - if ( damageAmount <= 0 ) - continue; - - if ( isDefined( self.exploded ) ) + if ( damageAmount <= 0 || isDefined( self.exploded ) ) continue; self thread destructible_update_part( damageAmount, damagedParts[ i ].v[ "modelName" ], damagedParts[ i ].v[ "tagName" ], point, direction_vec, attacker, damageType); @@ -717,10 +670,7 @@ destructible_splash_damage( damage, point, direction_vec, attacker, damageType ) isValidSoundCause( soundCauseVar, partIndex, stateIndex, soundIndex, damageType ) { soundCause = level.destructible_type[ self.destuctableInfo ].parts[ partIndex ][ stateIndex ].v[ soundCauseVar ][ soundIndex ]; - if ( !isdefined( soundCause ) ) - return true; - - if ( soundCause == damageType ) + if ( !isdefined( soundCause ) || soundCause == damageType ) return true; return false; @@ -728,19 +678,13 @@ isValidSoundCause( soundCauseVar, partIndex, stateIndex, soundIndex, damageType isAttackerValid( partIndex, stateIndex, attacker ) { - if ( !isdefined( attacker ) ) - return true; - return true; } isValidDamageCause( partIndex, stateIndex, damageType ) { - if ( !isdefined( damageType ) ) - return true; - validType = level.destructible_type[ self.destuctableInfo ].parts[ partIndex ][ stateIndex ].v[ "validDamageCause" ]; - if ( !isdefined( validType ) ) + if ( !isdefined( damageType ) || !isdefined( validType ) ) return true; if ( ( validType == "no_melee" ) && damageType == "melee" || damageType == "impact" ) @@ -774,8 +718,6 @@ getDamageType( type ) return "splash"; case "mod_impact": return "impact"; - case "unknown": - return "unknown"; default: return "unknown"; } @@ -879,7 +821,12 @@ deleteEnt( ent ) ent delete(); } -hideapart( tagName ){ self hidepart( tagName );}showapart( tagName ) +hideapart( tagName ) +{ + self hidepart( tagName ); +} + +showapart( tagName ) { self showpart( tagName ); } @@ -888,7 +835,7 @@ explodeAnim() { self moveZ( 16, 0.3, 0, 0.2 ); self rotatePitch( 10, 0.3, 0, 0.2 ); - wait ( 0.3 ); + wait 0.3; self moveZ( -16, 0.3, 0.15, 0 ); self rotatePitch( -10, 0.3, 0.15, 0 ); } \ No newline at end of file diff --git a/maps/mp/_destructible_types.gsc b/maps/mp/_destructible_types.gsc index 4da99f2..ab6bab3 100644 --- a/maps/mp/_destructible_types.gsc +++ b/maps/mp/_destructible_types.gsc @@ -111,9 +111,7 @@ makeType( destructibleType ) getInfoIndex( destructibleType ) { - if ( !isdefined( level.destructible_type ) ) - return -1; - if ( !level.destructible_type.size ) + if ( !isdefined( level.destructible_type ) || !level.destructible_type.size ) return -1; for( i = 0 ; i < level.destructible_type.size ; i++ ) diff --git a/maps/mp/_explosive_barrels.gsc b/maps/mp/_explosive_barrels.gsc index 4df538c..9f659bc 100644 --- a/maps/mp/_explosive_barrels.gsc +++ b/maps/mp/_explosive_barrels.gsc @@ -63,7 +63,7 @@ oil_spill_think() self thread oil_spill_burn_after(); } - while(1) + for(;;) { self waittill("damage", other, damage, direction_vec, P, type ); if(type == "MOD_MELEE" || type == "MOD_IMPACT" || isDefined( level.strat_over ) && !level.strat_over) @@ -107,7 +107,7 @@ getClosestEnt(org, array) oil_spill_burn_after() { - while(1) + for(;;) { self.barrel waittill("damage", amount ,attacker, direction_vec, P, type); if(type == "MOD_MELEE" || type == "MOD_IMPACT" || isDefined( level.strat_over ) && !level.strat_over) @@ -137,10 +137,10 @@ oil_spill_burn(P, dest) test = spawn("script_origin", P); num = 0; - while(1) + for(;;) { dist -= range; - if(dist < range *.1) + if(dist < range * 0.1) break; p += (interval + vector_multiply(right, randomfloatrange(-6, 6))); @@ -148,9 +148,7 @@ oil_spill_burn(P, dest) thread oil_spill_burn_section(P); num++; if(num == 4) - { num = 0; - } test.origin = P; @@ -175,7 +173,7 @@ oil_spill_burn(P, dest) } for(i=0; i self.flashRumbleDuration ) self.flashRumbleDuration = rumbleduration; - wait .05; + wait 0.05; if ( isDefined( self.flashDuration ) ) { @@ -121,9 +121,7 @@ applyFlash(duration, rumbleduration) self thread overlapProtect(duration); if ( isDefined( self.flashRumbleDuration ) ) - { self thread flashRumbleLoop( self.flashRumbleDuration ); - } self.flashRumbleDuration = undefined; } diff --git a/maps/mp/_load.gsc b/maps/mp/_load.gsc index 7980014..5b27722 100644 --- a/maps/mp/_load.gsc +++ b/maps/mp/_load.gsc @@ -220,6 +220,4 @@ setupExploders() } } -script_gen_dump() -{ -} \ No newline at end of file +script_gen_dump(){} \ No newline at end of file diff --git a/maps/mp/gametypes/_class.gsc b/maps/mp/gametypes/_class.gsc index f68a0cc..23f173c 100644 --- a/maps/mp/gametypes/_class.gsc +++ b/maps/mp/gametypes/_class.gsc @@ -142,24 +142,10 @@ giveLoadout( team, class ) } } - switch ( class ) - { - case "assault": - self setMoveSpeedScale( 0.95 ); - break; - case "specops": - self setMoveSpeedScale( 1.0 ); - break; - case "demolitions": - self setMoveSpeedScale( 1.0 ); - break; - case "sniper": - self setMoveSpeedScale( 1.0 ); - break; - default: - self setMoveSpeedScale( 1.0 ); - break; - } + if( class == "assault" ) + self setMoveSpeedScale( 0.95 ); + else + self setMoveSpeedScale( 1.0 ); } preserveClass( class ) @@ -256,21 +242,6 @@ set_config( dataName, value ) self setStat( int( tableLookup( "promod/customStatsTable.csv", 1, dataName, 0 ) ), value ); } -setWeaponAmmoOverall( weaponname, amount ) -{ - if ( isWeaponClipOnly( weaponname ) ) - { - self setWeaponAmmoClip( weaponname, amount ); - } - else - { - self setWeaponAmmoClip( weaponname, amount ); - diff = amount - self getWeaponAmmoClip( weaponname ); - assert( diff >= 0 ); - self setWeaponAmmoStock( weaponname, diff ); - } -} - onPlayerConnecting() { for(;;) @@ -287,6 +258,8 @@ setClass( newClass ) { self setClientDvar( "loadout_curclass", newClass ); self.curClass = newClass; + + self thread promod\shoutcast::setShoutClass(); } cac_modified_damage( victim, attacker, damage, meansofdeath ) @@ -298,7 +271,6 @@ cac_modified_damage( victim, attacker, damage, meansofdeath ) if( meansofdeath == "" ) return damage; - old_damage = damage; final_damage = damage; if( isPrimaryDamage( meansofdeath ) ) diff --git a/maps/mp/gametypes/_gameobjects.gsc b/maps/mp/gametypes/_gameobjects.gsc index 930f973..e5c09aa 100644 --- a/maps/mp/gametypes/_gameobjects.gsc +++ b/maps/mp/gametypes/_gameobjects.gsc @@ -37,9 +37,7 @@ main(allowed) } if(dodelete) - { entitytypes[i] delete(); - } } } } @@ -59,7 +57,7 @@ onPlayerConnect() { level endon ( "game_ended" ); - for( ;; ) + for(;;) { level waittill( "connecting", player ); @@ -128,13 +126,13 @@ createCarryObject( ownerTeam, trigger, visuals, offset ) carryObject.offset3d = offset; - for ( index = 0; index < visuals.size; index++ ) + for ( i = 0; i < visuals.size; i++ ) { - visuals[index].baseOrigin = visuals[index].origin; - visuals[index].baseAngles = visuals[index].angles; + visuals[i].baseOrigin = visuals[i].origin; + visuals[i].baseAngles = visuals[i].angles; } - carryObject.visuals = visuals; + carryObject.visuals = visuals; carryObject.compassIcons = []; carryObject.objIDAllies = getNextObjID(); carryObject.objIDAxis = getNextObjID(); @@ -183,26 +181,11 @@ carryObjectUseThink() { level endon ( "game_ended" ); - while ( true ) + for(;;) { self.trigger waittill ( "trigger", player ); - if ( self.isResetting ) - continue; - - if ( !isAlive( player ) ) - continue; - - if ( !self canInteractWith( player.pers["team"] ) ) - continue; - - if ( !player.canPickupObject ) - continue; - - if ( player.throwingGrenade ) - continue; - - if ( isDefined( self.carrier ) ) + if ( self.isResetting || !isAlive( player ) || !self canInteractWith( player.pers["team"] ) || !player.canPickupObject || player.throwingGrenade || isDefined( self.carrier ) ) continue; self setPickedUp( player ); @@ -213,26 +196,14 @@ carryObjectProxThink() { level endon ( "game_ended" ); - while ( true ) + for(;;) { self.trigger waittill ( "trigger", player ); - if ( self.isResetting ) - continue; - - if ( !isAlive( player ) ) - continue; - - if ( !self canInteractWith( player.pers["team"] ) ) - continue; - - if ( !player.canPickupObject ) + if ( self.isResetting || !isAlive( player ) || !self canInteractWith( player.pers["team"] ) || !player.canPickupObject || isDefined( self.carrier ) ) continue; - if ( isDefined( self.carrier ) ) - continue; - - if (isDefined(level.timeout_over) && !level.timeout_over) + if ( (isDefined( level.timeout_over ) && !level.timeout_over) || ( isDefined( game["PROMOD_KNIFEROUND"] ) && game["PROMOD_KNIFEROUND"] ) ) return; self setPickedUp( player ); @@ -248,7 +219,7 @@ pickupObjectDelay( origin ) self.canPickupObject = false; - for( ;; ) + for(;;) { if ( distanceSquared( self.origin, origin ) > 4096 ) break; @@ -273,8 +244,8 @@ setPickedUp( player ) self setCarrier( player ); - for ( index = 0; index < self.visuals.size; index++ ) - self.visuals[index] hide(); + for ( i = 0; i < self.visuals.size; i++ ) + self.visuals[i] hide(); self.trigger.origin += (0,0,10000); @@ -291,7 +262,7 @@ updateCarryObjectOrigin() level endon ( "game_ended" ); objPingDelay = 5.0; - for ( ;; ) + for(;;) { if ( isDefined( self.carrier ) ) { @@ -348,7 +319,7 @@ updateCarryObjectOrigin() self.objPoints["allies"] maps\mp\gametypes\_objpoints::updateOrigin( self.curOrigin + self.offset3d ); self.objPoints["axis"] maps\mp\gametypes\_objpoints::updateOrigin( self.curOrigin + self.offset3d ); - wait ( .05 ); + wait 0.05; } } } @@ -382,11 +353,11 @@ returnHome() self.isResetting = true; self notify ( "reset" ); - for ( index = 0; index < self.visuals.size; index++ ) + for ( i = 0; i < self.visuals.size; i++ ) { - self.visuals[index].origin = self.visuals[index].baseOrigin; - self.visuals[index].angles = self.visuals[index].baseAngles; - self.visuals[index] show(); + self.visuals[i].origin = self.visuals[i].baseOrigin; + self.visuals[i].angles = self.visuals[i].baseAngles; + self.visuals[i] show(); } self.trigger.origin = self.trigger.baseOrigin; @@ -407,11 +378,11 @@ setPosition( origin, angles ) { self.isResetting = true; - for ( index = 0; index < self.visuals.size; index++ ) + for ( i = 0; i < self.visuals.size; i++ ) { - self.visuals[index].origin = self.origin; - self.visuals[index].angles = self.angles; - self.visuals[index] show(); + self.visuals[i].origin = self.origin; + self.visuals[i].angles = self.angles; + self.visuals[i] show(); } self.trigger.origin = origin; @@ -460,11 +431,11 @@ setDropped() dropAngles = (0,tempAngle,0); } - for ( index = 0; index < self.visuals.size; index++ ) + for ( i = 0; i < self.visuals.size; i++ ) { - self.visuals[index].origin = dropOrigin; - self.visuals[index].angles = dropAngles; - self.visuals[index] show(); + self.visuals[i].origin = dropOrigin; + self.visuals[i].angles = dropAngles; + self.visuals[i] show(); } self.trigger.origin = dropOrigin; @@ -474,11 +445,11 @@ setDropped() } else { - for ( index = 0; index < self.visuals.size; index++ ) + for ( i = 0; i < self.visuals.size; i++ ) { - self.visuals[index].origin = self.visuals[index].baseOrigin; - self.visuals[index].angles = self.visuals[index].baseAngles; - self.visuals[index] show(); + self.visuals[i].origin = self.visuals[i].baseOrigin; + self.visuals[i].angles = self.visuals[i].baseAngles; + self.visuals[i] show(); } self.trigger.origin = self.trigger.baseOrigin; @@ -520,23 +491,23 @@ pickupTimeout() self endon ( "pickup_object" ); self endon ( "stop_pickup_timeout" ); - wait ( .05 ); + wait 0.05; mineTriggers = getEntArray( "minefield", "targetname" ); hurtTriggers = getEntArray( "trigger_hurt", "classname" ); - for ( index = 0; index < mineTriggers.size; index++ ) + for ( i = 0; i < mineTriggers.size; i++ ) { - if ( !self.visuals[0] isTouching( mineTriggers[index] ) ) + if ( !self.visuals[0] isTouching( mineTriggers[i] ) ) continue; self returnHome(); return; } - for ( index = 0; index < hurtTriggers.size; index++ ) + for ( i = 0; i < hurtTriggers.size; i++ ) { - if ( !self.visuals[0] isTouching( hurtTriggers[index] ) ) + if ( !self.visuals[0] isTouching( hurtTriggers[i] ) ) continue; self returnHome(); @@ -545,7 +516,7 @@ pickupTimeout() if ( isDefined( self.autoResetTime ) ) { - wait ( self.autoResetTime ); + wait self.autoResetTime; if ( !isDefined( self.carrier ) ) self returnHome(); @@ -587,7 +558,7 @@ trackCarrier() if ( trace["fraction"] < 1 ) self.carryObject.safeOrigin = trace["position"]; } - wait ( .05 ); + wait 0.05; } } @@ -599,13 +570,13 @@ manualDropThink() self endon ( "death" ); self endon ( "drop_object" ); - for( ;; ) + for(;;) { while ( self attackButtonPressed() || self fragButtonPressed() || self secondaryOffhandButtonPressed() || self meleeButtonPressed() ) - wait .05; + wait 0.05; while ( !self attackButtonPressed() && !self fragButtonPressed() && !self secondaryOffhandButtonPressed() && !self meleeButtonPressed() ) - wait .05; + wait 0.05; if ( isDefined( self.carryObject ) && !self useButtonPressed() ) self.carryObject thread setDropped(); @@ -628,10 +599,10 @@ createUseObject( ownerTeam, trigger, visuals, offset ) useObject.trigger = trigger; - for ( index = 0; index < visuals.size; index++ ) + for ( i = 0; i < visuals.size; i++ ) { - visuals[index].baseOrigin = visuals[index].origin; - visuals[index].baseAngles = visuals[index].angles; + visuals[i].baseOrigin = visuals[i].origin; + visuals[i].baseAngles = visuals[i].angles; } useObject.visuals = visuals; @@ -706,23 +677,11 @@ useObjectUseThink() level endon ( "game_ended" ); - while ( true ) + for(;;) { self.trigger waittill ( "trigger", player ); - if ( !isAlive( player ) ) - continue; - - if ( isDefined(player.attaching) && player.attaching ) - continue; - - if ( !self canInteractWith( player.pers["team"] ) ) - continue; - - if ( !player isOnGround() ) - continue; - - if ( !player isTouching( self.trigger ) ) + if ( !isAlive( player ) || ( isDefined(player.attaching) && player.attaching ) || !self canInteractWith( player.pers["team"] ) || !player isOnGround() || !player isTouching( self.trigger ) ) continue; if ( isDefined( self.keyObject ) && (!isDefined( player.carryObject ) || player.carryObject != self.keyObject ) ) @@ -765,9 +724,9 @@ getEarliestClaimPlayer() { earliestTime = undefined; players = getArrayKeys( self.touchList[team] ); - for ( index = 0; index < players.size; index++ ) + for ( i = 0; i < players.size; i++ ) { - touchdata = self.touchList[team][players[index]]; + touchdata = self.touchList[team][players[i]]; if ( !isdefined( earliestTime ) || touchdata.starttime < earliestTime ) { earliestPlayer = touchdata.player; @@ -788,7 +747,7 @@ useObjectProxThink() self thread proxTriggerThink(); - while ( true ) + for(;;) { if ( self.useTime && self.curProgress >= self.useTime ) { @@ -835,7 +794,7 @@ useObjectProxThink() } } - wait ( .05 ); + wait 0.05; } } @@ -845,7 +804,7 @@ proxTriggerThink() entityNumber = self.entNum; - while ( true ) + for(;;) { self.trigger waittill ( "trigger", player ); @@ -913,7 +872,7 @@ triggerTouchThink( object ) while ( isAlive( self ) && self isTouching( object.trigger ) && !level.gameEnded ) { self updateProxBar( object, false ); - wait ( .05 ); + wait 0.05; } if ( isDefined( self ) ) @@ -946,6 +905,8 @@ updateProxBar( object, forceRemove ) if ( !isDefined( self.proxBar ) ) { self.proxBar = createPrimaryProgressBar(); + self.proxBar setShader( "progress_bar_bg", 120, 8 ); + self.proxBar.alpha = 1; self.proxBar.lastUseRate = -1; } @@ -1069,7 +1030,7 @@ useHoldThinkLoop( player, lastWeapon ) while( isAlive( player ) && player isTouching( self.trigger ) && player useButtonPressed() && !player.throwingGrenade && !player meleeButtonPressed() && self.curProgress < self.useTime && (self.useRate || waitForWeapon) && !(waitForWeapon && timedOut > maxWaitTime) ) { - timedOut += .05; + timedOut += 0.05; self.curProgress += (50 * self.useRate); self.useRate = 1; @@ -1086,7 +1047,7 @@ useHoldThinkLoop( player, lastWeapon ) return isAlive( player ); } - wait .05; + wait 0.05; } return false; @@ -1097,6 +1058,8 @@ personalUseBar( object ) self endon("disconnect"); useBar = createPrimaryProgressBar(); + useBar setShader( "progress_bar_bg", 120, 8 ); + useBar.alpha = 1; useBarText = createPrimaryProgressBarText(); useBarText setText( object.useText ); @@ -1122,7 +1085,7 @@ personalUseBar( object ) } } lastRate = object.useRate; - wait ( .05 ); + wait 0.05; } useBar destroyElem(); @@ -1135,9 +1098,7 @@ updateTrigger() return; if ( self.interactTeam == "none" ) - { self.trigger.origin -= (0,0,50000); - } else if ( self.interactTeam == "any" ) { self.trigger.origin = self.curOrigin; @@ -1196,9 +1157,9 @@ updateWorldIcon( relativeTeam, showIcon ) updateTeams = getUpdateTeams( relativeTeam ); - for ( index = 0; index < updateTeams.size; index++ ) + for ( i = 0; i < updateTeams.size; i++ ) { - opName = "objpoint_" + updateTeams[index] + "_" + self.entNum; + opName = "objpoint_" + updateTeams[i] + "_" + self.entNum; objPoint = maps\mp\gametypes\_objpoints::getObjPointByName( opName ); objPoint notify( "stop_flashing_thread" ); @@ -1262,14 +1223,14 @@ updateCompassIcon( relativeTeam, showIcon ) { updateTeams = getUpdateTeams( relativeTeam ); - for ( index = 0; index < updateTeams.size; index++ ) + for ( i = 0; i < updateTeams.size; i++ ) { showIconThisTeam = showIcon; - if ( !showIconThisTeam && shouldShowCompassDueToRadar( updateTeams[ index ] ) ) + if ( !showIconThisTeam && shouldShowCompassDueToRadar( updateTeams[i] ) ) showIconThisTeam = true; objId = self.objIDAllies; - if ( updateTeams[ index ] == "axis" ) + if ( updateTeams[i] == "axis" ) objId = self.objIDAxis; if ( !isDefined( self.compassIcons[relativeTeam] ) || !showIconThisTeam ) @@ -1293,9 +1254,7 @@ updateCompassIcon( relativeTeam, showIcon ) shouldPingObject( relativeTeam ) { - if ( relativeTeam == "friendly" && self.objIDPingFriendly ) - return true; - else if ( relativeTeam == "enemy" && self.objIDPingEnemy ) + if ( ( relativeTeam == "friendly" && self.objIDPingFriendly ) || ( relativeTeam == "enemy" && self.objIDPingEnemy ) ) return true; return false; @@ -1336,7 +1295,7 @@ updateVisibilityAccordingToRadar() self endon("death"); self endon("carrier_cleared"); - while(1) + for(;;) { level waittill("radar_status_change"); self updateCompassIcons(); @@ -1394,24 +1353,24 @@ setModelVisibility( visibility ) { if ( visibility ) { - for ( index = 0; index < self.visuals.size; index++ ) + for ( i = 0; i < self.visuals.size; i++ ) { - self.visuals[index] show(); - if ( self.visuals[index].classname == "script_brushmodel" || self.visuals[index].classname == "script_model" ) + self.visuals[i] show(); + if ( self.visuals[i].classname == "script_brushmodel" || self.visuals[i].classname == "script_model" ) { - self.visuals[index] thread makeSolid(); + self.visuals[i] thread makeSolid(); } } } else { - for ( index = 0; index < self.visuals.size; index++ ) + for ( i = 0; i < self.visuals.size; i++ ) { - self.visuals[index] hide(); - if ( self.visuals[index].classname == "script_brushmodel" || self.visuals[index].classname == "script_model" ) + self.visuals[i] hide(); + if ( self.visuals[i].classname == "script_brushmodel" || self.visuals[i].classname == "script_model" ) { - self.visuals[index] notify("changing_solidness"); - self.visuals[index] notsolid(); + self.visuals[i] notify("changing_solidness"); + self.visuals[i] notsolid(); } } } @@ -1423,7 +1382,7 @@ makeSolid() self notify("changing_solidness"); self endon("changing_solidness"); - while(1) + for(;;) { for ( i = 0; i < level.players.size; i++ ) { @@ -1435,7 +1394,7 @@ makeSolid() self solid(); break; } - wait .05; + wait 0.05; } } @@ -1489,10 +1448,8 @@ disableObject() if ( isDefined( self.carrier ) ) self.carrier takeObject( self ); - for ( index = 0; index < self.visuals.size; index++ ) - { - self.visuals[index] hide(); - } + for ( i = 0; i < self.visuals.size; i++ ) + self.visuals[i] hide(); } self.trigger triggerOff(); @@ -1507,10 +1464,8 @@ enableObject() { if ( self.type == "carryObject" ) { - for ( index = 0; index < self.visuals.size; index++ ) - { - self.visuals[index] show(); - } + for ( i = 0; i < self.visuals.size; i++ ) + self.visuals[i] show(); } self.trigger triggerOn(); @@ -1529,10 +1484,7 @@ getRelativeTeam( team ) isFriendlyTeam( team ) { - if ( self.ownerTeam == "any" ) - return true; - - if ( self.ownerTeam == team ) + if ( self.ownerTeam == "any" || self.ownerTeam == team ) return true; return false; @@ -1568,31 +1520,28 @@ canInteractWith( team ) isTeam( team ) { - if ( team == "neutral" ) - return true; - if ( team == "allies" ) - return true; - if ( team == "axis" ) - return true; - if ( team == "any" ) - return true; - if ( team == "none" ) - return true; - + switch( team ) + { + case "neutral": + case "allies": + case "axis": + case "any": + case "none": + return true; + } return false; } isRelativeTeam( relativeTeam ) { - if ( relativeTeam == "friendly" ) - return true; - if ( relativeTeam == "enemy" ) - return true; - if ( relativeTeam == "any" ) - return true; - if ( relativeTeam == "none" ) - return true; - + switch( relativeTeam ) + { + case "friendly": + case "enemy": + case "any": + case "none": + return true; + } return false; } diff --git a/maps/mp/gametypes/_globallogic.gsc b/maps/mp/gametypes/_globallogic.gsc index 9bab2cc..5faaa89 100644 --- a/maps/mp/gametypes/_globallogic.gsc +++ b/maps/mp/gametypes/_globallogic.gsc @@ -93,10 +93,10 @@ init() setDvar( "ui_scorelimit", level.scoreLimit ); setDvar( "ui_timelimit", level.timelimit ); - if ( !level.hardcoreMode ) - setDvar( "scr_player_maxhealth", 100 ); - else + if ( level.hardcoreMode ) setDvar( "scr_player_maxhealth", 30 ); + else + setDvar( "scr_player_maxhealth", 100 ); } registerDvars() @@ -146,6 +146,7 @@ SetupCallbacks() level.autoassign = ::menuAutoAssign; level.spectator = ::menuSpectator; + level.killspec = ::menuKillspec; level.allies = ::menuAllies; level.axis = ::menuAxis; } @@ -153,7 +154,7 @@ SetupCallbacks() WaitTillSlowProcessAllowed() { while ( level.lastSlowProcessFrame == gettime() ) - wait .05; + wait 0.05; level.lastSlowProcessFrame = gettime(); } @@ -251,10 +252,7 @@ default_onScoreLimit() updateGameEvents() { - if ( !level.numLives && !level.inOverTime ) - return; - - if ( level.inGracePeriod ) + if ( ( !level.numLives && !level.inOverTime ) || level.inGracePeriod ) return; if ( level.teamBased ) @@ -439,23 +437,8 @@ spawnPlayer() self.statusicon = ""; - axisNum = 0; - alliesNum = 0; - for( i = 0; i < level.players.size; i++ ) - { - player = level.players[i]; - if( player.pers["team"] == "axis" ) - { - axisNum++; - player.shoutNumber = axisNum; - } - else if( player.pers["team"] == "allies" ) - { - alliesNum++; - player.shoutNumber = alliesNum; - } - } - + self promod\shoutcast::assignShoutID(); + self thread promod\shoutcast::setShoutClass(); self thread promod\shoutcast::updateHealthbar(); } @@ -530,7 +513,7 @@ waveSpawnTimer() level.wavePlayerSpawnIndex["axis"] = 0; } - wait ( 0.05 ); + wait 0.05; } } @@ -595,13 +578,7 @@ timeUntilRoundEnd() return timeRemaining; } - if ( level.inOvertime ) - return undefined; - - if ( level.timeLimit <= 0 ) - return undefined; - - if ( !isDefined( level.startTime ) ) + if ( level.inOvertime || level.timeLimit <= 0 || !isDefined( level.startTime ) ) return undefined; timePassed = (getTime() - level.startTime)/1000; @@ -650,10 +627,9 @@ endGame( winner, endReasonText ) updatePlacement(); - players = level.players; - for ( index = 0; index < players.size; index++ ) + for ( i = 0; i < level.players.size; i++ ) { - player = players[index]; + player = level.players[i]; player freezePlayerForRoundEnd(); player thread roundEndDoF( 4.0 ); @@ -690,10 +666,9 @@ endGame( winner, endReasonText ) { if ( level.displayRoundEndText ) { - players = level.players; - for ( index = 0; index < players.size; index++ ) + for ( i = 0; i < level.players.size; i++ ) { - player = players[index]; + player = level.players[i]; if ( level.teamBased ) player thread maps\mp\gametypes\_hud_message::teamOutcomeNotify( winner, true, endReasonText, 0.75 ); @@ -732,23 +707,18 @@ endGame( winner, endReasonText ) game["allies_timeout_called"] = 0; game["axis_timeout_called"] = 0; - players = level.players; - for ( index = 0; index < players.size; index++ ) + for ( i = 0; i < level.players.size; i++ ) { - player = players[index]; + player = level.players[i]; if( player.pers["team"] == "spectator" ) { if( game["attackers"] == "allies" && game["defenders"] == "axis" ) - { player setClientDvars( "shout_scores_attack", game["teamScores"]["allies"], "shout_scores_defence", game["teamScores"]["axis"] ); - } else - { player setClientDvars( "shout_scores_attack", game["teamScores"]["axis"], "shout_scores_defence", game["teamScores"]["allies"] ); - } } if ( !isDefined( player.pers["team"] ) || player.pers["team"] == "spectator" ) @@ -777,9 +747,7 @@ endGame( winner, endReasonText ) switchType = "intermission"; } else - { switchType = "intermission"; - } } player thread maps\mp\gametypes\_hud_message::teamOutcomeNotify( switchType, true, level.halftimeSubCaption ); @@ -804,10 +772,9 @@ endGame( winner, endReasonText ) } else if ( !hitRoundLimit() && !hitScoreLimit() && !level.displayRoundEndText && level.teamBased ) { - players = level.players; - for ( index = 0; index < players.size; index++ ) + for ( i = 0; i < level.players.size; i++ ) { - player = players[index]; + player = level.players[i]; if ( !isDefined( player.pers["team"] ) || player.pers["team"] == "spectator" ) { @@ -843,6 +810,33 @@ endGame( winner, endReasonText ) roundEndWait( level.halftimeRoundEndDelay ); } + if ( isDefined(game["PROMOD_KNIFEROUND"]) && game["PROMOD_KNIFEROUND"] ) + { + if(isDefined( game["PROMOD_MATCH_MODE"] ) && game["PROMOD_MATCH_MODE"] == "match") + { + game["promod_do_readyup"] = 1; + game["promod_first_readyup_done"] = 0; + for(i=0;i winner.score ) + if ( !isDefined( winner ) || players.score > winner.score ) { - winner = players[i]; + winner = players; tie = false; } - else if ( players[i].score == winner.score ) - { + else if ( players.score == winner.score ) tie = true; - } } if ( tie || !isDefined( winner ) ) @@ -1041,26 +1026,9 @@ getTimeRemaining() checkScoreLimit() { - if ( !isDefined( game["state"] ) || game["state"] != "playing" ) - return; - - if ( level.scoreLimit <= 0 ) + if ( ( !isDefined( game["state"] ) || game["state"] != "playing" ) || level.scoreLimit <= 0 || ( level.teamBased && game["teamScores"]["allies"] < level.scoreLimit && game["teamScores"]["axis"] < level.scoreLimit) || ( !level.teamBased && ( !isPlayer( self ) || self.score < level.scoreLimit ) ) ) return; - if ( level.teamBased ) - { - if( game["teamScores"]["allies"] < level.scoreLimit && game["teamScores"]["axis"] < level.scoreLimit ) - return; - } - else - { - if ( !isPlayer( self ) ) - return; - - if ( self.score < level.scoreLimit ) - return; - } - [[level.onScoreLimit]](); } @@ -1103,13 +1071,10 @@ updateGameTypeDvars() thread checkTimeLimit(); thread checkScoreLimit(); - if ( isdefined( level.startTime ) ) + if ( isdefined( level.startTime ) && getTimeRemaining() < 3000 ) { - if ( getTimeRemaining() < 3000 ) - { - wait .1; - continue; - } + wait 0.1; + continue; } wait 1; } @@ -1137,13 +1102,9 @@ menuAutoAssign() assignment = "axis"; } else if( playerCounts["allies"] < playerCounts["axis"] ) - { assignment = "allies"; - } else - { assignment = "axis"; - } if ( assignment == self.pers["team"] && (self.sessionstate == "playing" || self.sessionstate == "dead") ) { @@ -1173,9 +1134,7 @@ menuAutoAssign() if ( level.teamBased ) self.sessionteam = assignment; else - { self.sessionteam = "none"; - } if ( !isAlive( self ) ) self.statusicon = "hud_status_dead"; @@ -1185,6 +1144,8 @@ menuAutoAssign() self notify("joined_team"); self notify("end_respawn"); + self.monitoring = undefined; + if( self.pers["team"] == "allies" && oldTeam != self.pers["team"] ) { if( game["attackers"] == "allies" && game["defenders"] == "axis" ) @@ -1221,13 +1182,9 @@ updateObjectiveText() } if( level.scorelimit > 0 ) - { self setclientdvar( "cg_objectiveText", getObjectiveScoreText( self.pers["team"] ), level.scorelimit ); - } else - { self setclientdvar( "cg_objectiveText", getObjectiveText( self.pers["team"] ) ); - } } closeMenus() @@ -1253,13 +1210,10 @@ menuAllies() if ( self.pers["team"] != "allies" ) { - if ( isDefined( game["PROMOD_MATCH_MODE"] ) && game["PROMOD_MATCH_MODE"] != "match" ) + if ( isDefined( game["PROMOD_MATCH_MODE"] ) && game["PROMOD_MATCH_MODE"] != "match" && level.teamBased && !self.switching && !maps\mp\gametypes\_teams::getJoinTeamPermissions( "allies" ) ) { - if ( level.teamBased && !self.switching && !maps\mp\gametypes\_teams::getJoinTeamPermissions( "allies" ) ) - { - self openMenu(game["menu_team"]); - return; - } + self openMenu(game["menu_team"]); + return; } if ( level.inGracePeriod && (!isdefined(self.hasDoneCombat) || !self.hasDoneCombat) ) @@ -1301,17 +1255,16 @@ menuAllies() self notify("joined_team"); self notify("end_respawn"); + self.monitoring = undefined; + if( game["attackers"] == "allies" && game["defenders"] == "axis" && !self.switching ) iprintln(self.name + " Joined Attack"); else if ( !self.switching ) iprintln(self.name + " Joined Defence"); for ( i = 0; i < level.players.size; i++ ) - { - player = level.players[i]; - if ( player.pers["team"] == "spectator" ) - player thread promod\shoutcast::resetShoutcast(); - } + if ( level.players[i].pers["team"] == "spectator" ) + level.players[i] thread promod\shoutcast::resetShoutcast(); if ( oldTeam == "axis" ) thread maps\mp\gametypes\_promod::updateClassAvailability( oldTeam ); @@ -1336,13 +1289,10 @@ menuAxis() if ( self.pers["team"] != "axis" ) { - if ( isDefined( game["PROMOD_MATCH_MODE"] ) && game["PROMOD_MATCH_MODE"] != "match" ) + if ( isDefined( game["PROMOD_MATCH_MODE"] ) && game["PROMOD_MATCH_MODE"] != "match" && level.teamBased && !self.switching && !maps\mp\gametypes\_teams::getJoinTeamPermissions( "allies" ) ) { - if ( level.teamBased && !self.switching && !maps\mp\gametypes\_teams::getJoinTeamPermissions( "allies" ) ) - { - self openMenu(game["menu_team"]); - return; - } + self openMenu(game["menu_team"]); + return; } if ( level.inGracePeriod && (!isdefined(self.hasDoneCombat) || !self.hasDoneCombat) ) @@ -1384,17 +1334,16 @@ menuAxis() self notify("joined_team"); self notify("end_respawn"); + self.monitoring = undefined; + if( game["attackers"] == "allies" && game["defenders"] == "axis" && !self.switching ) iprintln(self.name + " Joined Defence"); else if ( !self.switching ) iprintln(self.name + " Joined Attack"); for ( i = 0; i < level.players.size; i++ ) - { - player = level.players[i]; - if ( player.pers["team"] == "spectator" ) - player thread promod\shoutcast::resetShoutcast(); - } + if ( level.players[i].pers["team"] == "spectator" ) + level.players[i] thread promod\shoutcast::resetShoutcast(); if ( oldTeam == "allies" ) thread maps\mp\gametypes\_promod::updateClassAvailability( oldTeam ); @@ -1410,9 +1359,34 @@ menuAxis() self.switching = false; } +menuKillspec() +{ + if ( self.pers["team"] != "axis" && self.pers["team"] != "allies" ) + return; + + self closeMenus(); + + if( self.sessionstate == "playing" ) + self suicide(); + + self.pers["class"] = undefined; + self.class = undefined; + self iprintln("Choose a class to respawn."); + self setClientDvar("loadout_curclass", ""); + self thread [[level.spawnSpectator]](); + thread maps\mp\gametypes\_promod::updateClassAvailability( self.pers["team"] ); + + self notify( "killspec" ); + + for ( i = 0; i < level.players.size; i++ ) + if ( level.players[i].pers["team"] == "spectator" ) + level.players[i] thread promod\shoutcast::resetShoutcast(); +} + menuSpectator() { self closeMenus(); + self openMenu(game["menu_shoutcast"]); if(self.pers["team"] != "spectator") { @@ -1438,15 +1412,15 @@ menuSpectator() [[level.spawnSpectator]](); if( game["attackers"] == "allies" && game["defenders"] == "axis" ) - { self setClientDvars( "shout_scores_attack", game["teamScores"]["allies"], - "shout_scores_defence", game["teamScores"]["axis"] ); - } + "shout_scores_defence", game["teamScores"]["axis"], + "shout_attack_name", "Attack", + "shout_defence_name", "Defence" ); else - { self setClientDvars( "shout_scores_attack", game["teamScores"]["axis"], - "shout_scores_defence", game["teamScores"]["allies"] ); - } + "shout_scores_defence", game["teamScores"]["allies"], + "shout_attack_name", "Defence", + "shout_defence_name", "Attack" ); self setclientdvar( "g_scriptMainMenu", game["menu_shoutcast"] ); @@ -1454,11 +1428,8 @@ menuSpectator() iprintln(self.name + " Joined Shoutcaster"); for ( i = 0; i < level.players.size; i++ ) - { - player = level.players[i]; - if ( player.pers["team"] == "spectator" ) - player thread promod\shoutcast::resetShoutcast(); - } + if ( level.players[i].pers["team"] == "spectator" ) + level.players[i] thread promod\shoutcast::resetShoutcast(); if ( oldTeam == "allies" || oldTeam == "axis" ) thread maps\mp\gametypes\_promod::updateClassAvailability( oldTeam ); @@ -1510,10 +1481,10 @@ updatePlacement() return; level.placement["all"] = []; - for ( index = 0; index < level.players.size; index++ ) + for ( i = 0; i < level.players.size; i++ ) { - if ( level.players[index].team == "allies" || level.players[index].team == "axis" ) - level.placement["all"][level.placement["all"].size] = level.players[index]; + if ( level.players[i].team == "allies" || level.players[i].team == "axis" ) + level.placement["all"][level.placement["all"].size] = level.players[i]; } placementAll = level.placement["all"]; @@ -1536,9 +1507,9 @@ updatePlacement() updateTeamPlacement() { - placement["allies"] = []; - placement["axis"] = []; - placement["spectator"] = []; + placement["allies"] = []; + placement["axis"] = []; + placement["spectator"] = []; if ( !level.teamBased ) return; @@ -1674,9 +1645,7 @@ default_onTeamScore( event, team, player, victim ) isWinning = otherTeam; if ( isWinning != "none" && isWinning != level.wasWinning && getTime() - level.lastStatusTime > 5000 ) - { level.lastStatusTime = getTime(); - } if ( isWinning != "none" ) level.wasWinning = isWinning; @@ -1686,14 +1655,12 @@ sendUpdatedTeamScores() { level notify("updating_scores"); level endon("updating_scores"); - wait .05; + wait 0.05; WaitTillSlowProcessAllowed(); for ( i = 0; i < level.players.size; i++ ) - { level.players[i] updateScores(); - } for( i = 0; i < level.players.size; i++ ) { @@ -1701,15 +1668,11 @@ sendUpdatedTeamScores() if( player.pers["team"] == "spectator" ) { if( game["attackers"] == "allies" && game["defenders"] == "axis" ) - { player setClientDvars( "shout_scores_attack", game["teamScores"]["allies"], "shout_scores_defence", game["teamScores"]["axis"] ); - } else - { player setClientDvars( "shout_scores_attack", game["teamScores"]["axis"], "shout_scores_defence", game["teamScores"]["allies"] ); - } } } @@ -1737,7 +1700,7 @@ sendUpdatedDMScores() { level notify("updating_dm_scores"); level endon("updating_dm_scores"); - wait .05; + wait 0.05; WaitTillSlowProcessAllowed(); @@ -1790,10 +1753,9 @@ updateTeamStatus() level.alivePlayers["axis"] = []; level.activePlayers = []; - players = level.players; - for ( i = 0; i < players.size; i++ ) + for ( i = 0; i < level.players.size; i++ ) { - player = players[i]; + player = level.players[i]; team = player.team; class = player.class; @@ -1813,11 +1775,8 @@ updateTeamStatus() level.activeplayers[ level.activeplayers.size ] = player; } } - else - { - if ( player maySpawn() ) - level.playerLives[team]++; - } + else if ( player maySpawn() ) + level.playerLives[team]++; } } @@ -1833,10 +1792,8 @@ updateTeamStatus() { player = level.players[i]; if( player.pers["team"] == "allies" || player.pers["team"] == "axis" ) - { player setClientDvars( "allies_alive", level.aliveCount["allies"], "axis_alive", level.aliveCount["axis"] ); - } } if ( isDefined( level.scorebot ) && level.scorebot ) @@ -1853,13 +1810,9 @@ updateTeamStatus() player_alive = 0; if ( player.pers["team"] == "allies" ) - { level.allies_team += "" + player.name + "" + player_alive + "" + player.kills + "" + player.assists + "" + player.deaths; - } else if ( player.pers["team"] == "axis" ) - { level.axis_team += "" + player.name + "" + player_alive + "" + player.kills + "" + player.assists + "" + player.deaths; - } } if ( level.allies_team == "" ) @@ -1898,10 +1851,10 @@ playTickingSound() self endon("stop_ticking"); level endon("game_ended"); - while(1) + for(;;) { self playSound( "ui_mp_suitcasebomb_timer" ); - wait 1.0; + wait 1; } } @@ -1914,7 +1867,7 @@ timeLimitClock() { level endon ( "game_ended" ); - wait .05; + wait 0.05; clockObject = spawn( "script_origin", (0,0,0) ); @@ -1938,11 +1891,11 @@ timeLimitClock() clockObject playSound( "ui_mp_timer_countdown" ); } - if ( timeLeft - floor(timeLeft) >= .05 ) + if ( timeLeft - floor(timeLeft) >= 0.05 ) wait timeLeft - floor(timeLeft); } - wait ( 1.0 ); + wait 1; } } @@ -1966,11 +1919,10 @@ gameTimer() while ( isDefined( game["state"] ) && game["state"] == "playing" ) { if ( !level.timerStopped ) - { game["timepassed"] += gettime() - prevtime; - } + prevtime = gettime(); - wait ( 1.0 ); + wait 1; } } @@ -1980,9 +1932,9 @@ getTimePassed() return 0; if ( level.timerStopped ) - return (level.timerPauseTime - level.startTime) - level.discardTime; + return (level.timerPauseTime - level.startTime) - level.discardTime; else - return (gettime() - level.startTime) - level.discardTime; + return (gettime() - level.startTime) - level.discardTime; } @@ -2004,6 +1956,21 @@ resumeTimer() level.discardTime += gettime() - level.timerPauseTime; } +openMainMenu() +{ + wait 1; + + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + if ( !isDefined( player.pers["team"] ) || player.pers["team"] == "none" ) + { + player setclientdvar( "g_scriptMainMenu", game["menu_team"] ); + player openMenu( game["menu_team"] ); + } + } +} + startGame() { level thread [[level.promod_hud_header_create]](); @@ -2014,6 +1981,8 @@ startGame() prematchPeriod(); + thread openMainMenu(); + if ( isDefined( game["promod_timeout_called"] ) && game["promod_timeout_called"] ) { thread promod\timeout::main(); @@ -2032,7 +2001,9 @@ startGame() if ( isDefined( game["PROMOD_MATCH_MODE"] ) && game["PROMOD_MATCH_MODE"] == "strat" ) { level thread promod\readyup::disableBombsites(); + level thread promod\stratmode::main(); setDvar( "g_deadChat", 1 ); + SetClientNameMode( "auto_change" ); setGameEndTime( 0 ); return; } @@ -2044,30 +2015,62 @@ startGame() if ( isDefined( level.timeout_over ) && !level.timeout_over ) return; - level.timerStopped = false; + if ( isDefined(game["PROMOD_KNIFEROUND"]) && game["PROMOD_KNIFEROUND"] ) + { + for(i=0;i 0 && game["roundsplayed"] % level.roundswitch == 0 && !game["promod_in_timeout"] ) - sb_text = "2nd_half_started"; - else if ( game["promod_in_timeout"] ) - sb_text = "match_resumed"; + if ( isDefined(game["PROMOD_KNIFEROUND"]) && game["PROMOD_KNIFEROUND"] ) + game["promod_scorebot_ticker_buffer"] += "knife_round"; else - sb_text = "round_start"; + { + sb_text = ""; + + if ( !game["roundsplayed"] && !game["promod_in_timeout"] ) + sb_text = "1st_half_started"; + else if ( isDefined( level.roundswitch ) && level.roundswitch > 0 && game["roundsplayed"] % level.roundswitch == 0 && !game["promod_in_timeout"] ) + sb_text = "2nd_half_started"; + else if ( game["promod_in_timeout"] ) + sb_text = "match_resumed"; + else + sb_text = "round_start"; - game["promod_scorebot_ticker_buffer"] += "" + sb_text + "" + ( game["roundsplayed"] + 1 ); + game["promod_scorebot_ticker_buffer"] += "" + sb_text + "" + ( game["roundsplayed"] + 1 ); + } } game["promod_in_timeout"] = 0; - thread timeLimitClock(); + if ( !isDefined( game["PROMOD_KNIFEROUND"] ) || !game["PROMOD_KNIFEROUND"] ) + thread timeLimitClock(); + thread gracePeriod(); } @@ -2084,17 +2087,17 @@ prematchPeriod() level.inPrematchPeriod = false; - for ( index = 0; index < level.players.size; index++ ) + for ( i = 0; i < level.players.size; i++ ) { - level.players[index] freezeControls( false ); - level.players[index] enableWeapons(); + level.players[i] freezeControls( false ); + level.players[i] enableWeapons(); - hintMessage = getObjectiveHintText( level.players[index].pers["team"] ); - if ( !isDefined( hintMessage ) || !level.players[index].hasSpawned ) + hintMessage = getObjectiveHintText( level.players[i].pers["team"] ); + if ( !isDefined( hintMessage ) || !level.players[i].hasSpawned ) continue; - level.players[index] setClientDvar( "scr_objectiveText", hintMessage ); - level.players[index] thread maps\mp\gametypes\_hud_message::hintMessage( hintMessage ); + level.players[i] setClientDvar( "scr_objectiveText", hintMessage ); + level.players[i] thread maps\mp\gametypes\_hud_message::hintMessage( hintMessage ); } setDvar( "ui_hud_hardcore", level.hardcoreMode ); @@ -2104,10 +2107,10 @@ gracePeriod() { level endon("game_ended"); - wait ( level.gracePeriod ); + wait level.gracePeriod; level notify ( "grace_period_ending" ); - wait ( .05 ); + wait 0.05; level.inGracePeriod = false; @@ -2116,11 +2119,9 @@ gracePeriod() if ( level.numLives ) { - players = level.players; - - for ( i = 0; i < players.size; i++ ) + for ( i = 0; i < level.players.size; i++ ) { - player = players[i]; + player = level.players[i]; if ( !player.hasSpawned && player.sessionteam != "spectator" && !isAlive( player ) ) player.statusicon = "hud_status_dead"; @@ -2160,13 +2161,7 @@ TeamKillDelay() TimeUntilSpawn( includeTeamkillDelay ) { - if ( level.inGracePeriod && !self.hasSpawned ) - return 0; - - if ( isDefined( level.rdyup ) && level.rdyup ) - return 0; - - if ( isDefined( game["PROMOD_MATCH_MODE"] ) && game["PROMOD_MATCH_MODE"] == "strat" ) + if ( ( level.inGracePeriod && !self.hasSpawned ) || ( isDefined( level.rdyup ) && level.rdyup ) || ( isDefined( game["PROMOD_MATCH_MODE"] ) && game["PROMOD_MATCH_MODE"] == "strat" ) ) return 0; respawnDelay = 0; @@ -2192,10 +2187,7 @@ TimeUntilSpawn( includeTeamkillDelay ) maySpawn() { - if ( isDefined( level.rdyup ) && level.rdyup ) - return true; - - if ( isDefined( game["PROMOD_MATCH_MODE"] ) && game["PROMOD_MATCH_MODE"] == "strat" ) + if ( ( isDefined( level.rdyup ) && level.rdyup ) || ( isDefined( game["PROMOD_MATCH_MODE"] ) && game["PROMOD_MATCH_MODE"] == "strat" ) ) return true; if ( level.inOvertime ) @@ -2208,40 +2200,32 @@ maySpawn() else gameHasStarted = (level.maxPlayerCount > 1); - if ( !self.pers["lives"] && gameHasStarted ) - { + if ( gameHasStarted && ( !self.pers["lives"] || ( !level.inGracePeriod && !self.hasSpawned ) ) ) return false; - } - else if ( gameHasStarted ) - { - if ( !level.inGracePeriod && !self.hasSpawned ) - return false; - } } return true; } spawnClient( timeAlreadyPassed ) { - assert( isDefined( self.team ) ); - assert( isValidClass( self.class ) ); + assert( isDefined( self.team ) ); + assert( isValidClass( self.class ) ); if ( !self maySpawn() ) { - currentorigin = self.origin; - currentangles = self.angles; + currentorigin = self.origin; + currentangles = self.angles; shouldShowRespawnMessage = true; - if ( level.roundLimit > 1 && game["roundsplayed"] >= (level.roundLimit - 1) ) - shouldShowRespawnMessage = false; - if ( level.scoreLimit > 1 && level.teambased && game["teamScores"]["allies"] >= level.scoreLimit - 1 && game["teamScores"]["axis"] >= level.scoreLimit - 1 ) + if ( ( level.roundLimit > 1 && game["roundsplayed"] >= (level.roundLimit - 1) ) || ( level.scoreLimit > 1 && level.teambased && game["teamScores"]["allies"] >= level.scoreLimit - 1 && game["teamScores"]["axis"] >= level.scoreLimit - 1 ) ) shouldShowRespawnMessage = false; + if ( shouldShowRespawnMessage ) { setLowerMessage( game["strings"]["spawn_next_round"] ); self thread removeSpawnMessageShortly( 3 ); } - self thread [[level.spawnSpectator]]( currentorigin + (0, 0, 60), currentangles ); + self thread [[level.spawnSpectator]]( currentorigin + (0, 0, 60), currentangles ); return; } @@ -2284,10 +2268,10 @@ waitAndSpawnClient( timeAlreadyPassed ) { setLowerMessage( &"MP_FRIENDLY_FIRE_WILL_NOT", teamKillDelay ); - self thread respawn_asSpectator( self.origin + (0, 0, 60), self.angles ); + self thread respawn_asSpectator( self.origin + (0, 0, 60), self.angles ); spawnedAsSpectator = true; - wait( teamKillDelay ); + wait teamKillDelay; } self.teamKillPunish = false; @@ -2316,7 +2300,7 @@ waitAndSpawnClient( timeAlreadyPassed ) setLowerMessage( game["strings"]["waiting_to_spawn"], timeUntilSpawn ); if ( !spawnedAsSpectator ) - self thread respawn_asSpectator( self.origin + (0, 0, 60), self.angles ); + self thread respawn_asSpectator( self.origin + (0, 0, 60), self.angles ); spawnedAsSpectator = true; self waitForTimeOrNotify( timeUntilSpawn, "force_spawn" ); @@ -2328,7 +2312,7 @@ waitAndSpawnClient( timeAlreadyPassed ) setLowerMessage( game["strings"]["press_to_spawn"] ); if ( !spawnedAsSpectator ) - self thread respawn_asSpectator( self.origin + (0, 0, 60), self.angles ); + self thread respawn_asSpectator( self.origin + (0, 0, 60), self.angles ); spawnedAsSpectator = true; self waitRespawnButton(); @@ -2340,7 +2324,7 @@ waitAndSpawnClient( timeAlreadyPassed ) self.waveSpawnIndex = undefined; - self thread [[level.spawnPlayer]](); + self thread [[level.spawnPlayer]](); } waitForTimeOrNotify( time, notifyname ) @@ -2508,8 +2492,7 @@ Callback_StartGameType() game["promod_scorebot_ticker_buffer"] = -1; } - mapname = getDvar("mapname"); - game["promod_scorebot_ticker_buffer"] += "map" + mapname + "" + level.gametype; + game["promod_scorebot_ticker_buffer"] += "map" + getDvar("mapname") + "" + level.gametype; } if ( !isdefined( game["timepassed"] ) ) @@ -2521,9 +2504,8 @@ Callback_StartGameType() if ( !isDefined( game["promod_do_readyup"] ) ) game["promod_do_readyup"] = false; - if ( isDefined( game["PROMOD_MATCH_MODE"] ) && game["PROMOD_MATCH_MODE"] == "match" || getDvarInt( "promod_allow_readyup" ) && isDefined( game["CUSTOM_MODE"] ) && game["CUSTOM_MODE"] ) - if ( !game["roundsplayed"] && !game["promod_first_readyup_done"] ) - game["promod_do_readyup"] = true; + if ( (isDefined( game["PROMOD_MATCH_MODE"] ) && game["PROMOD_MATCH_MODE"] == "match" || getDvarInt( "promod_allow_readyup" ) && isDefined( game["CUSTOM_MODE"] ) && game["CUSTOM_MODE"]) && !game["roundsplayed"] && !game["promod_first_readyup_done"] ) + game["promod_do_readyup"] = true; level.gameEnded = false; level.teamSpawnPoints["axis"] = []; @@ -2535,7 +2517,7 @@ Callback_StartGameType() level.useStartSpawns = true; setdvar( "scr_teamKillPunishCount", 0 ); - level.minimumAllowedTeamKills = getdvarint( "scr_teamKillPunishCount" ) - 1; + level.minimumAllowedTeamKills = -1; thread maps\mp\gametypes\_promod::init(); thread maps\mp\gametypes\_class::init(); @@ -2555,7 +2537,8 @@ Callback_StartGameType() thread maps\mp\gametypes\_objpoints::init(); thread maps\mp\gametypes\_gameobjects::init(); thread maps\mp\gametypes\_spawnlogic::init(); - thread maps\mp\gametypes\_oldschool::deletePickups(); + + thread deletePickups(); thread promod\dvarmon::main(); thread promod\modes::monitorMode(); @@ -2568,8 +2551,8 @@ Callback_StartGameType() thread maps\mp\gametypes\_quickmessages::init(); stringNames = getArrayKeys( game["strings"] ); - for ( index = 0; index < stringNames.size; index++ ) - precacheString( game["strings"][stringNames[index]] ); + for ( i = 0; i < stringNames.size; i++ ) + precacheString( game["strings"][stringNames[i]] ); level.maxPlayerCount = 0; level.playerCount["allies"] = 0; @@ -2633,18 +2616,29 @@ Callback_StartGameType() level thread updateGameTypeDvars(); } +deletePickups() +{ + pickups = getentarray( "oldschool_pickup", "targetname" ); + + for ( i = 0; i < pickups.size; i++ ) + { + if ( isdefined( pickups[i].target ) ) + getent( pickups[i].target, "targetname" ) delete(); + pickups[i] delete(); + } +} + initialDMScoreUpdate() { - wait .2; + wait 0.2; numSent = 0; - while(1) + for(;;) { didAny = false; - players = level.players; - for ( i = 0; i < players.size; i++ ) + for ( i = 0; i < level.players.size; i++ ) { - player = players[i]; + player = level.players[i]; if ( !isdefined( player ) ) continue; @@ -2656,7 +2650,7 @@ initialDMScoreUpdate() player updateDMScores(); didAny = true; - wait .5; + wait 0.5; } if ( !didAny ) @@ -2666,10 +2660,7 @@ initialDMScoreUpdate() checkRoundSwitch() { - if ( !level.roundSwitch ) - return false; - - if ( level.gametype == "dm" ) + if ( !level.roundSwitch || level.gametype == "dm" ) return false; assert( game["roundsplayed"] > 0 ); @@ -2711,28 +2702,23 @@ Callback_PlayerConnect() lpGuid = self getGuid(); logPrint("J;" + lpGuid + ";" + lpselfnum + ";" + self.name + "\n"); - self setClientDvars( "cg_drawSpectatorMessages", 1, - "fx_drawClouds", 0, - "ui_hud_hardcore", getDvar( "ui_hud_hardcore" ) ); - if ( isDefined( game["PROMOD_MATCH_MODE"] ) && game["PROMOD_MATCH_MODE"] == "match" ) self setClientDvar( "promod_hud_website", "" ); else self setClientDvar( "promod_hud_website", getDvar( "promod_hud_website" ) ); if ( level.hardcoreMode ) - { self setClientDvars( "cg_drawTalk", 3, "cg_drawCrosshair", 0, "cg_hudGrenadeIconMaxRangeFrag", 0 ); - } else - { self setClientDvars( "cg_drawCrosshair", 1, "cg_hudGrenadeIconMaxRangeFrag", 250 ); - } - self setClientDvars( "cg_hudGrenadeIconHeight", 25, + self setClientDvars( "cg_drawSpectatorMessages", 1, + "fx_drawClouds", 0, + "ui_hud_hardcore", getDvar( "ui_hud_hardcore" ), + "cg_hudGrenadeIconHeight", 25, "cg_hudGrenadeIconWidth", 25, "cg_hudGrenadeIconOffset", 50, "cg_hudGrenadePointerHeight", 12, @@ -2836,9 +2822,7 @@ Callback_PlayerConnect() [[level.spawnSpectator]](); if ( isValidClass( self.pers["class"] ) ) - { self thread [[level.spawnClient]](); - } self thread maps\mp\gametypes\_spectating::setSpectatePermissions(); } @@ -2857,16 +2841,16 @@ Callback_PlayerDisconnect() lpGuid = self getGuid(); logPrint("Q;" + lpGuid + ";" + lpselfnum + ";" + self.name + "\n"); - for ( entry = 0; entry < level.players.size; entry++ ) + for ( i = 0; i < level.players.size; i++ ) { - if ( level.players[entry] == self ) + if ( level.players[i] == self ) { - while ( entry < level.players.size-1 ) + while ( i < level.players.size-1 ) { - level.players[entry] = level.players[entry+1]; - entry++; + level.players[i] = level.players[i+1]; + i++; } - level.players[entry] = undefined; + level.players[i] = undefined; break; } } @@ -2875,11 +2859,8 @@ Callback_PlayerDisconnect() self removeDisconnectedPlayerFromPlacement(); for ( i = 0; i < level.players.size; i++ ) - { - player = level.players[i]; - if ( player.pers["team"] == "spectator" ) - player thread promod\shoutcast::resetShoutcast(); - } + if ( level.players[i].pers["team"] == "spectator" ) + level.players[i] thread promod\shoutcast::resetShoutcast(); if ( isDefined( self.pers["team"] ) && ( self.pers["team"] == "allies" || self.pers["team"] == "axis" ) ) thread maps\mp\gametypes\_promod::updateClassAvailability( self.pers["team"] ); @@ -2889,16 +2870,16 @@ Callback_PlayerDisconnect() removePlayerOnDisconnect() { - for ( entry = 0; entry < level.players.size; entry++ ) + for ( i = 0; i < level.players.size; i++ ) { - if ( level.players[entry] == self ) + if ( level.players[i] == self ) { - while ( entry < level.players.size-1 ) + while ( i < level.players.size-1 ) { - level.players[entry] = level.players[entry+1]; - entry++; + level.players[i] = level.players[i+1]; + i++; } - level.players[entry] = undefined; + level.players[i] = undefined; break; } } @@ -2911,50 +2892,31 @@ isHeadShot( sWeapon, sHitLoc, sMeansOfDeath ) Callback_PlayerDamage( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime ) { - if (!isDefined( level.rdyup ) ) + if ( !isDefined( level.rdyup ) ) level.rdyup = false; iDamage = maps\mp\gametypes\_class::cac_modified_damage( self, eAttacker, iDamage, sMeansOfDeath ); self.iDFlags = iDFlags; self.iDFlagsTime = getTime(); - if ( isDefined( game["state"] ) && game["state"] == "postgame" ) - return; - - if ( self.sessionteam == "spectator" ) - return; - - if ( isDefined( self.canDoCombat ) && !self.canDoCombat ) - return; - - if ( isDefined( eAttacker ) && isPlayer( eAttacker ) && isDefined( eAttacker.canDoCombat ) && !eAttacker.canDoCombat ) + if ( (isDefined( game["state"] ) && game["state"] == "postgame") || self.sessionteam == "spectator" || ( isDefined( self.canDoCombat ) && !self.canDoCombat ) || ( isDefined( eAttacker ) && isPlayer( eAttacker ) && isDefined( eAttacker.canDoCombat ) && !eAttacker.canDoCombat ) || ( isDefined( game["PROMOD_MATCH_MODE"] ) && game["PROMOD_MATCH_MODE"] == "strat" && isDefined( self.flying ) && self.flying ) ) return; - if ( isDefined( game["PROMOD_MATCH_MODE"] ) && game["PROMOD_MATCH_MODE"] == "strat" ) - if ( isDefined( self.flying ) && self.flying ) - return; - prof_begin( "Callback_PlayerDamage flags/tweaks" ); - if ( level.rdyup ) + if ( level.rdyup && isDefined( eAttacker ) && isPlayer( eAttacker ) && eAttacker != self ) { - if ( isDefined( eAttacker ) && isPlayer( eAttacker ) ) - { - if ( eAttacker != self ) - { - if ( !isDefined( eAttacker.ruptally ) ) - eAttacker.ruptally = 0; + if ( !isDefined( eAttacker.ruptally ) ) + eAttacker.ruptally = 0; - if ( eAttacker.ruptally < 0 ) - eAttacker.ruptally = 0; + if ( eAttacker.ruptally < 0 ) + eAttacker.ruptally = 0; - if ( !isDefined( self.ruptally ) ) - self.ruptally = -1; + if ( !isDefined( self.ruptally ) ) + self.ruptally = -1; - if ( self.ruptally < 0) - return; - } - } + if ( self.ruptally < 0) + return; } if ( isDefined( level.strat_over ) && !level.strat_over || isDefined( level.bombDefused ) && level.bombDefused || isDefined( level.bombExploded ) && level.bombExploded && self.pers["team"] == game["attackers"] ) @@ -2986,16 +2948,10 @@ Callback_PlayerDamage( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, s if( !(iDFlags & level.iDFLAGS_NO_PROTECTION) ) { - if ( (isSubStr( sMeansOfDeath, "MOD_GRENADE" ) || isSubStr( sMeansOfDeath, "MOD_EXPLOSIVE" ) || isSubStr( sMeansOfDeath, "MOD_PROJECTILE" )) && isDefined( eInflictor ) ) + if ( (isSubStr( sMeansOfDeath, "MOD_GRENADE" ) || isSubStr( sMeansOfDeath, "MOD_EXPLOSIVE" ) || isSubStr( sMeansOfDeath, "MOD_PROJECTILE" )) && isDefined( eInflictor ) && game["PROMOD_MATCH_MODE"] != "match" && eInflictor.classname == "grenade" && ( ( self.lastSpawnTime + 3500) > getTime() && distance( eInflictor.origin, self.lastSpawnPoint.origin ) < 250 || !isDefined ( eAttacker.pers["class"] ) ) ) { - if ( game["PROMOD_MATCH_MODE"] != "match" ) - { - if ( eInflictor.classname == "grenade" && ( ( self.lastSpawnTime + 3500) > getTime() && distance( eInflictor.origin, self.lastSpawnPoint.origin ) < 250 || !isDefined ( eAttacker.pers["class"] ) ) ) - { - prof_end( "Callback_PlayerDamage player" ); - return; - } - } + prof_end( "Callback_PlayerDamage player" ); + return; } if ( level.teamBased && isPlayer( eAttacker ) && (self != eAttacker) && (self.pers["team"] == eAttacker.pers["team"]) ) @@ -3012,7 +2968,7 @@ Callback_PlayerDamage( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, s } else if ( level.friendlyfire == 2 && isAlive( eAttacker ) ) { - iDamage = int(iDamage * .5); + iDamage = int(iDamage * 0.5); if(iDamage < 1) iDamage = 1; @@ -3023,7 +2979,7 @@ Callback_PlayerDamage( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, s } else if ( level.friendlyfire == 3 && isAlive( eAttacker ) ) { - iDamage = int(iDamage * .5); + iDamage = int(iDamage * 0.5); if ( iDamage < 1 ) iDamage = 1; @@ -3087,25 +3043,25 @@ Callback_PlayerDamage( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, s if ( isDefined( sHitLoc ) && sHitLoc != "none") { if( isSubStr( sHitLoc, "torso_upper" ) ) - damagestring = ("upper torso" ); + damagestring = "upper torso"; else if( isSubStr( sHitLoc, "torso_lower" ) ) - damagestring = ("lower torso" ); + damagestring = "lower torso"; else if( isSubStr( sHitLoc, "leg_upper" ) ) - damagestring = ("upper leg" ); + damagestring = "upper leg"; else if( isSubStr( sHitLoc, "leg_lower" ) ) - damagestring = ("lower leg" ); + damagestring = "lower leg"; else if( isSubStr( sHitLoc, "arm_upper" ) ) - damagestring = ("upper arm" ); + damagestring = "upper arm"; else if( isSubStr( sHitLoc, "arm_lower" ) ) - damagestring = ("lower arm" ); + damagestring = "lower arm"; else if( isSubStr( sHitLoc, "head" ) || isSubStr( sHitLoc, "helmet" ) ) - damagestring = ("head" ); + damagestring = "head"; else if( isSubStr( sHitLoc, "neck" ) ) - damagestring = ("neck" ); + damagestring = "neck"; else if( isSubStr( sHitLoc, "foot" ) ) - damagestring = ("foot" ); + damagestring = "foot"; else if( isSubStr( sHitLoc, "hand" ) ) - damagestring = ("hand" ); + damagestring = "hand"; unitstring = distance(self.origin, eAttacker.origin); metrestring = unitstring * 0.0254; @@ -3117,25 +3073,51 @@ Callback_PlayerDamage( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, s { if ( isDefined( sHitLoc ) && sHitLoc != "none" ) { - eAttacker iprintln("You did " + "^2" + iDamage + "^7 damage at a distance of " + "^2" + metrestring + "^7 metres in the " + "^2" + damagestring + "^7 to " + self.name); - self iprintln(eAttacker.name + " did " + "^1" + iDamage + "^7 damage at a distance of " + "^1" + metrestring + "^7 metres in the " + "^1" + damagestring + "^7 to you"); + eAttacker iprintln("You inflicted " + "^2" + iDamage + "^7 damage at a distance of " + "^2" + metrestring + "^7 metres in the " + "^2" + damagestring + "^7 to " + self.name); + self iprintln(eAttacker.name + " inflicted " + "^1" + iDamage + "^7 damage at a distance of " + "^1" + metrestring + "^7 metres in the " + "^1" + damagestring + "^7 to you"); } else if ( isDefined( sHitLoc ) && sHitLoc == "none" ) { - eAttacker iprintln("You did " + "^2" + iDamage + "^7 damage to " + self.name); - self iprintln(eAttacker.name + " did " + "^1" + iDamage + "^7 damage to you"); + eAttacker iprintln("You inflicted " + "^2" + iDamage + "^7 damage to " + self.name); + self iprintln(eAttacker.name + " inflicted " + "^1" + iDamage + "^7 damage to you"); } } else if ( eAttacker == self && ( isDefined( level.rdyup ) && level.rdyup || isDefined( game["PROMOD_MATCH_MODE"] ) && game["PROMOD_MATCH_MODE"] == "strat" ) ) { if ( isDefined( sHitLoc ) && sHitLoc == "none" ) - self iprintln("You did ^1" + iDamage + "^7 damage to yourself"); + self iprintln("You inflicted ^1" + iDamage + "^7 damage to yourself"); } } else if ( isDefined( level.rdyup ) && level.rdyup || isDefined( game["PROMOD_MATCH_MODE"] ) && game["PROMOD_MATCH_MODE"] == "strat" ) { if ( sMeansOfDeath == "MOD_FALLING" ) - self iprintln("You did ^1" + iDamage + "^7 damage to yourself"); + self iprintln("You inflicted ^1" + iDamage + "^7 damage to yourself"); + } + + if( self.sessionstate != "dead" ) + { + lpselfnum = self getEntityNumber(); + lpselfname = self.name; + lpselfteam = self.pers["team"]; + lpselfGuid = self getGuid(); + lpattackerteam = ""; + + if( isPlayer( eAttacker ) ) + { + lpattacknum = eAttacker getEntityNumber(); + lpattackGuid = eAttacker getGuid(); + lpattackname = eAttacker.name; + lpattackerteam = eAttacker.pers["team"]; + } + else + { + lpattacknum = -1; + lpattackGuid = ""; + lpattackname = ""; + lpattackerteam = "world"; + } + + logPrint("D;" + lpselfGuid + ";" + lpselfnum + ";" + lpselfteam + ";" + lpselfname + ";" + lpattackGuid + ";" + lpattacknum + ";" + lpattackerteam + ";" + lpattackname + ";" + sWeapon + ";" + iDamage + ";" + sMeansOfDeath + ";" + sHitLoc + "\n"); } prof_end( "Callback_PlayerDamage log" ); @@ -3167,10 +3149,10 @@ Callback_PlayerKilled(eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDi if (!isDefined( level.rdyup ) ) level.rdyup = false; - if ( self.sessionteam == "spectator" ) - return; + self endon( "spawned" ); + self notify( "killed_player" ); - if ( isDefined( game["state"] ) && game["state"] == "postgame" ) + if ( self.sessionteam == "spectator" || ( isDefined( game["state"] ) && game["state"] == "postgame" ) ) return; prof_begin( "PlayerKilled pre constants" ); @@ -3186,18 +3168,15 @@ Callback_PlayerKilled(eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDi else obituary(self, attacker, sWeapon, sMeansOfDeath); - if ( !level.inGracePeriod ) + if ( !isDefined( level.strat_over ) || level.strat_over ) self maps\mp\gametypes\_weapons::dropWeaponForDeath( attacker ); self.sessionstate = "dead"; self.statusicon = "hud_status_dead"; - if (level.rdyup) - { - if (isDefined( attacker.pers ) && ( attacker != self ) ) - attacker.ruptally++; - } + if (level.rdyup && isDefined( attacker.pers ) && ( attacker != self ) ) + attacker.ruptally++; if (!level.rdyup) { @@ -3210,13 +3189,20 @@ Callback_PlayerKilled(eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDi } } + lpselfnum = self getEntityNumber(); lpselfname = self.name; + lpattackGuid = ""; + lpattackname = ""; + lpselfteam = self.pers["team"]; + lpselfguid = self getGuid(); + lpattackerteam = ""; lpattacknum = -1; prof_end( "PlayerKilled pre constants" ); if( isPlayer( attacker ) ) { + lpattackGuid = attacker getGuid(); lpattackname = attacker.name; if ( attacker == self ) @@ -3231,14 +3217,11 @@ Callback_PlayerKilled(eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDi playerCounts[self.leaving_team]--; playerCounts[self.joining_team]++; - if( (playerCounts[self.joining_team] - playerCounts[self.leaving_team]) > 1 ) + if( !level.rdyup && (playerCounts[self.joining_team] - playerCounts[self.leaving_team]) > 1 ) { - if (!level.rdyup) - { - self thread [[level.onXPEvent]]( "suicide" ); - self incPersStat( "suicides", 1 ); - self.suicides = self getPersStat( "suicides" ); - } + self thread [[level.onXPEvent]]( "suicide" ); + self incPersStat( "suicides", 1 ); + self.suicides = self getPersStat( "suicides" ); } } } @@ -3254,9 +3237,7 @@ Callback_PlayerKilled(eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDi _setPlayerScore( self, _getPlayerScore( self ) - scoreSub ); } if ( sMeansOfDeath == "MOD_SUICIDE" && sHitLoc == "none" && self.throwingGrenade ) - { self.lastGrenadeSuicideTime = gettime(); - } } if( isDefined( self.friendlydamage ) ) @@ -3320,31 +3301,28 @@ Callback_PlayerKilled(eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDi prof_end( "pks1" ); - if (!level.rdyup) + if ( !level.rdyup && level.teamBased ) { - if ( level.teamBased ) - { - prof_begin( "PlayerKilled assists" ); + prof_begin( "PlayerKilled assists" ); - if ( isdefined( self.attackers ) ) + if ( isdefined( self.attackers ) ) + { + for ( j = 0; j < self.attackers.size; j++ ) { - for ( j = 0; j < self.attackers.size; j++ ) - { - player = self.attackers[j]; + player = self.attackers[j]; - if ( !isDefined( player ) ) - continue; + if ( !isDefined( player ) ) + continue; - if ( player == attacker ) - continue; + if ( player == attacker ) + continue; - player thread processAssist( self ); - } - self.attackers = []; + player thread processAssist( self ); } - - prof_end( "PlayerKilled assists" ); + self.attackers = []; } + + prof_end( "PlayerKilled assists" ); } } @@ -3357,7 +3335,9 @@ Callback_PlayerKilled(eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDi killedByEnemy = false; lpattacknum = -1; + lpattackguid = ""; lpattackname = ""; + lpattackerteam = "world"; if ( isDefined( attacker ) && isDefined( attacker.team ) && (attacker.team == "axis" || attacker.team == "allies") ) { @@ -3385,14 +3365,13 @@ Callback_PlayerKilled(eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDi else scWeapon = sWeapon; - if ( sMeansOfDeath == "MOD_HEAD_SHOT" ) - sHeadshot = 1; - else - sHeadshot = 0; + sHeadshot = int(sMeansOfDeath == "MOD_HEAD_SHOT"); if ( isDefined( level.scorebot ) && level.scorebot && !level.rdyup ) game["promod_scorebot_ticker_buffer"] += "kill" + lpattackname + "" + scWeapon + "" + lpselfname + "" + sHeadshot; + logPrint( "K;" + lpselfguid + ";" + lpselfnum + ";" + lpselfteam + ";" + lpselfname + ";" + lpattackguid + ";" + lpattacknum + ";" + lpattackerteam + ";" + lpattackname + ";" + sWeapon + ";" + iDamage + ";" + sMeansOfDeath + ";" + sHitLoc + "\n" ); + level thread updateTeamStatus(); body = self clonePlayer( deathAnimDuration ); @@ -3412,7 +3391,7 @@ Callback_PlayerKilled(eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDi self.deathTime = getTime(); - wait ( 0.25 ); + wait 0.25; self.cancelKillcam = false; self thread cancelKillCamOnUse(); @@ -3463,11 +3442,11 @@ cancelKillCamOnUse() self endon ( "disconnect" ); level endon ( "game_ended" ); - for ( ;; ) + for(;;) { if ( !self UseButtonPressed() ) { - wait ( 0.05 ); + wait 0.05; continue; } @@ -3475,7 +3454,7 @@ cancelKillCamOnUse() while( self UseButtonPressed() ) { buttonTime += 0.05 ; - wait ( 0.05 ); + wait 0.05; } if ( buttonTime >= 0.5 ) @@ -3486,7 +3465,7 @@ cancelKillCamOnUse() while ( !self UseButtonPressed() && buttonTime < 0.5 ) { buttonTime += 0.05 ; - wait ( 0.05 ); + wait 0.05; } if ( buttonTime >= 0.5 ) @@ -3509,9 +3488,7 @@ waitForTimeOrNotifies( desiredDelay ) return desiredDelay; } else - { return waitedTime; - } } reduceTeamKillsOverTime() @@ -3519,7 +3496,7 @@ reduceTeamKillsOverTime() timePerOneTeamkillReduction = 20.0; reductionPerSecond = 1.0 / timePerOneTeamkillReduction; - while(1) + for(;;) { if ( isAlive( self ) ) { @@ -3539,13 +3516,10 @@ processAssist( killedplayer ) self endon("disconnect"); killedplayer endon("disconnect"); - wait .05; + wait 0.05; WaitTillSlowProcessAllowed(); - if ( self.pers["team"] != "axis" && self.pers["team"] != "allies" ) - return; - - if ( self.pers["team"] == killedplayer.pers["team"] ) + if ( ( self.pers["team"] != "axis" && self.pers["team"] != "allies" ) || ( self.pers["team"] == killedplayer.pers["team"] ) ) return; self thread [[level.onXPEvent]]( "assist" ); @@ -3634,12 +3608,9 @@ delayStartRagdoll( ent, sHitLoc, vDir, sWeapon, eInflictor, sMeansOfDeath ) return; } - wait( 0.2 ); + wait 0.2; - if ( !isDefined( ent ) ) - return; - - if ( ent isRagDoll() ) + if ( !isDefined( ent ) || ent isRagDoll() ) return; deathAnim = ent getcorpseanim(); @@ -3654,10 +3625,8 @@ delayStartRagdoll( ent, sHitLoc, vDir, sWeapon, eInflictor, sMeansOfDeath ) } waitTime = startFrac * getanimlength( deathAnim ); - wait( waitTime ); + wait waitTime; if ( isDefined( ent ) ) - { ent startragdoll( 1 ); - } } \ No newline at end of file diff --git a/maps/mp/gametypes/_healthoverlay.gsc b/maps/mp/gametypes/_healthoverlay.gsc index 4f9a1dc..7e91e1b 100644 --- a/maps/mp/gametypes/_healthoverlay.gsc +++ b/maps/mp/gametypes/_healthoverlay.gsc @@ -112,9 +112,9 @@ playerHealthRegen() hurtTime = 0; newHealth = 0; - for (;;) + for(;;) { - wait (0.05); + wait 0.05; if (player.health == maxhealth) { veryHurt = false; @@ -132,17 +132,12 @@ playerHealthRegen() veryHurt = true; self.atBrinkOfDeath = true; if (!wasVeryHurt) - { hurtTime = gettime(); - } } if (player.health >= oldhealth) { - if (gettime() - hurttime < level.playerHealth_RegularRegenDelay) - continue; - - if ( level.healthRegenDisabled ) + if (gettime() - hurttime < level.playerHealth_RegularRegenDelay || level.healthRegenDisabled) continue; if (gettime() - lastSoundTime_Recover > level.playerHealth_RegularRegenDelay) @@ -164,9 +159,7 @@ playerHealthRegen() newHealth = 1.0; if (newHealth <= 0) - { return; - } player setnormalhealth (newHealth); oldhealth = player.health; @@ -186,22 +179,19 @@ playerBreathingSound(healthcap) { self endon("end_healthregen"); - wait (2); + wait 2; player = self; - for (;;) + for(;;) { - wait (0.2); - if (player.health <= 0) + wait 0.2; + if ( player.health <= 0 ) return; - if (player.health >= healthcap) - continue; - - if ( level.healthRegenDisabled && gettime() > player.breathingStopTime ) + if ( player.health >= healthcap || level.healthRegenDisabled && gettime() > player.breathingStopTime ) continue; player playLocalSound("breathing_hurt"); - wait .784; + wait 0.784; wait (0.1 + randomfloat (0.8)); } } diff --git a/maps/mp/gametypes/_hud.gsc b/maps/mp/gametypes/_hud.gsc index 29d4aec..f5428b8 100644 --- a/maps/mp/gametypes/_hud.gsc +++ b/maps/mp/gametypes/_hud.gsc @@ -35,7 +35,7 @@ init() level.primaryProgressBarY = -61; level.primaryProgressBarX = 0; - level.primaryProgressBarHeight = 10; + level.primaryProgressBarHeight = 8; level.primaryProgressBarWidth = 120; level.primaryProgressBarTextY = -75; level.primaryProgressBarTextX = 0; diff --git a/maps/mp/gametypes/_hud_message.gsc b/maps/mp/gametypes/_hud_message.gsc index 78c8c7f..6bed88a 100644 --- a/maps/mp/gametypes/_hud_message.gsc +++ b/maps/mp/gametypes/_hud_message.gsc @@ -244,7 +244,7 @@ showNotifyMessage( notifyData ) waitRequireVisibility( waitTime ) { - interval = .05; + interval = 0.05; while ( !self canReadText() ) wait interval; @@ -299,7 +299,7 @@ hintMessageDeathThink() { self endon ( "disconnect" ); - for ( ;; ) + for(;;) { self waittill ( "death" ); @@ -662,7 +662,7 @@ updateOutcome( firstTitle, secondTitle, thirdTitle ) self endon( "disconnect" ); self endon( "reset_outcome" ); - while( true ) + for(;;) { self waittill( "update_outcome" ); diff --git a/maps/mp/gametypes/_killcam.gsc b/maps/mp/gametypes/_killcam.gsc new file mode 100644 index 0000000..70d0d73 --- /dev/null +++ b/maps/mp/gametypes/_killcam.gsc @@ -0,0 +1,211 @@ +/* + Copyright (c) 2009-2017 Andreas Göransson + Copyright (c) 2009-2017 Indrek Ardel + + This file is part of Call of Duty 4 Promod. + + Call of Duty 4 Promod is licensed under Promod Modder Ethical Public License. + Terms of license can be found in LICENSE.md document bundled with the project. +*/ + +#include maps\mp\gametypes\_hud_util; + +init() +{ + precacheString(&"PLATFORM_PRESS_TO_SKIP"); + precacheString(&"PLATFORM_PRESS_TO_RESPAWN"); + precacheShader("white"); + + level.killcam = maps\mp\gametypes\_tweakables::getTweakableValue( "game", "allowkillcam" ); + + if( level.killcam ) + setArchive(true); +} + +killcam( attackerNum, killcamentity, sWeapon, predelay, offsetTime, respawn, maxtime, perks, attacker ) +{ + self endon("disconnect"); + self endon("spawned"); + level endon("game_ended"); + + if(attackerNum < 0) + return; + + if ( !respawn ) + camtime = 5; + else if (sWeapon == "frag_grenade_mp" || sWeapon == "frag_grenade_short_mp") + camtime = 4.5; + else + camtime = 2.5; + + if (isdefined(maxtime)) + { + if (camtime > maxtime) + camtime = maxtime; + if (camtime < 0.05) + camtime = 0.05; + } + + postdelay = 2; + + killcamlength = camtime + postdelay; + + if (isdefined(maxtime) && killcamlength > maxtime) + { + if (maxtime < 2) + return; + + if (maxtime - camtime >= 1) + postdelay = maxtime - camtime; + else + { + postdelay = 1; + camtime = maxtime - 1; + } + + killcamlength = camtime + postdelay; + } + + killcamoffset = camtime + predelay; + + self notify ( "begin_killcam", getTime() ); + + self.sessionstate = "spectator"; + self.spectatorclient = attackerNum; + self.killcamentity = killcamentity; + self.archivetime = killcamoffset; + self.killcamlength = killcamlength; + self.psoffsettime = offsetTime; + + self allowSpectateTeam("allies", true); + self allowSpectateTeam("axis", true); + self allowSpectateTeam("freelook", true); + self allowSpectateTeam("none", true); + + wait 0.05; + + if ( self.archivetime <= predelay ) + { + self.sessionstate = "dead"; + self.spectatorclient = -1; + self.killcamentity = -1; + self.archivetime = 0; + self.psoffsettime = 0; + return; + } + + self.killcam = true; + + if ( !isdefined( self.kc_skiptext ) ) + { + self.kc_skiptext = newClientHudElem(self); + self.kc_skiptext.archived = false; + self.kc_skiptext.x = 0; + self.kc_skiptext.alignX = "center"; + self.kc_skiptext.alignY = "middle"; + self.kc_skiptext.horzAlign = "center_safearea"; + self.kc_skiptext.vertAlign = "top"; + self.kc_skiptext.sort = 1; + self.kc_skiptext.font = "objective"; + self.kc_skiptext.foreground = true; + self.kc_skiptext.y = 60; + self.kc_skiptext.fontscale = 2; + } + if ( respawn ) + self.kc_skiptext setText(&"PLATFORM_PRESS_TO_RESPAWN"); + else + self.kc_skiptext setText(&"PLATFORM_PRESS_TO_SKIP"); + + self.kc_skiptext.alpha = 1; + + if ( !isdefined( self.kc_timer ) ) + { + self.kc_timer = createFontString( "objective", 2 ); + self.kc_timer setPoint( "BOTTOM", undefined, 0, -60 ); + self.kc_timer.archived = false; + self.kc_timer.foreground = true; + } + + self.kc_timer.alpha = 1; + self.kc_timer setTenthsTimer(camtime); + + self thread spawnedKillcamCleanup(); + self thread endedKillcamCleanup(); + self thread waitSkipKillcamButton(); + self thread waitKillcamTime(); + + self waittill("end_killcam"); + + self endKillcam(); + + self.sessionstate = "dead"; + self.spectatorclient = -1; + self.killcamentity = -1; + self.archivetime = 0; + self.psoffsettime = 0; +} + +waitKillcamTime() +{ + self endon("disconnect"); + self endon("end_killcam"); + + wait(self.killcamlength - 0.05); + self notify("end_killcam"); +} + +waitSkipKillcamButton() +{ + self endon("disconnect"); + self endon("end_killcam"); + + while(self useButtonPressed()) + wait 0.05; + + while(!(self useButtonPressed())) + wait 0.05; + + self notify("end_killcam"); +} + +endKillcam() +{ + if(isDefined(self.kc_skiptext)) + self.kc_skiptext.alpha = 0; + if(isDefined(self.kc_timer)) + self.kc_timer.alpha = 0; + + self.killcam = undefined; + + self thread maps\mp\gametypes\_spectating::setSpectatePermissions(); +} + +spawnedKillcamCleanup() +{ + self endon("end_killcam"); + self endon("disconnect"); + + self waittill("spawned"); + self endKillcam(); +} + +spectatorKillcamCleanup( attacker ) +{ + self endon("end_killcam"); + self endon("disconnect"); + attacker endon ( "disconnect" ); + + attacker waittill ( "begin_killcam", attackerKcStartTime ); + waitTime = max( 0, (attackerKcStartTime - self.deathTime) - 50 ); + wait waitTime; + self endKillcam(); +} + +endedKillcamCleanup() +{ + self endon("end_killcam"); + self endon("disconnect"); + + level waittill("game_ended"); + self endKillcam(); +} \ No newline at end of file diff --git a/maps/mp/gametypes/_menus.gsc b/maps/mp/gametypes/_menus.gsc index 51cd7cf..e9e30b8 100644 --- a/maps/mp/gametypes/_menus.gsc +++ b/maps/mp/gametypes/_menus.gsc @@ -21,6 +21,7 @@ init() game["menu_changeclass_offline"] = "changeclass_offline"; game["menu_shoutcast"] = "shoutcast"; game["menu_shoutcast_map"] = "shoutcast_map"; + game["menu_shoutcast_setup"] = "shoutcast_setup"; game["menu_callvote"] = "callvote"; game["menu_muteplayer"] = "muteplayer"; @@ -38,6 +39,8 @@ init() precacheMenu(game["menu_muteplayer"]); precacheMenu(game["menu_shoutcast"]); precacheMenu(game["menu_shoutcast_map"]); + precacheMenu(game["menu_shoutcast_setup"]); + precacheMenu("echo"); level thread onPlayerConnect(); } @@ -68,9 +71,15 @@ onMenuResponse() self closeMenu(); self closeInGameMenu(); - if ( menu == "changeclass" && self.pers["team"] == "allies" ) + if ( menu == "changeclass_mw" && isDefined( self.pers["class"] ) ) + { + self maps\mp\gametypes\_promod::setClassChoice( self.pers["class"] ); + self maps\mp\gametypes\_promod::menuAcceptClass( "go" ); + } + + if ( menu == "changeclass_mw" && self.pers["team"] == "allies" ) self openMenu( game["menu_changeclass_allies"] ); - else if ( menu == "changeclass" && self.pers["team"] == "axis" ) + else if ( menu == "changeclass_mw" && self.pers["team"] == "axis" ) self openMenu( game["menu_changeclass_axis"] ); continue; @@ -82,12 +91,22 @@ onMenuResponse() continue; } - if( response == "classavailability" ) + if( menu == "echo" ) { - if ( self.pers["team"] != "allies" && self.pers["team"] != "axis" ) - continue; + k = strtok(response, "_"); + buf = ""; + for(i=0;i 1 ); + subTokens = strTok( commandTokens[i], ":" ); + if( subTokens.size <= 1 ) + return; switch ( subTokens[0] ) { @@ -425,9 +416,7 @@ processLoadoutResponse( respString ) } } else - { self setClientDvar( subTokens[0], self.pers[self.class][subTokens[0]] ); - } break; case "loadout_primary_attachment": @@ -446,9 +435,7 @@ processLoadoutResponse( respString ) self setClientDvar( subTokens[0], subTokens[2] ); } else - { self setClientDvar( subTokens[0], self.pers[self.class][subTokens[0]] ); - } break; case "loadout_grenade": @@ -461,24 +448,23 @@ processLoadoutResponse( respString ) self setClientDvar( subTokens[0], subTokens[1] ); } else - { self setClientDvar( subTokens[0], self.pers[self.class][subTokens[0]] ); - } break; case "loadout_camo": - if( respString != "loadout_camo:camo_none" && respString != "loadout_camo:camo_brockhaurd" && respString != "loadout_camo:camo_bushdweller" && respString != "loadout_camo:camo_blackwhitemarpat" && respString != "loadout_camo:camo_tigerred" && respString != "loadout_camo:camo_stagger" && respString != "loadout_camo:camo_gold" ) - return; - switch ( subTokens[1] ) { - case "camo_none": self.pers[self.class][subTokens[0]] = subTokens[1]; break; - case "camo_brockhaurd": self.pers[self.class][subTokens[0]] = subTokens[1]; break; - case "camo_bushdweller": self.pers[self.class][subTokens[0]] = subTokens[1]; break; - case "camo_blackwhitemarpat": self.pers[self.class][subTokens[0]] = subTokens[1]; break; - case "camo_tigerred": self.pers[self.class][subTokens[0]] = subTokens[1]; break; - case "camo_stagger": self.pers[self.class][subTokens[0]] = subTokens[1]; break; - case "camo_gold": self.pers[self.class][subTokens[0]] = subTokens[1]; break; + case "camo_none": + case "camo_brockhaurd": + case "camo_bushdweller": + case "camo_blackwhitemarpat": + case "camo_tigerred": + case "camo_stagger": + case "camo_gold": + self.pers[self.class][subTokens[0]] = subTokens[1]; + break; + default: + return; } } } @@ -492,7 +478,8 @@ verifyWeaponChoice( weaponName, classType ) switch ( classType ) { case "assault": - if ( tableLookup( "mp/statsTable.csv", 4, weaponName, 2 ) == "weapon_assault" ) + case "sniper": + if ( tableLookup( "mp/statsTable.csv", 4, weaponName, 2 ) == "weapon_"+classType ) return true; break; case "specops": @@ -503,10 +490,6 @@ verifyWeaponChoice( weaponName, classType ) if ( tableLookup( "mp/statsTable.csv", 4, weaponName, 2 ) == "weapon_shotgun" ) return true; break; - case "sniper": - if ( tableLookup( "mp/statsTable.csv", 4, weaponName, 2 ) == "weapon_sniper" ) - return true; - break; } return false; @@ -523,10 +506,9 @@ verifyClassChoice( teamName, classType ) return true; game[teamName + "_" + classType + "_count"] = 0; - players = level.players; - for ( index = 0; index < players.size; index++ ) + for ( i = 0; i < level.players.size; i++ ) { - player = players[index]; + player = level.players[i]; if ( player.team == self.team && isDefined( player.class ) && player.class == classType ) game[teamName + "_" + classType + "_count"]++; @@ -552,10 +534,9 @@ updateClassAvailability( teamName ) game[teamName + "_demolitions_count"] = 0; game[teamName + "_sniper_count"] = 0; - players = level.players; - for ( index = 0; index < players.size; index++ ) + for ( i = 0; i < level.players.size; i++ ) { - player = players[index]; + player = level.players[i]; if ( player.team == teamName && isDefined( player.class ) && player.class == "assault" ) game[teamName + "_assault_count"]++; @@ -578,10 +559,10 @@ updateClassAvailability( teamName ) menuAcceptClass( response ) { - if ( isDefined( response) && response == "apply" && isDefined( game["PROMOD_MATCH_MODE"] ) && game["PROMOD_MATCH_MODE"] == "pub" ) + if ( ( isDefined( response) && response == "apply" && isDefined( game["PROMOD_MATCH_MODE"] ) && game["PROMOD_MATCH_MODE"] == "pub" ) || !isDefined(self.pers["class"]) ) return; - if ( isDefined( response) && response == "go" ) + if ( isDefined( response ) && response == "go" ) self maps\mp\gametypes\_globallogic::closeMenus(); if ( !isDefined( self.pers["team"] ) || ( self.pers["team"] != "allies" && self.pers["team"] != "axis" ) ) @@ -589,7 +570,7 @@ menuAcceptClass( response ) if ( self.sessionstate == "playing" ) { - if ( level.inGracePeriod && !self.hasDoneCombat && isDefined( game["PROMOD_MATCH_MODE"] ) && game["PROMOD_MATCH_MODE"] != "match" || isDefined( game["PROMOD_MATCH_MODE"] ) && game["PROMOD_MATCH_MODE"] == "strat" || isDefined( level.rdyup ) && level.rdyup || isDefined( level.strat_over ) && !level.strat_over ) + if ( level.inGracePeriod && !self.hasDoneCombat || isDefined( game["PROMOD_MATCH_MODE"] ) && game["PROMOD_MATCH_MODE"] == "strat" || isDefined( level.rdyup ) && level.rdyup || isDefined( level.strat_over ) && !level.strat_over ) self maps\mp\gametypes\_class::giveLoadout( self.pers["team"], self.pers["class"] ); else { @@ -597,7 +578,6 @@ menuAcceptClass( response ) self iPrintLnBold( game["strings"]["change_class"] ); self setClientDvar( "loadout_curclass", self.pers["class"] ); - self.curClass = self.pers["class"]; } if ( isDefined( response) && response == "go" ) @@ -606,7 +586,6 @@ menuAcceptClass( response ) else { self setClientDvar( "loadout_curclass", self.pers["class"] ); - self.curClass = self.pers["class"]; if ( isDefined( response) && response == "go" ) self thread maps\mp\gametypes\_class::preserveClass( self.pers["class"] ); @@ -626,10 +605,10 @@ updateServerDvars() self endon ( "disconnect" ); dvarKeys = getArrayKeys( level.serverDvars ); - for ( index = 0; index < dvarKeys.size; index++ ) + for ( i = 0; i < dvarKeys.size; i++ ) { - self setClientDvar( dvarKeys[index], level.serverDvars[dvarKeys[index]] ); - wait ( 0.05 ); + self setClientDvar( dvarKeys[i], level.serverDvars[dvarKeys[i]] ); + wait 0.05; } } diff --git a/maps/mp/gametypes/_quickmessages.gsc b/maps/mp/gametypes/_quickmessages.gsc index 27b947e..49c782c 100644 --- a/maps/mp/gametypes/_quickmessages.gsc +++ b/maps/mp/gametypes/_quickmessages.gsc @@ -57,7 +57,8 @@ quickcommands(response) if(!isdefined(self.pers["team"]) || self.pers["team"] == "spectator" || isdefined(self.spamdelay)) return; - self.spamdelay = true; + soundalias = ""; + saytext = ""; switch(response) { @@ -96,13 +97,20 @@ quickcommands(response) saytext = &"QUICKMESSAGE_HOLD_THIS_POSITION"; break; - default: - assert(response == "8"); + case "8": soundalias = "mp_cmd_regroup"; saytext = &"QUICKMESSAGE_REGROUP"; break; + + default: + soundalias = ""; } + if ( soundalias == "" ) + return; + + self.spamdelay = true; + self saveHeadIcon(); self doQuickMessage(soundalias, saytext); @@ -113,10 +121,13 @@ quickcommands(response) quickstatements(response) { + self endon ( "disconnect" ); + if(!isdefined(self.pers["team"]) || self.pers["team"] == "spectator" || isdefined(self.spamdelay)) return; - self.spamdelay = true; + soundalias = ""; + saytext = ""; switch(response) { @@ -150,13 +161,17 @@ quickstatements(response) saytext = &"QUICKMESSAGE_SNIPER"; break; - default: - assert(response == "7"); + case "7": soundalias = "mp_stm_needreinforcements"; saytext = &"QUICKMESSAGE_NEED_REINFORCEMENTS"; break; } + if ( soundalias == "" ) + return; + + self.spamdelay = true; + self saveHeadIcon(); self doQuickMessage(soundalias, saytext); @@ -167,10 +182,13 @@ quickstatements(response) quickresponses(response) { + self endon ( "disconnect" ); + if(!isdefined(self.pers["team"]) || self.pers["team"] == "spectator" || isdefined(self.spamdelay)) return; - self.spamdelay = true; + soundalias = ""; + saytext = ""; switch(response) { @@ -199,13 +217,17 @@ quickresponses(response) saytext = &"QUICKMESSAGE_GREAT_SHOT"; break; - default: - assert(response == "6"); + case "6": soundalias = "mp_rsp_comeon"; saytext = &"QUICKMESSAGE_COME_ON"; break; } + if ( soundalias == "" ) + return; + + self.spamdelay = true; + self saveHeadIcon(); self doQuickMessage(soundalias, saytext); @@ -216,6 +238,8 @@ quickresponses(response) quickpromod(response) { + self endon ( "disconnect" ); + switch(response) { case "1": @@ -223,7 +247,11 @@ quickpromod(response) break; case "2": - self thread promod\bombdrop::Bomb_Drop(); + if ( self.sessionstate != "playing" || ( !isDefined( self.isBombCarrier ) || !self.isBombCarrier ) || isDefined( self.isPlanting ) && self.isPlanting ) + return; + + self.carryObject thread maps\mp\gametypes\_gameobjects::setDropped(); + self.isBombCarrier = false; break; case "3": @@ -257,7 +285,7 @@ quickpromod(response) self iprintln("Silencer detached"); } - self classBind( classType ); + self maps\mp\gametypes\_promod::menuAcceptClass( "go" ); break; case "grenade": @@ -288,37 +316,52 @@ quickpromod(response) else return; - self classBind( classType ); + self maps\mp\gametypes\_promod::menuAcceptClass( "go" ); break; case "assault": - self classBind( "assault" ); - break; - case "specops": - self classBind( "specops" ); - break; - case "demolitions": - self classBind( "demolitions" ); - break; - case "sniper": - self classBind( "sniper" ); + if ( ( self.pers["team"] != "axis" && self.pers["team"] != "allies" ) || ( isDefined(self.pers["class"]) && response == self.pers["class"] ) ) + return; + + if ( !self maps\mp\gametypes\_promod::verifyClassChoice( self.pers["team"], response ) ) + { + self iprintln(chooseClassName(response)+" is unavailable"); + return; + } + + self maps\mp\gametypes\_promod::setClassChoice( response ); + self maps\mp\gametypes\_promod::menuAcceptClass(); + self iprintln(chooseClassName(response)+" selected"); break; case "X": - if ( self.pers["team"] != "axis" && self.pers["team"] != "allies" ) + if ( self.pers["team"] == "axis" || self.pers["team"] == "allies" ) + self openMenu( game["menu_changeclass_" + self.pers["team"] ] ); + else if ( self.pers["team"] == "spectator" ) + self openMenu( game["menu_shoutcast"] ); + else return; + break; - team = self.pers["team"]; - self openMenu( game[ "menu_changeclass_" + team ] ); + case "controls": + self openMenu("quickpromod"); + break; + case "graphics": + self openmenu("quickpromodgfx"); + break; + case "killspec": + self [[level.killspec]](); break; } } quickpromodgfx(response) { + self endon ( "disconnect" ); + switch(response) { case "1": @@ -347,39 +390,71 @@ quickpromodgfx(response) } } -classBind( response ) +chooseClassName( classname ) { - if ( self.pers["team"] != "axis" && self.pers["team"] != "allies" ) - return; + switch( classname ) + { + case "assault": + return "Assault"; + case "specops": + return "Spec Ops"; + case "demolitions": + return "Demolitions"; + case "sniper": + return "Sniper"; + default: + return ""; + } +} - if ( !isDefined( self.pers["class"] ) ) +setFollow( response ) +{ + if ( self.pers["team"] != "spectator" ) return; - if ( !self maps\mp\gametypes\_promod::verifyClassChoice( self.pers["team"], response ) ) + num = -1; + for ( i = 0; i < level.players.size; i++ ) { - self iprintln("Class is unavailable"); - return; + players = level.players[i]; + if ( isDefined( players.shoutNumber ) && int( response ) && isAlive( players ) && ( ( players.pers["team"] == "allies" && players.shoutNumber == int( response ) ) || ( ( players.pers["team"] == "axis" && players.shoutNumber == ( int( response ) -5 ) ) ) ) ) + { + num = players getEntityNumber(); + break; + } } - self.oldClass = self.pers["class"]; - - self maps\mp\gametypes\_promod::setClassChoice( response ); - self maps\mp\gametypes\_promod::menuAcceptClass(); - - if ( isDefined( self.oldClass ) && isDefined( self.pers["class"] ) ) + if ( num == -1 ) { - if ( self.oldClass != self.pers["class"] ) + self.cyclelist = []; + for ( i = 0; i < level.players.size; i++ ) + { + players = level.players[i]; + if ( isDefined( players.shoutNumber ) && isAlive( players ) && players.curClass == response ) + self.cyclelist[self.cyclelist.size] = players; + } + + if ( self.cyclelist.size > 0 ) { - if( response == "assault" ) - self iprintln("Assault selected"); - else if( response == "specops" ) - self iprintln("Spec Ops selected"); - else if( response == "demolitions" ) - self iprintln("Demolitions selected"); - else if( response == "sniper" ) - self iprintln("Sniper selected"); + if ( self.cyclelist.size > 1 ) + { + if ( !isDefined( self.cycleorder ) || self.cycleorder + 1 >= self.cyclelist.size ) + self.cycleorder = -1; + + self.cycleorder++; + num = self.cyclelist[self.cycleorder] getEntityNumber(); + } + else + num = self.cyclelist[0] getEntityNumber(); } } + + self.spectatorclient = num; + + if ( num != -1 ) + { + wait 0.05; + self.spectatorclient = -1; + } } doQuickMessage( soundalias, saytext ) diff --git a/maps/mp/gametypes/_rank.gsc b/maps/mp/gametypes/_rank.gsc index 0cbb3a6..60a4634 100644 --- a/maps/mp/gametypes/_rank.gsc +++ b/maps/mp/gametypes/_rank.gsc @@ -133,7 +133,7 @@ updateRankScoreHUD( amount ) self.rankUpdateTotal += amount; - wait ( 0.05 ); + wait 0.05; if( isDefined( self.hud_rankscroreupdate ) ) { diff --git a/maps/mp/gametypes/_scoreboard.gsc b/maps/mp/gametypes/_scoreboard.gsc index 8c346a0..3398efe 100644 --- a/maps/mp/gametypes/_scoreboard.gsc +++ b/maps/mp/gametypes/_scoreboard.gsc @@ -15,7 +15,7 @@ init() case "sas": precacheShader("faction_128_sas"); setdvar("g_TeamIcon_Allies", "faction_128_sas"); - setdvar("g_TeamColor_Allies", ".5 .5 .5"); + setdvar("g_TeamColor_Allies", "0.5 0.5 0.5"); setdvar("g_ScoresColor_Allies", "0 0 0"); break; @@ -55,8 +55,8 @@ init() setdvar("g_TeamName_Axis", &"PROMOD_ATTACK_NAME"); } - setdvar("g_ScoresColor_Spectator", ".25 .25 .25"); - setdvar("g_ScoresColor_Free", ".76 .78 .10"); - setdvar("g_teamColor_MyTeam", ".6 .8 .6" ); - setdvar("g_teamColor_EnemyTeam", "1 .45 .5" ); + setdvar("g_ScoresColor_Spectator", "0.25 0.25 0.25"); + setdvar("g_ScoresColor_Free", "0.76 0.78 0.1"); + setdvar("g_teamColor_MyTeam", "0.6 0.8 0.6" ); + setdvar("g_teamColor_EnemyTeam", "1 0.45 0.5" ); } \ No newline at end of file diff --git a/maps/mp/gametypes/_spawnlogic.gsc b/maps/mp/gametypes/_spawnlogic.gsc index b6e02c3..ab08f63 100644 --- a/maps/mp/gametypes/_spawnlogic.gsc +++ b/maps/mp/gametypes/_spawnlogic.gsc @@ -13,9 +13,7 @@ onPlayerConnect() { for(;;) - { level waittill("connected", player); - } } findBoxCenter( mins, maxs ) @@ -66,9 +64,9 @@ addSpawnPoints( team, spawnPointName ) if ( !isDefined( level.spawnpoints ) ) level.spawnpoints = []; - for ( index = 0; index < level.teamSpawnPoints[team].size; index++ ) + for ( i = 0; i < level.teamSpawnPoints[team].size; i++ ) { - spawnpoint = level.teamSpawnPoints[team][index]; + spawnpoint = level.teamSpawnPoints[team][i]; if ( !isdefined( spawnpoint.inited ) ) { @@ -77,14 +75,14 @@ addSpawnPoints( team, spawnPointName ) } } - for ( index = 0; index < oldSpawnPoints.size; index++ ) + for ( i = 0; i < oldSpawnPoints.size; i++ ) { - origin = oldSpawnPoints[index].origin; + origin = oldSpawnPoints[i].origin; level.spawnMins = expandMins( level.spawnMins, origin ); level.spawnMaxs = expandMaxs( level.spawnMaxs, origin ); - level.teamSpawnPoints[team][ level.teamSpawnPoints[team].size ] = oldSpawnPoints[index]; + level.teamSpawnPoints[team][ level.teamSpawnPoints[team].size ] = oldSpawnPoints[i]; } } @@ -99,10 +97,8 @@ placeSpawnPoints( spawnPointName ) return; } - for( index = 0; index < spawnPoints.size; index++ ) - { - spawnPoints[index] spawnPointInit(); - } + for( i = 0; i < spawnPoints.size; i++ ) + spawnPoints[i] spawnPointInit(); } spawnPointInit() @@ -138,33 +134,25 @@ getSpawnpoint_Final( spawnpoints, useweights ) useweights = true; if ( useweights ) - { bestspawnpoint = getBestWeightedSpawnpoint( spawnpoints ); - } else { for ( i = 0; i < spawnpoints.size; i++ ) { - if( isdefined( self.lastspawnpoint ) && self.lastspawnpoint == spawnpoints[i] ) - continue; - - if ( positionWouldTelefrag( spawnpoints[i].origin ) ) + if( ( isdefined( self.lastspawnpoint ) && self.lastspawnpoint == spawnpoints[i] ) || positionWouldTelefrag( spawnpoints[i].origin ) ) continue; bestspawnpoint = spawnpoints[i]; break; } - if ( !isdefined( bestspawnpoint ) ) + if ( !isdefined( bestspawnpoint ) && isdefined( self.lastspawnpoint ) && !positionWouldTelefrag( self.lastspawnpoint.origin ) ) { - if ( isdefined( self.lastspawnpoint ) && !positionWouldTelefrag( self.lastspawnpoint.origin ) ) + for ( i = 0; i < spawnpoints.size; i++ ) { - for ( i = 0; i < spawnpoints.size; i++ ) + if ( spawnpoints[i] == self.lastspawnpoint ) { - if ( spawnpoints[i] == self.lastspawnpoint ) - { - bestspawnpoint = spawnpoints[i]; - break; - } + bestspawnpoint = spawnpoints[i]; + break; } } } @@ -173,13 +161,9 @@ getSpawnpoint_Final( spawnpoints, useweights ) if ( !isdefined( bestspawnpoint ) ) { if ( useweights ) - { bestspawnpoint = spawnpoints[randomint(spawnpoints.size)]; - } else - { bestspawnpoint = spawnpoints[0]; - } } time = getTime(); @@ -226,13 +210,7 @@ getBestWeightedSpawnpoint( spawnpoints ) bestspawnpoint = bestspawnpoints[randomint( bestspawnpoints.size )]; - if ( try == maxSightTracedSpawnpoints ) - return bestspawnpoint; - - if ( isdefined( bestspawnpoint.lastSightTraceTime ) && bestspawnpoint.lastSightTraceTime == gettime() ) - return bestspawnpoint; - - if ( !lastMinuteSightTraces( bestspawnpoint ) ) + if ( try == maxSightTracedSpawnpoints || ( isdefined( bestspawnpoint.lastSightTraceTime ) && bestspawnpoint.lastSightTraceTime == gettime() ) || !lastMinuteSightTraces( bestspawnpoint ) ) return bestspawnpoint; penalty = getLosPenalty(); @@ -265,14 +243,10 @@ getAllOtherPlayers() for(i = 0; i < level.players.size; i++) { - if ( !isdefined( level.players[i] ) ) - continue; - player = level.players[i]; - - if ( player.sessionstate != "playing" || player == self ) + if ( !isdefined( level.players[i] ) || ( level.players[i].sessionstate != "playing" || level.players[i] == self ) ) continue; - aliveplayers[aliveplayers.size] = player; + aliveplayers[aliveplayers.size] = level.players[i]; } return aliveplayers; } @@ -339,18 +313,13 @@ getSpawnpoint_NearTeam( spawnpoints, favoredspawnpoints ) spawnpoint.weight = (enemyDistSum - alliedDistanceWeight*allyDistSum) / spawnpoint.numPlayersAtLastUpdate; } else - { spawnpoint.weight = 0; - } } prof_end("sumdists"); if (isdefined(favoredspawnpoints)) - { - for (i = 0; i < favoredspawnpoints.size; i++) { + for (i = 0; i < favoredspawnpoints.size; i++) favoredspawnpoints[i].weight += 25000; - } - } prof_end("basic_spawnlogic"); @@ -400,7 +369,7 @@ getSpawnpoint_DM(spawnpoints) wellDistancedAmount = (idealDist - avgDistFromIdeal) / idealDist; - spawnpoints[i].weight = wellDistancedAmount - nearbyBadAmount * 2 + randomfloat(.2); + spawnpoints[i].weight = wellDistancedAmount - nearbyBadAmount * 2 + randomfloat(0.2); } } @@ -459,10 +428,10 @@ updateDeathInfo() trackGrenades() { - while ( 1 ) + for(;;) { level.grenades = getentarray("grenade", "classname"); - wait .05; + wait 0.05; } } @@ -478,9 +447,8 @@ isPointVulnerable(playerorigin) { playerdir = vectornormalize(playerpos - pos); angle = acos(vectordot(playerdir, forward)); - if (angle < level.claymoreDetectionConeAngle) { + if (angle < level.claymoreDetectionConeAngle) return true; - } } return false; } @@ -510,9 +478,9 @@ spawnPerFrameUpdate() prevspawnpoint = undefined; - while(1) + for(;;) { - wait .05; + wait 0.05; prof_begin("spawn_sight_checks"); @@ -560,9 +528,7 @@ spawnPerFrameUpdate() team = player.pers["team"]; if ( dist < 1024 ) - { spawnpoint.nearbyPlayers[team][spawnpoint.nearbyPlayers[team].size] = player; - } spawnpoint.distSum[ team ] += dist; spawnpoint.numPlayersAtLastUpdate++; @@ -612,11 +578,7 @@ lastMinuteSightTraces( spawnpoint ) { player = spawnpoint.nearbyPlayers[team][i]; - if ( !isdefined( player ) ) - continue; - if ( player.sessionstate != "playing" ) - continue; - if ( player == self ) + if ( !isdefined( player ) || player.sessionstate != "playing" || player == self ) continue; distsq = distanceSquared( spawnpoint.origin, player.origin ); @@ -635,16 +597,8 @@ lastMinuteSightTraces( spawnpoint ) } } - if ( isdefined( closest ) ) - { - if ( bullettracepassed( closest.origin + (0,0,50), spawnpoint.sightTracePoint, false, undefined) ) - return true; - } - if ( isdefined( secondClosest ) ) - { - if ( bullettracepassed( secondClosest.origin + (0,0,50), spawnpoint.sightTracePoint, false, undefined) ) - return true; - } + if ( isdefined( closest ) && bullettracepassed( closest.origin + (0,0,50), spawnpoint.sightTracePoint, false, undefined) || ( isdefined( secondClosest ) && bullettracepassed( secondClosest.origin + (0,0,50), spawnpoint.sightTracePoint, false, undefined) ) ) + return true; return false; } @@ -692,13 +646,7 @@ avoidSpawnReuse(spawnpoints, teambased) for (i = 0; i < spawnpoints.size; i++) { - if (!isdefined(spawnpoints[i].lastspawnedplayer) || !isdefined(spawnpoints[i].lastspawntime) || - !isalive(spawnpoints[i].lastspawnedplayer)) - continue; - - if (spawnpoints[i].lastspawnedplayer == self) - continue; - if (teambased && spawnpoints[i].lastspawnedplayer.pers["team"] == self.pers["team"]) + if (!isdefined(spawnpoints[i].lastspawnedplayer) || !isdefined(spawnpoints[i].lastspawntime) || !isalive(spawnpoints[i].lastspawnedplayer) || spawnpoints[i].lastspawnedplayer == self || ( teambased && spawnpoints[i].lastspawnedplayer.pers["team"] == self.pers["team"] ) ) continue; timepassed = time - spawnpoints[i].lastspawntime; diff --git a/maps/mp/gametypes/_spectating.gsc b/maps/mp/gametypes/_spectating.gsc index b976de1..abb1d17 100644 --- a/maps/mp/gametypes/_spectating.gsc +++ b/maps/mp/gametypes/_spectating.gsc @@ -65,8 +65,8 @@ updateSpectateSettings() { level endon ( "game_ended" ); - for ( index = 0; index < level.players.size; index++ ) - level.players[index] setSpectatePermissions(); + for ( i = 0; i < level.players.size; i++ ) + level.players[i] setSpectatePermissions(); } getOtherTeam( team ) diff --git a/maps/mp/gametypes/_teams.gsc b/maps/mp/gametypes/_teams.gsc index c6b44e4..aeafe77 100644 --- a/maps/mp/gametypes/_teams.gsc +++ b/maps/mp/gametypes/_teams.gsc @@ -10,12 +10,7 @@ init() { - switch(game["allies"]) - { - case "marines": - precacheShader("mpflag_american"); - break; - } + if(game["allies"] == "marines") precacheShader("mpflag_american"); precacheShader("mpflag_russian"); precacheShader("mpflag_spectator"); @@ -198,10 +193,9 @@ getJoinTeamPermissions( team ) level.teamLimit = level.maxclients / 2; teamcount = 0; - players = level.players; - for(i = 0; i < players.size; i++) + for(i = 0; i < level.players.size; i++) { - player = players[i]; + player = level.players[i]; if((isdefined(player.pers["team"])) && (player.pers["team"] == team)) teamcount++; diff --git a/maps/mp/gametypes/_weapons.gsc b/maps/mp/gametypes/_weapons.gsc index a7dfb80..77a9256 100644 --- a/maps/mp/gametypes/_weapons.gsc +++ b/maps/mp/gametypes/_weapons.gsc @@ -86,37 +86,35 @@ dropWeaponForDeath( attacker ) { weapon = self getCurrentWeapon(); - if ( !isDefined( weapon ) ) + if ( !isDefined( weapon ) || !self hasWeapon( weapon ) ) return; - if ( !self hasWeapon( weapon ) ) - return; - - if ( !isPrimaryWeapon( weapon ) ) - return false; - - switch ( level.primary_weapon_array[weapon] ) + if( isPrimaryWeapon( weapon ) ) { - case "weapon_assault": - if ( !getDvarInt( "class_assault_allowdrop" ) ) - return; - break; - case "weapon_smg": - if ( !getDvarInt( "class_specops_allowdrop" ) ) + switch ( level.primary_weapon_array[weapon] ) + { + case "weapon_assault": + if ( !getDvarInt( "class_assault_allowdrop" ) ) + return; + break; + case "weapon_smg": + if ( !getDvarInt( "class_specops_allowdrop" ) ) + return; + break; + case "weapon_sniper": + if ( !getDvarInt( "class_sniper_allowdrop" ) ) + return; + break; + case "weapon_shotgun": + if ( !getDvarInt( "class_demolitions_allowdrop" ) ) + return; + break; + default: return; - break; - case "weapon_sniper": - if ( !getDvarInt( "class_sniper_allowdrop" ) ) - return; - break; - case "weapon_shotgun": - if ( !getDvarInt( "class_demolitions_allowdrop" ) ) - return; - break; - - default: - return; + } } + else if ( WeaponClass( weapon ) != "pistol" ) + return false; clipAmmo = self GetWeaponAmmoClip( weapon ); @@ -135,14 +133,15 @@ dropWeaponForDeath( attacker ) item.owner = self; item.ownersattacker = attacker; - item thread deletePickupAfterAWhile(); + if( !isDefined(game["PROMOD_MATCH_MODE"]) || game["PROMOD_MATCH_MODE"] != "match" || (game["PROMOD_MATCH_MODE"] == "match" && level.gametype != "sd") || game["promod_do_readyup"] ) + item thread deletePickupAfterAWhile(); } deletePickupAfterAWhile() { self endon("death"); - wait 60; + wait 180; if ( !isDefined( self ) ) return; @@ -158,16 +157,6 @@ getItemWeaponName() return weapname; } -getWeaponBasedGrenadeCount(weapon) -{ - return 2; -} - -getWeaponBasedSmokeGrenadeCount(weapon) -{ - return 1; -} - getFragGrenadeCount() { if ( level.hardcoreMode ) @@ -193,33 +182,6 @@ getFlashGrenadeCount() return count; } -friendlyFireCheck( owner, attacker, forcedFriendlyFireRule ) -{ - if ( !isdefined(owner) ) - return true; - - if ( !level.teamBased ) - return true; - - friendlyFireRule = level.friendlyfire; - if ( isdefined( forcedFriendlyFireRule ) ) - friendlyFireRule = forcedFriendlyFireRule; - - if ( friendlyFireRule != 0 ) - return true; - - if ( attacker == owner ) - return true; - - if (!isdefined(attacker.pers["team"])) - return true; - - if ( attacker.pers["team"] != owner.pers["team"] ) - return true; - - return false; -} - watchGrenadeUsage() { self endon( "death" ); @@ -227,7 +189,7 @@ watchGrenadeUsage() self.throwingGrenade = false; - for ( ;; ) + for(;;) { self waittill ( "grenade_pullback", weaponName ); @@ -260,12 +222,7 @@ onWeaponDamage( eInflictor, sWeapon, meansOfDeath, damage ) self endon ( "death" ); self endon ( "disconnect" ); - switch( sWeapon ) - { - default: - maps\mp\gametypes\_shellshock::shellshockOnDamage( meansOfDeath, damage ); - break; - } + maps\mp\gametypes\_shellshock::shellshockOnDamage( meansOfDeath, damage ); } isPrimaryWeapon( weaponname ) diff --git a/maps/mp/gametypes/dom.gsc b/maps/mp/gametypes/dom.gsc index 0ae7ac7..ba69417 100644 --- a/maps/mp/gametypes/dom.gsc +++ b/maps/mp/gametypes/dom.gsc @@ -72,13 +72,13 @@ onPrecacheGameType() flagBaseFX = []; flagBaseFX["marines"] = "misc/ui_flagbase_silver"; - flagBaseFX["sas" ] = "misc/ui_flagbase_black"; + flagBaseFX["sas"] = "misc/ui_flagbase_black"; flagBaseFX["russian"] = "misc/ui_flagbase_red"; - flagBaseFX["opfor" ] = "misc/ui_flagbase_gold"; + flagBaseFX["opfor"] = "misc/ui_flagbase_gold"; game["flagBaseFXid"] = []; game["flagBaseFXid"][ "allies" ] = loadfx( flagBaseFX[ game[ "allies" ] ] ); - game["flagBaseFXid"][ "axis" ] = loadfx( flagBaseFX[ game[ "axis" ] ] ); + game["flagBaseFXid"][ "axis" ] = loadfx( flagBaseFX[ game[ "axis" ] ] ); } onStartGameType() @@ -142,20 +142,14 @@ onSpawnPlayer() spawnpoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_NearTeam( level.spawn_all, getSpawnsBoundingFlag( enemyBestSpawnFlag ) ); } else if ( flagsOwned > 0 ) - { spawnpoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_NearTeam( level.spawn_all, getBoundaryFlagSpawns( myTeam ) ); - } else { bestFlag = undefined; if ( enemyFlagsOwned > 0 && enemyFlagsOwned < level.flags.size ) - { bestFlag = getUnownedFlagNearestStart( myTeam ); - } if ( !isdefined( bestFlag ) ) - { bestFlag = level.bestSpawnFlag[ self.pers["team"] ]; - } level.bestSpawnFlag[ self.pers["team"] ] = bestFlag; @@ -217,20 +211,18 @@ domFlags() } level.flags = []; - for ( index = 0; index < primaryFlags.size; index++ ) - level.flags[level.flags.size] = primaryFlags[index]; + for ( i = 0; i < primaryFlags.size; i++ ) + level.flags[level.flags.size] = primaryFlags[i]; - for ( index = 0; index < secondaryFlags.size; index++ ) - level.flags[level.flags.size] = secondaryFlags[index]; + for ( i = 0; i < secondaryFlags.size; i++ ) + level.flags[level.flags.size] = secondaryFlags[i]; level.domFlags = []; - for ( index = 0; index < level.flags.size; index++ ) + for ( i = 0; i < level.flags.size; i++ ) { - trigger = level.flags[index]; + trigger = level.flags[i]; if ( isDefined( trigger.target ) ) - { visuals[0] = getEnt( trigger.target, "targetname" ); - } else { visuals[0] = spawn( "script_model", trigger.origin ); @@ -264,11 +256,11 @@ domFlags() domFlag.baseeffectpos = trace["position"]; - level.flags[index].useObj = domFlag; - level.flags[index].adjflags = []; - level.flags[index].nearbyspawns = []; + level.flags[i].useObj = domFlag; + level.flags[i].adjflags = []; + level.flags[i].nearbyspawns = []; - domFlag.levelFlag = level.flags[index]; + domFlag.levelFlag = level.flags[i]; level.domFlags[level.domFlags.size] = domFlag; } @@ -387,14 +379,14 @@ onUse( player ) giveFlagCaptureXP( touchList ) { - wait .05; + wait 0.05; maps\mp\gametypes\_globallogic::WaitTillSlowProcessAllowed(); players = getArrayKeys( touchList ); - for ( index = 0; index < players.size; index++ ) + for ( i = 0; i < players.size; i++ ) { - touchList[players[index]].player thread [[level.onXPEvent]]( "capture" ); - maps\mp\gametypes\_globallogic::givePlayerScore( "capture", touchList[players[index]].player ); + touchList[players[i]].player thread [[level.onXPEvent]]( "capture" ); + maps\mp\gametypes\_globallogic::givePlayerScore( "capture", touchList[players[i]].player ); } } @@ -404,7 +396,6 @@ updateDomScores() while ( !level.gameEnded ) { - numFlags = getTeamFlagCount( "allies" ); if ( numFlags ) [[level._setTeamScore]]( "allies", [[level._getTeamScore]]( "allies" ) + numFlags ); @@ -416,7 +407,7 @@ updateDomScores() level.endGameOnScoreLimit = true; maps\mp\gametypes\_globallogic::checkScoreLimit(); level.endGameOnScoreLimit = false; - wait ( 5.0 ); + wait 5; } } diff --git a/maps/mp/gametypes/koth.gsc b/maps/mp/gametypes/koth.gsc index 06bb03c..4c080f2 100644 --- a/maps/mp/gametypes/koth.gsc +++ b/maps/mp/gametypes/koth.gsc @@ -55,7 +55,7 @@ main() updateObjectiveHintMessages( alliesObjective, axisObjective ) { game["strings"]["objective_hint_allies"] = alliesObjective; - game["strings"]["objective_hint_axis" ] = axisObjective; + game["strings"]["objective_hint_axis"] = axisObjective; for ( i = 0; i < level.players.size; i++ ) { @@ -90,13 +90,9 @@ getRespawnDelay() self.lowerMessageOverride = &"MP_WAITING_FOR_HQ"; if ( level.delayPlayer ) - { return min( level.spawnDelay, timeRemaining ); - } else - { return (int(timeRemaining) % level.spawnDelay); - } } } @@ -183,7 +179,7 @@ HQMainLoop() return; while ( level.inPrematchPeriod ) - wait ( 0.05 ); + wait 0.05; wait 5; @@ -195,21 +191,21 @@ HQMainLoop() timerDisplay["allies"].archived = false; timerDisplay["allies"].hideWhenInMenu = true; - timerDisplay["axis" ] = createServerTimer( "objective", 1.4, "axis" ); - timerDisplay["axis" ] setPoint( "TOPRIGHT", "TOPRIGHT", 0, 0 ); - timerDisplay["axis" ].label = hqSpawningInStr; - timerDisplay["axis" ].alpha = 0; - timerDisplay["axis" ].archived = false; - timerDisplay["axis" ].hideWhenInMenu = true; + timerDisplay["axis"] = createServerTimer( "objective", 1.4, "axis" ); + timerDisplay["axis"] setPoint( "TOPRIGHT", "TOPRIGHT", 0, 0 ); + timerDisplay["axis"].label = hqSpawningInStr; + timerDisplay["axis"].alpha = 0; + timerDisplay["axis"].archived = false; + timerDisplay["axis"].hideWhenInMenu = true; thread hideTimerDisplayOnGameEnd( timerDisplay["allies"] ); - thread hideTimerDisplayOnGameEnd( timerDisplay["axis" ] ); + thread hideTimerDisplayOnGameEnd( timerDisplay["axis"] ); locationObjID = maps\mp\gametypes\_gameobjects::getNextObjID(); objective_add( locationObjID, "invisible", (0,0,0) ); - while( 1 ) + for(;;) { radio = PickRadioToSpawn(); @@ -236,9 +232,9 @@ HQMainLoop() timerDisplay["allies"].label = hqSpawningInStr; timerDisplay["allies"] setTimer( level.hqSpawnTime ); timerDisplay["allies"].alpha = 1; - timerDisplay["axis" ].label = hqSpawningInStr; - timerDisplay["axis" ] setTimer( level.hqSpawnTime ); - timerDisplay["axis" ].alpha = 1; + timerDisplay["axis"].label = hqSpawningInStr; + timerDisplay["axis"] setTimer( level.hqSpawnTime ); + timerDisplay["axis"].alpha = 1; wait level.hqSpawnTime; @@ -247,7 +243,7 @@ HQMainLoop() } timerDisplay["allies"].alpha = 0; - timerDisplay["axis" ].alpha = 0; + timerDisplay["axis"].alpha = 0; waittillframeend; @@ -281,23 +277,17 @@ HQMainLoop() timerDisplay[otherTeam] setTimer( level.hqAutoDestroyTime ); } else - { level.hqDestroyedByTimer = false; - } - while( 1 ) + for(;;) { ownerTeam = radioObject maps\mp\gametypes\_gameobjects::getOwnerTeam(); otherTeam = getOtherTeam( ownerTeam ); if ( ownerTeam == "allies" ) - { updateObjectiveHintMessages( level.objectiveHintDefendHQ, level.objectiveHintDestroyHQ ); - } else - { updateObjectiveHintMessages( level.objectiveHintDestroyHQ, level.objectiveHintDefendHQ ); - } radioObject maps\mp\gametypes\_gameobjects::allowUse( "enemy" ); radioObject maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", "compass_waypoint_defend" ); @@ -336,15 +326,15 @@ HQMainLoop() radioObject maps\mp\gametypes\_gameobjects::setModelVisibility( false ); timerDisplay["allies"].alpha = 0; - timerDisplay["axis" ].alpha = 0; + timerDisplay["axis"].alpha = 0; level.radioObject = undefined; - wait .05; + wait 0.05; thread forceSpawnTeam( ownerTeam ); - wait 3.0; + wait 3; } } @@ -356,10 +346,9 @@ hideTimerDisplayOnGameEnd( timerDisplay ) forceSpawnTeam( team ) { - players = level.players; - for ( i = 0; i < players.size; i++ ) + for ( i = 0; i < level.players.size; i++ ) { - player = players[i]; + player = level.players[i]; if ( !isdefined( player ) ) continue; @@ -367,7 +356,7 @@ forceSpawnTeam( team ) { player.lowerMessageOverride = undefined; player notify( "force_spawn" ); - wait .1; + wait 0.1; } } } @@ -377,9 +366,7 @@ onBeginUse( player ) ownerTeam = self maps\mp\gametypes\_gameobjects::getOwnerTeam(); if ( ownerTeam == "neutral" ) - { self.objPoints[player.pers["team"]] thread maps\mp\gametypes\_objpoints::startFlashing(); - } else { self.objPoints["allies"] thread maps\mp\gametypes\_objpoints::startFlashing(); @@ -483,9 +470,9 @@ awardHQPoints( team ) while ( !level.gameEnded ) { [[level._setTeamScore]]( team, [[level._getTeamScore]]( team ) + seconds ); - for ( index = 0; index < level.players.size; index++ ) + for ( i = 0; i < level.players.size; i++ ) { - player = level.players[index]; + player = level.players[i]; if ( player.pers["team"] == team ) { @@ -548,9 +535,7 @@ SetupRadios() otherVisuals = getEntArray( radio.target, "targetname" ); for ( j = 0; j < otherVisuals.size; j++ ) - { visuals[visuals.size] = otherVisuals[j]; - } radio.gameObject = maps\mp\gametypes\_gameobjects::createUseObject( "neutral", radio.trig, visuals, (radio.origin - radio.trigorigin) + level.iconoffset ); radio.gameObject maps\mp\gametypes\_gameobjects::disableObject(); @@ -573,9 +558,7 @@ setUpNearbySpawns() spawns = level.spawn_all; for ( i = 0; i < spawns.size; i++ ) - { spawns[i].distsq = distanceSquared( spawns[i].origin, self.origin ); - } for ( i = 1; i < spawns.size; i++ ) { @@ -592,9 +575,7 @@ setUpNearbySpawns() thirdSize = spawns.size / 3; for ( i = 0; i <= thirdSize; i++ ) - { first[ first.size ] = spawns[i]; - } for ( ; i < spawns.size; i++ ) { outer[ outer.size ] = spawns[i]; @@ -640,7 +621,7 @@ PickRadioToSpawn() } avgpos["allies"] = avgpos["allies"] / num["allies"]; - avgpos["axis" ] = avgpos["axis" ] / num["axis" ]; + avgpos["axis"] = avgpos["axis"] / num["axis"]; bestradio = undefined; lowestcost = undefined; @@ -651,9 +632,7 @@ PickRadioToSpawn() cost = abs( distance( radio.origin, avgpos["allies"] ) - distance( radio.origin, avgpos["axis"] ) ); if ( isdefined( level.prevradio ) && radio == level.prevradio ) - { continue; - } if ( isdefined( level.prevradio2 ) && radio == level.prevradio2 ) { if ( level.radios.size > 2 ) diff --git a/maps/mp/gametypes/sab.gsc b/maps/mp/gametypes/sab.gsc index 4e2333f..7f8cf29 100644 --- a/maps/mp/gametypes/sab.gsc +++ b/maps/mp/gametypes/sab.gsc @@ -94,9 +94,7 @@ onRoundSwitch() game["tiebreaker"] = true; } else - { level.halftimeType = "halftime"; - } } onStartGameType() @@ -169,11 +167,12 @@ onOvertime() level.timeLimitOverride = true; level.inOvertime = true; - for ( index = 0; index < level.players.size; index++ ) + for ( i = 0; i < level.players.size; i++ ) { - level.players[index] notify("force_spawn"); - level.players[index] thread maps\mp\gametypes\_hud_message::oldNotifyMessage( &"MP_SUDDEN_DEATH", &"MP_NO_RESPAWN", undefined, (1, 0, 0), "mp_last_stand" ); - level.players[index] setClientDvar( "g_compassShowEnemies", 1 ); + player = level.players[i]; + player notify("force_spawn"); + player thread maps\mp\gametypes\_hud_message::oldNotifyMessage( &"MP_SUDDEN_DEATH", &"MP_NO_RESPAWN", undefined, (1, 0, 0), "mp_last_stand" ); + player setClientDvar( "g_compassShowEnemies", 1 ); } waitTime = 0; @@ -184,7 +183,7 @@ onOvertime() waitTime += 1; setGameEndTime( getTime() + ((90-waitTime)*1000) ); } - wait ( 1.0 ); + wait 1; } thread maps\mp\gametypes\_globallogic::endGame( "tie", game["strings"]["tie"] ); @@ -203,9 +202,7 @@ onDeadEvent( team ) thread maps\mp\gametypes\_globallogic::endGame( level.bombPlantedBy, game["strings"][level.bombPlantedBy+"_mission_accomplished"] ); } else - { thread maps\mp\gametypes\_globallogic::endGame( "tie", game["strings"]["tie"] ); - } } else if ( level.bombPlanted ) { @@ -314,10 +311,7 @@ sabotage() visuals[0] delete(); } - if ( !isDefined( getEnt( "sab_bomb_axis", "targetname" ) ) ) - return; - - if ( !isDefined( getEnt( "sab_bomb_allies", "targetname" ) ) ) + if ( !isDefined( getEnt( "sab_bomb_axis", "targetname" ) ) || !isDefined( getEnt( "sab_bomb_allies", "targetname" ) ) ) return; level.bombZones["allies"] = createBombZone( "allies", getEnt( "sab_bomb_allies", "targetname" ) ); @@ -436,7 +430,7 @@ abandonmentThink( delay ) { level endon ( "bomb_picked_up" ); - wait ( delay ); + wait delay; if ( isDefined( self.carrier ) ) return; @@ -474,9 +468,7 @@ onUse( player ) maps\mp\gametypes\_globallogic::givePlayerScore( "plant", player ); for ( i = 0; i < level.players.size; i++ ) - { level.players[i] playLocalSound("promod_planted"); - } player thread [[level.onXPEvent]]( "plant" ); level thread bombPlanted( self, player.pers["team"] ); @@ -503,9 +495,7 @@ onUse( player ) maps\mp\gametypes\_globallogic::givePlayerScore( "defuse", player ); for ( i = 0; i < level.players.size; i++ ) - { level.players[i] playLocalSound("promod_defused"); - } player thread [[level.onXPEvent]]( "defuse" ); level thread bombDefused( self ); @@ -568,7 +558,7 @@ bombPlanted( destroyedObj, team ) if ( isdefined( level.bombowner ) ) destroyedObj.visuals[0] radiusDamage( explosionOrigin, 512, 200, 20, level.bombowner ); else - destroyedObj.visuals[0] radiusDamage( explosionOrigin, 512, 200, 20 ); + destroyedObj.visuals[0] radiusDamage( explosionOrigin, 512, 200, 20 ); rot = randomfloat(360); explosionEffect = spawnFx( level._effect["bombexplosion"], explosionOrigin + (0,0,50), (0,0,1), (cos(rot),sin(rot),0) ); @@ -583,9 +573,7 @@ bombPlanted( destroyedObj, team ) wait 3; for ( i = 0; i < level.players.size; i++ ) - { level.players[i] playLocalSound("promod_destroyed"); - } thread maps\mp\gametypes\_globallogic::endGame( team, game["strings"]["target_destroyed"] ); } diff --git a/maps/mp/gametypes/sd.gsc b/maps/mp/gametypes/sd.gsc index 74ec2f2..166a660 100644 --- a/maps/mp/gametypes/sd.gsc +++ b/maps/mp/gametypes/sd.gsc @@ -182,7 +182,7 @@ onPlayerKilled(eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHit checkAllowSpectating() { - wait ( 0.05 ); + wait 0.05; update = false; if ( !level.aliveCount[ game["attackers"] ] ) @@ -285,10 +285,10 @@ bombs() bombZones = getEntArray( "bombzone", "targetname" ); - for ( index = 0; index < bombZones.size; index++ ) + for ( i = 0; i < bombZones.size; i++ ) { - trigger = bombZones[index]; - visuals = getEntArray( bombZones[index].target, "targetname" ); + trigger = bombZones[i]; + visuals = getEntArray( bombZones[i].target, "targetname" ); bombZone = maps\mp\gametypes\_gameobjects::createUseObject( game["defenders"], trigger, visuals, (0,0,64) ); bombZone maps\mp\gametypes\_gameobjects::allowUse( "enemy" ); @@ -309,11 +309,11 @@ bombs() bombZone.onUse = ::onUsePlantObject; bombZone.onCantUse = ::onCantUse; - for ( i = 0; i < visuals.size; i++ ) + for ( j = 0; j < visuals.size; j++ ) { - if ( isDefined( visuals[i].script_exploder ) ) + if ( isDefined( visuals[j].script_exploder ) ) { - bombZone.exploderIndex = visuals[i].script_exploder; + bombZone.exploderIndex = visuals[j].script_exploder; break; } } @@ -326,16 +326,16 @@ bombs() bombZone.bombDefuseTrig.label = label; } - for ( index = 0; index < level.bombZones.size; index++ ) + for ( i = 0; i < level.bombZones.size; i++ ) { array = []; - for ( otherindex = 0; otherindex < level.bombZones.size; otherindex++ ) + for ( j = 0; j < level.bombZones.size; j++ ) { - if ( otherindex != index ) - array[ array.size ] = level.bombZones[otherindex]; + if ( j != i ) + array[ array.size ] = level.bombZones[j]; } - level.bombZones[index].otherBombZones = array; + level.bombZones[i].otherBombZones = array; } } @@ -404,12 +404,12 @@ onUsePlantObject( player ) maps\mp\gametypes\_globallogic::givePlayerScore( "plant", player ); - for ( index = 0; index < level.bombZones.size; index++ ) + for ( i = 0; i < level.bombZones.size; i++ ) { - if ( level.bombZones[index] == self ) + if ( level.bombZones[i] == self ) continue; - level.bombZones[index] maps\mp\gametypes\_gameobjects::disableObject(); + level.bombZones[i] maps\mp\gametypes\_gameobjects::disableObject(); } for ( i = 0; i < level.players.size; i++ ) @@ -455,7 +455,7 @@ onDrop( player ) printOnTeamArg( &"MP_EXPLOSIVES_DROPPED_BY", game["attackers"], player ); if ( isDefined( level.scorebot ) && level.scorebot && isDefined( player ) && isDefined( player.name ) ) - game["promod_scorebot_ticker_buffer"] += "dropped_bomb" + player.name; + game["promod_scorebot_ticker_buffer"] += "dropped_bomb" + player.name; } self maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", "waypoint_bomb" ); @@ -475,7 +475,6 @@ onPickup( player ) if ( isDefined( player ) && isDefined( player.name ) ) printOnTeamArg( &"MP_EXPLOSIVES_RECOVERED_BY", game["attackers"], player ); - if ( isDefined( level.scorebot ) && level.scorebot && isDefined( player ) && isDefined( player.name ) ) game["promod_scorebot_ticker_buffer"] += "pickup_bomb" + player.name; } @@ -504,10 +503,10 @@ bombPlanted( destroyedObj, player ) } else { - for ( index = 0; index < level.players.size; index++ ) + for ( i = 0; i < level.players.size; i++ ) { - if ( isDefined( level.players[index].carryIcon ) ) - level.players[index].carryIcon destroyElem(); + if ( isDefined( level.players[i].carryIcon ) ) + level.players[i].carryIcon destroyElem(); } trace = bulletTrace( player.origin + (0,0,20), player.origin - (0,0,2000), false, player ); @@ -532,7 +531,7 @@ bombPlanted( destroyedObj, player ) visuals = []; defuseObject = maps\mp\gametypes\_gameobjects::createUseObject( game["defenders"], trigger, visuals, (0,0,32) ); defuseObject maps\mp\gametypes\_gameobjects::allowUse( "friendly" ); - defuseObject maps\mp\gametypes\_gameobjects::setUseTime( level.defuseTime); + defuseObject maps\mp\gametypes\_gameobjects::setUseTime( level.defuseTime ); defuseObject maps\mp\gametypes\_gameobjects::setUseText( &"MP_DEFUSING_EXPLOSIVE" ); defuseObject maps\mp\gametypes\_gameobjects::setUseHintText( &"PLATFORM_HOLD_TO_DEFUSE_EXPLOSIVES" ); defuseObject maps\mp\gametypes\_gameobjects::setVisibleTeam( "any" ); @@ -573,8 +572,8 @@ bombPlanted( destroyedObj, player ) thread playSoundinSpace( "exp_suitcase_bomb_main", explosionOrigin ); - for ( index = 0; index < level.bombZones.size; index++ ) - level.bombZones[index] maps\mp\gametypes\_gameobjects::disableObject(); + for ( i = 0; i < level.bombZones.size; i++ ) + level.bombZones[i] maps\mp\gametypes\_gameobjects::disableObject(); defuseObject maps\mp\gametypes\_gameobjects::disableObject(); diff --git a/mod.csv b/mod.csv index 8035734..561bf4c 100644 --- a/mod.csv +++ b/mod.csv @@ -8,24 +8,20 @@ localize,promod -menufile,ui_mp/auto_update.menu -menufile,ui_mp/connect.menu -menufile,ui_mp/controls_multi.menu -menufile,ui_mp/hud.menu -menufile,ui_mp/main.menu -menufile,ui_mp/options_multi.menu menufile,ui_mp/scriptmenus/changeclass_marines_mw.menu menufile,ui_mp/scriptmenus/changeclass_mw.menu menufile,ui_mp/scriptmenus/changeclass_opfor_mw.menu menufile,ui_mp/scriptmenus/class.menu +menufile,ui_mp/scriptmenus/echo.menu menufile,ui_mp/scriptmenus/quickpromod.menu menufile,ui_mp/scriptmenus/quickpromodgfx.menu menufile,ui_mp/scriptmenus/scoreboard.menu menufile,ui_mp/scriptmenus/shoutcast.menu menufile,ui_mp/scriptmenus/shoutcast_map.menu +menufile,ui_mp/scriptmenus/shoutcast_setup.menu menufile,ui_mp/scriptmenus/team_marinesopfor.menu menufile,ui_mp/scriptmenus/team_marinesopfor_flipped.menu -menufile,ui_mp/wm_quickmessage.menu +menufile,ui_mp/promod.txt rawfile,maps/createfx/mp_backlot_fx.gsc rawfile,maps/createfx/mp_bloc_fx.gsc @@ -61,6 +57,7 @@ rawfile,maps/mp/gametypes/_globallogic.gsc rawfile,maps/mp/gametypes/_healthoverlay.gsc rawfile,maps/mp/gametypes/_hud.gsc rawfile,maps/mp/gametypes/_hud_message.gsc +rawfile,maps/mp/gametypes/_killcam.gsc rawfile,maps/mp/gametypes/_menus.gsc rawfile,maps/mp/gametypes/_missions.gsc rawfile,maps/mp/gametypes/_promod.gsc @@ -100,7 +97,6 @@ rawfile,maps/mp/mp_showdown.gsc rawfile,maps/mp/mp_strike.gsc rawfile,maps/mp/mp_vacant.gsc -rawfile,promod/bombdrop.gsc rawfile,promod/client.gsc rawfile,promod/comp.gsc rawfile,promod/dvarmon.gsc diff --git a/promod/bombdrop.gsc b/promod/bombdrop.gsc deleted file mode 100644 index 908e6e2..0000000 --- a/promod/bombdrop.gsc +++ /dev/null @@ -1,30 +0,0 @@ -/* - Copyright (c) 2009-2017 Andreas Göransson - Copyright (c) 2009-2017 Indrek Ardel - - This file is part of Call of Duty 4 Promod. - - Call of Duty 4 Promod is licensed under Promod Modder Ethical Public License. - Terms of license can be found in LICENSE.md document bundled with the project. -*/ - -Bomb_Drop() -{ - if ( level.gameType != "sd" && level.gameType != "sab" ) - return; - - if( level.gameType == "sd" && self.pers["team"] != game["attackers"] ) - return; - - if (self.sessionstate != "playing") - return; - - if( !self.isBombCarrier ) - return; - - if( self.isPlanting ) - return; - - self.carryObject thread maps\mp\gametypes\_gameobjects::setDropped(); - self.isBombCarrier = false; -} \ No newline at end of file diff --git a/promod/client.gsc b/promod/client.gsc index da0f728..060b44c 100644 --- a/promod/client.gsc +++ b/promod/client.gsc @@ -97,58 +97,61 @@ toggle_gfxblur() use_config() { if ( !self.pers["PROMOD_CACHE_SUNLIGHT"] ) - { self setClientDvars( "r_lighttweaksunlight", 1.2, "sunlight", 1.2 ); - } else if ( self.pers["PROMOD_CACHE_SUNLIGHT"] == 1 ) { - if ( getDvar( "mapname" ) == "mp_backlot" ) - self setClientDvar( "r_lighttweaksunlight", 1.3 ); - else if ( getDvar( "mapname" ) == "mp_bloc" ) - self setClientDvar( "r_lighttweaksunlight", 0.9 ); - else if ( getDvar( "mapname" ) == "mp_bog" ) - self setClientDvar( "r_lighttweaksunlight", 0.8 ); - else if ( getDvar( "mapname" ) == "mp_broadcast" ) - self setClientDvar( "r_lighttweaksunlight", 1.4 ); - else if ( getDvar( "mapname" ) == "mp_carentan" ) - self setClientDvar( "r_lighttweaksunlight", 0.75 ); - else if ( getDvar( "mapname" ) == "mp_cargoship" ) - self setClientDvar( "r_lighttweaksunlight", 1.3 ); - else if ( getDvar( "mapname" ) == "mp_citystreets" ) - self setClientDvar( "r_lighttweaksunlight", 0.78 ); - else if ( getDvar( "mapname" ) == "mp_convoy" ) - self setClientDvar( "r_lighttweaksunlight", 1.6 ); - else if ( getDvar( "mapname" ) == "mp_countdown" ) - self setClientDvar( "r_lighttweaksunlight", 1.5 ); - else if ( getDvar( "mapname" ) == "mp_crash" ) - self setClientDvar( "r_lighttweaksunlight", 1.3 ); - else if ( getDvar( "mapname" ) == "mp_crash_snow" ) - self setClientDvar( "r_lighttweaksunlight", 0.25 ); - else if ( getDvar( "mapname" ) == "mp_creek" ) - self setClientDvar( "r_lighttweaksunlight", 1.5 ); - else if ( getDvar( "mapname" ) == "mp_crossfire" ) - self setClientDvar( "r_lighttweaksunlight", 1 ); - else if ( getDvar( "mapname" ) == "mp_farm" ) - self setClientDvar( "r_lighttweaksunlight", 1 ); - else if ( getDvar( "mapname" ) == "mp_killhouse" ) - self setClientDvar( "r_lighttweaksunlight", 1.5 ); - else if ( getDvar( "mapname" ) == "mp_overgrown" ) - self setClientDvar( "r_lighttweaksunlight", 1.1 ); - else if ( getDvar( "mapname" ) == "mp_pipeline" ) - self setClientDvar( "r_lighttweaksunlight", 1.15 ); - else if ( getDvar( "mapname" ) == "mp_shipment" ) - self setClientDvar( "r_lighttweaksunlight", 1.3 ); - else if ( getDvar( "mapname" ) == "mp_showdown" ) - self setClientDvar( "r_lighttweaksunlight", 1.6 ); - else if ( getDvar( "mapname" ) == "mp_strike" ) - self setClientDvar( "r_lighttweaksunlight", 1 ); - else if ( getDvar( "mapname" ) == "mp_vacant" ) - self setClientDvar( "r_lighttweaksunlight", 1.3 ); - else - self setClientDvar( "r_lighttweaksunlight", 1.2 ); - - self setClientDvar( "sunlight", "Stock" ); + sl = 1.2; + switch(getDvar("mapname")) + { + case "mp_backlot": + case "mp_cargoship": + case "mp_crash": + case "mp_shipment": + case "mp_vacant": + sl = 1.3; + break; + case "mp_bloc": + sl = 0.9; + break; + case "mp_bog": + sl = 0.8; + break; + case "mp_broadcast": + sl = 1.4; + break; + case "mp_carentan": + sl = 0.75; + break; + case "mp_citystreets": + sl = 0.78; + break; + case "mp_convoy": + case "mp_showdown": + sl = 1.6; + break; + case "mp_countdown": + case "mp_creek": + case "mp_killhouse": + sl = 1.5; + break; + case "mp_crash_snow": + sl = 0.25; + break; + case "mp_crossfire": + case "mp_farm": + case "mp_strike": + sl = 1; + break; + case "mp_overgrown": + sl = 1.1; + break; + case "mp_pipeline": + sl = 1.15; + break; + } + self setClientDvars( "r_lighttweaksunlight", sl, + "sunlight", "Stock" ); } else self setClientDvars( "r_lighttweaksunlight", 0, @@ -172,13 +175,6 @@ use_config() else if ( self.pers["PROMOD_CACHE_GFXBLUR"] == 5 ) self setClientDvar( "r_blur", 1 ); - if ( !self.pers["PROMOD_CACHE_FIRSTTIME"] ) - { - self.pers["PROMOD_CACHE_FIRSTTIME"] = 1; - self setClientDvar( "cg_voiceIconSize", 1 ); - self set_config( "PROMOD_FIRSTTIME", 1 ); - } - self setClientDvars( "aim_automelee_enabled", 0, "aim_automelee_range", 0, @@ -197,9 +193,13 @@ use_config() "cg_huddamageiconwidth", 128, "r_filmtweakinvert", 0, "r_desaturation", 0, + "r_dlightlimit", 0, + "r_fog", 0, "r_specularcolorscale", 0, + "r_zfeather", 1, "fx_drawclouds", 0, - "r_fog", 0, + "rate", 25000, + "cl_maxpackets", 100, "developer", 0, "r_normalmap", self.pers["PROMOD_CACHE_NORMALMAP"], "r_texfilterdisable", self.pers["PROMOD_CACHE_TEXTURE"], diff --git a/promod/comp.gsc b/promod/comp.gsc index c4ca31d..b9ad423 100644 --- a/promod/comp.gsc +++ b/promod/comp.gsc @@ -72,8 +72,8 @@ main() setDvar( "scr_dm_timelimit", 10 ); setDvar( "scr_dm_waverespawndelay", 0 ); - setDvar( "class_specops_limit", 64 ); setDvar( "class_assault_limit", 64 ); + setDvar( "class_specops_limit", 2 ); setDvar( "class_demolitions_limit", 1 ); setDvar( "class_sniper_limit", 1 ); @@ -171,7 +171,6 @@ main() setDvar( "g_no_script_spam", 1 ); setDvar( "g_antilag", 1 ); setDvar( "g_smoothClients", 1 ); - setDvar( "g_banIPs", "" ); setDvar( "sv_allowDownload", 1 ); setDvar( "sv_maxPing", 0 ); setDvar( "sv_minPing", 0 ); diff --git a/promod/customStatsTable.csv b/promod/customStatsTable.csv index a76ef2d..0437a6c 100644 --- a/promod/customStatsTable.csv +++ b/promod/customStatsTable.csv @@ -12,70 +12,69 @@ 4,PROMOD_FOVSCALE 5,PROMOD_NORMALMAP 6,PROMOD_GFXBLUR -7,PROMOD_FIRSTTIME -8,ASSAULT_PRIMARY -9,ASSAULT_PRIMARY_ATTACHMENT -10,ASSAULT_SECONDARY -11,ASSAULT_SECONDARY_ATTACHMENT -12,ASSAULT_GRENADE -13,ASSAULT_CAMO +7,ASSAULT_PRIMARY +8,ASSAULT_PRIMARY_ATTACHMENT +9,ASSAULT_SECONDARY +10,ASSAULT_SECONDARY_ATTACHMENT +11,ASSAULT_GRENADE +12,ASSAULT_CAMO -14,SPECOPS_PRIMARY -15,SPECOPS_PRIMARY_ATTACHMENT -16,SPECOPS_SECONDARY -17,SPECOPS_SECONDARY_ATTACHMENT -18,SPECOPS_GRENADE -19,SPECOPS_CAMO +13,SPECOPS_PRIMARY +14,SPECOPS_PRIMARY_ATTACHMENT +15,SPECOPS_SECONDARY +16,SPECOPS_SECONDARY_ATTACHMENT +17,SPECOPS_GRENADE +18,SPECOPS_CAMO -20,DEMOLITIONS_PRIMARY -21,DEMOLITIONS_PRIMARY_ATTACHMENT -22,DEMOLITIONS_SECONDARY -23,DEMOLITIONS_SECONDARY_ATTACHMENT -24,DEMOLITIONS_GRENADE -25,DEMOLITIONS_CAMO +19,DEMOLITIONS_PRIMARY +20,DEMOLITIONS_PRIMARY_ATTACHMENT +21,DEMOLITIONS_SECONDARY +22,DEMOLITIONS_SECONDARY_ATTACHMENT +23,DEMOLITIONS_GRENADE +24,DEMOLITIONS_CAMO -26,SNIPER_PRIMARY -27,SNIPER_PRIMARY_ATTACHMENT -28,SNIPER_SECONDARY -29,SNIPER_SECONDARY_ATTACHMENT -30,SNIPER_GRENADE -31,SNIPER_CAMO +25,SNIPER_PRIMARY +26,SNIPER_PRIMARY_ATTACHMENT +27,SNIPER_SECONDARY +28,SNIPER_SECONDARY_ATTACHMENT +29,SNIPER_GRENADE +30,SNIPER_CAMO -32,m16 -33,ak47 -34,m4 -35,g3 -36,g36c -37,m14 -38,mp44 +31,m16 +32,ak47 +33,m4 +34,g3 +35,g36c +36,m14 +37,mp44 -39,mp5 -40,uzi -41,ak74u +38,mp5 +39,uzi +40,ak74u -42,winchester1200 -43,m1014 +41,winchester1200 +42,m1014 -44,m40a3 -45,remington700 +43,m40a3 +44,remington700 -46,none -47,silencer +45,none +46,silencer -48,deserteaglegold -49,deserteagle -50,colt45 -51,usp -52,beretta +47,deserteaglegold +48,deserteagle +49,colt45 +50,usp +51,beretta -53,flash_grenade -54,smoke_grenade +52,flash_grenade +53,smoke_grenade -55,camo_none -56,camo_brockhaurd -57,camo_bushdweller -58,camo_blackwhitemarpat -59,camo_tigerred -60,camo_stagger -61,camo_gold \ No newline at end of file +54,camo_none +55,camo_brockhaurd +56,camo_bushdweller +57,camo_blackwhitemarpat +58,camo_tigerred +59,camo_stagger +60,camo_gold \ No newline at end of file diff --git a/promod/dvarmon.gsc b/promod/dvarmon.gsc index 61f2002..8412e35 100644 --- a/promod/dvarmon.gsc +++ b/promod/dvarmon.gsc @@ -12,13 +12,13 @@ main() { level endon ( "restarting" ); - dvars = strTok( "scr_team_fftype|bg_falldamageminheight|scr_enable_hiticon|class_assault_allowdrop|class_assault_limit|class_demolitions_allowdrop|class_demolitions_limit|class_sniper_allowdrop|class_sniper_limit|class_specops_limit|class_specops_allowdrop|scr_game_allowkillcam|scr_drawfriend|scr_game_spectatetype|scr_" + level.gametype + "_timelimit|scr_" + level.gametype + "_numlives|scr_" + level.gametype + "_playerrespawndelay|scr_hardcore|scr_" + level.gametype + "_roundswitch|scr_sd_multibomb|scr_sab_hotpotato|scr_" + level.gametype + "_bombtimer|scr_" + level.gametype + "_defusetime|scr_" + level.gametype + "_planttime|koth_autodestroytime|koth_delayplayer|koth_destroytime|koth_spawnDelay|koth_spawntime", "|" ); + dvars = strTok( "scr_team_fftype|scr_enable_hiticon|class_assault_allowdrop|class_assault_limit|class_demolitions_allowdrop|class_demolitions_limit|class_sniper_allowdrop|class_sniper_limit|class_specops_limit|class_specops_allowdrop|scr_game_allowkillcam|scr_drawfriend|scr_game_spectatetype|scr_" + level.gametype + "_timelimit|scr_" + level.gametype + "_numlives|scr_" + level.gametype + "_playerrespawndelay|scr_hardcore|scr_" + level.gametype + "_roundswitch|scr_sd_multibomb|scr_sab_hotpotato|scr_" + level.gametype + "_bombtimer|scr_" + level.gametype + "_defusetime|scr_" + level.gametype + "_planttime|koth_autodestroytime|koth_delayplayer|koth_destroytime|koth_spawnDelay|koth_spawntime", "|" ); current_values = []; - for ( d = 0; d < dvars.size; d++ ) + for( d = 0; d < dvars.size; d++ ) current_values[d] = getDvar(dvars[d]); - for (;;) + for(;;) { wait 1; for ( c = 0; c < dvars.size; c++ ) diff --git a/promod/header.gsc b/promod/header.gsc index 6a06f27..c52f2b2 100644 --- a/promod/header.gsc +++ b/promod/header.gsc @@ -22,7 +22,7 @@ create() promod_ver.alignY = "middle"; promod_ver.fontScale = 1.4; promod_ver.hidewheninmenu = true; - promod_ver.color = (.8, 1, 1); + promod_ver.color = (0.8, 1, 1); promod_ver setText( game["PROMOD_VERSION"] ); promod_mode = newHudElem(); diff --git a/promod/messagecenter.gsc b/promod/messagecenter.gsc index 751e380..572fe27 100644 --- a/promod/messagecenter.gsc +++ b/promod/messagecenter.gsc @@ -10,10 +10,7 @@ main() { - if ( isDefined( game["PROMOD_MATCH_MODE"] ) && game["PROMOD_MATCH_MODE"] == "match" ) - return; - - if (getDvar("promod_mc_enable") == "" || getDvarInt("promod_mc_enable") < 1) + if ( (isDefined( game["PROMOD_MATCH_MODE"] ) && game["PROMOD_MATCH_MODE"] == "match") || getDvar("promod_mc_enable") == "" || getDvarInt("promod_mc_enable") < 1 ) return; if (getDvarInt("promod_mc_rs_every_round") ) @@ -36,7 +33,7 @@ Run_Messages() if (getDvar("promod_mc_maxmessages") == "") setDvar("promod_mc_maxmessages" , 20); - while (1) + for(;;) { max = getDvarInt("promod_mc_maxmessages") +1; @@ -46,7 +43,7 @@ Run_Messages() { if (getDvar("promod_mc_message_" + i) == "") { - wait .05; + wait 0.05; continue; } else @@ -81,7 +78,7 @@ Run_Messages() if (!isDefined(message)) { - wait .05; + wait 0.05; continue; } diff --git a/promod/modes.gsc b/promod/modes.gsc index e644d6d..fa4d74b 100644 --- a/promod/modes.gsc +++ b/promod/modes.gsc @@ -13,14 +13,110 @@ main() mode = toLower( getDvar( "promod_mode" ) ); if ( !validMode( mode ) ) { - setDvar( "promod_mode", "comp_public" ); - mode = toLower( getDvar( "promod_mode" ) ); + mode = "comp_public"; + setDvar( "promod_mode", mode ); + } + setMode(mode); +} + +validMode( mode ) +{ + switch ( mode ) + { + case "comp_public": + case "comp_public_hc": + case "custom_public": + case "strat": + case "match": + case "knockout": + return true; + } + + keys = strtok(mode, "_"); + if(keys.size <= 1) return false; + switches = []; + switches["match_knockout"] = false; + switches["1v1_2v2"] = false; + switches["lan_pb"] = false; + switches["hc_done"] = false; + switches["knife_done"] = false; + switches["mr_done"] = false; + + for(i=0;i 0 && !switches["mr_done"]) + switches["mr_done"] = true; + else + return false; + break; + } } + return switches["match_knockout"]; +} + +monitorMode() +{ + o_mode = toLower( getDvar( "promod_mode" ) ); + o_cheats = getDvarInt( "sv_cheats" ); + + for(;;) + { + mode = toLower( getDvar( "promod_mode" ) ); + cheats = getDvarInt( "sv_cheats" ); + + if ( mode != o_mode || cheats != o_cheats ) + { + if ( isDefined( game["state"] ) && game["state"] == "postgame" ) + { + setDvar( "promod_mode", o_mode ); + continue; + } + + if ( validMode( mode ) ) + { + level notify ( "restarting" ); + iPrintLN( "Changing To Mode: ^1" + mode + "\nPlease Wait While It Loads..." ); + setMode( mode ); + wait 2; + map_restart( false ); + return; + } + else + { + if ( isDefined( mode ) && mode != "" ) + iPrintLN( "Error Changing To Mode: ^1" + mode + "\nSyntax:\nmatch|knockout_lan|pb_hc_knife_1v1|2v2_mr#,\nNormal Modes: comp_public, comp_public_hc, custom_public, strat" ); + setDvar( "promod_mode", o_mode ); + } + } - explodeMode( mode ); + wait 0.5; + } } -explodeMode( mode ) +setMode( mode ) { limited_mode = 0; knockout_mode = 0; @@ -32,21 +128,23 @@ explodeMode( mode ) game["PROMOD_STRATTIME"] = 6; game["PROMOD_MODE_HUD"] = ""; game["PROMOD_MATCH_MODE"] = ""; + game["PROMOD_PB_OFF"] = 0; + game["PROMOD_KNIFEROUND"] = 0; if ( mode == "comp_public" ) { promod\comp::main(); game["PROMOD_MATCH_MODE"] = "pub"; game["PROMOD_MODE_HUD"] = "^4Competitive ^3Public"; - unified(); + pub(); } - if ( mode == "comp_public_hc" ) + else if ( mode == "comp_public_hc" ) { promod\comp::main(); game["PROMOD_MATCH_MODE"] = "pub"; game["HARDCORE_MODE"] = 1; - game["PROMOD_MODE_HUD"] = "^4Competitive ^3Public"; - unified(); + game["PROMOD_MODE_HUD"] = "^4Competitive ^3Public ^6HC"; + pub(); } else if ( mode == "custom_public" ) { @@ -54,14 +152,16 @@ explodeMode( mode ) game["CUSTOM_MODE"] = 1; game["PROMOD_MATCH_MODE"] = "pub"; game["PROMOD_MODE_HUD"] = "^4Custom ^3Public"; + game["PROMOD_KNIFEROUND"] = getDvarInt("promod_kniferound"); } else if ( mode == "strat" ) { promod\comp::main(); - level thread promod\stratmode::main(); game["PROMOD_MODE_HUD"] = "^4Strat ^3Mode"; game["PROMOD_MATCH_MODE"] = "strat"; - unified(); + setDvar( "class_specops_limit", 64 ); + setDvar( "class_demolitions_limit", 64 ); + setDvar( "class_sniper_limit", 64 ); } if ( game["PROMOD_MATCH_MODE"] == "" ) @@ -69,64 +169,67 @@ explodeMode( mode ) exploded = StrTok( mode, "_" ); for ( i = 0; i < exploded.size; i++ ) { - exp = exploded[i]; - - if ( exp == "match" || exp == "knockout" ) + switch(exploded[i]) { - game["PROMOD_MATCH_MODE"] = "match"; - - if ( exp == "knockout" ) - { + case "match": + game["PROMOD_MATCH_MODE"] = "match"; + break; + case "knockout": knockout_mode = 1; game["PROMOD_STRATTIME"] = 10; - game["PROMOD_MODE_HUD"] += "^4Knockout"; - } - else - game["PROMOD_MODE_HUD"] += "^4Match"; + game["PROMOD_MATCH_MODE"] = "match"; + break; + case "lan": + game["LAN_MODE"] = 1; + break; + case "1v1": + case "2v2": + limited_mode = int(strtok(exploded[i],"v")[0]); + break; + case "knife": + game["PROMOD_KNIFEROUND"] = 1; + break; + case "pb": + game["PROMOD_PB_OFF"] = 1; + break; + case "hc": + game["HARDCORE_MODE"] = 1; + break; + default: + if ( isSubStr( exploded[i], "mr" ) ) + mr_rating = strtok(exploded[i], "mr")[0]; + break; } - else if ( exp == "lan" ) - { - game["LAN_MODE"] = 1; - game["PROMOD_MODE_HUD"] += " ^4LAN"; - } - else if ( exp == "1v1" || exp == "2v2" ) - { - limited_mode = 1; - - if ( exp == "1v1" ) - game["PROMOD_MODE_HUD"] += " ^21V1"; - else - game["PROMOD_MODE_HUD"] += " ^22V2"; - } - else if ( exp == "hc" ) - { - game["HARDCORE_MODE"] = 1; - game["PROMOD_MODE_HUD"] += " ^6HC"; - } - else if ( isSubStr( exp, "mr" ) ) - mr_rating = mrrating( "mr", exp ); } } if ( game["PROMOD_MATCH_MODE"] == "match" ) - { promod\comp::main(); - unified(); + + if ( limited_mode ) + { + setDvar( "class_demolitions_limit", 0 ); + setDvar( "class_sniper_limit", 0 ); + game["PROMOD_MODE_HUD"] += "^2"+limited_mode+"V"+limited_mode+" "; } + if( knockout_mode ) + game["PROMOD_MODE_HUD"] += "^4Knockout"; + else if ( game["PROMOD_MATCH_MODE"] == "match" ) + game["PROMOD_MODE_HUD"] += "^4Match"; + if ( game["LAN_MODE"] ) { setDvar( "g_antilag", 0 ); setDvar( "g_smoothClients", 0 ); + game["PROMOD_MODE_HUD"] += " ^4LAN"; } if ( game["HARDCORE_MODE"] ) - setDvar( "scr_hardcore", 1 ); - - if ( limited_mode ) { - setDvar( "class_demolitions_limit", 0 ); - setDvar( "class_sniper_limit", 0 ); + if(game["PROMOD_MATCH_MODE"] == "match") + game["PROMOD_MODE_HUD"] += " ^6HC"; + setDvar( "scr_hardcore", 1 ); } if ( int( mr_rating ) > 0 && ( level.gametype == "sd" || level.gametype == "sab" ) ) @@ -142,173 +245,28 @@ explodeMode( mode ) else if ( game["PROMOD_MATCH_MODE"] == "match" ) game["PROMOD_MODE_HUD"] += " ^3Standard"; - if ( getDvarInt( "sv_cheats" ) ) + if( game["PROMOD_PB_OFF"] && getDvarInt( "sv_cheats" ) && !getDvarInt( "sv_punkbuster" ) ) + game["PROMOD_MODE_HUD"] += " ^1PB: OFF & CHEATS"; + else if( game["PROMOD_PB_OFF"] && !getDvarInt( "sv_punkbuster" ) ) + game["PROMOD_MODE_HUD"] += " ^1PB: OFF"; + else if ( getDvarInt( "sv_cheats" ) ) game["PROMOD_MODE_HUD"] += " ^1CHEATS"; -} - -mrrating( pretext, mode ) -{ - rating = ""; - for ( i = pretext.size; i < mode.size; i++ ) - rating += mode[i]; - - return rating; -} - -unified() -{ - if ( game["PROMOD_MATCH_MODE"] == "match" ) - { - setDvar( "scr_war_roundswitch", 1 ); - setDvar( "scr_war_roundlimit", 2 ); - setDvar( "class_specops_limit", 2 ); - } - else if ( game["PROMOD_MATCH_MODE"] == "pub" ) - { - setDvar( "scr_team_fftype", 0 ); - setDvar( "scr_team_teamkillpointloss", 0 ); - setDvar( "scr_war_roundswitch", 0 ); - setDvar( "scr_war_roundlimit", 1 ); - setDvar( "weap_allow_flash_grenade", 0 ); - setDvar( "weap_allow_frag_grenade", 0 ); - setDvar( "weap_allow_smoke_grenade", 0 ); - setDvar( "class_assault_grenade", "none" ); - setDvar( "class_specops_grenade", "none" ); - setDvar( "class_demolitions_grenade", "none" ); - setDvar( "class_sniper_grenade", "none" ); - } - else - { - setDvar( "class_demolitions_limit", 64 ); - setDvar( "class_sniper_limit", 64 ); - } -} - -monitorMode() -{ - o_mode = toLower( getDvar( "promod_mode" ) ); - o_cheats = getDvarInt( "sv_cheats" ); - - while ( 1 ) - { - mode = toLower( getDvar( "promod_mode" ) ); - cheats = getDvarInt( "sv_cheats" ); - - if ( mode != o_mode || cheats != o_cheats ) - { - if ( isDefined( game["state"] ) && game["state"] == "postgame" ) - { - setDvar( "promod_mode", o_mode ); - continue; - } - - if ( validMode( mode ) ) - { - level notify ( "restarting" ); - - iPrintLN( "Changing To Mode: ^1" + level.mode ); - iPrintLN( "Please Wait While It Loads..." ); - - explodeMode( level.mode ); - - wait 2; - - map_restart( false ); - return; - } - else - { - if ( isDefined( mode ) && mode != "" ) - { - iPrintLN( "Error Changing To Mode: " + "''" + "^1" + mode + "^7''" ); - iPrintLN( "Valid Modes:" ); - iPrintLN( "^7match( ^1_^7lan^1_^7xvx^1_^7hc^1_^7mrx )^1, ^7knockout( ^1_^7lan^1_^7xvx^1_^7hc )^1_^7mrx^1," ); - iPrintLN( "^7comp^1_^7public^1, ^7comp^1_^7public_hc^1, ^7custom^1_^7public^1, ^7strat" ); - } - - setDvar( "promod_mode", o_mode ); - } - } - wait 0.5; - } + if(level.gametype != "sd") game["PROMOD_KNIFEROUND"] = 0; } -validMode( mode ) +pub() { - if ( !isDefined( mode ) || mode == "" ) - return false; - - level.mode = mode; - - if ( - mode == "comp_public" || - mode == "comp_public_hc" || - mode == "custom_public" || - mode == "strat" ) - return true; - - mr_mode = ""; - mr_rating = ""; - - exploded = StrTok( mode, "_" ); - for ( i = 0; i < exploded.size; i++ ) - { - exp = exploded[i]; - - if ( !isSubStr( exp, "mr" ) ) - mr_mode += exp + "_"; - else - mr_rating = exp; - } - - if ( - mr_mode == "match_" || - mr_mode == "match_hc_" || - mr_mode == "match_1v1_" || - mr_mode == "match_1v1_hc_" || - mr_mode == "match_2v2_" || - mr_mode == "match_2v2_hc_" || - mr_mode == "match_lan_" || - mr_mode == "match_lan_hc_" || - mr_mode == "match_lan_1v1_" || - mr_mode == "match_lan_1v1_hc_" || - mr_mode == "match_lan_2v2_" || - mr_mode == "match_lan_2v2_hc_" || - mr_mode == "knockout_" || - mr_mode == "knockout_hc_" || - mr_mode == "knockout_1v1_" || - mr_mode == "knockout_1v1_hc_" || - mr_mode == "knockout_2v2_" || - mr_mode == "knockout_2v2_hc_" || - mr_mode == "knockout_lan_" || - mr_mode == "knockout_lan_hc_" || - mr_mode == "knockout_lan_1v1_" || - mr_mode == "knockout_lan_1v1_hc_" || - mr_mode == "knockout_lan_2v2_" || - mr_mode == "knockout_lan_2v2_hc_" ) - if ( isSubStr( mr_mode, "match" ) && !isSubStr( mr_rating, "mr" ) ) - return true; - else if ( - isSubStr( mr_rating, "mr1" ) || - isSubStr( mr_rating, "mr2" ) || - isSubStr( mr_rating, "mr3" ) || - isSubStr( mr_rating, "mr4" ) || - isSubStr( mr_rating, "mr5" ) || - isSubStr( mr_rating, "mr6" ) || - isSubStr( mr_rating, "mr7" ) || - isSubStr( mr_rating, "mr8" ) || - isSubStr( mr_rating, "mr9" ) ) - { - result = StrTok( mr_rating, "mr" )[0]; - - if ( ( !int( result ) ) ) - return false; - - level.mode = mr_mode + "mr" + int( result ); - setDvar( "promod_mode", level.mode ); - return true; - } - - return false; + setDvar( "scr_team_fftype", 0 ); + setDvar( "scr_team_teamkillpointloss", 0 ); + setDvar( "scr_war_roundswitch", 0 ); + setDvar( "scr_war_roundlimit", 1 ); + setDvar( "weap_allow_flash_grenade", 0 ); + setDvar( "weap_allow_frag_grenade", 0 ); + setDvar( "weap_allow_smoke_grenade", 0 ); + setDvar( "class_specops_limit", 64 ); + setDvar( "class_assault_grenade", "none" ); + setDvar( "class_specops_grenade", "none" ); + setDvar( "class_demolitions_grenade", "none" ); + setDvar( "class_sniper_grenade", "none" ); } \ No newline at end of file diff --git a/promod/readyup.gsc b/promod/readyup.gsc index a8ae6d7..bffbd9c 100644 --- a/promod/readyup.gsc +++ b/promod/readyup.gsc @@ -114,7 +114,7 @@ Player_Ready_Up_Loop() self thread on_Spawn(); status = newClientHudElem(self); - status.x = -40; + status.x = -36; status.y = 145; status.horzAlign = "right"; status.vertAlign = "top"; @@ -122,12 +122,12 @@ Player_Ready_Up_Loop() status.alignY = "middle"; status.fontScale = 1.4; status.font = "default"; - status.color = (.8, 1, 1); + status.color = (0.8, 1, 1); status.hidewheninmenu = true; status setText("Status"); readyhud = newClientHudElem(self); - readyhud.x = -40; + readyhud.x = -36; readyhud.y = 160; readyhud.horzAlign = "right"; readyhud.vertAlign = "top"; @@ -135,33 +135,33 @@ Player_Ready_Up_Loop() readyhud.alignY = "middle"; readyhud.fontScale = 1.4; readyhud.font = "default"; - readyhud.color = (1, .66, .66); + readyhud.color = (1, 0.66, 0.66); readyhud.hidewheninmenu = true; readyhud setText("Not Ready"); killing = newClientHudElem(self); - killing.x = -40; - killing.y = 285; + killing.x = -36; + killing.y = 310; killing.horzAlign = "right"; killing.vertAlign = "top"; killing.alignX = "center"; killing.alignY = "middle"; killing.fontScale = 1.4; killing.font = "default"; - killing.color = (.8, 1, 1); + killing.color = (0.8, 1, 1); killing.hidewheninmenu = true; killing setText("Killing"); readytally = newClientHudElem(self); - readytally.x = -40; - readytally.y = 300; + readytally.x = -36; + readytally.y = 325; readytally.horzAlign = "right"; readytally.vertAlign = "top"; readytally.alignX = "center"; readytally.alignY = "middle"; readytally.fontScale = 1.4; readytally.font = "default"; - readytally.color = (1, .66, .66); + readytally.color = (1, 0.66, 0.66); readytally.hidewheninmenu = true; readytally setText("Disabled"); @@ -184,13 +184,21 @@ Player_Ready_Up_Loop() if ( self.ready ) { - readyhud.color = (.73, .99, .73); + readyhud.color = (0.73, 0.99, 0.73); readyhud setText("Ready"); + self.statusicon = "compassping_friendlyfiring_mp"; + + for ( i = 0; i < level.players.size; i++ ) + level.players[i] ShowScoreBoard(); } else { - readyhud.color = (1, .66, .66); + readyhud.color = (1, 0.66, 0.66); readyhud setText("Not Ready"); + self.statusicon = "compassping_enemy"; + + for ( i = 0; i < level.players.size; i++ ) + level.players[i] ShowScoreBoard(); } } @@ -223,10 +231,10 @@ Player_Ready_Up_Loop() Waiting_On_Players_HUD_Loop() { while ( !isDefined( level.not_ready_count ) ) - wait .1; + wait 0.1; waitingon = newHudElem(); - waitingon.x = -40; + waitingon.x = -36; waitingon.y = 80; waitingon.horzAlign = "right"; waitingon.vertAlign = "top"; @@ -234,12 +242,12 @@ Waiting_On_Players_HUD_Loop() waitingon.alignY = "middle"; waitingon.fontScale = 1.4; waitingon.font = "default"; - waitingon.color = (.8, 1, 1); + waitingon.color = (0.8, 1, 1); waitingon.hidewheninmenu = true; waitingon setText("Waiting On"); playerstext = newHudElem(); - playerstext.x = -40; + playerstext.x = -36; playerstext.y = 120; playerstext.horzAlign = "right"; playerstext.vertAlign = "top"; @@ -247,12 +255,12 @@ Waiting_On_Players_HUD_Loop() playerstext.alignY = "middle"; playerstext.fontScale = 1.4; playerstext.font = "default"; - playerstext.color = (.8, 1, 1); + playerstext.color = (0.8, 1, 1); playerstext.hidewheninmenu = true; playerstext setText("Players"); notreadyhud = newHudElem(); - notreadyhud.x = -40; + notreadyhud.x = -36; notreadyhud.y = 100; notreadyhud.horzAlign = "right"; notreadyhud.vertAlign = "top"; @@ -260,13 +268,13 @@ Waiting_On_Players_HUD_Loop() notreadyhud.alignY = "middle"; notreadyhud.fontScale = 1.4; notreadyhud.font = "default"; - notreadyhud.color = (.98, .98, .60); + notreadyhud.color = (0.98, 0.98, 0.60); notreadyhud.hidewheninmenu = true; while ( !level.ready_up_over ) { notreadyhud setValue( level.not_ready_count ); - wait 0.05; + wait 0.005; } notreadyhud setValue(0); diff --git a/promod/scorebot.gsc b/promod/scorebot.gsc index 60223d3..a1c606f 100644 --- a/promod/scorebot.gsc +++ b/promod/scorebot.gsc @@ -20,9 +20,9 @@ main() game["promod_scorebot_attack_ticker_buffer"] = -1; game["promod_scorebot_defence_ticker_buffer"] = -1; - setDvar( "__promod_ticker", game["promod_scorebot_ticker_buffer"] ); - setDvar( "__promod_attack_score", game["promod_scorebot_attack_ticker_buffer"] ); - setDvar( "__promod_defence_score", game["promod_scorebot_defence_ticker_buffer"] ); + setDvar( "__promod_ticker", game["promod_scorebot_ticker_buffer"], level.scorebot ); + setDvar( "__promod_attack_score", game["promod_scorebot_attack_ticker_buffer"], level.scorebot ); + setDvar( "__promod_defence_score", game["promod_scorebot_defence_ticker_buffer"], level.scorebot ); return; } @@ -34,13 +34,12 @@ main() Update_Timer() { - wait .5; - + wait 0.5; timer = 10; - while ( 1 ) + for(;;) { - if ( timer > 0) + if ( timer > 0 ) { wait 1; timer = timer - 1; @@ -57,17 +56,17 @@ Action_Ticker() if ( !isDefined( game["ticker_started"] ) ) { game["ticker_started"] = true; - setDvar( "__promod_ticker", game["promod_scorebot_ticker_buffer"] ); + setDvar( "__promod_ticker", game["promod_scorebot_ticker_buffer"], level.scorebot ); wait 9; } - wait .5; + wait 0.5; - setDvar( "__promod_ticker", game["promod_scorebot_ticker_buffer"] ); - setDvar( "__promod_attack_score", game["promod_scorebot_attack_ticker_buffer"] ); - setDvar( "__promod_defence_score", game["promod_scorebot_defence_ticker_buffer"] ); + setDvar( "__promod_ticker", game["promod_scorebot_ticker_buffer"], level.scorebot ); + setDvar( "__promod_attack_score", game["promod_scorebot_attack_ticker_buffer"], level.scorebot ); + setDvar( "__promod_defence_score", game["promod_scorebot_defence_ticker_buffer"], level.scorebot ); - while ( 1 ) + for(;;) { level waittill( "update_ticker" ); @@ -83,9 +82,9 @@ Action_Ticker() if ( isDefined( game["promod_scorebot_ticker_buffer"] ) ) { - setDvar( "__promod_ticker", game["promod_scorebot_ticker_buffer"] ); - setDvar( "__promod_attack_score", game["promod_scorebot_attack_ticker_buffer"] ); - setDvar( "__promod_defence_score", game["promod_scorebot_defence_ticker_buffer"] ); + setDvar( "__promod_ticker", game["promod_scorebot_ticker_buffer"], level.scorebot ); + setDvar( "__promod_attack_score", game["promod_scorebot_attack_ticker_buffer"], level.scorebot ); + setDvar( "__promod_defence_score", game["promod_scorebot_defence_ticker_buffer"], level.scorebot ); game["promod_scorebot_ticker_buffer"] = getDvar( "promod_scorebot_ticker_num" ); } } diff --git a/promod/servercheck.gsc b/promod/servercheck.gsc index a4c135b..c99750e 100644 --- a/promod/servercheck.gsc +++ b/promod/servercheck.gsc @@ -9,76 +9,119 @@ */ main() -{ - violationSystem(); -} - -violationSystem() { for(;;) { if ( getDvarInt( "sv_cheats" ) ) break; - if ( getDvarInt( "sv_disableClientConsole" ) != 0 ) - setDvar( "sv_disableClientConsole", 0 ); - - if ( getDvarInt( "sv_fps" ) != 20 ) - setDvar( "sv_fps", 20 ); - - if ( getDvarInt( "sv_pure" ) != 1 ) - setDvar( "sv_pure", 1 ); - - if ( getDvarInt( "sv_maxrate" ) != 25000 ) - setDvar( "sv_maxrate", 25000 ); + forceDvar( "sv_disableClientConsole", "0"); + forceDvar( "sv_fps", "20" ); + forceDvar( "sv_pure", "1" ); + forceDvar( "sv_maxrate", "25000"); + forceDvar( "g_gravity", "800" ); + forceDvar( "g_knockback", "1000" ); + forceDvar( "authServerName", "cod4master.activision.com" ); - if ( getDvarInt( "g_gravity" ) != 800 ) - setDvar( "g_gravity", 800 ); - - if ( getDvarInt( "g_knockback" ) != 1000 ) - setDvar( "g_knockback", 1000 ); - - if ( getDvar( "authServerName" ) != "cod4master.activision.com" ) - setDvar( "authServerName", "cod4master.activision.com" ); - - if ( getDvarInt( "sv_punkbuster" ) != 1 && game["LAN_MODE"] != 1 ) - iPrintLNBold("^1Server Violation ^3#0100^7: Punkbuster Disabled"); + if ( !getDvarInt( "sv_punkbuster" ) && !game["LAN_MODE"] && !game["PROMOD_PB_OFF"] ) + iPrintLNBold("^1Server Violation^7: Punkbuster Disabled"); if ( getDvarInt( "scr_player_maxhealth" ) != 100 && game["HARDCORE_MODE"] != 1 && game["CUSTOM_MODE"] != 1 || getDvarInt( "scr_player_maxhealth" ) != 30 && game["HARDCORE_MODE"] == 1 && game["CUSTOM_MODE"] != 1 ) - iPrintLNBold("^1Server Violation ^3#0101^7: Modified Player"); + iPrintLNBold("^1Server Violation^7: Modified Player Health"); if ( getDvarInt( "g_speed" ) != 0 && getDvarInt( "g_speed" ) != 190 ) - iPrintLNBold("^1Server Violation ^3#0102^7: Modified Environment"); + iPrintLNBold("^1Server Violation^7: Modified Player Speed"); - if ( getDvarInt( "g_antilag" ) != 1 && getDvarInt( "dedicated" ) != 1 ) - iPrintLNBold("^1Server Violation ^3#0103^7: Modified Connection"); + antilag = getDvarInt( "g_antilag" ); + dedicated = getDvar( "dedicated" ); + if ( (antilag && dedicated == "dedicated LAN server") || (!antilag && dedicated == "dedicated internet server" && !game["PROMOD_PB_OFF"])) + iPrintLNBold("^1Server Violation^7: Modified Connection"); - if ( !isSubStr( getDvar( "fs_game" ), "_custom" ) || !game["CUSTOM_MODE"] ) + if( isDefined( game["PROMOD_MATCH_MODE"] ) && game["PROMOD_MATCH_MODE"] == "match" || toLower( getDvar( "fs_game" ) ) == "mods/promodlive210" ) { - badIWDnames = 0; - badIWDsums = 0; + if( toLower(getDvar("fs_game")) != "mods/promodlive210" ) + iPrintLNBold("^1Server Violation^7: Invalid fs_game value"); - cacheIWDnames = StrTok( getDvar( "sv_iwdnames" ), " " ); - cacheIWDsums = StrTok( getDvar( "sv_iwds" ), " " ); - - for ( i = 0; i < cacheIWDnames.size; i++ ) + iwdnames = strToK( getDvar( "sv_iwdnames" ), " " ); + iwdsums = strToK( getDvar( "sv_iwds" ), " " ); + iwd_loaded = false; + for(i=0;i 0.5 || !useButtonTime ) @@ -67,7 +67,7 @@ monitorKeys() while ( self meleeButtonPressed() && !self useButtonPressed() ) { meleeButtonTime += 0.05; - wait ( 0.05 ); + wait 0.05; } if ( meleeButtonTime > 0.5 || !meleeButtonTime ) @@ -93,7 +93,7 @@ monitorKeys() while ( bothButtonTime < 0.5 && self meleeButtonPressed() && self useButtonPressed() ) { bothButtonTime += 0.05; - wait ( 0.05 ); + wait 0.05; } if ( bothButtonTime > 0.35 ) @@ -102,15 +102,15 @@ monitorKeys() { self.nofly = true; self.hint1 setText( "Enable: Hold ^3[{+melee}] ^7+ ^3[{+activate}]" ); - self.hint2.color = (.5, .5, .5); - self.hint3.color = (.5, .5, .5); + self.hint2.color = (0.5, 0.5, 0.5); + self.hint3.color = (0.5, 0.5, 0.5); } else { self.nofly = undefined; self.hint1 setText( "Disable: Hold ^3[{+melee}] ^7+ ^3[{+activate}]" ); - self.hint2.color = (.8, 1, 1); - self.hint3.color = (.8, 1, 1); + self.hint2.color = (0.8, 1, 1); + self.hint3.color = (0.8, 1, 1); } } @@ -246,7 +246,7 @@ createHUD() self.hint1.alignY = "middle"; self.hint1.fontScale = 1.4; self.hint1.font = "default"; - self.hint1.color = (.8, 1, 1); + self.hint1.color = (0.8, 1, 1); self.hint1.hidewheninmenu = true; self.hint1 setText( "Disable: Hold ^3[{+melee}] ^7+ ^3[{+activate}]" ); @@ -259,7 +259,7 @@ createHUD() self.hint2.alignY = "middle"; self.hint2.fontScale = 1.4; self.hint2.font = "default"; - self.hint2.color = (.8, 1, 1); + self.hint2.color = (0.8, 1, 1); self.hint2.hidewheninmenu = true; self.hint2 setText( "Stop: Press ^3[{+attack}]" ); @@ -272,7 +272,7 @@ createHUD() self.hint3.alignY = "middle"; self.hint3.fontScale = 1.4; self.hint3.font = "default"; - self.hint3.color = (.8, 1, 1); + self.hint3.color = (0.8, 1, 1); self.hint3.hidewheninmenu = true; self.hint3 setText( "Return: Press ^3[{+activate}]" ); @@ -285,7 +285,7 @@ createHUD() self.hint4.alignY = "middle"; self.hint4.fontScale = 1.4; self.hint4.font = "default"; - self.hint4.color = (.8, 1, 1); + self.hint4.color = (0.8, 1, 1); self.hint4.hidewheninmenu = true; self.hint4 setText( "Save: Press ^3[{+melee}] ^7twice" ); @@ -298,7 +298,7 @@ createHUD() self.hint5.alignY = "middle"; self.hint5.fontScale = 1.4; self.hint5.font = "default"; - self.hint5.color = (.8, 1, 1); + self.hint5.color = (0.8, 1, 1); self.hint5.hidewheninmenu = true; self.hint5 setText( "Load: Press ^3[{+activate}] ^7twice" ); } @@ -314,7 +314,7 @@ createServerHUD() nadetraining.alignY = "middle"; nadetraining.fontScale = 1.4; nadetraining.font = "default"; - nadetraining.color = (.8, 1, 1); + nadetraining.color = (0.8, 1, 1); nadetraining.hidewheninmenu = true; nadetraining setText( "Nadetraining" ); @@ -327,7 +327,7 @@ createServerHUD() position.alignY = "middle"; position.fontScale = 1.4; position.font = "default"; - position.color = (.8, 1, 1); + position.color = (0.8, 1, 1); position.hidewheninmenu = true; position setText( "Position" ); } \ No newline at end of file diff --git a/promod/strattime.gsc b/promod/strattime.gsc index 8d8e993..ccc64a1 100644 --- a/promod/strattime.gsc +++ b/promod/strattime.gsc @@ -31,7 +31,7 @@ main() player = players[i]; classType = player.pers["class"]; - if ( ( player.pers["team"] == "allies" || player.pers["team"] == "axis" ) && player.sessionstate == "playing" ) + if ( ( player.pers["team"] == "allies" || player.pers["team"] == "axis" ) && player.sessionstate == "playing" && isDefined( player.pers["class"] ) ) { if ( level.hardcoreMode && getDvarInt("weap_allow_frag_grenade") ) player giveWeapon( "frag_grenade_short_mp" ); @@ -69,7 +69,7 @@ Strat_Time() { level.strat_over = false; level.strat_time_left = game["PROMOD_STRATTIME"]; - time_increment = .25; + time_increment = 0.25; setDvar( "player_sustainAmmo", 1 ); setClientNameMode("auto_change"); @@ -110,7 +110,12 @@ Strat_Time_Timer() matchStartText = createServerFontString( "objective", 1.5 ); matchStartText setPoint( "CENTER", "CENTER", 0, -20 ); matchStartText.sort = 1001; - matchStartText setText( "Strat Time" ); + + if( isDefined(game["PROMOD_KNIFEROUND"]) && game["PROMOD_KNIFEROUND"] ) + matchStartText setText( "Starting Knife Round" ); + else + matchStartText setText( "Strat Time" ); + matchStartText.foreground = false; matchStartText.hidewheninmenu = false; diff --git a/promod/timeout.gsc b/promod/timeout.gsc index 47116a9..ed77617 100644 --- a/promod/timeout.gsc +++ b/promod/timeout.gsc @@ -18,24 +18,32 @@ main() level.timeout_over = false; game["promod_timeout_called"] = false; + level.Timeout_time_left = 300; + + if ( !isDefined( game["LAN_MODE"] ) || !game["LAN_MODE"] ) + level thread Timeout_Timer(); level thread Timeout_Time(); level thread Timeout_Time_Timer(); } -Timeout_Time() +Timeout_Timer() { - level.Timeout_time_left = 300; - time_increment = .25; + while( !level.timeout_over ) + { + wait 0.25; + level.Timeout_time_left -= 0.25; + } +} +Timeout_Time() +{ if ( !isDefined( level.ready_up_over ) ) level.ready_up_over = false; while ( !level.timeout_over ) { - wait time_increment; - - level.Timeout_time_left -= time_increment; + wait 0.25; if ( level.Timeout_time_left <= 0 || level.ready_up_over ) { @@ -51,13 +59,19 @@ Timeout_Time_Timer() matchStartText = createServerFontString( "objective", 1.5 ); matchStartText setPoint( "CENTER", "CENTER", 0, -60 ); matchStartText.sort = 1001; - matchStartText setText( "Timeout Remaining" ); + if ( isDefined( game["LAN_MODE"] ) && game["LAN_MODE"] ) + matchStartText setText( "Timeout Elapsed" ); + else + matchStartText setText( "Timeout Remaining" ); matchStartText.foreground = false; matchStartText.hidewheninmenu = true; matchStartTimer = createServerTimer( "objective", 1.4 ); matchStartTimer setPoint( "CENTER", "CENTER", 0, -40 ); - matchStartTimer setTimer( 300 ); + if ( isDefined( game["LAN_MODE"] ) && game["LAN_MODE"] ) + matchStartTimer setTimerUp( 0 ); + else + matchStartTimer setTimer( 300 ); matchStartTimer.sort = 1001; matchStartTimer.foreground = false; matchStartTimer.hideWhenInMenu = true; @@ -73,10 +87,7 @@ Timeout_Time_Timer() Timeout_Call() { - if ( isDefined( level.ready_up_over ) && !level.ready_up_over || isDefined( game["PROMOD_MATCH_MODE"] ) && game["PROMOD_MATCH_MODE"] != "match" ) - return; - - if ( level.gametype != "sd" && level.gametype != "sab" ) + if ( (isDefined( level.ready_up_over ) && !level.ready_up_over || isDefined( game["PROMOD_MATCH_MODE"] ) && game["PROMOD_MATCH_MODE"] != "match") || ( level.gametype != "sd" && level.gametype != "sab" ) ) return; if ( game["promod_timeout_called"] ) @@ -85,7 +96,7 @@ Timeout_Call() return; } - if ( game[self.pers["team"] + "_timeout_called"] ) + if ( game[self.pers["team"] + "_timeout_called"] && (!isDefined( game["LAN_MODE"] ) || !game["LAN_MODE"]) ) { self iprintln("^3Only one timeout per team/half allowed"); return; diff --git a/promod_ruleset/custom_public.gsc b/promod_ruleset/custom_public.gsc index 9d64074..0406276 100644 --- a/promod_ruleset/custom_public.gsc +++ b/promod_ruleset/custom_public.gsc @@ -1,7 +1,7 @@ main() { // custom_public ruleset, promod live v2 - // rule of thumb, 0 = disable, 1 (and in some cases higher) = enable + // boolean logic, 0 = false, 1 or higher = true // sd setDvar( "scr_sd_bombtimer", 45 ); // [1->] (seconds) @@ -189,7 +189,6 @@ main() setDvar( "g_no_script_spam", 1 ); setDvar( "g_antilag", 1 ); setDvar( "g_smoothClients", 1 ); - setDvar( "g_banIPs", "" ); setDvar( "sv_allowDownload", 1 ); setDvar( "sv_maxPing", 0 ); setDvar( "sv_minPing", 0 ); @@ -203,7 +202,6 @@ main() // various setDvar( "g_allowVote", 0 ); // [0-1] - setDvar( "g_deadChat", 1 ); // [0-1] setDvar( "scr_game_allowkillcam", 0 ); // [0-1] setDvar( "scr_game_spectatetype", 1 ); // [0-2] (disabled, team only, all) setDvar( "scr_game_matchstarttime", 10 ); // [0->] (seconds) @@ -212,11 +210,12 @@ main() setDvar( "scr_enable_scoretext", 1 ); // [0-1] (exp popups, +5 etc) setDvar( "promod_allow_strattime", 0 ); // [0-1] (sd only) setDvar( "promod_allow_readyup", 0 ); // [0-1] + setDvar( "promod_kniferound", 0 ); // [0-1] (sd only) setDvar( "g_maxDroppedWeapons", 16 ); // [2-32] (maximum number of dropped weapons before recycling) setDvar( "scr_hardcore", 0 ); // [0-1] // website - setDvar( "promod_hud_website", "www.callofduty.com" ); // (avoid "//" here) + setDvar( "promod_hud_website", "www.codpromod.com" ); // (avoid "//" here) // messagecenter setDvar( "promod_mc_enable", 0 ); // [0-1] diff --git a/readme.txt b/readme.txt new file mode 100644 index 0000000..1b415c4 --- /dev/null +++ b/readme.txt @@ -0,0 +1,210 @@ +Promod LIVE V2.10 EU - README +http://www.codpromod.com +2010-12-10 +#codpromod @ QuakeNet + +Developers: Trivve & Ingram +Manager: abhi + +Sponsored by FragNet +http://www.fragnet.net + +In association with Vita Nova +http://www.thevitanova.org +#Vita-Nova @ QuakeNet + +In this zip-package (promodlive210_eu.zip): + +promodlive210\mod.ff +promodlive210\promodlive210.iwd +promodlive210\z_custom_ruleset.iwd +readme.txt +server_setup.txt +server.cfg +iwd.cfg + +CHANGES + +LIVE V2.10: + +- Game code optimizations which reduce the size of mod over 50% compared to V2.04 +- Killspec mode. Commits suicide, releases current class spot and does not respawn the player before a class is selected again. Can be activated through quickmessage menu: B-4-4 or by console command openscriptmenu quickpromod killspec +- Moved game timer closer to the edge of the screen for shoutcasters +- Improved server integrity checks +- Defaulted "promod_mode" to strat when starting a new server from main menu +- Knife round. For match modes adds an extra round and ready-up mode, in public games it will be the first round of map. It can be toggled via knife keyword in promod_mode (for example match_mr10_knife) or dvar "promod_kniferound" in public games. Scorebot announces knife round via knife_round keyword +- Ready-up mode is more responsive +- Improved promod_mode, for use see below +- Increased dropped weapon disappearing time to 3 minutes +- Promod Commands and Promod Graphics menus can be accessed via openscriptmenu quickpromod controls / graphics respectively +- Added tactical timeouts for lan mode. It is possible to take unlimited amount of timeouts for unlimited time +- Improved strat mode +- Fixed public server weapons glitch +- Forced fs_game for match modes. If you don't know how to change fs_game setting, please contact your Game Server Provider +- Removed red enemy dots from large map +- Included with package: PunkBuster MD5Tool checks for main/iw_##.iwd files. This needs to be set up manually, see below +- Added echo command, which will display text only to yourself in game message box. Usage: openscriptmenu echo text_I_want_to_display - note that underscores are replaced with spaces. Works also with colors. However stacking two openscriptmenu commands to one bind will not work +- Shoutcasters can now choose who to follow using binds and even toggle players by their current class + +Plus many other visual, non-gameplay related improvements. + +LIVE V2.04: + +- Reintroduced "cl_maxpackets" enforcement to "100" +- Small fix in the scorebot +- Weapon class availability fixed on halftime + +LIVE V2.03: + +After one hotfix and several release candidates: + +- Added delay in the end of the round for movie-makers +- Several minor bugs fixed +- Prevention for "spec-nading" +- Updated promod modes +- Forcing for maxpackets (100) removed, it's now possible to use 60 - 100 (some regions need this, if leagues need fixed values, use punkbuster scripts to force) +- Team auto-balancing has been removed, which was causing severe issues, for instance HUD-disappearing and invariability bug +- The in-game stats has been removed, due to big inaccuracies in values + +Big thanks to the community for reporting bugs and other issues. +Especially thanks to paradox-, and other that we might forgot. Also thanks to giunuz and SirXenos for extensive bug testing. + +LIVE V2: + +Except various bug fixes and code-enhancements: + +- Fully functional shoutcaster overlay for all resolutions and aspect ratios +- Class loadouts are preserved in the rank file +- Class related binds +- Enhanced client- and server-security +- Small changes/improvements to the hud and menus +- Players left-HUD is rebuilt and therefore possible to get rid of for those nice-looking frag-movies +- Full Hardcore-mode support, including support for all gametypes, HC mode will also use cook-nades +- Red enemy crosshair glitch through smoke fixed +- Added a strat mode (promod_mode strat) with nadetraining possibility, similar to AM4PAM +- Client-side scorebot functionality implemented, similar to the PAM4 ditto. +- Disabled ammo-sharing between SMG-class and M9 Beretta, as well as reduced weapon switch on M16 +- All taunt sounds removed + +FAQ + +Q: What about the hardcore, and support for all gametypes, how do I use them? +A: For a complete list of "promod_modes", see below. + +Q: Can the rulesets be customized to fit my needs? +A: Promod has always been about an unified ruleset. Therefore they only thing you can change in the regular match-modes is mr-rating (SD and SAB only). + +Q: I want to run my own custom promod-server with skins etc, how? +A: In order to run your own custom promod-server you'll need to change the fs_game to anything besides "mods/promodlive210" as well as not using match-modes. You will now be able to modify the Promod IWDs and add additional iwd-files. + +Q: Can I use this mod as a movie mod? +A: Yes, you can! Commands (which are important for movie-making) are only forced on the clients once connected (with one exception, see below). Demos needs to be loaded using devmap before starting a demo ("devmap mp_crash;disconnect"). If you only having black screen, change "r_contrast" to "1" as well as "r_brightness" to "0". + +Q: How do I get the scorebot running? +A: See below how to enable scorebot. + +Q: Class related binds, how do they work? +A: See below for a list of commands. + +Q: My question is not answered here. +A: Easiest way to contact us is via mail or join #codpromod @ QuakeNet. + +PROMOD MODES + +The promod_mode dvar follows a specific syntax. However the game accepts the bits between underscores (_) in any order. + +match: standard match mode, conflicts with knockout mode. Round limit = mr#*2 +knockout: knockout match mode, conflicts with standard match mode. Score limit = mr#+1 +mr#: maxrounds - see above for use. Default is 10. Works only in Search & Destroy and Sabotage. +lan: lan mode - g_antilag 0, punkbuster messages turned off. Conflicts with pb mode. +hc: hardcore mode (disables some HUD elements and reduces health level to 30). +knife: knife round - adds a knife round and an extra ready-up mode to Search & Destroy matches. +1v1/2v2: used for 1v1 and 2v2 matches, disables Demolitions and Sniper classes. +pb: disables punkbuster warnings for online modes. Conflicts with lan mode. + +For example "promod_mode match_mr10_knife_pb" will enable knife round and disable punkbuster warnings in standard maxrounds 10 mode. + +There are also some other modes: + +comp_public +comp_public_hc +custom_public +strat + +SCOREBOT + +To enable scorebot, add this line to your server-config: + +seta promod_enable_scorebot "1" + +FORCED COMMANDS + +All these dvars are forced by Promod (automatically), make sure they stay untouched/within range to avoid being punished! + +dynent_active 0 +rate 25000 +cg_nopredict 0 +sm_enable 0 +r_dlightLimit 0 +r_lodscalerigid 1 +r_lodscaleskinned 1 +r_filmtweakInvert 0 +r_zfeather 1 +cg_viewzsmoothingmin 1 +cg_viewzsmoothingmax 16 +cg_viewzsmoothingtime 0.1 +cg_huddamageiconheight 64 +cg_huddamageiconwidth 128 +developer 0 + +com_maxfps 40 - 250 +cl_maxpackets 60 - 100 +compassplayerwidth EQUAL TO compassplayerheight +compassfriendlywidth EQUAL TO compassfriendlyheight + +CLASS BINDS + +You can bind them via the in-game menu. (Controls - Multiplayer Controls…) +Alternatively you can manually bind them in the console/config. + +bind [KEY] [COMMAND] + +openscriptmenu quickpromod silencer //toggles silencer on/off on the primary weapon +openscriptmenu quickpromod grenade //toggles between flash/smoke-grenade +openscriptmenu quickpromod assault +openscriptmenu quickpromod specops +openscriptmenu quickpromod demolitions +openscriptmenu quickpromod sniper + +SHOUTCASTER BINDS + +You can bind them via the Shoutcaster main-menu. +Alternatively you can manually bind them in the console/config. + +bind [KEY] [COMMAND] + +openscriptmenu shoutcast_setup number +openscriptmenu shoutcast_setup assault +openscriptmenu shoutcast_setup specops +openscriptmenu shoutcast_setup demolitions +openscriptmenu shoutcast_setup sniper + +Number being 1-10, it's very easy to understand which player corresponds the correct number. +1-5 symbolizes players on Attacking side from top to down looking at the shoutcaster-bars. +6-10 same goes here, players on Defending side. + +Putting the class instead of a number will cycle through players using that class. + +CUSTOM MAPS + +In case Promod is throwing an error while playing on custom maps, make sure the IWD-files inside "usermaps/mapname" folder have the same map name in them. +For example map "mp_dahman_b3" contains a file called "mp_dahman_b3.iwd" and therefore it is not marked as a violation. + +NOTES FOR SERVER-ADMINS AND SERVER-HOSTING COMPANIES + +The dvar fs_game "mods/promodlive210" is forced for match-servers and do not rename any files or modify contents of them. +We recommend using the iwd.cfg which you can put in the pb-folder, it contains checksums for the stock iwd-files for preventing custom skins and such and can be loaded by typing "rcon pb_sv_load iwd.cfg". +However custom servers with skins etc. must use something else than "mods/promodlive210" for example "mods/promodlive210_custom", it's not restricted and you are free to modify files as well. + +On another note of security, the IWD-file "z_custom_ruleset.iwd" is now running integrity checks if server is running match-mode which means you have to decide whether the server should run "promod_mode custom_public" or not. +If you later want to run match-modes you will have to use the original unmodified "z_custom_ruleset.iwd" supplied in this package. Sorry for any inconvenience caused. \ No newline at end of file diff --git a/server.cfg b/server.cfg new file mode 100644 index 0000000..29bbfc1 --- /dev/null +++ b/server.cfg @@ -0,0 +1,34 @@ +// promod live v2 - sample server config v1.2 +// for public ruleset customizations, see z_custom_ruleset.iwd + +// info strings +sets _Admin "" +sets _Email "" +sets _Website "" +sets _Location "" +sets _Irc "" +sets sv_hostname "" + +// password settings +set rcon_password "" // remote console password +set sv_privatePassword "" // private slots password +set g_password "" // server password + +// player slots, maxclients - privateclients = public slots +set sv_maxclients 12 // maximum number of clients +set sv_privateclients "" // number of private slots + +// client download settings +seta sv_wwwDownload "0" // enable download redirection +seta sv_wwwBaseURL "" // defines url to download from +seta sv_wwwDlDisconnected "0" // disconnect clients while downloading + +// map rotation, change to your liking +set sv_maprotationcurrent "" +set sv_mapRotation "gametype war map mp_backlot gametype dom map mp_crash gametype koth map mp_crossfire gametype sab map mp_citystreets gametype sd map mp_strike gametype dm map mp_killhouse" + +// promod settings +set promod_mode "custom_public" // promod mode, for a list of promod modes see attached readme +set promod_enable_scorebot "0" // match-modes only + +//pb_sv_load iwd.cfg // stock-iwd checksum control, remove the "//" to enable and put iwd.cfg in your pb folder \ No newline at end of file diff --git a/server_setup.txt b/server_setup.txt new file mode 100644 index 0000000..b38faa1 --- /dev/null +++ b/server_setup.txt @@ -0,0 +1,14 @@ +1. Create a shortcut to the COD4 executable (iw3mp.exe). +2. Right click on the shortcut and hit properties. In the target field add the command-line (sample below). +3. Click "OK" to save, click the shortcut and if you did everything right the server should now be running. + +This is a sample command-line for starting and using Promod LIVE V2 under Windows: + +dedicated [0-3] (listen, LAN, internet) +net_ip [xxx.xxx.xxx.xxx] +net_port [1-65535] (standard is 28960) + + +set dedicated 2 +set net_ip localhost +set net_port 28960 +set sv_punkbuster 1 +set fs_game mods/promodlive210 +exec server.cfg +map_rotate + +Make sure you put the server config (server.cfg) in the main-folder. +Included is also a iwd.cfg which you can put in the pb-folder, it contains checksums for the stock iwd-files for preventing custom skins and such and can be loaded by typing "\rcon pb_sv_load iwd.cfg". \ No newline at end of file diff --git a/shock/damage_mp.shock b/shock/damage_mp.shock index 294a346..d2ef7e5 100644 --- a/shock/damage_mp.shock +++ b/shock/damage_mp.shock @@ -11,14 +11,14 @@ bg_shock_soundLoop "shellshock_loop" bg_shock_soundLoopSilent "shellshock_loop_silent" bg_shock_soundEnd "shellshock_end" bg_shock_soundEndAbort "shellshock_end_abort" -bg_shock_soundFadeInTime ".25" +bg_shock_soundFadeInTime "0.25" bg_shock_soundFadeOutTime "2.5" bg_shock_soundLoopFadeTime "2" bg_shock_soundLoopEndDelay "-1.5" bg_shock_soundRoomType "underwater" bg_shock_soundDryLevel "1.0" bg_shock_soundWetLevel "0.50" -bg_shock_soundModEndDelay "-.75" +bg_shock_soundModEndDelay "-0.75" bg_shock_volume_physics "0.1" bg_shock_volume_auto "0.1" bg_shock_volume_auto2 "0.1" diff --git a/ui_mp/auto_update.menu b/ui_mp/auto_update.menu index 6076654..5305c8e 100644 --- a/ui_mp/auto_update.menu +++ b/ui_mp/auto_update.menu @@ -12,7 +12,7 @@ { menuDef { - name "auconfirm" + name "auconfirm" fullscreen 0 rect 204 160 235 135 focusColor COLOR_FOCUSED @@ -32,33 +32,36 @@ rect 0 2 235 135 style WINDOW_STYLE_FILLED border 1 - bordercolor .5 .5 .5 .5 + bordercolor 0.5 0.5 0.5 0.5 forecolor 1 1 1 1 - backcolor 0 0 0 .85 + backcolor 0 0 0 0.85 visible 1 decoration } itemDef { - name acwindow2 - group grpControlbutton - rect 2 4 231 20 - style WINDOW_STYLE_FILLED - border 1 - bordercolor .1 .1 .1 .2 + name acconfirm + text "Call of Duty 4 Promod" + style 0 + textscale 0.25 + textstyle 3 + rect 116 20 110 20 + textalign ITEM_ALIGN_CENTER + textalignx -55 + textaligny 0 + textfont UI_FONT_NORMAL + decoration forecolor 1 1 1 1 - backcolor 1 1 .3 .3 visible 1 - decoration } itemDef { name acconfirm - text "Call of Duty 4 Promod" + text "www.codpromod.com" style 0 - textscale .25 + textscale 0.2 textstyle 3 - rect 116 20 110 20 + rect 116 28 110 20 textalign ITEM_ALIGN_CENTER textalignx -55 textaligny 0 @@ -70,11 +73,11 @@ itemDef { name oldtitle - text "Current Promod Version: LIVE V2.05 EU" + text "Current Promod Version: LIVE V2.10 EU" style 0 - textscale .25 + textscale 0.25 textstyle 3 - rect 30 40 110 20 + rect 30 45 110 20 textalign ITEM_ALIGN_LEFT textalignx 0 textaligny 0 @@ -86,9 +89,9 @@ itemDef { name newtitle - text "Credits:" + text "Developers: Trivve and Ingram" style 0 - textscale .25 + textscale 0.25 textstyle 3 rect 30 55 95 20 textalign ITEM_ALIGN_LEFT @@ -102,11 +105,11 @@ itemDef { name newtitle - text "Trivve, Ingram, abhi, raf1, MavLP, bullet-worm" + text "Manager: abhi" style 0 - textscale .25 + textscale 0.25 textstyle 3 - rect 30 70 95 20 + rect 30 65 95 20 textalign ITEM_ALIGN_LEFT textalignx 0 textaligny 0 @@ -118,11 +121,11 @@ itemDef { name newtitle - text "Big thanks to all beta testers!" + text "Former developers: raf1, MavLP, bulletworm" style 0 - textscale .25 + textscale 0.25 textstyle 3 - rect 30 80 95 20 + rect 30 75 95 20 textalign ITEM_ALIGN_LEFT textalignx 0 textaligny 0 @@ -132,18 +135,66 @@ visible 1 } itemDef + { + name acconfirm + text "In association with Vita Nova" + style 0 + textscale 0.25 + textstyle 3 + rect 116 90 110 20 + textalign ITEM_ALIGN_CENTER + textalignx -55 + textaligny 0 + textfont UI_FONT_NORMAL + decoration + forecolor 1 1 1 1 + visible 1 + } + itemDef + { + name acconfirm + text "www.thevitanova.org" + style 0 + textscale 0.2 + textstyle 3 + rect 116 98 110 20 + textalign ITEM_ALIGN_CENTER + textalignx -55 + textaligny 0 + textfont UI_FONT_NORMAL + decoration + forecolor 1 1 1 1 + visible 1 + } + itemDef + { + name acconfirm + text "Also thanks to everyone else involved in Promod!" + style 0 + textscale 0.25 + textstyle 3 + rect 116 110 110 20 + textalign ITEM_ALIGN_CENTER + textalignx -55 + textaligny 0 + textfont UI_FONT_NORMAL + decoration + forecolor 1 1 1 1 + visible 1 + } + itemDef { name no text "OK" type 1 - textscale .3 + textscale 0.3 style WINDOW_STYLE_FILLED textstyle ITEM_TEXTSTYLE_SHADOWED - rect 90 95 50 20 + rect 90 115 50 20 textalign ITEM_ALIGN_CENTER textaligny 15 textfont UI_FONT_NORMAL - forecolor .9 .9 .95 1 + forecolor 0.9 0.9 0.95 1 visible 1 mouseEnter { diff --git a/ui_mp/cac_ingame.inc b/ui_mp/cac_ingame.inc index c27a9c0..890e73f 100644 --- a/ui_mp/cac_ingame.inc +++ b/ui_mp/cac_ingame.inc @@ -118,7 +118,6 @@ #define STAT_CAC_CAMO tableLookup("mp/attachmentTable.csv", 4, dvarString( loadout_camo ), 11) #include "ui_mp/cac_loadout_ingame.inc" - #include "ui/safearea.menu" } #define PREPROC_ATTACH_CLOSEALL \ @@ -186,7 +185,7 @@ LOCAL_WEAPON_CLASS( 5, "sniper", "@MPUI_SNIPER_RIFLES" ) } - #undef UI_FOCUSFIRST + #undef UI_FOCUSFIRST #define UI_FOCUSFIRST "ui_primary_highlighted" #define LOCAL_MASTER_WEAPON_GROUP( suffix, pos, y_offset )\ @@ -265,7 +264,7 @@ CHOICE_BUTTON_FOCUS_VIS_NOHI( itemNum, "", ;, AI_FOCUS_ACTION(groupArg,pname), ;, when( !dvarBool( "attach_allow_"groupArg"_"pname ) ); ) \ CHOICE_DBUTTON_VIS( itemNum, "@"+tablelookup("mp/attachmentTable.csv",4,pname,3), when( !dvarBool( "attach_allow_"groupArg"_"pname ) ); ) - #undef UI_FOCUSFIRST + #undef UI_FOCUSFIRST #define UI_FOCUSFIRST "ui_attachment_highlighted" #define LOCAL_MASTER_ATTACHMENT_GROUP( stat_slot, suffix, pos, ptype, y_offset, statDvar )\ @@ -328,14 +327,14 @@ #define LOCAL_SIDEARM_ITEM( itemNum, weaponName, weaponStat, weaponRef, highlight_dvar )\ CHOICE_BUTTON_FOCUS_VIS_ADV( itemNum, weaponName, LOCAL_SIDEARM_ACTION( weaponStat, weaponRef ), SI_FOCUS_ACTION( weaponRef ), ;, \ when( dvarBool( "weap_allow_"weaponRef ) && ( weaponRef == REF_DESERTEAGLE || weaponRef == REF_DESERTEAGLEGOLD ) );, \ - dvarBool( "weap_allow_"weaponRef ) && ( weaponRef == REF_DESERTEAGLE || weaponRef == REF_DESERTEAGLEGOLD ) ) \ + dvarBool( "weap_allow_"weaponRef ) && ( weaponRef == REF_DESERTEAGLE || weaponRef == REF_DESERTEAGLEGOLD ) ) \ CHOICE_BUTTON_FOCUS_VIS_ADV( itemNum, weaponName, LOCAL_SIDEARM_ACTION2( weaponStat, weaponRef ), SI_FOCUS_ACTION( weaponRef ), ;, \ when( dvarBool( "weap_allow_"weaponRef ) && weaponRef != REF_DESERTEAGLE && weaponRef != REF_DESERTEAGLEGOLD );, \ - dvarBool( "weap_allow_"weaponRef ) && weaponRef != REF_DESERTEAGLE && weaponRef != REF_DESERTEAGLEGOLD ) \ + dvarBool( "weap_allow_"weaponRef ) && weaponRef != REF_DESERTEAGLE && weaponRef != REF_DESERTEAGLEGOLD ) \ CHOICE_BUTTON_FOCUS_VIS_NOHI( itemNum, "", ;, SI_FOCUS_ACTION( weaponRef ), ;, when( !dvarBool( "weap_allow_"weaponRef ) ); ) \ CHOICE_DBUTTON_VIS( itemNum, weaponName, when( !dvarBool( "weap_allow_"weaponRef ) ); ) - #undef UI_FOCUSFIRST + #undef UI_FOCUSFIRST #define UI_FOCUSFIRST "ui_sidearm_highlighted" menuDef @@ -375,7 +374,7 @@ CHOICE_BUTTON_FOCUS_VIS_ADV( itemNum, weaponName, LOCAL_SGRENADE_ACTION( weaponRef ), execnow "set "highlight_dvar" "weaponRef, ;, when( dvarBool("weap_allow_"weaponRef) );, dvarBool("weap_allow_"weaponRef) ) \ CHOICE_DBUTTON_VIS( itemNum, weaponName, when( !dvarBool("weap_allow_"weaponRef) ); ) - #undef UI_FOCUSFIRST + #undef UI_FOCUSFIRST #define UI_FOCUSFIRST "ui_sgrenade_highlighted" menuDef @@ -411,7 +410,7 @@ CHOICE_BUTTON_FOCUS_VIS( itemNum, camoName, LOCAL_CAMO_ACTION( camoRef );, execnow "set "highlight_dvar" "camoRef;, ;, when( dvarString( loadout_primary ) == "ak47" || dvarString( loadout_primary ) == "uzi" || dvarString( loadout_primary ) == "m1014" ) ) \ CHOICE_DBUTTON_VIS( itemNum, camoName, when( dvarString( loadout_primary ) != "ak47" && dvarString( loadout_primary ) != "uzi" && dvarString( loadout_primary ) != "m1014" ) ) - #undef UI_FOCUSFIRST + #undef UI_FOCUSFIRST #define UI_FOCUSFIRST "ui_camo_highlighted" #define LOCAL_CAMO_GROUP( prefix, onLeave )\ diff --git a/ui_mp/cac_loadout_ingame.inc b/ui_mp/cac_loadout_ingame.inc index e63d12d..6619b3f 100644 --- a/ui_mp/cac_loadout_ingame.inc +++ b/ui_mp/cac_loadout_ingame.inc @@ -49,4 +49,4 @@ PREPROC_SHADER_DRAW_ALIGNED( 32 178 32 32 LOADOUT_ALIGN, ORIGIN_LOADOUT, "weapon_flashbang", 1 1 1 1, 0, 1, 1 1 1 1 visible when( dvarInt( weap_allow_flash_grenade ) != 0 && dvarString( loadout_grenade ) == "flash_grenade" ) ) PREPROC_TEXT_DRAW_ALIGNED_EXP( 0 183 (LOADOUT_WIDTH+8) 20 LOADOUT_ALIGN, ORIGIN_LOADOUT, 1, TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, COLOR_TITLE visible when( dvarInt( weap_allow_frag_grenade ) != "0" ) ) - PREPROC_TEXT_DRAW_ALIGNED_EXP( 30 183 (LOADOUT_WIDTH+8) 20 LOADOUT_ALIGN, ORIGIN_LOADOUT, 1, TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, COLOR_TITLE visible when( dvarInt( weap_allow_flash_grenade ) != "0" && dvarInt( weap_allow_smoke_grenade ) != "0" ) ) \ No newline at end of file + PREPROC_TEXT_DRAW_ALIGNED_EXP( 30 183 (LOADOUT_WIDTH+8) 20 LOADOUT_ALIGN, ORIGIN_LOADOUT, 1, TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, COLOR_TITLE visible when( dvarInt( weap_allow_flash_grenade ) != "0" && dvarInt( weap_allow_smoke_grenade ) != "0" ) ) \ No newline at end of file diff --git a/ui_mp/connect.menu b/ui_mp/connect.menu index 792dd4f..9493caf 100644 --- a/ui_mp/connect.menu +++ b/ui_mp/connect.menu @@ -9,9 +9,6 @@ */ #include "ui/menudef.h" - -#define WIDESCREEN_OFFSET 107 0 - { menuDef { @@ -20,7 +17,6 @@ fullScreen MENU_FALSE focusColor COLOR_FOCUSED visible MENU_FALSE - backcolor 1 1 1 1 background "$levelBriefing" rect FULLSCREEN_WIDE @@ -29,19 +25,20 @@ { style WINDOW_STYLE_FILLED rect -128 -40 260 4 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_BOTTOM - origin WIDESCREEN_OFFSET + origin 107 0 backcolor 0 0 0 0.8 - visible 1 decoration + visible 1 + decoration } itemDef { name "loadbar" style WINDOW_STYLE_LOADBAR rect -127 -39 258 2 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_BOTTOM - origin WIDESCREEN_OFFSET + origin 107 0 background "white" - visible 1 decoration + visible 1 + decoration } - #include "ui/safearea.menu" } } \ No newline at end of file diff --git a/ui_mp/hud.menu b/ui_mp/hud.menu index 3fed75f..7646efa 100644 --- a/ui_mp/hud.menu +++ b/ui_mp/hud.menu @@ -12,35 +12,73 @@ #define TEAM_IS_MARINES (localVarString( ui_team ) == "marines") #define TEAM_IS_OPFOR (localVarString( ui_team ) == "opfor") -#define ALLIES_AXIS (team( name ) == "TEAM_ALLIES" || team( name ) == "TEAM_AXIS" ) -#define DVAR_ENFORCER (!dvarint( sv_cheats ) && ALLIES_AXIS && dvarint( com_maxfps ) > 250 || dvarint( com_maxfps ) < 40 || dvarint( cl_maxpackets ) != 100 || dvarint( rate) != 25000 || dvarint( dynent_active ) || dvarfloat( cg_hudDamageIconWidth ) != 128 || dvarfloat( cg_hudDamageIconHeight ) != 64 || dvarfloat( cg_viewZSmoothingMin ) != 1 || dvarfloat( cg_viewZSmoothingMax ) != 16 || dvarfloat( cg_viewZSmoothingTime ) != 0.1 || dvarint( r_filmtweakInvert ) || dvarint( r_dlightlimit ) || dvarfloat( r_lodscalerigid ) != 1 || dvarint( sm_enable ) || dvarint( cg_nopredict ) || dvarfloat( compassplayerwidth ) != dvarfloat( compassplayerheight ) || dvarfloat( compassfriendlywidth ) != dvarfloat( compassfriendlyheight ) || dvarint( aim_automelee_enabled ) || dvarint( developer ) ) +#define ALLIES_AXIS (localVarString( ui_team ) == "marines" || localVarString( ui_team ) == "opfor") +#define NOT_SPECTATING (!spectatingClient()) +#define DVAR_ENFORCER_SOUND ( !dvarint( sv_cheats ) && ALLIES_AXIS && ( dvarint( com_maxfps ) > 250 || dvarint( com_maxfps ) < 40 || dvarint( cl_maxpackets ) != 100 || dvarint( rate ) != 25000 || dvarint( dynent_active ) || dvarfloat( cg_hudDamageIconWidth ) != 128 || dvarfloat( cg_hudDamageIconHeight ) != 64 || dvarfloat( cg_viewZSmoothingMin ) != 1 || dvarfloat( cg_viewZSmoothingMax ) != 16 || dvarfloat( cg_viewZSmoothingTime ) != 0.1 || dvarint( r_filmtweakInvert ) || dvarint( r_dlightlimit ) || dvarfloat( r_lodscalerigid ) != 1 || dvarfloat( r_lodscaleskinned ) != 1 || dvarint( sm_enable ) || dvarint( cg_nopredict ) || dvarint( developer ) ) || dvarint( r_zfeather ) != 1 ) +#define DVAR_ENFORCER ( !dvarint( sv_cheats ) && ALLIES_AXIS && ( dvarint( com_maxfps ) > 250 || dvarint( com_maxfps ) < 40 || dvarint( cl_maxpackets ) != 100 || dvarint( rate ) != 25000 || dvarint( dynent_active ) || dvarfloat( cg_hudDamageIconWidth ) != 128 || dvarfloat( cg_hudDamageIconHeight ) != 64 || dvarfloat( cg_viewZSmoothingMin ) != 1 || dvarfloat( cg_viewZSmoothingMax ) != 16 || dvarfloat( cg_viewZSmoothingTime ) != 0.1 || dvarint( r_filmtweakInvert ) || dvarint( r_dlightlimit ) || dvarfloat( r_lodscalerigid ) != 1 || dvarfloat( r_lodscaleskinned ) != 1 || dvarint( sm_enable ) || dvarint( cg_nopredict ) || dvarint( developer ) || dvarint( r_zfeather ) != 1 || dvarfloat( compassplayerwidth ) != dvarfloat( compassplayerheight ) || dvarfloat( compassfriendlywidth ) != dvarfloat( compassfriendlyheight ) || dvarint( aim_automelee_enabled ) ) ) #define HUD_ALPHA 0.65 #define HUD_FOREGROUND_ALPHA 0.75 -#define NOT_SPECTATING (!spectatingClient()) -#define SCOREBAR_BORDER( setting, alliesColor, axisColor ) \ - itemDef \ - { \ - style WINDOW_STYLE_FILLED \ - rect 36 -36 80 12 HORIZONTAL_ALIGN_LEFT VERTICAL_ALIGN_BOTTOM \ - forecolor 0 0 0 0 \ - border 1 \ - bordercolor alliesColor 1 \ - bordersize 2 \ - visible when ( (tableLookup( "mp/mapsTable.csv", 0, dvarString( "mapname" ), 1 ) == setting) && team( name ) == "TEAM_ALLIES" ); \ - decoration \ - } \ - itemDef \ - { \ - style WINDOW_STYLE_FILLED \ - rect 36 -36 80 12 HORIZONTAL_ALIGN_LEFT VERTICAL_ALIGN_BOTTOM \ - forecolor 0 0 0 0 \ - border 1 \ - bordercolor axisColor 1 \ - bordersize 2 \ - visible when ( (tableLookup( "mp/mapsTable.csv", 0, dvarString( "mapname" ), 1 ) == setting) && team( name ) == "TEAM_AXIS" ); \ - decoration \ - } +#define ENFORCE( condition, txt, position ) \ + itemDef \ + { \ + rect 0 0 1 1 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER \ + exp rect Y( position ); \ + origin 107 0 \ + forecolor 1 0 0 1 \ + backcolor 1 0 0 1 \ + exp text( txt ); \ + textfont UI_FONT_OBJECTIVE \ + textscale 0.60 \ + textalign ITEM_ALIGN_CENTER \ + textstyle ITEM_TEXTSTYLE_SHADOWEDMORE \ + visible when( condition ) \ + decoration \ + } + +#define HEALTHBAR( dvarName, mat, n ) \ + itemDef \ + { \ + style WINDOW_STYLE_SHADER \ + origin 0 0 \ + rect 0 0 128 16 HB_RECT 1 \ + exp rect X( (-128 * int(dvarName == "allies")) + (127 * (2*int(dvarName == "allies")-1) * dvarfloat("shout_"+dvarName+"health"+(n+1)) ) ); \ + exp rect Y( 207 + n * 18 ); \ + exp material( mat ); \ + textalign SHOUT_TEXT_ALIGN \ + visible when( dvarString( "shout_"+dvarName+(n+1) ) != "" ) \ + decoration \ + } \ + itemDef \ + { \ + rect 0 0 1 1 HB_RECT 1 \ + origin 0 0 \ + exp rect X( (2*int(dvarName == "allies")-1) * 5 - 2* int(dvarName == "axis") ); \ + exp rect Y( 223 + n * 18 ); \ + forecolor 1 1 1 1 \ + exp text( dvarString( "shout_"+dvarName+(n+1) ) ); \ + textstyle ITEM_TEXTSTYLE_SHADOWED \ + textalign SHOUT_TEXT_ALIGN \ + textscale 0.36 \ + textfont UI_FONT_DEFAULT \ + visible when( dvarString( "shout_"+dvarName+(n+1) ) != "" && dvarFloat( "shout_"+dvarName+"health"+(n+1) ) != "0" ) \ + decoration \ + } \ + itemDef \ + { \ + rect 0 0 1 1 HB_RECT 1 \ + origin 0 0 \ + exp rect X( (2*int(dvarName == "allies")-1) * 5 - 2* int(dvarName == "axis") ); \ + exp rect Y( 223 + n * 18 ); \ + forecolor 0.5 0.5 0.5 1 \ + exp text( dvarString( "shout_"+dvarName+(n+1) ) ); \ + textstyle ITEM_TEXTSTYLE_SHADOWED \ + textalign SHOUT_TEXT_ALIGN \ + textscale 0.36 \ + textfont UI_FONT_DEFAULT \ + visible when( dvarString( "shout_"+dvarName+(n+1) ) != "" && dvarFloat( "shout_"+dvarName+"health"+(n+1) ) == "0" ) \ + decoration \ + } #define BOTTOM_RECT_X 0 #define BOTTOM_RECT_Y 0 @@ -75,8 +113,8 @@ menuDef { - name "MantleHint" - rect 0 105 40 40 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER + name "MantleHint" + rect 0 105 40 40 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER fullScreen 0 visible when( !dvarInt( ui_hud_hardcore ) ) @@ -133,9 +171,9 @@ menuDef { - name "stance" + name "stance" rect -1000 -1000 48 48 HORIZONTAL_ALIGN_LEFT VERTICAL_ALIGN_BOTTOM - fullScreen 0 + fullScreen 0 visible when( !flashbanged() && !ui_active() && NOT_SPECTATING ); itemDef @@ -154,84 +192,84 @@ #define RECT_COMPASS 0 0 COMPASS_SIZE_MP COMPASS_SIZE_MP HORIZONTAL_ALIGN_LEFT VERTICAL_ALIGN_TOP #undef MINIMAP_ORIGIN - #define MINIMAP_ORIGIN 6 6 + #define MINIMAP_ORIGIN 6 6 menuDef { name "Compass_old" - rect RECT_COMPASS - fullScreen 0 - visible when ( DVAR_ENFORCER == false && !inkillcam() && !flashbanged() && !ui_active() && !scoped() && (dvarString( createfx ) != "on") && (!dvarint( ui_hud_hardcore ) || dvarInt( g_compassShowEnemies ) ) ); + rect RECT_COMPASS + fullScreen 0 + visible when ( DVAR_ENFORCER == false && !inkillcam() && !flashbanged() && !ui_active() && !scoped() && (dvarString( createfx ) != "on") && (!dvarint( ui_hud_hardcore ) || dvarInt( g_compassShowEnemies ) ) ); itemDef { name "minimapBG" rect (MINIMAP_X_MP - 14) (MINIMAP_Y_MP - 6) COMPASS_SIZE_MP COMPASS_SIZE_MP - origin MINIMAP_ORIGIN + origin MINIMAP_ORIGIN forecolor 1 1 1 1 background "minimap_background" ownerdraw CG_PLAYER_COMPASS_BACK - visible 1 + visible 1 decoration } itemDef - { - name "minimapTickerBorder" - rect MINIMAP_X_MP (MINIMAP_Y_MP - 15) MINIMAP_W_MP 14 - origin MINIMAP_ORIGIN - forecolor 1 1 1 1 - background "minimap_tickertape_background" - ownerdraw CG_PLAYER_COMPASS_BACK - visible 1 + { + name "minimapTickerBorder" + rect MINIMAP_X_MP (MINIMAP_Y_MP - 15) MINIMAP_W_MP 14 + origin MINIMAP_ORIGIN + forecolor 1 1 1 1 + background "minimap_tickertape_background" + ownerdraw CG_PLAYER_COMPASS_BACK + visible 1 decoration - } - itemDef - { - name "minimapTicker" - rect MINIMAP_X_MP (MINIMAP_Y_MP - 12) MINIMAP_W_MP 9 - origin MINIMAP_ORIGIN - forecolor 1 1 1 1 - background "minimap_tickertape_mp" - ownerdraw CG_PLAYER_COMPASS_TICKERTAPE_NO_OBJ - visible 1 + } + itemDef + { + name "minimapTicker" + rect MINIMAP_X_MP (MINIMAP_Y_MP - 12) MINIMAP_W_MP 9 + origin MINIMAP_ORIGIN + forecolor 1 1 1 1 + background "minimap_tickertape_mp" + ownerdraw CG_PLAYER_COMPASS_TICKERTAPE_NO_OBJ + visible 1 decoration - } + } itemDef - { + { name "mini_map" rect MINIMAP_X_MP MINIMAP_Y_MP MINIMAP_W_MP MINIMAP_H_MP - origin MINIMAP_ORIGIN + origin MINIMAP_ORIGIN forecolor 1 1 1 1 background "compass_map_default" ownerdraw CG_PLAYER_COMPASS_MAP - visible 1 + visible 1 decoration - } + } itemDef { name "compasspointers" rect MINIMAP_X_MP MINIMAP_Y_MP MINIMAP_W_MP MINIMAP_H_MP - origin MINIMAP_ORIGIN + origin MINIMAP_ORIGIN forecolor 1 1 1 1 background "objective_line" ownerdraw CG_PLAYER_COMPASS_POINTERS - visible when ( dvarint( ui_hud_showobjicons ) > 0 ); + visible when ( dvarint( ui_hud_showobjicons ) > 0 ); decoration } itemDef { name "compassfriendlies" rect MINIMAP_X_MP MINIMAP_Y_MP MINIMAP_W_MP MINIMAP_H_MP - origin MINIMAP_ORIGIN + origin MINIMAP_ORIGIN forecolor 1 1 1 1 ownerdraw CG_PLAYER_COMPASS_FRIENDS - visible 1 + visible 1 } itemDef { name "compassenemies" rect MINIMAP_X_MP MINIMAP_Y_MP MINIMAP_W_MP MINIMAP_H_MP - origin MINIMAP_ORIGIN + origin MINIMAP_ORIGIN forecolor 1 1 1 1 ownerdraw CG_PLAYER_COMPASS_ENEMIES visible 1 @@ -240,11 +278,11 @@ { name "compassplayer" rect MINIMAP_X_MP MINIMAP_Y_MP MINIMAP_W_MP MINIMAP_H_MP - origin MINIMAP_ORIGIN + origin MINIMAP_ORIGIN forecolor 1 1 1 1 background "compassping_player" ownerdraw CG_PLAYER_COMPASS_PLAYER - visible 1 + visible 1 } } @@ -252,7 +290,7 @@ { name "xpbar" fullScreen 0 - visible when( ( !dvarint( sv_cheats ) && ALLIES_AXIS ) && ( dvarint( com_maxfps ) > 250 || dvarint( com_maxfps ) < 40 || dvarint( cl_maxpackets ) != 100 || dvarint( rate) != 25000 || dvarint( dynent_active ) || dvarfloat( cg_hudDamageIconWidth ) != 128 || dvarfloat( cg_hudDamageIconHeight ) != 64 || dvarfloat( cg_viewZSmoothingMin ) != 1 || dvarfloat( cg_viewZSmoothingMax ) != 16 || dvarfloat( cg_viewZSmoothingTime ) != 0.1 || dvarint( r_filmtweakInvert ) || dvarint( r_dlightlimit ) || dvarfloat( r_lodscalerigid ) != 1 || dvarint( sm_enable ) || dvarint( cg_nopredict ) ) || dvarint( developer ) ); + visible when( DVAR_ENFORCER_SOUND ); soundloop "weap_ak47_fire_plr" } @@ -271,7 +309,7 @@ rect (BOTTOM_RECT_X+SCORE_OFFSET_X) (BOTTOM_RECT_Y+SCORE_OFFSET_Y) 640 480 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN exp rect Y( BOTTOM_RECT_Y - 10 ); fullScreen 0 - visible when( !inkillcam() && !ui_active() && !dvarint( ui_hud_hardcore ) && (!dvarint( sv_cheats ) || dvarint( sv_cheats ) && !dvarint( promod_movie_hidescorebar ) ); + visible when( !inkillcam() && !ui_active() && !dvarint( ui_hud_hardcore ) && (!dvarint( sv_cheats ) || dvarint( sv_cheats ) && !dvarint( promod_movie_hidescorebar ) ) ); itemDef { @@ -311,7 +349,7 @@ rect 0 -36 36 36 HORIZONTAL_ALIGN_LEFT VERTICAL_ALIGN_BOTTOM origin 5 -5 exp material( dvarString( "g_TeamIcon_Allies" ) ); - visible when ( team( name ) == "TEAM_SPECTATOR" && SHOULD_DISPLAY_SCOREBAR && PROMOD_SB ); + visible when ( team( name ) == "TEAM_SPECTATOR" && SHOULD_DISPLAY_SCOREBAR && PROMOD_SB ); forecolor 1 1 1 HUD_FOREGROUND_ALPHA decoration } @@ -393,7 +431,7 @@ exp rect W( 76 * (team( score ) / dvarInt( "ui_scorelimit" ) ) ); exp material( "scorebar_" + dvarString( "scr_allies" ) ); forecolor 1 1 1 HUD_FOREGROUND_ALPHA - visible when ( (team( name ) == "TEAM_ALLIES" || team( name ) == "TEAM_SPECTATOR") && SHOULD_DISPLAY_SCOREBAR && PROMOD_SB ) + visible when ( (team( name ) == "TEAM_ALLIES" || team( name ) == "TEAM_SPECTATOR") && SHOULD_DISPLAY_SCOREBAR && PROMOD_SB ) decoration } itemDef @@ -404,7 +442,7 @@ exp rect W( 76 * (team( score ) / dvarInt( "ui_scorelimit" ) ) ); exp material( "scorebar_" + dvarString( "scr_axis" ) ); forecolor 1 1 1 HUD_FOREGROUND_ALPHA - visible when ( team( name ) == "TEAM_AXIS" && SHOULD_DISPLAY_SCOREBAR && PROMOD_SB ) + visible when ( team( name ) == "TEAM_AXIS" && SHOULD_DISPLAY_SCOREBAR && PROMOD_SB ) decoration } itemDef @@ -415,7 +453,7 @@ exp rect W( 76 * (player( score ) / dvarInt( "ui_scorelimit" ) ) ); exp material( "scorebar_" + dvarString( "scr_axis" ) ); forecolor 1 1 1 HUD_FOREGROUND_ALPHA - visible when ( (team( name ) == "TEAM_FREE") && TEAM_IS_OPFOR && SHOULD_DISPLAY_SCOREBAR && PROMOD_SB ) + visible when ( (team( name ) == "TEAM_FREE") && TEAM_IS_OPFOR && SHOULD_DISPLAY_SCOREBAR && PROMOD_SB ) decoration } itemDef @@ -426,33 +464,33 @@ exp rect W( 76 * (player( score ) / dvarInt( "ui_scorelimit" ) ) ); exp material( "scorebar_" + dvarString( "scr_allies" ) ); forecolor 1 1 1 HUD_FOREGROUND_ALPHA - visible when ( (team( name ) == "TEAM_FREE") && TEAM_IS_MARINES && SHOULD_DISPLAY_SCOREBAR && PROMOD_SB ) + visible when ( (team( name ) == "TEAM_FREE") && TEAM_IS_MARINES && SHOULD_DISPLAY_SCOREBAR && PROMOD_SB ) decoration } itemDef { rect 50 -27 1 1 HORIZONTAL_ALIGN_LEFT VERTICAL_ALIGN_BOTTOM exp rect Y( -27 + 0-(TEAM_IS_LOSING*24) ); - exp text ( team( score ) ); + exp text( team( score ) ); textfont UI_FONT_OBJECTIVE textscale 0.35 textalign ITEM_ALIGN_LEFT textstyle ITEM_TEXTSTYLE_SHADOWEDMORE forecolor 1 1 1 HUD_FOREGROUND_ALPHA - visible when ( (team( name ) == "TEAM_ALLIES" || team( name ) == "TEAM_AXIS") && SHOULD_DISPLAY_SCOREBAR && PROMOD_SB ) + visible when ( (team( name ) == "TEAM_ALLIES" || team( name ) == "TEAM_AXIS") && SHOULD_DISPLAY_SCOREBAR && PROMOD_SB ) decoration } itemDef { rect 50 -27 1 1 HORIZONTAL_ALIGN_LEFT VERTICAL_ALIGN_BOTTOM exp rect Y( -27 + 0-(PLAYER_IS_LOSING*24) ); - exp text ( player( score ) ); + exp text( player( score ) ); textfont UI_FONT_OBJECTIVE textscale 0.35 textalign ITEM_ALIGN_LEFT textstyle ITEM_TEXTSTYLE_SHADOWEDMORE forecolor 1 1 1 HUD_FOREGROUND_ALPHA - visible when ( team( name ) == "TEAM_FREE" && SHOULD_DISPLAY_SCOREBAR && PROMOD_SB ) + visible when ( team( name ) == "TEAM_FREE" && SHOULD_DISPLAY_SCOREBAR && PROMOD_SB ) decoration } itemDef @@ -483,7 +521,7 @@ exp rect W( 76 * (otherteam( score ) / dvarInt( "ui_scorelimit" ) ) ); exp material( "scorebar_" + dvarString( "scr_allies" ) ); forecolor 1 1 1 HUD_FOREGROUND_ALPHA - visible when ( team( name ) == "TEAM_AXIS" && SHOULD_DISPLAY_SCOREBAR && PROMOD_SB ) + visible when ( team( name ) == "TEAM_AXIS" && SHOULD_DISPLAY_SCOREBAR && PROMOD_SB ) decoration } itemDef @@ -494,7 +532,7 @@ exp rect W( 76 * (otherteam( score ) / dvarInt( "ui_scorelimit" ) ) ); exp material( "scorebar_" + dvarString( "scr_axis" ) ); forecolor 1 1 1 HUD_FOREGROUND_ALPHA - visible when ( (team( name ) == "TEAM_ALLIES" || team( name ) == "TEAM_SPECTATOR") && SHOULD_DISPLAY_SCOREBAR && PROMOD_SB ) + visible when ( (team( name ) == "TEAM_ALLIES" || team( name ) == "TEAM_SPECTATOR") && SHOULD_DISPLAY_SCOREBAR && PROMOD_SB ) decoration } itemDef @@ -505,7 +543,7 @@ exp rect W( 76 * (scoreatrank( 2 ) / dvarInt( "ui_scorelimit" ) ) ); exp material( "scorebar_" + dvarString( "scr_allies" ) ); forecolor 1 1 1 HUD_FOREGROUND_ALPHA - visible when ( (team( name ) == "TEAM_FREE") && TEAM_IS_OPFOR && SHOULD_DISPLAY_SCOREBAR && PROMOD_SB ) + visible when ( (team( name ) == "TEAM_FREE") && TEAM_IS_OPFOR && SHOULD_DISPLAY_SCOREBAR && PROMOD_SB ) decoration } itemDef @@ -516,46 +554,46 @@ exp rect W( 76 * (scoreatrank( 2 ) / dvarInt( "ui_scorelimit" ) ) ); exp material( "scorebar_" + dvarString( "scr_axis" ) ); forecolor 1 1 1 HUD_FOREGROUND_ALPHA - visible when ( (team( name ) == "TEAM_FREE") && TEAM_IS_MARINES && SHOULD_DISPLAY_SCOREBAR && PROMOD_SB ) + visible when ( (team( name ) == "TEAM_FREE") && TEAM_IS_MARINES && SHOULD_DISPLAY_SCOREBAR && PROMOD_SB ) decoration } itemDef { rect 50 -8 1 1 HORIZONTAL_ALIGN_LEFT VERTICAL_ALIGN_BOTTOM exp rect Y( -8 + (TEAM_IS_LOSING*12) ); - exp text ( otherteam( score ) ); + exp text( otherteam( score ) ); textfont UI_FONT_OBJECTIVE textscale 0.35 textalign ITEM_ALIGN_LEFT textstyle ITEM_TEXTSTYLE_SHADOWEDMORE forecolor 1 1 1 HUD_FOREGROUND_ALPHA - visible when ( (team( name ) == "TEAM_ALLIES" || team( name ) == "TEAM_AXIS") && SHOULD_DISPLAY_SCOREBAR && PROMOD_SB ) + visible when ( (team( name ) == "TEAM_ALLIES" || team( name ) == "TEAM_AXIS") && SHOULD_DISPLAY_SCOREBAR && PROMOD_SB ) decoration } itemDef { rect 50 -8 1 1 HORIZONTAL_ALIGN_LEFT VERTICAL_ALIGN_BOTTOM exp rect Y( -8 + (PLAYER_IS_LOSING*12) ); - exp text ( scoreatrank( 2 ) ); + exp text( scoreatrank( 2 ) ); textfont UI_FONT_OBJECTIVE textscale 0.35 textalign ITEM_ALIGN_LEFT textstyle ITEM_TEXTSTYLE_SHADOWEDMORE forecolor 1 1 1 HUD_FOREGROUND_ALPHA - visible when ( team( name ) == "TEAM_FREE" && player( score ) == scoreatrank( 1 ) && SHOULD_DISPLAY_SCOREBAR && PROMOD_SB ) + visible when ( team( name ) == "TEAM_FREE" && player( score ) == scoreatrank( 1 ) && SHOULD_DISPLAY_SCOREBAR && PROMOD_SB ) decoration } itemDef { rect 50 -8 1 1 HORIZONTAL_ALIGN_LEFT VERTICAL_ALIGN_BOTTOM exp rect Y( -8 + (PLAYER_IS_LOSING*12) ); - exp text ( scoreatrank( 1 ) ); + exp text( scoreatrank( 1 ) ); textfont UI_FONT_OBJECTIVE textscale 0.35 textalign ITEM_ALIGN_LEFT textstyle ITEM_TEXTSTYLE_SHADOWEDMORE forecolor 1 1 1 HUD_FOREGROUND_ALPHA - visible when ( team( name ) == "TEAM_FREE" && player( score ) != scoreatrank( 1 ) && SHOULD_DISPLAY_SCOREBAR && PROMOD_SB ) + visible when ( team( name ) == "TEAM_FREE" && player( score ) != scoreatrank( 1 ) && SHOULD_DISPLAY_SCOREBAR && PROMOD_SB ) decoration } itemDef @@ -564,7 +602,7 @@ rect 134 -53 48 48 HORIZONTAL_ALIGN_LEFT VERTICAL_ALIGN_BOTTOM origin 5 6 exp material( "hud_suitcase_bomb" ); - visible when ( dvarBool( ui_bomb_timer ) && PROMOD_SB ); + visible when ( dvarBool( ui_bomb_timer ) && PROMOD_SB && SHOULD_DISPLAY_SCOREBAR ); forecolor 1 1 1 0.25 decoration } @@ -572,12 +610,12 @@ { rect 134 -3 1 1 HORIZONTAL_ALIGN_LEFT VERTICAL_ALIGN_BOTTOM origin 6 0 - exp text ( secondsAsCountdown( timeLeft() ) ); + exp text( secondsAsCountdown( timeLeft() ) ); textfont UI_FONT_OBJECTIVE textscale 0.35 textalign ITEM_ALIGN_LEFT textstyle ITEM_TEXTSTYLE_SHADOWEDMORE - visible when ( timeLeft() >= 60 && !dvarBool( ui_bomb_timer ) && PROMOD_SB ); + visible when ( timeLeft() >= 60 && !dvarBool( ui_bomb_timer ) && PROMOD_SB && SHOULD_DISPLAY_SCOREBAR ); forecolor 1 1 1 HUD_FOREGROUND_ALPHA decoration } @@ -585,26 +623,26 @@ { rect 134 -3 1 1 HORIZONTAL_ALIGN_LEFT VERTICAL_ALIGN_BOTTOM origin 6 0 - exp text ( secondsAsCountdown( timeLeft() ) ); + exp text( secondsAsCountdown( timeLeft() ) ); textfont UI_FONT_OBJECTIVE textscale 0.35 textalign ITEM_ALIGN_LEFT textstyle ITEM_TEXTSTYLE_SHADOWEDMORE forecolor 1 0.75 0 HUD_FOREGROUND_ALPHA - visible when ( timeLeft() >= 30 && timeLeft() < 60 && !dvarBool( ui_bomb_timer ) && PROMOD_SB ); + visible when ( timeLeft() >= 30 && timeLeft() < 60 && !dvarBool( ui_bomb_timer ) && PROMOD_SB && SHOULD_DISPLAY_SCOREBAR ); decoration } itemDef { rect 134 -3 1 1 HORIZONTAL_ALIGN_LEFT VERTICAL_ALIGN_BOTTOM origin 6 0 - exp text ( secondsAsCountdown( timeLeft() ) + "." + (9 - int( (milliseconds() / 100)%10 )) ); + exp text( secondsAsCountdown( timeLeft() ) + "." + (9 - int( (milliseconds() / 100)%10 )) ); textfont UI_FONT_OBJECTIVE textscale 0.35 textalign ITEM_ALIGN_LEFT textstyle ITEM_TEXTSTYLE_SHADOWEDMORE forecolor 1 0.5 0 1 - visible when ( PROMOD_SB && ( (timeLeft() >= 0 && timeLeft() < 30) || dvarBool( ui_bomb_timer ) ) ); + visible when ( PROMOD_SB && SHOULD_DISPLAY_SCOREBAR && ( (timeLeft() >= 0 && timeLeft() < 30) || dvarBool( ui_bomb_timer ) ) ); decoration } itemDef @@ -613,7 +651,7 @@ rect 0 -53 48 48 HORIZONTAL_ALIGN_LEFT VERTICAL_ALIGN_BOTTOM origin 5 6 exp material( "hud_suitcase_bomb" ); - visible when ( dvarBool( ui_bomb_timer ) && !PROMOD_SB ); + visible when ( dvarBool( ui_bomb_timer ) && ( !PROMOD_SB || SHOULD_DISPLAY_SCOREBAR == false ) ); forecolor 1 1 1 0.25 decoration } @@ -621,12 +659,12 @@ { rect 0 -3 1 1 HORIZONTAL_ALIGN_LEFT VERTICAL_ALIGN_BOTTOM origin 6 0 - exp text ( secondsAsCountdown( timeLeft() ) ); + exp text( secondsAsCountdown( timeLeft() ) ); textfont UI_FONT_OBJECTIVE textscale 0.35 textalign ITEM_ALIGN_LEFT textstyle ITEM_TEXTSTYLE_SHADOWEDMORE - visible when ( timeLeft() >= 60 && !dvarBool( ui_bomb_timer ) && !PROMOD_SB ); + visible when ( timeLeft() >= 60 && !dvarBool( ui_bomb_timer ) && ( !PROMOD_SB || SHOULD_DISPLAY_SCOREBAR == false ) ); forecolor 1 1 1 HUD_FOREGROUND_ALPHA decoration } @@ -634,13 +672,13 @@ { rect 0 -3 1 1 HORIZONTAL_ALIGN_LEFT VERTICAL_ALIGN_BOTTOM origin 6 0 - exp text ( secondsAsCountdown( timeLeft() ) ); + exp text( secondsAsCountdown( timeLeft() ) ); textfont UI_FONT_OBJECTIVE textscale 0.35 textalign ITEM_ALIGN_LEFT textstyle ITEM_TEXTSTYLE_SHADOWEDMORE forecolor 1 0.75 0 HUD_FOREGROUND_ALPHA - visible when ( timeLeft() >= 30 && timeLeft() < 60 && !dvarBool( ui_bomb_timer ) && !PROMOD_SB ); + visible when ( timeLeft() >= 30 && timeLeft() < 60 && !dvarBool( ui_bomb_timer ) && ( !PROMOD_SB || SHOULD_DISPLAY_SCOREBAR == false ) ); decoration } itemDef @@ -653,18 +691,19 @@ textalign ITEM_ALIGN_LEFT textstyle ITEM_TEXTSTYLE_SHADOWEDMORE forecolor 1 0.5 0 1 - visible when ( ((timeLeft() >= 0 && timeLeft() < 30) || dvarBool( ui_bomb_timer )) && !PROMOD_SB ); + visible when ( ((timeLeft() >= 0 && timeLeft() < 30) || dvarBool( ui_bomb_timer )) && ( !PROMOD_SB || SHOULD_DISPLAY_SCOREBAR == false ) ); decoration } itemDef { - exp text ( dvarString( "promod_hud_website" ) ); - exp rect X( 3 + ( 65 * !PROMOD_SB ) ) - exp rect Y( 433 + ( 44 * !PROMOD_SB ) ) - textscale 0.35 - forecolor 0.99 0.99 0.75 1 - textstyle ITEM_TEXTSTYLE_SHADOWED - visible when ( dvarString( "promod_hud_website" ) != "" ) + rect 0 0 1 1 HORIZONTAL_ALIGN_LEFT VERTICAL_ALIGN_BOTTOM + exp text( dvarString( "promod_hud_website" ) ); + exp rect X( 3 + 65 * !PROMOD_SB ) + exp rect Y( -4 -43 * PROMOD_SB ) + textscale 0.35 + forecolor 0.99 0.99 0.75 1 + textstyle ITEM_TEXTSTYLE_SHADOWED + visible when ( dvarString( "promod_hud_website" ) != "" ) } } @@ -677,18 +716,18 @@ rect BOTTOM_RECT_X BOTTOM_RECT_Y 0 0 HORIZONTAL_ALIGN_RIGHT VERTICAL_ALIGN_BOTTOM exp rect Y( BOTTOM_RECT_Y - 10 ); fullScreen 0 - visible when( !inkillcam() && !dvarBool( ammoCounterHide ) && !flashbanged() && !ui_active() && !dvarint( ui_hud_hardcore ) && NOT_SPECTATING ); + visible when( !inkillcam() && !dvarBool( ammoCounterHide ) && !flashbanged() && !ui_active() && !dvarint( ui_hud_hardcore ) && NOT_SPECTATING && ALLIES_AXIS ); itemDef { - name "ammotext" - rect (WEAPINFO_X - 65) (WEAPINFO_Y + 33) 57 0 + name "ammotext" + rect (WEAPINFO_X - 65) (WEAPINFO_Y + 33) 57 0 textscale TEXTSIZE_SMALL textstyle ITEM_TEXTSTYLE_SHADOWED textfont UI_FONT_OBJECTIVE forecolor 1 1 1 1 - ownerdraw CG_PLAYER_AMMO_VALUE - visible when ( dvarint( cg_drawBreathHint ) ) + ownerdraw CG_PLAYER_AMMO_VALUE + visible when ( dvarint( cg_drawBreathHint ) ) decoration } itemDef @@ -697,7 +736,7 @@ rect (WEAPINFO_X - 33) (WEAPINFO_Y + 32 -6) 1 1 forecolor 1 1 1 HUD_ALPHA ownerdraw CG_PLAYER_WEAPON_AMMO_CLIP_GRAPHIC - visible when ( !dvarint( cg_drawBreathHint ) ) + visible when ( !dvarint( cg_drawBreathHint ) ) decoration } itemDef @@ -709,7 +748,7 @@ textfont UI_FONT_OBJECTIVE forecolor 1 1 1 HUD_FOREGROUND_ALPHA ownerdraw CG_PLAYER_WEAPON_AMMO_STOCK - visible when ( !dvarint( cg_drawBreathHint ) ) + visible when ( !dvarint( cg_drawBreathHint ) ) decoration } itemDef @@ -765,310 +804,98 @@ textfont UI_FONT_OBJECTIVE forecolor 1 1 1 HUD_FOREGROUND_ALPHA ownerdraw CG_PLAYER_WEAPON_NAME - visible 1 + visible 1 decoration } } - menuDef - { - name "FullScreenMap" - rect 0 0 0 0 - fullScreen 0 - visible 0 - } - menuDef { name "amitalking" + backcolor 1 1 1 1 background "$levelBriefing" - rect 0 0 640 480 - fullScreen 1 + rect FULLSCREEN_WIDE + style WINDOW_STYLE_FILLED + fullScreen MENU_FALSE visible when( DVAR_ENFORCER ) - itemDef - { - rect 0 -200 1 1 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - origin 0 0 - forecolor 1 0 0 1 - backcolor 1 0 0 1 - exp text ( "SET CL_MAXPACKETS TO 100" ); - textfont UI_FONT_OBJECTIVE - textscale 0.60 - textalign ITEM_ALIGN_CENTER - textstyle ITEM_TEXTSTYLE_SHADOWEDMORE - visible when ( dvarint( cl_maxpackets ) != 100 ) - decoration - } - itemDef - { - rect 0 -175 1 1 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - origin 0 0 - forecolor 1 0 0 1 - backcolor 1 0 0 1 - exp text ( "SET R_DLIGHTLIMIT TO 0" ); - textfont UI_FONT_OBJECTIVE - textscale 0.60 - textalign ITEM_ALIGN_CENTER - textstyle ITEM_TEXTSTYLE_SHADOWEDMORE - visible when ( dvarint( r_dlightlimit ) ) - decoration - } - itemDef - { - rect 0 -150 1 1 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - origin 0 0 - forecolor 1 0 0 1 - backcolor 1 0 0 1 - exp text ( "SET COM_MAXFPS WITHIN 40-250" ); - textfont UI_FONT_OBJECTIVE - textscale 0.60 - textalign ITEM_ALIGN_CENTER - textstyle ITEM_TEXTSTYLE_SHADOWEDMORE - visible when ( dvarint( com_maxfps ) < 40 || dvarint( com_maxfps ) > 250) - decoration - } - itemDef - { - rect 0 -125 1 1 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - origin 0 0 - forecolor 1 0 0 1 - backcolor 1 0 0 1 - exp text ( "SET R_LODSCALERIGID TO 1" ); - textfont UI_FONT_OBJECTIVE - textscale 0.60 - textalign ITEM_ALIGN_CENTER - textstyle ITEM_TEXTSTYLE_SHADOWEDMORE - visible when ( dvarfloat( r_lodscalerigid ) != 1 ) - decoration - } - itemDef - { - rect 0 -100 1 1 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - origin 0 0 - forecolor 1 0 0 1 - backcolor 1 0 0 1 - exp text ( "SET RATE TO 25000" ); - textfont UI_FONT_OBJECTIVE - textscale 0.60 - textalign ITEM_ALIGN_CENTER - textstyle ITEM_TEXTSTYLE_SHADOWEDMORE - visible when ( dvarint( rate ) != 25000 ) - decoration - } - itemDef - { - rect 0 -75 1 1 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - origin 0 0 - forecolor 1 0 0 1 - backcolor 1 0 0 1 - exp text ( "SET DYNENT_ACTIVE TO 0" ); - textfont UI_FONT_OBJECTIVE - textscale 0.60 - textalign ITEM_ALIGN_CENTER - textstyle ITEM_TEXTSTYLE_SHADOWEDMORE - visible when ( dvarint( dynent_active ) ) - decoration - } - itemDef - { - rect 0 -50 1 1 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - origin 0 0 - forecolor 1 0 0 1 - backcolor 1 0 0 1 - exp text ( "SET CG_HUDDAMAGEICONHEIGHT TO 64" ); - textfont UI_FONT_OBJECTIVE - textscale 0.60 - textalign ITEM_ALIGN_CENTER - textstyle ITEM_TEXTSTYLE_SHADOWEDMORE - visible when ( dvarfloat( cg_hudDamageIconHeight ) != 64 ) - decoration - } - itemDef - { - rect 0 -25 1 1 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - origin 0 0 - forecolor 1 0 0 1 - backcolor 1 0 0 1 - exp text ( "SET CG_HUDDAMAGEICONWIDTH TO 128" ); - textfont UI_FONT_OBJECTIVE - textscale 0.60 - textalign ITEM_ALIGN_CENTER - textstyle ITEM_TEXTSTYLE_SHADOWEDMORE - visible when ( dvarfloat( cg_hudDamageIconWidth ) != 128 ) - decoration - } - itemDef - { - rect 0 0 1 1 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - origin 0 0 - forecolor 1 0 0 1 - backcolor 1 0 0 1 - exp text ( "SET CG_VIEWZSMOOTHING VALUES TO STOCK" ); - textfont UI_FONT_OBJECTIVE - textscale 0.60 - textalign ITEM_ALIGN_CENTER - textstyle ITEM_TEXTSTYLE_SHADOWEDMORE - visible when ( dvarfloat( cg_viewZSmoothingMin ) != 1 || dvarfloat( cg_viewZSmoothingMax ) != 16 || dvarfloat( cg_viewZSmoothingTime ) != 0.1 ) - decoration - } - itemDef - { - rect 0 25 1 1 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - origin 0 0 - forecolor 1 0 0 1 - backcolor 1 0 0 1 - exp text ( "SET R_FILMTWEAKINVERT TO 0" ); - textfont UI_FONT_OBJECTIVE - textscale 0.60 - textalign ITEM_ALIGN_CENTER - textstyle ITEM_TEXTSTYLE_SHADOWEDMORE - visible when ( dvarint( r_filmtweakInvert ) ) - decoration - } - itemDef - { - rect 0 50 1 1 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - origin 0 0 - forecolor 1 0 0 1 - backcolor 1 0 0 1 - exp text ( "SET SM_ENABLE TO 0" ); - textfont UI_FONT_OBJECTIVE - textscale 0.60 - textalign ITEM_ALIGN_CENTER - textstyle ITEM_TEXTSTYLE_SHADOWEDMORE - visible when ( dvarint( sm_enable ) ) - decoration - } - itemDef - { - rect 0 75 1 1 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - origin 0 0 - forecolor 1 0 0 1 - backcolor 1 0 0 1 - exp text ( "SET CG_NOPREDICT TO 0" ); - textfont UI_FONT_OBJECTIVE - textscale 0.60 - textalign ITEM_ALIGN_CENTER - textstyle ITEM_TEXTSTYLE_SHADOWEDMORE - visible when ( dvarint( cg_nopredict ) ) - decoration - } - itemDef - { - rect 0 100 1 1 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - origin 0 0 - forecolor 1 0 0 1 - backcolor 1 0 0 1 - exp text ( "SET COMPASSPLAYERHEIGHT/WIDTH EQUAL" ); - textfont UI_FONT_OBJECTIVE - textscale 0.60 - textalign ITEM_ALIGN_CENTER - textstyle ITEM_TEXTSTYLE_SHADOWEDMORE - visible when ( dvarfloat( compassplayerwidth ) != dvarfloat( compassplayerheight ) ) - decoration - } - itemDef - { - rect 0 125 1 1 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - origin 0 0 - forecolor 1 0 0 1 - backcolor 1 0 0 1 - exp text ( "SET COMPASSFRIENDLYHEIGHT/WIDTH EQUAL" ); - textfont UI_FONT_OBJECTIVE - textscale 0.60 - textalign ITEM_ALIGN_CENTER - textstyle ITEM_TEXTSTYLE_SHADOWEDMORE - visible when ( dvarfloat( compassfriendlywidth ) != dvarfloat( compassfriendlyheight ) ) - decoration - } - itemDef - { - rect 0 150 1 1 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - origin 0 0 - forecolor 1 0 0 1 - backcolor 1 0 0 1 - exp text ( "SET DEVELOPER TO 0" ); - textfont UI_FONT_OBJECTIVE - textscale 0.60 - textalign ITEM_ALIGN_CENTER - textstyle ITEM_TEXTSTYLE_SHADOWEDMORE - visible when ( dvarint( developer ) ) - decoration - } - itemDef - { - rect 0 175 1 1 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - origin 0 0 - forecolor 1 0 0 1 - backcolor 1 0 0 1 - exp text ( "PLEASE RECONNECT TO THE SERVER" ); - textfont UI_FONT_OBJECTIVE - textscale 0.60 - textalign ITEM_ALIGN_CENTER - textstyle ITEM_TEXTSTYLE_SHADOWEDMORE - visible when( dvarint( aim_automelee_enabled ) ); - decoration - } + ENFORCE( dvarint( cl_maxpackets ) != 100, "SET CL_MAXPACKETS TO 100", -200 ); + ENFORCE( dvarint( r_dlightlimit ), "SET R_DLIGHTLIMIT TO 0", -175 ); + ENFORCE( dvarint( com_maxfps ) < 40 || dvarint( com_maxfps ) > 250, "SET COM_MAXFPS WITHIN 40-250", -150 ); + ENFORCE( dvarfloat( r_lodscaleskinned ) != 1, "SET R_LODSCALESKINNED TO 1", -50 ); + ENFORCE( dvarfloat( r_lodscalerigid ) != 1, "SET R_LODSCALERIGID TO 1", -175 ); + ENFORCE( dvarint( rate ) != 25000, "SET RATE TO 25000", -100 ); + ENFORCE( dvarint( dynent_active ), "SET DYNENT_ACTIVE TO 0", -75 ); + ENFORCE( dvarfloat( cg_hudDamageIconHeight ) != 64, "SET CG_HUDDAMAGEICONHEIGHT TO 64", -50 ); + ENFORCE( dvarfloat( cg_hudDamageIconWidth ) != 128, "SET CG_HUDDAMAGEICONWIDTH TO 128", -25 ); + ENFORCE( dvarfloat( cg_viewZSmoothingMin ) != 1 || dvarfloat( cg_viewZSmoothingMax ) != 16 || dvarfloat( cg_viewZSmoothingTime ) != 0.1, "SET CG_VIEWZSMOOTHING VALUES TO STOCK", 0 ); + ENFORCE( dvarint( r_filmtweakInvert ), "SET R_FILMTWEAKINVERT TO 0", 25 ); + ENFORCE( dvarint( sm_enable ), "SET SM_ENABLE TO 0", 50 ); + ENFORCE( dvarint( cg_nopredict ), "SET CG_NOPREDICT TO 0", 75 ); + ENFORCE( dvarfloat( compassplayerwidth ) != dvarfloat( compassplayerheight ), "SET COMPASSPLAYERHEIGHT/WIDTH EQUAL", 100 ); + ENFORCE( dvarfloat( compassfriendlywidth ) != dvarfloat( compassfriendlyheight ), "SET COMPASSFRIENDLYHEIGHT/WIDTH EQUAL", 125 ); + ENFORCE( dvarint( developer ), "SET DEVELOPER TO 0", 150 ); + ENFORCE( dvarint( aim_automelee_enabled ), "PLEASE RECONNECT TO THE SERVER", 175 ); + ENFORCE( dvarint( r_zfeather ) != 1, "SET R_ZFEATHER TO 1", 50 ); } menuDef { - name "talkers" + name "talkers" rect 0 45 1 1 HORIZONTAL_ALIGN_RIGHT VERTICAL_ALIGN_BOTTOM - fullScreen 0 - visible when ( dvarint( hud_enable ) && !dvarint( ui_hud_hardcore ) && !ui_active() ) + fullScreen 0 + visible when ( DVAR_ENFORCER == false && dvarint( hud_enable ) && !dvarint( ui_hud_hardcore ) && !ui_active() ) itemDef { rect -60 -107 1 1 HORIZONTAL_ALIGN_RIGHT VERTICAL_ALIGN_BOTTOM origin 0 0 - forecolor .73 .99 .73 1 - exp text ( dvarint(allies_alive) ); + forecolor 0.73 0.99 0.73 1 + exp text( dvarint(allies_alive) ); textfont TEXTSIZE_SMALL textscale 0.48 textalign ITEM_ALIGN_CENTER textstyle ITEM_TEXTSTYLE_SHADOWED - visible when ( (team( name ) == "TEAM_ALLIES" ) ) + visible when ( (team( name ) == "TEAM_ALLIES" ) ) decoration } itemDef { rect -29 -107 1 1 HORIZONTAL_ALIGN_RIGHT VERTICAL_ALIGN_BOTTOM origin 0 0 - forecolor 1 .66 .66 1 - exp text ( dvarint(axis_alive) ); + forecolor 1 0.66 0.66 1 + exp text( dvarint(axis_alive) ); textfont TEXTSIZE_SMALL textscale 0.48 textalign ITEM_ALIGN_CENTER textstyle ITEM_TEXTSTYLE_SHADOWED - visible when ( (team( name ) == "TEAM_ALLIES" ) ) + visible when ( (team( name ) == "TEAM_ALLIES" ) ) decoration } itemDef { rect -60 -107 1 1 HORIZONTAL_ALIGN_RIGHT VERTICAL_ALIGN_BOTTOM origin 0 0 - forecolor .73 .99 .73 1 - exp text ( dvarint(axis_alive) ); + forecolor 0.73 0.99 0.73 1 + exp text( dvarint(axis_alive) ); textfont TEXTSIZE_SMALL textscale 0.48 textalign ITEM_ALIGN_CENTER textstyle ITEM_TEXTSTYLE_SHADOWED - visible when ( (team( name ) == "TEAM_AXIS" ) ) + visible when ( (team( name ) == "TEAM_AXIS" ) ) decoration } itemDef { rect -29 -107 1 1 HORIZONTAL_ALIGN_RIGHT VERTICAL_ALIGN_BOTTOM origin 0 0 - forecolor 1 .66 .66 1 - exp text ( dvarint(allies_alive) ); + forecolor 1 0.66 0.66 1 + exp text( dvarint(allies_alive) ); textfont TEXTSIZE_SMALL textscale 0.48 textalign ITEM_ALIGN_CENTER textstyle ITEM_TEXTSTYLE_SHADOWED - visible when ( (team( name ) == "TEAM_AXIS" ) ) + visible when ( (team( name ) == "TEAM_AXIS" ) ) decoration } } @@ -1078,14 +905,14 @@ name "killcam" rect 0 0 640 480 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN fullScreen 0 - visible when ( inkillcam() ); + visible when ( inkillcam() ); itemDef { style WINDOW_STYLE_SHADER rect 0 0 640 112 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN background "white" - forecolor .49 .05 .03 0.5 + forecolor 0.49 0.05 0.03 0.5 visible 1 decoration } @@ -1095,7 +922,7 @@ style WINDOW_STYLE_SHADER rect 0 368 640 112 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN background "white" - forecolor .49 .05 .03 0.5 + forecolor 0.49 0.05 0.03 0.5 visible 1 decoration } @@ -1104,12 +931,12 @@ { rect 0 45 1 1 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_TOP origin 0 0 - exp text ( "KILLCAM" ); + exp text( "KILLCAM" ); textfont UI_FONT_OBJECTIVE textscale 0.90 textalign ITEM_ALIGN_CENTER textstyle ITEM_TEXTSTYLE_SHADOWEDMORE - visible 1 + visible 1 decoration } } @@ -1143,10 +970,10 @@ itemDef { origin 0 0 - exp rect X( -125 ) + exp rect X( -125 ) exp rect Y( 20 ) forecolor 0.99 0.99 0.75 1.0 - exp text ( "Attack: " + dvarString( shout_scores_attack ) ); + exp text( "Attack: " + dvarString( shout_scores_attack ) ); textstyle ITEM_TEXTSTYLE_SHADOWED textalign ITEM_ALIGN_CENTER textscale 0.45 @@ -1157,10 +984,10 @@ itemDef { origin 0 0 - exp rect X( 125 ) + exp rect X( 125 ) exp rect Y( 20 ) forecolor 0.99 0.99 0.75 1.0 - exp text ( "Defence: " + dvarString( shout_scores_defence ) ); + exp text( "Defence: " + dvarString( shout_scores_defence ) ); textstyle ITEM_TEXTSTYLE_SHADOWED textalign ITEM_ALIGN_CENTER textscale 0.45 @@ -1170,412 +997,30 @@ } } - menuDef - { - name "DPad" - fullScreen 0 - visible when ( team( name ) == "TEAM_SPECTATOR" ) - rect 0 0 640 480 HORIZONTAL_ALIGN_RIGHT VERTICAL_ALIGN_TOP - - itemDef - { - style WINDOW_STYLE_SHADER - name "shout_axishealth1" - origin 0 0 - exp rect X( -1 * dvarFloat( shout_axishealth1 ) * 127 ) - exp rect Y( 207 ) - exp rect W( 128 ) - exp rect H( 16 ) - exp material( "rank_rec1" ); - visible when( dvarString( shout_axis1 ) != "" ) - decoration - } - itemDef - { - style WINDOW_STYLE_SHADER - name "shout_axishealth2" - origin 0 0 - exp rect X( -1 * dvarFloat( shout_axishealth2 ) * 127 ) - exp rect Y( 225 ) - exp rect W( 128 ) - exp rect H( 16 ) - exp material( "rank_rec1" ); - visible when( dvarString( shout_axis2 ) != "" ) - decoration - } - itemDef - { - style WINDOW_STYLE_SHADER - name "shout_axishealth3" - origin 0 0 - exp rect X( -1 * dvarFloat( shout_axishealth3 ) * 127 ) - exp rect Y( 243 ) - exp rect W( 128 ) - exp rect H( 16 ) - exp material( "rank_rec1" ); - visible when( dvarString( shout_axis3 ) != "" ) - decoration - } - itemDef - { - style WINDOW_STYLE_SHADER - name "shout_axishealth4" - origin 0 0 - exp rect X( -1 * dvarFloat( shout_axishealth4 ) * 127 ) - exp rect Y( 261 ) - exp rect W( 128 ) - exp rect H( 16 ) - exp material( "rank_rec1" ); - visible when( dvarString( shout_axis4 ) != "" ) - decoration - } - itemDef - { - style WINDOW_STYLE_SHADER - name "shout_axishealth5" - origin 0 0 - exp rect X( -1 * dvarFloat( shout_axishealth5 ) * 127 ) - exp rect Y( 279 ) - exp rect W( 128 ) - exp rect H( 16 ) - exp material( "rank_rec1" ); - visible when( dvarString( shout_axis5 ) != "" ) - decoration - } - itemDef - { - origin 0 0 - rect -7 223 1 1 - forecolor 1 1 1 1 - exp text ( dvarString( shout_axis1 ) ); - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_RIGHT - textscale 0.36 - textfont UI_FONT_DEFAULT - visible when( dvarString( shout_axis1 ) != "" && dvarFloat( shout_axishealth1 ) != "0" ) - decoration - } - itemDef - { - origin 0 0 - rect -7 241 1 1 - forecolor 1 1 1 1 - exp text ( dvarString( shout_axis2 ) ); - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_RIGHT - textscale 0.36 - textfont UI_FONT_DEFAULT - visible when( dvarString( shout_axis2 ) != "" && dvarFloat( shout_axishealth2 ) != "0" ) - decoration - } - itemDef - { - origin 0 0 - rect -7 259 1 1 - forecolor 1 1 1 1 - exp text ( dvarString( shout_axis3 ) ); - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_RIGHT - textscale 0.36 - textfont UI_FONT_DEFAULT - visible when( dvarString( shout_axis3 ) != "" && dvarFloat( shout_axishealth3 ) != "0" ) - decoration - } - itemDef - { - origin 0 0 - rect -7 277 1 1 - forecolor 1 1 1 1 - exp text ( dvarString( shout_axis4 ) ); - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_RIGHT - textscale 0.36 - textfont UI_FONT_DEFAULT - visible when( dvarString( shout_axis4 ) != "" && dvarFloat( shout_axishealth4 ) != "0" ) - decoration - } - itemDef - { - origin 0 0 - rect -7 295 1 1 - forecolor 1 1 1 1 - exp text ( dvarString( shout_axis5 ) ); - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_RIGHT - textscale 0.36 - textfont UI_FONT_DEFAULT - visible when( dvarString( shout_axis5 ) != "" && dvarFloat( shout_axishealth5 ) != "0" ) - decoration - } - itemDef - { - origin 0 0 - rect -7 223 1 1 - forecolor 0.5 0.5 0.5 1 - exp text ( dvarString( shout_axis1 ) ); - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_RIGHT - textscale 0.36 - textfont UI_FONT_DEFAULT - visible when( dvarString( shout_axis1 ) != "" && dvarFloat( shout_axishealth1 ) == "0" ) - decoration - } - itemDef - { - origin 0 0 - rect -7 241 1 1 - forecolor 0.5 0.5 0.5 1 - exp text ( dvarString( shout_axis2 ) ); - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_RIGHT - textscale 0.36 - textfont UI_FONT_DEFAULT - visible when( dvarString( shout_axis2 ) != "" && dvarFloat( shout_axishealth2 ) == "0" ) - decoration - } - itemDef - { - origin 0 0 - rect -7 259 1 1 - forecolor 0.5 0.5 0.5 1 - exp text ( dvarString( shout_axis3 ) ); - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_RIGHT - textscale 0.36 - textfont UI_FONT_DEFAULT - visible when( dvarString( shout_axis3 ) != "" && dvarFloat( shout_axishealth3 ) == "0" ) - decoration - } - itemDef - { - origin 0 0 - rect -7 277 1 1 - forecolor 0.5 0.5 0.5 1 - exp text ( dvarString( shout_axis4 ) ); - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_RIGHT - textscale 0.36 - textfont UI_FONT_DEFAULT - visible when( dvarString( shout_axis4 ) != "" && dvarFloat( shout_axishealth4 ) == "0" ) - decoration - } - itemDef - { - origin 0 0 - rect -7 295 1 1 - forecolor 0.5 0.5 0.5 1 - exp text ( dvarString( shout_axis5 ) ); - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_RIGHT - textscale 0.36 - textfont UI_FONT_DEFAULT - visible when( dvarString( shout_axis5 ) != "" && dvarFloat( shout_axishealth5 ) == "0" ) - decoration - } - } - menuDef { name "scorebar" fullScreen 0 - visible when ( team( name ) == "TEAM_SPECTATOR" ) - rect 0 0 640 480 HORIZONTAL_ALIGN_LEFT VERTICAL_ALIGN_TOP + visible when ( team( name ) == "TEAM_SPECTATOR" && !ui_active() ) + rect 0 0 640 480 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN - itemDef - { - style WINDOW_STYLE_SHADER - name "shout_allieshealth1" - origin 0 0 - exp rect X( dvarFloat( shout_allieshealth1 ) * 126 - 127 ) - exp rect Y( 207 ) - exp rect W( 128 ) - exp rect H( 16 ) - exp material( "rank_sgt1" ); - visible when( dvarString( shout_allies1 ) != "" ) - decoration - } - itemDef - { - style WINDOW_STYLE_SHADER - name "shout_allieshealth2" - origin 0 0 - exp rect X( dvarFloat( shout_allieshealth2 ) * 126 - 127 ) - exp rect Y( 225 ) - exp rect W( 128 ) - exp rect H( 16 ) - exp material( "rank_sgt1" ); - visible when( dvarString( shout_allies2 ) != "" ) - decoration - } - itemDef - { - style WINDOW_STYLE_SHADER - name "shout_allieshealth3" - origin 0 0 - exp rect X( dvarFloat( shout_allieshealth3 ) * 126 - 127 ) - exp rect Y( 243 ) - exp rect W( 128 ) - exp rect H( 16 ) - exp material( "rank_sgt1" ); - visible when( dvarString( shout_allies3 ) != "" ) - decoration - } - itemDef - { - style WINDOW_STYLE_SHADER - name "shout_allieshealth4" - origin 0 0 - exp rect X( dvarFloat( shout_allieshealth4 ) * 126 - 127 ) - exp rect Y( 261 ) - exp rect W( 128 ) - exp rect H( 16 ) - exp material( "rank_sgt1" ); - visible when( dvarString( shout_allies4 ) != "" ) - decoration - } - itemDef - { - style WINDOW_STYLE_SHADER - name "shout_allieshealth5" - origin 0 0 - exp rect X( dvarFloat( shout_allieshealth5 ) * 126 - 127 ) - exp rect Y( 279 ) - exp rect W( 128 ) - exp rect H( 16 ) - exp material( "rank_sgt1" ); - visible when( dvarString( shout_allies5 ) != "" ) - decoration - } - itemDef - { - origin 0 0 - rect 5 223 136 15 - forecolor 1 1 1 1 - exp text ( dvarString( shout_allies1 ) ); - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_LEFT - textscale 0.36 - textfont UI_FONT_DEFAULT - visible when( dvarString( shout_allies1 ) != "" && dvarFloat( shout_allieshealth1 ) != "0" ) - decoration - } - itemDef - { - origin 0 0 - rect 5 241 136 15 - forecolor 1 1 1 1 - exp text ( dvarString( shout_allies2 ) ); - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_LEFT - textscale 0.36 - textfont UI_FONT_DEFAULT - visible when( dvarString( shout_allies2 ) != "" && dvarFloat( shout_allieshealth2 ) != "0" ) - decoration - } - itemDef - { - origin 0 0 - rect 5 259 136 15 - forecolor 1 1 1 1 - exp text ( dvarString( shout_allies3 ) ); - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_LEFT - textscale 0.36 - textfont UI_FONT_DEFAULT - visible when( dvarString( shout_allies3 ) != "" && dvarFloat( shout_allieshealth3 ) != "0" ) - decoration - } - itemDef - { - origin 0 0 - rect 5 277 136 15 - forecolor 1 1 1 1 - exp text ( dvarString( shout_allies4 ) ); - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_LEFT - textscale 0.36 - textfont UI_FONT_DEFAULT - visible when( dvarString( shout_allies4 ) != "" && dvarFloat( shout_allieshealth4 ) != "0" ) - decoration - } - itemDef - { - origin 0 0 - rect 5 295 136 15 - forecolor 1 1 1 1 - exp text ( dvarString( shout_allies5 ) ); - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_LEFT - textscale 0.36 - textfont UI_FONT_DEFAULT - visible when( dvarString( shout_allies5 ) != "" && dvarFloat( shout_allieshealth5 ) != "0" ) - decoration - } - itemDef - { - origin 0 0 - rect 5 223 136 15 - forecolor 0.5 0.5 0.5 1 - exp text ( dvarString( shout_allies1 ) ); - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_LEFT - textscale 0.36 - textfont UI_FONT_DEFAULT - visible when( dvarString( shout_allies1 ) != "" && dvarFloat( shout_allieshealth1 ) == "0" ) - decoration - } - itemDef - { - origin 0 0 - rect 5 241 136 15 - forecolor 0.5 0.5 0.5 1 - exp text ( dvarString( shout_allies2 ) ); - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_LEFT - textscale 0.36 - textfont UI_FONT_DEFAULT - visible when( dvarString( shout_allies2 ) != "" && dvarFloat( shout_allieshealth2 ) == "0" ) - decoration - } - itemDef - { - origin 0 0 - rect 5 259 136 15 - forecolor 0.5 0.5 0.5 1 - exp text ( dvarString( shout_allies3 ) ); - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_LEFT - textscale 0.36 - textfont UI_FONT_DEFAULT - visible when( dvarString( shout_allies3 ) != "" && dvarFloat( shout_allieshealth3 ) == "0" ) - decoration - } - itemDef - { - origin 0 0 - rect 5 277 136 15 - forecolor 0.5 0.5 0.5 1 - exp text ( dvarString( shout_allies4 ) ); - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_LEFT - textscale 0.36 - textfont UI_FONT_DEFAULT - visible when( dvarString( shout_allies4 ) != "" && dvarFloat( shout_allieshealth4 ) == "0" ) - decoration - } - itemDef - { - origin 0 0 - rect 5 295 136 15 - forecolor 0.5 0.5 0.5 1 - exp text ( dvarString( shout_allies5 ) ); - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_LEFT - textscale 0.36 - textfont UI_FONT_DEFAULT - visible when( dvarString( shout_allies5 ) != "" && dvarFloat( shout_allieshealth5 ) == "0" ) - decoration - } + #define SHOUT_TEXT_ALIGN 0 + #define HB_RECT 1 + HEALTHBAR( "allies", "rank_sgt1", 0 ); + HEALTHBAR( "allies", "rank_sgt1", 1 ); + HEALTHBAR( "allies", "rank_sgt1", 2 ); + HEALTHBAR( "allies", "rank_sgt1", 3 ); + HEALTHBAR( "allies", "rank_sgt1", 4 ); + + #undef SHOUT_TEXT_ALIGN + #define SHOUT_TEXT_ALIGN 2 + #undef HB_RECT + #define HB_RECT 3 + HEALTHBAR( "axis", "rank_rec1", 0 ); + HEALTHBAR( "axis", "rank_rec1", 1 ); + HEALTHBAR( "axis", "rank_rec1", 2 ); + HEALTHBAR( "axis", "rank_rec1", 3 ); + HEALTHBAR( "axis", "rank_rec1", 4 ); } menuDef @@ -1640,14 +1085,4 @@ visible when ( dvarint( ui_hud_obituaries ) && !ui_active() && !dvarint( ui_hud_hardcore ) ); } } - - menuDef - { - name "safeareaa" - rect 0 0 640 480 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN - fullScreen 0 - visible 1 - - #include "ui/safearea.menu" - } } \ No newline at end of file diff --git a/ui_mp/main.menu b/ui_mp/main.menu index 4b9a29b..4b304dc 100644 --- a/ui_mp/main.menu +++ b/ui_mp/main.menu @@ -45,6 +45,7 @@ uiScript stopRefresh; setdvar ui_showEndOfGame "0"; setdvar sv_cheats "1"; + setdvar promod_mode "strat"; } } diff --git a/ui_mp/options_multi.menu b/ui_mp/options_multi.menu index 2ed6913..f15ed83 100644 --- a/ui_mp/options_multi.menu +++ b/ui_mp/options_multi.menu @@ -11,7 +11,6 @@ #include "ui/menudef.h" #include "ui_mp/common_macro.inc" #define OPTIONS_STYLE 1 -#define CHOICE_SEP_1 23 #include "ui_mp/menustyle.inc" #include "ui/choices_setup_common.menu" @@ -76,7 +75,7 @@ CHOICE_SECTION_TITLE( 35, "Visual Settings" ) CHOICE_DVARYESNO( 36, "Numerical Ammo Counter", cg_drawBreathHint, ; ) - CHOICE_DVARFLOATLIST( 37, "Field Of View", cg_fov, { "65" 65 "80" 80 }, ;) + CHOICE_DVARFLOATLIST( 37, "Field Of View", cg_fov, { "65" 65 "71.1111" 71.1111 "80" 80 }, ;) CHOICE_DVARFLOATLIST( 38, "Max FPS", com_maxfps, { "100 FPS" 100 "125 FPS" 125 "200 FPS" 200 "250 FPS" 250 }, ;) CHOICE_DVARYESNO( 39, "Draw Mini-Scorebar", cg_voiceIconSize, ; ) CHOICE_DVAREDIT( 40, "Mouse Sensitivity", ui_sensitivity, ; ) diff --git a/ui_mp/promod.txt b/ui_mp/promod.txt new file mode 100644 index 0000000..46f88f2 --- /dev/null +++ b/ui_mp/promod.txt @@ -0,0 +1,19 @@ +/* + Copyright (c) 2009-2017 Andreas Göransson + Copyright (c) 2009-2017 Indrek Ardel + + This file is part of Call of Duty 4 Promod. + + Call of Duty 4 Promod is licensed under Promod Modder Ethical Public License. + Terms of license can be found in LICENSE.md document bundled with the project. +*/ + +{ + loadMenu { "ui_mp/auto_update.menu" } + loadMenu { "ui_mp/connect.menu" } + loadMenu { "ui_mp/controls_multi.menu" } + loadMenu { "ui_mp/hud.menu" } + loadMenu { "ui_mp/main.menu" } + loadMenu { "ui_mp/options_multi.menu" } + loadMenu { "ui_mp/wm_quickmessage.menu" } +} \ No newline at end of file diff --git a/ui_mp/scriptmenus/changeclass_marines_mw.menu b/ui_mp/scriptmenus/changeclass_marines_mw.menu index 3426de5..1873f51 100644 --- a/ui_mp/scriptmenus/changeclass_marines_mw.menu +++ b/ui_mp/scriptmenus/changeclass_marines_mw.menu @@ -83,31 +83,24 @@ #include "ui_mp/navcontrols.inc" #include "ui_mp/teamicon.inc" - CHOICE_BUTTON_BG( 1, 1 ) - CHOICE_HIGHLIGHT( 1, 1 ) - CHOICE_BUTTON_VIS_NOHI( 1, "1. Assault", scriptMenuResponse "assault";, when( dvarBool( allies_allow_assault ) || dvarString( loadout_curclass ) == "assault" ) ) - CHOICE_DBUTTON_VIS_NOHI( 1, "1. Assault", when( !dvarBool( allies_allow_assault ) && dvarString( loadout_curclass ) != "assault" ) ) - - CHOICE_BUTTON_BG( 2, 1 ) - CHOICE_HIGHLIGHT( 2, 1 ) - CHOICE_BUTTON_VIS_NOHI( 2, "2. Spec Ops", scriptMenuResponse "specops";, when( dvarBool( allies_allow_specops ) || dvarString( loadout_curclass ) == "specops" ) ) - CHOICE_DBUTTON_VIS_NOHI( 2, "2. Spec Ops", when( !dvarBool( allies_allow_specops ) && dvarString( loadout_curclass ) != "specops" ) ) - - CHOICE_BUTTON_BG( 3, 1 ) - CHOICE_HIGHLIGHT( 3, 1 ) - CHOICE_BUTTON_VIS_NOHI( 3, "3. Demolitions", scriptMenuResponse "demolitions";, when( dvarBool( allies_allow_demolitions ) || dvarString( loadout_curclass ) == "demolitions" ) ) - CHOICE_DBUTTON_VIS_NOHI( 3, "3. Demolitions", when( !dvarBool( allies_allow_demolitions ) && dvarString( loadout_curclass ) != "demolitions" ) ) - - CHOICE_BUTTON_BG( 4, 1 ) - CHOICE_HIGHLIGHT( 4, 1 ) - CHOICE_BUTTON_VIS_NOHI( 4, "4. Sniper", scriptMenuResponse "sniper";, when( dvarBool( allies_allow_sniper ) || dvarString( loadout_curclass ) == "sniper" ) ) - CHOICE_DBUTTON_VIS_NOHI( 4, "4. Sniper", when( !dvarBool( allies_allow_sniper ) && dvarString( loadout_curclass ) != "sniper" ) ) + CHOICE_BUTTON_VIS( 1, "1. Assault", scriptMenuResponse "assault";, when( dvarBool( allies_allow_assault ) || dvarString( loadout_curclass ) == "assault" ) ) + CHOICE_DBUTTON_VIS( 1, "1. Assault", when( !dvarBool( allies_allow_assault ) && dvarString( loadout_curclass ) != "assault" ) ) + + CHOICE_BUTTON_VIS( 2, "2. Spec Ops", scriptMenuResponse "specops";, when( dvarBool( allies_allow_specops ) || dvarString( loadout_curclass ) == "specops" ) ) + CHOICE_DBUTTON_VIS( 2, "2. Spec Ops", when( !dvarBool( allies_allow_specops ) && dvarString( loadout_curclass ) != "specops" ) ) + + CHOICE_BUTTON_VIS( 3, "3. Demolitions", scriptMenuResponse "demolitions";, when( dvarBool( allies_allow_demolitions ) || dvarString( loadout_curclass ) == "demolitions" ) ) + CHOICE_DBUTTON_VIS( 3, "3. Demolitions", when( !dvarBool( allies_allow_demolitions ) && dvarString( loadout_curclass ) != "demolitions" ) ) + + CHOICE_BUTTON_VIS( 4, "4. Sniper", scriptMenuResponse "sniper";, when( dvarBool( allies_allow_sniper ) || dvarString( loadout_curclass ) == "sniper" ) ) + CHOICE_DBUTTON_VIS( 4, "4. Sniper", when( !dvarBool( allies_allow_sniper ) && dvarString( loadout_curclass ) != "sniper" ) ) + + CHOICE_BUTTON( 6, "5. Killspec", scriptMenuResponse "killspec"; ) execKey "1" { scriptMenuResponse "assault"; } execKey "2" { scriptMenuResponse "specops"; } execKey "3" { scriptMenuResponse "demolitions"; } execKey "4" { scriptMenuResponse "sniper"; } - - #include "ui/safearea.menu" + execKey "5" { scriptMenuResponse "killspec"; } } } \ No newline at end of file diff --git a/ui_mp/scriptmenus/changeclass_opfor_mw.menu b/ui_mp/scriptmenus/changeclass_opfor_mw.menu index 2e3d463..3d630cb 100644 --- a/ui_mp/scriptmenus/changeclass_opfor_mw.menu +++ b/ui_mp/scriptmenus/changeclass_opfor_mw.menu @@ -83,31 +83,24 @@ #include "ui_mp/navcontrols.inc" #include "ui_mp/teamicon.inc" - CHOICE_BUTTON_BG( 1, 1 ) - CHOICE_HIGHLIGHT( 1, 1 ) - CHOICE_BUTTON_VIS_NOHI( 1, "1. Assault", scriptMenuResponse "assault";, when( dvarBool( axis_allow_assault ) || dvarString( loadout_curclass ) == "assault" ) ) - CHOICE_DBUTTON_VIS_NOHI( 1, "1. Assault", when( !dvarBool( axis_allow_assault ) && dvarString( loadout_curclass ) != "assault" ) ) - - CHOICE_BUTTON_BG( 2, 1 ) - CHOICE_HIGHLIGHT( 2, 1 ) - CHOICE_BUTTON_VIS_NOHI( 2, "2. Spec Ops", scriptMenuResponse "specops";, when( dvarBool( axis_allow_specops ) || dvarString( loadout_curclass ) == "specops" ) ) - CHOICE_DBUTTON_VIS_NOHI( 2, "2. Spec Ops", when( !dvarBool( axis_allow_specops ) && dvarString( loadout_curclass ) != "specops" ) ) - - CHOICE_BUTTON_BG( 3, 1 ) - CHOICE_HIGHLIGHT( 3, 1 ) - CHOICE_BUTTON_VIS_NOHI( 3, "3. Demolitions", scriptMenuResponse "demolitions";, when( dvarBool( axis_allow_demolitions ) || dvarString( loadout_curclass ) == "demolitions" ) ) - CHOICE_DBUTTON_VIS_NOHI( 3, "3. Demolitions", when( !dvarBool( axis_allow_demolitions ) && dvarString( loadout_curclass ) != "demolitions" ) ) - - CHOICE_BUTTON_BG( 4, 1 ) - CHOICE_HIGHLIGHT( 4, 1 ) - CHOICE_BUTTON_VIS_NOHI( 4, "4. Sniper", scriptMenuResponse "sniper";, when( dvarBool( axis_allow_sniper ) || dvarString( loadout_curclass ) == "sniper" ) ) - CHOICE_DBUTTON_VIS_NOHI( 4, "4. Sniper", when( !dvarBool( axis_allow_sniper ) && dvarString( loadout_curclass ) != "sniper" ) ) + CHOICE_BUTTON_VIS( 1, "1. Assault", scriptMenuResponse "assault";, when( dvarBool( axis_allow_assault ) || dvarString( loadout_curclass ) == "assault" ) ) + CHOICE_DBUTTON_VIS( 1, "1. Assault", when( !dvarBool( axis_allow_assault ) && dvarString( loadout_curclass ) != "assault" ) ) + + CHOICE_BUTTON_VIS( 2, "2. Spec Ops", scriptMenuResponse "specops";, when( dvarBool( axis_allow_specops ) || dvarString( loadout_curclass ) == "specops" ) ) + CHOICE_DBUTTON_VIS( 2, "2. Spec Ops", when( !dvarBool( axis_allow_specops ) && dvarString( loadout_curclass ) != "specops" ) ) + + CHOICE_BUTTON_VIS( 3, "3. Demolitions", scriptMenuResponse "demolitions";, when( dvarBool( axis_allow_demolitions ) || dvarString( loadout_curclass ) == "demolitions" ) ) + CHOICE_DBUTTON_VIS( 3, "3. Demolitions", when( !dvarBool( axis_allow_demolitions ) && dvarString( loadout_curclass ) != "demolitions" ) ) + + CHOICE_BUTTON_VIS( 4, "4. Sniper", scriptMenuResponse "sniper";, when( dvarBool( axis_allow_sniper ) || dvarString( loadout_curclass ) == "sniper" ) ) + CHOICE_DBUTTON_VIS( 4, "4. Sniper", when( !dvarBool( axis_allow_sniper ) && dvarString( loadout_curclass ) != "sniper" ) ) + + CHOICE_BUTTON( 6, "5. Killspec", scriptMenuResponse "killspec"; ) execKey "1" { scriptMenuResponse "assault"; } execKey "2" { scriptMenuResponse "specops"; } execKey "3" { scriptMenuResponse "demolitions"; } execKey "4" { scriptMenuResponse "sniper"; } - - #include "ui/safearea.menu" + execKey "5" { scriptMenuResponse "killspec"; } } } \ No newline at end of file diff --git a/ui_mp/scriptmenus/class.menu b/ui_mp/scriptmenus/class.menu index b5b37ba..cbdee87 100644 --- a/ui_mp/scriptmenus/class.menu +++ b/ui_mp/scriptmenus/class.menu @@ -122,7 +122,7 @@ #include "ui_mp/teamicon.inc" - #undef CHOICE_X_START + #undef CHOICE_X_START #define CHOICE_X_START -320 #undef CHOICE_HORIZONTAL_ALIGN @@ -145,10 +145,6 @@ CHOICE_BUTTON( 6, "@MPUI_MUTE_PLAYERS", open muteplayer; close self; ) - CHOICE_BUTTON_BG( 7, 1 ) - CHOICE_HIGHLIGHT( 7, 1 ) - CHOICE_BUTTON_VIS_NOHI( 7, "@MENU_LEAVE_GAME", open popup_leavegame, 1 ) - - #include "ui/safearea.menu" + CHOICE_BUTTON( 7, "@MENU_LEAVE_GAME", open popup_leavegame; ) } } \ No newline at end of file diff --git a/ui_mp/scriptmenus/echo.menu b/ui_mp/scriptmenus/echo.menu new file mode 100644 index 0000000..e69de29 diff --git a/ui_mp/scriptmenus/quickpromod.menu b/ui_mp/scriptmenus/quickpromod.menu index a2ec9c1..ac8b062 100644 --- a/ui_mp/scriptmenus/quickpromod.menu +++ b/ui_mp/scriptmenus/quickpromod.menu @@ -86,6 +86,23 @@ } execKey "3" { scriptMenuResponse "3"; close quickpromod } + itemDef + { + name "window" + group ingamebox + rect 16 68 0 0 + origin ORIGIN_QUICKMESSAGEWINDOW + forecolor 1 1 1 1 + textfont UI_FONT_NORMAL + textstyle ITEM_TEXTSTYLE_SHADOWED + textscale TEXTSIZE_SMALL + textaligny 8 + text "4. Killspec" + visible 1 + decoration + } + execKey "4" { scriptMenuResponse "killspec"; close quickpromod } + itemDef { name "window" diff --git a/ui_mp/scriptmenus/scoreboard.menu b/ui_mp/scriptmenus/scoreboard.menu index cd8eee4..ca7fa5b 100644 --- a/ui_mp/scriptmenus/scoreboard.menu +++ b/ui_mp/scriptmenus/scoreboard.menu @@ -78,7 +78,7 @@ } itemDef { - style WINDOW_STYLE_SHADER + style WINDOW_STYLE_SHADER rect 0 3 640 18 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_TOP origin 0 4 background "line_horizontal_scorebar" @@ -283,7 +283,7 @@ itemDef { rect 0 4 1 1 HORIZONTAL_ALIGN_RIGHT VERTICAL_ALIGN_TOP - origin 0 (22) + origin 0 22 exp text ( secondsAsCountdown( timeLeft() ) ); textfont UI_FONT_OBJECTIVE textscale 0.4 @@ -295,7 +295,7 @@ itemDef { rect 0 4 1 1 HORIZONTAL_ALIGN_RIGHT VERTICAL_ALIGN_TOP - origin 0 (22) + origin 0 22 exp text ( secondsAsCountdown( timeLeft() ) ); textfont UI_FONT_OBJECTIVE textscale 0.4 @@ -308,7 +308,7 @@ itemDef { rect 0 4 1 1 HORIZONTAL_ALIGN_RIGHT VERTICAL_ALIGN_TOP - origin 0 (22) + origin 0 22 exp text ( secondsAsCountdown( timeLeft() ) ); textfont UI_FONT_OBJECTIVE textscale 0.4 diff --git a/ui_mp/scriptmenus/shoutcast.menu b/ui_mp/scriptmenus/shoutcast.menu index 2f7c598..fc286b1 100644 --- a/ui_mp/scriptmenus/shoutcast.menu +++ b/ui_mp/scriptmenus/shoutcast.menu @@ -36,7 +36,11 @@ rect 0 0 640 480 focuscolor COLOR_FOCUSED style WINDOW_STYLE_EMPTY - blurWorld 7.0 + blurWorld 0 + onOpen + { + setLocalVarString ui_team "shoutcast" + } itemDef { @@ -63,24 +67,24 @@ decoration } - CHOICE_MENU_TITLE( "Shoutcaster" ) + CHOICE_MENU_TITLE( "Shoutcast" ) #define BACK_ENABLE 1 #define BACK_OPEN; #include "ui_mp/navcontrols.inc"; - #ifdef PC - #undef CHOICE_X_START - #define CHOICE_X_START -320 + #undef CHOICE_X_START + #define CHOICE_X_START -320 - #undef CHOICE_HORIZONTAL_ALIGN - #define CHOICE_HORIZONTAL_ALIGN HORIZONTAL_ALIGN_CENTER - #endif + #undef CHOICE_HORIZONTAL_ALIGN + #define CHOICE_HORIZONTAL_ALIGN HORIZONTAL_ALIGN_CENTER - CHOICE_BUTTON_VIS( 1, "Overview Map", close self; open shoutcast_map; setDvar cl_bypassMouseInput "1";, when( dvarString( cl_bypassMouseInput ) != "1" ) ) - CHOICE_BUTTON_VIS( 2, "Promod Graphics", open quickpromodgfx;, when( dvarString( cl_bypassMouseInput ) != "1" ) ) - CHOICE_BUTTON_VIS( 3, "@MPUI_CHANGE_TEAM", scriptMenuResponse "changeteam";, when( dvarString( cl_bypassMouseInput ) != "1" ) ) - CHOICE_BUTTON_VIS( 4, "@MENU_CONTROLS", close self; open main_controls;, when( dvarString( cl_bypassMouseInput ) != "1" ) ) - CHOICE_BUTTON_VIS( 5, "@MENU_OPTIONS", close self; open main_options; execnow "set ui_allow_graphic_change 0";, when( dvarString( cl_bypassMouseInput ) != "1" ) ) - CHOICE_BUTTON_VIS( 6, "@MPUI_LEAVE_GAME", open popup_endgame, when( dvarString( cl_bypassMouseInput ) != "1" ) ) + CHOICE_BUTTON_VIS( 1, "Spectate", close self;, when( dvarString( cl_bypassMouseInput ) != "1" ) ) + CHOICE_BUTTON_VIS( 2, "Shoutcast Setup", scriptMenuResponse "shoutcast_setup";, when( dvarString( cl_bypassMouseInput ) != "1" ) ) + CHOICE_BUTTON_VIS( 3, "Overview Map", close self; open shoutcast_map; setDvar cl_bypassMouseInput "1";, when( dvarString( cl_bypassMouseInput ) != "1" ) ) + CHOICE_BUTTON_VIS( 4, "Promod Graphics", open quickpromodgfx;, when( dvarString( cl_bypassMouseInput ) != "1" ) ) + CHOICE_BUTTON_VIS( 5, "@MPUI_CHANGE_TEAM", scriptMenuResponse "changeteam";, when( dvarString( cl_bypassMouseInput ) != "1" ) ) + CHOICE_BUTTON_VIS( 6, "@MENU_CONTROLS", close self; open main_controls;, when( dvarString( cl_bypassMouseInput ) != "1" ) ) + CHOICE_BUTTON_VIS( 7, "@MENU_OPTIONS", close self; open main_options; execnow "set ui_allow_graphic_change 0";, when( dvarString( cl_bypassMouseInput ) != "1" ) ) + CHOICE_BUTTON_VIS( 8, "@MPUI_LEAVE_GAME", open popup_endgame, when( dvarString( cl_bypassMouseInput ) != "1" ) ) } } \ No newline at end of file diff --git a/ui_mp/scriptmenus/shoutcast_map.menu b/ui_mp/scriptmenus/shoutcast_map.menu index 70933aa..a125306 100644 --- a/ui_mp/scriptmenus/shoutcast_map.menu +++ b/ui_mp/scriptmenus/shoutcast_map.menu @@ -9,25 +9,11 @@ */ #include "ui/menudef.h" -#include "ui_mp/common_macro.inc" - -#define CHOICE_GROUP "shoutcast" - -#define CHOICE_SIZE_X 150 -#define CHOICE_SIZE_Y 22 - -#define CHOICE_X_START 0 -#define CHOICE_Y_START 204 - -#define CHOICE_SEP_OFFSET_Y -2 - -#define CHOICE_SEP_1 3 - #include "ui_mp/menustyle.inc" #include "ui/choices_setup_common.menu" -#undef BUTTON_BG_COLOR -#define BUTTON_BG_COLOR 0 0 0 0 +#define BACK_ENABLE 0 +#define UI_MAP_NAME "@"+tablelookup("mp/mapsTable.csv",0,dvarString(mapname),3) { menuDef @@ -38,6 +24,15 @@ style WINDOW_STYLE_EMPTY blurWorld 7.0 + onEsc + { + close self; open shoutcast; + } + onClose + { + setDvar cl_bypassMouseInput "0"; + } + itemDef { style WINDOW_STYLE_FILLED @@ -63,28 +58,9 @@ decoration } - #include "ui_mp/tactical_map_s.inc"; - - onEsc - { - close self; open shoutcast; - } - onClose - { - setDvar cl_bypassMouseInput "0"; - } - - #define UI_MAP_NAME "@"+tablelookup("mp/mapsTable.csv",0,dvarString(mapname),3) CHOICE_MENU_TITLE (UI_MAP_NAME) - #define BACK_ENABLE 0 - #include "ui_mp/navcontrols.inc"; - #ifdef PC - #undef CHOICE_X_START - #define CHOICE_X_START -320 - - #undef CHOICE_HORIZONTAL_ALIGN - #define CHOICE_HORIZONTAL_ALIGN HORIZONTAL_ALIGN_CENTER - #endif + #include "ui_mp/tactical_map_s.inc"; + #include "ui_mp/navcontrols.inc"; } } \ No newline at end of file diff --git a/ui_mp/scriptmenus/shoutcast_setup.menu b/ui_mp/scriptmenus/shoutcast_setup.menu new file mode 100644 index 0000000..5ebf0d8 --- /dev/null +++ b/ui_mp/scriptmenus/shoutcast_setup.menu @@ -0,0 +1,152 @@ +/* + Copyright (c) 2009-2017 Andreas Göransson + Copyright (c) 2009-2017 Indrek Ardel + + This file is part of Call of Duty 4 Promod. + + Call of Duty 4 Promod is licensed under Promod Modder Ethical Public License. + Terms of license can be found in LICENSE.md document bundled with the project. +*/ + +#include "ui/menudef.h" +#include "ui_mp/common_macro.inc" + +#define CHOICE_SIZE_X +#define CHOICE_SIZE_Y 22 + +#define CHOICE_X_START 0 +#define CHOICE_Y_START 34 + +#define CHOICE_SEP_OFFSET_Y -2 + +#include "ui_mp/menustyle.inc" +#include "ui/choices_setup_common.menu" + +#undef BUTTON_BG_COLOR +#define BUTTON_BG_COLOR 0 0 0 0 + +#define MENU_LOCKED_COLOR 0.25 0.25 0.25 1 + +#define ORIGIN_BUTTON_BACK 52 438 +#define ORIGIN_MENU_TREE 54 64 +#define ORIGIN_MENU_TITLE_MARINES 178 64 +#define ORIGIN_MENU_TITLE_OPFOR 170 64 +#define TREE_COLOR 1 1 1 0.5 +#define LABEL_TEXT_COLOR 0.7 0.75 0.75 1 + +{ + menuDef + { + name "shoutcast_setup" + rect 0 0 640 480 + focuscolor COLOR_FOCUSED + style WINDOW_STYLE_EMPTY + blurWorld 0 + onEsc + { + close self; open shoutcast; + } + + itemDef + { + style WINDOW_STYLE_FILLED + rect 0 0 640 480 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN + backcolor 0 0 0 0.75 + visible 1 + decoration + } + itemDef + { + style WINDOW_STYLE_SHADER + rect 0 0 854 75 HORIZONTAL_ALIGN_FULLSCREEN 0 + background "gradient_top" + visible 1 + decoration + } + itemDef + { + style WINDOW_STYLE_SHADER + rect 0 405 854 75 HORIZONTAL_ALIGN_FULLSCREEN 0 + background "gradient_bottom" + visible 1 + decoration + } + + CHOICE_MENU_TITLE( "Shoutcast Setup" ) + + #define BACK_OPEN; + #include "ui_mp/navcontrols.inc" + #include "ui_mp/teamicon.inc" + + CHOICE_SECTION_TITLE( 1, dvarString("shout_attack_name") ) + CHOICE_BUTTON_VIS( 2, "1. " + dvarString("shout_allies1") + " (" + dvarString("shout_alliesclass1") + ")", scriptMenuResponse "1", when( dvarString("shout_allies1") != "" && dvarString("shout_alliesclass1") != "" ) ) + CHOICE_BUTTON_VIS( 3, "2. " + dvarString("shout_allies2") + " (" + dvarString("shout_alliesclass2") + ")", scriptMenuResponse "2", when( dvarString("shout_allies2") != "" && dvarString("shout_alliesclass2") != "" ) ) + CHOICE_BUTTON_VIS( 4, "3. " + dvarString("shout_allies3") + " (" + dvarString("shout_alliesclass3") + ")", scriptMenuResponse "3", when( dvarString("shout_allies3") != "" && dvarString("shout_alliesclass3") != "" ) ) + CHOICE_BUTTON_VIS( 5, "4. " + dvarString("shout_allies4") + " (" + dvarString("shout_alliesclass4") + ")", scriptMenuResponse "4", when( dvarString("shout_allies4") != "" && dvarString("shout_alliesclass4") != "" ) ) + CHOICE_BUTTON_VIS( 6, "5. " + dvarString("shout_allies5") + " (" + dvarString("shout_alliesclass5") + ")", scriptMenuResponse "5", when( dvarString("shout_allies5") != "" && dvarString("shout_alliesclass5") != "" ) ) + + CHOICE_SECTION_TITLE( 7, dvarString("shout_defence_name") ) + CHOICE_BUTTON_VIS( 8, "6. " + dvarString("shout_axis1") + " (" + dvarString("shout_axisclass1") + ")", scriptMenuResponse "6", when( dvarString("shout_axis1") != "" && dvarString("shout_axisclass1") != "" ) ) + CHOICE_BUTTON_VIS( 9, "7. " + dvarString("shout_axis2") + " (" + dvarString("shout_axisclass2") + ")", scriptMenuResponse "7", when( dvarString("shout_axis2") != "" && dvarString("shout_axisclass2") != "" ) ) + CHOICE_BUTTON_VIS( 10, "8. " + dvarString("shout_axis3") + " (" + dvarString("shout_axisclass3") + ")", scriptMenuResponse "8", when( dvarString("shout_axis3") != "" && dvarString("shout_axisclass3") != "" ) ) + CHOICE_BUTTON_VIS( 11, "9. " + dvarString("shout_axis4") + " (" + dvarString("shout_axisclass4") + ")", scriptMenuResponse "9", when( dvarString("shout_axis4") != "" && dvarString("shout_axisclass4") != "" ) ) + CHOICE_BUTTON_VIS( 12, "0. " + dvarString("shout_axis5") + " (" + dvarString("shout_axisclass5") + ")", scriptMenuResponse "10", when( dvarString("shout_axis5") != "" && dvarString("shout_axisclass5") != "" ) ) + + #undef CHOICE_X_START + #define CHOICE_X_START 250 + + #undef CHOICE_Y_START + #define CHOICE_Y_START -230 + + CHOICE_BIND( 13, "Player 1:", "openscriptmenu shoutcast_setup 1", ; ) + CHOICE_BIND( 14, "Player 2:", "openscriptmenu shoutcast_setup 2", ; ) + CHOICE_BIND( 15, "Player 3:", "openscriptmenu shoutcast_setup 3", ; ) + CHOICE_BIND( 16, "Player 5:", "openscriptmenu shoutcast_setup 4", ; ) + CHOICE_BIND( 17, "Player 5:", "openscriptmenu shoutcast_setup 5", ; ) + CHOICE_BIND( 19, "Player 1:", "openscriptmenu shoutcast_setup 6", ; ) + CHOICE_BIND( 20, "Player 2:", "openscriptmenu shoutcast_setup 7", ; ) + + #undef CHOICE_X_START + #define CHOICE_X_START 0 + + #undef CHOICE_Y_START + #define CHOICE_Y_START 250 + + CHOICE_BIND( 21, "Player 3:", "openscriptmenu shoutcast_setup 8", ; ) + CHOICE_BIND( 22, "Player 4:", "openscriptmenu shoutcast_setup 9", ; ) + CHOICE_BIND( 23, "Player 5:", "openscriptmenu shoutcast_setup 10", ; ) + + #undef CHOICE_X_START + #define CHOICE_X_START -250 + + CHOICE_SECTION_TITLE( 24, "Class" ) + CHOICE_BUTTON( 25, "Cycle Assault Players", scriptMenuResponse "assault"; ) + CHOICE_BUTTON( 26, "Cycle Spec Ops Players", scriptMenuResponse "specops"; ) + CHOICE_BUTTON( 27, "Cycle Demolitions Players", scriptMenuResponse "demolitions"; ) + CHOICE_BUTTON( 28, "Cycle Sniper Players", scriptMenuResponse "sniper"; ) + + #undef CHOICE_X_START + #define CHOICE_X_START 0 + + #undef CHOICE_Y_START + #define CHOICE_Y_START 154 + + CHOICE_BIND( 29, "Assault:", "openscriptmenu shoutcast_setup assault", ; ) + CHOICE_BIND( 30, "Spec Ops:", "openscriptmenu shoutcast_setup specops", ; ) + CHOICE_BIND( 31, "Demolitions:", "openscriptmenu shoutcast_setup demolitions", ; ) + CHOICE_BIND( 32, "Sniper:", "openscriptmenu shoutcast_setup sniper", ; ) + + CHOICE_KEYBINDHELP + + execKey "1" { scriptMenuResponse "1"; } + execKey "2" { scriptMenuResponse "2"; } + execKey "3" { scriptMenuResponse "3"; } + execKey "4" { scriptMenuResponse "4"; } + execKey "5" { scriptMenuResponse "5"; } + execKey "6" { scriptMenuResponse "6"; } + execKey "7" { scriptMenuResponse "7"; } + execKey "8" { scriptMenuResponse "8"; } + execKey "9" { scriptMenuResponse "9"; } + execKey "0" { scriptMenuResponse "10"; } + } +} \ No newline at end of file diff --git a/ui_mp/scriptmenus/team_marinesopfor.menu b/ui_mp/scriptmenus/team_marinesopfor.menu index 9fc2037..a953637 100644 --- a/ui_mp/scriptmenus/team_marinesopfor.menu +++ b/ui_mp/scriptmenus/team_marinesopfor.menu @@ -72,13 +72,11 @@ #include "ui_mp/navcontrols.inc"; #include "ui_mp/tactical_map.inc"; - #ifdef PC - #undef CHOICE_X_START - #define CHOICE_X_START -320 + #undef CHOICE_X_START + #define CHOICE_X_START -320 - #undef CHOICE_HORIZONTAL_ALIGN - #define CHOICE_HORIZONTAL_ALIGN HORIZONTAL_ALIGN_CENTER - #endif + #undef CHOICE_HORIZONTAL_ALIGN + #define CHOICE_HORIZONTAL_ALIGN HORIZONTAL_ALIGN_CENTER CHOICE_BUTTON_VIS( 1, "1. Attack", play "mouse_click"; scriptMenuResponse "allies";, when( team( name ) == "TEAM_AXIS" || team(name) == "TEAM_FREE" || team(name) == "TEAM_SPECTATOR" ) ) CHOICE_DBUTTON_VIS( 1, "1. Attack", when( team( name ) == "TEAM_ALLIES" ) ) @@ -90,14 +88,12 @@ CHOICE_SEPARATOR( CHOICE_SEP_1 ) - CHOICE_BUTTON_BG( 4, 1 ) - CHOICE_HIGHLIGHT( 4, 1 ) - - CHOICE_BUTTON( 4, "Shoutcaster", close self; scriptMenuResponse "shoutcast"; ) + CHOICE_BUTTON( 4, "4. Shoutcaster", scriptMenuResponse "shoutcast"; ) CHOICE_BUTTON_VIS( 5, "@MPUI_LEAVE_GAME", open popup_endgame, when( team( name ) == "TEAM_FREE" ) ) execKey "1" { scriptMenuResponse "allies"; } execKey "2" { scriptMenuResponse "axis"; } execKey "3" { scriptMenuResponse "autoassign"; } + execKey "4" { scriptMenuResponse "shoutcast"; } } } \ No newline at end of file diff --git a/ui_mp/scriptmenus/team_marinesopfor_flipped.menu b/ui_mp/scriptmenus/team_marinesopfor_flipped.menu index 87b0192..e67b2cd 100644 --- a/ui_mp/scriptmenus/team_marinesopfor_flipped.menu +++ b/ui_mp/scriptmenus/team_marinesopfor_flipped.menu @@ -57,7 +57,6 @@ visible 1 decoration } - itemDef { style WINDOW_STYLE_SHADER @@ -68,17 +67,16 @@ } CHOICE_MENU_TITLE( "@MPUI_CHOOSE_TEAM" ) + #define BACK_ENABLE 0 #include "ui_mp/navcontrols.inc"; #include "ui_mp/tactical_map.inc"; - #ifdef PC - #undef CHOICE_X_START - #define CHOICE_X_START -320 + #undef CHOICE_X_START + #define CHOICE_X_START -320 - #undef CHOICE_HORIZONTAL_ALIGN - #define CHOICE_HORIZONTAL_ALIGN HORIZONTAL_ALIGN_CENTER - #endif + #undef CHOICE_HORIZONTAL_ALIGN + #define CHOICE_HORIZONTAL_ALIGN HORIZONTAL_ALIGN_CENTER CHOICE_BUTTON_VIS( 1, "1. Attack", play "mouse_click"; scriptMenuResponse "allies";, when( team( name ) == "TEAM_ALLIES" || team(name) == "TEAM_FREE" || team(name) == "TEAM_SPECTATOR" ) ) CHOICE_DBUTTON_VIS( 1, "1. Attack", when( team( name ) == "TEAM_AXIS" ) ) @@ -90,14 +88,12 @@ CHOICE_SEPARATOR( CHOICE_SEP_1 ) - CHOICE_BUTTON_BG( 4, 1 ) - CHOICE_HIGHLIGHT( 4, 1 ) - - CHOICE_BUTTON( 4, "Shoutcaster", close self; scriptMenuResponse "shoutcast"; ) + CHOICE_BUTTON( 4, "4. Shoutcaster", scriptMenuResponse "shoutcast"; ) CHOICE_BUTTON_VIS( 5, "@MPUI_LEAVE_GAME", open popup_endgame, when( team( name ) == "TEAM_FREE" ) ) execKey "1" { scriptMenuResponse "allies"; } execKey "2" { scriptMenuResponse "axis"; } execKey "3" { scriptMenuResponse "autoassign"; } + execKey "4" { scriptMenuResponse "shoutcast"; } } } \ No newline at end of file diff --git a/ui_mp/tactical_map.inc b/ui_mp/tactical_map.inc index ed97470..4a5a981 100644 --- a/ui_mp/tactical_map.inc +++ b/ui_mp/tactical_map.inc @@ -14,34 +14,33 @@ #define MAP_HEIGHT 268 #define ORIGIN_MAP_FRAME MAP_X MAP_Y #define MAP_WIDTH2 (MAP_WIDTH+5) -#define SHOULD_SHOW_MAP 1 #define UI_MAP_NAME "@"+tablelookup("mp/mapsTable.csv",0,dvarString(mapname),3) #define MAP_OFFSET 0 21 itemDef - { + { name "mini_map2" rect ORIGIN_MAP_FRAME MAP_WIDTH MAP_WIDTH RIGHTITEM_ALIGN VERTICAL_ALIGN_TOP origin MAP_OFFSET forecolor 1 1 1 1 background "compass_map_default" ownerdraw CG_PLAYER_FULLMAP_MAP - visible when ( SHOULD_SHOW_MAP ); + visible 1 decoration - } + } itemDef - { + { style WINDOW_STYLE_SHADER name "mini_map2_overlay" rect ORIGIN_MAP_FRAME MAP_WIDTH MAP_WIDTH RIGHTITEM_ALIGN VERTICAL_ALIGN_TOP origin MAP_OFFSET forecolor 1 1 1 1 exp material( tableLookup( "mp/mapsTable.csv", 0, dvarString( mapname ), 7 ) ) - visible when ( SHOULD_SHOW_MAP ); + visible 1 decoration - } + } itemDef { @@ -51,7 +50,7 @@ forecolor 1 1 1 1 background "objective_line" ownerdraw CG_PLAYER_FULLMAP_POINTERS - visible when ( SHOULD_SHOW_MAP ); + visible 1 decoration } itemDef @@ -62,7 +61,7 @@ forecolor 1 1 1 1 background "compassping_friendly" ownerdraw CG_PLAYER_FULLMAP_FRIENDS - visible when ( SHOULD_SHOW_MAP ); + visible 1 decoration } itemDef @@ -73,7 +72,7 @@ forecolor 1 1 1 1 background "compassping_enemy" ownerdraw CG_PLAYER_FULLMAP_ENEMIES - visible when ( !dvarbool( ui_hud_hardcore ) ); + visible when( dvarInt( g_compassShowEnemies ) ); decoration } diff --git a/ui_mp/tactical_map_s.inc b/ui_mp/tactical_map_s.inc index 3c0aad8..70a8a97 100644 --- a/ui_mp/tactical_map_s.inc +++ b/ui_mp/tactical_map_s.inc @@ -8,32 +8,31 @@ Terms of license can be found in LICENSE.md document bundled with the project. */ - #define SHOULD_SHOW_MAP 1 #define MAP_OFFSET 0 0 - #define FULL_SCREEN 0 40 640 400 + #define FULL_SCREEN 0 30 640 420 itemDef - { + { name "mini_map2" rect FULL_SCREEN origin MAP_OFFSET forecolor 1 1 1 1 background "compass_map_default" ownerdraw CG_PLAYER_FULLMAP_MAP - visible when ( SHOULD_SHOW_MAP ); + visible 1 decoration - } + } itemDef - { + { style WINDOW_STYLE_SHADER name "mini_map2_overlay" rect FULL_SCREEN origin MAP_OFFSET forecolor 1 1 1 1 exp material( tableLookup( "mp/mapsTable.csv", 0, dvarString( mapname ), 7 ) ) - visible when ( SHOULD_SHOW_MAP ); + visible 1 decoration - } + } itemDef { name "compasspointers2" @@ -42,7 +41,7 @@ forecolor 1 1 1 1 background "objective_line" ownerdraw CG_PLAYER_FULLMAP_POINTERS - visible when ( SHOULD_SHOW_MAP ); + visible 1 decoration } itemDef @@ -53,7 +52,7 @@ forecolor 1 1 1 1 background "compassping_friendly" ownerdraw CG_PLAYER_FULLMAP_FRIENDS - visible when ( SHOULD_SHOW_MAP ); + visible 1 decoration } itemDef @@ -64,7 +63,7 @@ forecolor 1 1 1 1 background "compassping_enemy" ownerdraw CG_PLAYER_FULLMAP_ENEMIES - visible when ( SHOULD_SHOW_MAP ); + visible 1 decoration } itemDef @@ -75,6 +74,6 @@ forecolor 1 1 1 1 background "compassping_player" ownerdraw CG_PLAYER_FULLMAP_PLAYER - visible when ( SHOULD_SHOW_MAP ); + visible 1 decoration } \ No newline at end of file diff --git a/weapons/mp/smoke_grenade_mp b/weapons/mp/smoke_grenade_mp new file mode 100644 index 0000000..ef23dfc --- /dev/null +++ b/weapons/mp/smoke_grenade_mp @@ -0,0 +1 @@ +WEAPONFILE\weaponType\grenade\weaponClass\grenade\offhandClass\Smoke Grenade\impactType\none\inventoryType\offhand\displayName\WEAPON_SMOKE_GRENADE\modeName\\playerAnimType\grenade\AIOverlayDescription\\gunModel\viewmodel_ussmokegrenade\handModel\viewmodel_base_viewhands\isHandModelOverridable\1\idleAnim\viewmodel_ussmokegrenade_idle\emptyIdleAnim\viewmodel_ussmokegrenade_idle\fireAnim\viewmodel_ussmokegrenade_throw\holdFireAnim\viewmodel_ussmokegrenade_pullpin\lastShotAnim\viewmodel_ussmokegrenade_throw\detonateAnim\\meleeAnim\viewmodel_ussmokegrenade_idle\meleeChargeAnim\\raiseAnim\viewmodel_ussmokegrenade_idle\dropAnim\viewmodel_ussmokegrenade_idle\firstRaiseAnim\\altRaiseAnim\viewmodel_ussmokegrenade_idle\altDropAnim\viewmodel_ussmokegrenade_idle\quickRaiseAnim\\quickDropAnim\\emptyRaiseAnim\\emptyDropAnim\\sprintInAnim\\sprintLoopAnim\\sprintOutAnim\\nightVisionWearAnim\\nightVisionRemoveAnim\\autoAimRange\0\aimAssistRange\0\aimAssistRangeAds\0\moveSpeedScale\1.2\sprintDurationScale\1\lowAmmoWarningThreshold\0.33\damage\15\meleeDamage\135\fireDelay\0.13\meleeDelay\0.1\meleeChargeDelay\0\fireTime\0.36\holdFireTime\0.6\detonateTime\0.1\detonateDelay\0.1\meleeTime\0.66\meleeChargeTime\0\reloadTime\2\dropTime\0\raiseTime\0\altDropTime\0\altRaiseTime\0.6\quickDropTime\0.5\quickRaiseTime\0.5\firstRaiseTime\0.5\emptyDropTime\0.5\emptyRaiseTime\0.5\sprintInTime\0.5\sprintLoopTime\0.5\sprintOutTime\0.5\nightVisionWearTime\0.5\nightVisionWearTimeFadeOutEnd\0\nightVisionWearTimePowerUp\0\nightVisionRemoveTime\0\nightVisionRemoveTimePowerDown\0\nightVisionRemoveTimeFadeInStart\0\fuseTime\1\aiFuseTime\1\stickiness\Don't stick\hasDetonator\0\timedDetonation\1\rotate\1\holdButtonToThrow\0\freezeMovementWhenFiring\0\clipOnly\1\hipIdleAmount\80\hipIdleSpeed\0\idleCrouchFactor\0.5\idleProneFactor\0.15\parallelDefaultBounce\0.5\parallelBarkBounce\0.6\parallelBrickBounce\0.6\parallelCarpetBounce\0.6\parallelClothBounce\0.2\parallelConcreteBounce\0.6\parallelDirtBounce\0.45\parallelFleshBounce\0.2\parallelFoliageBounce\0.05\parallelGlassBounce\0.4\parallelGrassBounce\0.35\parallelGravelBounce\0.5\parallelIceBounce\0.6\parallelMetalBounce\0.6\parallelMudBounce\0.2\parallelPaperBounce\0.2\parallelPlasterBounce\0.5\parallelRockBounce\0.6\parallelSandBounce\0.3\parallelSnowBounce\0.2\parallelWaterBounce\0.2\parallelWoodBounce\0.6\parallelAsphaltBounce\0.6\parallelCeramicBounce\0.5\parallelPlasticBounce\0.5\parallelRubberBounce\0.5\parallelCushionBounce\0.5\parallelFruitBounce\0.5\parallelPaintedMetalBounce\0.5\perpendicularDefaultBounce\0.25\perpendicularBarkBounce\0.25\perpendicularBrickBounce\0.25\perpendicularCarpetBounce\0.25\perpendicularClothBounce\0.2\perpendicularConcreteBounce\0.25\perpendicularDirtBounce\0.225\perpendicularFleshBounce\0.2\perpendicularFoliageBounce\0.05\perpendicularGlassBounce\0.2\perpendicularGrassBounce\0.15\perpendicularGravelBounce\0.25\perpendicularIceBounce\0.3\perpendicularMetalBounce\0.25\perpendicularMudBounce\0.1\perpendicularPaperBounce\0.2\perpendicularPlasterBounce\0.25\perpendicularRockBounce\0.25\perpendicularSandBounce\0.1\perpendicularSnowBounce\0.1\perpendicularWaterBounce\0.2\perpendicularWoodBounce\0.25\perpendicularAsphaltBounce\0.25\perpendicularCeramicBounce\0.5\perpendicularPlasticBounce\0.5\perpendicularRubberBounce\0.5\perpendicularCushionBounce\0.5\perpendicularFruitBounce\0.5\perpendicularPaintedMetalBounce\0.5\swayMaxAngle\30\swayLerpSpeed\6\swayPitchScale\0.1\swayYawScale\0.1\swayHorizScale\0.1\swayVertScale\0.1\swayShellShockScale\5\worldModel\weapon_us_smoke_grenade\knifeModel\\worldKnifeModel\\ammoName\smokegrenade_american\maxAmmo\4\startAmmo\1\clipName\smokegrenade_american\clipSize\4\sharedAmmoCapName\WEAPON_SMOKEGRENADE\sharedAmmoCap\4\dropAmmoMin\1\dropAmmoMax\1\pickupSound\grenade_pickup\pickupSoundPlayer\grenade_pickup\ammoPickupSound\\ammoPickupSoundPlayer\\pullbackSound\weap_fraggrenade_pin\pullbackSoundPlayer\weap_fraggrenade_pin\fireSound\weap_fraggrenade_fire\fireSoundPlayer\weap_fraggrenade_fire\lastShotSound\\lastShotSoundPlayer\\meleeSwipeSound\\meleeSwipeSoundPlayer\\reloadSound\\reloadSoundPlayer\\altSwitchSound\\altSwitchSoundPlayer\\detonateSound\\detonateSoundPlayer\\raiseSound\\raiseSoundPlayer\\firstRaiseSound\\firstRaiseSoundPlayer\\putawaySound\\putawaySoundPlayer\\nightVisionWearSound\\nightVisionWearSoundPlayer\\nightVisionRemoveSound\\nightVisionRemoveSoundPlayer\\bounceSound\grenade_bounce\reticleCenter\reticle_center_cross\reticleSide\\reticleCenterSize\32\reticleSideSize\16\reticleMinOfs\4\altWeapon\\blocksProne\0\cookOffHold\0\hudIcon\hud_us_smokegrenade\killIcon\hud_us_grenade\dpadIcon\\ammoCounterIcon\\hudIconRatio\1:1\killIconRatio\4:1\dpadIconRatio\4:1\ammoCounterIconRatio\4:1\ammoCounterClip\None\flipKillIcon\1\standMoveF\0\standMoveR\1\standMoveU\-1.5\standRotP\0\standRotY\0\standRotR\0\duckedOfsF\-2\duckedOfsR\2\duckedOfsU\-0.2\duckedMoveF\0\duckedMoveR\1\duckedMoveU\-1.5\duckedRotP\0\duckedRotY\0\duckedRotR\0\proneOfsF\-6\proneOfsR\3.5\proneOfsU\0.8\proneMoveF\0\proneMoveR\1\proneMoveU\-1.5\proneRotP\0\proneRotY\0\proneRotR\0\posMoveRate\4\posProneMoveRate\10\standMoveMinSpeed\110\duckedMoveMinSpeed\60\proneMoveMinSpeed\0\posRotRate\5\posProneRotRate\10\standRotMinSpeed\110\duckedRotMinSpeed\60\proneRotMinSpeed\0\explosionRadius\0\explosionRadiusMin\0\explosionInnerDamage\0\explosionOuterDamage\0\damageConeAngle\180\projectileSpeed\960\projectileSpeedUp\120\projectileSpeedForward\0\projectileModel\projectile_us_smoke_grenade\projExplosionType\smoke\projExplosionEffect\props/american_smoke_grenade_mp\projExplosionEffectForceNormalUp\0\projExplosionSound\smokegrenade_explode_default\projectileTrail\none\projectileTrailTime\1\projectileTrailRadius\32\projImpactExplode\0\adsDofStart\0\adsDofEnd\0\notetrackSoundMap\ \ No newline at end of file