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) 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.