SPMod

Introduction


The SPMod is not a total convertion or a "complete" mod, it's just a new game dll meant to provide more tools for mappers with little knowledge of C while maintaining compatibility with the original game. A few gameplay tricks have been added, but you can disable them using cvars.
Fixes
- The shopkeeper does no longer say "sorry, I ain't any" when selecting blank items
- Removed prices for inexisting items in Pawn-o-matics
- Redrawn slot5.pcx to avoid the blury bilinear filtering
- Captions pointing to wrong actor (some answers were credited to player instead of sidekicks)
- Player could trigger the reload animation for most weapons even though no spare ammo were available
- Instant death, freezing cast_bum_sit fixed
- cast_whore and cast_shorty now properly equip the flamethrower
- Fixed a terrible bug introduced by the SPMod (unable to reload the silencer)
Mapping features
- cast_bitch, cast_thug, cast_runt: added spawnflag 1 (Lockpicking skills for friendly one-handed weapon characters)
- Friendly characters can now be named whatever you want
- Friendly characters asking from 1 to 9 bucks will now be instantly hired for free
- Pickup items: added spawnflag 128 (trigger_pickup, they can fit almost anywhere and can only be picked up when triggered)
- trigger_once and trigger_multiple: added spawnflag 16 (can be toggled on and off)
- trigger_relay: added key "random" (chances, (from 0 to 100) for the trigger to fail and not fire its targets)
- func_explosive: added spawnflag 16 (autosound) and 32 (damages must be inflicted at once, or the brush doesn't break)
- func_button: added spawnflag 8 (don't move) and 16 (remove itself when triggered)
- cast_bum_sit: added spawnflag 1 (drunk)
- Custom pawn-o-matic stocks
- More scriptnames for path_corner_cast
- Accuracy mod for pistol (available in Pawn-o-matics and pickup items)
- Slowburn mod for flame thrower (available in Pawn-o-matics and pickup items)
- Custom log entries and episode flag registering in SSF files (target_register_epflag)
- Support for custom models (misc_model)
- Advanced keys (items or episode flags)
- Level designers can save the player's game when approaching tricky sections (target_savegame)
- func_spray: creates a gaz of pipe or something similar, barrels 'o fun.
Gameplay features
- The Special Order key can now order any gang member to hold a distant position (aim at the position and press the Action key, cannot be used in a KP episode)
- More cheat codes (see console command "sonofsam", "itemlist" and "epflag")
- Several damages tweaks (see console command "cl_noratbite" and "cl_healthregain")
- Customizable gang size (see console command "g_maxgangmembers")
New CVars, Default value, Description
sonofsam0+1 unlock all merchandizes in Pawn-o-matics, +2 everything for free (including henchmen UNLESS you tried to hire them prior to cheat), +4 infinite ammo (rounds in clip is never decreased), +8 mods never wears out, +16 infinite clips (you never drain ammos from the inventory when you reload, it's like the infinite ammo cheat except you have a "time penalty" for shooting like crazy)
sv_useentfiles 0 Enable creation of .ENT file for each new map loaded, which allows entity override when reloading the map (sometimes, the file dump is incomplete and it's no longer possible to load the map -- when it happens, erase the corresponding .ENT file and try again)
g_maxgangmembers 2 Maximum followers in your party (Only two characters can be displayed on the HUD, followers may dissapear when entering a map with too few info_player_coop spawn points)
sv_noautosave 0 Disable auto-save feature implemented in custom maps (target_savegame)
cl_healthregain 0 Enable regeneration of health lost because of drowning
cl_noratbite 0 Rat and leeshes are no longer deadly predators to the human race
spmod_debug 0 Display in-game debug info (camera position, switcharea infos, trigger_toggle, eplog loading info...)
freezeworld 0 Freeze world time (everything but the player and particles become static)
New Commands, Description
entities List all entities present in the current map
itemlist List all weapons, ammo, armors and keys by pickup names
epflag Followed by nothing, list all episode flags and their flag number. Followed by a list of flag numbers, assign new active flags for the current game
smallcrew Add a random sidekick to your gang. Select the sidekick using a number between 1 & 8
johnwho Cycle through three ammo managment: infinites ammo, infinites clips, normal
ducktales You can get everything for free
blackfriday Everything is unlocked in every shop
hornybee Rocket launcher shoots heat-seeking missiles
macgyver Weapon mod never wears out
god Alias for "immortal"

SPMod Installation


Most map packs and mods for Kingpin are distributed as is, and you're generaly advised to backup your original Kingpin files so you can replace them. And it's just painful, don't do it: there's an easier way to create and manage custom modifications. Just create a sub directory in your Kingpin directory (where KINGPIN.EXE is located). If Kingpin is installed in C:/GAMES/KINGPIN/, then your mod directory could be C:/GAMES/KINGPIN/MYMOD/, next to the base game directory (C:/GAMES/KINGPIN/MAIN. Organize your mod directory just like "MAIN": put your BSP files in "MAPS/", your textures in "TEXTURES/", your Navigation files in "NAVDATA/" and so on.
Directory, File Name, Description
./ gamex86.dll This is the SPMod game "rules"
./ eplog0.ssf SPMod Script File [0] (if your maps are set for episode 0)
./pics/ h_flamet_sburn.tga Icon displayed when aquiring slowburn
./pics/ h_pistol_acc.tga Icon displayed when aquiring pistol accuracy
./models/pu_icon/accuracy/ tris.md2 Pistol accuracy pick-up model
./models/pu_icon/accuracy/ skin.tga Pistol accuracy pick-up skin
./models/pu_icon/slowburn/ tris.md2 Slowburn pick-up model
./models/pu_icon/slowburn/ skin.tga Slowburn pick-up skin
./models/props/menu_mdx/ slot5.pcx Fix for the original slot5.pcx
./models/props/menu_mdx/ slot6.pcx Pistol accuracy in Pawn-o-matics
./models/props/menu_mdx/ slot7.pcx Slowburn in Pawn-o-matics

Last step: the batch file to launch your mod easily. Edit "launch.bat" and replace the +game SPMOD part to match your game directory's name (in this example, it would be +game MYMOD. And that's it. Now you can have the original Kingpin AND your own modification available, without overwriting anything.

Custom stocks


The pawn_o_matic entity now support height more keys (you'll only need six of them, unless you wish to modify the code any further): 'pawn_index1' for weapons, 'pawn_index2' for mods, 'pawn_index3' for ammo1, 'pawn_index4' for ammo2, 'pawn_index5' for health and 'pawn_index6' for armors. These keys works just like spawnflags.

Valuepawn_index1pawn_index2pawn_index3pawn_index4pawn_index5pawn_index6
+1 pistol silencer bullets rockets medkit helmet
+2 shotgun rof shells gaz m. bag h. helmet
+4 tommy magnum 308cal - - jacket
+8 hmg reload grenades - - h. jacket
+16 grenade l. cooling - - - legs
+32 bazooka accuracy - - - h. legs
+64 flamethrower slowburn - - - -
+128 - - - - - -

For instance, if you want a pawn-o-matic to have both pistol and tommy gun available for purchase, set 'pawn_index1' to '5' (1 + 4). Easy, right?

The SPMod Script File allows you to make the very same modifications without having to recompile the map after every change. It also gives you to possibility to modify the price for each item of each shop, using the 'count' (shop_id) key, see the SPMod Script File section for more information.

Lockpicking


cast_thug, cast_bitch and cast_runt can now unlock doors like Fingers in Poison Ville or David in Steel Town. But unlike Fingers and David, they can unlock more than one door per map and it's not hard-coded.

First, put a friendly one-handed weapon cast in your map and set its spawnflag 1. Now, you need a locked door that CANNOT be opened with a key. Make a simple func_door_rotating and set its 'key' to '-1'. Let's put a location near the door, pointing to the door. This location and angle will be used by your friend to pick the lock. Place an ai_safespot entity on one side of the door (doors can only be unlocked from one side), set it's 'targetname' to anything. Now back to the door, set its 'target2' to the ai_safespot's 'targetname'. This door can now be unlocked.

Note that you can also add a trigger_unlock on the other side of the door for the player to unlock it. If a locked door has no ai_safespot linked to it, your friends won't be able to unlock it. Also, the 'key' value MUST be '-1'.

New scripts


When an actor reaches a path_corner_cast, one of the following script can be triggered (basically, an animation). The animation is always played by the actor reaching the path_corner_cast.

This part of the code is kinda ugly to look at and not flexible at all (I mean it's hard-coded, right?). I'll certainly try to handle this using external files, but that's how it works for now.
Cast classname, Script name
cast_dog dog_pant
cast_dog dog_sniff
cast_dog dog_bark
cast_dog dog_growl
cast_dog dog_pee
cast_dog dog_low_atk
cast_dog dog_med_atk
cast_dog dog_upr_atk
cast_bitch bitch_leanlook
cast_bitch bitch_leanwave
cast_bitch bitch_whatsup
cast_bitch bitch_talkme
cast_bitch bitch_nonono
cast_bitch bitch_comeon
cast_bitch bitch_getdown
cast_bitch bitch_whomw
cast_bitch bitch_lookself
cast_bitch bitch_flirt
cast_bitch bitch_evd_amb
cast_bitch bitch_pull_gun
cast_bitch bitch_stand_shoot
cast_whore whore_talk1
cast_whore whore_talk2
cast_whore whore_talk3
cast_whore whore_talk4
cast_whore whore_talk5
cast_whore whore_sg_stand
cast_whore whore_sg_talk1
cast_whore whore_sg_talk2
cast_whore whore_sg_talk3
cast_whore whore_sg_talk5
cast_whore whore_sg_talk6
cast_whore whore_sg_talk7
cast_whore whore_sg_talk8
cast_punk punk_talk1
cast_punk punk_talk2
cast_punk punk_talk3
cast_punk punk_talk4
cast_punk punk_talk5
cast_punk punk_talk6
cast_punk punk_head_wipe
cast_punk punk_sg_talk1
cast_punk punk_sg_talk2
cast_punk punk_sg_talk3
cast_punk punk_sg_talk4
cast_punk punk_sg_talk5
cast_punk punk_sg_talk6
cast_thug thug_talk1
cast_thug thug_handwave
cast_thug thug_nod_yes
cast_thug thug_whoa
cast_thug thug_crch_grab
cast_thug thug_up_yours
cast_thug thug_nod_no
cast_thug thug_pull_guns
cast_thug thug_cold_cock
cast_runt runt_talk1
cast_runt runt_talk2
cast_runt runt_talk3
cast_runt runt_talk4
cast_runt runt_talk5
cast_runt runt_talk6
cast_runt runt_talk7
cast_runt runt_talk8
cast_runt runt_pull_guns
cast_shorty shorty_talk1
cast_shorty shorty_talk2
cast_shorty shorty_talk3
cast_shorty shorty_talk4
cast_shorty shorty_talk5
cast_shorty shorty_talk6
cast_shorty shorty_talk7

How to use trigger_switcharea


The trigger_switcharea entity is a mix between the standard trigger_# entity and the ai_territory entity. This trigger only activates its targets when the player leave/enter the limits of a defined area.

It's important to understand that the trigger_switcharea does NOT represent the area itself, but the borders of the area, the angle key defines the direction of the area. Multiple boundaries can be tied to same area using a common targetname value. target defines the entity's id to trigger when the player cross the border (in and/or out). You can also toggle on and off a custom flag (as defined in the .SSF file) using the name key.

Spawnflag START_IN (1) must be set if the player starts INSIDE the area. By default, the target will be activated EVERYTIME the player cross the border, in a way or another, you can set spawnflag 2 or 4 (NO_IN and NO_OUT) if you don't want the trigger_switcharea to activate its target when the player walks in or out of the area (respectively). Spawnflag 8 (MASTER) can be set if you want this border to set it's default to the other during initialization.
Spawnflags
1START_IN
2NO_INDo no trigger the target when walking into the area
4NO_OUTDo not trigger the target when walking out of the area
8MASTERSet this border as the reference border for initialization
Key, Usage
angleArea's direction
targetnameThe area's name
targetEntity to trigger
nameEpisode flag name to toggle


Download the example map.

How to use pickup spawnflag 128


All pick up items (ammos, weapons, health, keys) can be picked up when triggered. When the spawnflag 128 is set, the item can be put in very narrow places like lockers and can only be picked up when triggered. However, an item using this feature cannot be TRIGGER_SPAWN (2) nor TRIGGER_NO_TOUCH (1).

Download the example map (contains an example of the TRIGGERED_MULTIPLE spawnflag).