Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dissection tweaks: I'm tired of the corpse pile #2722

Merged
merged 9 commits into from
Mar 4, 2024
50 changes: 28 additions & 22 deletions code/modules/surgery/experimental_dissection.dm
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#define BASE_HUMAN_REWARD 500
#define MAX_DISSECTION_REWARD 2000
#define EXPDIS_FAIL_MSG "<span class='notice'>You dissect [target], but do not find anything particularly interesting.</span>"
#define PUBLIC_TECHWEB_GAIN 0.6 //how many research points go directly into the main pool
#define PRIVATE_TECHWEB_GAIN (1 - PUBLIC_TECHWEB_GAIN) //how many research points go directly into the main pool
Expand All @@ -16,7 +16,7 @@
target_mobtypes = list(/mob/living) //Feel free to dissect devils but they're magic.
replaced_by = /datum/surgery/advanced/experimental_dissection/adv
requires_tech = FALSE
var/value_multiplier = 1
var/value_multiplier = 0.25

/datum/surgery/advanced/experimental_dissection/can_start(mob/user, mob/living/target)
. = ..()
Expand Down Expand Up @@ -45,31 +45,37 @@
user.visible_message("<span class='notice'>[user] starts dissecting [target].</span>", "<span class='notice'>You start dissecting [target].</span>")

/datum/surgery_step/dissection/proc/check_value(mob/living/target, datum/surgery/advanced/experimental_dissection/ED)
var/cost = BASE_HUMAN_REWARD
var/cost = 0
var/multi_surgery_adjust = 0

//determine bonus applied
var/static/list/mob_mult_list = list(/mob/living/simple_animal/hostile/asteroid/elite = 6,
/mob/living/simple_animal/hostile/asteroid/goliath/beast/ancient/crystal = 5,
/mob/living/simple_animal/hostile/jungle/mega_arachnid = 4,
/mob/living/simple_animal/hostile/asteroid/basilisk/watcher/forgotten = 3,
/mob/living/simple_animal/hostile/asteroid/basilisk/watcher/icewing = 2,
/mob/living/simple_animal/hostile/asteroid/basilisk/watcher/magmawing = 2,
/mob/living/simple_animal/hostile/asteroid/goliath/beast/ancient = 2
)
if(isalienqueen(target) || isalienroyal(target))
cost = (BASE_HUMAN_REWARD*38)
cost = (MAX_DISSECTION_REWARD*38)
else if(isalienadult(target))
cost = (BASE_HUMAN_REWARD*30)
else if(ismonkey(target))
cost = (BASE_HUMAN_REWARD*0.5)
cost = (MAX_DISSECTION_REWARD*30)
else if(isalien(target))
cost = (MAX_DISSECTION_REWARD*14)
else if(ismegafauna(target))
cost = (MAX_DISSECTION_REWARD*30)
else if(ishuman(target))
var/mob/living/carbon/human/H = target
if(H?.dna?.species)
if(isabductor(H))
cost = (BASE_HUMAN_REWARD*24)
cost = (MAX_DISSECTION_REWARD*24)
else if(iszombie(H) || isshadow(H) || isandroid(H))
cost = (BASE_HUMAN_REWARD*20)
else if(isjellyperson(H) || ispodperson(H) || isalien(H))
cost = (BASE_HUMAN_REWARD*14)
else if(isskeleton(H))
cost = (BASE_HUMAN_REWARD * 0.5)
else
cost = (BASE_HUMAN_REWARD * 0.5)


cost = (MAX_DISSECTION_REWARD*20)
else for(var/type in mob_mult_list) // THIS. ELSE IF(). ENDS. HERE.
if(istype(target, type))
MarkSuckerberg marked this conversation as resolved.
Show resolved Hide resolved
cost = (MAX_DISSECTION_REWARD*mob_mult_list[type])
break

//now we do math for surgeries already done (no double dipping!).
for(var/i in typesof(/datum/surgery/advanced/experimental_dissection))
Expand All @@ -96,7 +102,7 @@
target.apply_damage(80, BRUTE, L)
ADD_TRAIT(target, TRAIT_DISSECTED, "[surgery.name]")
repeatable = FALSE
experience_given = max(points_earned/(BASE_HUMAN_REWARD/MEDICAL_SKILL_MEDIUM),1)
experience_given = max(points_earned/(MAX_DISSECTION_REWARD/MEDICAL_SKILL_MEDIUM),1)
return ..()

/datum/surgery_step/dissection/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
Expand All @@ -114,24 +120,24 @@

/datum/surgery/advanced/experimental_dissection/adv
name = "Thorough Dissection"
value_multiplier = 2
value_multiplier = 0.5
replaced_by = /datum/surgery/advanced/experimental_dissection/exp
requires_tech = TRUE

/datum/surgery/advanced/experimental_dissection/exp
name = "Experimental Dissection"
value_multiplier = 4
value_multiplier = 1
replaced_by = /datum/surgery/advanced/experimental_dissection/alien
requires_tech = TRUE

/datum/surgery/advanced/experimental_dissection/alien
name = "Extraterrestrial Dissection"
value_multiplier = 8
value_multiplier = 2
requires_tech = TRUE
replaced_by = null


#undef BASE_HUMAN_REWARD
#undef MAX_DISSECTION_REWARD
#undef EXPDIS_FAIL_MSG
#undef PUBLIC_TECHWEB_GAIN
#undef PRIVATE_TECHWEB_GAIN
Loading