diff --git a/code/datums/mind.dm b/code/datums/mind.dm
index 5457a2832c3..afd7e566b97 100644
--- a/code/datums/mind.dm
+++ b/code/datums/mind.dm
@@ -560,7 +560,7 @@ datum/mind
if(!(src in ticker.mode.wizards))
ticker.mode.wizards += src
special_role = "Wizard"
- ticker.mode.learn_basic_spells(current)
+ //ticker.mode.learn_basic_spells(current)
current << "\red You are the Space Wizard!"
if("lair")
current.loc = pick(wizardstart)
diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm
index cd0aaf6b0bf..9a2f05631d4 100644
--- a/code/defines/obj/weapon.dm
+++ b/code/defines/obj/weapon.dm
@@ -939,7 +939,7 @@
throw_range = 5
w_class = 1.0
flags = FPRINT | TABLEPASS
- var/uses = 4.0
+ var/uses = 5.0
var/temp = null
var/spell_type = "verb"
var/max_uses = 5
diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm
index 9da0da4711b..ec02105063f 100644
--- a/code/game/gamemodes/wizard/spellbook.dm
+++ b/code/game/gamemodes/wizard/spellbook.dm
@@ -13,7 +13,7 @@
dat += "Memorize which spell:
"
dat += "The number after the spell name is the cooldown time.
"
dat += "Magic Missile (10)
"
- dat += "Fireball (10)
"
+ dat += "Fireball (20)
"
// dat += "Disintegrate (60)
"
dat += "Disable Technology (60)
"
dat += "Smoke (10)
"
@@ -26,7 +26,12 @@
dat += "Ethereal Jaunt (60)
"
dat += "Knock (10)
"
dat += "
"
- dat += "Re-memorize Spells
"
+ dat += "Artefacts:
"
+ dat += "Powerful items imbued with eldritch magics. Summoning one will count towards your maximum number of spells.
"
+ dat += "
"
+ dat += "Staff of Change
"
+ dat += "
"
+ dat += "Re-memorize Spells
"
user << browse(dat, "window=radio")
onclose(user, "radio")
return
@@ -97,6 +102,10 @@
usr.verbs += /client/proc/knock
usr.mind.special_verbs += /client/proc/knock
src.temp = "This spell opens nearby doors and does not require wizard garb."
+ if ("14")
+ new /obj/item/weapon/gun/energy/staff(get_turf(usr))
+ src.temp = "An artefact that spits bolts of coruscating energy which cause the target's very form to reshape itself"
+ src.max_uses--
else if(spell_type == "object")
var/list/available_spells = list("Magic Missile","Fireball","Disintegrate","Disable Tech","Smoke","Blind","Mind Transfer","Forcewall","Blink","Teleport","Mutate","Ethereal Jaunt","Knock")
var/already_knows = 0
@@ -147,7 +156,11 @@
if ("13")
usr.spell_list += new /obj/effect/proc_holder/spell/aoe_turf/knock(usr)
src.temp = "This spell opens nearby doors and does not require wizard garb."
- if (href_list["spell_choice"] == "14")
+ if ("14")
+ new /obj/item/weapon/gun/energy/staff(get_turf(usr))
+ src.temp = "An artefact that spits bolts of coruscating energy which cause the target's very form to reshape itself"
+ src.max_uses--
+ if (href_list["spell_choice"] == "15")
var/area/wizard_station/A = locate()
if(usr in A.contents)
src.uses = src.max_uses
diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm
index 08c6654f2d9..3105aeb210b 100644
--- a/code/game/gamemodes/wizard/wizard.dm
+++ b/code/game/gamemodes/wizard/wizard.dm
@@ -50,7 +50,7 @@
/datum/game_mode/wizard/post_setup()
for(var/datum/mind/wizard in wizards)
forge_wizard_objectives(wizard)
- learn_basic_spells(wizard.current)
+ //learn_basic_spells(wizard.current)
equip_wizard(wizard.current)
name_wizard(wizard.current)
greet_wizard(wizard)
@@ -141,7 +141,7 @@
return
-/datum/game_mode/proc/learn_basic_spells(mob/living/carbon/human/wizard_mob)
+/*/datum/game_mode/proc/learn_basic_spells(mob/living/carbon/human/wizard_mob)
if (!istype(wizard_mob))
return
if(!config.feature_object_spell_system)
@@ -149,7 +149,7 @@
wizard_mob.mind.special_verbs += /client/proc/jaunt
else
wizard_mob.spell_list += new /obj/effect/proc_holder/spell/targeted/ethereal_jaunt(usr)
-
+*/
/datum/game_mode/proc/equip_wizard(mob/living/carbon/human/wizard_mob)
if (!istype(wizard_mob))
@@ -178,7 +178,7 @@
wizard_mob.equip_if_possible(new /obj/item/weapon/spellbook(wizard_mob), wizard_mob.slot_r_hand)
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 << "In your pockets you will find a teleport scroll. Use it as needed."
wizard_mob.mind.store_memory("Remember: do not forget to prepare your spells.")
return 1
diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm
index a22cbfddb6f..81e106bc1d1 100644
--- a/code/game/machinery/portable_turret.dm
+++ b/code/game/machinery/portable_turret.dm
@@ -500,6 +500,21 @@ Neutralize All Unidentified Life Signs: []
"},
if(!emagged) use_power(700)
else use_power(1400)
+ else if(istype(E, /obj/item/weapon/gun/energy/staff))
+ A = new /obj/item/projectile/change( loc )
+ A.original = target.loc
+ icon_state = "target_prism"
+ if(!emagged) use_power(700)
+ else use_power(1400)
+
+ else if(istype(E, /obj/item/weapon/gun/energy/ionrifle))
+ A = new /obj/item/projectile/ion( loc )
+ A.original = target.loc
+ icon_state = "target_prism"
+ if(!emagged) use_power(700)
+ else use_power(1400)
+
+
else if(istype(E, /obj/item/weapon/gun/energy/taser) || istype(E, /obj/item/weapon/gun/energy/stunrevolver))
A = new /obj/item/projectile/energy/electrode( loc )
icon_state = "target_prism"
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 0fc8d0c57e9..18d2e7c5d6f 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -30,49 +30,52 @@
if ((usr.mutations & CLUMSY) && prob(50))
usr << "\red Uh ... how do those things work?!"
if (istype(M, /mob/living/carbon/human))
- var/obj/effect/equip_e/human/O = new /obj/effect/equip_e/human( )
- O.source = user
- O.target = user
- O.item = user.equipped()
- O.s_loc = user.loc
- O.t_loc = user.loc
- O.place = "handcuff"
- M.requests += O
- spawn( 0 )
- O.process()
- return
+ if(!M.handcuffed)
+ var/obj/effect/equip_e/human/O = new /obj/effect/equip_e/human( )
+ O.source = user
+ O.target = user
+ O.item = user.equipped()
+ O.s_loc = user.loc
+ O.t_loc = user.loc
+ O.place = "handcuff"
+ M.requests += O
+ spawn( 0 )
+ O.process()
+ return
return
if (!(istype(usr, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey")
usr << "\red You don't have the dexterity to do this!"
return
if (istype(M, /mob/living/carbon/human))
- M.attack_log += text("\[[time_stamp()]\] Has been handcuffed (attempt) by [user.name] ([user.ckey])")
- user.attack_log += text("\[[time_stamp()]\] Attempted to handcuff [M.name] ([M.ckey])")
- var/obj/effect/equip_e/human/O = new /obj/effect/equip_e/human( )
- O.source = user
- O.target = M
- O.item = user.equipped()
- O.s_loc = user.loc
- O.t_loc = M.loc
- O.place = "handcuff"
- M.requests += O
- spawn( 0 )
- playsound(src.loc, 'handcuffs.ogg', 30, 1, -2)
- O.process()
- return
+ if(!M.handcuffed)
+ M.attack_log += text("\[[time_stamp()]\] Has been handcuffed (attempt) by [user.name] ([user.ckey])")
+ user.attack_log += text("\[[time_stamp()]\] Attempted to handcuff [M.name] ([M.ckey])")
+ var/obj/effect/equip_e/human/O = new /obj/effect/equip_e/human( )
+ O.source = user
+ O.target = M
+ O.item = user.equipped()
+ O.s_loc = user.loc
+ O.t_loc = M.loc
+ O.place = "handcuff"
+ M.requests += O
+ spawn( 0 )
+ playsound(src.loc, 'handcuffs.ogg', 30, 1, -2)
+ O.process()
+ return
else
- var/obj/effect/equip_e/monkey/O = new /obj/effect/equip_e/monkey( )
- O.source = user
- O.target = M
- O.item = user.equipped()
- O.s_loc = user.loc
- O.t_loc = M.loc
- O.place = "handcuff"
- M.requests += O
- spawn( 0 )
- playsound(src.loc, 'handcuffs.ogg', 30, 1, -2)
- O.process()
- return
+ if(!M.handcuffed)
+ var/obj/effect/equip_e/monkey/O = new /obj/effect/equip_e/monkey( )
+ O.source = user
+ O.target = M
+ O.item = user.equipped()
+ O.s_loc = user.loc
+ O.t_loc = M.loc
+ O.place = "handcuff"
+ M.requests += O
+ spawn( 0 )
+ playsound(src.loc, 'handcuffs.ogg', 30, 1, -2)
+ O.process()
+ return
return
@@ -497,4 +500,4 @@
if(exposed_temperature >= 373.15)
for(var/mob/M in viewers(5, src))
M << "\red \the [src] burns up."
- del(src)
\ No newline at end of file
+ del(src)
diff --git a/code/game/objects/radio/radio.dm b/code/game/objects/radio/radio.dm
index e183ff2d46e..6cb102391d0 100644
--- a/code/game/objects/radio/radio.dm
+++ b/code/game/objects/radio/radio.dm
@@ -818,4 +818,4 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use
channels = op
for (var/ch_name in op)
secure_radio_connections[ch_name] = radio_controller.add_object(src, radiochannels[ch_name], RADIO_CHAT)
- return
\ No newline at end of file
+ return
diff --git a/code/game/objects/tanks/jetpack.dm b/code/game/objects/tanks/jetpack.dm
index 07034dcd94e..794e6a10dba 100644
--- a/code/game/objects/tanks/jetpack.dm
+++ b/code/game/objects/tanks/jetpack.dm
@@ -2,7 +2,7 @@
/obj/item/weapon/tank/jetpack
name = "Jetpack (Oxygen)"
desc = "A tank of compressed oxygen for use as propulsion in zero-gravity areas. Use with caution."
- icon_state = "jetpack0"
+ icon_state = "jetpack"
w_class = 4.0
item_state = "jetpack"
distribute_pressure = ONE_ATMOSPHERE*O2STANDARD
@@ -83,12 +83,12 @@
/obj/item/weapon/tank/jetpack/void_jetpack
name = "Void Jetpack (Oxygen)"
desc = "It works well in a void."
- icon_state = "voidjetpack0"
+ icon_state = "jetpack-void"
item_state = "jetpack-void"
/obj/item/weapon/tank/jetpack/black_jetpack
name = "Black Jetpack (Oxygen)"
desc = "A black model of jetpacks."
- icon_state = "black_jetpack0"
+ icon_state = "jetpack-black"
item_state = "jetpack-black"
diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm
index 3e03a28f4a5..38735065726 100644
--- a/code/modules/admin/verbs/randomverbs.dm
+++ b/code/modules/admin/verbs/randomverbs.dm
@@ -388,7 +388,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
ticker.mode.equip_traitor(new_character)
if("Wizard")
new_character.loc = pick(wizardstart)
- ticker.mode.learn_basic_spells(new_character)
+ //ticker.mode.learn_basic_spells(new_character)
ticker.mode.equip_wizard(new_character)
if("Syndicate")
var/obj/effect/landmark/synd_spawn = locate("landmark*Syndicate-Spawn")
diff --git a/code/modules/chemical/Chemistry-Reagents.dm b/code/modules/chemical/Chemistry-Reagents.dm
index e2566516f6e..d0186db8897 100644
--- a/code/modules/chemical/Chemistry-Reagents.dm
+++ b/code/modules/chemical/Chemistry-Reagents.dm
@@ -450,7 +450,7 @@ datum
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.druggy = max(M.druggy, 15)
- if(isturf(M.loc))
+ if(isturf(M.loc) && !istype(M.loc, /turf/space))
if(M.canmove)
if(prob(10)) step(M, pick(cardinal))
if(prob(7)) M:emote(pick("twitch","drool","moan","giggle"))
@@ -579,7 +579,8 @@ datum
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
- if(M.canmove) step(M, pick(cardinal))
+ if(M.canmove && istype(M.loc, /turf/space))
+ step(M, pick(cardinal))
if(prob(5)) M:emote(pick("twitch","drool","moan"))
..()
return
@@ -652,7 +653,8 @@ datum
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
- if(M.canmove) step(M, pick(cardinal))
+ if(M.canmove && istype(M.loc, /turf/space))
+ step(M, pick(cardinal))
if(prob(5)) M:emote(pick("twitch","drool","moan"))
..()
return
diff --git a/code/modules/clothing/suits/robe.dm b/code/modules/clothing/suits/robe.dm
index fe5d5ca3c29..f393718186d 100644
--- a/code/modules/clothing/suits/robe.dm
+++ b/code/modules/clothing/suits/robe.dm
@@ -19,6 +19,13 @@
desc = "Strange-looking hat-wear, makes you want to cast fireballs."
icon_state = "marisa"
+/obj/item/clothing/head/wizard/magus
+ name = "Magus Helm"
+ desc = "A mysterious helmet that hums with an unearthly power"
+ icon_state = "magus"
+ item_state = "magus"
+
+
/obj/item/clothing/suit/wizrobe
name = "wizard robe"
desc = "A magnificant, gem-lined robe that seems to radiate power."
diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm
index 87177caa61a..8cc04a4d2b0 100644
--- a/code/modules/mob/living/carbon/monkey/monkey.dm
+++ b/code/modules/mob/living/carbon/monkey/monkey.dm
@@ -604,6 +604,7 @@
if (prob(50))
Paralyse(10)
+
/obj/effect/equip_e/monkey/process()
if (item)
item.add_fingerprint(source)
diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm
index 8af1a2bd5fb..6a9a228a716 100644
--- a/code/modules/mob/living/say.dm
+++ b/code/modules/mob/living/say.dm
@@ -257,8 +257,8 @@
italics = 1
if("changeling")
if(src.changeling)
- for(var/mob/living/carbon/aChangeling in world)
- if(aChangeling.changeling)
+ for(var/mob/aChangeling in world)
+ if(aChangeling.changeling || istype(aChangeling, /mob/dead/observer))
aChangeling << "[gender=="male"?"Mr.":"Mrs."] [changeling.changelingID]: [message]"
return
////SPECIAL HEADSETS START
diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm
index c3b345a278c..5bbf52b0fc8 100644
--- a/code/modules/projectiles/guns/energy/special.dm
+++ b/code/modules/projectiles/guns/energy/special.dm
@@ -24,9 +24,11 @@ obj/item/weapon/gun/energy/staff
name = "staff of change"
desc = "an artefact that spits bolts of coruscating energy which cause the target's very form to reshape itself"
icon = 'gun.dmi'
- icon_state = "staff"
- item_state = "staff"
+ icon_state = "staffofchange"
+ item_state = "staffofchange"
fire_sound = 'emitter.ogg'
+ flags = FPRINT | TABLEPASS | CONDUCT | ONBACK
+ w_class = 4.0
charge_cost = 200
projectile_type = "/obj/item/projectile/change"
origin_tech = null
diff --git a/icons/mob/back.dmi b/icons/mob/back.dmi
index a0886e9754e..cf2da656e67 100644
Binary files a/icons/mob/back.dmi and b/icons/mob/back.dmi differ
diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi
index bd46dc4da96..f99e3e1358e 100644
Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ
diff --git a/icons/mob/items_lefthand.dmi b/icons/mob/items_lefthand.dmi
index 44f8b7ed778..d8d23cf47bf 100644
Binary files a/icons/mob/items_lefthand.dmi and b/icons/mob/items_lefthand.dmi differ
diff --git a/icons/mob/items_righthand.dmi b/icons/mob/items_righthand.dmi
index 9d3778ef16b..367398d5870 100644
Binary files a/icons/mob/items_righthand.dmi and b/icons/mob/items_righthand.dmi differ
diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi
index 74cc49ed4c1..6b72090bf12 100644
Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