Hacks

This chapter documents the functionality and configuration (if any) of each of the Mod Launcher's hacks.

Included Hacks

This is a list of all the included Mod Launcher hacks and whether they are requirable, tickable and/or always enabled as well as their initial release version and last release (if applicable).

Hack Name Requirable Tickable Always Enabled Added In Removed In
3D Phone Booth Preview Support ✔️     1.18  
Additional Script Functionality ✔️     1.18   
Anti-aliasing   ✔️   1.21  
Aspect Ratio Support ⚠️1 ✔️   1.15  
Borderless   ✔️   1.13.1  
Bug Fixes   ✔️   1.15  
Cancellable Initial Walk   ✔️   1.20  
Cheat Keys   ✔️   1.23  
Console   ✔️   1.9  
Custom Animation Set Support ✔️     1.4  
Custom Audio Format Support ⚠️1     1.18  
Custom Audio Support ✔️     1.18  
Custom Bonus Mission Support ✔️     1.14  
Custom Car Shop Support ⚠️2     1.12 Legacy as of 1.18

Custom Car Support

✔️     1.16

 

Custom Character Support

✔️     1.17  
Custom Controller Support ⚠️1     1.23  
Custom Dialogue Character Codes ✔️     1.12  
Custom Files ✔️     1.23  
Custom Headlights ✔️     1.23  
Custom Interior Support ✔️     1.17  
Custom License Screen Time ✔️     1.5  
Custom Limits ✔️     1.14  
Custom Main Menu items ⚠️1        
Custom Mission Skip Fail Counts ✔️     1.5  
Custom Road Behaviour ✔️     1.16  
Custom Save Data ⚠️1   ✔️ 1.17  
Custom Shop Support ✔️     1.18  
Custom Skin Preview Animations ✔️     1.23  
Custom Stats Totals ✔️     1.6  
Custom Terra Files ✔️     1.23 Removed in 1.5
Custom Text ✔️     1.23  
Custom Traffic Support ✔️     1.22  
Custom Trigger Actions ✔️     1.20  
Debug Checks   ✔️   1.17  
Debug Communication     ✔️  1.17.1  
Debug Hashes ⚠️1 ✔️    1.17  
Debug Test   ✔️   1.17  
Debug Text   ✔️   1.17  
Direct3D 9   ✔️   1.23  
Discord Rich Presence   ✔️   1.16.3  
Dynamic Tree Node Entity Limits ✔️     1.22  
FLAC Support ✔️     1.18  
Flippable Cars   ✔️   1.12  
Force Mission Select Level Reload   ✔️   1.18  
Frame Limiter   ✔️   1.10  
Free Roam   ✔️   1.21  
Hack Support ✔️   ✔️ 1.23  
HUD Map Ignore Player Height ✔️     1.16.1  
Increased Reward Limits ✔️      1.17  
Increased Video Resolution Support ✔️     1.11  
Interior Jumping   ✔️   1.10  
Interior Kicking   ✔️   1.10  
Interior Sprinting   ✔️   1.10  
Interprocess Communication ⚠️1     1.17.1  
Letterbox   ✔️   1.20  
Lens Flare   ✔️   1.19  
Lua Support ⚠️1     1.12  
Mirror Mode   ✔️   1.22  
Modern Computer Support     ✔️ 1.23  
Modern Resolution Support     ✔️ 1.10  
Multiple Instance Support   ✔️   1.23  
No Automatic Saved Game Load ✔️ ✔️   1.12  
No Cheats ✔️ ✔️   1.5  
No Cursor Until Mouse Move   ✔️   1.18  
No Fast Car Reset ✔️ ✔️   1.4  
No Go To Objective Camera Focus   ✔️   1.20  
No Inactive Dynamic Object Collisions ✔️ ✔️   1.16  
No Introduction Movies   ✔️   1.15  
No Jump Limit   ✔️   1.4  
No Main Menu Camera Animations ✔️ ✔️   1.20  
No Mission Start Cameras ✔️ ✔️   1.16  
No Mute On Defocus   ✔️   1.18  
No Neither Road Arrow Processing ✔️     1.21  
No Pause On Defocus   ✔️   1.18  
No Saved Games ✔️ ✔️   1.21  
No Suppressed Drivers   ✔️   1.18  
No Time Limits   ✔️   1.12  
No Wrenches  ✔️ ✔️   1.20  
NVIDIA Highlights   ✔️   1.18  
Ogg Vorbis Support ✔️     1.18  
One Tap Player Car Death   ✔️   1.20  
Override Shader Parameters ✔️     1.20.1  
Replayable Bonus Missions ✔️ ✔️   1.12  
Resizable Window   ✔️   1.16  
Road Names ⚠️1     1.16  
Screenshots   ✔️   1.4  
Skip Main Menu   ✔️   1.18  
Skippable Start Cameras   ✔️   1.18  
Starting Coins   ✔️   1.18  
Unlock All Missions ✔️ ✔️   1.14  
Unlock All Outfits ✔️     1.14  
Unlock All Vehicles ✔️     1.14  
Unlock Bonus Game ✔️     1.14  
Video Texture Support ✔️     1.19  
Widescreen   ✔️   1.10 Removed in 1.15
XInput   ✔️   1.23  

1 These hacks are only requirable by other hacks.

2 This hack is a legacy hack that can still be required by mods for backwards compatibility but it is no longer intended to be required by new mods going forward.

3 This hack was added in 1.2 or earlier. We don't have information further back than this version.

About 3D Phone Booth Preview Support

Synopsis

This hack allows mods to have 3D previews in the phone booth in place of the usual 2D sprites.

Configuration

This is an example configuration for this hack with comments explaining how it works.

This configuration file goes into 3DPhoneBoothPreviewSupport.ini in the root of your mod.

