Please consider supporting The Cutting Room Floor on Patreon. Thanks for all your support!

SWAT 4

From The Cutting Room Floor
Jump to: navigation, search

Click to upload a new image...Dummy link

SWAT 4

Developer: Irrational Games
Publisher: Vivendi Universal Games
Platform: Windows
Released in US: April 5, 2005
Released in EU: April 8, 2005


DevTextIcon.png This game has hidden development-related text.
ObjectIcon.png This game has unused objects.
GraphicsIcon.png This game has unused graphics.
SoundIcon.png This game has unused sounds.
DebugIcon.png This game has debugging material.
Carts.png This game has revisional differences.


Hmmm...
To do:
Graphic and sound rips.

SWAT 4 is Irrational Games' take on the tactical police shooter, though most players would rather abuse the taser and pepper spray than act like actual police officers.

Equipment

SWAT4-equip m1super90.png

Icons and models exist for a Benelli M1Super90. The model looks nearly identical to the M4Super90, with a missing shell rack and different stock. The M1Super90 model is reused as a suspect-specific weapon. The icon implies that this was once intended to be a player-usable weapon, but perhaps dropped due to similarities to the M4Super90 outlined above.

SWAT4-equip RedSmoke.png SWAT4-equip Frag.png

An icon exists for a red smoke grenade item. While it doesn't appear in the game, a red smoke effect is used to mark the escape zone in VIP Escort.

SWAT4-equip flexcuffs.png Equip GlowStick.jpg SWAT4-equip toolkit.png

Curiously, icons exist for pieces of equipment that the player always has equipped - handcuffs and multitool - but these aren't used. The expansion doubled down on this logic by adding another such icon for the lightstick that isn't used.

SWAT4-paperdoll.png SWAT4-paperdoll shotgun.png

The gui_tex.utx package contains a number of interesting things, including the images described above, but also an early version of the paperdoll. This version has a different appearance based on the weapon choice of the player.

Gameplay

The game notably has a few features which were cut at the last minute before release. All of this functionality has been restored by player-created mods.

Swat4Traps-1.jpg Swat4Traps-2.jpg Swat4Traps-3.jpg

It's evident that traps were cut very late in development. There are at least three different trap models (a door-rigged alarm, door-rigged bomb, and free-standing bomb, triggered by a switch), and several classes (BoobyTrapRoster, BoobyTrap, ...) that give credence to this. On Children of Taronne Tenement, one door is assigned a label "AltarTrap" and another is assigned "BigRoomTrap". On Northside Vending and Amusements, the door leading to the laundromat is assigned the label "TrappedDoor". Additionally, the mission briefings for these missions both mention that traps are a possibility. If that wasn't enough, there's scripted conversations that were set to happen when a trap is tripped.

The expansion also has a Speech Recognition feature. This would've allowed the player to issue commands using their voice. The feature can be turned on using console commands, or by adding some data to SwatGui.ini.

Audio

Hmmm...
To do:
Rip out all of the audio, there are tons of lines missing.

The game has a lot of unused speech, all in .ogg format.

Ventura Suites

An audio file exists that mentions the Ventura Grand Suites (Ventura Hotel) from SWAT 3. It would've played in the elevator, similar to one that plays in the level Old Granite Hotel. The audio is very similar to the one in Old Granite Hotel and seems to be spoken by the same person, lending credence to the idea that this was originally the working name for that level:

c09.wav (unused): "Welcome to Ventura Grand Suites. For your dining pleasure, the Santa Fe Lounge is open until midnight on the first floor mezzanine and features the spirits and cuisine of the American Southwest. For something lighter, enjoy fine dining poolside at the marina cafe. Thank you for choosing Ventura Grand Suites!"

HotelElevVO.ogg (used): "Welcome to the Old Granite Hotel. For your dining pleasure, the continental lounge is open until midnight on the first floor mezzanine. For something light, enjoy fine dining poolside at the marina cafe. Thank you for choosing the Old Granite Hotel!"


Disable Bomb command

The game just uses a generic "Disable" speech line, and only two variants. For reasons unknown, they also recorded seven variants for disabling bombs that never got used. Above is two of them.

Disable Trap command

Since traps got removed, this command got removed as well. Likewise, there's another six lines of dialogue that aren't used.

Examine command

This command does not appear to work correctly, but the audio still exists.

It's unclear what this command was actually used for, but the editor seems to indicate that any actor can be examinable.

