mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-07-17 10:57:19 +01:00
48d8a06d1c
This PR does a few new things: 1. Adds a Mass var for Movables (/Mob, /Obj) which is literally required for me to do anything at all with Kinematics (Very routine basic physics) 2. Adds a derived "effective mass" statistic which is generated via signal hook, allowing sources like Skills, Drugs, Cybernetics etc to pitch in and contribute to a user's "Strength" in certain situations without directly modifying mass. 3. Adds a mass modifier var for species datums, while painstakingly calibrating each and every single species with consultation from every lore team. A baseline human gets 72.0kg of Human Reference Mass. Any species applied to it will multiply this by a constant that algebraically cancels out the Human Reference Mass and replaces it with a Species Reference Mass. Changing a species via the usual procs will reset and then re-apply the correct values. 4. Refactored Lift/Drag/Fireman to have limits and penalties based on relative effective mass 5. Finally, to make use of all this, I've added a new Conditioning Skill, which modifies effective mass. The standard assumption made for Lift/Carry is based in an assumption that a typical character should realistically be able to lift/carry/fireman a person 1.25x their mass. Previously the fireman carry mechanic was heavily hardcoded, and didn't have much in the way of granularity. If I wanted to RP a character that was a bodybuilder, there wasn't really a way to do this. With this PR, there's now a fairly large variety of interesting breakpoints. This also allows there to be more granularity between different species as desired by our lore teams. For example, a Zhan is in general stronger than a M'sai. To give an example in the breakpoints for two different species: Human Lift Breakpoints: Rank 1: 90kg (lift a Skrell, Human, Offworlder, M'sai, KA, or ZA) Rank 2: 112.5kg (Lift a Zhan, Shell, or Diona Coeus) Rank 3: 135kg (Lift a (Non-Industrial) IPC, Unathi) Rank 4: 157.5kg (No new breakpoints, though you get less a movespeed penalty from lugging around any of the above) Can Never Lift: Industrial, Bullwark, Diona, Vaurca Ta' Zhan Tajara Lift Breakpoints: Rank 1: 116kg (Skrell, Human, Offworlder, M'sai, Ka, Za, Zhan, Shell, or Diona Coeus) Rank 2: 145kg (Non-Industrial IPC, Unathi) Rank 3: 174kg (No new breakpoints, though you get less penalties from the above) Rank 4: 203kg (Juuuust barely lift an Industrial or Diona with heavy slowdown) <img width="1078" height="436" alt="image" src="https://github.com/user-attachments/assets/a6802515-a827-4dc1-8734-55b604c589ab" /> Conditioning as a Skill sits in the Occupational category, which has been carefully chosen and designed around to create a fairly compelling web of opportunity costs. As a skill, it's very desireable for basically any person that wants to play a "Muscular character" and also enjoys fireman carrying people around, which makes it particularly useful for hangar techs. By contrast a Paramedic might not actually need this skill, since they can bypass the usual limits by just using rollerbeds. --------- Signed-off-by: VMSolidus <evilexecutive@gmail.com>
Datum Component System (DCS)
Concept
Loosely adapted from /vg/. This is an entity component system for adding behaviours to datums when inheritance doesn't quite cut it. By using signals and events instead of direct inheritance, you can inject behaviours without hacky overloads. It requires a different method of thinking, but is not hard to use correctly. If a behaviour can have application across more than one thing. Make it generic, make it a component. Atom/mob/obj event? Give it a signal, and forward it's arguments with a SendSignal() call. Now every component that want's to can also know about this happening.
See this thread for an introduction to the system as a whole.