Revert "12/21 modernizations from TG live"

This commit is contained in:
LetterJay
2016-12-22 22:35:44 -06:00
committed by GitHub
parent cf59ac1c3d
commit ae40d4134e
2215 changed files with 86928 additions and 707332 deletions
+86 -131
View File
@@ -11,7 +11,7 @@
item_state = "render"
force = 15
throwforce = 10
w_class = WEIGHT_CLASS_NORMAL
w_class = 3
hitsound = 'sound/weapons/bladeslice.ogg'
var/charges = 1
var/spawn_type = /obj/singularity/wizard
@@ -34,6 +34,7 @@
icon = 'icons/obj/biomass.dmi'
icon_state = "rift"
density = 1
unacidable = 1
anchored = 1
var/spawn_path = /mob/living/simple_animal/cow //defaulty cows to prevent unintentional narsies
var/spawn_amt_left = 20
@@ -86,6 +87,8 @@
/obj/singularity/wizard
name = "tear in the fabric of reality"
desc = "This isn't right."
icon = 'icons/obj/singularity.dmi'
icon_state = "singularity_s1"
icon = 'icons/effects/224x224.dmi'
icon_state = "reality"
pixel_x = -96
@@ -128,7 +131,7 @@
icon_state = "necrostone"
item_state = "electronic"
origin_tech = "bluespace=4;materials=4"
w_class = WEIGHT_CLASS_TINY
w_class = 1
var/list/spooky_scaries = list()
var/unlimited = 0
@@ -159,7 +162,7 @@
M.revive(full_heal = 1, admin_revive = 1)
spooky_scaries |= M
M << "<span class='userdanger'>You have been revived by </span><B>[user.real_name]!</B>"
M << "<span class='userdanger'>[user.p_they(TRUE)] [user.p_are()] your master now, assist them even if it costs you your new life!</span>"
M << "<span class='userdanger'>They are your master now, assist them even if it costs you your new life!</span>"
equip_roman_skeleton(M)
@@ -170,7 +173,7 @@
return
for(var/X in spooky_scaries)
if(!ishuman(X))
if(!istype(X, /mob/living/carbon/human))
spooky_scaries.Remove(X)
continue
var/mob/living/carbon/human/H = X
@@ -188,8 +191,8 @@
H.equip_to_slot_or_del(new hat(H), slot_head)
H.equip_to_slot_or_del(new /obj/item/clothing/under/roman(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/roman(H), slot_shoes)
H.put_in_hands_or_del(new /obj/item/weapon/shield/riot/roman(H))
H.put_in_hands_or_del(new /obj/item/weapon/claymore(H))
H.equip_to_slot_or_del(new /obj/item/weapon/shield/riot/roman(H), slot_l_hand)
H.equip_to_slot_or_del(new /obj/item/weapon/claymore(H), slot_r_hand)
H.equip_to_slot_or_del(new /obj/item/weapon/twohanded/spear(H), slot_back)
@@ -206,14 +209,14 @@ var/global/list/multiverse = list()
hitsound = 'sound/weapons/bladeslice.ogg'
flags = CONDUCT
slot_flags = SLOT_BELT
sharpness = IS_SHARP
force = 20
throwforce = 10
w_class = WEIGHT_CLASS_NORMAL
w_class = 2
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
var/faction = list("unassigned")
var/cooldown = 0
var/assigned = "unassigned"
var/evil = TRUE
/obj/item/weapon/multisword/New()
..()
@@ -239,20 +242,27 @@ var/global/list/multiverse = list()
assigned = "[user.real_name]"
user.faction = list("[user.real_name]")
user << "You bind the sword to yourself. You can now use it to summon help."
if(!is_gangster(user))
var/datum/gang/multiverse/G = new(src, "[user.real_name]")
ticker.mode.gangs += G
G.bosses += user.mind
G.add_gang_hud(user.mind)
user.mind.gang_datum = G
user << "<span class='warning'><B>With your new found power you could easily conquer the station!</B></span>"
var/datum/objective/hijackclone/hijack_objective = new /datum/objective/hijackclone
hijack_objective.owner = user.mind
user.mind.objectives += hijack_objective
hijack_objective.explanation_text = "Ensure only [user.real_name] and their copies are on the shuttle!"
user << "<B>Objective #[1]</B>: [hijack_objective.explanation_text]"
ticker.mode.traitors += user.mind
user.mind.special_role = "[user.real_name] Prime"
if(!usr.mind.special_role)
if(prob(30))
user << "<span class='warning'><B>With your new found power you could easily conquer the station!</B></span>"
var/datum/objective/hijackclone/hijack_objective = new /datum/objective/hijackclone
hijack_objective.owner = usr.mind
usr.mind.objectives += hijack_objective
hijack_objective.explanation_text = "Ensure only [usr.real_name] and their copies are on the shuttle!"
usr << "<B>Objective #[1]</B>: [hijack_objective.explanation_text]"
ticker.mode.traitors += usr.mind
usr.mind.special_role = "[usr.real_name] Prime"
evil = TRUE
else
user << "<span class='warning'><B>With your new found power you could easily defend the station!</B></span>"
var/datum/objective/survive/new_objective = new /datum/objective/survive
new_objective.owner = usr.mind
new_objective.explanation_text = "Survive, and help defend the innocent from the mobs of multiverse clones."
usr << "<B>Objective #[1]</B>: [new_objective.explanation_text]"
usr.mind.objectives += new_objective
ticker.mode.traitors += usr.mind
usr.mind.special_role = "[usr.real_name] Prime"
evil = FALSE
else
var/list/candidates = get_candidates(ROLE_WIZARD)
if(candidates.len)
@@ -270,16 +280,15 @@ var/global/list/multiverse = list()
user << "<span class='warning'><B>[src] is recharging! Keep in mind it shares a cooldown with the swords wielded by your copies.</span>"
/obj/item/weapon/multisword/proc/spawn_copy(var/client/C, var/turf/T, mob/user)
/obj/item/weapon/multisword/proc/spawn_copy(var/client/C, var/turf/T)
var/mob/living/carbon/human/M = new/mob/living/carbon/human(T)
C.prefs.copy_to(M, icon_updates=0)
M.key = C.key
M.mind.name = user.real_name
M << "<B>You are an alternate version of [user.real_name] from another universe! Help them accomplish their goals at all costs.</B>"
ticker.mode.add_gangster(M.mind, user.mind.gang_datum, FALSE)
M.real_name = user.real_name
M.name = user.real_name
M.faction = list("[user.real_name]")
M.mind.name = usr.real_name
M << "<B>You are an alternate version of [usr.real_name] from another universe! Help them accomplish their goals at all costs.</B>"
M.real_name = usr.real_name
M.name = usr.real_name
M.faction = list("[usr.real_name]")
if(prob(50))
var/list/all_species = list()
for(var/speciestype in subtypesof(/datum/species))
@@ -293,11 +302,30 @@ var/global/list/multiverse = list()
M.dna.update_dna_identity()
equip_copy(M)
if(evil)
var/datum/objective/hijackclone/hijack_objective = new /datum/objective/hijackclone
hijack_objective.owner = M.mind
M.mind.objectives += hijack_objective
hijack_objective.explanation_text = "Ensure only [usr.real_name] and their copies are on the shuttle!"
M << "<B>Objective #[1]</B>: [hijack_objective.explanation_text]"
M.mind.special_role = "multiverse traveller"
log_game("[M.key] was made a multiverse traveller with the objective to help [usr.real_name] hijack.")
else
var/datum/objective/protect/new_objective = new /datum/objective/protect
new_objective.owner = M.mind
new_objective.target = usr.mind
new_objective.explanation_text = "Protect [usr.real_name], your copy, and help them defend the innocent from the mobs of multiverse clones."
M.mind.objectives += new_objective
M << "<B>Objective #[1]</B>: [new_objective.explanation_text]"
M.mind.special_role = "multiverse traveller"
log_game("[M.key] was made a multiverse traveller with the objective to help [usr.real_name] protect the station.")
/obj/item/weapon/multisword/proc/equip_copy(var/mob/living/carbon/human/M)
var/obj/item/weapon/multisword/sword = new /obj/item/weapon/multisword
sword.assigned = assigned
sword.faction = list("[assigned]")
sword.evil = evil
var/randomize = pick("mobster","roman","wizard","cyborg","syndicate","assistant", "animu", "cultist", "highlander", "clown", "killer", "pirate", "soviet", "officer", "gladiator")
@@ -309,29 +337,29 @@ var/global/list/multiverse = list()
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(M), slot_glasses)
M.equip_to_slot_or_del(new /obj/item/clothing/under/suit_jacket/really_black(M), slot_w_uniform)
M.put_in_hands_or_del(sword)
M.equip_to_slot_or_del(sword, slot_r_hand)
if("roman")
var/hat = pick(/obj/item/clothing/head/helmet/roman, /obj/item/clothing/head/helmet/roman/legionaire)
M.equip_to_slot_or_del(new hat(M), slot_head)
M.equip_to_slot_or_del(new /obj/item/clothing/under/roman(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/roman(M), slot_shoes)
M.put_in_hands_or_del(new /obj/item/weapon/shield/riot/roman(M))
M.put_in_hands_or_del(sword)
M.equip_to_slot_or_del(new /obj/item/weapon/shield/riot/roman(M), slot_l_hand)
M.equip_to_slot_or_del(sword, slot_r_hand)
if("wizard")
M.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe/red(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal/magic(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
M.equip_to_slot_or_del(new /obj/item/clothing/head/wizard/red(M), slot_head)
M.put_in_hands_or_del(sword)
M.equip_to_slot_or_del(sword, slot_r_hand)
if("cyborg")
for(var/X in M.bodyparts)
var/obj/item/bodypart/affecting = X
affecting.change_bodypart_status(BODYPART_ROBOTIC)
affecting.change_bodypart_status(ORGAN_ROBOTIC)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/eyepatch(M), slot_glasses)
M.put_in_hands_or_del(sword)
M.equip_to_slot_or_del(sword, slot_r_hand)
if("syndicate")
M.equip_to_slot_or_del(new /obj/item/clothing/under/syndicate(M), slot_w_uniform)
@@ -341,34 +369,34 @@ var/global/list/multiverse = list()
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas(M),slot_wear_mask)
M.put_in_hands_or_del(sword)
M.equip_to_slot_or_del(sword, slot_r_hand)
if("assistant")
M.equip_to_slot_or_del(new /obj/item/clothing/under/color/grey(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(M), slot_shoes)
M.put_in_hands_or_del(sword)
M.equip_to_slot_or_del(sword, slot_r_hand)
if("animu")
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
M.equip_to_slot_or_del(new /obj/item/clothing/head/kitty(M), slot_head)
M.equip_to_slot_or_del(new /obj/item/clothing/under/schoolgirl/red(M), slot_w_uniform)
M.put_in_hands_or_del(sword)
M.equip_to_slot_or_del(sword, slot_r_hand)
if("cultist")
M.equip_to_slot_or_del(new /obj/item/clothing/head/culthood/alt(M), slot_head)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/cultrobes/alt(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/cult(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
M.put_in_hands_or_del(sword)
M.equip_to_slot_or_del(sword, slot_r_hand)
if("highlander")
M.equip_to_slot_or_del(new /obj/item/clothing/under/kilt(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
M.equip_to_slot_or_del(new /obj/item/clothing/head/beret(M), slot_head)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes)
M.put_in_hands_or_del(sword)
M.equip_to_slot_or_del(sword, slot_r_hand)
if("clown")
M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/clown(M), slot_w_uniform)
@@ -376,7 +404,7 @@ var/global/list/multiverse = list()
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/clown_shoes(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/clown_hat(M), slot_wear_mask)
M.equip_to_slot_or_del(new /obj/item/weapon/bikehorn(M), slot_l_store)
M.put_in_hands_or_del(sword)
M.equip_to_slot_or_del(sword, slot_r_hand)
if("killer")
M.equip_to_slot_or_del(new /obj/item/clothing/under/overalls(M), slot_w_uniform)
@@ -388,27 +416,27 @@ var/global/list/multiverse = list()
M.equip_to_slot_or_del(new /obj/item/clothing/suit/apron(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/weapon/kitchen/knife(M), slot_l_store)
M.equip_to_slot_or_del(new /obj/item/weapon/scalpel(M), slot_r_store)
M.put_in_hands_or_del(sword)
for(var/obj/item/carried_item in M.get_equipped_items())
carried_item.add_mob_blood(M)
for(var/obj/item/I in M.held_items)
I.add_mob_blood(M)
M.equip_to_slot_or_del(sword, slot_r_hand)
for(var/obj/item/carried_item in M.contents)
if(!istype(carried_item, /obj/item/weapon/implant))
carried_item.add_mob_blood(M)
if("pirate")
M.equip_to_slot_or_del(new /obj/item/clothing/under/pirate(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/brown(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/head/bandana(M), slot_head)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/eyepatch(M), slot_glasses)
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
M.put_in_hands_or_del(sword)
M.equip_to_slot_or_del(sword, slot_r_hand)
if("soviet")
M.equip_to_slot_or_del(new /obj/item/clothing/head/pirate/captain(M), slot_head)
M.equip_to_slot_or_del(new /obj/item/clothing/head/hgpiratecap(M), slot_head)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/pirate/captain(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/hgpirate(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/clothing/under/soviet(M), slot_w_uniform)
M.put_in_hands_or_del(sword)
M.equip_to_slot_or_del(sword, slot_r_hand)
if("officer")
M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/beret(M), slot_head)
@@ -419,19 +447,20 @@ var/global/list/multiverse = list()
M.equip_to_slot_or_del(new /obj/item/clothing/suit/jacket/miljacket(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/clothing/under/syndicate(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/eyepatch(M), slot_glasses)
M.put_in_hands_or_del(sword)
M.equip_to_slot_or_del(sword, slot_r_hand)
if("gladiator")
M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/gladiator(M), slot_head)
M.equip_to_slot_or_del(new /obj/item/clothing/under/gladiator(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(M), slot_shoes)
M.put_in_hands_or_del(sword)
M.equip_to_slot_or_del(sword, slot_r_hand)
else
return
M.update_icons()
M.update_body_parts()
var/obj/item/weapon/card/id/W = new /obj/item/weapon/card/id
@@ -454,9 +483,8 @@ var/global/list/multiverse = list()
var/obj/item/link = null
var/cooldown_time = 30 //3s
var/cooldown = 0
obj_integrity = 10
max_integrity = 10
resistance_flags = FLAMMABLE
burntime = 0
burn_state = FLAMMABLE
/obj/item/voodoo/attackby(obj/item/I, mob/user, params)
if(target && cooldown < world.time)
@@ -477,7 +505,7 @@ var/global/list/multiverse = list()
return
if(!link)
if(I.loc == user && istype(I) && I.w_class <= WEIGHT_CLASS_SMALL)
if(I.loc == user && istype(I) && I.w_class <= 2)
user.drop_item()
I.loc = src
link = I
@@ -553,7 +581,7 @@ var/global/list/multiverse = list()
var/area/A = get_area(src)
victim << "<span class='notice'>You feel a dark presence from [A.name]</span>"
/obj/item/voodoo/fire_act(exposed_temperature, exposed_volume)
/obj/item/voodoo/fire_act()
if(target)
target.adjust_fire_stacks(20)
target.IgniteMob()
@@ -568,76 +596,3 @@ var/global/list/multiverse = list()
heal_burn = 25
heal_oxy = 25
//Warp Whistle: Provides uncontrolled long distance teleportation.
/obj/item/warpwhistle
name = "warp whistle"
desc = "One toot on this whistle will send you to a far away land!"
icon = 'icons/obj/wizard.dmi'
icon_state = "whistle"
var/on_cooldown = 0 //0: usable, 1: in use, 2: on cooldown
var/mob/living/carbon/last_user
/obj/item/warpwhistle/proc/interrupted(mob/living/carbon/user)
if(!user || qdeleted(src))
on_cooldown = FALSE
return TRUE
return FALSE
/obj/item/warpwhistle/attack_self(mob/living/carbon/user)
if(!istype(user) || on_cooldown)
return
on_cooldown = TRUE
last_user = user
var/turf/T = get_turf(user)
playsound(T,'sound/magic/WarpWhistle.ogg', 200, 1)
user.canmove = 0
PoolOrNew(/obj/effect/overlay/temp/tornado,T)
sleep(20)
if(interrupted(user))
return
user.invisibility = INVISIBILITY_MAXIMUM
user.status_flags |= GODMODE
sleep(20)
if(interrupted(user))
return
var/breakout = 0
while(breakout < 50)
var/turf/potential_T = find_safe_turf()
if(T.z != potential_T.z || abs(get_dist_euclidian(potential_T,T)) > 50 - breakout)
user.forceMove(potential_T)
user.canmove = 0
T = potential_T
break
breakout += 1
PoolOrNew(/obj/effect/overlay/temp/tornado,T)
sleep(20)
if(interrupted(user))
return
user.invisibility = initial(user.invisibility)
user.status_flags &= ~GODMODE
user.canmove = 1
on_cooldown = 2
sleep(40)
on_cooldown = 0
/obj/item/warpwhistle/Destroy()
if(on_cooldown == 1 && last_user) //Flute got dunked somewhere in the teleport
last_user.invisibility = initial(last_user.invisibility)
last_user.status_flags &= ~GODMODE
last_user.canmove = 1
return ..()
/obj/effect/overlay/temp/tornado
icon = 'icons/obj/wizard.dmi'
icon_state = "tornado"
name = "tornado"
desc = "This thing sucks!"
layer = FLY_LAYER
randomdir = 0
duration = 40
pixel_x = 500
/obj/effect/overlay/temp/tornado/New(loc)
..()
animate(src, pixel_x = -500, time = 40)
+5 -7
View File
@@ -3,10 +3,6 @@
config_tag = "raginmages"
required_players = 20
use_huds = 1
announce_span = "userdanger"
announce_text = "There are many, many wizards attacking the station!\n\
<span class='danger'>Wizards</span>: Accomplish your objectives and cause utter catastrophe!\n\
<span class='notice'>Crew</span>: Try not to die..."
var/max_mages = 0
var/making_mage = 0
var/mages_made = 1
@@ -16,6 +12,10 @@
var/spawn_delay_min = 500
var/spawn_delay_max = 700
/datum/game_mode/wizard/announce()
world << "<B>The current game mode is - Ragin' Mages!</B>"
world << "<B>The <span class='warning'>Space Wizard Federation</span> is pissed, help defeat all the space wizards!</B>"
/datum/game_mode/wizard/raginmages/post_setup()
..()
var/playercount = 0
@@ -47,7 +47,7 @@
for(var/datum/mind/wizard in wizards)
if(!istype(wizard.current,/mob/living/carbon))
continue
if(istype(wizard.current,/mob/living/brain))
if(istype(wizard.current,/mob/living/carbon/brain))
continue
if(wizard.current.stat==DEAD)
continue
@@ -158,5 +158,3 @@
time_check = 250
spawn_delay_min = 50
spawn_delay_max = 150
announce_text = "<span class='userdanger'>CRAAAWLING IIIN MY SKIIIN\n\
THESE WOOOUNDS THEY WIIIL NOT HEEEAL</span>"
+21 -11
View File
@@ -4,7 +4,7 @@
icon_state = "soulstone"
item_state = "electronic"
desc = "A fragment of the legendary treasure known simply as the 'Soul Stone'. The shard still flickers with a fraction of the full artefact's power."
w_class = WEIGHT_CLASS_TINY
w_class = 1
slot_flags = SLOT_BELT
origin_tech = "bluespace=4;materials=5"
var/usability = 0
@@ -53,7 +53,7 @@
user << "<span class='warning'>There is no power left in the shard.\
</span>"
return
if(!ishuman(M))//If target is not a human.
if(!istype(M, /mob/living/carbon/human))//If target is not a human.
return ..()
if(iscultist(M))
user << "<span class='cultlarge'>\"Come now, do not capture your fellow's soul.\"</span>"
@@ -200,14 +200,19 @@
/proc/makeNewConstruct(mob/living/simple_animal/hostile/construct/ctype, mob/target, mob/stoner = null, cultoverride = 0, loc_override = null)
var/mob/living/simple_animal/hostile/construct/newstruct = new ctype((loc_override) ? (loc_override) : (get_turf(target)))
if(stoner)
newstruct.faction |= "\ref[stoner]"
newstruct.faction |= "\ref[stoner]"
newstruct.key = target.key
if(newstruct.mind && ((stoner && iscultist(stoner)) || cultoverride) && ticker && ticker.mode)
ticker.mode.add_cultist(newstruct.mind, 0)
if(iscultist(stoner) || cultoverride)
newstruct << "<b>You are still bound to serve the cult[stoner ? " and [stoner]":""], follow their orders and help them complete their goals at all costs.</b>"
else if(stoner)
if(newstruct.mind)
if(stoner && iscultist(stoner) || cultoverride)
if(ticker.mode.name == "cult")
ticker.mode:add_cultist(newstruct.mind, 0)
else
ticker.mode.cult += newstruct.mind
ticker.mode.update_cult_icons_added(newstruct.mind)
newstruct << newstruct.playstyle_string
if(iscultist(stoner))
newstruct << "<b>You are still bound to serve the cult and [stoner], follow their orders and help them complete their goals at all costs.</b>"
else
newstruct << "<b>You are still bound to serve your creator, [stoner], follow their orders and help them complete their goals at all costs.</b>"
newstruct.cancel_camera()
@@ -215,7 +220,12 @@
/obj/item/device/soulstone/proc/init_shade(mob/living/carbon/human/T, mob/U, vic = 0)
new /obj/effect/decal/remains/human(T.loc) //Spawns a skeleton
T.invisibility = INVISIBILITY_ABSTRACT
T.dust_animation()
var/atom/movable/overlay/animation = new /atom/movable/overlay( T.loc )
animation.icon_state = "blank"
animation.icon = 'icons/mob/mob.dmi'
animation.master = T
flick("dust-h", animation)
qdel(animation)
var/mob/living/simple_animal/shade/S = new /mob/living/simple_animal/shade(src)
S.status_flags |= GODMODE //So they won't die inside the stone somehow
S.canmove = 0//Can't move out of the soul stone
@@ -246,7 +256,7 @@
break
if(!chosen_ghost) //Failing that, we grab a ghost
var/list/consenting_candidates = pollCandidates("Would you like to play as a Shade?", "Cultist", null, ROLE_CULTIST, poll_time = 50)
var/list/consenting_candidates = pollCandidates("Would you like to play as a Shade?", "Cultist", null, ROLE_CULTIST, poll_time = 100)
if(consenting_candidates.len)
chosen_ghost = pick(consenting_candidates)
if(!T)
+49 -84
View File
@@ -11,26 +11,17 @@
var/obj/effect/proc_holder/spell/S = null //Since spellbooks can be used by only one person anyway we can track the actual spell
var/buy_word = "Learn"
var/limit //used to prevent a spellbook_entry from being bought more than X times with one wizard spellbook
var/list/no_coexistance_typecache //Used so you can't have specific spells together
/datum/spellbook_entry/New()
..()
no_coexistance_typecache = typecacheof(no_coexistance_typecache)
/datum/spellbook_entry/proc/IsAvailible() // For config prefs / gamemode restrictions - these are round applied
return 1
/datum/spellbook_entry/proc/CanBuy(mob/living/carbon/human/user,obj/item/weapon/spellbook/book) // Specific circumstances
if(book.uses<cost || limit == 0)
return 0
for(var/spell in user.mind.spell_list)
if(is_type_in_typecache(spell, no_coexistance_typecache))
return 0
return 1
/datum/spellbook_entry/proc/Buy(mob/living/carbon/human/user,obj/item/weapon/spellbook/book) //return 1 on success
if(!S || qdeleted(S))
S = new spell_type()
//Check if we got the spell already
for(var/obj/effect/proc_holder/spell/aspell in user.mind.spell_list)
if(initial(S.name) == initial(aspell.name)) // Not using directly in case it was learned from one spellbook then upgraded in another
@@ -104,25 +95,20 @@
/datum/spellbook_entry/fireball
name = "Fireball"
spell_type = /obj/effect/proc_holder/spell/fireball
spell_type = /obj/effect/proc_holder/spell/dumbfire/fireball
log_name = "FB"
/datum/spellbook_entry/rod_form
name = "Rod Form"
spell_type = /obj/effect/proc_holder/spell/targeted/rod_form
log_name = "RF"
/datum/spellbook_entry/magicm
name = "Magic Missile"
spell_type = /obj/effect/proc_holder/spell/targeted/projectile/magic_missile
log_name = "MM"
category = "Defensive"
/*
/datum/spellbook_entry/disintegrate
name = "Disintegrate"
spell_type = /obj/effect/proc_holder/spell/targeted/touch/disintegrate
log_name = "DG"
*/
/datum/spellbook_entry/disabletech
name = "Disable Tech"
spell_type = /obj/effect/proc_holder/spell/targeted/emplosion/disable_tech
@@ -136,12 +122,6 @@
log_name = "RP"
category = "Defensive"
/datum/spellbook_entry/lightningPacket
name = "Lightning bolt! Lightning bolt!"
spell_type = /obj/effect/proc_holder/spell/targeted/conjure_item/spellpacket
log_name = "LP"
category = "Defensive"
/datum/spellbook_entry/timestop
name = "Time Stop"
spell_type = /obj/effect/proc_holder/spell/aoe_turf/conjure/timestop
@@ -169,7 +149,7 @@
/datum/spellbook_entry/forcewall
name = "Force Wall"
spell_type = /obj/effect/proc_holder/spell/targeted/forcewall
spell_type = /obj/effect/proc_holder/spell/aoe_turf/conjure/forcewall
log_name = "FW"
category = "Defensive"
cost = 1
@@ -229,17 +209,9 @@
/datum/spellbook_entry/infinite_guns
name = "Lesser Summon Guns"
spell_type = /obj/effect/proc_holder/spell/targeted/infinite_guns/gun
spell_type = /obj/effect/proc_holder/spell/targeted/infinite_guns
log_name = "IG"
cost = 3
no_coexistance_typecache = /obj/effect/proc_holder/spell/targeted/infinite_guns/arcane_barrage
/datum/spellbook_entry/arcane_barrage
name = "Arcane Barrage"
spell_type = /obj/effect/proc_holder/spell/targeted/infinite_guns/arcane_barrage
log_name = "AB"
cost = 3
no_coexistance_typecache = /obj/effect/proc_holder/spell/targeted/infinite_guns/gun
/datum/spellbook_entry/barnyard
name = "Barnyard Curse"
@@ -287,7 +259,7 @@
if(surplus>=0)
dat += "[surplus] left.<br>"
return dat
/*
/datum/spellbook_entry/item/staffchange
name = "Staff of Change"
desc = "An artefact that spits bolts of coruscating energy which cause the target's very form to reshape itself."
@@ -306,13 +278,7 @@
desc = "A caprious tool that can fire all sorts of magic without any rhyme or reason. Using it on people you care about is not recommended."
item_path = /obj/item/weapon/gun/magic/staff/chaos
log_name = "SC"
/datum/spellbook_entry/item/spellblade
name = "Spellblade"
desc = "A sword capable of firing blasts of energy which rip targets limb from limb."
item_path = /obj/item/weapon/gun/magic/staff/spellblade
log_name = "SB"
*/
/datum/spellbook_entry/item/staffdoor
name = "Staff of Door Creation"
desc = "A particular staff that can mold solid metal into ornate doors. Useful for getting around in the absence of other transportation. Does not work on glass."
@@ -379,7 +345,7 @@
/datum/spellbook_entry/item/armor/Buy(mob/living/carbon/human/user,obj/item/weapon/spellbook/book)
. = ..()
if(.)
new /obj/item/clothing/shoes/sandal/magic(get_turf(user)) //In case they've lost them.
new /obj/item/clothing/shoes/sandal(get_turf(user)) //In case they've lost them.
new /obj/item/clothing/gloves/color/purple(get_turf(user))//To complete the outfit
/datum/spellbook_entry/item/contract
@@ -412,6 +378,20 @@
limit = 3
category = "Assistance"
/datum/spellbook_entry/item/hadesstone
name = "Dark Seed"
desc = "A small, dark stone that whispers to you menacingly.\
The seed calls for the corpses of living beings,\
in order to summon an ancient, powerful being.\
The power and tenacity of the summoned being directly\
correlates to the power of the absorbed beings,\
so choose your targets wisely."
item_path = /obj/item/hades_summoner
cost = 2
log_name = "DS"
limit = 1
category = "Assistance"
/datum/spellbook_entry/item/mjolnir
name = "Mjolnir"
desc = "A mighty hammer on loan from Thor, God of Thunder. It crackles with barely contained power."
@@ -424,29 +404,16 @@
item_path = /obj/item/weapon/twohanded/singularityhammer
log_name = "SI"
/datum/spellbook_entry/item/battlemage
name = "Battlemage Armour"
desc = "An ensorcelled suit of armour, protected by a powerful shield. The shield can completly negate sixteen attacks before being permanently depleted."
item_path = /obj/item/clothing/suit/space/hardsuit/shielded/wizard
log_name = "BM"
limit = 1
category = "Defensive"
/datum/spellbook_entry/item/battlemage_charge
name = "Battlemage Armour Charges"
desc = "A powerful defensive rune, it will grant eight additional charges to a suit of battlemage armour."
item_path = /obj/item/wizard_armour_charge
log_name = "AC"
category = "Defensive"
cost = 1
/datum/spellbook_entry/item/warpwhistle
name = "Warp Whistle"
desc = "A strange whistle that will transport you to a distant safe place on the station. There is a window of vulnerability at the begining of every use."
item_path = /obj/item/warpwhistle
log_name = "WW"
category = "Mobility"
/datum/spellbook_entry/item/cursed_heart
name = "Cursed Heart"
desc = "A heart that has been revived by dark magicks, the user must \
concentrate to ensure the heart beats, but every beat heals them. It \
must beat every 6 seconds. The heart is fickle, and will not work for a \
lich."
item_path = /obj/item/organ/heart/cursed/wizard
log_name = "CH"
cost = 1
category = "Defensive"
/datum/spellbook_entry/summon
name = "Summon Stuff"
@@ -472,6 +439,7 @@
/datum/spellbook_entry/summon/guns
name = "Summon Guns"
category = "Rituals"
desc = "Nothing could possibly go wrong with arming a crew of lunatics just itching for an excuse to kill you. Just be careful not to stand still too long!"
log_name = "SG"
@@ -483,14 +451,15 @@
/datum/spellbook_entry/summon/guns/Buy(mob/living/carbon/human/user,obj/item/weapon/spellbook/book)
feedback_add_details("wizard_spell_learned",log_name)
rightandwrong(0, user, 25)
active = 1
playsound(get_turf(user),"sound/magic/CastSummon.ogg",50,1)
user << "<span class='notice'>You have cast summon guns!</span>"
return 1
/datum/spellbook_entry/summon/magic
name = "Summon Magic"
category = "Challenges"
desc = "Share the wonders of magic with the crew and show them why they aren't to be trusted with it at the same time."
cost = 0
log_name = "SU"
/datum/spellbook_entry/summon/magic/IsAvailible()
@@ -500,10 +469,11 @@
/datum/spellbook_entry/summon/magic/Buy(mob/living/carbon/human/user,obj/item/weapon/spellbook/book)
feedback_add_details("wizard_spell_learned",log_name)
rightandwrong(1, user, 25)
rightandwrong(1, user, 0)
book.uses += 1
active = 1
playsound(get_turf(user),"sound/magic/CastSummon.ogg",50,1)
user << "<span class='notice'>You have cast summon magic!</span>"
user << "<span class='notice'>You have cast summon magic and gained an extra charge for your spellbook.</span>"
return 1
/datum/spellbook_entry/summon/events
@@ -539,10 +509,10 @@
icon_state ="book"
throw_speed = 2
throw_range = 5
w_class = WEIGHT_CLASS_TINY
persistence_replacement = /obj/item/weapon/spellbook/oneuse/random
w_class = 1
var/uses = 10
var/temp = null
var/op = 1
var/tab = null
var/mob/living/carbon/human/owner
var/list/datum/spellbook_entry/entries = list()
@@ -692,7 +662,7 @@
if(H.stat || H.restrained())
return
if(!ishuman(H))
if(!istype(H, /mob/living/carbon/human))
return 1
if(H.mind.special_role == "apprentice")
@@ -700,7 +670,7 @@
return
var/datum/spellbook_entry/E = null
if(loc == H || (in_range(src, H) && isturf(loc)))
if(loc == H || (in_range(src, H) && istype(loc, /turf)))
H.set_machine(src)
if(href_list["buy"])
E = entries[text2num(href_list["buy"])]
@@ -731,7 +701,6 @@
name = "spellbook of "
uses = 1
desc = "This template spellbook was never meant for the eyes of man..."
persistence_replacement = null
/obj/item/weapon/spellbook/oneuse/New()
..()
@@ -769,7 +738,7 @@
return
/obj/item/weapon/spellbook/oneuse/fireball
spell = /obj/effect/proc_holder/spell/fireball
spell = /obj/effect/proc_holder/spell/dumbfire/fireball
spellname = "fireball"
icon_state ="bookfireball"
desc = "This book feels warm to the touch."
@@ -837,7 +806,7 @@
stored_swap = null
/obj/item/weapon/spellbook/oneuse/forcewall
spell = /obj/effect/proc_holder/spell/targeted/forcewall
spell = /obj/effect/proc_holder/spell/aoe_turf/conjure/forcewall
spellname = "forcewall"
icon_state ="bookforcewall"
desc = "This book has a dedication to mimes everywhere inside the front cover."
@@ -845,8 +814,10 @@
/obj/item/weapon/spellbook/oneuse/forcewall/recoil(mob/user)
..()
user <<"<span class='warning'>You suddenly feel very solid!</span>"
user.Stun(2)
user.petrify(30)
var/obj/structure/closet/statue/S = new /obj/structure/closet/statue(user.loc, user)
S.timer = 30
user.drop_item()
/obj/item/weapon/spellbook/oneuse/knock
spell = /obj/effect/proc_holder/spell/aoe_turf/knock
@@ -866,7 +837,7 @@
desc = "This book is more horse than your mind has room for."
/obj/item/weapon/spellbook/oneuse/barnyard/recoil(mob/living/carbon/user)
if(ishuman(user))
if(istype(user, /mob/living/carbon/human))
user <<"<font size='15' color='red'><b>HOR-SIE HAS RISEN</b></font>"
var/obj/item/clothing/mask/horsehead/magichead = new /obj/item/clothing/mask/horsehead
magichead.flags |= NODROP //curses!
@@ -905,9 +876,3 @@
var/real_type = pick(subtypesof(/obj/item/weapon/spellbook/oneuse))
new real_type(loc)
qdel(src)
/obj/item/weapon/spellbook/oneuse/sacredflame
spell = /obj/effect/proc_holder/spell/targeted/sacred_flame
spellname = "sacred flame"
icon_state ="booksacredflame"
desc = "Become one with the flames that burn within... and invite others to do so as well."
+28 -13
View File
@@ -11,13 +11,13 @@
recommended_enemies = 1
enemy_minimum_age = 14
round_ends_with_antag_death = 1
announce_span = "danger"
announce_text = "There is a space wizard attacking the station!\n\
<span class='danger'>Wizard</span>: Accomplish your objectives and cause mayhem on the station.\n\
<span class='notice'>Crew</span>: Eliminate the wizard before they can succeed!"
var/use_huds = 0
var/finished = 0
/datum/game_mode/wizard/announce()
world << "<B>The current game mode is - Wizard!</B>"
world << "<B>There is a <span class='danger'>SPACE WIZARD</span>\black on the station. You can't let him achieve his objective!</B>"
/datum/game_mode/wizard/pre_setup()
var/datum/mind/wizard = pick(antag_candidates)
@@ -118,7 +118,10 @@
wizard.current << "<span class='boldannounce'>You are the Space Wizard!</span>"
wizard.current << "<B>The Space Wizards Federation has given you the following tasks:</B>"
wizard.announce_objectives()
var/obj_count = 1
for(var/datum/objective/objective in wizard.objectives)
wizard.current << "<B>Objective #[obj_count]</B>: [objective.explanation_text]"
obj_count++
return
@@ -137,16 +140,14 @@
qdel(wizard_mob.wear_suit)
qdel(wizard_mob.head)
qdel(wizard_mob.shoes)
for(var/obj/item/I in wizard_mob.held_items)
wizard_mob.unEquip(I)
qdel(I)
qdel(wizard_mob.r_hand)
qdel(wizard_mob.r_store)
qdel(wizard_mob.l_store)
wizard_mob.set_species(/datum/species/human)
wizard_mob.equip_to_slot_or_del(new /obj/item/device/radio/headset(wizard_mob), slot_ears)
wizard_mob.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(wizard_mob), slot_w_uniform)
wizard_mob.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal/magic(wizard_mob), slot_shoes)
wizard_mob.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(wizard_mob), slot_shoes)
wizard_mob.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe(wizard_mob), slot_wear_suit)
wizard_mob.equip_to_slot_or_del(new /obj/item/clothing/head/wizard(wizard_mob), slot_head)
wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(wizard_mob), slot_back)
@@ -154,12 +155,13 @@
wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/teleportation_scroll(wizard_mob), slot_r_store)
var/obj/item/weapon/spellbook/spellbook = new /obj/item/weapon/spellbook(wizard_mob)
spellbook.owner = wizard_mob
wizard_mob.put_in_hands_or_del(spellbook)
wizard_mob.equip_to_slot_or_del(spellbook, slot_r_hand)
wizard_mob << "You will find a list of available spells in your spell book. Choose your magic arsenal carefully."
wizard_mob << "The spellbook is bound to you, and others cannot use it."
wizard_mob << "In your pockets you will find a teleport scroll. Use it as needed."
wizard_mob.mind.store_memory("<B>Remember:</B> do not forget to prepare your spells.")
wizard_mob.update_icons()
return 1
@@ -179,9 +181,6 @@
if(finished)
feedback_set_details("round_end_result","loss - wizard killed")
world << "<span class='userdanger'>The wizard[(wizards.len>1)?"s":""] has been killed by the crew! The Space Wizards Federation has been taught a lesson they will not soon forget!</span>"
ticker.news_report = WIZARD_KILLED
..()
return 1
@@ -246,6 +245,22 @@
qdel(spell_to_remove)
mind.spell_list -= spell_to_remove
/*Checks if the wizard can cast spells.
Made a proc so this is not repeated 14 (or more) times.*/
/mob/proc/casting()
//Removed the stat check because not all spells require clothing now.
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
//returns whether the mob is a wizard (or apprentice)
/proc/iswizard(mob/living/M)
return istype(M) && M.mind && ticker && ticker.mode && ((M.mind in ticker.mode.wizards) || (M.mind in ticker.mode.apprentices))