We do not recommend copying this entire example into your mod. We recommend only using what is necessary.

[Miscellaneous]
; BackgroundPath
;	The path to the P3D file containing the background of the scene.
; 	Defaults to art\\frontend\\scrooby\\resource\\pure3d\\rewardbg.p3d
BackgroundPath=art\\frontend\\scrooby\\resource\\pure3d\\rewardbg.p3d

; DarkenLockedCars
;	Set whether or not to darken cars that are not unlocked yet.
; 	Defaults to 0.
DarkenLockedCars=0

; FullScreen
;	Set whether or not the background is FullScreen.
; 	Defaults to 1.
FullScreen=1

; Radius
;	Set the radius of the cars on the pedestal.
; 	Defaults to 3.6.
Radius=3.6

Usage

Frontend Changes

This hack requires changes to the frontend file art\frontend\scrooby\ingame.p3d to function. Requiring this hack in a mod without making these changes will cause a crash when opening phone booths.

The specific changes involve adding the chunks highlighted in the image below to Phonebooth.pag.

3DPhoneBoothPreviewSupport_FrontendChanges.png

We distribute an official mod called 3D Phone Booth Previews that utilizes this hack and makes these necessary changes. It also re-configures the hack to fit it's specific implementation of the feature. If you want to implement this feature into your mod you have a few options:

  • Mods that do not modify art\frontend\scrooby\ingame.p3dshould be compatible with the 3D Phone Booth Previews mod right away.
  • Mods that do modify this file can copy the aforementioned chunks into their copy of it and addSupportedMod=3DPhoneBoothPreviews to their Meta.ini to add support for being enabled alongside that mod.
  • Mods can force this feature on by copying the chunks, requiring the hack and copying 3DPhoneBoothPreviewSupport.ini from 3D Phone Booth Previews.

Mods also need to provide car shop preview models in art\frontend\dynaload\cars for any custom cars.

This hack also requires any phone booth cars to have a preview model in art\frontend\dynaload\cars

About Aspect Ratio Support

Synopsis

This hack makes the game properly support different aspect ratios with various configuration options.

Settings

Setting Explanation
Automatic Aspect Ratio  
Aspect Ratio  

World

 
FOV > Mode  
FOV > FOV  
Bonus Game  
Front End > HUD  
Front End > Menus  
Front End > Cursor  
Front End > Movies  
Movie Letterbox Colour Changes the letterbox color used when movies are playing.

Frontend Tweaks

TODO

History

1.21

Changed the default "FOV > Mode" from "Fit" to "Average".

1.20

Added the Movie Letterbox Colour setting.

1.15

Added this hack.

About Borderless

Synopsis

Makes the game have a borderless window.

About Bug Fixes

Synopsis

Bug Fixes contains a number of different fixes for issues in the original game.

This hack can be enabled by ticking it in the Settings tab of the Mods List or via a mod requiring it explicitly (which will enable it regardless of whether or not the user has enabled it).

Settings

This is an outline of the settings for this hack.

Bug Fix Explanation
Visual > Cursor Position Fixes an issue where the cursor is positioned incorrectly when using an aspect ratio other than 1:1.
Visual > Steering Animations Fixes an issue preventing steering/swaying animations from playing.
Visual > Character Rotations Fixes issues where character rotations are handled incorrectly when standing on top of movable objects such as platforms or cars.
Visual > HUD Coin Depth Makes the coin on the HUD have depth.
Crashes > Main Menu Cheat Code Enter Crash Fixes a crash when entering a cheat code on the main menu.
Crashes > Unlock All Camera Settings Crash Fixes a crash related to the Unlock All Cameras cheat and the Settings menu is fixed.
Crashes > Late Focus Freeze

Fixes the game freezing on the license screen if it's not focused soon enough.

Crashes > Zone Load on Exit

Fixes the game crashing if it tries loading a zone on exit.

 

Only exists if using the -testing command line argument.

Crashes > Car Deleted While Loading CON File

Fixes the game crashing if a car is deleted while it's CON file is still loading.

 

Only exists if using the -testing command line argument.

Actors > Restore Wasp Collision

Fixes an issue where Wasp Collision becomes disabled entirely (until the level is reloaded) after destroying some amount of wasp cameras resulting in cars being unable to destroy them.

Vehicles > No Air Vent Audio

Fixes an issue where air vent audio still plays when driving into a vent when inside a car.

Configuration

This is an example configuration for this hack if it's required by a mod.

This configuration goes into BugFixes.ini in the root of your mod.

We do not recommend copying this entire example into your mod. We recommend only using what is necessary.

; BugFixes.ini
	; Force specific bug fixes to be enabled regardless of the user's setting.
	
; [Visual] Section
	; HUDCoinDepth: Set whether or not the coin on the HUD will have depth.
	
; [Actors] Section
	; RestoreWaspCollision: Set whether or not wasp collision gets re-enabled when spawning a wasp camera.

; [Crashes] Section
	; FixCarDeletedWhileLoadingCONFileCrash: Set whether or not the game will crash if a car is deleted before it's CON file is finished loading.
	; FixZoneLoadOnExitCrash: Set whether or not the game will crash if the game tries to load a zone while exiting.

; [Vehicles] Section
	; NoAirVentAudio: Set whether or not the game will play dialog and an air vent sound when driving into the trigger for an airvent.
	
[Visual]
HUDCoinDepth=1

[Actors]
RestoreWaspCollision=1

[Crashes]
FixCarDeletedWhileLoadingCONFileCrash=1
FixZoneLoadOnExitCrash=1

[Vehicles]
NoAirVentAudio=1

History

