@@ -439,9 +439,11 @@
|
||||
#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"
|
||||
#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"
|
||||
@@ -1018,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"
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
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
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
|
||||
health = 250
|
||||
icon_state = "queen_s"
|
||||
|
||||
nopush = 1
|
||||
/mob/living/carbon/alien/humanoid/rpbody
|
||||
update_icon = 0
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -387,4 +387,64 @@
|
||||
set src in usr
|
||||
usr << text("\icon[] [] units of water left!", src, src.reagents.total_volume)
|
||||
..()
|
||||
return
|
||||
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"
|
||||
@@ -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()]\] <font color='orange'>Has been attacked with [src.name] by [user.name] ([user.ckey])</font>")
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to attack [M.name] ([M.ckey])</font>")
|
||||
|
||||
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("<font color='red'>[user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>")
|
||||
|
||||
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."
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 << "<B>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...</B>"
|
||||
var/obj_count = 1
|
||||
for(var/datum/objective/OBJ in H.mind.objectives)
|
||||
H << "<B>Objective #[obj_count]</B>: [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
|
||||
@@ -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 <b>Capture successful!</b>: \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 <b>Capture successful!</b>: \black [T.name]'s has been recaptured and stored within the soul stone."
|
||||
return
|
||||
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 << "<B>You are playing a Juggernaut. Though slow, you can withstand extreme punishment, and rip apart enemies and walls alike.</B>"
|
||||
Z << "<B>You are still bound to serve your creator, follow their orders and help them complete their goals at all costs.</B>"
|
||||
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 << "<B>You are playing a Wraith. Though relatively fragile, you are fast, deadly, and even able to phase through walls.</B>"
|
||||
Z << "<B>You are still bound to serve your creator, follow their orders and help them complete their goals at all costs.</B>"
|
||||
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 << "<B>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</B>"
|
||||
Z << "<B>You are still bound to serve your creator, follow their orders and help them complete their goals at all costs.</B>"
|
||||
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 <b>Creation failed!</b>: \black The soul stone is empty! Go kill someone!"
|
||||
return
|
||||
|
||||
@@ -25,16 +25,21 @@
|
||||
dat += "<A href='byond://?src=\ref[src];spell_choice=11'>Mutate</A> (60)<BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];spell_choice=12'>Ethereal Jaunt</A> (60)<BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];spell_choice=13'>Knock</A> (10)<BR>"
|
||||
// if(op)
|
||||
// dat += "<A href='byond://?src=\ref[src];spell_choice=14'>Summon Guns</A> (One time use, global spell)<BR>"
|
||||
dat += "<HR>"
|
||||
dat += "<B>Artefacts:</B><BR>"
|
||||
dat += "Powerful items imbued with eldritch magics. Summoning one will count towards your maximum number of spells.<BR>"
|
||||
dat += "It is recommended that only experienced wizards attempt to wield such artefacts.<BR>"
|
||||
dat += "<HR>"
|
||||
dat += "<A href='byond://?src=\ref[src];spell_choice=14'>Staff of Change</A><BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];spell_choice=15'>Staff of Change</A><BR>"
|
||||
dat += "<HR>"
|
||||
dat += "<A href='byond://?src=\ref[src];spell_choice=15'>Six Soul Stone Shards</A><BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];spell_choice=16'>Six Soul Stone Shards and the spell Artificer</A><BR>"
|
||||
dat += "<HR>"
|
||||
dat += "<A href='byond://?src=\ref[src];spell_choice=16'>Re-memorize Spells</A><BR>"
|
||||
// if(op)
|
||||
// dat += "<A href='byond://?src=\ref[src];spell_choice=17'>Veil Render</A><BR>"
|
||||
dat += "<HR>"
|
||||
dat += "<A href='byond://?src=\ref[src];spell_choice=18'>Re-memorize Spells</A><BR>"
|
||||
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
|
||||
|
||||
@@ -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 <B>[src] hums with power as [usr] deals a blow to reality itself!</B>")
|
||||
else
|
||||
user << "\red The unearthly energies that powered the blade are now dormant"
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
@@ -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
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -300,6 +300,7 @@
|
||||
src.operating = 1
|
||||
|
||||
animate("opening")
|
||||
src.sd_SetOpacity(0)
|
||||
sleep(10)
|
||||
src.layer = 2.7
|
||||
src.density = 0
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 <B>[] invokes a talisman at []</B>", 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 <B>[] invokes a talisman at [], but they are unaffected!</B>", usr, T), 1)
|
||||
else
|
||||
for(var/mob/O in viewers(T, null))
|
||||
O.show_message(text("\red <B>[] invokes a talisman at []</B>", 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
|
||||
|
||||
|
||||
@@ -73,6 +73,7 @@
|
||||
dat += "<A href='?src=\ref[src];rune=runestun'>Fuu ma'jin</A> - Allows you to stun a person by attacking them with the talisman.<BR>"
|
||||
dat += "<A href='?src=\ref[src];rune=armor'>Sa tatha najin</A> - Allows you to summon armoured robes and an unholy blade<BR>"
|
||||
dat += "<A href='?src=\ref[src];rune=soulstone'>Kal om neth</A> - Summons a soul stone<BR>"
|
||||
dat += "<A href='?src=\ref[src];rune=construct'>Da A'ig Osk</A> - Summons a construct shell for use with captured souls. It is too large to carry on your person.<BR>"
|
||||
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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
return
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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 <B>[] smacks []'s lifeless corpse with [].</B>", 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]."
|
||||
|
||||
@@ -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))
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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 <B>[src] fails to push [tmob]'s fat ass out of the way.</B>"
|
||||
/*
|
||||
if(prob(70))
|
||||
src << "\red <B>You fail to push [tmob]'s fat ass out of the way.</B>"
|
||||
now_pushing = 0
|
||||
return*/
|
||||
return
|
||||
*/
|
||||
if(tmob.nopush)
|
||||
now_pushing = 0
|
||||
return
|
||||
|
||||
@@ -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 <B>[src] fails to push [tmob]'s fat ass out of the way.</B>"
|
||||
usr << "\red <B>You fail to push [tmob]'s fat ass out of the way.</B>"
|
||||
now_pushing = 0
|
||||
return*/
|
||||
return
|
||||
*/
|
||||
if(tmob.nopush)
|
||||
now_pushing = 0
|
||||
return
|
||||
|
||||
tmob.LAssailant = src
|
||||
now_pushing = 0
|
||||
|
||||
@@ -106,6 +106,7 @@
|
||||
if (sprite == "Non-Humanoid")
|
||||
src.icon_state = "surgeon"
|
||||
modtype = "Med"
|
||||
nopush = 1
|
||||
channels = list("Medical" = 1)
|
||||
|
||||
if("Security")
|
||||
@@ -262,16 +263,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 <B>[src] fails to push [tmob]'s fat ass out of the way.</B>"
|
||||
usr << "\red <B>You fail to push [tmob]'s fat ass out of the way.</B>"
|
||||
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))
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
max_co2 = 0
|
||||
max_tox = 0
|
||||
speed = -1
|
||||
stop_automated_movement = 1
|
||||
|
||||
|
||||
Life()
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -527,3 +527,19 @@ var/global/list/uneatable = list(
|
||||
target << "\red <b>NAR-SIE HUNGERS FOR YOUR SOUL</b>"
|
||||
else
|
||||
target << "\red <b>NAR-SIE HAS CHOSEN YOU TO LEAD HIM TO HIS NEXT MEAL</b>"
|
||||
|
||||
|
||||
|
||||
/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
|
||||
@@ -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)
|
||||
@@ -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)"
|
||||
|
||||
@@ -0,0 +1,77 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<title>New commit</title>
|
||||
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="changelog.css">
|
||||
<style>
|
||||
body {margin:0;padding:0 10px;}
|
||||
#addli {cursor:pointer;}
|
||||
span {font-weight:bold;}
|
||||
span.icon {width:16px;height:16px;display:inline-block;float:right;}
|
||||
input.li {width:100%;}
|
||||
#table {width:99%;}
|
||||
#result {width:100%;}
|
||||
</style>
|
||||
<script type="text/javascript">
|
||||
var i=1;
|
||||
function createli(event){
|
||||
event.preventDefault();
|
||||
var liclass = $('#litype').val();
|
||||
$('#table').append($('<tr><td><span class="icon '+liclass+'"></span><span>'+i+'.</span></td><td><input name="'+liclass+'" type="text" value="" class="li"></td></tr>'));
|
||||
i++;
|
||||
}
|
||||
function htmlEscape(str) {
|
||||
return String(str)
|
||||
.replace(/&/g, '&')
|
||||
.replace(/"/g, '"')
|
||||
.replace(/'/g, ''')
|
||||
.replace(/</g, '<')
|
||||
.replace(/>/g, '>');
|
||||
}
|
||||
$(document).ready(function(){
|
||||
$('#addli').click(createli);
|
||||
$('#commit').submit(function(event){
|
||||
event.preventDefault();
|
||||
var result = $('#result');
|
||||
var text = '<div class="commit sansserif">\n';
|
||||
text += '\t<h2 class="date">'+$(this.date).val()+'</h2>\n';
|
||||
text += '\t<h3 class="author">'+$(this.author).val()+' updated:</h3>\n';
|
||||
text += '\t<ul class="changes bgimages16">\n';
|
||||
$('input.li').each(function(){
|
||||
text += '\t\t<li class="'+$(this).attr('name')+'">'+$(this).val()+'</li>\n';
|
||||
});
|
||||
text += '\t</ul>\n';
|
||||
text += '</div>\n';
|
||||
result.val(text);
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<form id="commit" name="commit">
|
||||
<table id="table">
|
||||
<tr><td style="width:100px;"><span>Date:</span></td><td><input type="text" name="date" value="" title="Put date here"></td></tr>
|
||||
<tr><td><span>Author:</span></td><td><input type="text" name="author" value="" title="Put your name here"></td></tr>
|
||||
<tr><td><span>Add list item</span></td><td>
|
||||
<select name="litype" id="litype" title="Select change type and hit +">
|
||||
<option value="rscadd">Added feature</option>
|
||||
<option value="rscdel">Removed feature</option>
|
||||
<option value="bugfix">Bugfix</option>
|
||||
<option value="wip">Work in progress</option>
|
||||
<option value="tweak">Tweak</option>
|
||||
<option value="experiment">Experimental feature</option>
|
||||
<option value="imageadd">Added icon</option>
|
||||
<option value="imagedel">Removed icon</option>
|
||||
<option value="soundadd">Added sound</option>
|
||||
<option value="sounddel">Removed sound</option>
|
||||
</select>
|
||||
<button id="addli">+</button>
|
||||
</td></tr>
|
||||
</table>
|
||||
<input type="submit" value="Get HTML" title="Click here to get result">
|
||||
</form>
|
||||
<textarea id="result" rows="20" cols="50"></textarea>
|
||||
</body>
|
||||
</html>
|
||||
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 826 B |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
@@ -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)
|
||||
|
||||