mirror of
https://github.com/fulpstation/fulpstation.git
synced 2025-12-10 18:11:47 +00:00
Refactors skill modifiers to use dictionaries (#48572)
* adds dictionaries woo * fixes bad code * duh
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
|
||||
// Skills
|
||||
// Skill levels
|
||||
#define SKILL_LEVEL_NONE 0
|
||||
#define SKILL_LEVEL_NOVICE 1
|
||||
#define SKILL_LEVEL_APPRENTICE 2
|
||||
@@ -8,6 +8,7 @@
|
||||
#define SKILL_LEVEL_MASTER 5
|
||||
#define SKILL_LEVEL_LEGENDARY 6
|
||||
|
||||
//Skill experience thresholds
|
||||
#define SKILL_EXP_NOVICE 100
|
||||
#define SKILL_EXP_APPRENTICE 250
|
||||
#define SKILL_EXP_JOURNEYMAN 500
|
||||
@@ -15,5 +16,9 @@
|
||||
#define SKILL_EXP_MASTER 1500
|
||||
#define SKILL_EXP_LEGENDARY 2500
|
||||
|
||||
//Skill modifier types
|
||||
#define SKILL_SPEED_MODIFIER "skill_speed_modifier"
|
||||
|
||||
|
||||
// Gets the reference for the skill type that was given
|
||||
#define GetSkillRef(A) (SSskills.all_skills[A])
|
||||
|
||||
@@ -153,10 +153,10 @@
|
||||
else
|
||||
to_chat(current, "<span class='warning'>I feel like I've become worse at [S.name]!</span>")
|
||||
|
||||
///Gets the skill's singleton and returns the result of its get_skill_speed_modifier
|
||||
/datum/mind/proc/get_skill_speed_modifier(skill)
|
||||
///Gets the skill's singleton and returns the result of its get_skill_modifier
|
||||
/datum/mind/proc/get_skill_modifier(skill, modifier)
|
||||
var/datum/skill/S = GetSkillRef(skill)
|
||||
return S.get_skill_speed_modifier(known_skills[S] || SKILL_LEVEL_NONE)
|
||||
return S.get_skill_modifier(modifier, known_skills[S] || SKILL_LEVEL_NONE)
|
||||
|
||||
/datum/mind/proc/get_skill_level(skill)
|
||||
var/datum/skill/S = GetSkillRef(skill)
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/datum/skill
|
||||
var/name = "Skill"
|
||||
var/desc = "the art of doing things"
|
||||
var/modifiers = list(SKILL_SPEED_MODIFIER = list(1, 1, 1, 1, 1, 1, 1)) //Dictionary of modifier type - list of modifiers (indexed by level). 7 entries in each list for all 7 skill levels.
|
||||
|
||||
/datum/skill/proc/get_skill_speed_modifier(level)
|
||||
return
|
||||
/datum/skill/proc/get_skill_modifier(modifier, level)
|
||||
return modifiers[modifier][level+1] //+1 because lists start at 1
|
||||
|
||||
@@ -1,20 +1,4 @@
|
||||
/datum/skill/medical
|
||||
name = "Medical"
|
||||
desc = "From Bandaids to biopsies, this improves your ability to get people back up both in the field and on the operating table."
|
||||
|
||||
/datum/skill/medical/get_skill_speed_modifier(level)
|
||||
switch(level)
|
||||
if(SKILL_LEVEL_NONE)
|
||||
return 1
|
||||
if(SKILL_LEVEL_NOVICE)
|
||||
return 0.95
|
||||
if(SKILL_LEVEL_APPRENTICE)
|
||||
return 0.9
|
||||
if(SKILL_LEVEL_JOURNEYMAN)
|
||||
return 0.85
|
||||
if(SKILL_LEVEL_EXPERT)
|
||||
return 0.75
|
||||
if(SKILL_LEVEL_MASTER)
|
||||
return 0.6
|
||||
if(SKILL_LEVEL_LEGENDARY)
|
||||
return 0.5
|
||||
modifiers = list(SKILL_SPEED_MODIFIER = list(1, 0.95, 0.9, 0.85, 0.75, 0.6, 0.5))
|
||||
|
||||
@@ -1,20 +1,4 @@
|
||||
/datum/skill/mining
|
||||
name = "Mining"
|
||||
desc = "A dwarf's biggest skill, after drinking."
|
||||
|
||||
/datum/skill/mining/get_skill_speed_modifier(level)
|
||||
switch(level)
|
||||
if(SKILL_LEVEL_NONE)
|
||||
return 1
|
||||
if(SKILL_LEVEL_NOVICE)
|
||||
return 0.95
|
||||
if(SKILL_LEVEL_APPRENTICE)
|
||||
return 0.9
|
||||
if(SKILL_LEVEL_JOURNEYMAN)
|
||||
return 0.85
|
||||
if(SKILL_LEVEL_EXPERT)
|
||||
return 0.75
|
||||
if(SKILL_LEVEL_MASTER)
|
||||
return 0.65
|
||||
if(SKILL_LEVEL_LEGENDARY)
|
||||
return 0.5
|
||||
modifiers = list(SKILL_SPEED_MODIFIER = list(1, 0.95, 0.9, 0.85, 0.75, 0.6, 0.5))
|
||||
|
||||
@@ -765,7 +765,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
|
||||
|
||||
if(tool_behaviour == TOOL_MINING && ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
skill_modifier = H.mind.get_skill_speed_modifier(/datum/skill/mining)
|
||||
skill_modifier = H.mind.get_skill_modifier(/datum/skill/mining, SKILL_SPEED_MODIFIER)
|
||||
|
||||
delay *= toolspeed * skill_modifier
|
||||
|
||||
|
||||
@@ -58,10 +58,10 @@
|
||||
user.visible_message("<span class='green'>[user] applies \the [src] on [C]'s [affecting.name].</span>", "<span class='green'>You apply \the [src] on [C]'s [affecting.name].</span>")
|
||||
var/brute2heal = brute
|
||||
var/burn2heal = burn
|
||||
if(user?.mind?.get_skill_speed_modifier(/datum/skill/medical))
|
||||
var/skillmods = user.mind.get_skill_speed_modifier(/datum/skill/medical)
|
||||
brute2heal *= (2-skillmods)
|
||||
burn2heal *= (2-skillmods)
|
||||
var/skill_mod = user?.mind?.get_skill_modifier(/datum/skill/medical, SKILL_SPEED_MODIFIER)
|
||||
if(skill_mod)
|
||||
brute2heal *= (2-skill_mod)
|
||||
burn2heal *= (2-skill_mod)
|
||||
if(affecting.heal_damage(brute2heal, burn2heal))
|
||||
C.update_damage_overlays()
|
||||
return TRUE
|
||||
|
||||
@@ -78,7 +78,7 @@
|
||||
implement_speed_mod = implements[implement_type] / 100.0
|
||||
|
||||
speed_mod /= (get_location_modifier(target) * (1 + surgery.speed_modifier) * implement_speed_mod)
|
||||
var/modded_time = time * speed_mod * user.mind.get_skill_speed_modifier(/datum/skill/medical)
|
||||
var/modded_time = time * speed_mod * user.mind.get_skill_modifier(/datum/skill/medical, SKILL_SPEED_MODIFIER)
|
||||
|
||||
|
||||
fail_prob = min(max(0, modded_time - (time * SURGERY_SLOWDOWN_CAP_MULTIPLIER)),99)//if modded_time > time * modifier, then fail_prob = modded_time - time*modifier. starts at 0, caps at 99
|
||||
|
||||
Reference in New Issue
Block a user