1.22

  • Added "Crashes > Car Deleted While Loading CON File" when using "-testing".
    • Also added a "FixCarDeletedWhileLoadingCONFileCrash" to the "[Crashes]" section of BugFixes.ini since mods are intended to opt into this.
  • Added "Crashes > Zone Load on Exit" when using "-testing".
    • Also added a "FixZoneLoadOnExitCrash" to the "[Crashes]" section of BugFixes.ini since mods are intended to opt into this.
  • Added "Vehicles > No Air Vent Audio".
    • Also added a "NoAirVentAudio" property to the "[Vehicles]" section of BugFixes.ini.

1.21

Renamed "Fix Late Focus Freeze" to "Late Focus Freeze".

1.19

  • Added "Actors" > "Restore Wasp Collision".
    • This fixes an issue where destroying a certain number of wasps disables their collision until the level is fully reloaded.
  • Changed the tooltip for "Character Rotations" to be more specific about what it does. The hack's description was also updated to reflect this change.
  • Made "Fix Steering Animations" also fix the steering/swaying animation cancelling immediately/starting again repeatedly.

1.18.2

Fixed an issue where "BugFixes.ini" wasn't required and wasn't included when compiling mods that require the hack.

1.18

  • Added a fix for a crash related to the options menu and the Unlock All Cameras cheat.
  • Added a fix for the crash that happens if the game is not focused fast enough on the license screen.
  • Moved the Main Menu Cheat Code Enter crash fix to the new Crashes group.

Before 1.18

Changes prior to this version were not adequately tracked.

About Cheat Keys

Synopsis

This hack adds a number of key binds that do various things that are effectively cheating.

Keybinds

Key Function
0 Reset your Hit & Run meter.
2 Double Speed.
3 Stop your car.
5 Invert your car's speed.
6 Repair your car.
7 Makes your car jump.
F4 Teleport your car to you.

Shows a phone booth interface if you do not already have a car.
F7 Teleport your car or character forwards.
Shift+F4 Shows a phone booth interface.

Settings

These are the settings available to configure this hack.

Setting Function Default Value
Car Teleport Forward > Distance Configure the distance that the the F7 key teleports your car forward. 8
Car Teleport Forward > Reset Camera Toggle whether or not the camera is reset when your car is teleported forwards with the F7 key. Enabled
On Foot Teleport Forward > Distance Configure the distance that the the F7 key teleports your character forward. 2
On Foot Teleport Forward > Reset Camera Toggle whether or not the camera is reset when your character is teleported fowards with the F7 key. Disabled
Continuous Makes cheat key actions happen continuously when their respective keys are pressed instead of just once. Disabled

History

1.22

Made F4 (or Shift+F4 if you already have a car) show the phone booth.

Before 1.18

Changes prior to this version were not adequately tracked.

About Console

Synopsis

This hack creates a console window that mods, hacks and the game can output to for debugging purposes.

Settings

Setting Function Default Value
Include > Game Display console logs from the original game's code in the console. Disabled
Include > Mods Display console logs from mod scripts. Enabled
Include > Hacks Display console logs from other hacks. Disabled
Pause on Exit Pauses the console after exiting the game. Disabled

About Custom Audio Support

Synopsis

This hack allows you to specify custom starting ambience tracks for every story mission and other audio related things.

Configuration

This is an example configuration for this hack with comments explaining how it works.

This configuration goes into CustomAudioSupport.xml in the root of your mod.

We do not recommend copying this entire example into your mod. We recommend only using what is necessary.