After an AI-controlled officer examines a door, they can either report that a trap has already gone off on the door, the door is not trapped, or that an undisabled trap was found on the door. Each sample above is an example of these, respectively. There are over 45 lines that are not used here.

Debugging

Cheat Codes

If cheat functions are enabled in Swat4.ini (or if using the expansion, Swat4x.ini), the player has access to a number of debugging features. There is a console command "help" which is supposed to display a list of commands, but doesn't. Instead it logs the list of commands to Swat4.log (or if using the expansion, Swat4x.log).

// Prints a list of all available SwatCheatManager exec functions
exec function Help()  
{	
	log("--------------------------------------------------------------------");
	log("              SwatCheatManager available functions");
	log("--------------------------------------------------------------------");
	log("");
	log("---------- QA stuff ----------");
	log("");
	log("Loc: Print player location/rotation to the log file"); // in SwatGamePlayerController.uc
	log("OpenDoorsToLeft: Opens all doors in the level to the left");
	log("OpenDoorsToRight: Opens all doors in the level to the right");
	log("");
	log("---------- HUD/GUI stuff ----------");
	log("");
	log("ToggleGUI: Turn GUI/HUD rendering on/off"); // in SwatHUD.uc
	log("ShowHands or HandsDown: Turn First-person hands & weapon rendering on/off"); // in SwatGamePlayerController.uc
	log("ToggleWatermark: Turn screenshot watermark (version, %complete, etc) on/off"); // in SwatCheatManager.cpp
	log("");
	log("---------- AI stuff ----------");
	log("");
	log("HideAI: Hides all AIs");
	log("ShowAI: Shows hidden AIs");
	log("DebugAIs: Turn on/off AI debug info");
	log("DebugTyrion: Turn on/off all Tyrion debug info");
	log("DebugTyrionCharacter: Turn on/off Tyrion Character debug info");
	log("DebugTyrionMovement: Turn on/off Tyrion Movement debug info");
	log("DebugTyrionWeapon: Turn on/off Tyrion Weapon debug info");
	log("DisableVision <optional: AI Class (ie. SwatEnemy)>: Disables AI vision");
	log("EnableVision <optional: AI Class (ie. SwatEnemy)>: Enables vision for AIs whose vision has been disabled");
	log("DisableHearing <optional: AI Class (ie. SwatEnemy)>: Disables AI hearing");
	log("EnableHearing <optional: AI Class (ie. SwatEnemy)>: Enables hearing for AIs whose hearing has been disabled");
	log("ToggleAIHiddenState: Toggle between ShowAI/HideAI");
	log("DebugMorale: Turn on/off morale debugging info");
	log("EveryoneComply: Asks all enemy/hostage AIs to comply");
	log("DisableAwareness <optional: AI Class (ie. SwatEnemy)>: Disables the awareness system of AIs");
	log("EnableAwareness <optional: AI Class (ie. SwatEnemy)>: Enables the awareness system of AIs whose awareness has been disabled");
	log("DisableCollisionAvoidance <optional: AI Class (ie. SwatEnemy)>: Disables collision avoidance");
	log("EnableCollisionAvoidance <optional: AI Class (ie. SwatEnemy)>: Enables collision avoidance");
	log("MakeAIGod <optional: AI Class (ie. SwatEnemy)>: Makes particular types unhurtable (defaults to all AIs)");
	log("");
	log("---------- Cover stuff ----------");
	log("");
	log("DebugCover <name of pawn taking cover>: Shows 'true' cover area for specified pawn (i.e., intersection of per-officer cover extrusions)");
	log("DebugCover2 <name of pawn taking cover>: 'DebugCover' functionality PLUS per-officer cover extrusions for cover plane");
	log("DebugCover3 <name of pawn taking cover>: 'DebugCover2' functionality PLUS extrusion from each officer to the cover plane");
	log("");
	log("---------- Weapon stuff ----------");
	log("");
    log("DebugBallistics: Toggles debugging ballistics on and off.  When on, ballistics information will be logged for each shot fired.");
    log("UseAmmo <Ammo class>: Use the specified ammunition class with your current weapon, Eg. 'useammo fullmetaljacket'");
    log("ToggleRecoil: Turns recoil on and off");
    log("FlashlightLines <0 or 1>: Turns debug flashlight lines on and off");
    log("FlashlightFancy <0 or 1>: Selects Flashlight spot lights (true) or point lights (false)");
    log("DebugGrenades: Toggles debugging of grenades on and off.  When on, trajectories and radii of affect are drawn.");
	log("");
	log("---------- Weapon ScreenEffect stuff ----------");
	log("");
    log("GetSprayed:   Runs camera effect for Pepper Spray (with 0 damage).");
    log("GetGassed:    Runs camera effect for CS Gas (similar to Pepper Spray) (with 0 damage).");
    log("GetTased:     Runs camera effect for Taser (with 0 damage).");
    log("GetStung:     Runs camera effect for Sting Grenade (with 0 damage).");
    log("GetLLShotgun: Runs camera effect for Less Lethal Shotgun (similar to Sting Grenade) (with 0 damage).");
 	log("---------- For editing ScreenEffect Parameters:");
    log("editClass paramsClass: Where paramsClass is one of: ");
	log("  DesignerStingParams, DesignerPepperSprayParams, DesignerCSGasParams, DesignerLessLethalSGParams");
	log("");
	log("---------- Archetypes/Spawning stuff ----------");
	log("");
    log("SummonArchetype <'Enemy' / 'Hostage' / 'Inanimate'>, <Archetype name>: Spawns an instance of the specified archetype in front of the player.  Eg. 'summonarchetype enemy arms_dealer'");
    log("TestSpawn <Count>: Simulate spawning for the current level Count times.  Nothing is actually spawned.  But results of the simulation are logged.");    //TMC TODO make count=0 do 'allspawn'
    log("TestSpawn (no count): Spawn a 'TestSpawn' Archetype at each Enemy and Hostage Spawner.");
	log("UsePrimaryEntry <1 or 0>: if 1, singleplayer missions will use the primary entry point. If 0, they will use the secondary entry point");
	log("");
	log("---------- Sound/Visual FX stuff ----------");
	log("");
    log("DebugEffectEvent <EffectEvent>: log the details of TriggerEffectEvent() each time EffectEvent is triggered.");
    log("DumpEffects <'Visual' / 'Sound'>: Logs the state of the specified effects subsystem.");
	log("");
	log("---------- Leadership/Objectives stuff ----------");
	log("");
    log("MissionStatus: Log the current mission status");
    log("LeadershipStatus: Log the current leadership status & scores");
	log("");
    log("---------- Rendering Stuff ----------");
	log("");
    log("RenderDetail <0-3>: Globally adjusts ALL other rendering settings; 3 is highest detail, 0 is lowest");
    log("TextureDetail <0-3>: Changes texture detail (size); 3 is highest detail, 0 is lowest");
    log("BumpDetail <0-3>: Changes bumpmapping settings. 3 = characters+staticmesh+bsp+emitters, 2 = characters+staticmesh; 1 = static mesh, 0 = nothing");
	log("");
    log("---------- Profiling Stuff ----------");
	log("");
    log("EnableProfile: Turn on profiling of function calls");
    log("TickProfile: Enable profiling of time spent in Tick() on a per-class basis");
    log("ResetProfile: Rest the profiling stats");
    log("LogProfile: Dump the current profile to the log");
	log("");
    log("---------- Debugging Stuff ----------");
	log("");
    log("stat anim: Show details on what animations are playing");
    log("show projectorbounds: Show bounds of projectors in-game.");
    log("show actors: turn on/off rendering of actors");
    log("show actorinfo: turn on/off rendering of actor info");
    log("show staticmesh: turn on/off rendering of static meshes");
    log("show fog: turn on/off rendering of fog");
    log("show sky: turn on/off rendering of skyzone");
    log("show corona: turn on/off rendering of coronas");
    log("show particle: turn on/off rendering of particles");
    log("show bsp: turn on/off rendering of bsp surfaces");
    log("show radii: turn on/off rendering of radii for things using cylinder collision");
    log("show fluid: turn on/off rendering of fluid surfaces");
    log("show projector: turn on/off rendering of dynamic projectors");
    log("show collision: Show non-havok collision bounds. Dynamic objects are in pink. Also show bone collision boxes.");
    log("rend collision: Show pawn collision. If pawn is on top of something, show that thing in yellow and draw line to it");
    log("AnimDrawDebugLines: Show where the pawns should be aiming");
    log("DebugAIMovement: Show where the AIs think they are going");
    log("rend bound: Show the rendering bounding sphere/box for skeletal");
    log("            meshes (blue), the render bounding box for static meshes (green),");
    log("            the predicted render bounding box (red) and the emitter bounds (yellow)");
    log("ListVisibleSprites: writes to the log the identity of any 'dragon-camel' icons appearing in the game.");
	log("");
    log("--------------------------------------------------------------------");
}

