mirror of
https://github.com/yogstation13/Yogstation.git
synced 2025-02-26 09:04:50 +00:00
Wizards no longer start out as members of the crew. Their basic equipment is also reduced to the bare neccessities.
Wizard spells will be selectable through a time, instead of PDA/other. Currently inserted as the radio uplink. Spells are now contained within a single file. Added new spell, mind transfer. Allows the user to swap bodies with any available (non-braindead) human being. Traitors, changelings, and other similar people are not affected. It is possible to lose spells during the transfer. 1 minute cooldown. Probably still has bugs and/or balance issues. Wizard teleport cooldown increased to 60 seconds. All humanoid aliens (other than queen) may now vent crawl. Hunters gain shorter devour time and a new ability to regurgitate their victims (if they are still alive). git-svn-id: http://tgstation13.googlecode.com/svn/trunk@807 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
@@ -8,6 +8,7 @@ datum/mind
|
||||
var/special_role
|
||||
|
||||
var/list/datum/objective/objectives = list()
|
||||
var/list/datum/objective/special_verbs = list()
|
||||
|
||||
proc/transfer_to(mob/new_character)
|
||||
if(current)
|
||||
|
||||
@@ -1079,8 +1079,8 @@ Total SMES charging rate should not exceed total power generation rate, or an ov
|
||||
|
||||
/obj/item/weapon/teleportation_scroll
|
||||
name = "Teleportation Scroll"
|
||||
icon = 'items.dmi'
|
||||
icon_state = "paper"
|
||||
icon = 'wizard.dmi'
|
||||
icon_state = "scroll"
|
||||
var/uses = 4.0
|
||||
flags = FPRINT | TABLEPASS
|
||||
w_class = 2.0
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
/client/proc/mutate()
|
||||
set category = "Spells"
|
||||
set name = "Mutate"
|
||||
if(!usr.casting()) return
|
||||
usr.verbs -= /client/proc/mutate
|
||||
spawn(400)
|
||||
usr.verbs += /client/proc/mutate
|
||||
|
||||
usr.say("BIRUZ BENNAR")
|
||||
usr.spellvoice()
|
||||
|
||||
usr << text("\blue You feel strong! Your mind expands!")
|
||||
if (!(usr.mutations & 8))
|
||||
usr.mutations |= 8
|
||||
if (!(usr.mutations & 1))
|
||||
usr.mutations |= 1
|
||||
spawn (300)
|
||||
if (usr.mutations & 1) usr.mutations &= ~1
|
||||
if (usr.mutations & 8) usr.mutations &= ~8
|
||||
return
|
||||
@@ -1,81 +0,0 @@
|
||||
/client/proc/jaunt()
|
||||
set category = "Spells"
|
||||
set name = "Ethereal Jaunt"
|
||||
if(!usr.casting()) return
|
||||
usr.verbs -= /client/proc/jaunt
|
||||
spawn(300)
|
||||
usr.verbs += /client/proc/jaunt
|
||||
spell_jaunt(usr)
|
||||
|
||||
/proc/spell_jaunt(var/mob/H, time = 50)
|
||||
if(H.stat) return
|
||||
spawn(0)
|
||||
var/mobloc = get_turf(H.loc)
|
||||
var/obj/dummy/spell_jaunt/holder = new /obj/dummy/spell_jaunt( mobloc )
|
||||
var/atom/movable/overlay/animation = new /atom/movable/overlay( mobloc )
|
||||
animation.name = "water"
|
||||
animation.density = 0
|
||||
animation.anchored = 1
|
||||
animation.icon = 'mob.dmi'
|
||||
animation.icon_state = "liquify"
|
||||
animation.layer = 5
|
||||
animation.master = holder
|
||||
flick("liquify",animation)
|
||||
H.loc = holder
|
||||
H.client.eye = holder
|
||||
var/datum/effects/system/steam_spread/steam = new /datum/effects/system/steam_spread()
|
||||
steam.set_up(10, 0, mobloc)
|
||||
steam.start()
|
||||
sleep(time)
|
||||
mobloc = get_turf(H.loc)
|
||||
animation.loc = mobloc
|
||||
steam.location = mobloc
|
||||
steam.start()
|
||||
H.canmove = 0
|
||||
sleep(20)
|
||||
flick("reappear",animation)
|
||||
sleep(5)
|
||||
H.loc = mobloc
|
||||
H.canmove = 1
|
||||
H.client.eye = H
|
||||
del(animation)
|
||||
del(holder)
|
||||
|
||||
/obj/dummy/spell_jaunt
|
||||
name = "water"
|
||||
icon = 'effects.dmi'
|
||||
icon_state = "nothing"
|
||||
var/canmove = 1
|
||||
density = 0
|
||||
anchored = 1
|
||||
|
||||
/obj/dummy/spell_jaunt/relaymove(var/mob/user, direction)
|
||||
if (!src.canmove) return
|
||||
switch(direction)
|
||||
if(NORTH)
|
||||
src.y++
|
||||
if(SOUTH)
|
||||
src.y--
|
||||
if(EAST)
|
||||
src.x++
|
||||
if(WEST)
|
||||
src.x--
|
||||
if(NORTHEAST)
|
||||
src.y++
|
||||
src.x++
|
||||
if(NORTHWEST)
|
||||
src.y++
|
||||
src.x--
|
||||
if(SOUTHEAST)
|
||||
src.y--
|
||||
src.x++
|
||||
if(SOUTHWEST)
|
||||
src.y--
|
||||
src.x--
|
||||
src.canmove = 0
|
||||
spawn(2) src.canmove = 1
|
||||
|
||||
/obj/dummy/spell_jaunt/ex_act(blah)
|
||||
return
|
||||
/obj/dummy/spell_jaunt/bullet_act(blah,blah)
|
||||
return
|
||||
@@ -1,74 +0,0 @@
|
||||
/mob/proc/teleport()
|
||||
set category = "Spells"
|
||||
set name = "Teleport"
|
||||
set desc="Teleport"
|
||||
if(!usr.casting()) return
|
||||
var/A
|
||||
usr.verbs -= /mob/proc/teleport
|
||||
/*
|
||||
var/list/theareas = new/list()
|
||||
for(var/area/AR in world)
|
||||
if(istype(AR, /area/shuttle) || istype(AR, /area/syndicate_station)) continue
|
||||
if(theareas.Find(AR.name)) continue
|
||||
var/turf/picked = pick(get_area_turfs(AR.type))
|
||||
if (picked.z == src.z)
|
||||
theareas += AR.name
|
||||
theareas[AR.name] = AR
|
||||
*/
|
||||
|
||||
A = input("Area to jump to", "BOOYEA", A) in teleportlocs
|
||||
|
||||
spawn(450)
|
||||
usr.verbs += /mob/proc/teleport
|
||||
|
||||
var/area/thearea = teleportlocs[A]
|
||||
|
||||
usr.say("SCYAR NILA [uppertext(A)]")
|
||||
usr.spellvoice()
|
||||
|
||||
var/datum/effects/system/harmless_smoke_spread/smoke = new /datum/effects/system/harmless_smoke_spread()
|
||||
smoke.set_up(5, 0, usr.loc)
|
||||
smoke.attach(usr)
|
||||
smoke.start()
|
||||
var/list/L = list()
|
||||
for(var/turf/T in get_area_turfs(thearea.type))
|
||||
if(!T.density)
|
||||
var/clear = 1
|
||||
for(var/obj/O in T)
|
||||
if(O.density)
|
||||
clear = 0
|
||||
break
|
||||
if(clear)
|
||||
L+=T
|
||||
|
||||
usr.loc = pick(L)
|
||||
|
||||
smoke.start()
|
||||
|
||||
/mob/proc/teleportscroll()
|
||||
if(usr.stat)
|
||||
usr << "Not when you're incapicated."
|
||||
return
|
||||
var/A
|
||||
|
||||
A = input("Area to jump to", "BOOYEA", A) in teleportlocs
|
||||
var/area/thearea = teleportlocs[A]
|
||||
|
||||
var/datum/effects/system/harmless_smoke_spread/smoke = new /datum/effects/system/harmless_smoke_spread()
|
||||
smoke.set_up(5, 0, usr.loc)
|
||||
smoke.attach(usr)
|
||||
smoke.start()
|
||||
var/list/L = list()
|
||||
for(var/turf/T in get_area_turfs(thearea.type))
|
||||
if(!T.density)
|
||||
var/clear = 1
|
||||
for(var/obj/O in T)
|
||||
if(O.density)
|
||||
clear = 0
|
||||
break
|
||||
if(clear)
|
||||
L+=T
|
||||
|
||||
usr.loc = pick(L)
|
||||
|
||||
smoke.start()
|
||||
@@ -1,22 +0,0 @@
|
||||
/client/proc/blink()
|
||||
set category = "Spells"
|
||||
set name = "Blink"
|
||||
set desc="Blink"
|
||||
if(!usr.casting()) return
|
||||
var/list/turfs = new/list()
|
||||
for(var/turf/T in orange(6))
|
||||
if(istype(T,/turf/space)) continue
|
||||
if(T.density) continue
|
||||
if(T.x>world.maxx-4 || T.x<4) continue //putting them at the edge is dumb
|
||||
if(T.y>world.maxy-4 || T.y<4) continue
|
||||
turfs += T
|
||||
if(!turfs.len) turfs += pick(/turf in orange(6))
|
||||
var/datum/effects/system/harmless_smoke_spread/smoke = new /datum/effects/system/harmless_smoke_spread()
|
||||
smoke.set_up(10, 0, usr.loc)
|
||||
smoke.start()
|
||||
var/turf/picked = pick(turfs)
|
||||
if(!isturf(picked)) return
|
||||
usr.loc = picked
|
||||
usr.verbs -= /client/proc/blink
|
||||
spawn(40)
|
||||
usr.verbs += /client/proc/blink
|
||||
@@ -1,186 +0,0 @@
|
||||
/mob/proc/tech()
|
||||
set category = "Spells"
|
||||
set name = "Disable Technology"
|
||||
if(!usr.casting()) return
|
||||
usr.verbs -= /mob/proc/tech
|
||||
spawn(400)
|
||||
usr.verbs += /mob/proc/tech
|
||||
|
||||
usr.say("NEC CANTIO")
|
||||
usr.spellvoice()
|
||||
|
||||
var/turf/myturf = get_turf(usr)
|
||||
|
||||
var/obj/overlay/pulse = new/obj/overlay ( myturf )
|
||||
pulse.icon = 'effects.dmi'
|
||||
pulse.icon_state = "emppulse"
|
||||
pulse.name = "emp pulse"
|
||||
pulse.anchored = 1
|
||||
spawn(20)
|
||||
del(pulse)
|
||||
|
||||
for(var/obj/item/weapon/W in range(world.view-1, myturf))
|
||||
|
||||
if (istype(W, /obj/item/assembly/m_i_ptank) || istype(W, /obj/item/assembly/r_i_ptank) || istype(W, /obj/item/assembly/t_i_ptank))
|
||||
|
||||
var/fuckthis
|
||||
if(istype(W:part1,/obj/item/weapon/tank/plasma))
|
||||
fuckthis = W:part1
|
||||
fuckthis:ignite()
|
||||
if(istype(W:part2,/obj/item/weapon/tank/plasma))
|
||||
fuckthis = W:part2
|
||||
fuckthis:ignite()
|
||||
if(istype(W:part3,/obj/item/weapon/tank/plasma))
|
||||
fuckthis = W:part3
|
||||
fuckthis:ignite()
|
||||
|
||||
|
||||
for(var/mob/M in viewers(world.view-1, myturf))
|
||||
|
||||
if(!istype(M, /mob/living)) continue
|
||||
if(M == usr) continue
|
||||
|
||||
if (istype(M, /mob/living/silicon))
|
||||
M.fireloss += 25
|
||||
flick("noise", M:flash)
|
||||
M << "\red <B>*BZZZT*</B>"
|
||||
M << "\red Warning: Electromagnetic pulse detected."
|
||||
if(istype(M, /mob/living/silicon/ai))
|
||||
if (prob(30))
|
||||
switch(pick(1,2,3)) //Add Random laws.
|
||||
if(1)
|
||||
M:cancel_camera()
|
||||
if(2)
|
||||
M:lockdown()
|
||||
if(3)
|
||||
M:ai_call_shuttle()
|
||||
continue
|
||||
|
||||
|
||||
M << "\red <B>Your equipment malfunctions.</B>" //Yeah, i realise that this WILL
|
||||
//show if theyre not carrying anything
|
||||
//that is affected. lazy.
|
||||
if (locate(/obj/item/weapon/cloaking_device, M))
|
||||
for(var/obj/item/weapon/cloaking_device/S in M)
|
||||
S.active = 0
|
||||
S.icon_state = "shield0"
|
||||
|
||||
if (locate(/obj/item/weapon/gun/energy, M))
|
||||
for(var/obj/item/weapon/gun/energy/G in M)
|
||||
G.charges = 0
|
||||
G.update_icon()
|
||||
|
||||
if ((istype(M, /mob/living/carbon/human)) && (istype(M:glasses, /obj/item/clothing/glasses/thermal)))
|
||||
M << "\red <B>Your thermals malfunction.</B>"
|
||||
M.eye_blind = 3
|
||||
M.eye_blurry = 5
|
||||
M.disabilities |= 1
|
||||
spawn(100)
|
||||
M.disabilities &= ~1
|
||||
|
||||
if (locate(/obj/item/device/radio, M))
|
||||
for(var/obj/item/device/radio/R in M) //Add something for the intercoms.
|
||||
R.broadcasting = 0
|
||||
R.listening = 0
|
||||
|
||||
if (locate(/obj/item/device/flash, M))
|
||||
for(var/obj/item/device/flash/F in M) //Add something for the intercoms.
|
||||
F.attack_self()
|
||||
|
||||
if (locate(/obj/item/weapon/baton, M))
|
||||
for(var/obj/item/weapon/baton/B in M) //Add something for the intercoms.
|
||||
B.charges = 0
|
||||
|
||||
if(locate(/obj/item/clothing/under/chameleon, M))
|
||||
for(var/obj/item/clothing/under/chameleon/C in M) //Add something for the intercoms.
|
||||
M << "\red <B>Your jumpsuit malfunctions</B>"
|
||||
C.name = "psychedelic"
|
||||
C.desc = "Groovy!"
|
||||
C.icon_state = "psyche"
|
||||
C.color = "psyche"
|
||||
spawn(200)
|
||||
C.name = "Black Jumpsuit"
|
||||
C.icon_state = "bl_suit"
|
||||
C.color = "black"
|
||||
C.desc = null
|
||||
|
||||
M << "\red <B>BZZZT</B>"
|
||||
|
||||
|
||||
for(var/obj/machinery/A in range(world.view-1, myturf))
|
||||
A.use_power(7500)
|
||||
|
||||
var/obj/overlay/pulse2 = new/obj/overlay ( A.loc )
|
||||
pulse2.icon = 'effects.dmi'
|
||||
pulse2.icon_state = "empdisable"
|
||||
pulse2.name = "emp sparks"
|
||||
pulse2.anchored = 1
|
||||
pulse2.dir = pick(cardinal)
|
||||
|
||||
spawn(10)
|
||||
del(pulse2)
|
||||
|
||||
if(istype(A, /obj/machinery/turret))
|
||||
A:enabled = 0
|
||||
A:lasers = 0
|
||||
A:power_change()
|
||||
|
||||
if(istype(A, /obj/machinery/computer) && prob(20))
|
||||
A:set_broken()
|
||||
|
||||
if(istype(A, /obj/machinery/firealarm) && prob(50))
|
||||
A:alarm()
|
||||
|
||||
if(istype(A, /obj/machinery/power/smes))
|
||||
A:online = 0
|
||||
A:charging = 0
|
||||
A:output = 0
|
||||
A:charge -= 1e6
|
||||
if (A:charge < 0)
|
||||
A:charge = 0
|
||||
spawn(100)
|
||||
A:output = initial(A:output)
|
||||
A:charging = initial(A:charging)
|
||||
A:online = initial(A:online)
|
||||
|
||||
if(istype(A, /obj/machinery/door))
|
||||
if(prob(20) && (istype(A,/obj/machinery/door/airlock) || istype(A,/obj/machinery/door/window)) )
|
||||
A:open()
|
||||
if(A:secondsElectrified != 0) continue
|
||||
A:secondsElectrified = -1
|
||||
spawn(300)
|
||||
A:secondsElectrified = 0
|
||||
|
||||
if(istype(A, /obj/machinery/power/apc))
|
||||
if(A:cell)
|
||||
A:cell:charge -= 1000
|
||||
if (A:cell:charge < 0)
|
||||
A:cell:charge = 0
|
||||
A:lighting = 0
|
||||
A:equipment = 0
|
||||
A:environ = 0
|
||||
spawn(600)
|
||||
A:equipment = 3
|
||||
A:environ = 3
|
||||
|
||||
if(istype(A, /obj/machinery/camera))
|
||||
A.icon_state = "cameraemp"
|
||||
A:network = null //Not the best way but it will do. I think.
|
||||
spawn(600)
|
||||
A:network = initial(A:network)
|
||||
A:icon_state = initial(A:icon_state)
|
||||
for(var/mob/living/silicon/ai/O in world)
|
||||
if (O.current == A)
|
||||
O.cancel_camera()
|
||||
O << "Your connection to the camera has been lost."
|
||||
for(var/mob/O in world)
|
||||
if (istype(O.machine, /obj/machinery/computer/security))
|
||||
var/obj/machinery/computer/security/S = O.machine
|
||||
if (S.current == A)
|
||||
O.machine = null
|
||||
S.current = null
|
||||
O.reset_view(null)
|
||||
O << "The screen bursts into static."
|
||||
|
||||
if(istype(A, /obj/machinery/clonepod))
|
||||
A:malfunction()
|
||||
@@ -1,16 +0,0 @@
|
||||
/mob/proc/kill(mob/M as mob in oview(1))
|
||||
set category = "Spells"
|
||||
set name = "Disintegrate"
|
||||
if(!usr.casting()) return
|
||||
usr.verbs -= /mob/proc/kill
|
||||
spawn(600)
|
||||
usr.verbs += /mob/proc/kill
|
||||
|
||||
usr.say("EI NATH")
|
||||
usr.spellvoice()
|
||||
|
||||
var/datum/effects/system/spark_spread/s = new /datum/effects/system/spark_spread
|
||||
s.set_up(4, 1, M)
|
||||
s.start()
|
||||
|
||||
M.dust()
|
||||
@@ -1,15 +0,0 @@
|
||||
/client/proc/knock()
|
||||
set category = "Spells"
|
||||
set name = "Knock"
|
||||
// if(!usr.casting()) return
|
||||
usr.verbs -= /client/proc/knock
|
||||
spawn(100)
|
||||
usr.verbs += /client/proc/knock
|
||||
|
||||
usr.whisper("AULIE OXIN FIERA")
|
||||
// usr.spellvoice()
|
||||
|
||||
for(var/obj/machinery/door/G in oview(3))
|
||||
spawn(1)
|
||||
G.open()
|
||||
return
|
||||
@@ -1,32 +0,0 @@
|
||||
/client/proc/fireball(mob/T as mob in oview())
|
||||
set category = "Spells"
|
||||
set name = "Fireball"
|
||||
set desc="Fireball target:"
|
||||
// if(!usr.casting()) return
|
||||
|
||||
usr.verbs -= /client/proc/fireball
|
||||
spawn(200)
|
||||
usr.verbs += /client/proc/fireball
|
||||
|
||||
usr.say("ONI SOMA")
|
||||
// usr.spellvoice()
|
||||
|
||||
var/obj/overlay/A = new /obj/overlay( usr.loc )
|
||||
A.icon_state = "fireball"
|
||||
A.icon = 'wizard.dmi'
|
||||
A.name = "a fireball"
|
||||
A.anchored = 0
|
||||
A.density = 0
|
||||
var/i
|
||||
for(i=0, i<100, i++)
|
||||
step_to(A,T,0)
|
||||
if (get_dist(A,T) <= 1)
|
||||
T.bruteloss += 20
|
||||
T.fireloss += 25
|
||||
|
||||
explosion(T.loc, -1, -1, 2, 2)
|
||||
del(A)
|
||||
return
|
||||
sleep(2)
|
||||
del(A)
|
||||
return
|
||||
@@ -1,30 +0,0 @@
|
||||
/obj/forcefield
|
||||
desc = "A space wizard's magic wall."
|
||||
name = "FORCEWALL"
|
||||
icon = 'mob.dmi'
|
||||
icon_state = "shield"
|
||||
anchored = 1.0
|
||||
opacity = 0
|
||||
density = 1
|
||||
unacidable = 1
|
||||
|
||||
/client/proc/forcewall()
|
||||
|
||||
set category = "Spells"
|
||||
set name = "Forcewall"
|
||||
set desc = "Create a forcewall on your location."
|
||||
|
||||
// if(!usr.casting()) return
|
||||
|
||||
usr.verbs -= /client/proc/forcewall
|
||||
spawn(100)
|
||||
usr.verbs += /client/proc/forcewall
|
||||
var/forcefield
|
||||
|
||||
usr.whisper("TARCOL MINTI ZHERI")
|
||||
// usr.spellvoice()
|
||||
|
||||
forcefield = new /obj/forcefield(locate(usr.x,usr.y,usr.z))
|
||||
spawn (300)
|
||||
del (forcefield)
|
||||
return
|
||||
@@ -1,13 +0,0 @@
|
||||
/client/proc/smokecloud()
|
||||
|
||||
set category = "Spells"
|
||||
set name = "Smoke"
|
||||
set desc = "Creates a cloud of smoke"
|
||||
// if(!usr.casting()) return
|
||||
usr.verbs -= /client/proc/smokecloud
|
||||
spawn(120)
|
||||
usr.verbs += /client/proc/smokecloud
|
||||
var/datum/effects/system/bad_smoke_spread/smoke = new /datum/effects/system/bad_smoke_spread()
|
||||
smoke.set_up(10, 0, usr.loc)
|
||||
smoke.start()
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
/client/proc/magicmissile()
|
||||
set category = "Spells"
|
||||
set name = "Magic missile"
|
||||
set desc="Whom"
|
||||
if(!usr.casting()) return
|
||||
|
||||
usr.say("FORTI GY AMA")
|
||||
usr.spellvoice()
|
||||
|
||||
for (var/mob/M as mob in oview())
|
||||
spawn(0)
|
||||
var/obj/overlay/A = new /obj/overlay( usr.loc )
|
||||
A.icon_state = "magicm"
|
||||
A.icon = 'wizard.dmi'
|
||||
A.name = "a magic missile"
|
||||
A.anchored = 0
|
||||
A.density = 0
|
||||
A.layer = 4
|
||||
var/i
|
||||
for(i=0, i<20, i++)
|
||||
var/obj/overlay/B = new /obj/overlay( A.loc )
|
||||
B.icon_state = "magicmd"
|
||||
B.icon = 'wizard.dmi'
|
||||
B.name = "trail"
|
||||
B.anchored = 1
|
||||
B.density = 0
|
||||
B.layer = 3
|
||||
spawn(5)
|
||||
del(B)
|
||||
step_to(A,M,0)
|
||||
if (get_dist(A,M) == 0)
|
||||
M.weakened += 5
|
||||
M.fireloss += 10
|
||||
del(A)
|
||||
return
|
||||
sleep(5)
|
||||
del(A)
|
||||
|
||||
usr.verbs -= /client/proc/magicmissile
|
||||
spawn(100)
|
||||
usr.verbs += /client/proc/magicmissile
|
||||
@@ -1,29 +0,0 @@
|
||||
/client/proc/blind(mob/M as mob in oview())
|
||||
set category = "Spells"
|
||||
set name = "Blind"
|
||||
// if(!usr.casting()) return
|
||||
usr.verbs -= /client/proc/blind
|
||||
spawn(300)
|
||||
usr.verbs += /client/proc/blind
|
||||
|
||||
usr.whisper("STI KALY")
|
||||
// usr.spellvoice()
|
||||
|
||||
var/obj/overlay/B = new /obj/overlay( M.loc )
|
||||
B.icon_state = "blspell"
|
||||
B.icon = 'wizard.dmi'
|
||||
B.name = "spell"
|
||||
B.anchored = 1
|
||||
B.density = 0
|
||||
B.layer = 4
|
||||
M.canmove = 0
|
||||
spawn(5)
|
||||
del(B)
|
||||
M.canmove = 1
|
||||
M << text("\blue Your eyes cry out in pain!")
|
||||
M.disabilities |= 1
|
||||
spawn(300)
|
||||
M.disabilities &= ~1
|
||||
M.eye_blind = 10
|
||||
M.eye_blurry = 20
|
||||
return
|
||||
657
code/game/gamemodes/wizard/spells.dm
Normal file
657
code/game/gamemodes/wizard/spells.dm
Normal file
@@ -0,0 +1,657 @@
|
||||
//BLIND
|
||||
|
||||
/client/proc/blind(mob/M as mob in oview())
|
||||
set category = "Spells"
|
||||
set name = "Blind"
|
||||
// if(!usr.casting()) return
|
||||
usr.verbs -= /client/proc/blind
|
||||
spawn(300)
|
||||
usr.verbs += /client/proc/blind
|
||||
|
||||
usr.whisper("STI KALY")
|
||||
// usr.spellvoice()
|
||||
|
||||
var/obj/overlay/B = new /obj/overlay( M.loc )
|
||||
B.icon_state = "blspell"
|
||||
B.icon = 'wizard.dmi'
|
||||
B.name = "spell"
|
||||
B.anchored = 1
|
||||
B.density = 0
|
||||
B.layer = 4
|
||||
M.canmove = 0
|
||||
spawn(5)
|
||||
del(B)
|
||||
M.canmove = 1
|
||||
M << text("\blue Your eyes cry out in pain!")
|
||||
M.disabilities |= 1
|
||||
spawn(300)
|
||||
M.disabilities &= ~1
|
||||
M.eye_blind = 10
|
||||
M.eye_blurry = 20
|
||||
return
|
||||
|
||||
//MAGIC MISSILE
|
||||
|
||||
/client/proc/magicmissile()
|
||||
set category = "Spells"
|
||||
set name = "Magic missile"
|
||||
set desc="Whom"
|
||||
if(!usr.casting()) return
|
||||
|
||||
usr.say("FORTI GY AMA")
|
||||
usr.spellvoice()
|
||||
|
||||
for (var/mob/M as mob in oview())
|
||||
spawn(0)
|
||||
var/obj/overlay/A = new /obj/overlay( usr.loc )
|
||||
A.icon_state = "magicm"
|
||||
A.icon = 'wizard.dmi'
|
||||
A.name = "a magic missile"
|
||||
A.anchored = 0
|
||||
A.density = 0
|
||||
A.layer = 4
|
||||
var/i
|
||||
for(i=0, i<20, i++)
|
||||
var/obj/overlay/B = new /obj/overlay( A.loc )
|
||||
B.icon_state = "magicmd"
|
||||
B.icon = 'wizard.dmi'
|
||||
B.name = "trail"
|
||||
B.anchored = 1
|
||||
B.density = 0
|
||||
B.layer = 3
|
||||
spawn(5)
|
||||
del(B)
|
||||
step_to(A,M,0)
|
||||
if (get_dist(A,M) == 0)
|
||||
M.weakened += 5
|
||||
M.fireloss += 10
|
||||
del(A)
|
||||
return
|
||||
sleep(5)
|
||||
del(A)
|
||||
|
||||
usr.verbs -= /client/proc/magicmissile
|
||||
spawn(100)
|
||||
usr.verbs += /client/proc/magicmissile
|
||||
|
||||
//SMOKE
|
||||
|
||||
/client/proc/smokecloud()
|
||||
|
||||
set category = "Spells"
|
||||
set name = "Smoke"
|
||||
set desc = "Creates a cloud of smoke"
|
||||
// if(!usr.casting()) return
|
||||
usr.verbs -= /client/proc/smokecloud
|
||||
spawn(120)
|
||||
usr.verbs += /client/proc/smokecloud
|
||||
var/datum/effects/system/bad_smoke_spread/smoke = new /datum/effects/system/bad_smoke_spread()
|
||||
smoke.set_up(10, 0, usr.loc)
|
||||
smoke.start()
|
||||
|
||||
//FORCE WALL
|
||||
|
||||
/obj/forcefield
|
||||
desc = "A space wizard's magic wall."
|
||||
name = "FORCEWALL"
|
||||
icon = 'mob.dmi'
|
||||
icon_state = "shield"
|
||||
anchored = 1.0
|
||||
opacity = 0
|
||||
density = 1
|
||||
unacidable = 1
|
||||
|
||||
/client/proc/forcewall()
|
||||
|
||||
set category = "Spells"
|
||||
set name = "Forcewall"
|
||||
set desc = "Create a forcewall on your location."
|
||||
|
||||
// if(!usr.casting()) return
|
||||
|
||||
usr.verbs -= /client/proc/forcewall
|
||||
spawn(100)
|
||||
usr.verbs += /client/proc/forcewall
|
||||
var/forcefield
|
||||
|
||||
usr.whisper("TARCOL MINTI ZHERI")
|
||||
// usr.spellvoice()
|
||||
|
||||
forcefield = new /obj/forcefield(locate(usr.x,usr.y,usr.z))
|
||||
spawn (300)
|
||||
del (forcefield)
|
||||
return
|
||||
|
||||
//FIREBALLAN
|
||||
|
||||
/client/proc/fireball(mob/T as mob in oview())
|
||||
set category = "Spells"
|
||||
set name = "Fireball"
|
||||
set desc="Fireball target:"
|
||||
// if(!usr.casting()) return
|
||||
|
||||
usr.verbs -= /client/proc/fireball
|
||||
spawn(200)
|
||||
usr.verbs += /client/proc/fireball
|
||||
|
||||
usr.say("ONI SOMA")
|
||||
// usr.spellvoice()
|
||||
|
||||
var/obj/overlay/A = new /obj/overlay( usr.loc )
|
||||
A.icon_state = "fireball"
|
||||
A.icon = 'wizard.dmi'
|
||||
A.name = "a fireball"
|
||||
A.anchored = 0
|
||||
A.density = 0
|
||||
var/i
|
||||
for(i=0, i<100, i++)
|
||||
step_to(A,T,0)
|
||||
if (get_dist(A,T) <= 1)
|
||||
T.bruteloss += 20
|
||||
T.fireloss += 25
|
||||
|
||||
explosion(T.loc, -1, -1, 2, 2)
|
||||
del(A)
|
||||
return
|
||||
sleep(2)
|
||||
del(A)
|
||||
return
|
||||
|
||||
//KNOCK
|
||||
|
||||
/client/proc/knock()
|
||||
set category = "Spells"
|
||||
set name = "Knock"
|
||||
// if(!usr.casting()) return
|
||||
usr.verbs -= /client/proc/knock
|
||||
spawn(100)
|
||||
usr.verbs += /client/proc/knock
|
||||
|
||||
usr.whisper("AULIE OXIN FIERA")
|
||||
// usr.spellvoice()
|
||||
|
||||
for(var/obj/machinery/door/G in oview(3))
|
||||
spawn(1)
|
||||
G.open()
|
||||
return
|
||||
|
||||
//KILL
|
||||
|
||||
/mob/proc/kill(mob/M as mob in oview(1))
|
||||
set category = "Spells"
|
||||
set name = "Disintegrate"
|
||||
if(!usr.casting()) return
|
||||
usr.verbs -= /mob/proc/kill
|
||||
spawn(600)
|
||||
usr.verbs += /mob/proc/kill
|
||||
|
||||
usr.say("EI NATH")
|
||||
usr.spellvoice()
|
||||
|
||||
var/datum/effects/system/spark_spread/s = new /datum/effects/system/spark_spread
|
||||
s.set_up(4, 1, M)
|
||||
s.start()
|
||||
|
||||
M.dust()
|
||||
|
||||
//DISABLE TECH
|
||||
|
||||
/mob/proc/tech()
|
||||
set category = "Spells"
|
||||
set name = "Disable Technology"
|
||||
if(!usr.casting()) return
|
||||
usr.verbs -= /mob/proc/tech
|
||||
spawn(400)
|
||||
usr.verbs += /mob/proc/tech
|
||||
|
||||
usr.say("NEC CANTIO")
|
||||
usr.spellvoice()
|
||||
|
||||
var/turf/myturf = get_turf(usr)
|
||||
|
||||
var/obj/overlay/pulse = new/obj/overlay ( myturf )
|
||||
pulse.icon = 'effects.dmi'
|
||||
pulse.icon_state = "emppulse"
|
||||
pulse.name = "emp pulse"
|
||||
pulse.anchored = 1
|
||||
spawn(20)
|
||||
del(pulse)
|
||||
|
||||
for(var/obj/item/weapon/W in range(world.view-1, myturf))
|
||||
|
||||
if (istype(W, /obj/item/assembly/m_i_ptank) || istype(W, /obj/item/assembly/r_i_ptank) || istype(W, /obj/item/assembly/t_i_ptank))
|
||||
|
||||
var/fuckthis
|
||||
if(istype(W:part1,/obj/item/weapon/tank/plasma))
|
||||
fuckthis = W:part1
|
||||
fuckthis:ignite()
|
||||
if(istype(W:part2,/obj/item/weapon/tank/plasma))
|
||||
fuckthis = W:part2
|
||||
fuckthis:ignite()
|
||||
if(istype(W:part3,/obj/item/weapon/tank/plasma))
|
||||
fuckthis = W:part3
|
||||
fuckthis:ignite()
|
||||
|
||||
|
||||
for(var/mob/M in viewers(world.view-1, myturf))
|
||||
|
||||
if(!istype(M, /mob/living)) continue
|
||||
if(M == usr) continue
|
||||
|
||||
if (istype(M, /mob/living/silicon))
|
||||
M.fireloss += 25
|
||||
flick("noise", M:flash)
|
||||
M << "\red <B>*BZZZT*</B>"
|
||||
M << "\red Warning: Electromagnetic pulse detected."
|
||||
if(istype(M, /mob/living/silicon/ai))
|
||||
if (prob(30))
|
||||
switch(pick(1,2,3)) //Add Random laws.
|
||||
if(1)
|
||||
M:cancel_camera()
|
||||
if(2)
|
||||
M:lockdown()
|
||||
if(3)
|
||||
M:ai_call_shuttle()
|
||||
continue
|
||||
|
||||
|
||||
M << "\red <B>Your equipment malfunctions.</B>" //Yeah, i realise that this WILL
|
||||
//show if theyre not carrying anything
|
||||
//that is affected. lazy.
|
||||
if (locate(/obj/item/weapon/cloaking_device, M))
|
||||
for(var/obj/item/weapon/cloaking_device/S in M)
|
||||
S.active = 0
|
||||
S.icon_state = "shield0"
|
||||
|
||||
if (locate(/obj/item/weapon/gun/energy, M))
|
||||
for(var/obj/item/weapon/gun/energy/G in M)
|
||||
G.charges = 0
|
||||
G.update_icon()
|
||||
|
||||
if ((istype(M, /mob/living/carbon/human)) && (istype(M:glasses, /obj/item/clothing/glasses/thermal)))
|
||||
M << "\red <B>Your thermals malfunction.</B>"
|
||||
M.eye_blind = 3
|
||||
M.eye_blurry = 5
|
||||
M.disabilities |= 1
|
||||
spawn(100)
|
||||
M.disabilities &= ~1
|
||||
|
||||
if (locate(/obj/item/device/radio, M))
|
||||
for(var/obj/item/device/radio/R in M) //Add something for the intercoms.
|
||||
R.broadcasting = 0
|
||||
R.listening = 0
|
||||
|
||||
if (locate(/obj/item/device/flash, M))
|
||||
for(var/obj/item/device/flash/F in M) //Add something for the intercoms.
|
||||
F.attack_self()
|
||||
|
||||
if (locate(/obj/item/weapon/baton, M))
|
||||
for(var/obj/item/weapon/baton/B in M) //Add something for the intercoms.
|
||||
B.charges = 0
|
||||
|
||||
if(locate(/obj/item/clothing/under/chameleon, M))
|
||||
for(var/obj/item/clothing/under/chameleon/C in M) //Add something for the intercoms.
|
||||
M << "\red <B>Your jumpsuit malfunctions</B>"
|
||||
C.name = "psychedelic"
|
||||
C.desc = "Groovy!"
|
||||
C.icon_state = "psyche"
|
||||
C.color = "psyche"
|
||||
spawn(200)
|
||||
C.name = "Black Jumpsuit"
|
||||
C.icon_state = "bl_suit"
|
||||
C.color = "black"
|
||||
C.desc = null
|
||||
|
||||
M << "\red <B>BZZZT</B>"
|
||||
|
||||
|
||||
for(var/obj/machinery/A in range(world.view-1, myturf))
|
||||
A.use_power(7500)
|
||||
|
||||
var/obj/overlay/pulse2 = new/obj/overlay ( A.loc )
|
||||
pulse2.icon = 'effects.dmi'
|
||||
pulse2.icon_state = "empdisable"
|
||||
pulse2.name = "emp sparks"
|
||||
pulse2.anchored = 1
|
||||
pulse2.dir = pick(cardinal)
|
||||
|
||||
spawn(10)
|
||||
del(pulse2)
|
||||
|
||||
if(istype(A, /obj/machinery/turret))
|
||||
A:enabled = 0
|
||||
A:lasers = 0
|
||||
A:power_change()
|
||||
|
||||
if(istype(A, /obj/machinery/computer) && prob(20))
|
||||
A:set_broken()
|
||||
|
||||
if(istype(A, /obj/machinery/firealarm) && prob(50))
|
||||
A:alarm()
|
||||
|
||||
if(istype(A, /obj/machinery/power/smes))
|
||||
A:online = 0
|
||||
A:charging = 0
|
||||
A:output = 0
|
||||
A:charge -= 1e6
|
||||
if (A:charge < 0)
|
||||
A:charge = 0
|
||||
spawn(100)
|
||||
A:output = initial(A:output)
|
||||
A:charging = initial(A:charging)
|
||||
A:online = initial(A:online)
|
||||
|
||||
if(istype(A, /obj/machinery/door))
|
||||
if(prob(20) && (istype(A,/obj/machinery/door/airlock) || istype(A,/obj/machinery/door/window)) )
|
||||
A:open()
|
||||
if(A:secondsElectrified != 0) continue
|
||||
A:secondsElectrified = -1
|
||||
spawn(300)
|
||||
A:secondsElectrified = 0
|
||||
|
||||
if(istype(A, /obj/machinery/power/apc))
|
||||
if(A:cell)
|
||||
A:cell:charge -= 1000
|
||||
if (A:cell:charge < 0)
|
||||
A:cell:charge = 0
|
||||
A:lighting = 0
|
||||
A:equipment = 0
|
||||
A:environ = 0
|
||||
spawn(600)
|
||||
A:equipment = 3
|
||||
A:environ = 3
|
||||
|
||||
if(istype(A, /obj/machinery/camera))
|
||||
A.icon_state = "cameraemp"
|
||||
A:network = null //Not the best way but it will do. I think.
|
||||
spawn(600)
|
||||
A:network = initial(A:network)
|
||||
A:icon_state = initial(A:icon_state)
|
||||
for(var/mob/living/silicon/ai/O in world)
|
||||
if (O.current == A)
|
||||
O.cancel_camera()
|
||||
O << "Your connection to the camera has been lost."
|
||||
for(var/mob/O in world)
|
||||
if (istype(O.machine, /obj/machinery/computer/security))
|
||||
var/obj/machinery/computer/security/S = O.machine
|
||||
if (S.current == A)
|
||||
O.machine = null
|
||||
S.current = null
|
||||
O.reset_view(null)
|
||||
O << "The screen bursts into static."
|
||||
|
||||
if(istype(A, /obj/machinery/clonepod))
|
||||
A:malfunction()
|
||||
|
||||
//BLINK
|
||||
|
||||
/client/proc/blink()
|
||||
set category = "Spells"
|
||||
set name = "Blink"
|
||||
set desc="Blink"
|
||||
if(!usr.casting()) return
|
||||
var/list/turfs = new/list()
|
||||
for(var/turf/T in orange(6))
|
||||
if(istype(T,/turf/space)) continue
|
||||
if(T.density) continue
|
||||
if(T.x>world.maxx-4 || T.x<4) continue //putting them at the edge is dumb
|
||||
if(T.y>world.maxy-4 || T.y<4) continue
|
||||
turfs += T
|
||||
if(!turfs.len) turfs += pick(/turf in orange(6))
|
||||
var/datum/effects/system/harmless_smoke_spread/smoke = new /datum/effects/system/harmless_smoke_spread()
|
||||
smoke.set_up(10, 0, usr.loc)
|
||||
smoke.start()
|
||||
var/turf/picked = pick(turfs)
|
||||
if(!isturf(picked)) return
|
||||
usr.loc = picked
|
||||
usr.verbs -= /client/proc/blink
|
||||
spawn(40)
|
||||
usr.verbs += /client/proc/blink
|
||||
|
||||
//TELEPORT
|
||||
|
||||
/mob/proc/teleport()
|
||||
set category = "Spells"
|
||||
set name = "Teleport"
|
||||
set desc="Teleport"
|
||||
if(!usr.casting()) return
|
||||
var/A
|
||||
usr.verbs -= /mob/proc/teleport
|
||||
/*
|
||||
var/list/theareas = new/list()
|
||||
for(var/area/AR in world)
|
||||
if(istype(AR, /area/shuttle) || istype(AR, /area/syndicate_station)) continue
|
||||
if(theareas.Find(AR.name)) continue
|
||||
var/turf/picked = pick(get_area_turfs(AR.type))
|
||||
if (picked.z == src.z)
|
||||
theareas += AR.name
|
||||
theareas[AR.name] = AR
|
||||
*/
|
||||
|
||||
A = input("Area to jump to", "BOOYEA", A) in teleportlocs
|
||||
|
||||
spawn(600)
|
||||
usr.verbs += /mob/proc/teleport
|
||||
|
||||
var/area/thearea = teleportlocs[A]
|
||||
|
||||
usr.say("SCYAR NILA [uppertext(A)]")
|
||||
usr.spellvoice()
|
||||
|
||||
var/datum/effects/system/harmless_smoke_spread/smoke = new /datum/effects/system/harmless_smoke_spread()
|
||||
smoke.set_up(5, 0, usr.loc)
|
||||
smoke.attach(usr)
|
||||
smoke.start()
|
||||
var/list/L = list()
|
||||
for(var/turf/T in get_area_turfs(thearea.type))
|
||||
if(!T.density)
|
||||
var/clear = 1
|
||||
for(var/obj/O in T)
|
||||
if(O.density)
|
||||
clear = 0
|
||||
break
|
||||
if(clear)
|
||||
L+=T
|
||||
|
||||
usr.loc = pick(L)
|
||||
|
||||
smoke.start()
|
||||
|
||||
/mob/proc/teleportscroll()
|
||||
if(usr.stat)
|
||||
usr << "Not when you're incapicated."
|
||||
return
|
||||
var/A
|
||||
|
||||
A = input("Area to jump to", "BOOYEA", A) in teleportlocs
|
||||
var/area/thearea = teleportlocs[A]
|
||||
|
||||
var/datum/effects/system/harmless_smoke_spread/smoke = new /datum/effects/system/harmless_smoke_spread()
|
||||
smoke.set_up(5, 0, usr.loc)
|
||||
smoke.attach(usr)
|
||||
smoke.start()
|
||||
var/list/L = list()
|
||||
for(var/turf/T in get_area_turfs(thearea.type))
|
||||
if(!T.density)
|
||||
var/clear = 1
|
||||
for(var/obj/O in T)
|
||||
if(O.density)
|
||||
clear = 0
|
||||
break
|
||||
if(clear)
|
||||
L+=T
|
||||
|
||||
usr.loc = pick(L)
|
||||
|
||||
smoke.start()
|
||||
|
||||
//JAUNT
|
||||
|
||||
/client/proc/jaunt()
|
||||
set category = "Spells"
|
||||
set name = "Ethereal Jaunt"
|
||||
if(!usr.casting()) return
|
||||
usr.verbs -= /client/proc/jaunt
|
||||
spawn(300)
|
||||
usr.verbs += /client/proc/jaunt
|
||||
spell_jaunt(usr)
|
||||
|
||||
/proc/spell_jaunt(var/mob/H, time = 50)
|
||||
if(H.stat) return
|
||||
spawn(0)
|
||||
var/mobloc = get_turf(H.loc)
|
||||
var/obj/dummy/spell_jaunt/holder = new /obj/dummy/spell_jaunt( mobloc )
|
||||
var/atom/movable/overlay/animation = new /atom/movable/overlay( mobloc )
|
||||
animation.name = "water"
|
||||
animation.density = 0
|
||||
animation.anchored = 1
|
||||
animation.icon = 'mob.dmi'
|
||||
animation.icon_state = "liquify"
|
||||
animation.layer = 5
|
||||
animation.master = holder
|
||||
flick("liquify",animation)
|
||||
H.loc = holder
|
||||
H.client.eye = holder
|
||||
var/datum/effects/system/steam_spread/steam = new /datum/effects/system/steam_spread()
|
||||
steam.set_up(10, 0, mobloc)
|
||||
steam.start()
|
||||
sleep(time)
|
||||
mobloc = get_turf(H.loc)
|
||||
animation.loc = mobloc
|
||||
steam.location = mobloc
|
||||
steam.start()
|
||||
H.canmove = 0
|
||||
sleep(20)
|
||||
flick("reappear",animation)
|
||||
sleep(5)
|
||||
H.loc = mobloc
|
||||
H.canmove = 1
|
||||
H.client.eye = H
|
||||
del(animation)
|
||||
del(holder)
|
||||
|
||||
/obj/dummy/spell_jaunt
|
||||
name = "water"
|
||||
icon = 'effects.dmi'
|
||||
icon_state = "nothing"
|
||||
var/canmove = 1
|
||||
density = 0
|
||||
anchored = 1
|
||||
|
||||
/obj/dummy/spell_jaunt/relaymove(var/mob/user, direction)
|
||||
if (!src.canmove) return
|
||||
switch(direction)
|
||||
if(NORTH)
|
||||
src.y++
|
||||
if(SOUTH)
|
||||
src.y--
|
||||
if(EAST)
|
||||
src.x++
|
||||
if(WEST)
|
||||
src.x--
|
||||
if(NORTHEAST)
|
||||
src.y++
|
||||
src.x++
|
||||
if(NORTHWEST)
|
||||
src.y++
|
||||
src.x--
|
||||
if(SOUTHEAST)
|
||||
src.y--
|
||||
src.x++
|
||||
if(SOUTHWEST)
|
||||
src.y--
|
||||
src.x--
|
||||
src.canmove = 0
|
||||
spawn(2) src.canmove = 1
|
||||
|
||||
/obj/dummy/spell_jaunt/ex_act(blah)
|
||||
return
|
||||
/obj/dummy/spell_jaunt/bullet_act(blah,blah)
|
||||
return
|
||||
|
||||
//MUTATE
|
||||
|
||||
/client/proc/mutate()
|
||||
set category = "Spells"
|
||||
set name = "Mutate"
|
||||
if(!usr.casting()) return
|
||||
usr.verbs -= /client/proc/mutate
|
||||
spawn(400)
|
||||
usr.verbs += /client/proc/mutate
|
||||
|
||||
usr.say("BIRUZ BENNAR")
|
||||
usr.spellvoice()
|
||||
|
||||
usr << text("\blue You feel strong! Your mind expands!")
|
||||
if (!(usr.mutations & 8))
|
||||
usr.mutations |= 8
|
||||
if (!(usr.mutations & 1))
|
||||
usr.mutations |= 1
|
||||
spawn (300)
|
||||
if (usr.mutations & 1) usr.mutations &= ~1
|
||||
if (usr.mutations & 8) usr.mutations &= ~8
|
||||
return
|
||||
|
||||
//BODY SWAP
|
||||
|
||||
/mob/proc/swap(mob/M as mob in oview())
|
||||
set category = "Spells"
|
||||
set name = "Body Swap"
|
||||
|
||||
if(M.client && M.mind)
|
||||
if(!M.mind.special_role && (istype(M, /mob/living/carbon/human)))
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/mob/living/carbon/human/U = src
|
||||
|
||||
U.whisper("GIN'YU CAPAN")
|
||||
U.verbs -= /mob/proc/swap
|
||||
if(U.mind.special_verbs.len)
|
||||
for(var/V in U.mind.special_verbs)
|
||||
U.verbs -= V
|
||||
|
||||
var/mob/dead/observer/G = new /mob/dead/observer(H) //To properly transfer clients so no-one gets kicked off the game.
|
||||
|
||||
H.client.mob = G
|
||||
G.mind = H.mind
|
||||
|
||||
U.client.mob = H
|
||||
H.mind = U.mind
|
||||
if(H.mind.special_verbs.len)
|
||||
var/spell_loss = 1
|
||||
var/probability = 95
|
||||
for(var/V in H.mind.special_verbs)
|
||||
if(spell_loss == 0)
|
||||
H.verbs += V
|
||||
else
|
||||
if(prob(probability))
|
||||
H.verbs += V
|
||||
probability -= 7
|
||||
else
|
||||
spell_loss = 0
|
||||
H.mind.special_verbs -= V
|
||||
spawn(500)
|
||||
H << "The mind transfer has robbed you of a spell."
|
||||
|
||||
|
||||
G.client.mob = U
|
||||
U.mind = G.mind
|
||||
|
||||
U.mind.current = U
|
||||
H.mind.current = H
|
||||
spawn(500)
|
||||
U << "Something about your body doesn't seem quite right..."
|
||||
|
||||
U.paralysis += 20
|
||||
H.paralysis += 20
|
||||
|
||||
spawn(600)
|
||||
H.verbs += /mob/proc/swap
|
||||
|
||||
del(G)
|
||||
else
|
||||
src << "Their mind is resisting your spell."
|
||||
return
|
||||
|
||||
else
|
||||
src << "Their mind is not compatible."
|
||||
return
|
||||
@@ -54,29 +54,27 @@
|
||||
world << "<B>There is a \red SPACE WIZARD\black on the station. You can't let him achieve his objective!</B>"
|
||||
|
||||
/datum/game_mode/wizard/pre_setup()
|
||||
// Can't pick a wizard here, as we don't want him to then become the AI.
|
||||
return 1
|
||||
|
||||
/datum/game_mode/wizard/post_setup()
|
||||
|
||||
//
|
||||
var/list/possible_wizards = get_possible_wizards()
|
||||
|
||||
if(possible_wizards.len>0)
|
||||
wizard = pick(possible_wizards)
|
||||
else
|
||||
world << "<B>A WIZARD COULD NOT BE SPAWNED FFFFFFUUUUCK</B>"
|
||||
|
||||
if(istype(wizard))
|
||||
wizard.assigned_role = "MODE" //So they aren't chosen for other jobs.
|
||||
wizard.special_role = "wizard"
|
||||
|
||||
if(wizardstart.len == 0)
|
||||
wizard.current << "<B>\red A starting location for you could not be found, please report this bug!</B>"
|
||||
else
|
||||
var/starting_loc = pick(wizardstart)
|
||||
wizard.current.loc = starting_loc
|
||||
|
||||
for (var/obj/landmark/A in world)
|
||||
if (A.name == "Teleport-Scroll")
|
||||
new /obj/item/weapon/teleportation_scroll(A.loc)
|
||||
del(A)
|
||||
continue
|
||||
return 1
|
||||
|
||||
/datum/game_mode/wizard/post_setup()
|
||||
|
||||
switch(rand(1,100))
|
||||
if(1 to 30)
|
||||
@@ -136,103 +134,42 @@
|
||||
send_intercept()
|
||||
|
||||
/datum/game_mode/wizard/proc/get_possible_wizards()
|
||||
var/list/candidates = list()
|
||||
for(var/mob/living/carbon/player in world)
|
||||
if (player.client)
|
||||
var/list/candidates = list()//Shamelessly copied from nuke code.
|
||||
|
||||
for(var/mob/new_player/player in world)
|
||||
if((player.client) && (player.ready))
|
||||
if(player.be_syndicate)
|
||||
candidates += player.mind
|
||||
|
||||
if(candidates.len < 1)
|
||||
for(var/mob/living/carbon/player in world)
|
||||
if (player.client)
|
||||
for(var/mob/new_player/player in world)
|
||||
if((player.client) && (player.ready))
|
||||
candidates += player.mind
|
||||
|
||||
if(candidates.len < 1)
|
||||
return null
|
||||
else
|
||||
return candidates
|
||||
|
||||
/datum/game_mode/proc/equip_wizard(mob/living/carbon/human/wizard_mob)
|
||||
if (!istype(wizard_mob))
|
||||
return
|
||||
wizard_mob.verbs += /client/proc/jaunt
|
||||
if (wizard_mob.mind.assigned_role == "Clown")
|
||||
wizard_mob << "Your training has allowed you to overcome your clownish nature, allowing you to wield weapons without harming yourself."
|
||||
wizard_mob.mutations &= ~16
|
||||
wizard_mob.mind.special_verbs += /client/proc/jaunt
|
||||
|
||||
var/freq = 1441
|
||||
var/list/freqlist = list()
|
||||
while (freq <= 1489)
|
||||
if (freq < 1451 || freq > 1459)
|
||||
freqlist += freq
|
||||
freq += 2
|
||||
if ((freq % 2) == 0)
|
||||
freq += 1
|
||||
freq = freqlist[rand(1, freqlist.len)]
|
||||
// generate a passcode if the uplink is hidden in a PDA
|
||||
var/pda_pass = "[rand(100,999)] [pick("Morgan","Circe","Prospero","Elminister","Raistlin","Tzeentch","Saruman","Khelben","Dumbledor","Gandalf","Houdini","Teferi","Urza","Tenser","Zagyg","Mystryl","Boccob","Merlin")]"
|
||||
wizard_mob.equip_if_possible(new /obj/item/device/radio/headset(wizard_mob), wizard_mob.slot_ears)
|
||||
wizard_mob.equip_if_possible(new /obj/item/clothing/under/lightpurple(wizard_mob), wizard_mob.slot_w_uniform)
|
||||
wizard_mob.equip_if_possible(new /obj/item/clothing/shoes/sandal(wizard_mob), wizard_mob.slot_shoes)
|
||||
wizard_mob.equip_if_possible(new /obj/item/clothing/suit/wizrobe(wizard_mob), wizard_mob.slot_wear_suit)
|
||||
wizard_mob.equip_if_possible(new /obj/item/clothing/head/wizard(wizard_mob), wizard_mob.slot_head)
|
||||
wizard_mob.equip_if_possible(new /obj/item/weapon/storage/backpack(wizard_mob), wizard_mob.slot_back)
|
||||
// wizard_mob.equip_if_possible(new /obj/item/weapon/scrying_gem(wizard_mob), wizard_mob.slot_l_store) For scrying gem.
|
||||
wizard_mob.equip_if_possible(new /obj/item/weapon/teleportation_scroll(wizard_mob), wizard_mob.slot_r_store)
|
||||
wizard_mob.equip_if_possible(new /obj/item/weapon/SWF_uplink(wizard_mob), wizard_mob.slot_l_hand)
|
||||
|
||||
del(wizard_mob.wear_suit)
|
||||
del(wizard_mob.head)
|
||||
del(wizard_mob.shoes)
|
||||
del(wizard_mob.r_hand)
|
||||
wizard_mob.wear_suit = new /obj/item/clothing/suit/wizrobe(wizard_mob)
|
||||
wizard_mob.wear_suit.layer = 20
|
||||
wizard_mob.head = new /obj/item/clothing/head/wizard(wizard_mob)
|
||||
wizard_mob.head.layer = 20
|
||||
wizard_mob.shoes = new /obj/item/clothing/shoes/sandal(wizard_mob)
|
||||
wizard_mob.shoes.layer = 20
|
||||
//wizard_mob.r_hand = new /obj/item/weapon/staff(wizard_mob) //Wizards don't need the staff or use it. N
|
||||
//wizard_mob.r_hand.layer = 20 //Wizards don't need the staff or use it. N
|
||||
|
||||
var/loc = ""
|
||||
var/obj/item/device/R = null //Hide the uplink in a PDA if available, otherwise radio
|
||||
if (!R && istype(wizard_mob.belt, /obj/item/device/pda))
|
||||
R = wizard_mob.belt
|
||||
loc = "on your belt"
|
||||
if (!R && istype(wizard_mob.l_hand, /obj/item/weapon/storage))
|
||||
var/obj/item/weapon/storage/S = wizard_mob.l_hand
|
||||
var/list/L = S.return_inv()
|
||||
for (var/obj/item/device/radio/foo in L)
|
||||
R = foo
|
||||
loc = "in the [S.name] in your left hand"
|
||||
break
|
||||
if (!R && istype(wizard_mob.r_hand, /obj/item/weapon/storage))
|
||||
var/obj/item/weapon/storage/S = wizard_mob.r_hand
|
||||
var/list/L = S.return_inv()
|
||||
for (var/obj/item/device/radio/foo in L)
|
||||
R = foo
|
||||
loc = "in the [S.name] in your right hand"
|
||||
break
|
||||
if (!R && istype(wizard_mob.back, /obj/item/weapon/storage))
|
||||
var/obj/item/weapon/storage/S = wizard_mob.back
|
||||
var/list/L = S.return_inv()
|
||||
for (var/obj/item/device/radio/foo in L)
|
||||
R = foo
|
||||
loc = "in the [S.name] on your back"
|
||||
break
|
||||
if (!R && wizard_mob.w_uniform && istype(wizard_mob.belt, /obj/item/device/radio))
|
||||
R = wizard_mob.belt
|
||||
loc = "on your belt"
|
||||
if (!R && istype(wizard_mob.ears, /obj/item/device/radio))
|
||||
R = wizard_mob.ears
|
||||
loc = "on your head"
|
||||
if (!R)
|
||||
wizard_mob << "Unfortunately, the Space Wizards Federation wasn't able to get you a radio."
|
||||
else
|
||||
if (istype(R, /obj/item/device/radio))
|
||||
var/obj/item/weapon/SWF_uplink/T = new /obj/item/weapon/SWF_uplink(R)
|
||||
R:traitorradio = T
|
||||
R:traitor_frequency = freq
|
||||
T.name = R.name
|
||||
T.icon_state = R.icon_state
|
||||
T.origradio = R
|
||||
wizard_mob << "The Space Wizards Federation have cunningly disguised a spell book as your [R.name] [loc]. Simply dial the frequency [format_frequency(freq)] to unlock it's hidden features."
|
||||
wizard_mob.mind.store_memory("<B>Radio Freq:</B> [format_frequency(freq)] ([R.name] [loc]).")
|
||||
else if (istype(R, /obj/item/device/pda))
|
||||
var/obj/item/weapon/integrated_uplink/SWF/T = new /obj/item/weapon/integrated_uplink/SWF(R)
|
||||
R:uplink = T
|
||||
T.lock_code = pda_pass
|
||||
T.hostpda = R
|
||||
wizard_mob << "The Space Wizards Federation have cunningly enchanted a spellbook into your PDA [loc]. Simply enter the code \"[pda_pass]\" into the ringtone select to unlock its hidden features."
|
||||
wizard_mob.mind.store_memory("<B>Uplink Passcode:</B> [pda_pass] ([R.name] [loc]).")
|
||||
wizard_mob << "You will find a list of available spells in your spell book. Choose your magic arsenal carefully."
|
||||
wizard_mob << "In your pockets you will find two more important, magical artifacts. Use them as needed."
|
||||
wizard_mob.mind.store_memory("<B>Remember:</B> do not forget to prepare your spells.")
|
||||
|
||||
/datum/game_mode/wizard/send_intercept()
|
||||
var/intercepttext = "<FONT size = 3><B>Cent. Com. Update</B> Requested staus information:</FONT><HR>"
|
||||
@@ -317,15 +254,16 @@
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/SWF_uplink/proc/explode()
|
||||
var/turf/location = get_turf(src.loc)
|
||||
location.hotspot_expose(700, 125)
|
||||
|
||||
explosion(location, 0, 0, 2, 4)
|
||||
|
||||
del(src.master)
|
||||
del(src)
|
||||
return
|
||||
/obj/item/weapon/spellbook
|
||||
name = "Spell Book"
|
||||
icon = 'library.dmi'
|
||||
icon_state ="book"
|
||||
throw_speed = 1
|
||||
throw_range = 5
|
||||
w_class = 1.0
|
||||
flags = FPRINT | TABLEPASS
|
||||
//WIP
|
||||
|
||||
/obj/item/weapon/SWF_uplink/attack_self(mob/user as mob)
|
||||
user.machine = src
|
||||
@@ -347,9 +285,10 @@
|
||||
dat += "<A href='byond://?src=\ref[src];spell_emp=1'>Disable Technology</A> (60)<BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];spell_smoke=1'>Smoke</A> (10)<BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];spell_blind=1'>Blind</A> (30)<BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];spell_swap=1'>Body Swap</A> (60)<BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];spell_forcewall=1'>Forcewall</A> (10)<BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];spell_blink=1'>Blink</A> (2)<BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];spell_teleport=1'>Teleport</A> (30)<BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];spell_teleport=1'>Teleport</A> (60)<BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];spell_mutate=1'>Mutate</A> (60)<BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];spell_jaunt=1'>Ethereal Jaunt</A> (60)<BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];spell_knock=1'>Knock</A> (10)<BR>"
|
||||
@@ -375,61 +314,78 @@
|
||||
if (src.uses >= 1)
|
||||
src.uses -= 1
|
||||
usr.verbs += /client/proc/magicmissile
|
||||
usr.mind.special_verbs += /client/proc/magicmissile
|
||||
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."
|
||||
else if (href_list["spell_fireball"])
|
||||
if (src.uses >= 1)
|
||||
src.uses -= 1
|
||||
usr.verbs += /client/proc/fireball
|
||||
usr.mind.special_verbs += /client/proc/fireball
|
||||
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."
|
||||
else if (href_list["spell_disintegrate"])
|
||||
if (src.uses >= 1)
|
||||
src.uses -= 1
|
||||
usr.verbs += /mob/proc/kill
|
||||
usr.mind.special_verbs += /mob/proc/kill
|
||||
src.temp = "This spell instantly kills somebody adjacent to you with the vilest of magick. It has a long cooldown."
|
||||
else if (href_list["spell_emp"])
|
||||
if (src.uses >= 1)
|
||||
src.uses -= 1
|
||||
usr.verbs += /mob/proc/tech
|
||||
usr.mind.special_verbs += /mob/proc/tech
|
||||
src.temp = "This spell disables all weapons, cameras and most other technology in range."
|
||||
else if (href_list["spell_smoke"])
|
||||
if (src.uses >= 1)
|
||||
src.uses -= 1
|
||||
usr.verbs += /client/proc/smokecloud
|
||||
usr.mind.special_verbs += /client/proc/smokecloud
|
||||
src.temp = "This spell spawns a cloud of choking smoke at your location and does not require wizard garb."
|
||||
else if (href_list["spell_blind"])
|
||||
if (src.uses >= 1)
|
||||
src.uses -= 1
|
||||
usr.verbs += /client/proc/blind
|
||||
usr.mind.special_verbs += /client/proc/blind
|
||||
src.temp = "This spell temporarly blinds a single person and does not require wizard garb."
|
||||
else if (href_list["spell_swap"])
|
||||
if (src.uses >= 1)
|
||||
src.uses -= 1
|
||||
usr.verbs += /mob/proc/swap
|
||||
src.temp = "This spell allows the user to switch bodies with a target. Careful to not lose your memory in the process."
|
||||
else if (href_list["spell_forcewall"])
|
||||
if (src.uses >= 1)
|
||||
src.uses -= 1
|
||||
usr.verbs += /client/proc/forcewall
|
||||
usr.mind.special_verbs += /client/proc/forcewall
|
||||
src.temp = "This spell creates an unbreakable wall that lasts for 30 seconds and does not need wizard garb."
|
||||
else if (href_list["spell_blink"])
|
||||
if (src.uses >= 1)
|
||||
src.uses -= 1
|
||||
usr.verbs += /client/proc/blink
|
||||
usr.mind.special_verbs += /client/proc/blink
|
||||
src.temp = "This spell randomly teleports you a short distance. Useful for evasion or getting into areas if you have patience."
|
||||
else if (href_list["spell_teleport"])
|
||||
if (src.uses >= 1)
|
||||
src.uses -= 1
|
||||
usr.verbs += /mob/proc/teleport
|
||||
usr.mind.special_verbs += /mob/proc/teleport
|
||||
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."
|
||||
else if (href_list["spell_mutate"])
|
||||
if (src.uses >= 1)
|
||||
src.uses -= 1
|
||||
usr.verbs += /client/proc/mutate
|
||||
usr.mind.special_verbs += /client/proc/mutate
|
||||
src.temp = "This spell causes you to turn into a hulk and gain telekinesis for a short while."
|
||||
else if (href_list["spell_jaunt"])
|
||||
if (src.uses >= 1)
|
||||
src.uses -= 1
|
||||
usr.verbs += /client/proc/jaunt
|
||||
usr.mind.special_verbs += /client/proc/jaunt
|
||||
src.temp = "This spell creates your ethereal form, temporarily making you invisible and able to pass through walls."
|
||||
else if (href_list["spell_knock"])
|
||||
if (src.uses >= 1)
|
||||
src.uses -= 1
|
||||
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."
|
||||
else if (href_list["lock"] && src.origradio)
|
||||
// presto chango, a regular radio again! (reset the freq too...)
|
||||
@@ -472,6 +428,143 @@
|
||||
src.attack_self(M)
|
||||
return
|
||||
|
||||
/obj/item/weapon/SWF_uplink/proc/explode()
|
||||
var/turf/location = get_turf(src.loc)
|
||||
location.hotspot_expose(700, 125)
|
||||
|
||||
explosion(location, 0, 0, 2, 4)
|
||||
|
||||
del(src.master)
|
||||
del(src)
|
||||
return
|
||||
|
||||
/*Checks if the wizard can cast spells.
|
||||
Made a proc so this is not repeated 14 (or more) times.*/
|
||||
/mob/proc/casting()
|
||||
if(usr.stat)
|
||||
usr << "Not when you're incapicated."
|
||||
return 0
|
||||
if(!istype(usr:wear_suit, /obj/item/clothing/suit/wizrobe))
|
||||
usr << "I don't feel strong enough without my robe."
|
||||
return 0
|
||||
if(!istype(usr:shoes, /obj/item/clothing/shoes/sandal))
|
||||
usr << "I don't feel strong enough without my sandals."
|
||||
return 0
|
||||
if(!istype(usr:head, /obj/item/clothing/head/wizard))
|
||||
usr << "I don't feel strong enough without my hat."
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
|
||||
/*Checks if the wizard is a mime and male/female.
|
||||
Outputs the appropriate voice if the user is not a mime.
|
||||
Made a proc here so it's not repeated several times.*/
|
||||
/mob/proc/spellvoice()
|
||||
// if(!usr.miming)No longer necessary.
|
||||
if(usr.gender=="male")
|
||||
playsound(usr.loc, pick('vs_chant_conj_hm.wav','vs_chant_conj_lm.wav','vs_chant_ench_hm.wav','vs_chant_ench_lm.wav','vs_chant_evoc_hm.wav','vs_chant_evoc_lm.wav','vs_chant_illu_hm.wav','vs_chant_illu_lm.wav','vs_chant_necr_hm.wav','vs_chant_necr_lm.wav'), 100, 1)
|
||||
else
|
||||
playsound(usr.loc, pick('vs_chant_conj_hf.wav','vs_chant_conj_lf.wav','vs_chant_ench_hf.wav','vs_chant_ench_lf.wav','vs_chant_evoc_hf.wav','vs_chant_evoc_lf.wav','vs_chant_illu_hf.wav','vs_chant_illu_lf.wav','vs_chant_necr_hf.wav','vs_chant_necr_lf.wav'), 100, 1)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//UNUSED/OLD CODE
|
||||
|
||||
// for (var/obj/landmark/A in world)
|
||||
// if (A.name == "Teleport-Scroll")
|
||||
// new /obj/item/weapon/teleportation_scroll(A.loc)
|
||||
// del(A)
|
||||
// continue
|
||||
//Scroll now starts in the wizard's inventory.
|
||||
|
||||
// if (wizard_mob.mind.assigned_role == "Clown")
|
||||
// wizard_mob << "Your training has allowed you to overcome your clownish nature, allowing you to wield weapons without harming yourself."
|
||||
// wizard_mob.mutations &= ~16 No more clowns as wizarrrddsss
|
||||
|
||||
/*Creates random numbers/codes for the uplink.
|
||||
var/freq = 1441
|
||||
var/list/freqlist = list()
|
||||
while (freq <= 1489)
|
||||
if (freq < 1451 || freq > 1459)
|
||||
freqlist += freq
|
||||
freq += 2
|
||||
if ((freq % 2) == 0)
|
||||
freq += 1
|
||||
freq = freqlist[rand(1, freqlist.len)]
|
||||
// generate a passcode if the uplink is hidden in a PDA
|
||||
var/pda_pass = "[rand(100,999)] [pick("Morgan","Circe","Prospero","Elminister","Raistlin","Tzeentch","Saruman","Khelben","Dumbledor","Gandalf","Houdini","Teferi","Urza","Tenser","Zagyg","Mystryl","Boccob","Merlin")]"
|
||||
No longer used because wizards begin with a spell book.*/
|
||||
|
||||
/*Checks where to spawn the swf uplink.
|
||||
var/loc = ""
|
||||
var/obj/item/device/R = null //Hide the uplink in a PDA if available, otherwise radio
|
||||
if (!R && istype(wizard_mob.belt, /obj/item/device/pda))
|
||||
R = wizard_mob.belt
|
||||
loc = "on your belt"
|
||||
if (!R && istype(wizard_mob.l_hand, /obj/item/weapon/storage))
|
||||
var/obj/item/weapon/storage/S = wizard_mob.l_hand
|
||||
var/list/L = S.return_inv()
|
||||
for (var/obj/item/device/radio/foo in L)
|
||||
R = foo
|
||||
loc = "in the [S.name] in your left hand"
|
||||
break
|
||||
if (!R && istype(wizard_mob.r_hand, /obj/item/weapon/storage))
|
||||
var/obj/item/weapon/storage/S = wizard_mob.r_hand
|
||||
var/list/L = S.return_inv()
|
||||
for (var/obj/item/device/radio/foo in L)
|
||||
R = foo
|
||||
loc = "in the [S.name] in your right hand"
|
||||
break
|
||||
if (!R && istype(wizard_mob.back, /obj/item/weapon/storage))
|
||||
var/obj/item/weapon/storage/S = wizard_mob.back
|
||||
var/list/L = S.return_inv()
|
||||
for (var/obj/item/device/radio/foo in L)
|
||||
R = foo
|
||||
loc = "in the [S.name] on your back"
|
||||
break
|
||||
if (!R && wizard_mob.w_uniform && istype(wizard_mob.belt, /obj/item/device/radio))
|
||||
R = wizard_mob.belt
|
||||
loc = "on your belt"
|
||||
if (!R && istype(wizard_mob.ears, /obj/item/device/radio))
|
||||
R = wizard_mob.ears
|
||||
loc = "on your head"
|
||||
if (!R)
|
||||
wizard_mob << "Unfortunately, the Space Wizards Federation wasn't able to get you a radio."
|
||||
else
|
||||
if (istype(R, /obj/item/device/radio))
|
||||
var/obj/item/weapon/SWF_uplink/T = new /obj/item/weapon/SWF_uplink(R)
|
||||
R:traitorradio = T
|
||||
R:traitor_frequency = freq
|
||||
T.name = R.name
|
||||
T.icon_state = R.icon_state
|
||||
T.origradio = R
|
||||
wizard_mob << "The Space Wizards Federation have cunningly disguised a spell book as your [R.name] [loc]. Simply dial the frequency [format_frequency(freq)] to unlock it's hidden features."
|
||||
wizard_mob.mind.store_memory("<B>Radio Freq:</B> [format_frequency(freq)] ([R.name] [loc]).")
|
||||
else if (istype(R, /obj/item/device/pda))
|
||||
var/obj/item/weapon/integrated_uplink/SWF/T = new /obj/item/weapon/integrated_uplink/SWF(R)
|
||||
R:uplink = T
|
||||
T.lock_code = pda_pass
|
||||
T.hostpda = R
|
||||
wizard_mob << "The Space Wizards Federation have cunningly enchanted a spellbook into your PDA [loc]. Simply enter the code \"[pda_pass]\" into the ringtone select to unlock its hidden features."
|
||||
wizard_mob.mind.store_memory("<B>Uplink Passcode:</B> [pda_pass] ([R.name] [loc]).")
|
||||
No longer used because wizards begin with a spell book.*/
|
||||
|
||||
/*Code which works for intergrated uplinks, like those in PDAs.
|
||||
/obj/item/weapon/integrated_uplink/SWF
|
||||
name = "enchanted uplink"
|
||||
uses = 4
|
||||
@@ -577,31 +670,4 @@
|
||||
return
|
||||
|
||||
return
|
||||
|
||||
/*Checks if the wizard can cast spells.
|
||||
Made a proc so this is not repeated 14 (or more) times.*/
|
||||
/mob/proc/casting()
|
||||
if(usr.stat)
|
||||
usr << "Not when you're incapicated."
|
||||
return 0
|
||||
if(!istype(usr:wear_suit, /obj/item/clothing/suit/wizrobe))
|
||||
usr << "I don't feel strong enough without my robe."
|
||||
return 0
|
||||
if(!istype(usr:shoes, /obj/item/clothing/shoes/sandal))
|
||||
usr << "I don't feel strong enough without my sandals."
|
||||
return 0
|
||||
if(!istype(usr:head, /obj/item/clothing/head/wizard))
|
||||
usr << "I don't feel strong enough without my hat."
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
|
||||
/*Checks if the wizard is a mime and male/female.
|
||||
Outputs the appropriate voice if the user is not a mime.
|
||||
Made a proc here so it's not repeated several times.*/
|
||||
/mob/proc/spellvoice()
|
||||
if(!usr.miming)
|
||||
if(usr.gender=="male")
|
||||
playsound(usr.loc, pick('vs_chant_conj_hm.wav','vs_chant_conj_lm.wav','vs_chant_ench_hm.wav','vs_chant_ench_lm.wav','vs_chant_evoc_hm.wav','vs_chant_evoc_lm.wav','vs_chant_illu_hm.wav','vs_chant_illu_lm.wav','vs_chant_necr_hm.wav','vs_chant_necr_lm.wav'), 100, 1)
|
||||
else
|
||||
playsound(usr.loc, pick('vs_chant_conj_hf.wav','vs_chant_conj_lf.wav','vs_chant_ench_hf.wav','vs_chant_ench_lf.wav','vs_chant_evoc_hf.wav','vs_chant_evoc_lf.wav','vs_chant_illu_hf.wav','vs_chant_illu_lf.wav','vs_chant_necr_hf.wav','vs_chant_necr_lf.wav'), 100, 1)
|
||||
No longer used because wizards begin with a spell book.*/
|
||||
@@ -157,3 +157,69 @@ I kind of like the right click only--the window version can get a little confusi
|
||||
return
|
||||
else
|
||||
O.acid()
|
||||
|
||||
/mob/living/carbon/alien/humanoid/verb/ventcrawl() // -- TLE
|
||||
set name = "Crawl through Vent"
|
||||
set desc = "Enter an air vent and appear at a random one"
|
||||
set category = "Alien"
|
||||
// if(!istype(V,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent))
|
||||
// return
|
||||
|
||||
if(src.stat)
|
||||
src << "\green You must be conscious to do this."
|
||||
return
|
||||
var/vent_found = 0
|
||||
for(var/obj/machinery/atmospherics/unary/vent_pump/v in range(1,src))
|
||||
if(!v.welded)
|
||||
vent_found = v
|
||||
|
||||
if(!vent_found)
|
||||
src << "\green You must be standing on or beside an open air vent to enter it."
|
||||
return
|
||||
var/list/vents = list()
|
||||
for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in world)
|
||||
if(temp_vent.loc == src.loc)
|
||||
continue
|
||||
if(temp_vent.welded)
|
||||
continue
|
||||
vents.Add(temp_vent)
|
||||
var/list/choices = list()
|
||||
for(var/obj/machinery/atmospherics/unary/vent_pump/vent in vents)
|
||||
if(vent.loc.z != src.loc.z)
|
||||
continue
|
||||
if(vent.welded)
|
||||
continue
|
||||
var/atom/a = get_turf_loc(vent)
|
||||
choices.Add(a.loc)
|
||||
var/turf/startloc = src.loc
|
||||
var/obj/selection = input("Select a destination.", "Duct System") in choices
|
||||
var/selection_position = choices.Find(selection)
|
||||
if(src.loc != startloc)
|
||||
src << "\green You need to remain still while entering a vent."
|
||||
return
|
||||
var/obj/machinery/atmospherics/unary/vent_pump/target_vent = vents[selection_position]
|
||||
if(target_vent)
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O.show_message(text("<B>[src] scrambles into the ventillation ducts!</B>"), 1)
|
||||
var/list/huggers = list()
|
||||
for(var/obj/alien/facehugger/F in view(3, src))
|
||||
if(istype(F, /obj/alien/facehugger))
|
||||
huggers.Add(F)
|
||||
|
||||
src.loc = vent_found
|
||||
for(var/obj/alien/facehugger/F in huggers)
|
||||
F.loc = vent_found
|
||||
var/travel_time = get_dist(src.loc, target_vent.loc)
|
||||
|
||||
spawn(round(travel_time/2))//give sound warning to anyone near the target vent
|
||||
if(!target_vent.welded)
|
||||
for(var/mob/O in hearers(target_vent, null))
|
||||
O.show_message("You hear something crawling trough the ventilation pipes.")
|
||||
|
||||
spawn(travel_time)
|
||||
if(target_vent.welded)//the vent can be welded while alien scrolled through the list or travelled.
|
||||
target_vent = vent_found //travel back. No additional time required.
|
||||
src << "\red The vent you were heading to appears to be welded."
|
||||
src.loc = target_vent.loc
|
||||
for(var/obj/alien/facehugger/F in huggers)
|
||||
F.loc = src.loc
|
||||
@@ -166,14 +166,14 @@
|
||||
set category = "Alien"
|
||||
|
||||
if(src.stat)
|
||||
src << "\green You must be conscious to do this"
|
||||
src << "\green You must be conscious to do this."
|
||||
return
|
||||
if(src.toxloss >= 50)
|
||||
src.toxloss -= 50
|
||||
src.alien_invis = 1.0
|
||||
src << "\green You are now invisible."
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O.show_message(text("\green <B>[src] fades into the surroundings!</B>"), 1)
|
||||
for(var/mob/O in oviewers(src, null))
|
||||
O.show_message(text("\red <B>[src] fades into the surroundings!</B>"), 1)
|
||||
spawn(150)
|
||||
src.alien_invis = 0.0
|
||||
src << "\green You are no longer invisible."
|
||||
@@ -181,68 +181,22 @@
|
||||
src << "\green Not enough plasma stored"
|
||||
return
|
||||
|
||||
/mob/living/carbon/alien/humanoid/hunter/verb/ventcrawl() // -- TLE
|
||||
set name = "Crawl through Vent"
|
||||
set desc = "Enter an air vent and appear at a random one"
|
||||
/mob/living/carbon/alien/humanoid/hunter/verb/regurgitate()
|
||||
set name = "Regurgitate"
|
||||
set desc = "Empties the contents of your stomach"
|
||||
set category = "Alien"
|
||||
// if(!istype(V,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent))
|
||||
// return
|
||||
|
||||
if(src.stat)
|
||||
src << "\green You must be conscious to do this."
|
||||
return
|
||||
var/vent_found = 0
|
||||
for(var/obj/machinery/atmospherics/unary/vent_pump/v in range(1,src))
|
||||
if(!v.welded)
|
||||
vent_found = v
|
||||
|
||||
if(!vent_found)
|
||||
src << "\green You must be standing on or beside an open air vent to enter it."
|
||||
return
|
||||
var/list/vents = list()
|
||||
for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in world)
|
||||
if(temp_vent.loc == src.loc)
|
||||
continue
|
||||
if(temp_vent.welded)
|
||||
continue
|
||||
vents.Add(temp_vent)
|
||||
var/list/choices = list()
|
||||
for(var/obj/machinery/atmospherics/unary/vent_pump/vent in vents)
|
||||
if(vent.loc.z != src.loc.z)
|
||||
continue
|
||||
if(vent.welded)
|
||||
continue
|
||||
var/atom/a = get_turf_loc(vent)
|
||||
choices.Add(a.loc)
|
||||
var/turf/startloc = src.loc
|
||||
var/obj/selection = input("Select a destination.", "Duct System") in choices
|
||||
var/selection_position = choices.Find(selection)
|
||||
if(src.loc != startloc)
|
||||
src << "\green You need to remain still while entering a vent."
|
||||
return
|
||||
var/obj/machinery/atmospherics/unary/vent_pump/target_vent = vents[selection_position]
|
||||
if(target_vent)
|
||||
if(src.stomach_contents.len)
|
||||
for(var/mob/M in src)
|
||||
if(M in src.stomach_contents)
|
||||
src.stomach_contents.Remove(M)
|
||||
M.loc = src.loc
|
||||
M.paralysis += 10
|
||||
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O.show_message(text("<B>[src] scrambles into the ventillation ducts!</B>"), 1)
|
||||
var/list/huggers = list()
|
||||
for(var/obj/alien/facehugger/F in view(3, src))
|
||||
if(istype(F, /obj/alien/facehugger))
|
||||
huggers.Add(F)
|
||||
|
||||
src.loc = vent_found
|
||||
for(var/obj/alien/facehugger/F in huggers)
|
||||
F.loc = vent_found
|
||||
var/travel_time = get_dist(src.loc, target_vent.loc)
|
||||
|
||||
spawn(round(travel_time/2))//give sound warning to anyone near the target vent
|
||||
if(!target_vent.welded)
|
||||
for(var/mob/O in hearers(target_vent, null))
|
||||
O.show_message("You hear something crawling trough the ventilation pipes.")
|
||||
|
||||
spawn(travel_time)
|
||||
if(target_vent.welded)//the vent can be welded while alien scrolled through the list or travelled.
|
||||
target_vent = vent_found //travel back. No additional time required.
|
||||
src << "\red The vent you were heading to appears to be welded."
|
||||
src.loc = target_vent.loc
|
||||
for(var/obj/alien/facehugger/F in huggers)
|
||||
F.loc = src.loc
|
||||
O.show_message(text("\green <B>[src] hurls out the contents of their stomach.</B>"), 1)
|
||||
return
|
||||
@@ -2,6 +2,7 @@
|
||||
spawn (1)
|
||||
src.verbs += /mob/living/carbon/alien/humanoid/proc/corrode_target
|
||||
src.verbs += /mob/living/carbon/alien/humanoid/sentinel/verb/spit
|
||||
src.verbs -= /mob/living/carbon/alien/humanoid/verb/ventcrawl
|
||||
var/datum/reagents/R = new/datum/reagents(100)
|
||||
reagents = R
|
||||
R.my_atom = src
|
||||
|
||||
@@ -451,6 +451,9 @@
|
||||
for(var/mob/N in viewers(user, null))
|
||||
if(N.client)
|
||||
N.show_message(text("\red <B>[user] is attempting to devour [src.affecting]!</B>"), 1)
|
||||
if(istype(user, /mob/living/carbon/alien/humanoid/hunter))
|
||||
if(!do_mob(user, src.affecting)||!do_after(user, 30)) return
|
||||
else
|
||||
if(!do_mob(user, src.affecting)||!do_after(user, 100)) return
|
||||
for(var/mob/N in viewers(user, null))
|
||||
if(N.client)
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 6.0 KiB |
@@ -89,6 +89,7 @@
|
||||
#define FILE_DIR "code/modules/mob/living/carbon/alien/larva"
|
||||
#define FILE_DIR "code/modules/mob/living/carbon/beast"
|
||||
#define FILE_DIR "code/modules/mob/living/carbon/human"
|
||||
#define FILE_DIR "code/modules/mob/living/carbon/human/Vampire"
|
||||
#define FILE_DIR "code/modules/mob/living/carbon/monkey"
|
||||
#define FILE_DIR "code/modules/mob/living/silicon"
|
||||
#define FILE_DIR "code/modules/mob/living/silicon/ai"
|
||||
@@ -310,18 +311,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\spell10.dm"
|
||||
#include "code\game\gamemodes\wizard\spell11.dm"
|
||||
#include "code\game\gamemodes\wizard\spell12.dm"
|
||||
#include "code\game\gamemodes\wizard\spell13.dm"
|
||||
#include "code\game\gamemodes\wizard\spell14.dm"
|
||||
#include "code\game\gamemodes\wizard\spell2.dm"
|
||||
#include "code\game\gamemodes\wizard\spell3.dm"
|
||||
#include "code\game\gamemodes\wizard\spell4.dm"
|
||||
#include "code\game\gamemodes\wizard\spell6.dm"
|
||||
#include "code\game\gamemodes\wizard\spell7.dm"
|
||||
#include "code\game\gamemodes\wizard\spell8.dm"
|
||||
#include "code\game\gamemodes\wizard\spell9.dm"
|
||||
#include "code\game\gamemodes\wizard\spells.dm"
|
||||
#include "code\game\gamemodes\wizard\wizard.dm"
|
||||
#include "code\game\jobs\access.dm"
|
||||
#include "code\game\jobs\jobprocs.dm"
|
||||
@@ -642,6 +632,8 @@
|
||||
#include "code\modules\mob\living\carbon\human\savefile.dm"
|
||||
#include "code\modules\mob\living\carbon\human\say.dm"
|
||||
#include "code\modules\mob\living\carbon\human\whisper.dm"
|
||||
#include "code\modules\mob\living\carbon\human\Vampire\vampire.dm"
|
||||
#include "code\modules\mob\living\carbon\human\Vampire\vampire_powers.dm"
|
||||
#include "code\modules\mob\living\carbon\monkey\death.dm"
|
||||
#include "code\modules\mob\living\carbon\monkey\emote.dm"
|
||||
#include "code\modules\mob\living\carbon\monkey\examine.dm"
|
||||
|
||||
Reference in New Issue
Block a user