<?xml version="1.0" encoding="utf-8"?>
<CustomAudioSupport MusicSamplingRate="24000">
	<!--
	
	CustomAudioSupport.xml
		Control certain properties of the game's music system.

	<CustomAudioSupport>
		ForceMusicRMSLevel: Specify an RMS file to load at startup and use all the time. 
			This will prevent the game from ever unloading that level's RMS file.
			This means this can be used for seamless music when switching to/from the main menu and between levels.
		MusicSamplingRate: Defaults to 24,000. Optional.
		
	<Level>
		Index: The index of the level (zero-based).
		OR
		Number: The number of the level (one-based).
		
		StartAmbienceEventIndex: The ambience index that will be used for mission's that use 76 (interior).
		<Mission>
			Index: The index of the mission from 0 to 7.
				0 refers to the Tutorial in Level 1.
				0 refers to Mission 1 in Levels 2 to 7.
				7 does nothing in Levels 2 to 7 since there is only the 7 story missions and no tutorial.
			OR
			Number: Similar to index but works differently depending on the level.
				0-7 in Level 1.
				1-7 in Levels 2-7.

			StartAmbienceEventIndex: The ambience index that will be used when selecting the mission.
				76 means the mission starts in an interior and it will use the one specified on the level.
	<Interior>
		Name: The name of the interior.
		MusicEventIndex: The index of the music event to trigger when entering the interior.
		
	-->

	<Interior Name="KwikEMart" MusicEventIndex="20"/>
	<Interior Name="SpringfieldElementary" MusicEventIndex="21"/>
	<Interior Name="SimpsonsHouse" MusicEventIndex="19"/>
	<Interior Name="Krustylu" MusicEventIndex="19"/>
	<Interior Name="dmv" MusicEventIndex="23"/>
	
	<Level Index="0" StartAmbienceEventIndex="9">
		<Mission Index="0" StartAmbienceEventIndex="6" />
		<Mission Index="1" StartAmbienceEventIndex="6" />
		<Mission Index="2" StartAmbienceEventIndex="6" />
		<Mission Index="3" StartAmbienceEventIndex="6" />
		<Mission Index="4" StartAmbienceEventIndex="39" />
		<Mission Index="5" StartAmbienceEventIndex="6" />
		<Mission Index="6" StartAmbienceEventIndex="6" />
		<Mission Index="7" StartAmbienceEventIndex="26" />
	</Level>
	<Level Index="1" StartAmbienceEventIndex="7">
		<Mission Index="0" StartAmbienceEventIndex="4" />
		<Mission Index="1" StartAmbienceEventIndex="4" />
		<Mission Index="2" StartAmbienceEventIndex="4" />
		<Mission Index="3" StartAmbienceEventIndex="4" />
		<Mission Index="4" StartAmbienceEventIndex="4" />
		<Mission Index="5" StartAmbienceEventIndex="4" />
		<Mission Index="6" StartAmbienceEventIndex="4" />
		<Mission Index="7" StartAmbienceEventIndex="76" />
	</Level>
	<Level Index="2" StartAmbienceEventIndex="25">
		<Mission Index="0" StartAmbienceEventIndex="22" />
		<Mission Index="1" StartAmbienceEventIndex="22" />
		<Mission Index="2" StartAmbienceEventIndex="22" />
		<Mission Index="3" StartAmbienceEventIndex="29" />
		<Mission Index="4" StartAmbienceEventIndex="22" />
		<Mission Index="5" StartAmbienceEventIndex="24" />
		<Mission Index="6" StartAmbienceEventIndex="24" />
		<Mission Index="7" StartAmbienceEventIndex="76" />
	</Level>
	<Level Index="3" StartAmbienceEventIndex="51">
		<Mission Index="0" StartAmbienceEventIndex="76" />
		<Mission Index="1" StartAmbienceEventIndex="47" />
		<Mission Index="2" StartAmbienceEventIndex="48" />
		<Mission Index="3" StartAmbienceEventIndex="48" />
		<Mission Index="4" StartAmbienceEventIndex="48" />
		<Mission Index="5" StartAmbienceEventIndex="48" />
		<Mission Index="6" StartAmbienceEventIndex="48" />
		<Mission Index="7" StartAmbienceEventIndex="76" />
	</Level>
	<Level Index="4" StartAmbienceEventIndex="7">
		<Mission Index="0" StartAmbienceEventIndex="4" />
		<Mission Index="1" StartAmbienceEventIndex="4" />
		<Mission Index="2" StartAmbienceEventIndex="4" />
		<Mission Index="3" StartAmbienceEventIndex="4" />
		<Mission Index="4" StartAmbienceEventIndex="4" />
		<Mission Index="5" StartAmbienceEventIndex="4" />
		<Mission Index="6" StartAmbienceEventIndex="4" />
		<Mission Index="7" StartAmbienceEventIndex="76" />
	</Level>
	<Level Index="5" StartAmbienceEventIndex="70">
		<Mission Index="0" StartAmbienceEventIndex="67" />
		<Mission Index="1" StartAmbienceEventIndex="67" />
		<Mission Index="2" StartAmbienceEventIndex="64" />
		<Mission Index="3" StartAmbienceEventIndex="47" />
		<Mission Index="4" StartAmbienceEventIndex="64" />
		<Mission Index="5" StartAmbienceEventIndex="67" />
		<Mission Index="6" StartAmbienceEventIndex="67" />
		<Mission Index="7" StartAmbienceEventIndex="76" />
	</Level>
	<Level Index="6" StartAmbienceEventIndex="53">
		<Mission Index="0" StartAmbienceEventIndex="76" />
		<Mission Index="1" StartAmbienceEventIndex="57" />
		<Mission Index="2" StartAmbienceEventIndex="50" />
		<Mission Index="3" StartAmbienceEventIndex="76" />
		<Mission Index="4" StartAmbienceEventIndex="76" />
		<Mission Index="5" StartAmbienceEventIndex="57" />
		<Mission Index="6" StartAmbienceEventIndex="57" />
		<Mission Index="7" StartAmbienceEventIndex="76" />
	</Level>
</CustomAudioSupport>

History

1.22

Added support for a "Number" parameter on "Level" and "Mission" elements.

1.18

Added this hack.

About Custom Car Support

Synopsis

This hack adds support for setting various parameters of custom cars.

Command Line Arguments

This hack is affected by certain Command Line Arguments for the Mod Launcher.

Configuration

This is an example configuration for this hack with comments explaining how it works.

This configuration file goes into CustomCarSupport.ini in the root of your mod.

We do not recommend copying this entire example into your mod. We recommend only using what is necessary.

; CustomCarSupport
	; Define custom cars and control certain special properties about them.

; [CARNAME] Section: Section for the car, replace CARNAME accordingly.
	; Index: Index for the car's cameras, these have to be edited in the car's P3D file as well.
	; Abductable: Sets whether or not a car can be abducted by the UFO.
	; NoHusk: Sets whether the car will leave a husk behind or not when it explodes.
	; NoSkidMarks: Sets whether or not show all the skid marks.
	; NoFrontSkidMarks: Sets whether or not to show the front skid marks.
	; ShadowVisible: Sets whether or not to show the shadow.
	; Recolourable: Sets whether or not to allow the vehicle to be recoloured (only works for Traffic Vehicles).
	; PreviewScale: Set the scale of the car in car shops and the phonebooth (if 3DPhoneBoothPreviewSupport is enabled).
	
; Notes
	; Defaults depend on the vehicle.

[famil_v]
; These are the defaults for the Family Sedan (famil_v).
Index=4
Abductable=1
NoHusk=0
NoSkidMarks=0
NoFrontSkidMarks=0
ShadowVisible=1
Recolourable=0
PreviewScale=1

History

1.22

General

Fixed an issue preventing Car Camera Data index remapping from working for cars loaded from a Mod's Resources folder (and possibly other locations).

Command Line Arguments

Added "-nocarindexmapping" command line argument. This disables the hack re-mapping car indices.

1.18

Added the "PreviewScale" property. This allows you to set a custom scale for the car when it's in a car shop.

Before 1.18

About Custom Character Support

Synopsis

Custom Character Support allows you to enable certain features on specific characters.

Configuration

This hack uses an INI file for configuration. This is an example.

This configuration file goes into CustomCharacterSupport.ini in the root of your mod.

