Merge remote-tracking branch 'upstream/master'
@@ -158,11 +158,12 @@
|
||||
dish = null
|
||||
|
||||
else if(href_list["splice"])
|
||||
for(var/datum/disease2/effectholder/e in dish.virus2.effects)
|
||||
if(e.stage == memorybank.stage)
|
||||
e.effect = memorybank.effect
|
||||
splicing = 10
|
||||
dish.virus2.spreadtype = "Blood"
|
||||
if(dish)
|
||||
for(var/datum/disease2/effectholder/e in dish.virus2.effects)
|
||||
if(e.stage == memorybank.stage)
|
||||
e.effect = memorybank.effect
|
||||
splicing = 10
|
||||
dish.virus2.spreadtype = "Blood"
|
||||
|
||||
else if(href_list["disk"])
|
||||
burning = 10
|
||||
|
||||
@@ -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 << "<B>\red You are the Space Wizard!</B>"
|
||||
if("lair")
|
||||
current.loc = pick(wizardstart)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
if(length(uni_identity) != 39)
|
||||
//Lazy.
|
||||
var/temp
|
||||
var/hair
|
||||
var/hair = 0
|
||||
var/beard
|
||||
|
||||
// determine DNA fragment from hairstyle
|
||||
@@ -23,11 +23,10 @@
|
||||
var/list/styles = typesof(/datum/sprite_accessory/hair) - /datum/sprite_accessory/hair
|
||||
var/hrange = round(4095 / styles.len)
|
||||
|
||||
var/style = styles.Find(character.hair_style.type)
|
||||
if(style)
|
||||
hair = style * hrange - rand(1,hrange-1)
|
||||
else
|
||||
hair = 0
|
||||
if(character.hair_style)
|
||||
var/style = styles.Find(character.hair_style.type)
|
||||
if(style)
|
||||
hair = style * hrange - rand(1,hrange-1)
|
||||
|
||||
// Beard dna code - mostly copypasted from hair code to allow for more dynamic facial hair style additions
|
||||
var/list/face_styles = typesof(/datum/sprite_accessory/facial_hair) - /datum/sprite_accessory/facial_hair
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
dat += "<B>Memorize which spell:</B><BR>"
|
||||
dat += "<I>The number after the spell name is the cooldown time.</I><BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];spell_choice=1'>Magic Missile</A> (10)<BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];spell_choice=2'>Fireball</A> (10)<BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];spell_choice=2'>Fireball</A> (20)<BR>"
|
||||
// dat += "<A href='byond://?src=\ref[src];spell_choice=3'>Disintegrate</A> (60)<BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];spell_choice=4'>Disable Technology</A> (60)<BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];spell_choice=5'>Smoke</A> (10)<BR>"
|
||||
@@ -26,7 +26,12 @@
|
||||
dat += "<A href='byond://?src=\ref[src];spell_choice=12'>Ethereal Jaunt</A> (60)<BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];spell_choice=13'>Knock</A> (10)<BR>"
|
||||
dat += "<HR>"
|
||||
dat += "<A href='byond://?src=\ref[src];spell_choice=14'>Re-memorize Spells</A><BR>"
|
||||
dat += "<B>Artefacts:</B><BR>"
|
||||
dat += "Powerful items imbued with eldritch magics. Summoning one will count towards your maximum number of spells.<BR>"
|
||||
dat += "<HR>"
|
||||
dat += "<A href='byond://?src=\ref[src];spell_choice=14'>Staff of Change</A><BR>"
|
||||
dat += "<HR>"
|
||||
dat += "<A href='byond://?src=\ref[src];spell_choice=15'>Re-memorize Spells</A><BR>"
|
||||
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
|
||||
|
||||
@@ -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("<B>Remember:</B> do not forget to prepare your spells.")
|
||||
return 1
|
||||
|
||||
|
||||
@@ -500,6 +500,21 @@ Neutralize All Unidentified Life Signs: []<BR>"},
|
||||
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"
|
||||
|
||||
@@ -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()]\] <font color='orange'>Has been handcuffed (attempt) by [user.name] ([user.ckey])</font>")
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Attempted to handcuff [M.name] ([M.ckey])</font>")
|
||||
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()]\] <font color='orange'>Has been handcuffed (attempt) by [user.name] ([user.ckey])</font>")
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Attempted to handcuff [M.name] ([M.ckey])</font>")
|
||||
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)
|
||||
del(src)
|
||||
|
||||
@@ -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
|
||||
return
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -604,6 +604,7 @@
|
||||
if (prob(50))
|
||||
Paralyse(10)
|
||||
|
||||
|
||||
/obj/effect/equip_e/monkey/process()
|
||||
if (item)
|
||||
item.add_fingerprint(source)
|
||||
|
||||
@@ -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 << "<i><font color=#800080><b>[gender=="male"?"Mr.":"Mrs."] [changeling.changelingID]:</b> [message]</font></i>"
|
||||
return
|
||||
////SPECIAL HEADSETS START
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
src.see_invisible = 2
|
||||
|
||||
var/area/home = get_area(src)
|
||||
if(home.powered(EQUIP))
|
||||
if(home && home.powered(EQUIP))
|
||||
home.use_power(1000, EQUIP)
|
||||
|
||||
if (src:aiRestorePowerRoutine==2)
|
||||
|
||||
@@ -46,16 +46,22 @@
|
||||
return
|
||||
if(href_list["togglep"])
|
||||
src.toggle_power()
|
||||
message_admins("[usr] toggled particle accelerator power to [active ? "on" : "off"].")
|
||||
log_admin("[usr] toggled particle accelerator power to [active ? "on" : "off"].")
|
||||
if(href_list["scan"])
|
||||
src.part_scan()
|
||||
if(href_list["strengthup"])
|
||||
src.strength++
|
||||
if(src.strength > 2)
|
||||
src.strength = 2
|
||||
message_admins("[usr] increased particle accelerator power to [strength].")
|
||||
log_admin("[usr] increased particle accelerator power to [strength].")
|
||||
if(href_list["strengthdown"])
|
||||
src.strength--
|
||||
if(src.strength < 0)
|
||||
src.strength = 0
|
||||
message_admins("[usr] decreased particle accelerator power to [strength].")
|
||||
log_admin("[usr] decreased particle accelerator power to [strength].")
|
||||
src.updateDialog()
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 76 KiB After Width: | Height: | Size: 77 KiB |
|
Before Width: | Height: | Size: 100 KiB After Width: | Height: | Size: 106 KiB |
|
Before Width: | Height: | Size: 100 KiB After Width: | Height: | Size: 106 KiB |
|
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 28 KiB |