From dfae071015d4563b39d242ef6acdb238d93fbc21 Mon Sep 17 00:00:00 2001
From: Ghommie <42542238+Ghommie@users.noreply.github.com>
Date: Mon, 11 May 2020 19:05:58 +0200
Subject: [PATCH] Final adjustments.
---
code/__DEFINES/skills/helpers.dm | 6 +++---
code/datums/skills/_skill_holder.dm | 2 +-
code/datums/skills/_skill_modifier.dm | 16 ++++++++++++----
code/datums/wires/_wires.dm | 4 ++--
4 files changed, 18 insertions(+), 10 deletions(-)
diff --git a/code/__DEFINES/skills/helpers.dm b/code/__DEFINES/skills/helpers.dm
index 9f1fbbf0e2..dde412fd7d 100644
--- a/code/__DEFINES/skills/helpers.dm
+++ b/code/__DEFINES/skills/helpers.dm
@@ -23,7 +23,7 @@
* from/to new/old minds.
*/
#define ADD_SKILL_MODIFIER_BODY(path, id, body, prototype) \
- prototype = GLOB.skill_modifiers[GET_SKILL_MOD_ID(path, id)] || new path(id);\
+ prototype = GLOB.skill_modifiers[GET_SKILL_MOD_ID(path, id)] || new path(id, TRUE);\
if(body.mind){\
body.mind.add_skill_modifier(prototype.identifier)\
} else {\
@@ -43,6 +43,6 @@
///Macro used when adding generic singleton skill modifiers.
#define ADD_SINGLETON_SKILL_MODIFIER(mind, path, id) \
if(!GLOB.skill_modifiers[GET_SKILL_MOD_ID(path, id)]){\
- new path(id)\
+ new path(id, TRUE)\
};\
- mind.add_skill_modifier(GET_SKILL_MOD_ID(path, id))
\ No newline at end of file
+ mind.add_skill_modifier(GET_SKILL_MOD_ID(path, id))
diff --git a/code/datums/skills/_skill_holder.dm b/code/datums/skills/_skill_holder.dm
index ecc7bb0878..500b49a1ff 100644
--- a/code/datums/skills/_skill_holder.dm
+++ b/code/datums/skills/_skill_holder.dm
@@ -52,7 +52,7 @@
for(var/k in L)
var/datum/skill_modifier/M = GLOB.skill_modifiers[k]
. = M.apply_modifier(., skill, skill_holder, MODIFIER_TARGET_LEVEL)
- . = SANITIZE_SKILL_LEVEL(skill, round ? round(.) : .)
+ . = SANITIZE_SKILL_LEVEL(skill, round ? round(., 1) : .)
/**
* Grabs our affinity for a skill. !!This is a multiplier!!
diff --git a/code/datums/skills/_skill_modifier.dm b/code/datums/skills/_skill_modifier.dm
index e704e13dea..a2c9552871 100644
--- a/code/datums/skills/_skill_modifier.dm
+++ b/code/datums/skills/_skill_modifier.dm
@@ -10,7 +10,7 @@ GLOBAL_LIST_EMPTY(potential_mods_per_skill)
/// flags for this skill modifier.
var/modifier_flags = NONE
/// target skills, can be a specific skill typepath or a set of skill flags.
- var/target_skills = ALL
+ var/target_skills = NONE
/// The identifier key this skill modifier is associated with.
var/identifier
/// skill affinity modifier, can be a multiplier or addendum, depending on the modifier_flags flags.
@@ -22,15 +22,21 @@ GLOBAL_LIST_EMPTY(potential_mods_per_skill)
/// Priority of this skill modifier compared to other ones.
var/priority = MODIFIER_SKILL_PRIORITY_DEF
-/datum/skill_modifier/New(id)
+/datum/skill_modifier/New(id, register = FALSE)
identifier = GET_SKILL_MOD_ID(type, id)
if(id)
var/former_id = identifier
var/dupe = 0
while(GLOB.skill_modifiers[identifier])
identifier = "[former_id][++dupe]"
- GLOB.skill_modifiers[identifier] = src
+ if(register)
+ register()
+
+/datum/skill_modifier/proc/register()
+ if(GLOB.skill_modifiers[identifier])
+ CRASH("Skill modifier identifier \"[identifier]\" already taken.")
+ GLOB.skill_modifiers[identifier] = src
if(ispath(target_skills))
var/list/mod_L = GLOB.potential_mods_per_skill[target_skills]
if(!mod_L)
@@ -147,11 +153,13 @@ GLOBAL_LIST_EMPTY(potential_mods_per_skill)
if(MODIFIER_TARGET_AFFINITY)
mod = affinity_mod
+ var/diff = 0
if(modifier_flags & (MODIFIER_SKILL_VIRTUE|MODIFIER_SKILL_HANDICAP))
if(modifier_flags & MODIFIER_SKILL_VIRTUE)
. = max(., mod)
if(modifier_flags & MODIFIER_SKILL_HANDICAP)
. = min(., mod)
+ diff = . - mod
else if(modifier_flags & MODIFIER_SKILL_MULT)
. *= mod
else
@@ -164,7 +172,7 @@ GLOBAL_LIST_EMPTY(potential_mods_per_skill)
to_access = H.original_levels
if(MODIFIER_TARGET_AFFINITY)
to_access = H.original_affinities
- . += value - LAZYACCESS(to_access[identifier], "[skillpath]")
+ . += value - diff - LAZYACCESS(to_access[identifier], "[skillpath]")
///Body bound modifier signal procs.
/datum/skill_modifier/proc/on_mind_transfer(datum/mind/source, mob/new_character, mob/old_character)
diff --git a/code/datums/wires/_wires.dm b/code/datums/wires/_wires.dm
index e020afa47a..9df144b184 100644
--- a/code/datums/wires/_wires.dm
+++ b/code/datums/wires/_wires.dm
@@ -138,7 +138,7 @@
if(current_users[user])
return FALSE
if(req_skill && user?.mind)
- var/level_diff = req_skill - user.mind.get_skill_level(/datum/skill/level/job/wiring)
+ var/level_diff = req_skill - user.mind.get_skill_level(/datum/skill/level/job/wiring, round = TRUE)
if(level_diff > 0)
LAZYSET(current_users, user, TRUE)
to_chat(user, "You begin cutting [holder]'s [color] wire...")
@@ -167,7 +167,7 @@
if(current_users[user])
return FALSE
if(req_skill && user?.mind)
- var/level_diff = req_skill - user.mind.get_skill_level(/datum/skill/level/job/wiring)
+ var/level_diff = req_skill - user.mind.get_skill_level(/datum/skill/level/job/wiring, round = TRUE)
if(level_diff > 0)
LAZYSET(current_users, user, TRUE)
to_chat(user, "You begin pulsing [holder]'s [color] wire...")