We do not recommend copying this entire example into your mod. We recommend only using what is necessary.

[CHARNAME]
; BlendModeSupport Boolean
;	Enabling this will allow the use of Additive and Subtractive shaders on this character.
BlendModeSupport=1

; IsLisa Boolean
;	Enabling this will make the character get placed 0.12 meters higher in either seat of a car.
;	Enabled by default for "lisa" or any character whose name begins with "l_".
IsLisa=1

; IsMarge Boolean
;	Enabling this will stop joints 33, 34 and 35 of the skeleton (usually Marge's hair) from getting bent down in a car that has SetHighRoof set to 0.
;	Enabled by default for "marge" or any character whose name begins with "m_".
IsMarge=1

About Custom Headlights

Synopsis

Custom Headlights allows you to specify a custom brightness level for headlights and taillights on cars in both the regular game levels and the bonus game levels.

Configuration

This is an example configuration for this hack with comments explaining how it works.

This configuration file goes into CustomHeadlights.ini in the root of your mod.

We do not recommend copying this entire example into your mod. We recommend only using what is necessary.

[CustomHeadlights]
; Default Headlight Brightness for Main Levels 1-7. Valid values are from 0 to 1.
0=0
1=0
2=0.2
3=0.6
4=0.4
5=0.4
6=0.6

; Default Headlight Brightness for Bonus Game Levels 1-7. Valid values are from 0 to 1.
8=1
9=1
10=1
11=1
12=1
13=1
14=1

[CustomTaillights]
; Default Taillight Brightness for Main Levels 1-7. Valid values are from 0 to 1.
0=0
1=0
2=0.3
3=0.4
4=0.4
5=0.4
6=0.4

; Default Taillight Brightness for Bonus Game Levels 1-7. Valid values are from 0 to 1.
8=0.4
9=0.4
10=0.4
11=0.4
12=0.4
13=0.4
14=0.4

About Custom Interior Support

Synopsis

This hack adds the ability to modify interior definitions and add custom ones.

Configuration

This is an example configuration for this hack with comments explaining how it works.

This configuration file goes into CustomInteriorSupport.ini in the root of your mod

We do not recommend copying this entire example into your mod. We recommend only using what is necessary.

; [Interior] Section
	; Name: The name of the interior. Used in Interior Entrance locators.
	; Level: Specify what Level the interior is in. Repeat for each level.
	; ResetAmbientCharacter: Specify an Ambient Character who will have their position reset when you enter the interior. Repeat for each character.
	; ShapeType: The type of shape that represents the area the interior encompasses.
		; Sphere: Use a sphere to define where the interior is.
		; Box: Use a box to define where the interior is.
		
		; Sphere ShapeType
	; X: The X position of the sphere.
	; Y: The Y position of the sphere.
	; Z: The Z position of the sphere.
	; Radius: The radius of the sphere.
	
		; Box ShapeType
	; MinX: The minimum X position in the box.
	; MinY: The minimum Y position in the box.
	; MinZ: The minimum Z position in the box.
	; MaxX: The maximum X position in the box.
	; MaxY: The maximum Y position in the box.
	; MaxZ: The maximum Z position in the box.
	
		; Mirror
	; MirrorXX
	; MirrorXY
	; MirrorXZ
	; MirrorXW
	; MirrorYX
	; MirrorYY
	; MirrorYZ
	; MirrorYW
	; MirrorZX
	; MirrorZY
	; MirrorZZ
	; MirrorZW
	; MirrorWX
	; MirrorWY
	; MirrorWZ
	; MirrorWW
	
[Interior]
Name=SpringfieldElementary
ShapeType=Sphere
X=500.0
Y=-20.0
Z=-350.0
Radius=24.0
Level=1
Level=4
Level=7

[Interior]
Name=KwikEMart
ShapeType=Sphere
X=500.0
Y=-20.0
Z=-300.0
Radius=24.0
Level=1
Level=4
Level=7

[Interior]
Name=SimpsonsHouse
ShapeType=Sphere
X=500.0
Y=-20.0
Z=-400.0
Radius=24.0
Level=1
Level=4
Level=7

[Interior]
Name=dmv
ShapeType=Sphere
X=0.0
Y=-20.0
Z=-200.0
Radius=24.0
Level=2
Level=5

[Interior]
Name=moe1
ShapeType=Sphere
X=50.0
Y=-20.0
Z=-200.0
Radius=24.0
Level=2
Level=5
MirrorXX=-1.0
MirrorXY=0.0
MirrorXZ=0.0
MirrorXW=0.0
MirrorYX=0.0
MirrorYY=1.0
MirrorYZ=0.0
MirrorYW=0.0
MirrorZX=0.0
MirrorZY=0.0
MirrorZZ=1.0
MirrorZW=0.0
MirrorWX=109.5
MirrorWY=0.0
MirrorWZ=0.0
MirrorWW=1.0
ResetAmbientCharacter=moe

[Interior]
Name=Android
ShapeType=Sphere
X=0.0
Y=-20.0
Z=-350.0
Radius=24.0
Level=3
Level=6

[Interior]
Name=Observatory
ShapeType=Sphere
X=150.0
Y=-20.0
Z=-350.0
Radius=24.0
Level=3
Level=6

[Interior]
Name=bartroom
ShapeType=Sphere
X=500.0
Y=-20.0
Z=-450.0
Radius=24.0
Level=1
Level=4
Level=7
MirrorXX=1.0
MirrorXY=0.0
MirrorXZ=0.0
MirrorXW=0.0
MirrorYX=0.0
MirrorYY=1.0
MirrorYZ=0.0
MirrorYW=0.0
MirrorZX=0.0
MirrorZY=0.0
MirrorZZ=-1.0
MirrorZW=0.0
MirrorWX=0.0
MirrorWY=0.0
MirrorWZ=-894.0
MirrorWW=1.0

Usage

Due to the nature of how interiors work, you need to re-define all of an interior's definition in your mod to make changes to it.

For example, to remove an interior definition from a particular Level, you'd need to copy the entire definition for it omitting the Level you want to take it out of.

[Interior]
Name=SpringfieldElementary
ShapeType=Sphere
X=500.0
Y=-20.0
Z=-350.0
Radius=24.0
Level=1

; Remove this interior definition from Level 4.
;Level=4
Level=7

About Custom Limits

Synopsis

Custom Limits allows to define custom caps on the amounts of various things.

Configuration

This is an example configuration for this hack if it's required by a mod.

This configuration goes into CustomLimits.ini in the root of your mod.

We do not recommend copying this entire example into your mod. We recommend only using what is necessary.

; CustomLimits.ini
	; Define custom limits to change what the game is capable of handling.

; [Miscellaneous] Section
	; DeletedEntityLimit: Change the amount of entities that can be deleted at one time. Defaults to 5000.
	; PathLimit: Change the maximum amount of pedstrian paths that can exist. Defaults to 125.
	; CarLimit: Change the maximum amount of cars. Defaults to 30 and can only be set up to 127.
	; ActionButtonLimit: Change the maximum amount of action buttons. Must be divisible by 8.
	
; [Roads] Section
	; CubeShapeLimit: The maximum amount of Cube Shapes that can exist. Defaults to 1200.
	; RoadLimit: The maximum amount of Roads that can exist. Defaults to 150.
	; IntersectionLimit: The maximum amount of Intersections that can exist. Defaults to 60.
	; RoadSegmentLimit: The maximum amount of Road Segments that can exist. Defaults to 1200.
	
; [Regions] Section
	; Limit: The maximum amount of Regions that can be loaded at once (including the Terra file). Defaults to 7.
	; EntityLimit: The maximum amount of entities any one zone can contain. Defaults to 2000.
	; RoadSegmentLimit: The maximum amount of Road Segments any one zone can contain. Defaults to 1250.
		; Given that Road Segments should only ever be in the Terra file, this should just match the other RoadSegmentLimit in the [Roads] section.

; [TreeNodes] Section
	; DrawDistance: The maximum distance any part of an object can be from the camera before it stops rendering. Defaults to 200.
	; BoundsMinimumY: The minimum position on the Y axis in any tree node. Defaults to -200. Leave blank to use the value in the k-d Tree.
	; BoundsMaximumY: The maximum position on the Y axis in any tree node. Defaults to 100. Leave blank to use the value in the k-d Tree.

; [Billboards] Section
	; QuadGroupLimit: The maximum amount of billboard quad groups that can exist. Defaults to 25.
	; QuadLimit: The maximum amount of billboard quads that can exist. Defaults to 100.

; [CollisionIndices] Section
	; VehicleLimit: The maximum amount of vehicle collision indices. Defaults to 15.
	; CharacterLimit: The maximum amount of character collision indices. Defaults to 18.
	; StaticPhysLimit: The maximum amount of static phys collision indices. Defaults to 30.
	; AnimCollLimit: The maximum amount of anim coll collision indices. Defaults to 20.
	; FenceLimit: The maximum amount of fence collision indices. Defaults to 8.
	; DynaPhysLimit: The maximum amount of dyna phys collision indices. Defaults to 20.
	
; [Sound] Section
	; PlayingClipPlayerLimit: The maximum amount of simultaneously playing clip players. Defaults to 25.
	; PlayingStreamPlayerLimit: The maximum amount of simultaneously playing stream players. Defaults to 8.

; Notes
	; When building custom maps, the Model Builder totals up many of these limits for you.
	; You should just make sure these limits are at least greater than the totals of any of your mod's custom maps.
	; If your mod still uses Radical's maps, then also keep these limits to at least what they are by default.

[Miscellaneous]
DeletedEntityLimit=5000
PathLimit=125
CarLimit=127
ActionButtonLimit=8

[Roads]
CubeShapeLimit=1200
RoadLimit=150
IntersectionLimit=60
RoadSegmentLimit=1200

[Regions]
Limit=7
EntityLimit=2000
RoadSegmentLimit=1250

[TreeNodes]
DrawDistance=200
BoundsMinimumY=-200
BoundsMaximumY=100

[Billboards]
QuadGroupLimit=25
QuadLimit=100

[CollisionIndices]
VehicleLimit=15
CharacterLimit=18
StaticPhysLimit=30
AnimCollLimit=20
FenceLimit=8
DynaPhysLimit=20

[Sound]
PlayingClipPlayerLimit=25
PlayingStreamPlayerLimit=8

History

1.22

  • Added "CarLimit" and "ActionButtonLimit" to the "Miscellaneous" section.
  • Added a "CollisionIndices" section that lets you increase the limit on various types of collision indices.
  • Added a "Sound" section that lets you increase "PlayingClipPlayerLimit" and "PlayingStreamPlayerLimit".

Before 1.18

Changes prior to this version were not adequately tracked.

About Custom Shop Support

Synopsis

This hack allows you to specify custom NPCs for car shops.

It also allows you to blacklist and whitelist specific cars and skins at specific phone booths and skin shops respectively.

Configuration

This is an example configuration for this hack with comments explaining how it works.

This configuration file goes into CustomShopSupport.xml in the root of your mod.

We do not recommend copying this entire example into your mod. We recommend only using what is necessary.

<?xml version="1.0" encoding="utf-8"?>
<CustomShopSupport>
	<!--
	
	CustomShopSupport.xml
		Change the characters that own car shops and modify the rosters of individual phonebooths.
	
	<CarShop>
		Level: The level the charshop is in.
		Character: The name of the character that runs the shop (including the "reward_" prefix).
		Conversation: The name of the conversation to use when talking to the character. Leave blank to disable the conversation.
	<PhoneBooth>
		Drawable: Change the drawable that displays above the phonebooth. Optional.
		<Selector>
			Level: The level to use this phonebooth on.
			Locator: The Type 9 SummonVehiclePhone locator to use this phonebooth on.
		<FreeItems>
			<Car>
				[Contents]: Specify the name of the car.
				Path: The path to the car. Defaults to "art\cars\CARNAME.p3d".
				RepairCost: The cost to repair this car.
		<Blacklist>
			<Car>
				[Contents]: Specify the name of the car.
		<Whitelist>
			<Car>
				[Contents]: Specify the name of the car.
				RepairCost: The cost to repair this car.
	<SkinShop>
		Drawable: Change the drawable that represents the skin shop. Optional.
		<Selector>
			Level: The level to use this skin shop on.
			Locator: The Type 9 PurchaseSkin locator to use this phonebooth on.
		<FreeItems>
			<Skin>
				[Contents]: Specify the name of the character.
				Path: The path to the character. Defaults to "art\chars\CHARNAME.p3d".
		<Blacklist>
			<Car>
				[Contents]: Specify the name of the character.
		<Whitelist>
			<Car>
				[Contents]: Specify the name of the character.
		
	-->

	<!-- Default Car Shops -->
	<CarShop Level="1" Conversation="plowking" Character="reward_barney" />
	<CarShop Level="2" Conversation="son" Character="reward_homer" />
	<CarShop Level="3" Conversation="bus" Character="reward_otto" />
	<CarShop Level="4" Conversation="tractor" Character="reward_tractor" />
	<CarShop Level="5" Conversation="borrowing" Character="reward_homer" />
	<CarShop Level="6" Conversation="swine" Character="reward_kearney" />
	<CarShop Level="7" Conversation="" Character="zombie" />
	
	<!-- Custom Phone Booths -->
	<PhoneBooth>
		<!-- Select this Phonebooth if it's Level 1 or 7 -->
		<Selector Level="1" />
		<Selector Level="7" />
		
		<!--  Make it so Homer can't use Apu's car -->
		<Blacklist>
			<Car>apu_v</Car>
		</Blacklist>
	</PhoneBooth>
	
	<PhoneBooth Drawable="wrench"> <!-- Use a wrench drawable for fun! -->
		<!-- Select Level 1 and the Phonebooth across the Simpson's House -->
		<Selector Level="1" Locator="Z1p1"/>
		
		<!-- Specify an empty Whitelist to exclude all Reward Cars -->
		<Whitelist />
		
		<FreeItems>
			<!-- And then here we add a couple cars to the phonebooth -->
			<Car>bart_v</Car>
			<Car>homer_v</Car>
		</FreeItems>
	</PhoneBooth>
	
	<!-- Custom Skin Shop -->
	<SkinShop Drawable="dice">
		<Selector Level="1" Locator="z1_skin2"/>
		
		<FreeItems>
			<Skin>h_fat</Skin>
			<Skin>h_scuzzy</Skin>
		</FreeItems>
	</SkinShop>
	
	<SkinShop Drawable="wrench">
		<Selector Level="1" Locator="z1_skin3"/>
		
		<FreeItems>
			<Skin>h_stcrobe</Skin>
			<Skin>h_undrwr</Skin>
		</FreeItems>
	</SkinShop>
</CustomShopSupport>

History

1.22

Added support for a "SkinShop" element in this hack's configuration file that works similarly to the existing "PhoneBooth" element.

 

About Custom Traffic Support

Synopsis

This hack that allows you to have dynamic traffic groups, more than 5 traffic cars, custom traffic colors and more.

Configuration

This is an example configuration for this hack with comments explaining how it works.

This configuration goes into CustomTrafficSupport.xml in the root of your mod.

We do not recommend copying this entire example into your mod. We recommend only using what is necessary.

<?xml version="1.0" encoding="utf-8"?>
<CustomTrafficSupport>
	<!--
	
	CustomTrafficSupport.xml
		Control certain properties of the game's traffic system and increase the amount of traffic cars.
		
	<DynamicTraffic>
		Type: Set the type of dynamic traffic to use. Defaults to "None".
			None: Dynamic groups are not enabled.
			Models: Dynamic Models means that when the game goes to use a slot, the hack changes the model in the slot if nessecary.
			Slots: Dynamic Slots means that the hack picks a random model and gives the game a slot to use. This is required for Weights to work and is generally better but slightly more advanced.
	
	<PreallocatedCars>
		Amount: Set the amount of traffic cars that are created during level load. Defaults to the total amount of AllocatedCars. Any additional cars will be created when they're first needed.
			When using the "Models" DynamicTraffic type, it is probably optimal to set this to "0".
			When using the "Slots" DynamicTraffic type, this is currently ignored altogether and no cars are Preallocated.

	<AllocatedCars>
		Amount: Set the amount of allocated traffic cars. Defaults to 5.
			This limit is also the maximum amount of parked cars that can exist in the level.
		
	<MaxTraffic>
		Amount: Set the default amount of traffic cars that will spawn on the roads. This is then controlled with SetMaxTraffic in mission scripts. Defaults to 5.
		
	<MaxTrafficOnFoot>
		Amount: Set the amount of traffic cars that will spawn when the player is not in their car. Defaults to 5.
		
	<RoadTrafficLimitMultiplier>
		Amount: The amount to multiply the car limit on Roads in P3D files by. Defaults to 1.
		
	<RoadLaneMaxTrafficLimit>
		Amount: Set the maximum amount of cars allow in any lane of any road. Defaults to 2.
			"Road" chunks in the P3D file define a "Maximum Cars" value.
			That number is then multiplied by the RoadTrafficLimitMultiplier if one is defined.
			And then this is finally divided by the number of lanes the "Road" chunk has.
			If the number obtained by that math is greater than this limit, it will be capped.
		
	<RemoveInterval>
		Value: The amount of time the game waits to remove cars outside
		
	<AddInterval>
		Value: The amount of time between attempts to spawn a traffic car.
		
	<PopulationDuration>
		Value: TODO
		
	<FadeDistance> 
		Value: Set the distance from the camera at which traffic starts fading out. Defaults to 85.0.
		
	<CentreOffset>
		Value: Set the distance in front the camera that's considered the centre of the radius where they don't spawn traffic. Defaults to 40.0.
	
	<AddDistance>
		Value: Set the distance from the CentreOffset required to spawn a car. Defaults to 65.0.
	
	<RemoveDistance>
		Value: Set the distance from the CentreOffset required to delete a car. Defaults to 75.0.
	
	<PopulateAddDistance>
		Value: TODO
		
	<DecelerationSpeed>
		Value: TODO
		
	<AccelerationSpeed>
		Value: TODO
		
	<DecelerationBrakeThreshold>
		Value: TODO
	
	<Colours>
		Inherit: Set whether or not this element inherits from other defined Colours.
			Inheritence flows like this:
				Car specific colours in Level > Colours in Level > Colours in root > Base game
				Car specific colours in Root > Colours in root > Base game
			Inheritence stops at the level that stops inheriting.
		<Colour>
			Red: Define the red value of the colour.
			Green: The green value of the colour.
			Blue: The blue value of the colour.
		
	<Group>
		Index: The index of the traffic group.
		Multiplier: The amount to multiply the car counts specified in the traffic group by.
		<Car>
			Name: The name of the car.
			Weight: Set a weight for how likely this car is to spawn over other cars.
				This defaults to the amount of this car allowed in the traffic group.
				For each instance that already exists, the weighting is reduced to give other cars a better chance at spawning.
	
	<Car>
		Name: The name of the car.
		
		This element can contain Colours elements to define them for a specific car.
	
	<Level>
		Index: The index of the level (zero-based).
			OR
		Number: The number of the level (one-based).
		
		This element can contain all other elements to make them level specific.
		
	-->

	<DynamicTraffic Type="Slots" />
	
	<PreallocatedCars Amount="5" />
	
	<AllocatedCars Amount="5" />
	
	<MaxTraffic Amount="5" />
	<MaxTrafficOnFoot Amount="5" />
	
	<RoadTrafficLimitMultiplier Value="1.0" />
	<RoadLaneMaxTrafficLimit Amount="2" />
	
	<RemoveInterval Value="200" />
	<AddInterval Value="200" />
	<PopulationDuration Value="200" />
	
	<FadeDistance Value="85.0" />
	<CentreOffset Value="40.0" />
	<AddDistance Value="65.0" />
	<RemoveDistance Value="75.0" />
	<PopulateAddDistance Value="100.0" />
	
	<DecelerationSpeed Value="-10.0" />
	<AccelerationSpeed Value="3.5" />
	<DecelerationBrakeThreshold Value="1.0" />
	
	<Colours Inherit="false">
		<!-- Defaults from the base game as an example -->
		<!-- Inheritence is disabled in this example for that reason -->
		<Colour Red="148" Green="45" Blue="12" />
		<Colour Red="133" Green="124" Blue="4" />
		<Colour Red="110" Green="84" Blue="145" />
		<Colour Red="170" Green="43" Blue="74" />
		<Colour Red="48" Green="11" Blue="102" />
		<Colour Red="110" Green="30" Blue="32" />
		<Colour Red="140" Green="125" Blue="207" />
		<Colour Red="195" Green="98" Blue="31" />
		<Colour Red="122" Green="50" Blue="69" />
		<Colour Red="148" Green="191" Blue="229" />
		<Colour Red="0" Green="159" Blue="123" />
		<Colour Red="0" Green="75" Blue="132" />
		<Colour Red="43" Green="177" Blue="166" />
		<Colour Red="250" Green="166" Blue="23" />
		<Colour Red="172" Green="81" Blue="127" />
		<Colour Red="185" Green="162" Blue="232" />
		<Colour Red="229" Green="222" Blue="33" />
		<Colour Red="163" Green="203" Blue="60" />
		<Colour Red="213" Green="142" Blue="210" />
		<Colour Red="255" Green="239" Blue="158" />
		<Colour Red="122" Green="43" Blue="103" />
		<Colour Red="181" Green="133" Blue="70" />
		<Colour Red="68" Green="106" Blue="171" />
		<Colour Red="59" Green="149" Blue="36" />
		<Colour Red="205" Green="94" Blue="0" />
	</Colours>

	<Level Number="1">	
		<AllocatedCars Amount="25" />
		
		<MaxTraffic Amount="25" />
		<MaxTrafficOnFoot Amount="25" />
		
		<RoadTrafficLimitMultiplier Value="5" />
		<RoadLaneMaxTrafficLimit Amount="25" />
		
		<Colours Inherit="true">
			 <Colour Red="255" Green="155" Blue="155" />
			 <Colour Red="155" Green="255" Blue="155" />
			 <Colour Red="155" Green="155" Blue="255" />
		</Colours>
		
		<Car Name="minivanA">
			<Colours Inherit="false">
				 <Colour Red="0" Green="255" Blue="0" />
				 <Colour Red="0" Green="0" Blue="255" />
			</Colours>
		</Car>
	</Level>
</CustomTrafficSupport>

Using Dynamic Traffic

While the dynamic traffic group functionality is provided by this hack, it does not provide any way to use it.

You can incorporate this feature using the UseTrafficGroup command in Additional Script Functionality and the ChangeTrafficGroup Action Type in Custom Trigger Actions.

Distance Diagram

This is a rough diagram of how the various traffic distance values work.