Feature Inventory
Every feature of the original, one row each, with where it lives and what happens to it.
Status key
✅
Fully implemented in the original
⚠️
Partial, emergent, or vestigial
❌
Named by the master plan but absent — new design work
🚫
Present, but deliberately not carried forward
Disposition key
Keep
Behaviour preserved, reimplemented
Keep+
Behaviour preserved and deliberately extended
New
No legacy behaviour to preserve
Drop
Not carried forward
Core framework
Feature
Status
Legacy location
Disposition
Gamemode bootstrap / loader
✅
sh_init.lua
Drop — D-13
File-prefix realm convention (sv_/cl_/sh_)
✅
sh_init.lua:105
Keep the intent (explicit realm), drop the mechanism
Configuration
✅
sh_config.lua (25 KB)
Keep+ — becomes typed, validated, hot-reloadable
Enumerations
✅
sh_enumerations.lua
Drop — C# enums
Logging with categories
✅
libraries/sh_log.lua (202)
Keep — EVENT_* taxonomy, access-gated viewer, file dump
Timers
✅
gamemode/timer.lua
Keep timer.Conditional as the interaction primitive
Plugin loader
✅
libraries/sh_plugin.lua
Drop — ADR-0002
Hook dispatch
🚫
monkey-patched hook.Call
Drop — D-07
Help registry
✅
libraries/sh_help.lua
Keep+ — generated from command metadata
Event enumerations
✅
sh_events.lua
Drop
Unit tests
❌
—
New
Dependency injection
❌
—
New
State machine
❌
—
New
Resource manager
❌
—
New — S&box asset system
Character
Feature
Status
Legacy location
Disposition
Player record
✅
metatables/sv_player.lua (965)
Keep the data, redesign entirely
Character creation
❌
—
New — a character is a Steam account
Multiple characters / selection / deletion
❌
—
New
Identity, description, biography
❌
—
New
Attributes, skills
❌
—
New
Appearance
⚠️
gender only, _Gender
New
Player models
✅
per-job, in sh_jobs.lua
Keep the per-job concept
Health
✅
engine + ragdoll health
Keep
Money
✅
_Money
Keep
Permissions
✅
_Access flag string
Keep+ — named permissions
Statistics
⚠️
frags/deaths only (savefragsdeaths)
New
Inventory ownership
✅
_Inventory
Keep, redesigned
Blacklists (timed, per-category)
✅
_Blacklist
Keep — good design
Clan tag
✅
_Clan
Keep
Donator tier
✅
_Donator
Keep
Lifecycle: join / leave / death / respawn
✅
init.lua, hooks/
Keep
Idle kick
✅
15 min, in the tick
Keep
Stuck-in-world detection
✅
in the tick
Keep
Inventory and items
Feature
Status
Legacy location
Disposition
Inventory storage
✅
flat {id = count}
Drop — ADR-0006
Space budget (40 units)
✅
libraries/sv_inventory.lua
Keep
Negative-size capacity items (pockets)
✅
items/misc/small_pocket.lua
Keep — excellent
Weight
❌
—
New (optional; space may remain the only axis)
Stacking
✅
implicit in the storage shape
Keep+ — becomes explicit opt-in
Per-item carry limits
🚫
ITEM.Max — dead code
Keep the intent, D-03
Single mutation choke point
✅
cider.inventory.update
Keep
onUpdate escape hatch
🚫
same
Drop — D-12
Client mirror
⚠️
delta-only, desyncs
Drop — D-05
Item definitions as data
⚠️
Lua files with implicit ID/category
Keep the authoring feel , ADR-0004
Item inheritance (Base)
⚠️
single-level; array form broken
Keep+ — validated, D-04
Item categories
✅
directory-derived, CATEGORY_*
Keep — jobs gate on these
World items (one entity for all)
✅
cider_item
Keep
Use / drop / destroy / sell / pickup
✅
metatables/sv_item.lua
Keep
Per-item state (durability, ammo, contents)
❌
impossible by construction
New
Drag/drop, sorting, splitting, combining
❌
/inventory command only
New
Nested containers
⚠️
packaging crates, one level
New
Containers
✅
libraries/sv_container.lua
Keep, unified with inventory
Map-authored container capacities
✅
config["Spawnable Containers"]
Keep — scarcity
Virtual/computed container contents
✅
PlayerGetContainerContents hook
Keep — enables banking
Container permissions (CAN_PUT/CAN_TAKE)
✅
sh_enumerations.lua
Keep
Contents dumped on container destruction
✅
CallOnRemove
Keep
Interaction
Feature
Status
Legacy location
Disposition
Universal interaction framework
❌
—
New
Timed interaction with cancel predicate
✅
timer.Conditional, weapon equip
Keep — becomes the general primitive
Use / pickup / drop
✅
scattered
Unify
Open / close / lock / unlock
✅
libraries/sv_entity.lua
Unify
Search
⚠️
container UI only
New
Lockpick
✅
cider_lockpick, cumulative wear
Keep — wear mechanic
Breach
✅
cider_breach, 60 s jam
Keep
Repair / break / hack
❌
—
New
Talk / trade
⚠️
chat and /givemoney on trust
Keep the lack of escrow
Eat / drink
⚠️
eat only; drinks restore hunger
Keep+
World objects
Feature
Status
Legacy location
Disposition
Entity ownership (player/team/gang)
✅
libraries/sv_entity.lua (812)
Keep
Per-entity access lists
✅
same
Keep
Hierarchical gang access (group;0)
✅
hasAccess
Keep
Access surviving disconnect
✅
saveAccess/restoreAccess
Keep
Doors
✅
same + plugins/doors
Keep
Door state bitfield
🚫
DTInt(3)
Drop — D-16
Master/slave door linking
✅
setMaster etc.
Keep+ — becomes property groups
Sealing
✅
OBJ_SEALED, /seal
Keep
Jamming / autoclose
✅
60 s / 10 s
Keep
Padlocks as physical entities
✅
cider_padlock
Keep
Entity naming
✅
/setname
Keep
Lights, switches, furniture, generators, workbenches
❌
—
New
Vehicles
✅
plugins/vehicles (1061 lines)
Deferred — see ROADMAP
Needs
Feature
Status
Legacy location
Disposition
Two-rate tick (0.1 s / 1 s)
✅
libraries/sv_player.lua
Keep
Hunger
✅
plugins/hunger
Keep (invert polarity)
Hunger: vehicle double damage
✅
same
Keep
Hunger: suicide/respawn anti-exploit
✅
same
Keep exactly
Hunger: refuse to eat below 25
✅
items/base/food.lua
Keep
Stamina
✅
plugins/stamina
Keep
Stamina: injury coupling
✅
same
Keep — this is the injury system
Stamina: smooth speed interpolation
✅
same
Keep
Stamina: 1/50 exhaustion hysteresis
✅
same
Keep
PlayerCanBeRecapacitated gate
✅
same
Keep as a cancellable event
Passive healing while sleeping
✅
1 HP / 2 s, in the tick
Keep
Thirst
❌
—
New (a drinks category already exists)
Temperature
❌
—
New
Disease
❌
—
New
Bleeding
⚠️
cosmetic decals; timer bug
Keep+ — make it mechanical
Injuries
⚠️
emergent only
New
Healing
⚠️
drugs items + sleep
Keep+
Needs persistence
❌
reset on every join
New
Economy
Feature
Status
Legacy location
Disposition
Money (integer, floor 0, no debt)
✅
meta:GiveMoney
Keep
Salary + payday
✅
init.lua:1418
Keep
Salary withheld while dead or arrested
✅
same
Keep
Donator salary multiplier
✅
init.lua:711
Keep
Contraband interval income
✅
300 s, init.lua:1412
Keep
Contraband refill warnings
✅
same
Keep
Contraband per-player caps
✅
items/base/contraband.lua
Keep
Tiered contraband
⚠️
Applejack fork only
Keep+ — input to crafting
Manufacturing (/manufacture)
✅
sv_commands.lua:1097
Keep the rules, replace the system
Role monopoly by item category
✅
canmake per team
Keep — this is the whole economy
Physical shipments spawned in world
✅
item:Make at eye trace
Keep
Cost and cooldown scale with batch
✅
same
Keep
Universal 50% refund
✅
doors and items
Keep
Door tax with repossession
✅
payday loop
Keep
Player trade (no escrow)
✅
/givemoney, /dropmoney
Keep the risk
Banks
❌
hook exists, bank never built
New
Vendors / NPC shops
❌
—
New
Licences
❌
—
New
Death money penalty
🚫
Death Penalty = 2, marked unused
Drop
Crime
Feature
Status
Legacy location
Disposition
Mechanism / gate / policy split
✅
metatable / hooks / officials
Keep — best decision in the codebase
Warrants (search 5 min, arrest 1 h)
✅
meta:Warrant
Keep
Warrant persistence
❌
dies on restart
New
Arrest (5 min, persistent)
✅
meta:Arrest
Keep
Cannot log out of jail
✅
loadFunctions._Arrested
Keep (fix the timer arithmetic)
Confiscation vs disarming
✅
TakeWeapons(noitems)
Keep the distinction
Jail points per map
✅
plugins/prisonpoints
Keep
Knockout with posed ragdoll
✅
meta:KnockOut
Keep
Ragdoll has its own health
✅
ply.ragdoll.health
Keep
Position follows the ragdoll
✅
sh_player.lua GetPos override
Keep the behaviour, not the override
Tying with struggle meter
✅
meta:TieUp
Keep
Incapacitate primitive
✅
meta:Incapacitate
Keep
Blood trails
⚠️
decals; timer bug
Keep+
Tranquilliser
✅
cider_tranq
Keep
Lockpicking with cumulative wear
✅
cider_lockpick
Keep
Ten player-authored laws
✅
libraries/sh_laws.lua
Keep — code must never read them
Law change cooldown (120 s)
✅
same
Keep
Evidence
❌
—
New
Fines
❌
—
New
Criminal records
❌
—
New
Bail / trials / sentencing
❌
fixed 300 s
New
Jobs and factions
Feature
Status
Legacy location
Disposition
Group → gang → team hierarchy
✅
libraries/sh_team.lua
Keep
Gang 0 = group general population
✅
hasAccess
Keep
Numeric levels driving demotion
✅
TEAM.level
Keep
Governance flags (b/d/g/D/M)
✅
sh_jobs.lua
Keep
Mandatory transit class (M)
✅
Master Race config
Keep
Demotion (needs 5 in gang)
✅
meta:Demote
Keep
Mutiny (needs 4, 75% approval)
✅
/mutiny
Keep
Per-job player caps
✅
maxplayers
Keep
Job time limits and rejoin cooldowns
✅
{maxJobTime, rejoin}
Keep
Job blacklisting
✅
_Blacklist
Keep
Loadouts and ammo per job
✅
sh_jobs.lua
Keep
Symmetric rival gangs
✅
Rogues / Renegades
Keep
15 positional parameters
🚫
cider.team.add
Drop — becomes an asset
Presentation order = file order
🚫
sh_jobs.lua
Drop — explicit sort key
Chat and commands
Feature
Status
Legacy location
Disposition
Single gated, logged entry point
✅
concommand "cider"
Keep the shape
PlayerCanUseCommand global veto
✅
libraries/sv_commands.lua
Keep
Help auto-registered from commands
✅
same
Keep+ — fully generated
return false, message failure convention
✅
same
Keep
Every command logged with arguments
✅
EVENT_COMMAND
Keep
66 commands
✅
sv_commands.lua (58 KB)
Keep the vocabulary, split the file
Proximity IC chat (256 units)
✅
Talk Radius
Keep
Proximity voice
✅
Local Voice
Keep
Channels (/y /w /me /ooc /looc …)
✅
sv_commands.lua
Keep
OOC cooldown (60 s), advert cost ($60/150 s)
✅
config
Keep the friction
Roleplay affordances (/sleep /trip /fallover)
✅
same
Keep
Notification levels (4 sounds)
✅
meta:Notify
Keep the taxonomy
Physical notes (max 2)
✅
/note, cider_note
Keep
Stringly-typed variadic arguments
🚫
same
Drop — D-02
UI
Feature
Status
Legacy location
Disposition
Custom chatbox
✅
libraries/cl_chatbox.lua (924)
Rebuild in Razor
Bottom bars extension point
✅
DrawBottomBars
Keep as an API
Top text extension point
✅
DrawTopText
Keep
ESP lines on look
✅
AdjustESPLines
Keep — primary information channel
Inventory panel
✅
derma/
Rebuild
Door / access panels
✅
cl_door.lua, cl_access.lua
Rebuild
Laws panel
✅
cl_laws.lua
Rebuild
Scoreboard
✅
gamemode/scoreboard/
Rebuild
Log viewer (access-gated)
✅
libraries/sh_log.lua
Keep
Derma layouts
🚫
derma/
Drop entirely
Weapons
Feature
Status
Legacy location
Disposition
Shared weapon base
✅
entities/weapons/rg_base
Rebuild
17 weapons
✅
entities/weapons/
Rebuild as data
Holster slots (1 large, 2 small)
✅
_GunCounts, config
Keep
Timed equip, cancelled by movement
✅
items/base/weapon.lua
Keep — the interaction model
Deploy cooldown
✅
_NextDeploy
Keep
Ammo as items
✅
items/ammo/
Keep
Weapons dropped on police kill
✅
Police Kill Drop
Keep
Damage scaling (head ×5, chest ×2, limb ×0.75)
✅
config
Keep
Anti-propkill
✅
config
Drop (no prop sandbox)
Attachments, jamming
❌
—
New
Melee, thrown
⚠️
baton, knife
Keep
Not present at all
Feature
Master plan phase
Notes
NPC framework
14
items/base/npc.lua exists; no AI
Crafting
15
/manufacture is a purchase, not crafting
Housing
16
Emergent from door ownership only
Medical
10
drugs category + sleep regen
Character creation
5
—
Banks
11
The enabling hook was built; the bank was not
Automated tests
22
—
Summary
Of the master plan's 24 phases, the original provides:
Strong, well-tuned behaviour for: inventory, items, doors and property, jobs and
factions, crime and policing, chat and commands, hunger and stamina, and the economy's
role-monopoly structure.
Partial or emergent behaviour for: injuries, healing, trading, nested containers,
bleeding.
Nothing at all for: character creation, NPCs, crafting, housing, medical, banks,
vendors, evidence, and every form of automated testing.
Roughly 60% of the master plan is new design work. The 40% that exists is worth
studying closely, because its tuning is the product of years of live play — and that tuning,
not its code, is the thing being preserved.