diff --git a/baystation12.dme b/baystation12.dme
index 7aa66972893..b5236c88e00 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -154,6 +154,7 @@
#include "code\datums\spells\area_teleport.dm"
#include "code\datums\spells\charge.dm"
#include "code\datums\spells\conjure.dm"
+#include "code\datums\spells\construct_spells.dm"
#include "code\datums\spells\dumbfire.dm"
#include "code\datums\spells\emplosion.dm"
#include "code\datums\spells\ethereal_jaunt.dm"
diff --git a/code/datums/spells/charge.dm b/code/datums/spells/charge.dm
index 31a3d3c999f..c1fa2866b67 100644
--- a/code/datums/spells/charge.dm
+++ b/code/datums/spells/charge.dm
@@ -48,6 +48,9 @@
I.max_charges = 0
burnt_out = 1
I.charges = I.max_charges
+ if(istype(item,/obj/item/weapon/gun/magic/wand) && I.max_charges != 0)
+ var/obj/item/weapon/gun/magic/W = item
+ W.icon_state = initial(W.icon_state)
charged_item = I
break
else if(istype(item, /obj/item/weapon/cell/))
diff --git a/code/game/gamemodes/wizard/rightandwrong.dm b/code/game/gamemodes/wizard/rightandwrong.dm
index 68188237180..ba5f062ada4 100644
--- a/code/game/gamemodes/wizard/rightandwrong.dm
+++ b/code/game/gamemodes/wizard/rightandwrong.dm
@@ -7,7 +7,7 @@
if(H.stat == 2 || !(H.client)) continue
if(H.mind)
if(H.mind.special_role == "Wizard" || H.mind.special_role == "apprentice") continue
- if(prob(25))
+ if(prob(25) && !(H.mind in ticker.mode.traitors))
ticker.mode.traitors += H.mind
H.mind.special_role = "traitor"
var/datum/objective/survive/survive = new
@@ -20,7 +20,7 @@
H << "Objective #[obj_count]: [OBJ.explanation_text]"
obj_count++
var/randomizeguns = pick("taser","egun","laser","revolver","detective","smg","nuclear","deagle","gyrojet","pulse","silenced","cannon","doublebarrel","shotgun","combatshotgun","mateba","smg","uzi","crossbow","saw")
- var/randomizemagic = pick("fireball","smoke","blind","mindswap","forcewall","knock","horsemask","charge","wandnothing", "wanddeath", "wandresurrection", "wandpolymorph", "wandteleport", "wanddoor", "wandfireball", "staffchange", "staffanimation", "staffhealing", "armor", "scrying")
+ var/randomizemagic = pick("fireball","smoke","blind","mindswap","forcewall","knock","horsemask","charge","wandnothing", "wanddeath", "wandresurrection", "wandpolymorph", "wandteleport", "wanddoor", "wandfireball", "staffchange", "staffhealing", "armor", "scrying")
if(!summon_type)
switch (randomizeguns)
if("taser")
@@ -96,8 +96,6 @@
new /obj/item/weapon/gun/magic/wand/door(get_turf(H))
if("staffchange")
new /obj/item/weapon/gun/magic/staff/change(get_turf(H))
- if("staffanimation")
- new /obj/item/weapon/gun/magic/staff/animate(get_turf(H))
if("staffhealing")
new /obj/item/weapon/gun/magic/staff/healing(get_turf(H))
if("armor")
diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm
index d1cc979f48c..fe52f46c618 100644
--- a/code/game/machinery/vending.dm
+++ b/code/game/machinery/vending.dm
@@ -795,7 +795,7 @@
/obj/item/clothing/suit/wizrobe/fake = 1,/obj/item/clothing/head/wizard/fake = 1,/obj/item/weapon/staff = 3,/obj/item/clothing/mask/gas/sexyclown = 1,
/obj/item/clothing/under/sexyclown = 1,/obj/item/clothing/mask/gas/sexymime = 1,/obj/item/clothing/under/sexymime = 1,/obj/item/clothing/suit/apron/overalls = 1,
/obj/item/clothing/head/rabbitears =1) //Pretty much everything that had a chance to spawn.
- contraband = list(/obj/item/clothing/suit/cardborg = 1,/obj/item/clothing/head/cardborg = 1,/obj/item/clothing/suit/judgerobe = 1,/obj/item/clothing/head/powdered_wig = 1)
+ contraband = list(/obj/item/clothing/suit/cardborg = 1,/obj/item/clothing/head/cardborg = 1,/obj/item/clothing/suit/judgerobe = 1,/obj/item/clothing/head/powdered_wig = 1,/obj/item/weapon/gun/magic/wand = 1)
premium = list(/obj/item/clothing/suit/hgpirate = 1, /obj/item/clothing/head/hgpiratecap = 1, /obj/item/clothing/head/helmet/roman = 1, /obj/item/clothing/head/helmet/roman/legionaire = 1, /obj/item/clothing/under/roman = 1, /obj/item/clothing/shoes/roman = 1, /obj/item/weapon/shield/riot/roman = 1)
refill_canister = /obj/item/weapon/vending_refill/autodrobe
/obj/machinery/vending/dinnerware
diff --git a/code/modules/admin/secrets.dm b/code/modules/admin/secrets.dm
index 95a15b83e8a..e7521400f93 100644
--- a/code/modules/admin/secrets.dm
+++ b/code/modules/admin/secrets.dm
@@ -117,6 +117,8 @@
Make all items look like guns
Japanese Animes Mode
Egalitarian Station Mode
+ Summon Guns
+ Summon Magic
Change Security Level To Green
Change Security Level To Blue
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index cb40adac04f..c1b0b41fc1f 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -2274,6 +2274,14 @@
feedback_add_details("admin_secrets_fun_used","OO")
usr.client.only_one()
// message_admins("[key_name_admin(usr)] has triggered a battle to the death (only one)")
+ if("guns")
+ feedback_inc("admin_secrets_fun_used",1)
+ feedback_add_details("admin_secrets_fun_used","SG")
+ usr.rightandwrong(0)
+ if("magic")
+ feedback_inc("admin_secrets_fun_used",1)
+ feedback_add_details("admin_secrets_fun_used","SM")
+ usr.rightandwrong(1)
if("securitylevel0")
set_security_level(0)
message_admins("\blue [key_name_admin(usr)] change security level to Green.", 1)
diff --git a/code/modules/projectiles/guns/magic/wand.dm b/code/modules/projectiles/guns/magic/wand.dm
index f83a0206be7..c14e9f73f75 100644
--- a/code/modules/projectiles/guns/magic/wand.dm
+++ b/code/modules/projectiles/guns/magic/wand.dm
@@ -2,7 +2,7 @@
name = "wand of nothing"
desc = "It's not just a stick, it's a MAGIC stick!"
projectile_type = "/obj/item/projectile/magic"
- icon_state = "wand6"
+ icon_state = "nothingwand"
item_state = "wand"
w_class = 2
can_charge = 0
@@ -35,11 +35,12 @@
..()
/obj/item/weapon/gun/magic/wand/afterattack(atom/target as mob, mob/living/user as mob)
+ if(!charges)
+ user << "The [name] whizzles quietly."
+ icon_state = "[icon_state]-drained"
+ return
if(target == user)
- if(charges)
- zap_self(user)
- else
- user << "The [name] whizzles quietly."
+ zap_self(user)
else
..()
@@ -50,7 +51,7 @@
name = "wand of death"
desc = "This deadly wand overwhelms the victim's body with pure energy, slaying them without fail."
projectile_type = "/obj/item/projectile/magic/death"
- icon_state = "wand4"
+ icon_state = "deathwand"
max_charges = 3 //3, 2, 2, 1
/obj/item/weapon/gun/magic/wand/death/zap_self(mob/living/user as mob)
@@ -66,7 +67,7 @@
name = "wand of resurrection"
desc = "This wand uses healing magics to heal and revive. They are rarely utilized within the Wizard Federation for some reason."
projectile_type = "/obj/item/projectile/magic/resurrection"
- icon_state = "wand1"
+ icon_state = "revivewand"
max_charges = 3 //3, 2, 2, 1
/obj/item/weapon/gun/magic/wand/resurrection/zap_self(mob/living/user as mob)
@@ -87,7 +88,7 @@
name = "wand of polymorph"
desc = "This wand is attuned to chaos and will radically alter the victim's form."
projectile_type = "/obj/item/projectile/magic/change"
- icon_state = "wand5"
+ icon_state = "polywand"
max_charges = 10 //10, 5, 5, 4
/obj/item/weapon/gun/magic/wand/polymorph/zap_self(mob/living/user as mob)
@@ -100,7 +101,7 @@
name = "wand of teleportation"
desc = "This wand will wrench targets through space and time to move them somewhere else."
projectile_type = "/obj/item/projectile/magic/teleport"
- icon_state = "wand3"
+ icon_state = "telewand"
max_charges = 10 //10, 5, 5, 4
/obj/item/weapon/gun/magic/wand/teleport/zap_self(mob/living/user as mob)
@@ -115,7 +116,7 @@
name = "wand of door creation"
desc = "This particular wand can create doors in any wall for the unscrupulous wizard who shuns teleportation magics."
projectile_type = "/obj/item/projectile/magic/door"
- icon_state = "wand0"
+ icon_state = "doorwand"
max_charges = 20 //20, 10, 10, 7
/obj/item/weapon/gun/magic/wand/door/zap_self()
@@ -125,7 +126,7 @@
name = "wand of fireball"
desc = "This wand shoots scorching balls of fire that explode into destructive flames."
projectile_type = "/obj/item/projectile/magic/fireball"
- icon_state = "wand2"
+ icon_state = "firewand"
max_charges = 8 //8, 4, 4, 3
/obj/item/weapon/gun/magic/wand/fireball/zap_self(mob/living/user as mob)
diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm
index 79a6652bff2..dd53a21e051 100644
--- a/code/modules/projectiles/projectile/magic.dm
+++ b/code/modules/projectiles/projectile/magic.dm
@@ -38,21 +38,26 @@
if(istype(target,/mob))
var/old_stat = target.stat
- if(target.stat == DEAD)
- dead_mob_list -= target
- living_mob_list += target
- target.stat = CONSCIOUS
- target.tod = null
- target.setToxLoss(0)
- target.setOxyLoss(0)
- target.setCloneLoss(0)
- target.SetParalysis(0)
- target.SetStunned(0)
- target.SetWeakened(0)
- target.radiation = 0
- target.heal_overall_damage(target.getBruteLoss(), target.getFireLoss())
- target.reagents.clear_reagents()
- target.suiciding = 0
+ if(isanimal(target) && target.stat == DEAD)
+ var/mob/living/simple_animal/O = target
+ var/mob/living/simple_animal/A = new O.type(O.loc)
+ A.real_name = O.real_name
+ A.name = O.name
+ if(iscorgi(O))
+ var/mob/living/simple_animal/corgi/C = O
+ if(C.inventory_head)
+ C.inventory_head.loc = C.loc
+ if(C.inventory_back)
+ C.inventory_back.loc = C.loc
+ if(O.mind)
+ O.mind.transfer_to(A)
+ else
+ A.key = O.key
+ del(O)
+ target = A
+ else
+ target.revive()
+ target.suiciding = 0
if(!target.ckey)
for(var/mob/dead/observer/ghost in player_list)
if(target.real_name == ghost.real_name)
diff --git a/icons/obj/gun.dmi b/icons/obj/gun.dmi
index ea59b17e8ae..96c8a1cd18d 100644
Binary files a/icons/obj/gun.dmi and b/icons/obj/gun.dmi differ
diff --git a/icons/obj/library.dmi b/icons/obj/library.dmi
index 4e8f312a1ce..f76a3ab4e3f 100644
Binary files a/icons/obj/library.dmi and b/icons/obj/library.dmi differ