diff --git a/code/datums/character_flaw/_character_flaw.dm b/code/datums/character_flaw/_character_flaw.dm index 20fa7d4e6b3..5d81b7e648b 100644 --- a/code/datums/character_flaw/_character_flaw.dm +++ b/code/datums/character_flaw/_character_flaw.dm @@ -32,6 +32,7 @@ GLOBAL_LIST_INIT(character_flaws, list( //Caustic edit "Bottomless"=/datum/charflaw/bottomless, "Asundered Mind"=/datum/charflaw/mind_broken, + "Combat Adverse"=/datum/charflaw/combat_adverse, //Caustic edit end "Hunted"=/datum/charflaw/hunted, /datum/charflaw/mind_broken::name = /datum/charflaw/mind_broken, diff --git a/code/game/objects/structures/crates_lockers/roguetown.dm b/code/game/objects/structures/crates_lockers/roguetown.dm index 347ecda5e6e..070198f4e6a 100644 --- a/code/game/objects/structures/crates_lockers/roguetown.dm +++ b/code/game/objects/structures/crates_lockers/roguetown.dm @@ -70,6 +70,39 @@ var/I = pickweight(loot) new I(src) +//Caustic Edit +/obj/structure/closet/crate/chest/gravechest + +/obj/structure/closet/crate/chest/gravechest/PopulateContents() + var/list/loot = list(/obj/item/rogueweapon/huntingknife/idagger/steel=10, + /obj/item/rogueweapon/mace/steel=10, + /obj/item/rogueweapon/pick=20, + /obj/item/rogueweapon/shovel=20, + /obj/item/clothing/suit/roguetown/armor/gambeson=15, + /obj/item/clothing/suit/roguetown/armor/leather=15, + /obj/item/ingot/iron=20, + /obj/item/ingot/gold=5, + /obj/item/ingot/silver=3, + /obj/item/riddleofsteel=1, + /obj/item/roguegem/ruby=2, + /obj/item/roguegem/blue=3, + /obj/item/roguegem/violet=4, + /obj/item/roguegem/green=6, + /obj/item/roguegem/yellow=10, + /obj/item/roguecoin/silver/pile=2, + /obj/item/roguecoin/gold/pile=6, + /obj/item/storage/belt/rogue/pouch/coins/mid=8, + /obj/item/storage/belt/rogue/pouch/coins/rich=8, + /obj/item/storage/backpack/rogue/satchel/otavan=30, + /obj/item/roguestatue/gold/loot=1, + /obj/item/clothing/neck/roguetown/talkstone=2) + + var/i + for(i=0, i<3, i++) + var/I = pickweight(loot) + new I(src) +//Caustic Edit End + /obj/structure/closet/crate/roguecloset name = "closet" desc = "A simple wooden closet, used to store whatever it is you would like out of sight." diff --git a/code/modules/client/preferences_toggles.dm b/code/modules/client/preferences_toggles.dm index 12af9d1630f..4b9bfcb9023 100644 --- a/code/modules/client/preferences_toggles.dm +++ b/code/modules/client/preferences_toggles.dm @@ -49,16 +49,16 @@ else to_chat(src, "Screen shake disabled.") -/client/verb/masked_examine() +/client/verb/masked_examine() //Caustic Edit - Just... fixing this up everywhere it's used to be consistent. And not stupidly inversed? If this is true, it's ALLOWING the info. set category = "Options" set name = "Toggle Masked Examine" if(prefs) prefs.masked_examine = !prefs.masked_examine prefs.save_preferences() - if(!prefs.masked_examine) + if(prefs.masked_examine) to_chat(src, "Your character information will be viewable when masked.") else - to_chat(src, "Your character information will no longer be viewable when masked.") + to_chat(src, "Your character information will no longer be viewable when masked.") //Caustic Edit End /client/verb/mute_animal_emotes() set category = "Options" diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 95540fc883d..4b4573f736f 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -195,3 +195,7 @@ var/can_do_sex = TRUE fovangle = FOV_DEFAULT + + //Caustic Edit + var/time_of_last_move = 0 + //Caustic Edit End diff --git a/code/modules/mob/living/carbon/human/human_topic.dm b/code/modules/mob/living/carbon/human/human_topic.dm index a992df2b4f3..fe9dd217c13 100644 --- a/code/modules/mob/living/carbon/human/human_topic.dm +++ b/code/modules/mob/living/carbon/human/human_topic.dm @@ -215,7 +215,7 @@ GLOBAL_VAR_INIT(year_integer, text2num(year)) // = 2013??? // NEXT ROW dat += "" dat += "" - if(intellectual && (!obscured_name || !H.client?.prefs.masked_examine)) + if(intellectual && (!obscured_name || H.client?.prefs.masked_examine)) dat += "STATS:

" if(!is_guarded) dat +=("STR: \Roman [H.STASTR]
") @@ -366,7 +366,7 @@ GLOBAL_VAR_INIT(year_integer, text2num(year)) // = 2013??? dat += "" dat += "" - if(!is_guarded && !is_stupid && (!obscured_name || !H.client?.prefs.masked_examine)) //We don't see Guarded people's skills at all. + if(!is_guarded && !is_stupid && (!obscured_name || H.client?.prefs.masked_examine)) //We don't see Guarded people's skills at all. dat += "SKILLS:

" var/list/wornstuff = list(H.backr, H.backl, H.beltl, H.beltr) if(!is_normal && !is_smart) //At minimum we get to see the skills of the weapons the person is holding, if we have them. diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 22b40c5c8d1..f1f1b8e126f 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -104,6 +104,9 @@ //Caustic Edit - Adding an on_moved call for flaws! /mob/living/carbon/human/Moved(atom/OldLoc, Dir) . = ..() + if(mind) + time_of_last_move = world.time //This keeps track of the tick count since the human mob last moved, to be referenced later at any time! Only bothering to track it if the mob has a mind, IE a player (for stopping hunger and thirst loss currently!) + if(charflaw && !charflaw.ephemeral && mind) charflaw.flaw_on_moved(src, OldLoc, Dir) //Caustic Edit End diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 137330014c5..2456048b5ae 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -976,7 +976,8 @@ GLOBAL_LIST_EMPTY(roundstart_races) H.Jitter(5) hunger_rate = 10 * HUNGER_FACTOR*/ // hunger_rate *= H.physiology.hunger_mod - H.adjust_nutrition(-hunger_rate) + if(!H.mind || world.time < H.time_of_last_move + 10 MINUTES) + H.adjust_nutrition(-hunger_rate) var/obj/item/organ/breasts/breasts = H.has_breasts() if(breasts) @@ -994,7 +995,8 @@ GLOBAL_LIST_EMPTY(roundstart_races) // THEY HUNGER var/hunger_rate = HUNGER_FACTOR // hunger_rate *= H.physiology.hunger_mod - H.adjust_hydration(-hunger_rate) + if(!H.mind || world.time < H.time_of_last_move + 10 MINUTES) + H.adjust_hydration(-hunger_rate) if (H.nutrition > NUTRITION_LEVEL_FULL) diff --git a/code/modules/mob/living/simple_animal/rogue/creacher/undead_animal_helpers.dm b/code/modules/mob/living/simple_animal/rogue/creacher/undead_animal_helpers.dm index 13776b281b7..8f120753a60 100644 --- a/code/modules/mob/living/simple_animal/rogue/creacher/undead_animal_helpers.dm +++ b/code/modules/mob/living/simple_animal/rogue/creacher/undead_animal_helpers.dm @@ -43,8 +43,11 @@ GLOBAL_LIST_INIT(animal_to_undead, list( /datum/component/deadite_animal_reanimation var/reanimation_timer var/undead_to_spawn + var/attempt_later_reanimate //Caustic Edit - Var to only attempt a loop of the timer this many times /datum/component/deadite_animal_reanimation/Initialize() + attempt_later_reanimate = 3 //Caustic Edit - Init the loop counter + if(!istype(parent, /mob/living/simple_animal)) return COMPONENT_INCOMPATIBLE @@ -59,6 +62,21 @@ GLOBAL_LIST_INIT(animal_to_undead, list( /datum/component/deadite_animal_reanimation/proc/reanimate() var/mob/living/simple_animal/mob = parent + + //Caustic Edit - Add a prevention and loop the timer if someone living is nearby + if(attempt_later_reanimate > 0) + var/client_mobs = get_hearers_in_range(6, mob, SPATIAL_GRID_CONTENTS_TYPE_CLIENTS) + if(length(client_mobs)) + for(var/mob/living/player_mob as anything in client_mobs) + if(player_mob.stat == CONSCIOUS) + attempt_later_reanimate-- + if(attempt_later_reanimate >= 0) + reanimation_timer = addtimer(CALLBACK(src, PROC_REF(reanimate)), 1.5 MINUTES, TIMER_STOPPABLE) + else + UnregisterFromParent() + return + //Caustic Edit End + if(!prob(get_reanimation_chance()) || QDELETED(mob) || mob.stat != DEAD) UnregisterFromParent() return diff --git a/code/modules/roguetown/roguejobs/gravedigger/hole.dm b/code/modules/roguetown/roguejobs/gravedigger/hole.dm index 8011b590335..dc78288cfe3 100644 --- a/code/modules/roguetown/roguejobs/gravedigger/hole.dm +++ b/code/modules/roguetown/roguejobs/gravedigger/hole.dm @@ -66,12 +66,14 @@ /obj/structure/closet/dirthole/closed/loot/Initialize() . = ..() - lootroll = rand(1,4) + lootroll = rand(1,10) //Caustic Edit - Make the loot a bit more interesting. 1 - Skeleton, 2 - Buried Loot + //3 - 5 - Bones, small chance of decrepit item, 6 - 8 - Commoner Body, 9 - Noble Body, 10 - Nothing /obj/structure/closet/dirthole/closed/loot var/looted = FALSE var/lootroll = 0 +//Caustic Edit - Making the drops more interesting! /obj/structure/closet/dirthole/closed/loot/open() if(!looted) looted = TRUE @@ -79,9 +81,258 @@ if(1) new /mob/living/carbon/human/species/skeleton/npc(mastert) if(2) - new /obj/structure/closet/crate/chest/lootbox(mastert) + new /obj/structure/closet/crate/chest/gravechest(mastert) + if(3) + corpse_bones() + decrepit_chance() + if(4) + corpse_bones() + decrepit_chance() + if(5) + corpse_bones() + decrepit_chance() + if(6) + corpse_bones() + towner_chance() + if(7) + corpse_bones() + towner_chance() + if(8) + corpse_bones() + towner_chance() + if(9) + corpse_bones() + noble_chance() ..() +/obj/structure/closet/dirthole/closed/loot/proc/corpse_bones() + new /obj/item/skull(mastert) + var/num_bones = rand(2,5) + + var/i + for(i=0, i 6) + break + if(cnt > 6) + user.add_stress(/datum/stressevent/cablood) + + var/mob/living/carbon/human/human_user = user //Cast to human! + if(!istype(human_user)) + return + + if(human_user.cmode) //Check if the player is in combat mode, and increment the ticker... + if(combat_mode_ticks < 3) + combat_mode_ticks++ + else + user.add_stress(/datum/stressevent/caincombat) //If it hits 3 ticks, IE 30 seconds in combat mode, you are considered in the heat of battle! + else + combat_mode_ticks = 0 //Reset the counter when cmode is turned off! + + if(world.time < last_gear_check + 30 SECONDS) //Run the gear check every 30 seconds instead of every 10, so for every 3 checks of the prior two, this one is checked 1 time + return + last_gear_check = world.time + cnt = 0 + var/equipped = human_user.get_equipped_items() + for(var/obj/item/gear in equipped) //Check all worn gear (not held!) for if it currently has blood on it! If so, add a stack up to 3. + var/datum/component/decal/blood/bloodcomp = gear.GetComponent(/datum/component/decal/blood) + if(bloodcomp) + cnt++ + user.add_stress(/datum/stressevent/cawornblood) + if(cnt > 2) + break diff --git a/roguetown.dme b/roguetown.dme index aea436f04d4..47eb6304e03 100644 --- a/roguetown.dme +++ b/roguetown.dme @@ -3062,6 +3062,7 @@ #include "modular_causticcove\code\modules\spells\components\temper_clothing.dm" #include "modular_causticcove\code\modules\taurs\taur_bodyparts.dm" #include "modular_causticcove\code\modules\taurs\taur_markings.dm" +#include "modular_causticcove\code\modules\vices\combat_adverse.dm" #include "modular_causticcove\code\modules\vices\mind_broken.dm" #include "modular_causticcove\code\modules\vices\bottomless\bottomless.dm" #include "modular_causticcove\code\modules\vices\bottomless\maxfood.dm"