From bcebd2b7c4c326aad913b9a1ff35adb6b495d13b Mon Sep 17 00:00:00 2001 From: Ren Erthilo Date: Sat, 21 Apr 2012 20:04:31 +0100 Subject: [PATCH 01/20] TG: - Brought 2.0.8 and uterus up to date with the new type paths. - Added an atmostech belt that spawns with the same tools as the engineer full belt, just the wire is replaced by an analyzer. - Atmos techs now spawn with this belt - Added a detective-styled personal closet, that contains a satchel, which contains a wallet, which contains one or two spacecash items and a coin. - Slightly redesigned two of the dorm rooms so they have this new cabinet - closet with the stuff mentioned above. - Slightly changed the spawn order of items in engineering closets so that hazard vests spawn above toolboxes. Hopefully this will spare a few fiddly clicks for engineers. - Detective locker now spawns with the locked sprite - Engineering now has the L2 radioactive suit lockers that contain rad suits instead of that crate. Revision: r3039 Author: baloh.matevz Date: Feb 5, 2012 --- code/defines/obj/closet.dm | 8 ++++++++ code/game/objects/closets/secure/personal.dm | 11 ++++++++++- code/game/objects/storage/belt.dm | 1 + 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/code/defines/obj/closet.dm b/code/defines/obj/closet.dm index 652a89cac76..6a6bbd7ccca 100644 --- a/code/defines/obj/closet.dm +++ b/code/defines/obj/closet.dm @@ -464,6 +464,14 @@ /obj/structure/closet/secure_closet/personal/patient name = "Patient's closet" +/obj/structure/closet/secure_closet/personal/cabinet + icon_state = "cabinetdetective_locked" + icon_closed = "cabinetdetective" + icon_locked = "cabinetdetective_locked" + icon_opened = "cabinetdetective_open" + icon_broken = "cabinetdetective_broken" + icon_off = "cabinetdetective_broken" + /obj/structure/closet/secure_closet/kitchen name = "Kitchen Cabinet" req_access = list(access_kitchen) diff --git a/code/game/objects/closets/secure/personal.dm b/code/game/objects/closets/secure/personal.dm index 6fa801c0a50..2b0b8ad3b97 100644 --- a/code/game/objects/closets/secure/personal.dm +++ b/code/game/objects/closets/secure/personal.dm @@ -21,6 +21,15 @@ new /obj/item/clothing/shoes/white( src ) return + +/obj/structure/closet/secure_closet/personal/cabinet/New() + ..() + spawn(4) + contents = list() + new /obj/item/weapon/storage/backpack/satchel( src ) + new /obj/item/device/radio/headset( src ) + return + /obj/structure/closet/secure_closet/personal/attackby(obj/item/weapon/W as obj, mob/user as mob) if (src.opened) if (istype(W, /obj/item/weapon/grab)) @@ -66,4 +75,4 @@ O.show_message(text("\blue The locker has been sliced open by [] with an energy blade!", user), 1, text("\red You hear metal being sliced and sparks flying."), 2) else user << "\red Access Denied" - return \ No newline at end of file + return diff --git a/code/game/objects/storage/belt.dm b/code/game/objects/storage/belt.dm index 57c2e45314d..270d8d49951 100644 --- a/code/game/objects/storage/belt.dm +++ b/code/game/objects/storage/belt.dm @@ -77,6 +77,7 @@ new /obj/item/weapon/wirecutters(src) new /obj/item/weapon/cable_coil(src,30,pick("red","yellow")) + /obj/item/weapon/storage/belt/utility/atmostech/New() ..() new /obj/item/weapon/screwdriver(src) From 0a0dd1c449ca3d07f8dbd10cc04f32bac4d23dfe Mon Sep 17 00:00:00 2001 From: Ren Erthilo Date: Sat, 21 Apr 2012 20:14:21 +0100 Subject: [PATCH 02/20] TG: The "X FAILS TO PUSH Y'S FAT ASS OUT OF THE WAY" message now only displays to the person shoving, so those nearby are not subjected to chat spam. Added a "Relentless" var to mobs that makes them unshoveable if their intent is anything but help. Alien Queens are relentless. Constructs are relentless, can now push things, and have automated movement disabled (because it was bugging the hell out of me when testing) Shades also have automated movement disabled. The gladiator costume now has a chance to spawn in the theatre (sprites by Ausops) Revision: r3040 Author: kortgstation --- code/defines/mob/living/carbon/alien_humanoid.dm | 2 +- .../modules/mob/living/carbon/alien/larva/larva.dm | 10 +++++----- code/modules/mob/living/carbon/monkey/monkey.dm | 13 ++++++++----- code/modules/mob/living/silicon/robot/robot.dm | 14 ++++++++------ code/modules/mob/simple_animal/shade.dm | 1 + 5 files changed, 23 insertions(+), 17 deletions(-) diff --git a/code/defines/mob/living/carbon/alien_humanoid.dm b/code/defines/mob/living/carbon/alien_humanoid.dm index 6a880121b4d..4c6ae07fbe3 100644 --- a/code/defines/mob/living/carbon/alien_humanoid.dm +++ b/code/defines/mob/living/carbon/alien_humanoid.dm @@ -45,7 +45,7 @@ health = 250 icon_state = "queen_s" - + nopush = 1 /mob/living/carbon/alien/humanoid/rpbody update_icon = 0 diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm index 434d7d01bfd..252dc6349e7 100644 --- a/code/modules/mob/living/carbon/alien/larva/larva.dm +++ b/code/modules/mob/living/carbon/alien/larva/larva.dm @@ -29,12 +29,12 @@ if(ismob(AM)) var/mob/tmob = AM if(istype(tmob, /mob/living/carbon/human) && tmob.mutations & FAT) - /*if(prob(70)) - for(var/mob/M in viewers(src, null)) - if(M.client) - M << "\red [src] fails to push [tmob]'s fat ass out of the way." +/* + if(prob(70)) + src << "\red You fail to push [tmob]'s fat ass out of the way." now_pushing = 0 - return*/ + return +*/ if(tmob.nopush) now_pushing = 0 return diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index 7e0e99380d5..c3356f4d644 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -97,13 +97,16 @@ now_pushing = 1 if(ismob(AM)) var/mob/tmob = AM - /*if(istype(tmob, /mob/living/carbon/human) && tmob.mutations & FAT) +/* + if(istype(tmob, /mob/living/carbon/human) && tmob.mutations & FAT) if(prob(70)) - for(var/mob/M in viewers(src, null)) - if(M.client) - M << "\red [src] fails to push [tmob]'s fat ass out of the way." + usr << "\red You fail to push [tmob]'s fat ass out of the way." now_pushing = 0 - return*/ + return +*/ + if(tmob.nopush) + now_pushing = 0 + return tmob.LAssailant = src now_pushing = 0 diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 29f43b6128c..4ff27d3ee2f 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -262,16 +262,18 @@ if ((!( yes ) || now_pushing)) return now_pushing = 1 - /*if(ismob(AM)) + if(ismob(AM)) var/mob/tmob = AM +/* if(istype(tmob, /mob/living/carbon/human) && tmob.mutations & FAT) if(prob(20)) - for(var/mob/M in viewers(src, null)) - if(M.client) - M << M << "\red [src] fails to push [tmob]'s fat ass out of the way." + usr << "\red You fail to push [tmob]'s fat ass out of the way." now_pushing = 0 - //unlock_medal("That's No Moon, That's A Gourmand!", 1) - return*/ + return +*/ + if(tmob.nopush) + now_pushing = 0 + return now_pushing = 0 ..() if (istype(AM, /obj/machinery/recharge_station)) diff --git a/code/modules/mob/simple_animal/shade.dm b/code/modules/mob/simple_animal/shade.dm index 480d7bc8c0a..34034a63df6 100644 --- a/code/modules/mob/simple_animal/shade.dm +++ b/code/modules/mob/simple_animal/shade.dm @@ -21,6 +21,7 @@ max_co2 = 0 max_tox = 0 speed = -1 + stop_automated_movement = 1 Life() From 5e7f5e5d2785a583a0ee58dfba4df2b0229edc5c Mon Sep 17 00:00:00 2001 From: Ren Erthilo Date: Sat, 21 Apr 2012 20:15:57 +0100 Subject: [PATCH 03/20] TG: - When you open an door of any kind you can see through it as soon as it starts to open. You can however only move through once it's fully open. Revision: r3041 Author: baloh.matevz --- code/game/machinery/airlock_control.dm | 20 +++++++++----------- code/game/machinery/doors/door.dm | 1 + 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/code/game/machinery/airlock_control.dm b/code/game/machinery/airlock_control.dm index a5a9950441e..afb73392adf 100644 --- a/code/game/machinery/airlock_control.dm +++ b/code/game/machinery/airlock_control.dm @@ -69,12 +69,11 @@ obj/machinery/door/airlock . = ..() if(!surpress_send) send_status() - proc - set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) - if(new_frequency) - frequency = new_frequency - radio_connection = radio_controller.add_object(src, frequency, RADIO_AIRLOCK) + proc/set_frequency(new_frequency) + radio_controller.remove_object(src, frequency) + if(new_frequency) + frequency = new_frequency + radio_connection = radio_controller.add_object(src, frequency, RADIO_AIRLOCK) initialize() if(frequency) @@ -140,11 +139,10 @@ obj/machinery/airlock_sensor update_icon() - proc - set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) - frequency = new_frequency - radio_connection = radio_controller.add_object(src, frequency, RADIO_AIRLOCK) + proc/set_frequency(new_frequency) + radio_controller.remove_object(src, frequency) + frequency = new_frequency + radio_connection = radio_controller.add_object(src, frequency, RADIO_AIRLOCK) initialize() set_frequency(frequency) diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index cdb69cf7593..758a5347043 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -300,6 +300,7 @@ src.operating = 1 animate("opening") + src.sd_SetOpacity(0) sleep(10) src.layer = 2.7 src.density = 0 From 927489d2f82eba1ec48224940de82168b846f4a4 Mon Sep 17 00:00:00 2001 From: Ren Erthilo Date: Sat, 21 Apr 2012 20:23:44 +0100 Subject: [PATCH 04/20] TG: Nerfed poly acid. Description from #coderbus: - When you splash pacid on someone's face, if they have a mask it melts, if they don't, but have a helmet, there is a 15% chance for it to melt, if they don't have either, they take 15 damage and there is a 15% chance for them to become unknown - if the method is not TOUCH (whatever that means)... they take 15 damage and there is a 15% chance for them to become unknown - on_mob_life... they now take 1 tox damage per tick instead of 1 tox + 1 burn - reaction_obj is the same as before Revision: r3043 Author: baloh.matevz --- code/modules/chemical/Chemistry-Reagents.dm | 33 ++++++++++++--------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/code/modules/chemical/Chemistry-Reagents.dm b/code/modules/chemical/Chemistry-Reagents.dm index 6c0fac86662..00116a25876 100644 --- a/code/modules/chemical/Chemistry-Reagents.dm +++ b/code/modules/chemical/Chemistry-Reagents.dm @@ -768,10 +768,10 @@ datum on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom - M:adjustToxLoss(0.2) - M.take_organ_damage(0, 1) + M:adjustToxLoss(1) ..() return + reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume) if(!istype(M, /mob/living)) return //wooo more runtime fixin @@ -782,17 +782,21 @@ datum M << "\red Your mask melts away!" return if(M:head) - del (M:head) - M << "\red Your helmet melts into uselessness!" + if(prob(15)) + del(M:head) + M << "\red Your helmet melts from the acid!" + else + M << "\red Your helmet protects you from the acid!" return var/datum/organ/external/head/affecting = M:get_organ("head") - affecting.disfigured = 1 - affecting.take_damage(35, 0) + affecting.take_damage(15, 0) M:UpdateDamageIcon() M:emote("scream") - M << "\red Your face has become disfigured!" - M.real_name = "Unknown" - M.warn_flavor_changed() + if(prob(15)) + M << "\red Your face has become disfigured!" + M.real_name = "Unknown" + M.warn_flavor_changed() + affecting.disfigured = 1 else if(istype(M, /mob/living/carbon/monkey) && M:wear_mask) del (M:wear_mask) @@ -802,13 +806,14 @@ datum else if(istype(M, /mob/living/carbon/human)) var/datum/organ/external/head/affecting = M:get_organ("head") - affecting.disfigured = 1 - affecting.take_damage(30, 0) + affecting.take_damage(15, 0) M:UpdateDamageIcon() M:emote("scream") - M << "\red Your face has become disfigured!" - M.real_name = "Unknown" - M.warn_flavor_changed() + if(prob(15)) + M << "\red Your face has become disfigured!" + M.real_name = "Unknown" + M.warn_flavor_changed() + affecting.disfigured = 1 else M.take_organ_damage(min(15, volume * 4)) From 523834e547cdfa49feac3ac534d8251143b7bc5d Mon Sep 17 00:00:00 2001 From: Ren Erthilo Date: Sat, 21 Apr 2012 20:26:36 +0100 Subject: [PATCH 05/20] TG: Fixes Issue 299 . Applying the cell charger fix from here: http://bit.ly/wl2FEO Revision: r3050 Author: Superxpdude --- code/game/machinery/cell_charger.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm index eabfdd003ab..17239407b6e 100644 --- a/code/game/machinery/cell_charger.dm +++ b/code/game/machinery/cell_charger.dm @@ -51,7 +51,7 @@ if(!charging || (stat & (BROKEN|NOPOWER)) ) return - var/added = charging.give(500) + var/added = charging.give(75) use_power(added / CELLRATE) updateicon() \ No newline at end of file From ac246cc8054f82172b9a7d052706869556ed1b8f Mon Sep 17 00:00:00 2001 From: Ren Erthilo Date: Sat, 21 Apr 2012 20:28:35 +0100 Subject: [PATCH 06/20] TG:- Hacking wallsafes/briefcases is now properly interruptible. Revision: r3053 Author: quartz235 --- code/game/objects/secstorage/secstorage.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/game/objects/secstorage/secstorage.dm b/code/game/objects/secstorage/secstorage.dm index 6e1b1d05f85..0193fcb3977 100644 --- a/code/game/objects/secstorage/secstorage.dm +++ b/code/game/objects/secstorage/secstorage.dm @@ -127,7 +127,7 @@ if ((istype(W, /obj/item/device/multitool)) && (src.open == 1) && (src.locked ==1) && (!src.l_hacking)) user.show_message(text("\red Now attempting to reset internal memory, please hold."), 1) src.l_hacking = 1 - spawn(100) + if (do_after(usr, 100)) if (prob(40)) src.l_setshort = 1 src.l_set = 0 @@ -138,6 +138,7 @@ else user.show_message(text("\red Unable to reset internal memory."), 1) src.l_hacking = 0 + else src.l_hacking = 0 return if (src.contents.len >= 7) return From 23cb47f0b1b3c06f548a724adf8dd9cf0fd94be1 Mon Sep 17 00:00:00 2001 From: Ren Erthilo Date: Sat, 21 Apr 2012 20:49:59 +0100 Subject: [PATCH 07/20] TG: The armoured construct is now known as the Juggernaut. Its health was lowered and it takes massive damage from being hit with a bible. The Juggernaut has a lesser version of force wall. Added the Wraith construct, a faster, more fragile construct which has a lesser version of Ethereal Jaunt. It too is vulnerable to bibles. The Chaplain is now immune to blood boil, stun talismans, and cult blind/deafen Constructs are finally creatable by using a full soulstone on an empty construct shell. The creator will be able to choose which kind of construct is created. Cultists can get construct shells from their supply talisman Wizards now get the spell "Artificer" which allows them to create construct shells for free when they select the soulstone belt. Medical Borgs are now relentless to prevent them losing hold of incapacitated patients. Added the Artificer (conjure construct shell), Phase Shift (lesser jaunt), and Shield (lesser forcewall) spells Revision: r3054 Author: kortgstation --- code/datums/spells/wizard.dm | 111 +++++++++++++++++- code/game/gamemodes/wizard/soulstone.dm | 60 +++++++++- code/game/gamemodes/wizard/spellbook.dm | 75 ++++++++---- code/game/magic/cultist/runes.dm | 87 ++++++++++---- code/game/magic/cultist/talisman.dm | 3 + .../modules/mob/living/silicon/robot/robot.dm | 1 + 6 files changed, 285 insertions(+), 52 deletions(-) diff --git a/code/datums/spells/wizard.dm b/code/datums/spells/wizard.dm index 66821e3d33b..311be1b3ba9 100644 --- a/code/datums/spells/wizard.dm +++ b/code/datums/spells/wizard.dm @@ -3,7 +3,7 @@ desc = "This spell fires several, slow moving, magic projectiles at nearby targets." school = "evocation" - charge_max = 100 + charge_max = 150 clothes_req = 1 invocation = "FORTI GY AMA" invocation_type = "shout" @@ -134,6 +134,7 @@ summon_type = list("/obj/effect/forcefield") summon_lifespan = 300 + /obj/effect/proc_holder/spell/aoe_turf/conjure/carp name = "Summon Bigger Carp" desc = "This spell conjures an elite carp." @@ -147,6 +148,21 @@ summon_type = list("/obj/effect/critter/spesscarp/elite") + +/obj/effect/proc_holder/spell/aoe_turf/conjure/construct + name = "Artificer" + desc = "This spell conjures a construct which may be controlled by Shades" + + school = "conjuration" + charge_max = 600 + clothes_req = 0 + invocation = "none" + invocation_type = "none" + range = 0 + + summon_type = list("/obj/structure/constructshell") + + /obj/effect/proc_holder/spell/aoe_turf/conjure/creature name = "Summon Creature Swarm" desc = "This spell tears the fabric of reality, allowing horrific daemons to spill forth" @@ -211,4 +227,95 @@ ex_severe = -1 ex_heavy = -1 ex_light = 2 - ex_flash = 5 \ No newline at end of file + ex_flash = 5 + + + + + + +//////////////////////////////Construct Spells///////////////////////// + +/obj/effect/proc_holder/spell/aoe_turf/conjure/construct/lesser + charge_max = 1800 + +/obj/effect/proc_holder/spell/aoe_turf/conjure/floor + name = "Floor Construction" + desc = "This spell constructs a cult floor" + + school = "conjuration" + charge_max = 20 + clothes_req = 0 + invocation = "none" + invocation_type = "none" + range = 0 + summon_type = list("/turf/simulated/floor/engine/cult") + +/obj/effect/proc_holder/spell/aoe_turf/conjure/wall + name = "Leser Construction" + desc = "This spell constructs a cult wall" + + school = "conjuration" + charge_max = 100 + clothes_req = 0 + invocation = "none" + invocation_type = "none" + range = 0 + summon_type = list("/turf/simulated/wall/cult") + +/obj/effect/proc_holder/spell/aoe_turf/conjure/wall/reinforced + name = "Greater Construction" + desc = "This spell constructs a reinforced metal wall" + + school = "conjuration" + charge_max = 300 + clothes_req = 0 + invocation = "none" + invocation_type = "none" + range = 0 + + summon_type = list("/turf/simulated/wall/r_wall") + +/obj/effect/proc_holder/spell/aoe_turf/conjure/soulstone + name = "Summon Soulstone" + desc = "This spell reaches into Nar-Sie's realm, summoning one of the legendary fragments across time and space" + + school = "conjuration" + charge_max = 3000 + clothes_req = 0 + invocation = "none" + invocation_type = "none" + range = 0 + + summon_type = list("/obj/item/device/soulstone") + + +/obj/effect/proc_holder/spell/aoe_turf/conjure/lesserforcewall + name = "Shield" + desc = "This spell creates a temporary forcefield to shield yourself and allies from incoming fire" + + school = "transmutation" + charge_max = 300 + clothes_req = 0 + invocation = "none" + invocation_type = "none" + range = 0 + summon_type = list("/obj/effect/forcefield") + summon_lifespan = 50 + + + + +/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift + name = "Phase Shift" + desc = "This spell allows you to pass through walls" + + school = "transmutation" + charge_max = 200 + clothes_req = 0 + invocation = "none" + invocation_type = "none" + range = -1 + include_user = 1 + + jaunt_duration = 50 //in deciseconds diff --git a/code/game/gamemodes/wizard/soulstone.dm b/code/game/gamemodes/wizard/soulstone.dm index 54c48e838bd..eb313f56493 100644 --- a/code/game/gamemodes/wizard/soulstone.dm +++ b/code/game/gamemodes/wizard/soulstone.dm @@ -78,7 +78,17 @@ src.icon_state = "soulstone" attack_self(U) +///////////////////////////Transferring to constructs///////////////////////////////////////////////////// +/obj/structure/constructshell + name = "empty shell" + icon = 'wizard.dmi' + icon_state = "construct" + desc = "A wicked machine used by those skilled in magical arts. It is inactive" + flags = FPRINT | TABLEPASS +/obj/structure/constructshell/attackby(obj/item/O as obj, mob/user as mob) + if(istype(O, /obj/item/device/soulstone)) + O.transfer_soul("CONSTRUCT",src,user) ////////////////////////////Proc for moving soul in and out off stone////////////////////////////////////// @@ -123,7 +133,7 @@ C.name = "Soul Stone: [S.name]" S << "Your soul has been captured! You are now bound to [U.name]'s will, help them suceed in their goals at all costs." U << "\blue Capture successful!: \black [T.name]'s soul has been ripped from their body and stored within the soul stone." - S << "The soulstone has been imprinted with [S.name]'s mind, it will no longer react to other souls." + U << "The soulstone has been imprinted with [S.name]'s mind, it will no longer react to other souls." C.imprinted = "[S.name]" del T if("SHADE") @@ -145,4 +155,50 @@ C.icon_state = "soulstone2" T << "Your soul has been recaptured by the soul stone, its arcane energies are reknitting your ethereal form" U << "\blue Capture successful!: \black [T.name]'s has been recaptured and stored within the soul stone." - return \ No newline at end of file + if("CONSTRUCT") + var/obj/structure/constructshell/T = target + var/obj/item/device/soulstone/C = src + var/mob/living/simple_animal/shade/A = locate() in C + if(A) + var/construct_class = alert(U, "Please choose which type of construct you wish to create.",,"Juggernaut","Wraith","Artificer") + var/mob/living/simple_animal/Z + switch(construct_class) + if("Juggernaut") + Z = new /mob/living/simple_animal/constructarmoured (get_turf(T.loc)) + if (A.client) + A.client.mob = Z + del(T) + Z << "You are playing a Juggernaut. Though slow, you can withstand extreme punishment, and rip apart enemies and walls alike." + Z << "You are still bound to serve your creator, follow their orders and help them complete their goals at all costs." + Z.spell_list += new /obj/effect/proc_holder/spell/aoe_turf/conjure/lesserforcewall(Z) + Z.cancel_camera() + del(C) + + if("Wraith") + Z = new /mob/living/simple_animal/constructwraith (get_turf(T.loc)) + if (A.client) + A.client.mob = Z + del(T) + Z << "You are playing a Wraith. Though relatively fragile, you are fast, deadly, and even able to phase through walls." + Z << "You are still bound to serve your creator, follow their orders and help them complete their goals at all costs." + Z.spell_list += new /obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift(Z) + Z.cancel_camera() + del(C) + + if("Artificer") + Z = new /mob/living/simple_animal/constructbuilder (get_turf(T.loc)) + if (A.client) + A.client.mob = Z + del(T) + Z << "You are playing an Artificer. You are incredibly weak and fragile, but you are able to construct fortifications, repair allied constructs (by clicking on them), and even create new constructs" + Z << "You are still bound to serve your creator, follow their orders and help them complete their goals at all costs." + Z.spell_list += new /obj/effect/proc_holder/spell/aoe_turf/conjure/construct/lesser(Z) + Z.spell_list += new /obj/effect/proc_holder/spell/aoe_turf/conjure/wall(Z) + Z.spell_list += new /obj/effect/proc_holder/spell/aoe_turf/conjure/floor(Z) + Z.spell_list += new /obj/effect/proc_holder/spell/aoe_turf/conjure/wall/reinforced(Z) + Z.spell_list += new /obj/effect/proc_holder/spell/aoe_turf/conjure/soulstone(Z) + Z.cancel_camera() + del(C) + else + U << "\red Creation failed!: \black The soul stone is empty! Go kill someone!" + return diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index 6676196cece..dd3179789a0 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -25,16 +25,21 @@ dat += "Mutate (60)
" dat += "Ethereal Jaunt (60)
" dat += "Knock (10)
" +// if(op) +// dat += "Summon Guns (One time use, global spell)
" dat += "
" dat += "Artefacts:
" dat += "Powerful items imbued with eldritch magics. Summoning one will count towards your maximum number of spells.
" dat += "It is recommended that only experienced wizards attempt to wield such artefacts.
" dat += "
" - dat += "Staff of Change
" + dat += "Staff of Change
" dat += "
" - dat += "Six Soul Stone Shards
" + dat += "Six Soul Stone Shards and the spell Artificer
" dat += "
" - dat += "Re-memorize Spells
" +// if(op) +// dat += "Veil Render
" + dat += "
" + dat += "Re-memorize Spells
" user << browse(dat, "window=radio") onclose(user, "radio") return @@ -50,7 +55,7 @@ if ((usr.contents.Find(src) || (in_range(src,usr) && istype(src.loc, /turf)))) usr.machine = src if(href_list["spell_choice"]) - if(src.uses >= 1 && href_list["spell_choice"] != 16) + if(src.uses >= 1 && src.max_uses >=1 && text2num(href_list["spell_choice"]) < 18) src.uses-- if(spell_type == "verb") switch(href_list["spell_choice"]) @@ -105,16 +110,24 @@ usr.verbs += /client/proc/knock usr.mind.special_verbs += /client/proc/knock src.temp = "This spell opens nearby doors and does not require wizard garb." - if ("14") +// if ("14") +// usr.verbs += /client/proc/rightandwrong +// src.max_uses-- +// src.temp = "Nothing could possibly go wrong with arming a crew of lunatics just itching for an excuse to kill eachother. Just be careful not to get hit in the crossfire!" + if ("15") new /obj/item/weapon/gun/energy/staff(get_turf(usr)) src.temp = "An artefact that spits bolts of coruscating energy which cause the target's very form to reshape itself" src.max_uses-- - if ("15") + if ("16") new /obj/item/weapon/storage/belt/soulstone/full(get_turf(usr)) src.temp = "Soul Stone Shards are ancient tools capable of capturing and harnessing the spirits of the dead and dying" src.max_uses-- +// if ("17") +// new /obj/item/weapon/veilrender(get_turf(usr)) +// src.temp = "Recovered from a shattered temple in what was speculated to be the ruins of an alien capital city, the blade is said to cut more than just the material. There was no trace of the blades creators, nor of any other life left on the dead planet, and what caused such an apocalypse remains a mystery." +// src.max_uses-- else if(spell_type == "object") - var/list/available_spells = list("Magic Missile","Fireball","Disintegrate","Disable Tech","Smoke","Blind","Mind Transfer","Forcewall","Blink","Teleport","Mutate","Ethereal Jaunt","Knock") + var/list/available_spells = list("Magic Missile","Fireball","Disintegrate","Disable Tech","Smoke","Blind","Mind Transfer","Forcewall","Blink","Teleport","Mutate","Ethereal Jaunt","Knock","Summon Guns","Staff of Change","Six Soul Stone Shards and the spell Artificer","Veil Render") var/already_knows = 0 for(var/obj/effect/proc_holder/spell/aspell in usr.spell_list) if(available_spells[text2num(href_list["spell_choice"])] == aspell.name) @@ -125,67 +138,79 @@ if(!already_knows) switch(href_list["spell_choice"]) if ("1") - feedback_add_details("wizard_spell_learned","MM") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells + //feedback_add_details("wizard_spell_learned","MM") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells usr.spell_list += new /obj/effect/proc_holder/spell/targeted/projectile/magic_missile(usr) src.temp = "This spell fires several, slow moving, magic projectiles at nearby targets. If they hit a target, it is paralyzed and takes minor damage." if ("2") - feedback_add_details("wizard_spell_learned","FB") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells + //feedback_add_details("wizard_spell_learned","FB") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells usr.spell_list += new /obj/effect/proc_holder/spell/targeted/projectile/fireball(usr) src.temp = "This spell fires a fireball at a target and does not require wizard garb. Be careful not to fire it at people that are standing next to you." // if ("3") +// feedback_add_details("wizard_spell_learned","DG") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells // usr.spell_list += new /obj/effect/proc_holder/spell/targeted/inflict_handler/disintegrate(usr) // src.temp = "This spell instantly kills somebody adjacent to you with the vilest of magick. It has a long cooldown." if ("4") - feedback_add_details("wizard_spell_learned","DT") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells + //feedback_add_details("wizard_spell_learned","DT") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells usr.spell_list += new /obj/effect/proc_holder/spell/targeted/emplosion/disable_tech(usr) src.temp = "This spell disables all weapons, cameras and most other technology in range." if ("5") - feedback_add_details("wizard_spell_learned","SM") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells + //feedback_add_details("wizard_spell_learned","SM") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells usr.spell_list += new /obj/effect/proc_holder/spell/targeted/smoke(usr) src.temp = "This spell spawns a cloud of choking smoke at your location and does not require wizard garb." if ("6") - feedback_add_details("wizard_spell_learned","BD") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells + //feedback_add_details("wizard_spell_learned","BD") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells usr.spell_list += new /obj/effect/proc_holder/spell/targeted/trigger/blind(usr) src.temp = "This spell temporarly blinds a single person and does not require wizard garb." if ("7") - feedback_add_details("wizard_spell_learned","MT") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells + //feedback_add_details("wizard_spell_learned","MT") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells usr.spell_list += new /obj/effect/proc_holder/spell/targeted/mind_transfer(usr) src.temp = "This spell allows the user to switch bodies with a target. Careful to not lose your memory in the process." if ("8") - feedback_add_details("wizard_spell_learned","FW") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells + //feedback_add_details("wizard_spell_learned","FW") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells usr.spell_list += new /obj/effect/proc_holder/spell/aoe_turf/conjure/forcewall(usr) src.temp = "This spell creates an unbreakable wall that lasts for 30 seconds and does not need wizard garb." if ("9") - feedback_add_details("wizard_spell_learned","BL") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells + //feedback_add_details("wizard_spell_learned","BL") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells usr.spell_list += new /obj/effect/proc_holder/spell/targeted/turf_teleport/blink(usr) src.temp = "This spell randomly teleports you a short distance. Useful for evasion or getting into areas if you have patience." if ("10") - feedback_add_details("wizard_spell_learned","TP") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells + //feedback_add_details("wizard_spell_learned","TP") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells usr.spell_list += new /obj/effect/proc_holder/spell/targeted/area_teleport/teleport(usr) src.temp = "This spell teleports you to a type of area of your selection. Very useful if you are in danger, but has a decent cooldown, and is unpredictable." if ("11") - feedback_add_details("wizard_spell_learned","MU") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells + //feedback_add_details("wizard_spell_learned","MU") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells usr.spell_list += new /obj/effect/proc_holder/spell/targeted/genetic/mutate(usr) src.temp = "This spell causes you to turn into a hulk and gain telekinesis for a short while." if ("12") - feedback_add_details("wizard_spell_learned","EJ") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells + //feedback_add_details("wizard_spell_learned","EJ") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells usr.spell_list += new /obj/effect/proc_holder/spell/targeted/ethereal_jaunt(usr) src.temp = "This spell creates your ethereal form, temporarily making you invisible and able to pass through walls." if ("13") - feedback_add_details("wizard_spell_learned","KN") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells + //feedback_add_details("wizard_spell_learned","KN") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells usr.spell_list += new /obj/effect/proc_holder/spell/aoe_turf/knock(usr) src.temp = "This spell opens nearby doors and does not require wizard garb." - if ("14") - feedback_add_details("wizard_spell_learned","ST") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells +// if ("14") +// //feedback_add_details("wizard_spell_learned","SG") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells +// usr.verbs += /client/proc/rightandwrong +// src.max_uses-- +// src.temp = "Nothing could possibly go wrong with arming a crew of lunatics just itching for an excuse to kill eachother. Just be careful not to get hit in the crossfire!" + if ("15") + //feedback_add_details("wizard_spell_learned","ST") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells new /obj/item/weapon/gun/energy/staff(get_turf(usr)) src.temp = "An artefact that spits bolts of coruscating energy which cause the target's very form to reshape itself" src.max_uses-- - if ("15") - feedback_add_details("wizard_spell_learned","SS") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells + if ("16") + //feedback_add_details("wizard_spell_learned","SS") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells new /obj/item/weapon/storage/belt/soulstone/full(get_turf(usr)) - src.temp = "Soul Stone Shards are ancient tools capable of capturing and harnessing the spirits of the dead and dying" + usr.spell_list += new /obj/effect/proc_holder/spell/aoe_turf/conjure/construct(usr) + src.temp = "Soul Stone Shards are ancient tools capable of capturing and harnessing the spirits of the dead and dying. The spell Artificer allows you to create arcane machines for the captured souls to pilot." src.max_uses-- - if (href_list["spell_choice"] == "16") +// if ("17") +// //feedback_add_details("wizard_spell_learned","VR") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells +// new /obj/item/weapon/veilrender(get_turf(usr)) +// src.temp = "Recovered from a shattered temple in what was speculated to be the ruins of an alien capital city, the blade is said to cut more than just the material. There was no trace of the blades creators, nor of any other life left on the dead planet, and what caused such an apocalypse remains a mystery.(Activate inhand to trigger its special ability)" +// src.max_uses-- + if (href_list["spell_choice"] == "18") var/area/wizard_station/A = locate() if(usr in A.contents) src.uses = src.max_uses diff --git a/code/game/magic/cultist/runes.dm b/code/game/magic/cultist/runes.dm index 6691b3b571d..14b7a63bd95 100644 --- a/code/game/magic/cultist/runes.dm +++ b/code/game/magic/cultist/runes.dm @@ -306,7 +306,7 @@ var/list/sacrificed = list() body_to_sacrifice.visible_message("\red [body_to_sacrifice] is torn apart, a black smoke swiftly dissipating from his remains!", \ "\red You feel as your blood boils, tearing you apart.", \ "\red You hear a thousand voices, all crying in pain.") - body_to_sacrifice.gib(1) + body_to_sacrifice.gib() if (ticker.mode.name == "cult") ticker.mode:add_cultist(body_to_sacrifice.mind) else @@ -571,7 +571,7 @@ var/list/sacrificed = list() if(H.mind == ticker.mode:sacrifice_target) if(cultsinrange.len >= 3) sacrificed += H.mind - H.gib(1) + H.gib() usr << "\red The Geometer of Blood accepts this sacrifice, your objective is now complete." else usr << "\red Your target's earthly bonds are too strong. You need more cultists to succeed in this ritual." @@ -584,7 +584,7 @@ var/list/sacrificed = list() else usr << "\red The Geometer of blood accepts this sacrifice." usr << "\red However, this soul was not enough to gain His favor." - H.gib(1) + H.gib() else if(prob(40)) usr << "\red The Geometer of blood accepts this sacrifice." @@ -592,7 +592,7 @@ var/list/sacrificed = list() else usr << "\red The Geometer of blood accepts this sacrifice." usr << "\red However, a mere dead body is not enough to satisfy Him." - H.gib(1) + H.gib() else if(H.stat !=2) usr << "\red The victim is still alive, you will need more cultists chanting for the sacrifice to succeed." @@ -603,17 +603,36 @@ var/list/sacrificed = list() else usr << "\red The Geometer of blood accepts this sacrifice." usr << "\red However, a mere dead body is not enough to satisfy Him." - H.gib(1) + H.gib() else if(cultsinrange.len >= 3) - H.gib(1) - usr << "\red The Geometer of Blood accepts this sacrifice." + if(H.stat !=2) + if(prob(80)) + usr << "\red The Geometer of Blood accepts this sacrifice." + ticker.mode:grant_runeword(usr) + else + usr << "\red The Geometer of blood accepts this sacrifice." + usr << "\red However, this soul was not enough to gain His favor." + H.gib() + else + if(prob(40)) + usr << "\red The Geometer of blood accepts this sacrifice." + ticker.mode:grant_runeword(usr) + else + usr << "\red The Geometer of blood accepts this sacrifice." + usr << "\red However, a mere dead body is not enough to satisfy Him." + H.gib() else if(H.stat !=2) usr << "\red The victim is still alive, you will need more cultists chanting for the sacrifice to succeed." else - H.gib(1) - usr << "\red The Geometer of blood accepts this sacrifice." + if(prob(40)) + usr << "\red The Geometer of blood accepts this sacrifice." + ticker.mode:grant_runeword(usr) + else + usr << "\red The Geometer of blood accepts this sacrifice." + usr << "\red However, a mere dead body is not enough to satisfy Him." + H.gib() for(var/mob/living/carbon/monkey/M in src.loc) if (ticker.mode.name == "cult") if(M.mind == ticker.mode:sacrifice_target) @@ -632,11 +651,13 @@ var/list/sacrificed = list() usr << "\red However, a mere monkey is not enough to satisfy Him." else usr << "\red The Geometer of Blood accepts your meager sacrifice." - M.gib(1) + if(prob(20)) + ticker.mode.grant_runeword(usr) + M.gib() /* for(var/mob/living/carbon/alien/A) for(var/mob/K in cultsinrange) K.say("Barhah hra zar'garis!") - A.dust() /// A.gib(1) doesnt work for some reason, and dust() leaves that skull and bones thingy which we dont really need. + A.dust() /// A.gib() doesnt work for some reason, and dust() leaves that skull and bones thingy which we dont really need. if (ticker.mode.name == "cult") if(prob(75)) usr << "\red The Geometer of Blood accepts your exotic sacrifice." @@ -661,7 +682,7 @@ var/list/sacrificed = list() if (istype(W,/obj/item/weapon/paper/talisman)) rad = 4 go = 1 - if (istype(W,/obj/item/weapon/storage/bible)) + if (istype(W,/obj/item/weapon/nullrod)) rad = 1 go = 1 if(go) @@ -670,7 +691,7 @@ var/list/sacrificed = list() R:visibility=15 S=1 if(S) - if(istype(W,/obj/item/weapon/storage/bible)) + if(istype(W,/obj/item/weapon/nullrod)) usr << "\red Arcane markings suddenly glow from underneath a thin layer of dust!" return if(istype(W,/obj/effect/rune)) @@ -770,7 +791,7 @@ var/list/sacrificed = list() if (cultist == user) //just to be sure. return if(cultist.buckled || cultist.handcuffed || (!isturf(cultist.loc) && !istype(cultist.loc, /obj/structure/closet))) - user << "\red You cannot summon the [cultist], for him shackles of blood are strong" + user << "\red You cannot summon the [cultist], for his shackles of blood are strong" return fizzle() cultist.loc = src.loc cultist.lying = 1 @@ -793,6 +814,9 @@ var/list/sacrificed = list() for(var/mob/living/carbon/C in range(7,src)) if (iscultist(C)) continue + var/obj/item/weapon/nullrod/N = locate() in C + if(N) + continue C.ear_deaf += 50 C.show_message("\red The world around you suddenly becomes quiet.", 3) affected++ @@ -809,6 +833,9 @@ var/list/sacrificed = list() for(var/mob/living/carbon/C in range(7,usr)) if (iscultist(C)) continue + var/obj/item/weapon/nullrod/N = locate() in C + if(N) + continue C.ear_deaf += 30 //talismans is weaker. C.show_message("\red The world around you suddenly becomes quiet.", 3) @@ -827,6 +854,9 @@ var/list/sacrificed = list() for(var/mob/living/carbon/C in viewers(src)) if (iscultist(C)) continue + var/obj/item/weapon/nullrod/N = locate() in C + if(N) + continue C.eye_blurry += 50 C.eye_blind += 20 if(prob(5)) @@ -846,6 +876,9 @@ var/list/sacrificed = list() for(var/mob/living/carbon/C in viewers(usr)) if (iscultist(C)) continue + var/obj/item/weapon/nullrod/N = locate() in C + if(N) + continue C.eye_blurry += 30 C.eye_blind += 10 //talismans is weaker. @@ -873,11 +906,14 @@ var/list/sacrificed = list() for(var/mob/living/carbon/M in viewers(usr)) if(iscultist(M)) continue + var/obj/item/weapon/nullrod/N = locate() in M + if(N) + continue M.take_overall_damage(51,51) M << "\red Your blood boils!" if(prob(5)) spawn(5) - M.gib(1) + M.gib() for(var/obj/effect/rune/R in view(src)) if(prob(10)) explosion(R.loc, -1, 0, 1, 5) @@ -933,14 +969,19 @@ var/list/sacrificed = list() del(src) else ///When invoked as talisman, stun and mute the target mob. usr.say("Dream sign ''Evil sealing talisman''!") - for(var/mob/O in viewers(T, null)) - O.show_message(text("\red [] invokes a talisman at []", usr, T), 1) - flick("e_flash", T.flash) - if (!(T.mutations & HULK)) - T.silent += 15 - T.Weaken(25) - T.Stun(25) - return + var/obj/item/weapon/nullrod/N = locate() in T + if(N) + for(var/mob/O in viewers(T, null)) + O.show_message(text("\red [] invokes a talisman at [], but they are unaffected!", usr, T), 1) + else + for(var/mob/O in viewers(T, null)) + O.show_message(text("\red [] invokes a talisman at []", usr, T), 1) + flick("e_flash", T.flash) + if (!(T.mutations & HULK)) + T.silent += 15 + T.Weaken(25) + T.Stun(25) + return /////////////////////////////////////////TWENTY-FIFTH RUNE diff --git a/code/game/magic/cultist/talisman.dm b/code/game/magic/cultist/talisman.dm index 30abdbe3a56..5b4498c6bc7 100644 --- a/code/game/magic/cultist/talisman.dm +++ b/code/game/magic/cultist/talisman.dm @@ -73,6 +73,7 @@ dat += "Fuu ma'jin - Allows you to stun a person by attacking them with the talisman.
" dat += "Sa tatha najin - Allows you to summon armoured robes and an unholy blade
" dat += "Kal om neth - Summons a soul stone
" + dat += "Da A'ig Osk - Summons a construct shell for use with captured souls. It is too large to carry on your person.
" usr << browse(dat, "window=id_com;size=350x200") return @@ -107,6 +108,8 @@ T.imbue = "armor" if("soulstone") new /obj/item/device/soulstone(get_turf(usr)) + if("construct") + new /obj/structure/constructshell(get_turf(usr)) src.uses-- supply() return diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 4ff27d3ee2f..469395cd2b6 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -106,6 +106,7 @@ if (sprite == "Non-Humanoid") src.icon_state = "surgeon" modtype = "Med" + nopush = 1 channels = list("Medical" = 1) if("Security") From 1160a223b0adc561fba64f03b49cc7099b6e3aff Mon Sep 17 00:00:00 2001 From: Ren Erthilo Date: Sat, 21 Apr 2012 21:03:24 +0100 Subject: [PATCH 08/20] TG: - Added Exosuit Jetpack - Added Exosuit Nuclear Reactor - Added Ripley construction steps sprites (courtesy of WJohnston) - Exosuit Sleeper can now inject occupant with reagents taken from Syringe Gun - Exosuit Cable Layer will now auto-dismantle floors - Exosuit Heavy Lazer cooldown increased, Scattershot now fires medium calibre ammo (less damage) - EMP now drains half of current exosuit cell charge, not half of maximum charge. - Exosuit wreckage can be pulled - Fixed several possible exosuit equipment runtimes - Moved all mecha-related icons to icons/mecha - Mecha equipment messages will show equipment icons in chat window - Fixed mecha creation reports being sent at wrong construction step - Played with changelog markup. For some reason javascript is extremely slow in byond browser, I'll look into it. --- code/datums/helper_datums/events.dm | 13 ++++++++++--- code/game/mecha/mecha_construction_paths.dm | 12 ++++++------ code/modules/research/designs.dm | 5 +++-- 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/code/datums/helper_datums/events.dm b/code/datums/helper_datums/events.dm index 8ae893b26b0..10e2f92a234 100644 --- a/code/datums/helper_datums/events.dm +++ b/code/datums/helper_datums/events.dm @@ -10,13 +10,16 @@ ..() events = new - proc/addEventType(event_type) + proc/addEventType(event_type as text) if(!(event_type in events) || !islist(events[event_type])) events[event_type] = list() return 1 return - proc/addEvent(event_type,proc_holder,proc_name) + + // Arguments: event_type as text, proc_holder as datum, proc_name as text + // Returns: New event, null on error. + proc/addEvent(event_type as text, proc_holder, proc_name as text) if(!event_type || !proc_holder || !proc_name) return addEventType(event_type) @@ -25,6 +28,8 @@ event += E return E + // Arguments: event_type as text, any number of additional arguments to pass to event handler + // Returns: null proc/fireEvent() //world << "Events in [args[1]] called" var/list/event = listgetindex(events,args[1]) @@ -35,7 +40,9 @@ clearEvent(args[1],E) return - proc/clearEvent(event_type,datum/event/E) + // Arguments: event_type as text, E as /datum/event + // Returns: 1 if event cleared, null on error + proc/clearEvent(event_type as text, datum/event/E) if(!event_type || !E) return var/list/event = listgetindex(events,event_type) diff --git a/code/game/mecha/mecha_construction_paths.dm b/code/game/mecha/mecha_construction_paths.dm index cd4a8bba15c..7d8520791ce 100644 --- a/code/game/mecha/mecha_construction_paths.dm +++ b/code/game/mecha/mecha_construction_paths.dm @@ -272,7 +272,7 @@ spawn_result() ..() - feedback_inc("mecha_ripley_created",1) + //feedback_inc("mecha_ripley_created",1) return @@ -515,7 +515,7 @@ spawn_result() ..() - feedback_inc("mecha_gygax_created",1) + //feedback_inc("mecha_gygax_created",1) return /datum/construction/mecha/firefighter_chassis @@ -708,7 +708,7 @@ spawn_result() ..() - feedback_inc("mecha_firefighter_created",1) + //feedback_inc("mecha_firefighter_created",1) return @@ -787,7 +787,7 @@ spawn_result() ..() - feedback_inc("mecha_honker_created",1) + //feedback_inc("mecha_honker_created",1) return /datum/construction/mecha/durand_chassis @@ -900,7 +900,7 @@ spawn_result() ..() - feedback_inc("mecha_durand_created",1) + //feedback_inc("mecha_durand_created",1) return @@ -1104,5 +1104,5 @@ spawn_result() ..() - feedback_inc("mecha_odysseus_created",1) + //feedback_inc("mecha_odysseus_created",1) return \ No newline at end of file diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index f073f1f1e8c..097df5bc048 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -525,6 +525,7 @@ datum build_path = "/obj/item/weapon/aiModule/tyrant" + /////////////////////////////////// /////Subspace Telecomms//////////// /////////////////////////////////// @@ -794,13 +795,13 @@ datum req_tech = list("magnets" = 3, "programming" = 3, "engineering" = 3) build_path = "/obj/item/mecha_parts/mecha_equipment/repair_droid" - mech_generator + mech_plasma_generator name = "Exosuit Module Design (Plasma Converter Module)" desc = "Exosuit-mounted plasma converter." id = "mech_plasma_generator" build_type = MECHFAB req_tech = list("plasmatech" = 2, "powerstorage"= 2, "engineering" = 2) - build_path = "/obj/item/mecha_parts/mecha_equipment/generator" + build_path = "/obj/item/mecha_parts/mecha_equipment/plasma_generator" mech_energy_relay name = "Exosuit Module Design (Tesla Energy Relay)" From 24459ae0ce01dcaacafb590a2d6fb61bc920889f Mon Sep 17 00:00:00 2001 From: Ren Erthilo Date: Sat, 21 Apr 2012 21:12:32 +0100 Subject: [PATCH 09/20] TG: Added Sieve's 'connected to port' and 'tank attached' icons for pumps and scrubbers. And I most certainly did not add a special new shirt, with icons by Ausops. No sir. Revision: r3060 Author: petethegoat --- code/game/machinery/atmoalter/canister.dm | 4 +- code/game/machinery/atmoalter/pump.dm | 6 ++ code/game/machinery/atmoalter/scrubber.dm | 6 ++ code/modules/clothing/gimmick.dm | 98 ++++++++++++---------- icons/obj/atmos.dmi | Bin 19116 -> 22013 bytes 5 files changed, 68 insertions(+), 46 deletions(-) diff --git a/code/game/machinery/atmoalter/canister.dm b/code/game/machinery/atmoalter/canister.dm index 4279110d627..22cb14661fe 100644 --- a/code/game/machinery/atmoalter/canister.dm +++ b/code/game/machinery/atmoalter/canister.dm @@ -58,10 +58,10 @@ else icon_state = "[color]" if(holding) - overlays += image('atmos.dmi', "can-open") + overlays += "can-open" if(connected_port) - overlays += image('atmos.dmi', "can-connector") + overlays += "can-connector" var/tank_pressure = air_contents.return_pressure() diff --git a/code/game/machinery/atmoalter/pump.dm b/code/game/machinery/atmoalter/pump.dm index 4c83f8a76fb..f718d8ba034 100644 --- a/code/game/machinery/atmoalter/pump.dm +++ b/code/game/machinery/atmoalter/pump.dm @@ -19,6 +19,12 @@ else icon_state = "psiphon:0" + if(holding) + overlays += "siphon-open" + + if(connected_port) + overlays += "siphon-connector" + return /obj/machinery/portable_atmospherics/pump/process() diff --git a/code/game/machinery/atmoalter/scrubber.dm b/code/game/machinery/atmoalter/scrubber.dm index cec39215e6b..c3ea2164a1d 100644 --- a/code/game/machinery/atmoalter/scrubber.dm +++ b/code/game/machinery/atmoalter/scrubber.dm @@ -39,6 +39,12 @@ else icon_state = "pscrubber:0" + if(holding) + overlays += "scrubber-open" + + if(connected_port) + overlays += "scrubber-connector" + return /obj/machinery/portable_atmospherics/scrubber/process() diff --git a/code/modules/clothing/gimmick.dm b/code/modules/clothing/gimmick.dm index 756309a9bbb..821b94056e7 100644 --- a/code/modules/clothing/gimmick.dm +++ b/code/modules/clothing/gimmick.dm @@ -1,11 +1,11 @@ /obj/item/clothing/head/rabbitears - name = "Rabbit Ears" + name = "rabbit ears" desc = "Wearing these makes you looks useless, and only good for your sex appeal." icon_state = "bunny" flags = FPRINT | TABLEPASS /obj/item/clothing/head/kitty - name = "Kitty Ears" + name = "kitty ears" desc = "A pair of kitty ears. Meow!" icon_state = "kitty" flags = FPRINT | TABLEPASS @@ -37,12 +37,12 @@ color = "rainbow" /obj/item/clothing/mask/owl_mask - name = "Owl mask" + name = "owl mask" desc = "Twoooo!" icon_state = "owl" /obj/item/clothing/under/owl - name = "Owl uniform" + name = "owl uniform" desc = "A jumpsuit with owl wings. Photorealistic owl feathers! Twooooo!" icon_state = "owl" color = "owl" @@ -71,6 +71,7 @@ item_state = "death" flags = FPRINT | TABLEPASS | CONDUCT fire_resist = T0C+5200 + flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT /*/obj/item/clothing/under/nazi1 name = "Nazi uniform" @@ -80,24 +81,29 @@ /obj/item/clothing/suit/greatcoat name = "great coat" - desc = "A Nazi great coat." + desc = "A Nazi great coat" icon_state = "nazi" item_state = "nazi" flags = FPRINT | TABLEPASS /obj/item/clothing/under/johnny - name = "Johnny~~" + name = "johnny~~ jumpsuit" desc = "Johnny~~" icon_state = "johnny" color = "johnny" /obj/item/clothing/suit/johnny_coat - name = "Johnny~~" + name = "johnny~~ coat" desc = "Johnny~~" icon_state = "johnny" item_state = "johnny" flags = FPRINT | TABLEPASS +/obj/item/clothing/suit/ianshirt + name = "worn shirt" + desc = "A worn out, curiously comfortable t-shirt with a picture of Ian. You wouldn't go so far as to say it feels like being hugged when you wear it but it's pretty close. Good for sleeping in." + icon_state = "ianshirt" + item_state = "ianshirt" /obj/item/clothing/under/rainbow name = "rainbow" @@ -215,42 +221,42 @@ item_state = "headset" // lol /obj/item/clothing/under/gimmick/rank/captain/suit - name = "Captain's Suit" + name = "captain's suit" desc = "A green suit and yellow necktie. Exemplifies authority." icon_state = "green_suit" item_state = "dg_suit" color = "green_suit" /obj/item/clothing/under/gimmick/rank/head_of_personnel/suit - name = "Head of Personnel's Suit" + name = "head of personnel's suit" desc = "A teal suit and yellow necktie. An authoritative yet tacky ensemble." icon_state = "teal_suit" item_state = "g_suit" color = "teal_suit" /obj/item/clothing/under/suit_jacket - name = "Black Suit" + name = "black suit" desc = "A black suit and red tie. Very formal." icon_state = "black_suit" item_state = "bl_suit" color = "black_suit" /obj/item/clothing/under/suit_jacket/really_black - name = "Executive Suit" + name = "executive suit" desc = "A formal black suit and red tie, intended for the station's finest." icon_state = "really_black_suit" item_state = "bl_suit" color = "black_suit" /obj/item/clothing/under/suit_jacket/red - name = "Red Suit" + name = "red suit" desc = "A red suit and blue tie. Somewhat formal." icon_state = "red_suit" item_state = "r_suit" color = "red_suit" /obj/item/clothing/under/blackskirt - name = "Black skirt" + name = "black skirt" desc = "A black skirt, very fancy!" icon_state = "blackskirt" color = "blackskirt" @@ -263,13 +269,13 @@ item_state = "schoolgirl" color = "schoolgirl" body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS - +/* /obj/item/clothing/under/gimmick/rank/police - name = "Police Uniform" + name = "police uniform" desc = "Move along, nothing to see here." icon_state = "police" item_state = "b_suit" - color = "police" + color = "police" */ //No Sprite - Shiftyeyesshady /obj/item/clothing/head/flatcap name = "flat cap" @@ -278,7 +284,7 @@ item_state = "detective" /obj/item/clothing/under/overalls - name = "Laborer's Overalls" + name = "laborer's overalls" desc = "A set of durable overalls for getting the job done." icon_state = "overalls" item_state = "lb_suit" @@ -294,7 +300,7 @@ force = 10 /obj/item/clothing/under/pirate - name = "Pirate Outfit" + name = "pirate outfit" desc = "Yarr." icon_state = "pirate" item_state = "pirate" @@ -326,6 +332,7 @@ icon_state = "hgpirate" item_state = "hgpirate" flags = FPRINT | TABLEPASS + flags_inv = HIDEJUMPSUIT /obj/item/clothing/glasses/eyepatch name = "eyepatch" @@ -358,119 +365,120 @@ desc = "Perfect for winter in Siberia, da?" icon_state = "ushankadown" item_state = "ushankadown" + flags_inv = HIDEEARS /obj/item/clothing/head/collectable //Hat Station 13 - name = "Collectable Hat" + name = "collectable hat" desc = "A rare collectable hat." /obj/item/clothing/head/collectable/petehat - name = "Ultra Rare! Pete's Hat!" + name = "ultra rare Pete's hat!" desc = "It smells faintly of plasma" icon_state = "petehat" /obj/item/clothing/head/collectable/metroid - name = "Collectable Metroid Cap!" + name = "collectable metroid cap!" desc = "It just latches right in place!" icon_state = "metroid" /obj/item/clothing/head/collectable/xenom - name = "Collectable Xenomorph Helmet!" + name = "collectable xenomorph helmet!" desc = "Hiss hiss hiss!" icon_state = "xenom" /obj/item/clothing/head/collectable/chef - name = "Collectable Chef's Hat" + name = "collectable chef's hat" desc = "A rare Chef's Hat meant for hat collectors!" icon_state = "chef" item_state = "chef" /obj/item/clothing/head/collectable/paper - name = "Collectable Paper Hat" + name = "collectable paper hat" desc = "What looks like an ordinary paper hat, is actually a rare and valuable collector's edition paper hat. Keep away from water, fire and Librarians." icon_state = "paper" /obj/item/clothing/head/collectable/tophat - name = "Collectable Top Hat" + name = "collectable top hat" desc = "A top hat worn by only the most prestigious hat collectors." icon_state = "tophat" item_state = "that" /obj/item/clothing/head/collectable/captain - name = "Collectable Captain's Hat" + name = "collectable captain's hat" desc = "A Collectable Hat that'll make you look just like a real comdom!" icon_state = "captain" item_state = "caphat" /obj/item/clothing/head/collectable/police - name = "Collectable Police Officer's Hat" + name = "collectable police officer's hat" desc = "A Collectable Police Officer's Hat. This hat emphasizes that you are THE LAW." icon_state = "policehelm" /obj/item/clothing/head/collectable/beret - name = "Collectable Beret" - desc = "A Collectable red beret. It smells faintly of garlic." + name = "collectable beret" + desc = "A Collectable red Beret. It smells faintly of Garlic." icon_state = "beret" /obj/item/clothing/head/collectable/welding - name = "Collectable Welding Helmet" + name = "collectable welding helmet" desc = "A Collectable Welding Helmet. Now with 80% less lead! Not for actual welding. Any welding done while wearing this Helmet is done so at the owner's own risk!" icon_state = "welding" item_state = "welding" /obj/item/clothing/head/collectable/slime - name = "Collectable Slime Hat" + name = "collectable slime hat" desc = "Just like a real Brain Slug!" icon_state = "headslime" item_state = "headslime" /obj/item/clothing/head/collectable/flatcap - name = "Collectable Flat Cap" + name = "collectable flat cap" desc = "A Collectible farmer's Flat Cap!" icon_state = "flat_cap" item_state = "detective" /obj/item/clothing/head/collectable/pirate - name = "Collectable Pirate Hat" + name = "collectable pirate hat" desc = "You'd make a great Dread Syndie Roberts!" icon_state = "pirate" item_state = "pirate" /obj/item/clothing/head/collectable/kitty - name = "Collectable Kitty Ears" + name = "collectable kitty ears" desc = "The fur feels.....a bit too realistic." icon_state = "kitty" item_state = "kitty" /obj/item/clothing/head/collectable/rabbitears - name = "Collectable Rabbit Ears" + name = "collectable rabbit ears" desc = "Not as lucky as the feet!" icon_state = "bunny" item_state = "bunny" /obj/item/clothing/head/collectable/wizard - name = "Collectable Wizard's Hat" + name = "collectable wizard's hat" desc = "NOTE:Any magical powers gained from wearing this hat are purely coincidental." icon_state = "wizard" /obj/item/clothing/head/collectable/hardhat - name = "Collectable Hard Hat" + name = "collectable hard hat" desc = "WARNING! Offers no real protection, or luminosity, but it is damn fancy!" icon_state = "hardhat0_yellow" item_state = "hardhat0_yellow" /obj/item/clothing/head/collectable/HoS - name = "Collectable HoS Hat" + name = "collectable HoS hat" desc = "Now you can beat prisoners, set silly sentences and arrest for no reason too!" icon_state = "hoscap" /obj/item/clothing/head/collectable/thunderdome - name = "Collectable Thunderdome helmet" + name = "collectable Thunderdome helmet" desc = "Go Red! I mean Green! I mean Red! No Green!" icon_state = "thunderdome" item_state = "thunderdome" /obj/item/clothing/head/collectable/swat - name = "Collectable SWAT Helmet" + name = "collectable SWAT helmet" desc = "Now you can be in the Deathsquad too!" icon_state = "swat" item_state = "swat" @@ -504,7 +512,7 @@ body_parts_covered = UPPER_TORSO|LOWER_TORSO|FEET /obj/item/clothing/under/sexymime - name = "Sexy mime outfit" + name = "sexy mime outfit" desc = "The only time when you DON'T enjoy looking at someone's rack." icon_state = "sexymime" item_state = "sexymime" @@ -519,7 +527,7 @@ flags = FPRINT | TABLEPASS /obj/item/clothing/head/justice - name = "Justice Hat" + name = "justice hat" desc = "Fight for what's righteous!" icon_state = "justicered" item_state = "justicered" @@ -542,11 +550,12 @@ item_state = "justicepink" obj/item/clothing/suit/justice - name = "Justice Suit" + name = "justice suit" desc = "This pretty much looks ridiculous." icon_state = "justice" item_state = "justice" flags = FPRINT | TABLEPASS + flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT /obj/item/clothing/under/gladiator name = "gladiator uniform" @@ -561,7 +570,8 @@ obj/item/clothing/suit/justice desc = "Ave, Imperator, morituri te salutant." icon_state = "gladiator" flags = FPRINT|TABLEPASS|SUITSPACE|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR - item_state="gladiator" + item_state = "gladiator" + flags_inv = HIDEMASK|HIDEEARS|HIDEEYES //stylish new hats diff --git a/icons/obj/atmos.dmi b/icons/obj/atmos.dmi index a9319fe1aa4e86a98b5f6c3446c354693d310404..32961b5a0ac0890b50f81ac71429cf3f862fe584 100644 GIT binary patch literal 22013 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 N=x7*TEl_g^`X40M?WzC( literal 19116 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%0Dl5gDrG%QcL4{t3(a5qbIDtT{MUg2;KmJhbYE&} zDpFHZ(Z4_N&O39sVm?4#KW Date: Sat, 21 Apr 2012 23:48:57 +0100 Subject: [PATCH 10/20] TG: - CE's locker spawns the hazard vest above the toolbox - CE's locker spawns with an industrial backpack at the bottom - Sec locker spawns with a sec backpack at the bottom - HoS locker spawns with the injectors lockbox above the flashbang box - HoS locker spawns with an armor vest at the bottom for the convenience of HoS' who want to play with regular armor. - Added this to the changelog, I used the old format because the new one is just too tedious to do by hand, sorry. Revision: r3062 Author: baloh.matevz --- .../objects/closets/secure/engineering.dm | 30 ++++++++------ code/game/objects/closets/secure/security.dm | 41 ++++++++++--------- 2 files changed, 39 insertions(+), 32 deletions(-) diff --git a/code/game/objects/closets/secure/engineering.dm b/code/game/objects/closets/secure/engineering.dm index 55a6d9d6909..7e0f4f4595f 100644 --- a/code/game/objects/closets/secure/engineering.dm +++ b/code/game/objects/closets/secure/engineering.dm @@ -12,25 +12,25 @@ New() ..() sleep(2) - new /obj/item/wardrobe/chief_engineer(src) - new /obj/item/blueprints(src) var/obj/item/weapon/storage/backpack/industrial/BPK = new /obj/item/weapon/storage/backpack/industrial(src) var/obj/item/weapon/storage/box/B = new(BPK) + new /obj/item/wardrobe/chief_engineer(src) + new /obj/item/blueprints(src) + new /obj/item/clothing/under/rank/chief_engineer(src) new /obj/item/weapon/pen(B) new /obj/item/device/pda/heads/ce(src) - new /obj/item/device/multitool(src) - new /obj/item/device/flash(src) new /obj/item/clothing/head/helmet/hardhat/white(src) new /obj/item/clothing/head/helmet/welding(src) + new /obj/item/clothing/gloves/yellow(src) + new /obj/item/clothing/shoes/brown(src) new /obj/item/weapon/storage/belt/utility/full(src) + new /obj/item/device/radio/headset/heads/ce(src) new /obj/item/weapon/storage/toolbox/mechanical(src) new /obj/item/clothing/suit/hazardvest(src) - new /obj/item/clothing/gloves/yellow(src) new /obj/item/clothing/mask/gas(src) + new /obj/item/device/multitool(src) + new /obj/item/device/flash(src) new /obj/item/clothing/glasses/meson(src) - new /obj/item/device/radio/headset/heads/ce(src) - new /obj/item/clothing/shoes/brown(src) - new /obj/item/clothing/under/rank/chief_engineer(src) return @@ -54,6 +54,9 @@ new /obj/item/weapon/storage/toolbox/electrical(src) new /obj/item/weapon/storage/toolbox/electrical(src) new /obj/item/weapon/storage/toolbox/electrical(src) + new /obj/item/weapon/module/power_control(src) + new /obj/item/weapon/module/power_control(src) + new /obj/item/weapon/module/power_control(src) new /obj/item/device/multitool(src) new /obj/item/device/multitool(src) new /obj/item/device/multitool(src) @@ -83,6 +86,8 @@ new /obj/item/weapon/weldingtool/largetank(src) return + + /obj/structure/closet/secure_closet/engineering_personal name = "Engineer's Locker" req_access = list(access_engine) @@ -93,6 +98,7 @@ icon_broken = "secureengbroken" icon_off = "secureengoff" + New() ..() sleep(2) @@ -100,18 +106,18 @@ // var/obj/item/weapon/storage/backpack/industrial/BPK = new /obj/item/weapon/storage/backpack/industrial(src) var/obj/item/weapon/storage/box/B = new(BPK) + new /obj/item/clothing/under/rank/engineer(src) + new /obj/item/clothing/shoes/orange(src) new /obj/item/weapon/pen(B) new /obj/item/device/pda/engineering(src) new /obj/item/device/t_scanner(src) - new /obj/item/clothing/suit/hazardvest(src) new /obj/item/weapon/storage/belt/utility/full(src) new /obj/item/weapon/storage/toolbox/mechanical(src) + new /obj/item/device/radio/headset/headset_eng(src) + new /obj/item/clothing/suit/hazardvest(src) new /obj/item/clothing/mask/gas(src) new /obj/item/clothing/head/helmet/hardhat(src) new /obj/item/clothing/glasses/meson(src) - new /obj/item/device/radio/headset/headset_eng(src) - new /obj/item/clothing/shoes/orange(src) - new /obj/item/clothing/under/rank/engineer(src) return /obj/structure/closet/secure_closet/atmos_personal diff --git a/code/game/objects/closets/secure/security.dm b/code/game/objects/closets/secure/security.dm index 5d41480fda6..967d9adaf39 100644 --- a/code/game/objects/closets/secure/security.dm +++ b/code/game/objects/closets/secure/security.dm @@ -15,14 +15,14 @@ // new /obj/item/device/pda/captain(src) new /obj/item/weapon/storage/id_kit(src) - new /obj/item/weapon/reagent_containers/food/drinks/flask(src) - new /obj/item/weapon/gun/energy/gun(src) + new /obj/item/clothing/suit/armor/captain(src) + new /obj/item/clothing/head/helmet/cap(src) new /obj/item/clothing/glasses/sunglasses(src) new /obj/item/clothing/suit/armor/vest(src) new /obj/item/clothing/head/helmet/swat(src) new /obj/item/device/radio/headset/heads/captain(src) - new /obj/item/clothing/suit/armor/captain(src) - new /obj/item/clothing/head/helmet/cap(src) + new /obj/item/weapon/reagent_containers/food/drinks/flask(src) + new /obj/item/weapon/gun/energy/gun(src) return @@ -45,12 +45,12 @@ var/obj/item/weapon/storage/backpack/BPK = new /obj/item/weapon/storage/backpack(src) var/obj/item/weapon/storage/box/B = new(BPK) new /obj/item/weapon/pen(B) - new /obj/item/device/flash(B) new /obj/item/device/pda/heads/hop(src) + new /obj/item/device/radio/headset/heads/hop(src) new /obj/item/weapon/storage/id_kit(src) new /obj/item/weapon/gun/energy/gun(src) + new /obj/item/device/flash(src) new /obj/item/clothing/glasses/sunglasses(src) - new /obj/item/device/radio/headset/heads/hop(src) return @@ -74,12 +74,12 @@ var/obj/item/weapon/storage/box/B = new(BPK) new /obj/item/weapon/pen(B) new /obj/item/device/flash(B) - new /obj/item/weapon/melee/baton(src) - new /obj/item/weapon/gun/energy/gun(src) new /obj/item/device/pda/heads/hos(src) new /obj/item/clothing/glasses/sunglasses/sechud(src) - new /obj/item/weapon/storage/lockbox/loyalty(src) new /obj/item/weapon/storage/flashbang_kit(src) + new /obj/item/weapon/storage/lockbox/loyalty(src) + new /obj/item/weapon/melee/baton(src) + new /obj/item/weapon/gun/energy/gun(src) return /obj/structure/closet/secure_closet/warden @@ -102,15 +102,17 @@ var/obj/item/weapon/storage/box/B = new(BPK) new /obj/item/weapon/pen(B) new /obj/item/device/flash(B) - new /obj/item/weapon/melee/baton(src) - new /obj/item/weapon/gun/energy/taser(src) new /obj/item/device/pda/security(src) new /obj/item/clothing/suit/armor/vest(src) - new /obj/item/clothing/glasses/sunglasses/sechud(src) new /obj/item/device/radio/headset/headset_sec(src) new /obj/item/weapon/storage/flashbang_kit(src) + new /obj/item/weapon/melee/baton(src) + new /obj/item/weapon/gun/energy/taser(src) + new /obj/item/clothing/glasses/sunglasses/sechud(src) return + + /obj/structure/closet/secure_closet/security name = "Security Locker" req_access = list(access_security) @@ -130,18 +132,18 @@ var/obj/item/weapon/storage/backpack/security/BPK = new /obj/item/weapon/storage/backpack/security(src) var/obj/item/weapon/storage/box/B = new(BPK) new /obj/item/weapon/pen(B) - new /obj/item/device/flash(B) - new /obj/item/weapon/pepperspray(src) - new /obj/item/weapon/melee/baton(src) new /obj/item/policetaperoll(src) - new /obj/item/weapon/flashbang(src) - new /obj/item/device/pda/security(src) new /obj/item/clothing/suit/armor/vest(src) new /obj/item/clothing/suit/storage/gearharness(src) - new /obj/item/clothing/glasses/sunglasses/sechud(src) - new /obj/item/weapon/storage/belt/security(src) new /obj/item/clothing/head/helmet(src) + new /obj/item/device/pda/security(src) new /obj/item/device/radio/headset/headset_sec(src) + new /obj/item/weapon/storage/belt/security(src) + new /obj/item/weapon/flashbang(src) + new /obj/item/weapon/pepperspray(src) + new /obj/item/device/flash(src) + new /obj/item/weapon/melee/baton(src) + new /obj/item/clothing/glasses/sunglasses/sechud(src) return @@ -156,7 +158,6 @@ icon_broken = "cabinetdetective_broken" icon_off = "cabinetdetective_broken" - New() ..() sleep(2) From 3726a45b56286c3d84bd763ea9533d2b75e1d413 Mon Sep 17 00:00:00 2001 From: Ren Erthilo Date: Sun, 22 Apr 2012 02:37:21 +0100 Subject: [PATCH 11/20] TG: Added stat tracking for cyborg frames built, cyborgs created, MMIs filled, AIs created, and cyborg modules chosen. cyborg_frames_built cyborgs_created mmis_filled ais_created standard_cyborgs service_cyborgs miner_cyborgs medical_cyborgs security_cyborgs engineering_cyborgs janitor_cyborgs I also added the fetchbot icons, which I forgot to mention. Revision: r3064 Author: petethegoat Date: Feb 8, 2012 --- icons/obj/aibots.dmi | Bin 28798 -> 29660 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/obj/aibots.dmi b/icons/obj/aibots.dmi index feca6f8a139c1326c4720d2d1f61b88cd12e55f2..017702505ce8b267a648d67ad672784f65b7fa73 100644 GIT binary patch delta 8902 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 delta 8034 zcmb7pbyQSQ_x21RA*o0spp>L^ry?K-2#9od4Bf(91Vm6IMY^OxKmqAix;uuF?q;ZA z=68AD-?!GczW=_v)~vhMJ?HH6%yagB&fe$DZ9vgW&=?j#!T*h(r-HSIrMtbWr@f0a z1mc^P{;kisgpVw2>hQta2DK>sh^VhGM0ARCxMy{L5;6Sz@GEw2?&{Py##Nboirkwi z5Hly0am3~K4pVc@f`~TuhwS8zSUrCWR0xTy?BAJ*vCd$_vf>HAtVo^6iLBmCM)`#&Nb6D^BEj*%*540zKXge;;NL|m`(_1l(33)v~geFe~1dzvGIkM{$jC7>#g^oQszilIZ5UX2v* zH)bTNp2FRaZUpfqgg4giA(%u}<7XTXXy|YZXiTtNX%U$&>Jex`ujZZ+_VC@peNi zjnwC;9g+IGN(8h`gGXx~+ZTK%{LN6xRmVCT!^% z-n1?(Xq(~DJS4s-KD2RdG3Q8U-yJCW+op9mn?VwzYw}L>hV`F#xyfSWsi&~{ zXb6ObwM+q%2Bf5{Rb0r`;c1@b2a~{NM_IkIbcD+GAE_$vEC2M{(&~|iFX`&3^!a+H#f$-0e>+GW3N%BQ%R`N>*AN6MTEBeKhE!TX9&IN zYA%cd0ttu&?^D}U!DTDhzc9ZWoyP1b?)#n=8T52XMnsTE9vq)&OnxG^<)&W(`}0T3o+fngT^z@pJE4D@sY44o3j?fmH7)CgFj6%d2K>cFrbo`WZ&ie*|8x ziwPeF(!K;WEcgnl#xJ3iDpNh&S5XN?|InYLWFjP_b`5NxPZwP(^sv0kz6X z=a&d|RqUmj4fPYHew>e-&Jpk4q5X=SHEzC7Q$|`y@?_xDau)#b zQc2m5j2P8>Mv!+MXZ81ciOwl>4G%)-dt@N3B~SZ3eMxlEb1quUuUpFaF7wV4xUk}4 z8zYogR^DJ|Eesyf0HW%XkAh|fQzZY>!*PSdXIp)reN{g*j5*Px# zaMqa${qfS*Wu~m&~x5hs?9uDqCh{{N#wIdp(3jH-9MH(ltD}QE=FdNL2CQeZt%O9Zj zxZVe*+NfCi5Zt%_z(_W5L>3amz(shd`^{5WX>>XZ2%gE>(3mCI7 zF$IyLk-8rrv!GpS(LgyN3%5bJGo4HdW3$o5smzBB^$`qO$x$uHW+57MTL$0U~i3sE6jFPji_6xQOtPdtKM`p`#B+h z%Ec97^Yz}!a-E(pH0a`px%4_v+BRbrnMr&a(G-86EpmTHAzpbmC1LhNF=zCA>k9EM z{08C4gFHR}TzD__phEVu{rg5dQ?Q?ZR%DV7)BOEAD+5k4twzV1J(AQ>i$8A;h!*In z4=1&s6Ks)bS*M^@E~Sp@Pb_pEY8R;M@EBCJS_$Y}@W8jNtQ+T-zw`$t&&~bvNa&jN z*yXz?s_6Rb5UZ%jer|5XMx9>P#L=&m!#jkG(=pf=Se++@gwqAenr-Qo?mm)wh*+co z4mltPvLdv$DNMbB{P2`f-LY${wYztZqjjj?KNz2u8)1E?w6(?H>xyHhKQT117V34~ z(a{k}EuFEdM)&g4Upltt6n6==b`OBfhPiGh20&6w8EBG@{&<6H5bU;;{^P=o;Qjme z>N5afF)QdWeZy=|HJ8HrncVFSzV!7d*4c2kCL{pef!lns`+UbG!`Y{X=K_}$BiKS0 zKnm%TMR%K@UR$+$I0VeGs8god3=}Y)Orq-4*EDarGNloINIjhUBGti>wOTk!gHlRS z8A0~!AOj+|pbKsd**+Rf2PG`WK+nc|pkQ(BoBVS}BkU9juVUjdgU^&aeAGlNEG%|r zG`?hRmN?1R0``+XBDA|2UH?5!m-rBunyPe7@=(kTp*g4KhNuGtK9{8<&Py?xdXCrVBEQs zU>**OPxOfSR?4lZ<2J(jRcmsudgND0qcBj0{99!^KKzfFno+c9RQV#AYNI4Jhrwpc zbTRwKkH{{zSL>@snc|=dt}!-m9LegqyH_BGGZ}RrK9@XcXgfc29z_T_jEB2LYpmXm zJ^tf-*1qw#2Wv90x_zx(2?c9pv(&K02Dv-q0RCw89Aw5!QhU!4EkAw& znF}FFnLlH~>6oXHFwPp{@JAk|Y-%YYCBLO6*(hwD{iOJK?D!7AUd?nZzgl-9SN6&c zfYH2oqp#%Jx&QFnlZm!q)!*`+qzEW}%cIeHwS&a&K5@I7dE?V(cHK>+Z=Zx_1lqsn zlmfniek1;F{Q(>e<$mYF@loKs!u!nD@5V)v&uoWoW%GP>lyfYRk$M=`n(iDC&Fu8z z3C5jxnw;C9N;y@)`V%J)hxs$3w7Yvw_Rx!^YRyTZ`334WG`lY3XC?*T5@mH@s!H@; zk<$)w>8#MX9@;@ALHnrjWIX_8ffAyiAB~Nim-O8jxSRz}${Vwb9YcVBPcKA4n}w%al#LcM20ASe8el4&q4hn)`h0x~M)7m3Mu)itG*1K@C zM={8c38CxCyxE&P!+U?rb6)DhUSf-3SU^&aMO3YD1+p zaGAsHCL`Gu#>oSO<>Q%o$uJP~?dvV9u<{Lu+|>!yi^Nx_!VA`4I7=KuL}|Yimml%A z9+U0-y|C|{S6@0trq>-gjy0EDi%CRDBB^+M^{-uK;nsHa3T|%vtgNiNb61Stzh7$^ z7;GnqV2Up;LR#$2wxptgPy4F=vp#dP2Q?_?Zayq*Y<^?TWzmuOxxxSD98xzKM!lz7 zD_;edwGm&-_om_JR^(}e;j31#4{8HfT~r?-hwY(0=0=Y_64fgvgD$2XIn$B-sb0{# z4%+5ap9(sSl^LvR+u4#d8Y>bxwzFMKIQ?zDh=eNmocq*h0LyiCLXx=FdAoJ zfpOt8uAje6ykXBJ_#FDh&PFQoWOzaqzt9xmE=qnfJ&q=y$)S2EVKT6-k+{N0*3CNh z0)3-HceX63F(DTHA0J9*o5x+@IpUD=`Gi`Tz#JS$Z)p4Oe=Vr|1LEFGm@;_-c@Kr| z0`7MJk3R@&|lHmwtfLk^Cv+!nwe5??2JH=;Kl<8;ZlIa|h z4LY$M%Ce``m$f!)d{-!1xyJt&gBTTt!MC3l_Z#&xhRL?}t}$kRZ8tJ_<~?Z65b@b|b@P{sOZ>SIvr@E4x+Ka9}#o`(@{FlGk40+q_81+DVsczI{%!0~z*%xY8tlT-l(RlTat+4jow zl17K~UurA%M-jFB!IuPtP|iT=-};qoLXMNkjm&jm+Q+=yiQll;BpqR|Q)`TUzp)Qd z-tv8~yIZqFSKsD44-bdUVn(`W#O7f34<`od8?oe%CpronWYOqLLDG#9JVn{t23|^& zrPt|7iop;FF);E{LH^CU30Nx;5IOW;31=R)c8{EXBD$WSl<}fCYVkR;I?;z^4TX{U z!zOOht{^yp#re_==X_b2BV#ijDT))UVgQop&SjTTiivUNvt}ktl2`A2ANx%tY>R>> z|0XRJwnu(=e!cIov1%a&Ok!8UAl!wB=uiZB>8sv1muOExc~hB_n87AGrS+U{ zc&IxQeOe&FT&Ba@Q!0z27X$R~)m2#m=jT3uyGJZ_>^5A5)Sh#E(E2p|vuxD{xCzzz zq|_O;F`rv=M2c_KHm5IKaeXT2@y7lof3#Xs|21G3oNw=Wx8;3fT8LeW&A{`8f7}iY z1l?0pi&NK<-?J|kDFfjmty}uVE;LqK!0~Ai#HG^z%;D_jd~vKmgR$W6--*+OTrH^k zDJrA{wzI0&)8B9X#PrIgV z_&Hze=+;4hD@1x=p?uQyXpUpnlgJjy{L8Bt;+;5AqRXZGA6VakV8~W_Irf!4+qr6h z$NTw%{khhw$j(LQn<#0?>bHK8^%lTTRH@NC$J}hF`#w-$T)nu=+4tB4jMrs5XUZ!# zM?qTLBq6V`6tT6J0;D#T&T9f?Tb>UG460V60s77^#+&qGas`RcGDmB(za48`_qo9( z6+CU@SMY3#@&PED}w#=j`htXE9rFrt6d=#>j5J{+>v9zuJk0OK7ZK}CBBW^FeusG`9T|rY{ovodT z-RYE9W@b!y$h{6HUdyp{E5#`P>H4^Qu6|#%wXpm6AHZogEpo=F^L^ku0wN--u1Txb zipha~DwEQQX56EeopE-IuF`9HTFufS@;5P^j@n^%6HQKIgkI#1#N8u5wQtzQ3ls<( zoLt4)a`whK{3QZS4TBNC%gG2PS+A=fcKNRwl3)9?5Ph?&6}aAy;d3mz3!d)0bh`(K z!=DHZW&r39qoZ12MfrUCEYa5Ktu?(&Rpy8CLATz8+vEnUCFLsrvWw#h*ez60pwZ|m zr+G@^4>L||Onl*>LpF+RB-1J-E(23V8fc$y`js|C;vQ*|q&}mB3mwkX$c%@EJ=0A& z?c41j-#|eQyWqqV&7plu!8trQW0EWMq z=A#y-alARotZ8&Mr~MJGg++T?dEW2WU>(BHbnlGr=KOhBj1PBE(xw?i#gNLs6fz9! zP{50?^2M&{{5!oipiNDL>)6&{zX-1)_~$fR!)Qv;x(pm#Em9K5(RxF)Oi>5lARv?v zrmB#AI<(l!2(J0x2Le|Ea1?Oi*0ATpLc%73WQ&%}5uhVnA7U40?MM-gUYUxMypNZ& z!1EJ+zRswLa*3`%J%uX&A(7k8!OY*!0^!8n*NscF(8q&!*4IH^g*V{E_pBzEM@wpJ z6YS|(+@J??pAIt+B5REe>5A+rp#Q5YOBhq;T1|Dm|Mmu|Y|z-YqS@MCD`xW}wJ*iG z?*~GLaI0$z!T5r;uH`tdvM`q$r6D?@RlRD@KhowsWo~1XrUbLiE#PvelYd1N`Z4>y zyPfl0HsJ~Pg^VZ}00x`RsKJ=@eb-w!#)#V57##u5%=o00CZrlGs+b+9vevRn`5mK# zN6^AM1agiHLG?P=Dh7>Eh@}&EL1m?%|E!QIE}Qh`(G#=jB>uViV%a~Pk-rc!QUDi+ z;jt8YLt`ecV21J(1Vcn87`FQL>s`NM*lro@ElJTG_6Q(?z}D8Gc!GVQbqamHC|S7t zd$9Kr>(d&OYg4N8>dFlRtTG?MZ3W0<=w?ErU)&XSP(8O?efx~bZhBGC5B=)M@p0~G zCAnBlO#`_S$LV^}J_9n6p~dZ&@f6d^DGsH_Y&;9ClTG?KRrO)rg-@b08hWfo<3s{T z^u=9`J-mVZd@S9&a2JJ4uR%_0BdA}x8y!YO~_l9HBoC9M?*;K>;q z#7jTu)|0K?e6@Kua^@4?lk1m5USWFfnn8Wd1cI1-?&e|$oG41#IbmK4gKHc|>9Ukv zTN42ue%*GtssH#ck6b{2v-j~cJ$jND;A`#uTO*b%>glH#>!YFrv}p1x1CaDEDil5w zG#n?ZwH$$QR_n0jqy7p)x3F~4;^2@qSp25~T|1UHR%n@lJq-XSTibflJsAcbtzBid z8gBeRZ~%K=nZ6RFOz86j%-K#xY)0AX5;iwf8N|N+#jzaGt*oKj18{IqTUw4RGUt46 zJeIBc{mbf7;&;H2)sD-;p{&upj3ZLwv)LwH#+#=eZ3OM*I0SOsn0jO?IXndrO$?^{C@uaH{emmY@40P;A>WH|DN1fUtPU4sl9Bu^F){J*^w{-Y|HOjs3c@%R-ru4~hvfn=z{;w(Ee{uXDTh0WpL6zzSsrhyDJON}AeCfb!e@HmNb}o;+ z8E!@H+)Y2|G#LH=sFE7Q(-3rW7SP>F`T4#5$ic4LGGOeQOf$;D=bWz}MubFsY3fu*#uQjs5v11E_Z~a|aO5;K?-{rM;mYli^@|htShr&s z$_3}4tL2shBl(dy>j!ho-U%`8<&~p$UTf71oB#S@>nN!wtA?c%Y@y_DR~J|1Og}mk zUg2z*aKmi*-T(IP0<;T}mzQ6?K?(Ma))N^s8!y-cJ;z>m zvrNwqxqfG-J<3|7tOIohLy$a+h@(w zZ}!e&l5bsy!kHijMr;Kda=2XXnOv0Od3F`!V(i-~D>PoF_=Zurd8|+oPp%+?w!~X_ zc`~M?_*IJ_2AG>FjGPkyI=oSv>NNBI?Zw7liYXr5dRV{*Lyxw-S8A*RoOeUovOqg; zRA=JwjPBuS#8ct;c|qo zvZmq*xLlS-lv&_i0R;_39+UzU8lkqC+2K7U#TWL~m&Za205$b+Q2}m4e;V4GY5)t{ zezyMipQ<5H=D4=yHLvcV0vIno;BxpsIvBueDQ?`nJj}oF^)Qp`Lhcc44YyrM z>sO}bYZ@0hWk?3jmU`R+Nnv$<+O_0(G;(AkLq8EO@d7J8W0Y0#KtaePfE}> zH~h@$pag(X=S87U+Wm5QWo4p1q+x43fVAne|E~(BlHSv5Z0vmE`b3|xW>(DS0q4&e z75OutHIU|UfBx(`JOhWeuz~T+KH?|?4&irMklJfoaz!0$hzFc?_7_)hCDyPlGlL{B z#?r6FS?3KM?2^_)RWS@yBI#dm~;k9wL= zk^0?eZe=jpDvtrFT+Ni~Ih!&adXJ5lW-w+u`9oht<0+_+)65}cMrMO);whEOE9(BB n{jgA>HeuIX0(CMR(<97+-+3g7Qd}kkd|tj#S15aiWfuHDi(WiC From 2b72fd42c764801992579cf352187337f2db827c Mon Sep 17 00:00:00 2001 From: Ren Erthilo Date: Sun, 22 Apr 2012 02:48:53 +0100 Subject: [PATCH 12/20] TG: Added a new one-use artefact, Veil Render(sprites by Ausops), for the wizard which will summon Nar-Sie after a few seconds of delay. Yes believe it or not I got permission to add this. Added Veil Render to the spellbook Added the effect "rend" as part of Veil Render's summoning process. Rend spawns Nar-Sie and deletes itself after a 3 second delay. Updated the changelog. Revision: r3067 Author: kortgstation --- baystation12.dme | 1 + code/game/gamemodes/wizard/veilrender.dm | 41 +++++++++++++++++++++++ code/modules/mob/new_player/new_player.dm | 2 ++ 3 files changed, 44 insertions(+) create mode 100644 code/game/gamemodes/wizard/veilrender.dm diff --git a/baystation12.dme b/baystation12.dme index b029869cf22..d37370c92b3 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -442,6 +442,7 @@ #include "code\game\gamemodes\wizard\soulstone.dm" #include "code\game\gamemodes\wizard\spellbook.dm" #include "code\game\gamemodes\wizard\spells.dm" +#include "code\game\gamemodes\wizard\veilrender.dm" #include "code\game\gamemodes\wizard\wizard.dm" #include "code\game\jobs\access.dm" #include "code\game\jobs\job_controller.dm" diff --git a/code/game/gamemodes/wizard/veilrender.dm b/code/game/gamemodes/wizard/veilrender.dm new file mode 100644 index 00000000000..2310b16ff41 --- /dev/null +++ b/code/game/gamemodes/wizard/veilrender.dm @@ -0,0 +1,41 @@ +/obj/item/weapon/veilrender + name = "veil render" + desc = "A wicked curved blade of alien origin, recovered from the ruins of a vast city." + icon = 'wizard.dmi' + icon_state = "render" + item_state = "render" + flags = FPRINT | TABLEPASS + force = 15 + throwforce = 10 + w_class = 3 + var/charged = 1 + + +/obj/effect/rend + name = "Tear in the fabric of reality" + desc = "You should run now" + icon = 'biomass.dmi' + icon_state = "rift" + density = 1 + unacidable = 1 + anchored = 1.0 + + +/obj/effect/rend/New() + spawn(50) + new /obj/machinery/singularity/narsie/wizard(get_turf(src)) + del(src) + return + return + + +/obj/item/weapon/veilrender/attack_self(mob/user as mob) + if(charged == 1) + new /obj/effect/rend(get_turf(usr)) + charged = 0 + for(var/mob/M in viewers(usr, null)) + if ((M.client && !( M.blinded ))) + M.show_message("\red [src] hums with power as [usr] deals a blow to reality itself!") + else + user << "\red The unearthly energies that powered the blade are now dormant" + diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index f4ddf4d83bb..cbbb5505e8d 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -214,6 +214,8 @@ observer.real_name = observer.name observer.original_name = observer.name //Original name is only used in ghost chat! It is not to be edited by anything! + preferences.copy_to_observer(observer) + del(src) return 1 From 7e13ad12cb4ab2889ecdfe54b857decce8300057 Mon Sep 17 00:00:00 2001 From: Ren Erthilo Date: Sun, 22 Apr 2012 02:50:29 +0100 Subject: [PATCH 13/20] TG: Added a line counter tool. Counts the number of files, lines, characters, etc. in the project. Revision: r3070 Author: baloh.matevz --- tools/DM Line counter.exe | Bin 0 -> 88064 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 tools/DM Line counter.exe diff --git a/tools/DM Line counter.exe b/tools/DM Line counter.exe new file mode 100644 index 0000000000000000000000000000000000000000..d6b075d6313b302e8e25dfcc7af970ce3d129a74 GIT binary patch literal 88064 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

