diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 704d40bcd18..f004e281cd4 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -485,6 +485,7 @@ datum/mind current << "\red You have been brainwashed! You are no longer a head revolutionary!" ticker.mode.update_rev_icons_removed(src) special_role = null + message_admins("[key_name_admin(usr)] has de-rev'ed [current].", 1) if("rev") if(src in ticker.mode.head_revolutionaries) @@ -498,6 +499,7 @@ datum/mind ticker.mode.revolutionaries += src ticker.mode.update_rev_icons_added(src) special_role = "Revolutionary" + message_admins("[key_name(usr)] has rev'ed [current].") if("headrev") if(src in ticker.mode.revolutionaries) @@ -522,6 +524,7 @@ datum/mind ticker.mode.head_revolutionaries += src ticker.mode.update_rev_icons_added(src) special_role = "Head Revolutionary" + message_admins("[key_name_admin(usr)] has head-rev'ed [current].", 1) if("autoobjectives") ticker.mode.forge_revolutionary_objectives(src) @@ -570,6 +573,7 @@ datum/mind cult.memoize_cult_objectives(src) current << "\red You have been brainwashed! You are no longer a cultist!" memory = "" + message_admins("[key_name_admin(usr)] has de-cult'ed [current].", 1) if("cultist") if(!(src in ticker.mode.cult)) ticker.mode.cult += src @@ -580,6 +584,7 @@ datum/mind var/datum/game_mode/cult/cult = ticker.mode if (istype(cult)) cult.memoize_cult_objectives(src) + message_admins("[key_name_admin(usr)] has cult'ed [current].", 1) if("tome") var/mob/living/carbon/human/H = current if (istype(H)) @@ -610,12 +615,14 @@ datum/mind special_role = null current.spellremove(current, config.feature_object_spell_system? "object":"verb") current << "\red You have been brainwashed! You are no longer a wizard!" + message_admins("[key_name_admin(usr)] has de-wizard'ed [current].", 1) if("wizard") if(!(src in ticker.mode.wizards)) ticker.mode.wizards += src special_role = "Wizard" //ticker.mode.learn_basic_spells(current) current << "\red You are the Space Wizard!" + message_admins("[key_name_admin(usr)] has wizard'ed [current].", 1) if("lair") current.loc = pick(wizardstart) if("dressup") @@ -635,12 +642,14 @@ datum/mind current.remove_changeling_powers() if(changeling) del(changeling) current << "You grow weak and lose your powers! You are no longer a changeling and are stuck in your current form!" + message_admins("[key_name_admin(usr)] has de-changeling'ed [current].", 1) if("changeling") if(!(src in ticker.mode.changelings)) ticker.mode.changelings += src ticker.mode.grant_changeling_powers(current) special_role = "Changeling" current << "Your powers are awoken. A flash of memory returns to us...we are a changeling!" + message_admins("[key_name_admin(usr)] has changeling'ed [current].", 1) if("autoobjectives") ticker.mode.forge_changeling_objectives(src) usr << "\blue The objectives for changeling [key] have been generated. You can edit them and anounce manually." @@ -664,6 +673,7 @@ datum/mind for (var/datum/objective/nuclear/O in objectives) objectives-=O current << "\red You have been brainwashed! You are no longer a syndicate operative!" + message_admins("[key_name_admin(usr)] has de-nuke op'ed [current].", 1) if("nuclear") if(!(src in ticker.mode.syndicates)) ticker.mode.syndicates += src @@ -676,6 +686,7 @@ datum/mind current << "\blue You are a [syndicate_name()] agent!" ticker.mode.forge_syndicate_objectives(src) ticker.mode.greet_syndicate(src) + message_admins("[key_name_admin(usr)] has nuke op'ed [current].", 1) if("lair") current.loc = get_turf(locate("landmark*Syndicate-Spawn")) if("dressup") @@ -711,12 +722,14 @@ datum/mind ticker.mode.traitors -= src special_role = null current << "\red You have been brainwashed! You are no longer a traitor!" + message_admins("[key_name_admin(usr)] has de-traitor'ed [current].", 1) if("traitor") if(!(src in ticker.mode.traitors)) ticker.mode.traitors += src special_role = "traitor" current << "\red You are a traitor!" + message_admins("[key_name_admin(usr)] has traitor'ed [current].", 1) if("autoobjectives") ticker.mode.forge_traitor_objectives(src) @@ -796,9 +809,11 @@ datum/mind current.icon_state = "ai" current << "\red You have been patched! You are no longer malfunctioning!" + message_admins("[key_name_admin(usr)] has de-malf'ed [current].", 1) if("malf") make_AI_Malf() + message_admins("[key_name_admin(usr)] has malf'ed [current].", 1) if("unemag") var/mob/living/silicon/robot/R = current @@ -815,6 +830,7 @@ datum/mind else if(R.module_state_3 == R.module.emag) R.module_state_3 = null R.contents -= R.module.emag + message_admins("[key_name_admin(usr)] has unemag'ed [R].", 1) if("unemagcyborgs") if (istype(current, /mob/living/silicon/ai)) @@ -833,6 +849,7 @@ datum/mind else if(R.module_state_3 == R.module.emag) R.module_state_3 = null R.contents -= R.module.emag + message_admins("[key_name_admin(usr)] has unemag'ed [ai]'s Cyborgs.", 1) else if (href_list["common"]) switch(href_list["common"]) diff --git a/code/game/gamemodes/changeling/changeling_powers.dm b/code/game/gamemodes/changeling/changeling_powers.dm index 54824cbaf1b..cf045d0464a 100644 --- a/code/game/gamemodes/changeling/changeling_powers.dm +++ b/code/game/gamemodes/changeling/changeling_powers.dm @@ -12,6 +12,16 @@ if(!(P in src.verbs)) src.verbs += P.verbpath + if(!powerinstances.len) + for(var/P in powers) + powerinstances += new P() + + // Code to auto-purchase free powers. + for(var/datum/power/changeling/P in powerinstances) + if(!P.genomecost) // Is it free? + if(!(P in mind.changeling.purchasedpowers)) // Do we not have it already? + mind.changeling.purchasePower(P.name)// Purchase it. + mind.changeling.absorbed_dna |= dna return 1 @@ -25,29 +35,29 @@ //Helper proc. Does all the checks and stuff for us to avoid copypasta /mob/proc/changeling_power(var/required_chems=0, var/required_dna=0, var/max_genetic_damage=100, var/max_stat=0) - if(!usr) return - if(!usr.mind) return - if(!iscarbon(usr)) return + if(!src) return + if(!src.mind) return + if(!iscarbon(src)) return - var/datum/changeling/changeling = usr.mind.changeling + var/datum/changeling/changeling = src.mind.changeling if(!changeling) world.log << "[src] has the changeling_transform() verb but is not a changeling." return if(usr.stat > max_stat) - usr << "We are incapacitated." + src << "We are incapacitated." return if(changeling.absorbed_dna.len < required_dna) - usr << "We require at least [required_dna] samples of compatible DNA." + src << "We require at least [required_dna] samples of compatible DNA." return if(changeling.chem_charges < required_chems) - usr << "We require at least [required_chems] units of chemicals to do that!" + src << "We require at least [required_chems] units of chemicals to do that!" return if(changeling.geneticdamage > max_genetic_damage) - usr << usr << "Our geneomes are still reassembling. We need time to recover first." + src << "Our geneomes are still reassembling. We need time to recover first." return return changeling @@ -586,7 +596,7 @@ var/mob/living/carbon/T = changeling_sting(30,/mob/proc/changeling_paralysis_sting) if(!T) return 0 T << "Your muscles begin to painfully tighten." - T.Weaken(10) + T.Weaken(20) feedback_add_details("changeling_powers","PS") return 1 diff --git a/code/game/gamemodes/changeling/modularchangling.dm b/code/game/gamemodes/changeling/modularchangling.dm index f62a485e9b0..240a89fb199 100644 --- a/code/game/gamemodes/changeling/modularchangling.dm +++ b/code/game/gamemodes/changeling/modularchangling.dm @@ -424,18 +424,21 @@ var/list/datum/power/changeling/powerinstances = list() -/datum/changeling/proc/purchasePower(var/datum/power/changeling/Pname) +/datum/changeling/proc/purchasePower(var/Pname) if(!usr.mind || !usr.mind.changeling) return // src = usr.mind.changeling - var/datum/power/changeling/Thepower = null + var/datum/power/changeling/Thepower = Pname + for (var/datum/power/changeling/P in powerinstances) + //world << "[P] - [Pname] = [P.name == Pname ? "True" : "False"]" if(P.name == Pname) Thepower = P break + if(Thepower == null) usr << "This is awkward. Changeling power purchase failed, please report this bug to a coder!" return diff --git a/code/game/gamemodes/factions.dm b/code/game/gamemodes/factions.dm index 5045cd8ed3a..fe03788dd0d 100644 --- a/code/game/gamemodes/factions.dm +++ b/code/game/gamemodes/factions.dm @@ -134,7 +134,7 @@ Whitespace:Seperator; Stealth and Camouflage Items; /obj/item/clothing/under/chameleon:3:Chameleon Jumpsuit; /obj/item/clothing/shoes/syndigaloshes:2:No-Slip Syndicate Shoes; -/obj/item/weapon/card/id/syndicate:3:Agent ID card; +/obj/item/weapon/card/id/syndicate:2:Agent ID card; /obj/item/clothing/mask/gas/voice:4:Voice Changer; /obj/item/device/chameleon:4:Chameleon-Projector; Whitespace:Seperator; diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index e194e341365..e9c95cceb91 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -44,7 +44,7 @@ Whitespace:Seperator; Stealth and Camouflage Items; /obj/item/clothing/under/chameleon:3:Chameleon Jumpsuit; /obj/item/clothing/shoes/syndigaloshes:2:No-Slip Syndicate Shoes; -/obj/item/weapon/card/id/syndicate:3:Agent ID card; +/obj/item/weapon/card/id/syndicate:2:Agent ID card; /obj/item/clothing/mask/gas/voice:4:Voice Changer; /obj/item/device/chameleon:4:Chameleon-Projector; Whitespace:Seperator; diff --git a/code/game/objects/items/devices/uplinks.dm b/code/game/objects/items/devices/uplinks.dm index f4c290a6032..482b1d2df72 100644 --- a/code/game/objects/items/devices/uplinks.dm +++ b/code/game/objects/items/devices/uplinks.dm @@ -153,10 +153,10 @@ A list of items and costs is stored under the datum of every game mode, alongsid if("/obj/item/weapon/melee/energy/sword" , "/obj/item/clothing/mask/gas/voice" , "/obj/item/device/chameleon") uses -= 4 if("/obj/item/weapon/storage/emp_kit" , "/obj/item/weapon/pen/paralysis" , "/obj/item/weapon/cartridge/syndicate" , "/obj/item/clothing/under/chameleon" , \ - "/obj/item/weapon/card/id/syndicate" , "/obj/item/weapon/card/emag" , "/obj/item/weapon/storage/syndie_kit/space" , "/obj/item/device/encryptionkey/binary" , \ + "/obj/item/weapon/card/emag" , "/obj/item/weapon/storage/syndie_kit/space" , "/obj/item/device/encryptionkey/binary" , \ "/obj/item/weapon/storage/syndie_kit/imp_freedom" , "/obj/item/clothing/glasses/thermal/syndi") uses -= 3 - if("/obj/item/ammo_magazine/a357" , "/obj/item/clothing/shoes/syndigaloshes" , "/obj/item/weapon/plastique") + if("/obj/item/ammo_magazine/a357" , "/obj/item/clothing/shoes/syndigaloshes" , "/obj/item/weapon/plastique", "/obj/item/weapon/card/id/syndicate") uses -= 2 if("/obj/item/weapon/soap/syndie" , "/obj/item/weapon/storage/toolbox/syndicate") uses -= 1 diff --git a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm index 5701501eedd..87d964ada16 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm @@ -34,6 +34,7 @@ if(!broken) if(prob(50/severity)) src.locked = !src.locked + src.update_icon() if(prob(20/severity) && !opened) if(!locked) open() diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 2c2f7fa40a0..b26fef731e9 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -2133,13 +2133,14 @@ var/global/floorIsLava = 0 for(var/mob/living/carbon/L in living_mob_list) if(istype(L.loc, /turf/simulated/floor)) // Are they on LAVA?! var/turf/simulated/floor/F = L.loc - var/safe = 0 - for(var/obj/structure/O in F.contents) - if(O.level > F.level && !istype(O, /obj/structure/window)) // Something to stand on and it isn't under the floor! - safe = 1 - break - if(!safe) - L.adjustFireLoss(damage) + if(F.lava) + var/safe = 0 + for(var/obj/structure/O in F.contents) + if(O.level > F.level && !istype(O, /obj/structure/window)) // Something to stand on and it isn't under the floor! + safe = 1 + break + if(!safe) + L.adjustFireLoss(damage) sleep(10) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index f8ef9f4ee3e..95ca8e250a9 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -267,6 +267,8 @@ for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in vent_found.network.normal_members) if(temp_vent.loc == loc) continue + if(temp_vent.welded) + continue var/turf/T = get_turf(temp_vent) if(!T || T.z != loc.z)