Most of this is pretty obvious stuff, but there's a few specific points of interest:

* DebugTyrion shows the Tyrion AI debugging information. On each AI in the game, there is a listing of each individual set of goals that an AI will try to accomplish (like "AimAroundGoal").
* DebugMorale shows a meter over each AI indicating how close they are to giving up.

Battleroom

By entering "battleroom" into the console (with cheats enabled in Swat4.ini/Swat4x.ini), the player is taken to a top-down style of interface. By clicking on an AI, they are selected. By clicking in an unoccupied area, the selected AI will be teleported to the clicked area. There are five black lines (supposed to be "buttons") that don't do anything when clicked, although judging by the code they are supposed to: "Toggle god," "Toggle Debug," "1000 Health," "Boost Morale" and "Cancel," respectively.

GUI Editor

In GuiBase.ini, changing "bModAuthor=False" to "bModAuthor=True" will enable the ingame's GUI editor. Pressing CTRL+ALT+D will bring it up, and H will show the controls (after it is enabled). Any changes made with the GUI editor will work in multiplayer without disconnecting the player, although bModAuthor will need to be set to False again.

Unused Characters

Hmmm...
To do:
Get pictures of all of these characters.

All of these characters can be spawned with the SummonArchetype Enemy or SummonArchetype Hostage console command (detailed above). This is not including ones which appear in the Quick Mission Maker, but don't spawn normally.

