mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-07-13 08:56:49 +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>
41 lines
2.8 KiB
Plaintext
41 lines
2.8 KiB
Plaintext
#define COMSIG_BASENAME_RENAME "base_name_rename"
|
|
#define COMSIG_BASENAME_SETNAME "base_name_setname"
|
|
#define ARMED_COMBAT_SKILL_COMPONENT /datum/component/skill/armed_combat
|
|
#define FIREARMS_SKILL_COMPONENT /datum/component/skill/firearms
|
|
#define UNARMED_COMBAT_SKILL_COMPONENT /datum/component/skill/unarmed_combat
|
|
#define PILOT_MECHS_SKILL_COMPONENT /datum/component/skill/pilot_mechs
|
|
#define PILOT_SPACECRAFT_SKILL_COMPONENT /datum/component/skill/pilot_spacecraft
|
|
#define ROBOTICS_SKILL_COMPONENT /datum/component/skill/robotics
|
|
#define ARCHAOLOGY_SKILL_COMPONENT /datum/component/skill/archaology
|
|
#define RESEARCH_SKILL_COMPONENT /datum/component/skill/research
|
|
#define XENOBIOLOGY_SKILL_COMPONENT /datum/component/skill/xenobiology
|
|
#define XENOBOTANY_SKILL_COMPONENT /datum/component/skill/xenobotany
|
|
#define BARTENDING_SKILL_COMPONENT /datum/component/skill/bartending
|
|
#define COOKING_SKILL_COMPONENT /datum/component/skill/cooking
|
|
#define ENTERTAINING_SKILL_COMPONENT /datum/component/skill/entertaining
|
|
#define GARDENING_SKILL_COMPONENT /datum/component/skill/gardening
|
|
#define MEDICINE_SKILL_COMPONENT /datum/component/skill/medicine
|
|
#define SKILL_COMPONENT /datum/component/skill
|
|
#define MORALE_COMPONENT /datum/component/morale
|
|
#define ELECTRICAL_ENGINEERING_SKILL_COMPONENT /datum/component/skill/electrical_engineering
|
|
#define MECHANICAL_ENGINEERING_SKILL_COMPONENT /datum/component/skill/mechanical_engineering
|
|
#define ATMOSPHERICS_SYSTEMS_SKILL_COMPONENT /datum/component/skill/atmospherics_systems
|
|
#define REACTOR_SYSTEMS_SKILL_COMPONENT /datum/component/skill/reactor_systems
|
|
#define LEADERSHIP_SKILL_COMPONENT /datum/component/skill/leadership
|
|
#define ANATOMY_SKILL_COMPONENT /datum/component/skill/anatomy
|
|
#define FORENSICS_SKILL_COMPONENT /datum/component/skill/forensics
|
|
#define PHARMACOLOGY_SKILL_COMPONENT /datum/component/skill/pharmacology
|
|
#define SURGERY_SKILL_COMPONENT /datum/component/skill/surgery
|
|
#define TOOL_COMPONENT /datum/component/tool_quality_container
|
|
#define CAROUSING_SKILL_COMPONENT /datum/component/skill/carousing
|
|
#define TENACITY_SKILL_COMPONENT /datum/component/skill/tenacity
|
|
#define MINISTRY_SKILL_COMPONENT /datum/component/skill/ministry
|
|
#define CONDITIONING_SKILL_COMPONENT /datum/component/skill/conditioning
|
|
|
|
/**
|
|
* Trinary-Boolean helper that either returns null, or the skill level of a given skill component(which can be zero).
|
|
* It will ALWAYS be null if you try to use this to check for something that isn't a skill component, so just don't. Refer to the list above this function to see what your options are.
|
|
* Therefore, merely checking if (!this) is not sufficient to use this function, and instead you should be using isnull() on it to determine whether or not the skill exists.
|
|
*/
|
|
#define GET_SKILL_LEVEL(user, comp) astype(user.GetComponent(comp), SKILL_COMPONENT)?.skill_level
|