+Em_d2kP_<{FK6P^Vy4&Gi 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 V2DCpc)^^SO{Ve`J Date: Sun, 22 Apr 2012 02:54:18 +0100 Subject: [PATCH 14/20] Merge fixes. --- code/modules/mob/new_player/new_player.dm | 2 -- code/modules/power/singularity/singularity.dm | 16 ++++++++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index cbbb5505e8d..f4ddf4d83bb 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -214,8 +214,6 @@ observer.real_name = observer.name observer.original_name = observer.name //Original name is only used in ghost chat! It is not to be edited by anything! - preferences.copy_to_observer(observer) - del(src) return 1 diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index c657ec114c0..01f9160cec1 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -527,3 +527,19 @@ var/global/list/uneatable = list( target << "\red NAR-SIE HUNGERS FOR YOUR SOUL" else target << "\red NAR-SIE HAS CHOSEN YOU TO LEAD HIM TO HIS NEXT MEAL" + + + +/obj/machinery/singularity/narsie/wizard + grav_pull = 0 + eat() + set background = 1 + if(defer_powernet_rebuild != 2) + defer_powernet_rebuild = 1 + for(var/atom/movable/X in orange(consume_range,src)) + consume(X) + for(var/turf/X in orange(consume_range,src)) + consume(X) + if(defer_powernet_rebuild != 2) + defer_powernet_rebuild = 0 + return \ No newline at end of file From ee5149accc6e35d3377d2efb5de0e21a40eeb241 Mon Sep 17 00:00:00 2001 From: Ren Erthilo Date: Sun, 22 Apr 2012 02:54:46 +0100 Subject: [PATCH 15/20] New verb: rightandwrong When used, it will arm every human mob that is not already a special role (and with a client assigned) with a random gun from the following list: -Taser -Egun -Laser -Revolver -C20r -Decloner -Desert Eagle TG: -Gyrojet Pistol -Pulse Rifle -Silenced Pistol -Laser Cannon -Combat Shotgun -Mini-Uzi -Mini-Ebow It will then inform the player that "You are the survivor! Your own safety matters above all else, trust no one and kill anyone who gets in your way. However, armed as you are, now would be the perfect time to settle that score or grab that pair of yellow gloves you've been eyeing..." And make them a traitor/give them the objective to survive till the round ends. After use, rightandwrong will remove itself from the users list of verbs. rightandwrong addeded to the Spellbook under "Summon Guns" The verb will appear in the spell tab. Updated changelog Revision: r3071 Author: kortgstation --- baystation12.dme | 1 + code/game/gamemodes/wizard/rightandwrong.dm | 54 +++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 code/game/gamemodes/wizard/rightandwrong.dm diff --git a/baystation12.dme b/baystation12.dme index d37370c92b3..e52b3b38d5a 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -439,6 +439,7 @@ #include "code\game\gamemodes\sandbox\h_sandbox.dm" #include "code\game\gamemodes\sandbox\sandbox.dm" #include "code\game\gamemodes\traitor\traitor.dm" +#include "code\game\gamemodes\wizard\rightandwrong.dm" #include "code\game\gamemodes\wizard\soulstone.dm" #include "code\game\gamemodes\wizard\spellbook.dm" #include "code\game\gamemodes\wizard\spells.dm" diff --git a/code/game/gamemodes/wizard/rightandwrong.dm b/code/game/gamemodes/wizard/rightandwrong.dm new file mode 100644 index 00000000000..5bd77a7fdeb --- /dev/null +++ b/code/game/gamemodes/wizard/rightandwrong.dm @@ -0,0 +1,54 @@ + + +/client/proc/rightandwrong() + set category = "Spells" + set desc = "Summon Guns" + set name = "Wizards: No sense of right and wrong!" + + for(var/mob/living/carbon/human/H in world) + if(H.stat == 2 || !(H.client)) continue + if(is_special_character(H)) continue + if(prob(25)) + ticker.mode.traitors += H.mind + H.mind.special_role = "traitor" + var/datum/objective/survive/survive = new + survive.owner = H.mind + H.mind.objectives += survive + H << "You are the survivor! Your own safety matters above all else, trust no one and kill anyone who gets in your way. However, armed as you are, now would be the perfect time to settle that score or grab that pair of yellow gloves you've been eyeing..." + var/obj_count = 1 + for(var/datum/objective/OBJ in H.mind.objectives) + H << "Objective #[obj_count]: [OBJ.explanation_text]" + obj_count++ + var/randomize = pick("taser","egun","laser","revolver","smg","decloner","deagle","gyrojet","pulse","silenced","cannon","shotgun","freeze","uzi","crossbow") + switch (randomize) + if("taser") + new /obj/item/weapon/gun/energy/taser(get_turf(H)) + if("egun") + new /obj/item/weapon/gun/energy(get_turf(H)) + if("laser") + new /obj/item/weapon/gun/energy/laser(get_turf(H)) + if("revolver") + new /obj/item/weapon/gun/projectile(get_turf(H)) + if("smg") + new /obj/item/weapon/gun/projectile/automatic/c20r(get_turf(H)) + if("decloner") + new /obj/item/weapon/gun/energy/decloner(get_turf(H)) + if("deagle") + new /obj/item/weapon/gun/projectile/deagle/camo(get_turf(H)) + if("gyrojet") + new /obj/item/weapon/gun/projectile/gyropistol(get_turf(H)) + if("pulse") + new /obj/item/weapon/gun/energy/pulse_rifle(get_turf(H)) + if("silenced") + new /obj/item/weapon/gun/projectile/silenced(get_turf(H)) + if("cannon") + new /obj/item/weapon/gun/energy/lasercannon(get_turf(H)) + if("shotgun") + new /obj/item/weapon/gun/projectile/shotgun/combat(get_turf(H)) + if("freeze") + new /obj/item/weapon/gun/energy/temperature(get_turf(H)) + if("uzi") + new /obj/item/weapon/gun/projectile/automatic/mini_uzi(get_turf(H)) + if("crossbow") + new /obj/item/weapon/gun/energy/crossbow(get_turf(H)) + usr.verbs -= /client/proc/rightandwrong From 3a8136e80730610587936184ff874e2bf381c988 Mon Sep 17 00:00:00 2001 From: Ren Erthilo Date: Sun, 22 Apr 2012 02:58:42 +0100 Subject: [PATCH 16/20] TG: Added the caution code, sprited by magicbones, not present anywhere on the map http://nanotrasen.com/phpBB3/viewtopic.php?f=10&t=4548&start=50#p37266 Added a power switch (/obj/structure/powerswitch), which is used to split or connect two cables. The way it works is simple. It connects the powernets by adding cable on the floor it's on and removing it when it's turned off. In-file description: //This is a power switch. When turned on it looks at the cables around the tile that it's on and notes which cables are trying to connect to it. //After it knows this it creates the number of cables from the center to each of the cables attempting to conenct. These cables cannot be removed //with wirecutters. When the switch is turned off it removes all the cables on the tile it's on. //The switch uses a 5s delay to prevent powernet change spamming. Screenshot: http://www.kamletos.si/power%20switch.PNG Revision: r3072 Author: baloh.matevz --- code/modules/power/cable.dm | 4 ++ code/modules/power/switch.dm | 84 +++++++++++++++++++++++++++++++++++ icons/obj/janitor.dmi | Bin 2728 -> 826 bytes 3 files changed, 88 insertions(+) create mode 100644 code/modules/power/switch.dm diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index e5365fe3408..bc5e765cab7 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -126,6 +126,10 @@ if(istype(W, /obj/item/weapon/wirecutters)) + if(power_switch) + user << "\red This piece of cable is tied to a power switch. Flip the switch to remove it." + return + if (shock(user, 50)) return diff --git a/code/modules/power/switch.dm b/code/modules/power/switch.dm new file mode 100644 index 00000000000..9b94838dbe8 --- /dev/null +++ b/code/modules/power/switch.dm @@ -0,0 +1,84 @@ +//This is a power switch. When turned on it looks at the cables around the tile that it's on and notes which cables are trying to connect to it. +//After it knows this it creates the number of cables from the center to each of the cables attempting to conenct. These cables cannot be removed +//with wirecutters. When the switch is turned off it removes all the cables on the tile it's on. +//The switch uses a 5s delay to prevent powernet change spamming. + +/obj/structure/powerswitch + name = "power switch" + desc = "A switch that controls power." + icon = 'power.dmi' + icon_state = "switch-dbl-up" + var/icon_state_on = "switch-dbl-down" + var/icon_state_off = "switch-dbl-up" + flags = FPRINT + density = 0 + anchored = 1 + var/on = 0 //up is off, down is on + var/busy = 0 //set to 1 when you start pulling + + simple + icon_state = "switch-up" + icon_state_on = "switch-down" + icon_state_off = "switch-up" + + + examine() + ..() + if(on) + usr << "The switch is in the on position" + else + usr << "The switch is in the off position" + + attack_ai(mob/user) + user << "\red You're an AI. This is a manual switch. It's not going to work." + return + + attack_hand(mob/user) + + if(busy) + user << "\red This switch is already being toggled." + return + + ..() + + busy = 1 + for(var/mob/O in viewers(user)) + O.show_message(text("\red [user] started pulling the [src]."), 1) + + if(do_after(user, 50)) + set_state(!on) + for(var/mob/O in viewers(user)) + O.show_message(text("\red [user] flipped the [src] into the [on ? "on": "off"] position."), 1) + busy = 0 + + proc/set_state(var/state) + on = state + if(on) + icon_state = icon_state_on + var/list/connection_dirs = list() + for(var/direction in list(1,2,4,8,5,6,9,10)) + for(var/obj/structure/cable/C in get_step(src,direction)) + if(C.d1 == turn(direction, 180) || C.d2 == turn(direction, 180)) + connection_dirs += direction + break + + for(var/direction in connection_dirs) + var/obj/structure/cable/C = new/obj/structure/cable(src.loc) + C.d1 = 0 + C.d2 = direction + C.icon_state = "[C.d1]-[C.d2]" + C.power_switch = src + + var/datum/powernet/PN = new() + PN.number = powernets.len + 1 + powernets += PN + C.netnum = PN.number + PN.cables += C + + C.mergeConnectedNetworks(C.d2) + C.mergeConnectedNetworksOnTurf() + + else + icon_state = icon_state_off + for(var/obj/structure/cable/C in src.loc) + del(C) \ No newline at end of file diff --git a/icons/obj/janitor.dmi b/icons/obj/janitor.dmi index c05f6f7b73e58c113f11438a6cb29f77a8c0eea2..ef050d19e50fc8eb72f7762fb12a1f415ad727dd 100644 GIT binary patch delta 814 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 Date: Sun, 22 Apr 2012 03:00:41 +0100 Subject: [PATCH 17/20] TG: - Here's a thingamabob for all you sissies who cry "What a terrible new changelog markup, oh my". Launch in browser of choice (tested in FF, Opera, Chrome, IE8+), fill the form, click "Get HTML", copy&paste into changelog. Revision: r3074 Author: panurgomatic --- html/add-to-changelog.html | 77 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 html/add-to-changelog.html diff --git a/html/add-to-changelog.html b/html/add-to-changelog.html new file mode 100644 index 00000000000..feefa633dc5 --- /dev/null +++ b/html/add-to-changelog.html @@ -0,0 +1,77 @@ + + + + + New commit + + + + + + +

+ + + + +
Date:
Author:
Add list item + + +
+ + + + + \ No newline at end of file From 867f2d77af2009c72fd9e2642ee80d70a78118be Mon Sep 17 00:00:00 2001 From: Ren Erthilo Date: Sun, 22 Apr 2012 03:03:05 +0100 Subject: [PATCH 18/20] TG: - Added water balloons (sprites courtesy of Sieve,) these can be filled with most reagents and burst on throwing if filled, applying the reagents to whatever is hit (along with everything else on that tile.) These are winnable from the arcade, for now. I'll probably think of a better way to implement them. Revision: r3075 Author: quartz235 --- code/defines/obj/toy.dm | 62 ++++++++++++++++++++++++- code/game/machinery/computer/arcade.dm | 2 + icons/obj/toy.dmi | Bin 2324 -> 2327 bytes 3 files changed, 63 insertions(+), 1 deletion(-) diff --git a/code/defines/obj/toy.dm b/code/defines/obj/toy.dm index 9011ac00c0d..00ac66c93cc 100644 --- a/code/defines/obj/toy.dm +++ b/code/defines/obj/toy.dm @@ -387,4 +387,64 @@ set src in usr usr << text("\icon[] [] units of water left!", src, src.reagents.total_volume) ..() - return \ No newline at end of file + return + +/obj/item/toy/balloon + name = "water balloon" + desc = "A translucent balloon. There's nothing in it." + icon = 'toy.dmi' + icon_state = "waterballoon-e" + item_state = "balloon-empty" + +/obj/item/toy/balloon/New() + var/datum/reagents/R = new/datum/reagents(10) + reagents = R + R.my_atom = src + +/obj/item/toy/balloon/attack(mob/living/carbon/human/M as mob, mob/user as mob) + return + +/obj/item/toy/balloon/afterattack(atom/A as mob|obj, mob/user as mob) + if (istype(A, /obj/structure/reagent_dispensers/watertank) && get_dist(src,A) <= 1) + A.reagents.trans_to(src, 10) + user << "\blue You fill the balloon with the contents of [A]." + src.desc = "A translucent balloon with some form of liquid sloshing around in it." + src.update_icon() + return + +/obj/item/toy/balloon/attackby(obj/O as obj, mob/user as mob) + if(istype(O, /obj/item/weapon/reagent_containers/glass)) + if(O.reagents) + if(O.reagents.total_volume < 1) + user << "The [O] is empty." + else if(O.reagents.total_volume >= 1) + if(O.reagents.has_reagent("pacid", 1)) + user << "The acid chews through the balloon!" + O.reagents.reaction(user) + del(src) + else + src.desc = "A translucent balloon with some form of liquid sloshing around in it." + user << "\blue You fill the balloon with the contents of [O]." + O.reagents.trans_to(src, 10) + src.update_icon() + return + +/obj/item/toy/balloon/throw_impact(atom/hit_atom) + if(src.reagents.total_volume >= 1) + src.visible_message("\red The [src] bursts!","You hear a pop and a splash.") + src.reagents.reaction(get_turf(hit_atom)) + for(var/atom/A in get_turf(hit_atom)) + src.reagents.reaction(A) + src.icon_state = "burst" + spawn(5) + if(src) + del(src) + return + +/obj/item/toy/balloon/update_icon() + if(src.reagents.total_volume >= 1) + icon_state = "waterballoon" + item_state = "balloon" + else + icon_state = "waterballoon-e" + item_state = "balloon-empty" \ No newline at end of file diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index c6c2eac9296..083c12c5378 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -146,6 +146,8 @@ new /obj/item/toy/crayonbox(src.loc) if(9) new /obj/item/toy/spinningtoy(src.loc) + // if(10) //Commented out on Urist-chan's orders~ + // new /obj/item/toy/balloon(src.loc) //Until it gets a better sprite~ else var/atom/movable/Prize = pick(contents) Prize.loc = src.loc diff --git a/icons/obj/toy.dmi b/icons/obj/toy.dmi index 907789f99ca96b312e1917fa7f6dee80ec6814fb..8650435b56e1329fdc4016ed479c9b51acced2b9 100644 GIT binary patch delta 26 icmbOtG+k(dG7}@yMpb4;_5%kFM9r(Xxmkzt1v>z4FbP2b delta 23 fcmbO(G(~8FG84o9jjGIyECClQoHy$;zF-FcStbXN From 4efe517ce132404b586afaad9b56502638098187 Mon Sep 17 00:00:00 2001 From: Ren Erthilo Date: Sun, 22 Apr 2012 04:02:07 +0100 Subject: [PATCH 19/20] TG: You will now face the direction of the item/turf/mob/anything you're interacting with (or trying to interact with) (applied whenever you click, shift-click or alt-click) Added this to the changelog. Revision: r3077 Author: baloh.matevz Also some merge fixes. --- baystation12.dme | 1 + code/game/atom_procs.dm | 118 +++++++++++++++++++++++++-- code/game/machinery/doors/airlock.dm | 8 +- 3 files changed, 117 insertions(+), 10 deletions(-) diff --git a/baystation12.dme b/baystation12.dme index e52b3b38d5a..90daa241aea 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -1020,6 +1020,7 @@ #include "code\modules\power\sd_DynamicAreaLighting.dm" #include "code\modules\power\smes.dm" #include "code\modules\power\solar.dm" +#include "code\modules\power\switch.dm" #include "code\modules\power\terminal.dm" #include "code\modules\power\tracker.dm" #include "code\modules\power\turbine.dm" diff --git a/code/game/atom_procs.dm b/code/game/atom_procs.dm index 66a3b259156..3519373e64d 100644 --- a/code/game/atom_procs.dm +++ b/code/game/atom_procs.dm @@ -336,6 +336,7 @@ T.icon = I else T.icon = initial(icon) + if(blood_DNA && !blood_DNA.len) del(blood_DNA) if(src.fingerprints && src.fingerprints.len) @@ -376,16 +377,10 @@ //world << "atom.Click() on [src] by [usr] : src.type is [src.type]" if(!istype(src,/obj/item/weapon/gun)) usr.last_target_click = world.time - var/list/pram = params2list(params) - if((pram["alt"] != null && pram["ctrl"] != null && pram["left"] != null) && istype(src,/atom/movable)) - src:pull() - return - if(pram["ctrl"] != null && pram["left"] != null) - src.examine() - return if(usr.client.buildmode) build_click(usr, usr.client.buildmode, location, control, params, src) return + if(using_new_click_proc) //TODO ERRORAGE (see message below) return DblClickNew() return DblClick(location, control, params) @@ -694,6 +689,33 @@ var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblCl // world << "atom.DblClick() on [src] by [usr] : src.type is [src.type]" usr:lastDblClick = world.time + // ------- DIR CHANGING WHEN CLICKING (changes facting direction) ------ + + if( usr && iscarbon(usr) && !usr.buckled ) + if( src.x && src.y && usr.x && usr.y ) + var/dx = src.x - usr.x + var/dy = src.y - usr.y + + if( dy > 0 && abs(dx) < dy ) //North + usr.dir = 1 + if( dy < 0 && abs(dx) < abs(dy) ) //South + usr.dir = 2 + if( dx > 0 && abs(dy) <= dx ) //East + usr.dir = 4 + if( dx < 0 && abs(dy) <= abs(dx) ) //West + usr.dir = 8 + if( dx == 0 && dy == 0 ) + if(src.pixel_y > 16) + usr.dir = 1 + if(src.pixel_y < -16) + usr.dir = 2 + if(src.pixel_x > 16) + usr.dir = 4 + if(src.pixel_x < -16) + usr.dir = 8 + + + // ------- AI ------- if (istype(usr, /mob/living/silicon/ai)) @@ -707,6 +729,43 @@ var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblCl if (bot.lockcharge) return ..() + + + + + + // ------- SHIFT-CLICK ------- + + var/parameters = params2list(params) + + if(parameters["shift"]){ + if(!isAI(usr)) + ShiftClick(usr) + else + AIShiftClick(usr) + return + } + + // ------- ALT-CLICK ------- + + if(parameters["alt"]){ + if(!isAI(usr)) + AltClick(usr) + else + AIAltClick(usr) + return + } + + // ------- CTRL-CLICK ------- + + if(parameters["ctrl"]){ + if(!isAI(usr)) + CtrlClick(usr) + else + AICtrlClick(usr) + return + } + // ------- THROW ------- if(usr.in_throw_mode) return usr:throw_item(src) @@ -965,6 +1024,51 @@ var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblCl del D return 1 +/atom/proc/CtrlClick(var/mob/M as mob) + examine() + return + +/atom/proc/AltClick() + if(hascall(src,"pull")) + src:pull() + return + +/atom/proc/ShiftClick() + if(hascall(src,"pull")) + src:pull() + return + +/atom/proc/AIShiftClick() // Opens and closes doors! + if(istype(src , /obj/machinery/door/airlock)) + if(src:density) + var/nhref = "src=\ref[src];aiEnable=7" + src.Topic(nhref, params2list(nhref), src, 1) + else + var/nhref = "src=\ref[src];aiDisable=7" + src.Topic(nhref, params2list(nhref), src, 1) + + return + +/atom/proc/AIAltClick() // Eletrifies doors. + if(istype(src , /obj/machinery/door/airlock)) + if(!src:secondsElectrified) + var/nhref = "src=\ref[src];aiEnable=6" + src.Topic(nhref, params2list(nhref), src, 1) + else + var/nhref = "src=\ref[src];aiDisable=5" + src.Topic(nhref, params2list(nhref), src, 1) + return + +/atom/proc/AICtrlClick() // Bolts doors. + if(istype(src , /obj/machinery/door/airlock)) + if(src:locked) + var/nhref = "src=\ref[src];aiEnable=4" + src.Topic(nhref, params2list(nhref), src, 1) + else + var/nhref = "src=\ref[src];aiDisable=4" + src.Topic(nhref, params2list(nhref), src, 1) + return + /*/atom/proc/get_global_map_pos() if(!islist(global_map) || isemptylist(global_map)) return diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index b7a8cf2fdcf..2143fcf71e3 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -1068,8 +1068,9 @@ About the new airlock wires panel: -/obj/machinery/door/airlock/Topic(href, href_list) - ..() +/obj/machinery/door/airlock/Topic(href, href_list, var/nowindow = 0) + if(!nowindow) + ..() if (usr.stat || usr.restrained() ) return if (href_list["close"]) @@ -1277,7 +1278,8 @@ About the new airlock wires panel: src.holdopen = 1 src.update_icon() - src.updateUsrDialog() + if(!nowindow) + src.updateUsrDialog() if((istype(usr.equipped(), /obj/item/device/hacktool))) return attack_ai(usr, usr.equipped()) else if(issilicon(usr)) From f6b22b9d2cf34f8cb846d92ec7bd204dbe4a5d16 Mon Sep 17 00:00:00 2001 From: Ren Erthilo Date: Sun, 22 Apr 2012 05:05:54 +0100 Subject: [PATCH 20/20] Adds null rod properly. Removes effects from bible. --- code/defines/obj/weapon.dm | 42 +++++++++++++++++++++++++++++- code/game/magic/cultist/ritual.dm | 7 +++-- code/game/objects/storage/bible.dm | 11 ++++---- maps/tgstation.2.0.8.dmm | 2 +- 4 files changed, 51 insertions(+), 11 deletions(-) diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index 0f3e5536624..8c06feee04a 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -35,12 +35,52 @@ icon_state = "nullrod" item_state = "nullrod" flags = FPRINT | ONBELT | TABLEPASS - force = 15 + force = 10 throw_speed = 1 throw_range = 4 throwforce = 10 w_class = 1 +/obj/item/weapon/nullrod/attack(mob/M as mob, mob/living/user as mob) + + M.attack_log += text("\[[time_stamp()]\] Has been attacked with [src.name] by [user.name] ([user.ckey])") + user.attack_log += text("\[[time_stamp()]\] Used the [src.name] to attack [M.name] ([M.ckey])") + + log_admin("ATTACK: [user] ([user.ckey]) attacked [M] ([M.ckey]) with [src].") + message_admins("ATTACK: [user] ([user.ckey]) attacked [M] ([M.ckey]) with [src].") + log_attack("[user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") + + if (!(istype(user, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey") + user << "\red You don't have the dexterity to do this!" + return + + if ((user.mutations & CLUMSY) && prob(50)) + user << "\red The rod slips out of your hand and hits your head." + user.take_organ_damage(10) + user.Paralyse(20) + return + + if (M.stat !=2) + if((M.mind in ticker.mode.cult) && prob(33)) + M << "\red The power of [src] clears your mind of the cult's influence!" + user << "\red You wave [src] over [M]'s head and see their eyes become clear, their mind returning to normal." + ticker.mode.remove_cultist(M.mind) + for(var/mob/O in viewers(M, null)) + O.show_message(text("\red [] waves [] over []'s head.", user, src, M), 1) + else if(prob(10)) + user << "\red The rod slips in your hand." + ..() + else + user << "\red The rod appears to do nothing." + for(var/mob/O in viewers(M, null)) + O.show_message(text("\red [] waves [] over []'s head.", user, src, M), 1) + return + +/obj/item/weapon/nullrod/afterattack(atom/A, mob/user as mob) + if (istype(A, /turf/simulated/floor)) + user << "\blue You hit the floor with the [src]." + call(/obj/effect/rune/proc/revealrunes)(src) + /*/obj/item/weapon/sord name = "\improper SORD" desc = "This thing is so unspeakably shitty you are having a hard time even holding it." diff --git a/code/game/magic/cultist/ritual.dm b/code/game/magic/cultist/ritual.dm index 24e66288dcd..c8924d62c7d 100644 --- a/code/game/magic/cultist/ritual.dm +++ b/code/game/magic/cultist/ritual.dm @@ -126,9 +126,8 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology", user << "You retrace your steps, carefully undoing the lines of the rune." del(src) return - else if(istype(I, /obj/item/weapon/storage/bible) && usr.mind && (usr.mind.assigned_role == "Chaplain")) - var/obj/item/weapon/storage/bible/bible = I - user << "\blue You banish the vile magic with the blessing of [bible.deity_name]!" + else if(istype(I, /obj/item/weapon/nullrod)) + user << "\blue You disrupt the vile magic with the deadening field of the null rod!" del(src) return return @@ -502,7 +501,7 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology", if(prob(C*5-105-(runedec-ticker.mode.cult.len)*5)) //including the useless rune at the secret room, shouldn't count against the limit - Urist usr.emote("scream") user << "\red A tear momentarily appears in reality. Before it closes, you catch a glimpse of that which lies beyond. That proves to be too much for your mind." - usr.gib(1) + usr.gib() return if("No") return diff --git a/code/game/objects/storage/bible.dm b/code/game/objects/storage/bible.dm index 38a22b00774..63a6edb8bd7 100644 --- a/code/game/objects/storage/bible.dm +++ b/code/game/objects/storage/bible.dm @@ -16,6 +16,7 @@ new /obj/item/weapon/reagent_containers/pill/antitox/tajaran(src) new /obj/item/clothing/suit/monk(src) +/* // All cult functionality moved to Null Rod /obj/item/weapon/storage/bible/proc/bless(mob/living/carbon/M as mob) if(ishuman(M)) var/mob/living/carbon/human/H = M @@ -83,12 +84,12 @@ O.show_message(text("\red [] smacks []'s lifeless corpse with [].", user, M, src), 1) playsound(src.loc, "punch", 25, 1, -1) return - +*/ /obj/item/weapon/storage/bible/afterattack(atom/A, mob/user as mob) - if (istype(A, /turf/simulated/floor)) - user << "\blue You hit the floor with the bible." - if(user.mind && (user.mind.assigned_role == "Chaplain")) - call(/obj/effect/rune/proc/revealrunes)(src) +// if (istype(A, /turf/simulated/floor)) +// user << "\blue You hit the floor with the bible." +// if(user.mind && (user.mind.assigned_role == "Chaplain")) +// call(/obj/effect/rune/proc/revealrunes)(src) if(user.mind && (user.mind.assigned_role == "Chaplain")) if(A.reagents && A.reagents.has_reagent("water")) //blesses all the water in the holder user << "\blue You bless [A]." diff --git a/maps/tgstation.2.0.8.dmm b/maps/tgstation.2.0.8.dmm index c63cee784f8..064e2442c39 100755 --- a/maps/tgstation.2.0.8.dmm +++ b/maps/tgstation.2.0.8.dmm @@ -1956,7 +1956,7 @@ "aLF" = (/obj/machinery/atmospherics/pipe/simple{color = "blue"; icon_state = "intact-b-f"; level = 1; name = "pipe"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall,/area/chapel/office) "aLG" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_Toxins = 1},/obj/structure/table/woodentable,/obj/structure/disposalpipe/segment,/obj/machinery/light/lamp/green{pixel_x = 1; pixel_y = 5},/obj/effect/deskclutter,/turf/simulated/floor{dir = 8; icon_state = "carpetside"},/area/chapel/office) "aLH" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/briefcase,/turf/simulated/floor{dir = 2; icon_state = "carpet"},/area/chapel/office) -"aLI" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/obj/item/weapon/reagent_containers/food/drinks/bottle/holywater,/turf/simulated/floor{dir = 2; icon_state = "carpet"},/area/chapel/office) +"aLI" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/obj/item/weapon/reagent_containers/food/drinks/bottle/holywater,/obj/item/weapon/nullrod,/turf/simulated/floor{dir = 2; icon_state = "carpet"},/area/chapel/office) "aLJ" = (/turf/simulated/floor{dir = 4; icon_state = "carpetside"},/area/chapel/office) "aLK" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "escape"},/area/hallway/secondary/exit) "aLL" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor,/area/hallway/secondary/exit)