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:
noisomehollow@lycos.com
2011-01-08 01:33:32 +00:00
parent 28b6c40b3c
commit 13fe524141
22 changed files with 954 additions and 773 deletions

View File

@@ -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)

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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()

View File

@@ -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

View File

@@ -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()

View File

@@ -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()

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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()

View File

@@ -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

View File

@@ -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

View 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

View File

@@ -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.*/

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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"