PK , scripts/Kerb/PK ,l<l<scripts/Kerb/kScriptOptions.cs// Options Dialog for Kerb's T2 Scripts // // (c) 2002 David Gausebeck // gausebec@paypal.com //***************************************************************************** // MAIN OPTIONS DIALOG //***************************************************************************** new GuiControl(kScriptOptions) { profile = "GuiDefaultProfile"; horizSizing = "center"; vertSizing = "center"; position = "0 0"; extent = "400 259"; visible = "1"; pane = "General"; //--- save button ---------------------------------------------------------- new ShellBitmapButton() { profile = "ShellButtonProfile"; position = "0 210"; extent = "82 38"; visible = "1"; command = "kScriptSavePrefs();"; text = "SAVE"; }; //--- tab buttons ---------------------------------------------------------- new ShellTabButton(KSO_GeneralTab) { profile = "ShellTabProfile"; position = "0 15"; extent = "108 38"; visible = "1"; command = "kScriptOptions.setPane(General);"; text = "GENERAL"; }; new ShellTabButton(KSO_ZoomTab) { profile = "ShellTabProfile"; position = "0 45"; extent = "108 38"; visible = "1"; command = "kScriptOptions.setPane(Zoom);"; text = "ZOOM"; }; new ShellTabButton(KSO_ControlsTab) { profile = "ShellTabProfile"; position = "0 75"; extent = "108 38"; visible = "1"; command = "kScriptOptions.setPane(Controls);"; text = "CONTROLS"; }; //--- tab frame ------------------------------------------------------------ new ShellTabFrame() { profile = "ShellTabFrameProfile"; position = "108 0"; extent = "282 259"; visible = "1"; isVertical = "1"; }; //--- general pane --------------------------------------------------------- new ShellFieldCtrl(KSO_GeneralPane) { profile = "ShellFieldProfile"; position = "119 11"; extent = "271 237"; visible = "0"; // range reticles new ShellToggleButton() { profile = "ShellRadioProfile"; position = "5 5"; extent = "220 20"; visible = "1"; variable = "$kPref::rangeReticles"; text = "MORTAR / GRENADE RANGE RETICLES"; }; new GuiMLTextCtrl(KSO_rangeReticlesHelp) { profile = "ShellAltTextProfile"; position = "232 9"; extent = "30 15"; visible = "1"; }; // joystick vehicle control new ShellToggleButton() { profile = "ShellRadioProfile"; position = "5 30"; extent = "220 20"; visible = "1"; variable = "$kPref::vehicleJoy"; text = "JOYSTICK VEHICLE CONTROL"; }; new GuiMLTextCtrl(KSO_vehicleJoyHelp) { profile = "ShellAltTextProfile"; position = "232 34"; extent = "30 15"; visible = "1"; }; // max range grenades new ShellToggleButton() { profile = "ShellRadioProfile"; position = "5 55"; extent = "220 20"; visible = "1"; variable = "$kPref::maxThrow"; text = "THROW GRENADES AT MAX RANGE"; }; new GuiMLTextCtrl(KSO_maxThrowHelp) { profile = "ShellAltTextProfile"; position = "232 59"; extent = "30 15"; visible = "1"; }; // jumpjet new ShellToggleButton() { profile = "ShellRadioProfile"; position = "5 80"; extent = "220 20"; visible = "1"; variable = "$kPref::jumpJet"; text = "AUTO-JUMP BEFORE JET PACK"; }; new GuiMLTextCtrl(KSO_jumpJetHelp) { profile = "ShellAltTextProfile"; position = "232 84"; extent = "30 15"; visible = "1"; }; // pilot bomb sight new ShellToggleButton() { profile = "ShellRadioProfile"; position = "5 105"; extent = "220 20"; visible = "1"; variable = "$kPref::pilotBombSight"; text = "BOMBER PILOT SEES BOMB TARGET"; }; new GuiMLTextCtrl(KSO_pilotBombSightHelp) { profile = "ShellAltTextProfile"; position = "232 109"; extent = "30 15"; visible = "1"; }; // deployable indicator new ShellToggleButton() { profile = "ShellRadioProfile"; position = "5 130"; extent = "220 20"; visible = "1"; variable = "$kPref::deployableIndicator"; text = "ALWAYS-ON DEPLOYABLE INDICATOR"; }; new GuiMLTextCtrl(KSO_deployableIndicatorHelp) { profile = "ShellAltTextProfile"; position = "232 134"; extent = "30 15"; visible = "1"; }; // auto missile new ShellToggleButton() { profile = "ShellRadioProfile"; position = "5 155"; extent = "220 20"; visible = "1"; variable = "$kPref::autoMissile"; text = "AUTO-FIRE MISSILE ON LOCK"; }; new GuiMLTextCtrl(KSO_autoMissileHelp) { profile = "ShellAltTextProfile"; position = "232 159"; extent = "30 15"; visible = "1"; }; // auto flare homing new ShellToggleButton() { profile = "ShellRadioProfile"; position = "5 180"; extent = "220 20"; visible = "1"; variable = "$kPref::autoFlareHoming"; text = "AUTO-FLARE ON INCOMING MISSILE"; }; new GuiMLTextCtrl(KSO_autoFlareHomingHelp) { profile = "ShellAltTextProfile"; position = "232 184"; extent = "30 15"; visible = "1"; }; // auto flare locked new ShellToggleButton() { profile = "ShellRadioProfile"; position = "5 205"; extent = "220 20"; visible = "1"; variable = "$kPref::autoFlareLock"; text = "AUTO-FLARE ON LOCK DETECTED"; }; new GuiMLTextCtrl(KSO_autoFlareLockHelp) { profile = "ShellAltTextProfile"; position = "232 209"; extent = "30 15"; visible = "1"; }; }; //--- zoom pane ------------------------------------------------------------ new ShellFieldCtrl(KSO_ZoomPane) { profile = "ShellFieldProfile"; position = "119 11"; extent = "271 237"; visible = "0"; // zoom toggle new ShellToggleButton() { profile = "ShellRadioProfile"; position = "5 5"; extent = "220 20"; visible = "1"; variable = "$kPref::zoomToggle"; text = "ZOOM ACTS AS TOGGLE"; }; new GuiMLTextCtrl(KSO_zoomToggleHelp) { profile = "ShellAltTextProfile"; position = "232 9"; extent = "30 15"; visible = "1"; }; // mousewheel zoom new ShellToggleButton() { profile = "ShellRadioProfile"; position = "5 30"; extent = "220 20"; visible = "1"; variable = "$kPref::wheelZoom"; text = "MOUSEWHEEL ZOOM CONTROL"; }; new GuiMLTextCtrl(KSO_wheelZoomHelp) { profile = "ShellAltTextProfile"; position = "232 34"; extent = "30 15"; visible = "1"; }; // mousewheel zoom sensitivity slider new GuiTextCtrl() { profile = "GuiDefaultProfile"; position = "70 60"; extent = "50 20"; visible = "1"; text = "Sensitivity"; }; new ShellSliderCtrl(KSO_wheelZoomSens) { profile = "ShellSliderProfile"; position = "120 55"; extent = "80 20"; visible = "1"; variable = "value"; altCommand = "KSO_wheelZoomSensText.setValue($kPref::wheelZoomSens = mFloatLength(KSO_wheelZoomSens.value,1));"; range = "1.1 4.0"; ticks = "9999"; usePlusMinus = "0"; }; new GuiTextCtrl(KSO_wheelZoomSensText) { profile = "GuiDefaultProfile"; position = "202 60"; extent = "30 20"; visible = "1"; }; // default zoom new ShellToggleButton() { profile = "ShellRadioProfile"; position = "5 80"; extent = "220 20"; visible = "1"; variable = "$kPref::useDefaultZoomFOV"; text = "ALWAYS START AT DEFAULT ZOOM"; }; new GuiMLTextCtrl(KSO_defaultZoomHelp) { profile = "ShellAltTextProfile"; position = "232 84"; extent = "30 15"; visible = "1"; }; // default zoom fov slider new GuiTextCtrl() { profile = "GuiDefaultProfile"; position = "30 110"; extent = "90 20"; visible = "1"; text = "Default Zoom FOV"; }; new ShellSliderCtrl(KSO_defZoomFOV) { profile = "ShellSliderProfile"; position = "120 105"; extent = "80 20"; visible = "1"; variable = "value"; altCommand = "KSO_defZoomFOVText.setValue($kPref::defaultZoomFOV = mFloatLength(KSO_defZoomFOV.value,0));"; range = "5 50"; ticks = "9999"; usePlusMinus = "0"; }; new GuiTextCtrl(KSO_defZoomFOVText) { profile = "GuiDefaultProfile"; position = "202 110"; extent = "30 20"; visible = "1"; }; // unzoomed fov slider new GuiMLTextCtrl(KSO_unzoomedFOVLabel) { profile = "ShellAltTextProfile"; position = "15 159"; extent = "120 20"; visible = "1"; }; new ShellSliderCtrl(KSO_unzoomedFOV) { profile = "ShellSliderProfile"; position = "120 155"; extent = "80 20"; visible = "1"; variable = "value"; command = "if(!$ZoomON) setFOV($pref::player::defaultFOV);"; altCommand = "KSO_unzoomedFOVText.setValue($pref::player::defaultFOV = mFloatLength(KSO_unzoomedFOV.value,0));"; range = "70 120"; ticks = "9999"; usePlusMinus = "0"; }; new GuiTextCtrl(KSO_unzoomedFOVText) { profile = "GuiDefaultProfile"; position = "202 160"; extent = "30 20"; visible = "1"; }; new GuiMLTextCtrl(KSO_unzoomedFOVHelp) { profile = "ShellAltTextProfile"; position = "232 159"; extent = "30 15"; visible = "1"; }; }; //--- controls pane -------------------------------------------------------- new ShellFieldCtrl(KSO_ControlsPane) { profile = "ShellFieldProfile"; position = "119 11"; extent = "271 237"; visible = "0"; // title new GuiMLTextCtrl(KSO_vehicleControlsLabel) { profile = "ShellAltTextProfile"; position = "10 7"; extent = "200 20"; visible = "1"; }; new GuiMLTextCtrl(KSO_vehicleControlsHelp) { profile = "ShellAltTextProfile"; position = "232 7"; extent = "30 15"; visible = "1"; }; // control list new ShellScrollCtrl() { profile = "NewScrollCtrlProfile"; position = "0 27"; extent = "271 210"; visible = "1"; hScrollBar = "alwaysOff"; vScrollBar = "alwaysOn"; childMargin = "0 2"; new GuiScrollContentCtrl() { profile = "GuiDefaultProfile"; position = "0 0"; visible = "1"; new ShellTextList(KSO_vehicleControls) { profile = "ShellTextArrayProfile"; position = "0 0"; visible = "1"; altCommand = "KSO_vehicleControls.doRemap();"; columns = "2 150"; }; }; }; }; }; //----------------------------------------------------------------------------- KSO_unzoomedFOVLabel.setText("UNZOOMED FOV"); KSO_vehicleControlsLabel.setText("VEHICLE CONTROL OVERRIDES"); KSO_rangeReticlesHelp.setText("Help"); function KSO_rangeReticlesHelp::onURL(%this, %url) { MessageBoxOK("HELP", "Displays full-screen reticles with range markings whenever you use a " @ "Mortar or Grenade Launcher. The reticles automatically re-scale " @ "whenever you change resolution or zoom level."); } KSO_vehicleJoyHelp.setText("Help"); function KSO_vehicleJoyHelp::onURL(%this, %url) { MessageBoxOK("HELP", "Enables joystick vehicle control. When you enter a vehicle, your " @ "joystick is rebound to control it flight-sim style, and your mouse " @ "is set to FreeLook (only works when not turning)."); } KSO_maxThrowHelp.setText("Help"); function KSO_maxThrowHelp::onURL(%this, %url) { MessageBoxOK("HELP", "Alters your \"Throw Grenade\" key so that grenades are always thrown " @ "at maximum range."); } KSO_jumpJetHelp.setText("Help"); function KSO_jumpJetHelp::onURL(%this, %url) { MessageBoxOK("HELP", "Alters your \"Jet Pack\" key so that it always jumps right as you " @ "start to jet (except when piloting a vehicle)."); } KSO_pilotBombSightHelp.setText("Help"); function KSO_pilotBombSightHelp::onURL(%this, %url) { MessageBoxOK("HELP", "Displays the red \"bombs will land here\" target when you are a Bomber " @ "pilot."); } KSO_deployableIndicatorHelp.setText("Help"); function KSO_deployableIndicatorHelp::onURL(%this, %url) { MessageBoxOK("HELP", "Displays the red/green \"can deploy here\" indicator whenever you're " @ "carrying a deployable pack, instead of only when you're holding down " @ "the \"Use Pack\" key."); } KSO_autoMissileHelp.setText("Help"); function KSO_autoMissileHelp::onURL(%this, %url) { MessageBoxOK("HELP", "Automatically fires missiles whenever you're using a missile launcher " @ "and acquire a target lock."); } KSO_autoFlareHomingHelp.setText("Help"); function KSO_autoFlareHomingHelp::onURL(%this, %url) { MessageBoxOK("HELP", "Automatically throws a flare grenade (if available) whenever a missile " @ "is in flight seeking you."); } KSO_autoFlareLockHelp.setText("Help"); function KSO_autoFlareLockHelp::onURL(%this, %url) { MessageBoxOK("HELP", "Automatically throws a flare grenade (if available) whenever an enemy " @ "acquires a missile lock on you."); } KSO_zoomToggleHelp.setText("Help"); function KSO_zoomToggleHelp::onURL(%this, %url) { MessageBoxOK("HELP", "Alters your \"Zoom\" key so that it zooms when you press it and then " @ "doesn't unzoom until you press it again. The default behavior is to " @ "unzoom when you release the key."); } KSO_wheelZoomHelp.setText("Help"); function KSO_wheelZoomHelp::onURL(%this, %url) { MessageBoxOK("HELP", "Sets your mousewheel to control zoom level whenever you are zoomed in. " @ "Your normal mousewheel function is restored when you zoom out."); } KSO_defaultZoomHelp.setText("Help"); function KSO_defaultZoomHelp::onURL(%this, %url) { MessageBoxOK("HELP", "Always sets you to a particular zoom level when you zoom in. The " @ "default behavior is to return to whatever zoom level you were last " @ "using."); } KSO_unzoomedFOVHelp.setText("Help"); function KSO_unzoomedFOVHelp::onURL(%this, %url) { MessageBoxOK("HELP", "Changes your unzoomed field of view (FOV). 120 is the maximum " @ "allowed by the game."); } KSO_vehicleControlsHelp.setText("Help"); function KSO_vehicleControlsHelp::onURL(%this, %url) { MessageBoxOK("HELP", "Any controls you set here will override your normal controls whenever " @ "you're piloting a vehicle. Note that you must have your joystick " @ "enabled in order to map joystick buttons."); } //***************************************************************************** // REMAP-KEY POPUP DIALOG //***************************************************************************** new GuiControl(kScriptOptionsRemapDlg) { profile = "DlgBackProfile"; position = "0 0"; extent = "640 480"; visible = "1"; hideCursor = "1"; new ShellPaneCtrl(KSO_remapFrame) { profile = "ShellDlgPaneProfile"; horizSizing = "center"; vertSizing = "center"; position = "71 172"; extent = "498 126"; visible = "1"; new GuiMLTextCtrl(KSO_remapText) { profile = "ShellMediumTextProfile"; position = "49 47"; extent = "400 18"; visible = "1"; lineSpacing = "2"; }; new GuiInputCtrl(KSO_remapInputCtrl) { profile = "GuiInputCtrlProfile"; position = "0 0"; visible = "1"; }; }; }; //----------------------------------------------------------------------------- KSO_remapText.setText( "Press a key or button to assign it to this action" NL "or " @ "Esc to cancel..."); PK Ud--_scripts/Kerb/kScript.cs// #autoload // #name = Kerb's T2 Scripts // #category = Kerb's Scripts // #version = 2.1.2 // #date = November 4, 2002 // #status = beta // #author = David Gausebeck // #warrior = Kerb // #email = gausebec@paypal.com // #include = scripts/Kerb/loadout.cs // #include = support/vehicle_callbacks.cs 0.0.5 // #config = kScriptOptions // (c) 2002 David Gausebeck // gausebec@paypal.com // Credit to (ideas/code stolen from :) // UberGuy, Halide, VeCTeR, Crunchy, DeLukas, Misanthrope, Writer and other // contributors to support.vl2, and the authors of the T2 game engine scripts. //***************************************************************************** // SETUP //***************************************************************************** // set default preferences $kPref::rangeReticles = 1; $kPref::vehicleJoy = 0; $kPref::maxThrow = 0; $kPref::jumpJet = 0; $kPref::pilotBombSight = 0; $kPref::deployableIndicator = 0; $kPref::autoMissile = 0; $kPref::autoFlareHoming = 0; $kPref::autoFlareLock = 0; $kPref::zoomToggle = 0; $kPref::wheelZoom = 0; $kPref::wheelZoomSens = 2.0; $kPref::useDefaultZoomFOV = 0; $kPref::defaultZoomFOV = 30; // make sure we have the vehicle controls ActionMap if(!isObject(kScriptVehicleMap)) new ActionMap(kScriptVehicleMap); // load real prefs and vehicle controls if available exec("prefs/kPrefs.cs"); // exec gui scripts if(!isObject(kScriptMortarReticle) || !isObject(kScriptGrenadeReticle)) exec("scripts/Kerb/kScriptReticles.cs"); if(!isObject(kScriptOptions) || !isObject(kScriptOptionsRemapDlg)) exec("scripts/Kerb/kScriptOptions.cs"); // register callbacks callback.add(PlayerDeath, kScriptUnzoom); callback.add(PlayerSpawn, kScriptUnzoom); callback.add(PlayerSpawn, kScriptPrimeGrenade); callback.add(GrenadeReceived, kScriptPrimeGrenade); callback.add(GrenadeUsed, kScriptPrimeGrenade); callback.add(onPilotingAirVehicle, kScriptVehicleAirSettings); callback.add(onPilotingAirVehicle, kScriptVehicleStart); callback.add(onDrivingLandVehicle, kScriptVehicleGroundSettings); callback.add(onDrivingLandVehicle, kScriptVehicleStart); callback.add(onBomberPilot, kScriptStartBombSight); callback.add(onVehicleDismount, kScriptVehicleEnd); callback.add(onVehicleDismount, kScriptDeactivateReticles); callback.add(onVehicleDismount, kScriptEndBombSight); callback.add(onVehicleDismount, kScriptCheckDeployable); addMessageCallback('MsgDeployFailed', kScriptCheckDeployable); // set initial state $kScript::pilotingVehicle = 0; $kScript::bindsListed = 0; //***************************************************************************** // OVERRIDES //***************************************************************************** package kScriptOverrides { //----------------------------------------------------------------------------- function OptionsDlg::onWake(%this) { if(!$kScript::bindsListed) { $RemapName[$RemapCount]="Rangefinder"; $RemapCmd[$RemapCount]="kScriptRangefinder"; $RemapCount++; $RemapName[$RemapCount]="Eject and Jet"; $RemapCmd[$RemapCount]="kScriptJumpJet"; $RemapCount++; $kScript::bindsListed = 1; } parent::onWake(%this); } //----------------------------------------------------------------------------- function PlayGui::onWake(%this) { parent::onWake(%this); %this.add(kScriptMortarReticle); %this.add(kScriptGrenadeReticle); } //----------------------------------------------------------------------------- function mouseJet(%keydown) { parent::mouseJet(%keydown); if(!$kPref::jumpJet) return; if(%keydown && !($mvTriggerCount2 & 1) && getCurrentPosition() !$= "Pilot") { jump(1); schedule(100, 0, jump, 0); } } //----------------------------------------------------------------------------- function throwGrenade(%keydown) { if(!$kPref::maxThrow) { parent::throwGrenade(%keydown); return; } if(%keydown) { if(!$kScript::blockGrenade) { // safe to throw a normal grenade commandToServer('endThrowCount'); if($mvTriggerCount4 & 1) $mvTriggerCount4++; // don't allow another throw for .8 seconds, because it wouldn't // go off anyway and it will mess up the priming $kScript::blockGrenade = 1; schedule(800, 0, kScriptUnblockGrenade); } else { // if it's not safe to throw a normal gren, try to throw a flare. // this allows you to throw flares as fast as you want, even though // normal grens are limited to 1/.8 secs. use("FlareGrenade"); } } } //----------------------------------------------------------------------------- function toggleZoom(%keydown) { if($kPref::zoomToggle && !%keydown) return; if($kPref::zoomToggle && $ZoomON) %keydown = 0; if(!$ZoomON && %keydown && $kPref::useDefaultZoomFOV) $pref::player::currentFOV = $kPref::defaultZoomFOV; parent::toggleZoom(%keydown); // if we just zoomed in, set mousewheel to control zoom level if($ZoomON && $kPref::wheelZoom) { if(!isObject(kScriptWheelZoomMap)) { new ActionMap(kScriptWheelZoomMap); kScriptWheelZoomMap.bind(mouse0, zaxis, kScriptZoomAxis); } kScriptWheelZoomMap.push(); } // if we just zoomed out, remove mousewheel zoom control (even if // prefs aren't set for it, since the pref may have been unset while // zoomed) if(!$ZoomON) { if(isObject(kScriptWheelZoomMap)) kScriptWheelZoomMap.pop(); } } //----------------------------------------------------------------------------- function setFOV(%fov) { parent::setFOV(%fov); if($kPref::rangeReticles) { if($kScript::mortarReticleActive) kScriptBuildMortarReticle(0); if($kScript::grenadeReticleActive) kScriptBuildGrenadeReticle(); } } //----------------------------------------------------------------------------- function ClientCmdSetHudMode(%mode, %type, %node) { parent::clientCmdSetHudMode(%mode, %type, %node); switch$($HudMode) { case "Standard": kScriptBlockDeploySensor(0); kScriptBlockReticles(0); kScriptRefreshInfantryReticles(); case "Pilot": kScriptBlockDeploySensor(1); kScriptBlockReticles(0); case "Object": // controlling an object always unzooms you kScriptUnzoom(); kScriptBlockDeploySensor(1); kScriptDeactivateReticles(); if($HudModeType $= "MortarBarrelLarge") { kScriptBlockReticles(0); kScriptBuildMortarReticle(3); } default: kScriptBlockDeploySensor(1); kScriptBlockReticles(1); } kScriptFixFOV(); } //----------------------------------------------------------------------------- function GameConnection::onTargetLocked(%con, %state) { parent::onTargetLocked(%con, %state); if(!$kPref::autoMissile) return; $mvTriggerCount0 += ($mvTriggerCount0 & 1) == (%state $= "true") ? 2 : 1; } //----------------------------------------------------------------------------- function GameConnection::onLockWarning(%con, %state) { parent::onLockWarning(%con, %state); if(!$kPref::autoFlareLock) return; if(%state $= "true") use("FlareGrenade"); } //----------------------------------------------------------------------------- function GameConnection::onHomeWarning(%con, %state) { parent::onHomeWarning(%con, %state); if(!$kPref::autoFlareHoming) return; if(%state $= "true") use("FlareGrenade"); } //----------------------------------------------------------------------------- function ammoHud::setVisible(%this, %on) { parent::setVisible(%this, %on); kScriptBlockReticles(!%on); } //----------------------------------------------------------------------------- function clientCmdSetWeaponsHudActive(%slot, %ret, %vis) { parent::clientCmdSetWeaponsHudActive(%slot, %ret, %vis); if(%slot == -1) kScriptDeactivateReticles(); else switch$($WeaponNames[%slot]) { case "GrenadeLauncher": kScriptBuildGrenadeReticle(); case "Mortar": kScriptBuildMortarReticle(1); } } //----------------------------------------------------------------------------- function clientCmdSetVWeaponsHudActive(%num, %vType) { parent::clientCmdSetVWeaponsHudActive(%num, %vType); if(%vType $= "AssaultVehicle") { if(%num == 2) kScriptBuildMortarReticle(2); else kScriptDeactivateReticles(); } } //----------------------------------------------------------------------------- function clientCmdSetBackpackHudItem(%num, %addItem) { parent::clientCmdSetBackpackHudItem(%num, %addItem); if(%addItem) kScriptCheckDeployable(); } //----------------------------------------------------------------------------- function clientCmdSetStationKeys(%inStation) { parent::clientCmdSetStationKeys(%inStation); if(!%inStation) kScriptCheckDeployable(); } //----------------------------------------------------------------------------- function clientCmdUpdatePackText(%num) { parent::clientCmdUpdatePackText(%num); if(%num > 0) kScriptCheckDeployable(); } }; activatePackage(kScriptOverrides); //***************************************************************************** // MORTAR/GRENADE RETICLES //***************************************************************************** $kScript::mortarTangent[0] = 0.1227; $kScript::mortarTangent[1] = 0.1547; $kScript::mortarTangent[2] = 0.1877; $kScript::mortarTangent[3] = 0.2220; $kScript::mortarTangent[4] = 0.2578; $kScript::mortarTangent[5] = 0.2958; $kScript::mortarTangent[6] = 0.3364; $kScript::mortarTangent[7] = 0.3806; $kScript::mortarTangent[8] = 0.4296; $kScript::mortarTangent[9] = 0.4854; $kScript::mortarTangent[10] = 0.5520; $kScript::mortarTangent[11] = 0.6376; $kScript::mortarTangent[12] = 0.7708; $kScript::mortarTangentClassic[0] = 0.1283; $kScript::mortarTangentClassic[1] = 0.1619; $kScript::mortarTangentClassic[2] = 0.1966; $kScript::mortarTangentClassic[3] = 0.2328; $kScript::mortarTangentClassic[4] = 0.2709; $kScript::mortarTangentClassic[5] = 0.3115; $kScript::mortarTangentClassic[6] = 0.3553; $kScript::mortarTangentClassic[7] = 0.4036; $kScript::mortarTangentClassic[8] = 0.4581; $kScript::mortarTangentClassic[9] = 0.5219; $kScript::mortarTangentClassic[10] = 0.6016; $kScript::mortarTangentClassic[11] = 0.7157; $kScript::mortarTangentClassic[12] = 1.0000; // actually only reaches 396 $kScript::tankMortarTangent[0] = 0.1177; $kScript::tankMortarTangent[1] = 0.1483; $kScript::tankMortarTangent[2] = 0.1798; $kScript::tankMortarTangent[3] = 0.2123; $kScript::tankMortarTangent[4] = 0.2463; $kScript::tankMortarTangent[5] = 0.2820; $kScript::tankMortarTangent[6] = 0.3199; $kScript::tankMortarTangent[7] = 0.3608; $kScript::tankMortarTangent[8] = 0.4056; $kScript::tankMortarTangent[9] = 0.4556; $kScript::tankMortarTangent[10] = 0.5135; $kScript::tankMortarTangent[11] = 0.5837; $kScript::tankMortarTangent[12] = 0.6776; $kScript::tankMortarTangent[13] = 0.8493; $kScript::tankMortarTangentClassic[0] = 0.1608; $kScript::tankMortarTangentClassic[1] = 0.2041; $kScript::tankMortarTangentClassic[2] = 0.2498; $kScript::tankMortarTangentClassic[3] = 0.2988; $kScript::tankMortarTangentClassic[4] = 0.3524; $kScript::tankMortarTangentClassic[5] = 0.4127; $kScript::tankMortarTangentClassic[6] = 0.4834; $kScript::tankMortarTangentClassic[7] = 0.5720; $kScript::tankMortarTangentClassic[8] = 0.7017; $kScript::turretMortarTangent[0] = 0.1306; $kScript::turretMortarTangent[1] = 0.2004; $kScript::turretMortarTangent[2] = 0.2765; $kScript::turretMortarTangent[3] = 0.3635; $kScript::turretMortarTangent[4] = 0.4706; $kScript::turretMortarTangent[5] = 0.6251; $kScript::turretMortarTangentClassic[0] = 0.1530; $kScript::turretMortarTangentClassic[1] = 0.1939; $kScript::turretMortarTangentClassic[2] = 0.2369; $kScript::turretMortarTangentClassic[3] = 0.2825; $kScript::turretMortarTangentClassic[4] = 0.3320; $kScript::turretMortarTangentClassic[5] = 0.3867; $kScript::turretMortarTangentClassic[6] = 0.4492; $kScript::turretMortarTangentClassic[7] = 0.5241; $kScript::turretMortarTangentClassic[8] = 0.6222; $kScript::turretMortarTangentClassic[9] = 0.7866; $kScript::grenadeTangent[0] = 0.1124; $kScript::grenadeTangent[1] = 0.1714; $kScript::grenadeTangent[2] = 0.2342; $kScript::grenadeTangent[3] = 0.3030; $kScript::grenadeTangent[4] = 0.3816; $kScript::grenadeTangent[5] = 0.4770; $kScript::grenadeTangent[6] = 0.6086; $kScript::grenadeTangent[7] = 0.9610; $kScript::grenadeTangentClassic[0] = 0.1133; $kScript::grenadeTangentClassic[1] = 0.1728; $kScript::grenadeTangentClassic[2] = 0.2361; $kScript::grenadeTangentClassic[3] = 0.3057; $kScript::grenadeTangentClassic[4] = 0.3853; $kScript::grenadeTangentClassic[5] = 0.4826; $kScript::grenadeTangentClassic[6] = 0.6184; $kScript::grenadeTangentClassic[7] = 1.0000; // actually only reaches 224 //----------------------------------------------------------------------------- function kScriptBuildMortarReticle(%mortarType) { if(!$kPref::rangeReticles) return; kScriptMortarReticle.position = getword($pref::Video::resolution, 0)/2-16 @ " " @ getword($pref::Video::resolution, 1)/2-1; kScriptMortarReticle.extent = "63 " @ getword($pref::Video::resolution, 1)/2+1; %scaleFactor = 0.5 * getword($pref::Video::resolution, 0) / mTan(($ZoomOn?$pref::player::currentFOV:$pref::player::defaultFOV) * 0.0087266); if(%mortarType == 0) %mortarType = $kScript::lastMortarType; $kScript::lastMortarType = %mortarType; %classic = (getRecord($ServerInfo, 2) $= "Classic") ? 1 : 0; switch(%mortarType) { case 1: // infantry mortar %tickOffset = 2; %numTicks = 12; %minRange = 100; %maxRange = 400; case 2: // tank mortar %tickOffset = 2; %numTicks = %classic ? 8 : 13; %minRange = 100; %maxRange = %classic ? 300 : 425; case 3: // turret mortar %tickOffset = %classic ? 2 : 0; %numTicks = %classic ? 9 : 5; %minRange = %classic ? 100 : 50; %maxRange = %classic ? 325 : 175; } for(%i = 0; %i <= %numTicks; %i++) { switch(%mortarType) { case 1: %currentTangent = %classic ? $kScript::mortarTangentClassic[%i] : $kScript::mortarTangent[%i]; case 2: %currentTangent = %classic ? $kScript::tankMortarTangentClassic[%i] : $kScript::tankMortarTangent[%i]; case 3: %currentTangent = %classic ? $kScript::turretMortarTangentClassic[%i] : $kScript::turretMortarTangent[%i]; } %currentY = mFloor(%currentTangent * %scaleFactor + 0.5); (KSR_mortarTick @ (%i + %tickOffset)).position = "0 " @ %currentY-4; if(!(%i & 1) || %i == 13) (KSR_mortarRange @ (%i + %tickOffset)).position = "32 " @ %currentY-5; } KSR_mortarTick0.setVisible(%minRange <= 50); KSR_mortarRange0.setVisible(%minRange <= 50); KSR_mortarTick1.setVisible(%minRange <= 75); // always show 100-175 KSR_mortarTick6.setVisible(%maxRange >= 200); KSR_mortarRange6.setVisible(%maxRange >= 200); KSR_mortarTick7.setVisible(%maxRange >= 225); KSR_mortarTick8.setVisible(%maxRange >= 250); KSR_mortarRange8.setVisible(%maxRange >= 250); KSR_mortarTick9.setVisible(%maxRange >= 275); KSR_mortarTick10.setVisible(%maxRange >= 300); KSR_mortarRange10.setVisible(%maxRange >= 300); KSR_mortarTick11.setVisible(%maxRange >= 325); KSR_mortarTick12.setVisible(%maxRange >= 350); KSR_mortarRange12.setVisible(%maxRange >= 350); KSR_mortarTick13.setVisible(%maxRange >= 375); KSR_mortarTick14.setVisible(%maxRange >= 400); KSR_mortarRange14.setVisible(%maxRange >= 400); KSR_mortarTick15.setVisible(%maxRange >= 425); KSR_mortarRange15.setVisible(%maxRange >= 425); $kScript::mortarReticleActive = 1; if(!$kScript::blockReticles) kScriptMortarReticle.setVisible(1); } //----------------------------------------------------------------------------- function kScriptBuildGrenadeReticle() { if(!$kPref::rangeReticles) return; kScriptGrenadeReticle.position = getword($pref::Video::resolution, 0)/2-16 @ " " @ getword($pref::Video::resolution, 1)/2-1; kScriptGrenadeReticle.extent = "63 " @ getword($pref::Video::resolution, 1)/2+1; %scaleFactor = 0.5 * getword($pref::Video::resolution, 0) / mTan(($ZoomOn?$pref::player::currentFOV:$pref::player::defaultFOV) * 0.0087266); %classic = (getRecord($ServerInfo, 2) $= "Classic") ? 1 : 0; for(%i = 0; %i <= 7; %i++) { %currentTangent = %classic ? $kScript::grenadeTangentClassic[%i] : $kScript::grenadeTangent[%i]; %currentY = mFloor(%currentTangent * %scaleFactor + 0.5); (KSR_grenadeTick @ %i).position = "0 " @ %currentY-4; if(!(%i & 1) || %i == 7) (KSR_grenadeRange @ %i).position = "32 " @ %currentY-5; } $kScript::grenadeReticleActive = 1; if(!$kScript::blockReticles) kScriptGrenadeReticle.setVisible(1); } //----------------------------------------------------------------------------- function kScriptDeactivateReticles() { kScriptMortarReticle.setVisible(0); kScriptGrenadeReticle.setVisible(0); $kScript::mortarReticleActive = 0; $kScript::grenadeReticleActive = 0; } //----------------------------------------------------------------------------- function kScriptBlockReticles(%block) { if(%block) { kScriptMortarReticle.setVisible(0); kScriptGrenadeReticle.setVisible(0); $kScript::blockReticles = 1; } else { if($kScript::blockReticles && $kScript::mortarReticleActive) kScriptMortarReticle.setVisible(1); if($kScript::blockReticles && $kScript::grenadeReticleActive) kScriptGrenadeReticle.setVisible(1); $kScript::blockReticles = 0; } } //----------------------------------------------------------------------------- function kScriptRefreshInfantryReticles() { kScriptDeactivateReticles(); switch$(loadout.getCurrentWeapon()) { case "GrenadeLauncher": kScriptBuildGrenadeReticle(); case "Mortar": kScriptBuildMortarReticle(1); } } //***************************************************************************** // JOYSTICK VEHICLE CONTROL AND VEHICLE CONTROL OVERRIDES //***************************************************************************** function kScriptVehicleStart() { $kScript::pilotingVehicle = 1; $kScript::joystickWasEnabled = $pref::Input::JoystickEnabled; // apply vehicle control overrides kScriptVehicleMap.push(); if(!$kPref::vehicleJoy) return; enableJoystick(); passengerKeys.bind(mouse0, "xaxis", S, moveMap.getScale(mouse0, "xaxis"), kScriptVehicleLookYaw); passengerKeys.bind(mouse0, "yaxis", moveMap.isInverted(mouse0, "yaxis")?"SI":"S", moveMap.getScale(mouse0, "yaxis"), kScriptVehicleLookPitch); passengerKeys.bind(joystick0, "xaxis", SD, "-0.2 0.2", 1, kScriptVehicleYaw); passengerKeys.bind(joystick0, "yaxis", SDI, "-0.2 0.2", 1, kScriptVehiclePitch); $mvForwardAction = 0; $mvBackwardAction = 0; $mvLeftAction = 0; $mvRightAction = 0; $mvYawRightSpeed = 0; $mvYawLeftSpeed = 0; $mvPitchDownSpeed = 0; $mvPitchUpSpeed = 0; $kScript::appliedYaw = 0; $kScript::appliedPitch = 0; $kScript::lastYawTime = GetSimTime(); $kScript::lastPitchTime = GetSimTime(); } //----------------------------------------------------------------------------- function kScriptVehicleEnd() { if($kScript::pilotingVehicle && !$kScript::joystickWasEnabled) { // about to disable joystick, so release any triggers which are // currently active due to joystick buttons if(kScriptIsJoystickBind("mouseFire")) mouseFire(0); if(kScriptIsJoystickBind("altTrigger")) altTrigger(0); if(kScriptIsJoystickBind("jump")) jump(0); if(kScriptIsJoystickBind("mouseJet")) mouseJet(0); if(kScriptIsJoystickBind("throwGrenade")) throwGrenade(0); if(kScriptIsJoystickBind("placeMine")) placeMine(0); disableJoystick(); } $kScript::pilotingVehicle = 0; // undo vehicle control overrides kScriptVehicleMap.pop(); if(!$kPref::vehicleJoy) return; $mvForwardAction = 0; $mvBackwardAction = 0; $mvLeftAction = 0; $mvRightAction = 0; $mvFreeLook = 0; } //----------------------------------------------------------------------------- function kScriptVehicleAirSettings(%vType, %node) { $kScript::aircraft = 1; $kScript::maxSteeringAngle = 3.14; if(%vType $= "HAPC") $kScript::autoStabilizeSpeed = 10; else $kScript::autoStabilizeSpeed = 15; } //----------------------------------------------------------------------------- function kScriptVehicleGroundSettings(%vType, %node) { $kScript::aircraft = 0; $kScript::maxSteeringAngle = 0.785; } //----------------------------------------------------------------------------- function kScriptVehicleYaw(%val) { // update times %now = GetSimTime(); %elapsed = %now - $kScript::lastYawTime; $kScript::lastYawTime = %now; // account for the input damping of aircraft at slow speeds if($kScript::aircraft && getControlObjectSpeed() < $kScript::autoStabilizeSpeed) $kScript::appliedYaw *= (1 - 0.05 * (%elapsed/33.3)); // determine the new applied yaw %newAppliedYaw = %val * $kScript::maxSteeringAngle; // play nice with lookyaw/lookpitch and don't apply control unless it's necessary if(abs(%newAppliedYaw - $kScript::appliedYaw)/$kScript::maxSteeringAngle > 0.01) { $mvFreeLook = 0; // move yaw from old applied to new applied $mvYaw += %newAppliedYaw - $kScript::appliedYaw; $kScript::appliedYaw = %newAppliedYaw; } // sweep away any errors if we're turning as hard as possible if(abs(%val) == 1) { $mvFreeLook = 0; $mvYaw += %val * 0.1; } } //----------------------------------------------------------------------------- function kScriptVehiclePitch(%val) { // update times %now = GetSimTime(); %elapsed = %now - $kScript::lastPitchTime; $kScript::lastPitchTime = %now; // account for the input damping of aircraft at slow speeds if($kScript::aircraft && getControlObjectSpeed() < $kScript::autoStabilizeSpeed) $kScript::appliedPitch *= (1 - 0.05 * (%elapsed/33.3)); // figure the new applied pitch %newAppliedPitch = %val * $kScript::maxSteeringAngle; // play nice with lookpitch/lookpitch and don't apply control unless it's necessary if(abs(%newAppliedPitch - $kScript::appliedPitch)/$kScript::maxSteeringAngle > 0.01) { $mvFreeLook = 0; // move pitch from old applied to new applied $mvPitch += %newAppliedPitch - $kScript::appliedPitch; $kScript::appliedPitch = %newAppliedPitch; } // sweep away any accumulated if we're turning as hard as possible if(abs(%val) == 1) { $mvFreeLook = 0; $mvPitch += %val * 0.1; } } //----------------------------------------------------------------------------- function kScriptVehicleLookYaw(%val) { // don't try to freelook when the vehicle is turning if(%val && abs($kScript::appliedPitch)/$kScript::maxSteeringAngle < 0.1 && abs($kScript::appliedYaw)/$kScript::maxSteeringAngle < 0.1) { $mvFreeLook = 1; $mvYaw += getMouseAdjustAmount(%val); } } //----------------------------------------------------------------------------- function kScriptVehicleLookPitch(%val) { // don't try to freelook when the vehicle is turning if(%val && abs($kScript::appliedPitch)/$kScript::maxSteeringAngle < 0.1 && abs($kScript::appliedYaw)/$kScript::maxSteeringAngle < 0.1) { $mvFreeLook = 1; $mvPitch += getMouseAdjustAmount(%val); } } //----------------------------------------------------------------------------- function kScriptIsJoystickBind(%cmd) { // find the active binding for this command, assuming we're currently // piloting a vehicle %temp = kScriptVehicleMap.getBinding(%cmd); if(%temp $= "") %temp = passengerKeys.getBinding(%cmd); // see if the device includes "joystick" %device = getField(%temp, 0); if(strstr(%device, "joystick") != -1) return 1; else return 0; } //***************************************************************************** // MISC //***************************************************************************** function kScriptBlockDeploySensor(%block) { if(!$kPref::deployableIndicator) return; if(%block) deploySensor.setVisible(0); else kScriptCheckDeployable(1); } //----------------------------------------------------------------------------- function kScriptCheckDeployable(%show) { if(!$kPref::deployableIndicator) return; if(strStr(loadout.getPack(), "Deployable") != -1) { useBackpack(1); if(%show) deploySensor.setVisible(1); } } //----------------------------------------------------------------------------- function kScriptStartBombSight() { if(!$kPref::pilotBombSight) return; clientCmdStartBomberSight(); } //----------------------------------------------------------------------------- function kScriptEndBombSight() { if(!$kPref::pilotBombSight) return; clientCmdEndBomberSight(); } //----------------------------------------------------------------------------- function kScriptUnblockGrenade() { $kScript::blockGrenade = 0; } //----------------------------------------------------------------------------- function kScriptPrimeGrenade() { if($kPref::maxThrow) { commandToServer('startThrowCount'); if(!($mvTriggerCount4 & 1)) $mvTriggerCount4++; } } //----------------------------------------------------------------------------- function kScriptUnzoom() { if($ZoomOn) { // try to unzoom toggleZoom(0); if($ZoomOn) // looks like the player has a zoom toggle, so try again toggleZoom(1); } } //----------------------------------------------------------------------------- function kScriptFixFOV() { // make sure fov is correct if we're unzoomed... T2 has a nasty habit // of resetting fov to 90 instead of $pref::player::defaultFOV. schedule(200, 0, kScriptCheckUnzoom); schedule(600, 0, kScriptCheckUnzoom); // safety } //----------------------------------------------------------------------------- function kScriptCheckUnzoom() { if(!$ZoomOn) setFOV($pref::player::defaultFOV); } //----------------------------------------------------------------------------- function kScriptZoomAxis(%inc) { // assume mousewheel with increments of 120 %inc = mCeil(%inc / 120); for(%i = 0; %i < %inc; %i++) $pref::player::currentFOV /= $kPref::wheelZoomSens; for(%i = 0; %i > %inc; %i--) $pref::player::currentFOV *= $kPref::wheelZoomSens; // cap it if($pref::player::currentFOV > 50) $pref::player::currentFOV = 50; else if($pref::player::currentFOV < 5) $pref::player::currentFOV = 5; // set new fov if zoomed if($ZoomOn) setFOV($pref::player::currentFOV); } //----------------------------------------------------------------------------- function kScriptRangefinder(%keydown) { if(%keydown) { useTargetingLaser(1); if(!($mvTriggerCount0 & 1)) $mvTriggerCount0++; schedule(1000, 0, kScriptStopRangefinder); } } //----------------------------------------------------------------------------- function kScriptStopRangefinder() { kScriptUnzoom(); if($mvTriggerCount0 & 1) $mvTriggerCount0++; loadout.useWeapon(loadout.getPreviousWeapon()); } //----------------------------------------------------------------------------- function kScriptJumpJet(%keydown) { mouseJet(%keydown); if(%keydown && !($mvTriggerCount2 & 1)) { jump(1); schedule(100, 0, jump, 0); } } //***************************************************************************** // OPTIONS DIALOG SUPPORT //***************************************************************************** function kScriptSavePrefs(%this) { export("$kPref::*", "prefs/kPrefs.cs", false); kScriptVehicleMap.save("prefs/kPrefs.cs", true); } //----------------------------------------------------------------------------- function kScriptBuildFullMapString(%index) { %name = $RemapName[%index]; %cmd = $RemapCmd[%index]; %temp = kScriptVehicleMap.getBinding(%cmd); %device = getField(%temp, 0); %object = getField(%temp, 1); if(%device !$= "" && %object !$= "") %mapString = getMapDisplayName(%device, %object); else %mapString = ""; return(%name TAB %mapString); } //----------------------------------------------------------------------------- function kScriptChangeVehicleBind(%device, %action, %oldIndex, %newIndex) { kScriptVehicleMap.bind(%device, %action, $RemapCmd[%newIndex]); KSO_vehicleControls.setRowById(%oldIndex, kScriptBuildFullMapString(%oldIndex)); KSO_vehicleControls.setRowById(%newIndex, kScriptBuildFullMapString(%newIndex)); } //------------------------------------------------------------------------------ function kScriptOptions::onWake(%this) { // most scripts that register new commands in the control list tend to chain // off of OptionsDlg::onWake, so this is a hack to get those registered // before showing the vehicle control overrides screen. OptionsDlg::onWake(); KSO_GeneralPane.setVisible(false); KSO_ZoomPane.setVisible(false); KSO_ControlsPane.setVisible(false); KSO_GeneralTab.setValue(false); KSO_ZoomTab.setValue(false); KSO_ControlsTab.setValue(false); KSO_wheelZoomSens.setValue($kPref::wheelZoomSens); KSO_defZoomFOV.setValue($kPref::defaultZoomFOV); KSO_unzoomedFOV.setValue($pref::player::defaultFOV); KSO_vehicleControls.fillList(); %this.setPane(%this.pane); } //----------------------------------------------------------------------------- function kScriptOptions::setPane(%this, %pane) { // deactivate current pane %paneCtrl = "KSO_" @ %this.pane @ "Pane"; %paneCtrl.setVisible(false); %tabCtrl = "KSO_" @ %this.pane @ "Tab"; %tabCtrl.setValue(false); // activate new one %paneCtrl = "KSO_" @ %pane @ "Pane"; %paneCtrl.setVisible(true); %tabCtrl = "KSO_" @ %pane @ "Tab"; %tabCtrl.setValue(true); %this.pane = %pane; } //----------------------------------------------------------------------------- function kScriptOptionsRemapDlg::onWake(%this) { $enableDirectInput = "1"; activateDirectInput(); } //----------------------------------------------------------------------------- function kScriptOptionsRemapDlg::onSleep(%this) { $enableDirectInput = "1"; deactivateDirectInput(); } //----------------------------------------------------------------------------- function KSO_vehicleControls::fillList(%this) { %this.clear(); for(%i = 0; %i < $RemapCount; %i++) %this.addRow(%i, kScriptBuildFullMapString(%i)); } //----------------------------------------------------------------------------- function KSO_vehicleControls::onDeleteKey(%this, %index) { clearMapping(kScriptVehicleMap, $RemapCmd[%index]); %this.setRowById(%index, kScriptBuildFullMapString(%index)); } //----------------------------------------------------------------------------- function KSO_vehicleControls::doRemap(%this) { %index = %this.getSelectedId(); %name = $RemapName[%index]; KSO_remapFrame.setTitle("REMAP \"" @ %name @ "\""); KSO_remapInputCtrl.index = %index; Canvas.pushDialog(kScriptOptionsRemapDlg); } //----------------------------------------------------------------------------- function KSO_remapInputCtrl::onInputEvent(%this, %device, %action) { Canvas.popDialog(kScriptOptionsRemapDlg); // do nothing if key was escape if(%device $= "keyboard" && %action $= "escape") return; %cmd = $RemapCmd[%this.index]; %name = $RemapName[%this.index]; // find the previous command for this key %prevCmd = kScriptVehicleMap.getCommand(%device, %action); // if it's the same as the current command, do nothing if(%prevCmd $= %cmd) return; // if there was no previous command, go ahead and bind if(%prevCmd $= "") { kScriptVehicleMap.bind(%device, %action, %cmd); KSO_vehicleControls.setRowById(%this.index, kScriptBuildFullMapString(%this.index)); } // otherwise, give the standard warning/rejection else { %mapName = getMapDisplayName(%device, %action); %prevCmdIndex = findRemapCmdIndex(%prevCmd); if(%prevCmdIndex == -1) MessageBoxOK("REMAP FAILED", "\"" @ %mapName @ "\" is already bound to a non-remappable command!"); else { %prevCmdName = $RemapName[%prevCmdIndex]; MessageBoxYesNo("WARNING", "\"" @ %mapName @ "\" is already bound to \"" @ %prevCmdName @ "\"!\nDo you want to undo this mapping?", "kScriptChangeVehicleBind(" @ %device @ ", \"" @ %action @ "\", " @ %prevCmdIndex @ ", " @ %this.index @ ");", ""); } } } PK ˫,Cӯ22scripts/Kerb/kScriptReticles.cs// Reticle Gui Objects for Kerb's T2 Scripts // // (c) 2002 David Gausebeck // gausebec@paypal.com //----------------------------------------------------------------------------- new ShellFieldCtrl(kScriptMortarReticle) { profile = "GuiDefaultProfile"; visible = "0"; // 50 new GuiBitmapCtrl(KSR_mortarTick0) { profile = "GuiDefaultProfile"; visible = "1"; extent = "32 9"; bitmap = "Kerb/kRET_mortarTick.png"; }; new GuiBitmapCtrl(KSR_mortarRange0) { profile = "GuiDefaultProfile"; visible = "1"; extent = "31 11"; bitmap = "Kerb/kRET_mortar50.png"; }; // 75 new GuiBitmapCtrl(KSR_mortarTick1) { profile = "GuiDefaultProfile"; visible = "1"; extent = "32 9"; bitmap = "Kerb/kRET_mortarTick.png"; }; // 100 new GuiBitmapCtrl(KSR_mortarTick2) { profile = "GuiDefaultProfile"; visible = "1"; extent = "32 9"; bitmap = "Kerb/kRET_mortarTick.png"; }; new GuiBitmapCtrl(KSR_mortarRange2) { profile = "GuiDefaultProfile"; visible = "1"; extent = "31 11"; bitmap = "Kerb/kRET_mortar100.png"; }; // 125 new GuiBitmapCtrl(KSR_mortarTick3) { profile = "GuiDefaultProfile"; visible = "1"; extent = "32 9"; bitmap = "Kerb/kRET_mortarTick.png"; }; // 150 new GuiBitmapCtrl(KSR_mortarTick4) { profile = "GuiDefaultProfile"; visible = "1"; extent = "32 9"; bitmap = "Kerb/kRET_mortarTick.png"; }; new GuiBitmapCtrl(KSR_mortarRange4) { profile = "GuiDefaultProfile"; visible = "1"; extent = "31 11"; bitmap = "Kerb/kRET_mortar150.png"; }; // 175 new GuiBitmapCtrl(KSR_mortarTick5) { profile = "GuiDefaultProfile"; visible = "1"; extent = "32 9"; bitmap = "Kerb/kRET_mortarTick.png"; }; // 200 new GuiBitmapCtrl(KSR_mortarTick6) { profile = "GuiDefaultProfile"; visible = "1"; extent = "32 9"; bitmap = "Kerb/kRET_mortarTick.png"; }; new GuiBitmapCtrl(KSR_mortarRange6) { profile = "GuiDefaultProfile"; visible = "1"; extent = "31 11"; bitmap = "Kerb/kRET_mortar200.png"; }; // 225 new GuiBitmapCtrl(KSR_mortarTick7) { profile = "GuiDefaultProfile"; visible = "1"; extent = "32 9"; bitmap = "Kerb/kRET_mortarTick.png"; }; // 250 new GuiBitmapCtrl(KSR_mortarTick8) { profile = "GuiDefaultProfile"; visible = "1"; extent = "32 9"; bitmap = "Kerb/kRET_mortarTick.png"; }; new GuiBitmapCtrl(KSR_mortarRange8) { profile = "GuiDefaultProfile"; visible = "1"; extent = "31 11"; bitmap = "Kerb/kRET_mortar250.png"; }; // 275 new GuiBitmapCtrl(KSR_mortarTick9) { profile = "GuiDefaultProfile"; visible = "1"; extent = "32 9"; bitmap = "Kerb/kRET_mortarTick.png"; }; // 300 new GuiBitmapCtrl(KSR_mortarTick10) { profile = "GuiDefaultProfile"; visible = "1"; extent = "32 9"; bitmap = "Kerb/kRET_mortarTick.png"; }; new GuiBitmapCtrl(KSR_mortarRange10) { profile = "GuiDefaultProfile"; visible = "1"; extent = "31 11"; bitmap = "Kerb/kRET_mortar300.png"; }; // 325 new GuiBitmapCtrl(KSR_mortarTick11) { profile = "GuiDefaultProfile"; visible = "1"; extent = "32 9"; bitmap = "Kerb/kRET_mortarTick.png"; }; // 350 new GuiBitmapCtrl(KSR_mortarTick12) { profile = "GuiDefaultProfile"; visible = "1"; extent = "32 9"; bitmap = "Kerb/kRET_mortarTick.png"; }; new GuiBitmapCtrl(KSR_mortarRange12) { profile = "GuiDefaultProfile"; visible = "1"; extent = "31 11"; bitmap = "Kerb/kRET_mortar350.png"; }; // 375 new GuiBitmapCtrl(KSR_mortarTick13) { profile = "GuiDefaultProfile"; visible = "1"; extent = "32 9"; bitmap = "Kerb/kRET_mortarTick.png"; }; // 400 new GuiBitmapCtrl(KSR_mortarTick14) { profile = "GuiDefaultProfile"; visible = "1"; extent = "32 9"; bitmap = "Kerb/kRET_mortarTick.png"; }; new GuiBitmapCtrl(KSR_mortarRange14) { profile = "GuiDefaultProfile"; visible = "1"; extent = "31 11"; bitmap = "Kerb/kRET_mortar400.png"; }; // 425 new GuiBitmapCtrl(KSR_mortarTick15) { profile = "GuiDefaultProfile"; visible = "1"; extent = "32 9"; bitmap = "Kerb/kRET_mortarTick.png"; }; new GuiBitmapCtrl(KSR_mortarRange15) { profile = "GuiDefaultProfile"; visible = "1"; extent = "31 11"; bitmap = "Kerb/kRET_mortar425.png"; }; }; //----------------------------------------------------------------------------- new ShellFieldCtrl(kScriptGrenadeReticle) { profile = "GuiDefaultProfile"; visible = "0"; // 50 new GuiBitmapCtrl(KSR_grenadeTick0) { profile = "GuiDefaultProfile"; visible = "1"; extent = "32 9"; bitmap = "Kerb/kRET_grenadeTick.png"; }; new GuiBitmapCtrl(KSR_grenadeRange0) { profile = "GuiDefaultProfile"; visible = "1"; extent = "31 11"; bitmap = "Kerb/kRET_grenade50.png"; }; // 75 new GuiBitmapCtrl(KSR_grenadeTick1) { profile = "GuiDefaultProfile"; visible = "1"; extent = "32 9"; bitmap = "Kerb/kRET_grenadeTick.png"; }; // 100 new GuiBitmapCtrl(KSR_grenadeTick2) { profile = "GuiDefaultProfile"; visible = "1"; extent = "32 9"; bitmap = "Kerb/kRET_grenadeTick.png"; }; new GuiBitmapCtrl(KSR_grenadeRange2) { profile = "GuiDefaultProfile"; visible = "1"; extent = "31 11"; bitmap = "Kerb/kRET_grenade100.png"; }; // 125 new GuiBitmapCtrl(KSR_grenadeTick3) { profile = "GuiDefaultProfile"; visible = "1"; extent = "32 9"; bitmap = "Kerb/kRET_grenadeTick.png"; }; // 150 new GuiBitmapCtrl(KSR_grenadeTick4) { profile = "GuiDefaultProfile"; visible = "1"; extent = "32 9"; bitmap = "Kerb/kRET_grenadeTick.png"; }; new GuiBitmapCtrl(KSR_grenadeRange4) { profile = "GuiDefaultProfile"; visible = "1"; extent = "31 11"; bitmap = "Kerb/kRET_grenade150.png"; }; // 175 new GuiBitmapCtrl(KSR_grenadeTick5) { profile = "GuiDefaultProfile"; visible = "1"; extent = "32 9"; bitmap = "Kerb/kRET_grenadeTick.png"; }; // 200 new GuiBitmapCtrl(KSR_grenadeTick6) { profile = "GuiDefaultProfile"; visible = "1"; extent = "32 9"; bitmap = "Kerb/kRET_grenadeTick.png"; }; new GuiBitmapCtrl(KSR_grenadeRange6) { profile = "GuiDefaultProfile"; visible = "1"; extent = "31 11"; bitmap = "Kerb/kRET_grenade200.png"; }; // 225 new GuiBitmapCtrl(KSR_grenadeTick7) { profile = "GuiDefaultProfile"; visible = "1"; extent = "32 9"; bitmap = "Kerb/kRET_grenadeTick.png"; }; new GuiBitmapCtrl(KSR_grenadeRange7) { profile = "GuiDefaultProfile"; visible = "1"; extent = "31 11"; bitmap = "Kerb/kRET_grenade225.png"; }; }; PK E)d-[r>0>0scripts/Kerb/loadout.cs// #name = Loadout Support // #version = 0.0.6 // #date = August 8, 2001 // #author = Daniel Neilsen (aka Wizard_TPG) // #email = wizardsworld@bigpond.com // #web = http://www.tribalwar.com/wizard/ // #description = Determines players current loadout status from HUD information // #status = release // #include = support/callback.cs // --------------------------------------------------------------------------- // note from Kerb: loadout.cs is normally part of support.vl2, but the latest // T2 patch breaks it. I'm including the fixed version directly in my script // pack until an official fixed version is available. // // Usage Notes and Examples: // // Callbacks included in this support script: // PlayerSpawn - called when player spawns. // WeaponChange - When player changes weapon. Returns new weapon as 1st variable. // PlayerUseInv - Player used the inventory station // PlayerDeath - Player died somehow. Could have changed teams or gone to obs. // MineUsed - A mine was removed from the players inventory either by use or otherwise // MineReceived - A mine was added to the players inventory // RepairKitUsed - A Repairkit was removed from the players inventory. // RepairKitReceived - A Repairkit was added to the players inventory. // BeaconUsed - A Beacon was removed from the players inventory. // BeaconReceived - A Beacon was added to the players inventory. // GrenadeUsed - A Grenade was removed from the players inventory. // GrenadeReceived - A Grenade was added to the players inventory. // ModTypeChange - When you enter a server this callback returns mod name // // // Useful Functions in this support script: // loadout.isLoadoutWeapon(%name); - Will return true or false if weapon is in players inv // loadout.getCurrentWeapon(); - Returns the name of the current weapon in players hand. "" for none. // loadout.getPreviousWeapon(); - Returns the name of the previously used weapon. "" for none // loadout.getWeaponAmmo(%name); - Returns the ammo amount for that weapon in players inv. -1 for infinite. // loadout.getPack(); - Returns name of current pack. "" for none. // loadout.getMineAmmo(); - Returns number of mines in players inv. // loadout.getRepairKit(); - Returns number of repairkits in players inv. (ie. 1 or 0) // loadout.getBeaconAmmo(); - Returns number of beacons in players inv. // loadout.getGrenadeAmmo(); - Returns number of grenades in players inv. // loadout.UseWeapon(%weapon); - Input the weapon name to load the correct weapon function // loadout.getGrenadeType(); - Returns the type of grenade in players inv. // loadout.getArmorType(); - Returns current type of armor (if mod with support). // loadout.getModType(); - Returns current server mod type. // NOTE: getGrenadeType can not currently be determined due to lack of HUD data and will always return "Grenade" // // // Possible WeaponTypes Are: // Blaster // Plasma // Chaingun // Disc // GrenadeLauncher // SniperRifle // ELFGun // Mortar // MissileLauncher // ShockLance // TargetingLaser // RepairGun // ParticleGun - Shifter // HeaterGun - Shifter // RailGun - Shifter // Flamer - Shifter // EngineerRepairGun - Shifter // GravitronGun - Shifter // VoltProjector - Shifter // BoomStick - Shifter // // Note: All weapons from any mod should be fine // // // // Possible Grenade Types Are: // Grenade // FlashGrenade // ConcussionGrenade // FlareGrenade // CameraGrenade // // // Possible Mine Types Are: // Mine // // // Possible Pack Types Are: // AmmoPack // CloakingPack` // EnergyPack // RepairPack // SatchelCharge // ShieldPack // InventoryDeployable // MotionSensorDeployable // PulseSensorDeployable // TurretOutdoorDeployable // TurretIndoorDeployable // SensorJammerPack // AABarrelPack // FusionBarrelPack // MissileBarrelPack // PlasmaBarrelPack // ELFBarrelPack // MortarBarrelPack // ThrusterPack - TAC2 // MorphPack - Shifter // TelePack - Shifter // DetPack - Shifter // DeployableThumperPack - Shifter // heavydevistatorcannon - Shifter // heavyplasmacannon - Shifter // FFBeacon - Shifter // DeployableTurretPack - Shifter // DeployableLaserBarrelPack - Shifter // DeployableShockerBarrelPack - Shifter // CycloneLauncherPack - Shifter // ShieldBeacon - Shifter // FFCube - Shifter // JammerBeacon - Shifter // ForceFieldDeployable - Shifter // RepairBeaconDeployable - Shifter // // // // // Note: This script SHOULD work for mods as well. // I have only added mod weapon/pack names in here for TAC2 and Shifter although // other mods should also be fine. // // //============================================================================ package Inventory_Support { function clientCmdSetWeaponsHudItem(%slot, %ammoAmount, %addItem) { if(%addItem) loadout::addweapon(%this, %slot); else loadout::removeweapon(%this, %slot); Parent::clientCmdSetWeaponsHudItem(%slot, %ammoAmount, %addItem); } function clientCmdSetWeaponsHudAmmo(%slot, %ammoAmount) { loadout.setWeaponAmmo(%slot, %ammoAmount); Parent::clientCmdSetWeaponsHudAmmo(%slot, %ammoAmount); } function clientCmdSetWeaponsHudActive(%slot, %ret, %vis) { loadout.setCurrentWeapon(%slot); Parent::clientCmdSetWeaponsHudActive(%slot, %ret, %vis); } function clientCmdSetRepairReticle() { loadout.setCurrentWeapon(0, "RepairGun"); Parent::clientCmdSetRepairReticle(); } function clientCmdSetWeaponsHudClearAll() { loadout.clearall(); Parent::clientCmdSetWeaponsHudClearAll(); } //============================================================= function clientCmdSetBackpackHudItem(%num, %addItem) { if(%addItem) loadout.addpack(%num); else loadout.clearpack(); Parent::clientCmdSetBackpackHudItem(%num, %addItem); } //============================================================= function clientCmdSetInventoryHudItem(%slot, %amount, %addItem) { callback.trigger(PlayerSpawn); Parent::clientCmdSetInventoryHudItem(%slot, %amount, %addItem); } function clientCmdSetInventoryHudAmount(%slot, %amount) { loadout.setInvData(%slot, %amount); Parent::clientCmdSetInventoryHudAmount(%slot, %amount); } function clientCmdSetInventoryHudClearAll() { loadout.PlayerDeath(); Parent::clientCmdSetInventoryHudClearAll(); } function clientCmdSetArmorType(%type) { loadout.SetArmorType(%type); Parent::clientCmdSetArmorType(%type); } }; activatepackage(Inventory_Support); if(!isObject(loadout)) { new ScriptObject(loadout) { class = loadout; }; } function handleLoadoutHUDMissionInfo(%msgType, %msgString, %missionname, %missiontype, %servername) { loadout.currentServerMod = getRecord( $ServerInfo, 2 ); callback.trigger(ModTypeChange, loadout.currentServerMod); } addMessageCallback( 'MsgMissionDropInfo', handleLoadoutHUDMissionInfo ); //================================================== function loadout::addweapon(%this, %slot) { %this.playerdead = false; %name = $WeaponNames[%slot]; $Loadout::weapon[%name] = true; } function loadout::removeweapon(%this, %slot) { %name = $WeaponNames[%slot]; $Loadout::weapon[%name] = false; } function loadout::clearweapon(%this) { for(%slot=0; %slot<11; %slot++) { %name = $WeaponNames[%slot]; $Loadout::weapon[%name] = false; } } function loadout::setCurrentWeapon(%this, %slot, %other) { %this.playerdead = false; if(%this.currentWeapon !$= "") %this.previousWeapon = %this.currentWeapon; if(%slot == -1) %this.currentWeapon = ""; else if(%other $= "") %this.currentWeapon = $WeaponNames[%slot]; else %this.currentWeapon = %other; callback.trigger(WeaponChange, %this.currentWeapon); } function loadout::setWeaponAmmo(%this, %slot, %ammo) { %name = $WeaponNames[%slot]; %this.weaponAmmo[%name] = %ammo; } function loadout::isLoadoutWeapon(%this, %name) { if(%name $= "") return false; for(%slot=0; %slot<100; %slot++) { %namedata = $WeaponNames[%slot]; if(%namedata $= "") return false; if(%name $= %namedata) { %val = $Loadout::weapon[%namedata] == 1 ? 1 : 0; return %val; } } return false; } function loadout::getCurrentWeapon(%this) { return %this.currentWeapon; } function loadout::getPreviousWeapon(%this) { return %this.previousWeapon; } function loadout::getWeaponAmmo(%this, %name) { %val = %this.weaponAmmo[%name] $= "" ? -1 : %this.weaponAmmo[%name]; return %val; } //============================================================== function loadout::addpack(%this, %slot) { %this.pack = $BackpackHudData[%slot, itemDataName]; } function loadout::clearpack(%this) { %this.pack = ""; } function loadout::getPack(%this) { return %this.pack; } //============================================================== function loadout::setInvData(%this, %slot, %ammo) { %this.playerdead = false; if(%slot $= "") return; for(%num = 0; %num < $InventoryHudCount; %num++) { if($InventoryHudData[%num, slot] == %slot) { %numdata = %num; %num = $InventoryHudCount; } } %datatype = $InventoryHudData[%numdata, itemDataName]; if(%datatype $= Mine) { if(%this.mineAmmo > %ammo) callback.trigger(MineUsed); else if(%this.mineAmmo < %ammo) callback.trigger(MineReceived); %this.mineAmmo = %ammo; } else if(%datatype $= RepairKit) { if(%this.repairKit > %ammo) callback.trigger(RepairKitUsed); else if(%this.repairKit < %ammo) callback.trigger(RepairKitReceived); %this.repairKit = %ammo; } else if(%datatype $= Beacon) { if(%this.repbeaconAmmo > %ammo) callback.trigger(BeaconUsed); else if(%this.beaconAmmo < %ammo) callback.trigger(BeaconReceived); %this.beaconAmmo = %ammo; } else { if(%ammo >= 1) { if(%this.grenAmmo > %ammo) callback.trigger(GrenadeUsed); else if(%this.grenAmmo < %ammo) callback.trigger(GrenadeReceived); %this.grenType = %datatype; %this.grenAmmo = %ammo; } else if(%datatype $= %this.grenType) { if(%this.grenAmmo > %ammo) callback.trigger(GrenadeUsed); else if(%this.grenAmmo < %ammo) callback.trigger(GrenadeReceived); %this.grenAmmo = %ammo; } } } function loadout::clearInvData(%this) { %this.mineAmmo = 0; %this.repairKit = 0; %this.beaconAmmo = 0; %this.grenType = ""; %this.grenAmmo = 0; } function loadout::getMineAmmo(%this) { return %this.mineAmmo; } function loadout::getRepairKit(%this) { return %this.repairKit; } function loadout::getBeaconAmmo(%this) { return %this.beaconAmmo; } function loadout::getGrenadeType(%this) { return %this.grenType; } function loadout::getGrenadeAmmo(%this) { return %this.grenAmmo; } //======================================================= function loadout::clearall(%this) { %this.clearweapon(); %this.clearpack(); %this.clearInvData(); if(!%this.playerdead) callback.trigger(PlayerUseInv); } function loadout::PlayerDeath(%this) { %this.playerdead = true; %this.clearall(); callback.trigger(PlayerDeath); } function loadout::UseWeapon(%this, %weapon) { if(%weapon $= "Blaster") useBlaster(true); else if(%weapon $= "Plasma") usePlasma(true); else if(%weapon $= "Chaingun") useChaingun(true); else if(%weapon $= "Disc") useDisc(true); else if(%weapon $= "GrenadeLauncher") useGrenadeLauncher(true); else if(%weapon $= "SniperRifle") useSniperRifle(true); else if(%weapon $= "ELFGun") useELFGun(true); else if(%weapon $= "Mortar") useMortar(true); else if(%weapon $= "MissileLauncher") useMissileLauncher(true); else if(%weapon $= "TargetingLaser") useTargetingLaser(true); else if(%weapon $= "ShockLance") useShockLance(true); else use( %weapon ); } //========================================== // Mod Functions function loadout::getModType(%this) { return %this.currentServerMod; } PK ,scripts/PK ,textures/Kerb/PK 4%,҄ww textures/Kerb/kRET_grenade50.pngPNG  IHDR VgAMA|Q cHRMz%u._:oi+IDATxb`x b#ToES: `KS0@XI`5 䉵 P,7RP|dvkiR<APa9T#: ,V$ X @ b`+H$I@X+ΡA%H$OCdP-rPXp s zNVA|8HBj1 9lGF @j/˃h$uJ]X-jD0CEP ġ!bx {B1ȧX, C̈́B9PbXB|$3  )]!Fj9)(Os hhȊs"dy `OTRMV8INjir ogR/ 'O˃h$'E@]iwEE5B]mo-/_ VA|8`z01˷\2$[A|8Huj@< x :h ɓ P,F-FP1&ŷ!T9@-h4ߪ1`9@f16 L@paj> g^!xD@ IKwIENDB`PK J,,ϱ tt!textures/Kerb/kRET_grenade225.pngPNG  IHDR VgAMA|Q cHRMz%u._:oi+IDATxb`# > `O F]<PF0NjnR okl01ʃ0H/`@p)(G]`MPWƦ}@(@8,'Frt:RY a!$#sx }qYL@820; `/fA}H:RJ[KKQ@ IRRԁANC&xR(a9@#f@JŔCsGXp<ԝF |D9IENDB`PK -$,[ii!textures/Kerb/kRET_grenade100.pngPNG  IHDR VgAMA|Q cHRMz%u._:oi+IDATxb`@F@4V8 o'FF#/] ^O578iXD q< ZdH#: ġR°+2 A ­ >H$O:dahb$A[A yR!KA4 67 Y-%5Drv"d9,6D YwIENDB`PK ,x"textures/Kerb/kRET_grenadeTick.pngPNG  IHDR S. gAMA|Q cHRMz%u._:oi+eIDATxb`  lD-Ѐ; @d4&Ü {hCK! @DvQ+ Ѐ; 'kaIENDB`PK 8$,qii textures/Kerb/kRET_mortar100.pngPNG  IHDR VgAMA|Q cHRMz%u._:oi+IDATxb`@F@4V8 o'FFq-::˯4@q3d@4ɓH4!C' >Hj0- - r9 AC @(f1)Ft `Ѹ$'E@D[bC}Y  ]!M}@XC^q@,ij B9@aCt+ 0fdFIENDB`PK =$,Ct textures/Kerb/kRET_mortar150.pngPNG  IHDR VgAMA|Q cHRMz%u._:oi+"IDATxb`@F@4 G׿MV, P4k_~ƆVv`=`5 - [Æ|d6dz$s<AP@aXPrFt [A>YU >HR[- Y AI' p|ł q Jlq8 Bck,>'+!ˉs 96DJ 牦 iMIENDB`PK ,(X  textures/Kerb/kRET_mortar200.pngPNG  IHDR VgAMA|Q cHRMz%u._:oi+IDATxb`# > `OTRMV8INǯ_q";TN?Hm,<A yRܕZѱc#X#F ~I`5 C &Z@c|+ @rHAIQ@ij@@ @jƭ q<)bd߂h$A,H\ qX( `X|; 0@ubPF&z<8acPTOFsx%2GN4 T* 6K!*IENDB`PK ,Dnn textures/Kerb/kRET_mortar250.pngPNG  IHDR VgAMA|Q cHRMz%u._:oi+QIDATxb`# > `OxzPMVduCWVuta* P@2XբCEP ġ! Ѓ_ g0"|K [A y:Bٷ bBq Jx@ 腅&@=v4$`#ԁ$RP&dolq OJ&Dv0̀ډs *ָĂ ;d1r- \57;IENDB`PK 5*,!Q textures/Kerb/kRET_mortar300.pngPNG  IHDR VgAMA|Q cHRMz%u._:oi+IDATxb`# > qx݊&*@:q+_-NJATN?HmLA yRܕZX$2=y9XAPV@rD< dT [A|8Hu{,{BAF$'E@!K} HqrX )$0KĪ 49p)NwJ9@1,|N@ 8†8i$*%@$<NIENDB`PK ;*,ˏ"c textures/Kerb/kRET_mortar350.pngPNG  IHDR VgAMA|Q cHRMz%u._:oi+6IDATxb`# > qx(%j2񷢩ۊ `tʸW˱bf\ P@2XV8 o3 P,v,q_qHBKvWڛ >H$O:dHh[nod$A|8`AB%- U ­ >H$O:b@k8Ft 4" q<)%qa 6R`DL-. w6L8 < Hi `zrl{IENDB`PK ,,w> textures/Kerb/kRET_mortar425.pngPNG  IHDR VgAMA|Q cHRMz%u._:oi+ IDATxb`@]@x4cO4=i`@(;;/ZSh$%q+bX_ u -I l1ll@kH Y z#d5,GWn1@1 [5Ԁx,Aai PF\ ٷ bBql w@GFogAC0R;H(ALAIt5qĹ4"[Jȼxt>n9xRr<69l> -'"mD!pJD;l1@yy:ӆIENDB`PK +,$Avvtextures/Kerb/kRET_mortar50.pngPNG  IHDR VgAMA|Q cHRMz%u._:oi+IDATxb`x b#ToES: `ٕ28vE,0Pd؝VA|8HXKrq-qGF @jC7K4˃h$uQ!@C5c !"ZXPoAАJD=a@A ) A 4@XBAZ@0A ij P\ǣq@pck,>jj "6Aj >g_yJ `^IENDB`PK ,!textures/Kerb/kRET_mortarTick.pngPNG  IHDR S. gAMA|Q cHRMz%u._:oi+eIDATxb`  lD-Ѐ; @d4&Ü {&vYDcH`8$3@vЀ@oJ4w@ >sIENDB`PK , textures/PK , Ascripts/Kerb/PK ,l<l< +scripts/Kerb/kScriptOptions.csPK Ud--_ <scripts/Kerb/kScript.csPK ˫,Cӯ22 scripts/Kerb/kScriptReticles.csPK E)d-[r>0>0 scripts/Kerb/loadout.csPK ,Ascripts/PK ,Atextures/Kerb/PK 4%,҄ww textures/Kerb/kRET_grenade50.pngPK 1$,O:H6! textures/Kerb/kRET_grenade150.pngPK ,z! k textures/Kerb/kRET_grenade200.pngPK J,,ϱ tt! 8textures/Kerb/kRET_grenade225.pngPK -$,[ii! textures/Kerb/kRET_grenade100.pngPK ,x" textures/Kerb/kRET_grenadeTick.pngPK 8$,qii textures/Kerb/kRET_mortar100.pngPK =$,Ct Ttextures/Kerb/kRET_mortar150.pngPK ,(X  )textures/Kerb/kRET_mortar200.pngPK ,Dnn textures/Kerb/kRET_mortar250.pngPK 5*,!Q textures/Kerb/kRET_mortar300.pngPK ;*,ˏ"c textures/Kerb/kRET_mortar350.pngPK ,`ll textures/Kerb/kRET_mortar400.pngPK ,,w> Qtextures/Kerb/kRET_mortar425.pngPK +,$Avv $!textures/Kerb/kRET_mortar50.pngPK ,! "textures/Kerb/kRET_mortarTick.pngPK , A#textures/PK$