Skip to content

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) KeepEVENT_* 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 DropD-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} DropADR-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.Maxdead 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.