diff --git a/code/controllers/subsystem/autotransfer.dm b/code/controllers/subsystem/autotransfer.dm index 0afa07939e..4b4405c8cf 100644 --- a/code/controllers/subsystem/autotransfer.dm +++ b/code/controllers/subsystem/autotransfer.dm @@ -31,7 +31,7 @@ SUBSYSTEM_DEF(autotransfer) if(world.time < targettime) return if(maxvotes == NO_MAXVOTES_CAP || maxvotes > curvotes) - SSvote.initiate_vote("transfer","server") + SSvote.initiate_vote("transfer","server", votesystem=APPROVAL_VOTING) targettime = targettime + voteinterval curvotes++ else diff --git a/code/datums/traits/_quirk.dm b/code/datums/traits/_quirk.dm index 313923e689..8a5bbef357 100644 --- a/code/datums/traits/_quirk.dm +++ b/code/datums/traits/_quirk.dm @@ -14,6 +14,7 @@ /// should we immediately call on_spawn or add a timer to trigger var/on_spawn_immediate = TRUE var/mob/living/quirk_holder + var/processing_quirk = FALSE /datum/quirk/New(mob/living/quirk_mob, spawn_effects) if(!quirk_mob || (human_only && !ishuman(quirk_mob)) || quirk_mob.has_quirk(type)) @@ -26,7 +27,8 @@ quirk_holder.roundstart_quirks += src if(mob_trait) ADD_TRAIT(quirk_holder, mob_trait, ROUNDSTART_TRAIT) - START_PROCESSING(SSquirks, src) + if(processing_quirk) + START_PROCESSING(SSquirks, src) add() if(spawn_effects) if(on_spawn_immediate) @@ -36,7 +38,8 @@ addtimer(CALLBACK(src, .proc/post_add), 30) /datum/quirk/Destroy() - STOP_PROCESSING(SSquirks, src) + if(processing_quirk) + STOP_PROCESSING(SSquirks, src) remove() if(quirk_holder) to_chat(quirk_holder, lose_text) diff --git a/code/datums/traits/good.dm b/code/datums/traits/good.dm index a0f62a32b8..3bcca275a5 100644 --- a/code/datums/traits/good.dm +++ b/code/datums/traits/good.dm @@ -72,6 +72,7 @@ mob_trait = TRAIT_JOLLY mood_quirk = TRUE medical_record_text = "Patient demonstrates constant euthymia irregular for environment. It's a bit much, to be honest." + processing_quirk = TRUE /datum/quirk/jolly/on_process() if(prob(0.05)) diff --git a/code/datums/traits/negative.dm b/code/datums/traits/negative.dm index 8958226ff4..3d0588a112 100644 --- a/code/datums/traits/negative.dm +++ b/code/datums/traits/negative.dm @@ -25,6 +25,7 @@ lose_text = "You no longer feel depressed." //if only it were that easy! medical_record_text = "Patient has a severe mood disorder, causing them to experience acute episodes of depression." mood_quirk = TRUE + processing_quirk = TRUE /datum/quirk/depression/on_process() if(prob(0.05)) @@ -38,6 +39,7 @@ medical_record_text = "Patient demonstrates an unnatural attachment to a family heirloom." var/obj/item/heirloom var/where + processing_quirk = TRUE GLOBAL_LIST_EMPTY(family_heirlooms) @@ -102,6 +104,7 @@ GLOBAL_LIST_EMPTY(family_heirlooms) gain_text = "You feel smooth." lose_text = "You feel wrinkled again." medical_record_text = "Patient has a tumor in their brain that is slowly driving them to brain death." + processing_quirk = TRUE /datum/quirk/brainproblems/on_process() quirk_holder.adjustOrganLoss(ORGAN_SLOT_BRAIN, 0.2) @@ -129,25 +132,38 @@ GLOBAL_LIST_EMPTY(family_heirlooms) value = -1 medical_record_text = "Patient demonstrates a fear of the dark. (Seriously?)" -/datum/quirk/nyctophobia/on_process() - var/mob/living/carbon/human/H = quirk_holder - if(H.dna.species.id in list("shadow", "nightmare")) - return //we're tied with the dark, so we don't get scared of it; don't cleanse outright to avoid cheese - var/turf/T = get_turf(quirk_holder) - var/lums = T.get_lumcount() - if(lums <= 0.2) - if(quirk_holder.m_intent == MOVE_INTENT_RUN) - addtimer(CALLBACK(src, .proc/recheck),2) //0.2 seconds of being in the dark - SEND_SIGNAL(quirk_holder, COMSIG_ADD_MOOD_EVENT, "nyctophobia", /datum/mood_event/nyctophobia) - else - SEND_SIGNAL(quirk_holder, COMSIG_CLEAR_MOOD_EVENT, "nyctophobia") +/datum/quirk/nyctophobia/add() + RegisterSignal(quirk_holder, COMSIG_MOVABLE_MOVED, .proc/on_holder_moved) -/datum/quirk/nyctophobia/proc/recheck() - var/turf/T = get_turf(quirk_holder) - var/lums = T.get_lumcount() - if(lums <= 0.2) //check again, did they remain in the dark for 0.2 seconds? - to_chat(quirk_holder, "Easy, easy, take it slow... you're in the dark...") +/datum/quirk/nyctophobia/remove() + UnregisterSignal(quirk_holder, COMSIG_MOVABLE_MOVED) + SEND_SIGNAL(quirk_holder, COMSIG_CLEAR_MOOD_EVENT, "nyctophobia") + +/// Called when the quirk holder moves. Updates the quirk holder's mood. +/datum/quirk/nyctophobia/proc/on_holder_moved(mob/living/source, atom/old_loc, dir, forced) + if(quirk_holder.stat != CONSCIOUS || quirk_holder.IsSleeping() || quirk_holder.IsUnconscious()) + return + + var/mob/living/carbon/human/human_holder = quirk_holder + + if(human_holder.dna?.species.id in list(SPECIES_SHADOW, SPECIES_NIGHTMARE)) + return + + if((human_holder.sight & SEE_TURFS) == SEE_TURFS) + return + + var/turf/holder_turf = get_turf(quirk_holder) + + var/lums = holder_turf.get_lumcount() + + if(lums > 0.2) + SEND_SIGNAL(quirk_holder, COMSIG_CLEAR_MOOD_EVENT, "nyctophobia") + return + + if(quirk_holder.m_intent == MOVE_INTENT_RUN) + to_chat(quirk_holder, span_warning("Easy, easy, take it slow... you're in the dark...")) quirk_holder.toggle_move_intent() + SEND_SIGNAL(quirk_holder, COMSIG_ADD_MOOD_EVENT, "nyctophobia", /datum/mood_event/nyctophobia) /datum/quirk/lightless name = "Light Sensitivity" @@ -157,6 +173,36 @@ GLOBAL_LIST_EMPTY(family_heirlooms) lose_text = "Enlightening." medical_record_text = "Despite my warnings, the patient refuses turn on the lights, only to end up rolling down a full flight of stairs and into the cellar." +/datum/quirk/lightless/add() + RegisterSignal(quirk_holder, COMSIG_MOVABLE_MOVED, .proc/on_holder_moved) + +/datum/quirk/lightless/remove() + UnregisterSignal(quirk_holder, COMSIG_MOVABLE_MOVED) + SEND_SIGNAL(quirk_holder, COMSIG_CLEAR_MOOD_EVENT, "brightlight") + +/datum/quirk/lightless/proc/on_holder_moved(mob/living/source, atom/old_loc, dir, forced) + if(quirk_holder.stat != CONSCIOUS || quirk_holder.IsSleeping() || quirk_holder.IsUnconscious()) + return + + var/mob/living/carbon/human/human_holder = quirk_holder + + if(human_holder.dna?.species.id in list(SPECIES_SHADOW, SPECIES_NIGHTMARE)) + return + + if((human_holder.sight & SEE_TURFS) == SEE_TURFS) + return + + var/turf/holder_turf = get_turf(quirk_holder) + + var/lums = holder_turf.get_lumcount() + + if(lums < 0.8) + SEND_SIGNAL(quirk_holder, COMSIG_CLEAR_MOOD_EVENT, "brightlight") + return + + SEND_SIGNAL(quirk_holder, COMSIG_ADD_MOOD_EVENT, "brightlight", /datum/mood_event/brightlight) + + /datum/quirk/lightless/on_process() var/turf/T = get_turf(quirk_holder) var/lums = T.get_lumcount() @@ -236,6 +282,7 @@ GLOBAL_LIST_EMPTY(family_heirlooms) gain_text = "..." lose_text = "You feel in tune with the world again." medical_record_text = "Patient suffers from acute Reality Dissociation Syndrome and experiences vivid hallucinations." + processing_quirk = TRUE /datum/quirk/insanity/on_process() if(quirk_holder.reagents.has_reagent(/datum/reagent/toxin/mindbreaker)) @@ -261,6 +308,7 @@ GLOBAL_LIST_EMPTY(family_heirlooms) lose_text = "You feel easier about talking again." //if only it were that easy! medical_record_text = "Patient is usually anxious in social encounters and prefers to avoid them." var/dumb_thing = TRUE + processing_quirk = TRUE /datum/quirk/social_anxiety/add() RegisterSignal(quirk_holder, COMSIG_MOB_EYECONTACT, .proc/eye_contact) diff --git a/code/modules/vehicles/mecha/_mecha.dm b/code/modules/vehicles/mecha/_mecha.dm index 99020ec7df..f1e4d4468b 100644 --- a/code/modules/vehicles/mecha/_mecha.dm +++ b/code/modules/vehicles/mecha/_mecha.dm @@ -272,7 +272,7 @@ /obj/vehicle/sealed/mecha/proc/update_part_values() ///Updates the values given by scanning module and capacitor tier, called when a part is removed or inserted. if(scanmod) - normal_step_energy_drain = 20 - (5 * scanmod.rating) //10 is normal, so on lowest part its worse, on second its ok and on higher its real good up to 0 on best + normal_step_energy_drain = initial(normal_step_energy_drain) * (1.5 / (scanmod.rating - 0.5)) //movement power cost is 3x of default at T1, 1x at T2, 0.6x at T3 and 0.4x at T4 step_energy_drain = normal_step_energy_drain else normal_step_energy_drain = 500 @@ -641,6 +641,9 @@ if(!Process_Spacemove(direction)) return FALSE if(!has_charge(step_energy_drain)) + if(TIMER_COOLDOWN_CHECK(src, COOLDOWN_MECHA_MESSAGE)) + to_chat(occupants, "[icon2html(src, occupants)]Insufficient power to move!") + TIMER_COOLDOWN_START(src, COOLDOWN_MECHA_MESSAGE, 2 SECONDS) return FALSE if(zoom_mode) to_chat(occupants, "[icon2html(src, occupants)]Unable to move while in zoom mode!") @@ -651,7 +654,7 @@ if(!scanmod || !capacitor) to_chat(occupants, "[icon2html(src, occupants)]Missing [scanmod? "capacitor" : "scanning module"].") return FALSE - if(lavaland_only && is_mining_level(z)) + if(lavaland_only && !is_mining_level(z)) to_chat(occupants, "[icon2html(src, occupants)]Invalid Environment.") return FALSE @@ -683,6 +686,7 @@ return TRUE set_glide_size(DELAY_TO_GLIDE_SIZE(movedelay)) + use_power(step_energy_drain) //Otherwise just walk normally . = step(src,direction, dir) diff --git a/code/modules/vehicles/mecha/combat/gygax.dm b/code/modules/vehicles/mecha/combat/gygax.dm index 29746a5fc7..ae7f846142 100644 --- a/code/modules/vehicles/mecha/combat/gygax.dm +++ b/code/modules/vehicles/mecha/combat/gygax.dm @@ -9,12 +9,13 @@ deflect_chance = 5 armor = list(MELEE = 25, BULLET = 20, LASER = 30, ENERGY = 15, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 100) max_temperature = 25000 - leg_overload_coeff = 80 + leg_overload_coeff = 300 + overload_step_energy_drain_min = 300 force = 25 wreckage = /obj/structure/mecha_wreckage/gygax internal_damage_threshold = 35 max_equip = 3 - step_energy_drain = 3 + normal_step_energy_drain = 3 /obj/vehicle/sealed/mecha/combat/gygax/dark desc = "A lightweight exosuit, painted in a dark scheme. This model appears to have some modifications." @@ -24,7 +25,8 @@ deflect_chance = 20 armor = list(MELEE = 40, BULLET = 40, LASER = 50, ENERGY = 35, BOMB = 20, BIO = 0, RAD =20, FIRE = 100, ACID = 100) max_temperature = 35000 - leg_overload_coeff = 70 + leg_overload_coeff = 100 + overload_step_energy_drain_min = 100 force = 30 operation_req_access = list(ACCESS_SYNDICATE) internals_req_access = list(ACCESS_SYNDICATE) diff --git a/code/modules/vehicles/mecha/combat/medigax.dm b/code/modules/vehicles/mecha/combat/medigax.dm index 6b2f54a976..ec38dd37db 100644 --- a/code/modules/vehicles/mecha/combat/medigax.dm +++ b/code/modules/vehicles/mecha/combat/medigax.dm @@ -11,7 +11,7 @@ max_temperature = 25000 wreckage = /obj/structure/mecha_wreckage/odysseus internal_damage_threshold = 35 - step_energy_drain = 6 + normal_step_energy_drain = 6 infra_luminosity = 6 internals_req_access = list(ACCESS_ROBOTICS, ACCESS_MEDICAL) diff --git a/code/modules/vehicles/mecha/combat/phazon.dm b/code/modules/vehicles/mecha/combat/phazon.dm index c964b17e36..fad2b0783c 100644 --- a/code/modules/vehicles/mecha/combat/phazon.dm +++ b/code/modules/vehicles/mecha/combat/phazon.dm @@ -4,7 +4,7 @@ icon_state = "phazon" movedelay = 2 dir_in = 2 //Facing South. - step_energy_drain = 3 + normal_step_energy_drain = 3 max_integrity = 200 deflect_chance = 30 armor = list(MELEE = 30, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 30, BIO = 0, RAD = 50, FIRE = 100, ACID = 100) diff --git a/code/modules/vehicles/mecha/combat/reticence.dm b/code/modules/vehicles/mecha/combat/reticence.dm index b0c8b07aaf..300023b7ab 100644 --- a/code/modules/vehicles/mecha/combat/reticence.dm +++ b/code/modules/vehicles/mecha/combat/reticence.dm @@ -14,7 +14,7 @@ mecha_flags = CANSTRAFE | IS_ENCLOSED | HAS_LIGHTS internal_damage_threshold = 25 max_equip = 2 - step_energy_drain = 3 + normal_step_energy_drain = 3 color = "#87878715" stepsound = null turnsound = null diff --git a/code/modules/vehicles/mecha/medical/odysseus.dm b/code/modules/vehicles/mecha/medical/odysseus.dm index bd415cd64f..dd693f9dbb 100644 --- a/code/modules/vehicles/mecha/medical/odysseus.dm +++ b/code/modules/vehicles/mecha/medical/odysseus.dm @@ -9,7 +9,7 @@ wreckage = /obj/structure/mecha_wreckage/odysseus internal_damage_threshold = 35 deflect_chance = 15 - step_energy_drain = 6 + normal_step_energy_drain = 6 internals_req_access = list(ACCESS_ROBOTICS, ACCESS_MEDICAL) /obj/vehicle/sealed/mecha/medical/odysseus/moved_inside(mob/living/carbon/human/H) diff --git a/code/modules/vehicles/mecha/working/ripley.dm b/code/modules/vehicles/mecha/working/ripley.dm index 965cdbedd9..40b2e61402 100644 --- a/code/modules/vehicles/mecha/working/ripley.dm +++ b/code/modules/vehicles/mecha/working/ripley.dm @@ -96,7 +96,7 @@ movedelay = 4 lights_power = 7 wreckage = /obj/structure/mecha_wreckage/ripley/deathripley - step_energy_drain = 0 + normal_step_energy_drain = 0 enclosed = TRUE enter_delay = 40 silicon_icon_state = null diff --git a/html/changelogs/archive/2022-06.yml b/html/changelogs/archive/2022-06.yml new file mode 100644 index 0000000000..021aa9a172 --- /dev/null +++ b/html/changelogs/archive/2022-06.yml @@ -0,0 +1,17 @@ +2022-06-01: + DeltaFire15: + - bugfix: Mechs now use power when moving. + - bugfix: The check for mining-only mechs is no longer inverted to only allow non-mining + z levels. + - bugfix: Reverted an accidental buff from the /tg/ mech code port and its adjustment + to citadel's mech state. + - bugfix: 'Mechs with different base movement power cost now actually have it apply + instead of immediately being overwritten. tweak: Adjusted part impact on movement + power use to make more sense.' + timothyteakettle: + - rscadd: 'optimises quirks somewhat tweak: nyctophobia will now stop run intent + when you try to move in darkness with it on, compared to the old behaviour of + automatically turning it off in darkness when it is on and you have been in + darkness for >= 0.2 seconds tweak: nyctophobia and lightless will both not update + your mood until you move now, as part of the optimisations made by changing + them to tg code'