Suspects

  • Test_NewGuy / Test_NewGuy2 - Versions of the Stetchkov gang members who use the generic suspect lines instead of the special Stetchkov ones.
  • Subway_Bulgarian_Wounded1 / Subway_Bulgarian_Wounded2 - Versions of the Stetchkov gang members, for Fresnal St. Station, which would've spawned as wounded versions of the regular suspects.
  • DNA_Terrorist_Helmet - Despite the name, they don't actually wear helmets. Presumably they would've appeared in Mt. Threshold Research Center, based on their position in the text.
  • TestSpawn
  • TestGuard
  • Crombie_TestGang / Crombie_TestCompliantEnemy / Crombie_TestGangNoPrimaryWeapon / Crombie_TestFemaleEnemy / Crombie_TestTerrorist / Crombie_TestShotgunGuy / Crombie_TestGasMask - Testing archetypes created by a guy named Crombie. The Gas Mask one is notable for wearing a hat and a gas mask at the same time, which is not seen ingame normally.
  • Coop_unarmed / Coop_armed - Suspects who look like SWAT officers.
  • Test_MachineGunGuy - Special testing character for the SwatWildGunner in the expansion. His Quick Mission Maker description is listed as "I'm cr-cr-crazy!"
  • Test_Escaper - Special testing character for the Escaper in the expansion. His Quick Mission Maker description is listed as "Escape test".
  • Test_EvidenceDestroyGuy - Special testing character for the Flusher in the expansion. His Quick Mission Maker description is listed as "Evidence destruction test".

Civilians

  • Jewelry_Security - A female civilian that would've appeared on DuPlessi's Wholesale Diamonds. It's a copy of one of the female nurses from the hospital mission.
  • RedLibrary_Male_Suit - A male civilian from Red Library that wears a suit, if it wasn't apparent.
  • TestSpawn - Uses the same mesh and textures as the Suspect TestSpawn.
  • Crombie_TestJanitor / Crombie_TheHostageThatWouldntComply / Crombie_OfficerMesh - Testing archetypes for various game features created by a guy named Crombie.
  • Shawn_TestGuyA / Shawn_TestGuyB

Unused Objects

These can be spawned using the SummonArchetype Inanimate console command (see above for more details):

  • WallBomb - A disarmable bomb that is meant to be on walls. The mesh name is associated with Red Library Offices, which is unusual since that mission doesn't have bombs on it.
  • Dead_TerroristOne / Dead_MaleBrownCoat - Dead bodies (DOAs) that can be reported to TOC. Only the hospital mission's DOAs are used.

Revisional Differences

The 1.1 patch (for Vanilla SWAT 4) added ingame advertisements through the Massive advertisement service. While these advertisements no longer function and Massive has shut down, this is notable for being one of the first appearances of dynamic content served through in-game advertising. The patch also reduced the damage on the .45 SMG JHP rounds and added the maps MP-ConvenienceStore, MP-Hotel and MP-JewelryHeist.