Bleeding edgy refresh (#303)

* not code stuff

* other things

* global vars, defines, helpers

* onclick hud stuff, orphans, world.dm

* controllers and datums

* game folder

* everything not client/mobs in modules

* client folder

* stage 1 mob stuff

* simple animal things

* silicons

* carbon things

* ayylmaos and monkeys

* hyoomahn

* icons n shit

* sprite fixes

* compile fixes

* some fixes I cherrypicked.

* qdel fixes

* forgot brain refractors
This commit is contained in:
Poojawa
2017-03-21 11:44:10 -05:00
committed by GitHub
parent 099a6c8764
commit f67e9f6d87
1476 changed files with 344416 additions and 40694 deletions
+30 -19
View File
@@ -18,7 +18,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
/obj/effect/proc_holder/proc/InterceptClickOn(mob/living/caller, params, atom/A)
if(caller.ranged_ability != src || ranged_ability_user != caller) //I'm not actually sure how these would trigger, but, uh, safety, I guess?
caller << "<span class='warning'><b>[caller.ranged_ability.name]</b> has been disabled."
to_chat(caller, "<span class='warning'><b>[caller.ranged_ability.name]</b> has been disabled.")
caller.ranged_ability.remove_ranged_ability()
return TRUE //TRUE for failed, FALSE for passed.
if(ranged_clickcd_override >= 0)
@@ -33,7 +33,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
return
if(user.ranged_ability && user.ranged_ability != src)
if(forced)
user << "<span class='warning'><b>[user.ranged_ability.name]</b> has been replaced by <b>[name]</b>."
to_chat(user, "<span class='warning'><b>[user.ranged_ability.name]</b> has been replaced by <b>[name]</b>.")
user.ranged_ability.remove_ranged_ability()
else
return
@@ -42,7 +42,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
add_mousepointer(user.client)
ranged_ability_user = user
if(msg)
ranged_ability_user << msg
to_chat(ranged_ability_user, msg)
active = TRUE
update_icon()
@@ -61,7 +61,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
ranged_ability_user.client.click_intercept = null
remove_mousepointer(ranged_ability_user.client)
if(msg)
ranged_ability_user << msg
to_chat(ranged_ability_user, msg)
ranged_ability_user = null
active = FALSE
update_icon()
@@ -126,7 +126,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
if(player_lock)
if(!user.mind || !(src in user.mind.spell_list) && !(src in user.mob_spell_list))
user << "<span class='warning'>You shouldn't have this spell! Something's wrong.</span>"
to_chat(user, "<span class='warning'>You shouldn't have this spell! Something's wrong.</span>")
return 0
else
if(!(src in user.mob_spell_list))
@@ -134,26 +134,26 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
var/turf/T = get_turf(user)
if(T.z == ZLEVEL_CENTCOM && (!centcom_cancast || ticker.mode.name == "ragin' mages")) //Certain spells are not allowed on the centcom zlevel
user << "<span class='notice'>You can't cast this spell here.</span>"
to_chat(user, "<span class='notice'>You can't cast this spell here.</span>")
return 0
if(!skipcharge)
switch(charge_type)
if("recharge")
if(charge_counter < charge_max)
user << still_recharging_msg
to_chat(user, still_recharging_msg)
return 0
if("charges")
if(!charge_counter)
user << "<span class='notice'>[name] has no charges left.</span>"
to_chat(user, "<span class='notice'>[name] has no charges left.</span>")
return 0
if(user.stat && !stat_allowed)
user << "<span class='notice'>Not when you're incapacitated.</span>"
to_chat(user, "<span class='notice'>Not when you're incapacitated.</span>")
return 0
if(!phase_allowed && istype(user.loc, /obj/effect/dummy))
user << "<span class='notice'>[name] cannot be cast unless you are completely manifested in the material plane.</span>"
to_chat(user, "<span class='notice'>[name] cannot be cast unless you are completely manifested in the material plane.</span>")
return 0
if(ishuman(user))
@@ -161,7 +161,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
var/mob/living/carbon/human/H = user
if((invocation_type == "whisper" || invocation_type == "shout") && H.is_muzzled())
user << "<span class='notice'>You can't get the words out!</span>"
to_chat(user, "<span class='notice'>You can't get the words out!</span>")
return 0
var/list/casting_clothes = typecacheof(list(/obj/item/clothing/suit/wizrobe,
@@ -173,24 +173,24 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
if(clothes_req) //clothes check
if(!is_type_in_typecache(H.wear_suit, casting_clothes))
H << "<span class='notice'>I don't feel strong enough without my robe.</span>"
to_chat(H, "<span class='notice'>I don't feel strong enough without my robe.</span>")
return 0
if(!is_type_in_typecache(H.head, casting_clothes))
H << "<span class='notice'>I don't feel strong enough without my hat.</span>"
to_chat(H, "<span class='notice'>I don't feel strong enough without my hat.</span>")
return 0
if(cult_req) //CULT_REQ CLOTHES CHECK
if(!istype(H.wear_suit, /obj/item/clothing/suit/magusred) && !istype(H.wear_suit, /obj/item/clothing/suit/space/hardsuit/cult))
H << "<span class='notice'>I don't feel strong enough without my armor.</span>"
to_chat(H, "<span class='notice'>I don't feel strong enough without my armor.</span>")
return 0
if(!istype(H.head, /obj/item/clothing/head/magus) && !istype(H.head, /obj/item/clothing/head/helmet/space/hardsuit/cult))
H << "<span class='notice'>I don't feel strong enough without my helmet.</span>"
to_chat(H, "<span class='notice'>I don't feel strong enough without my helmet.</span>")
return 0
else
if(clothes_req || human_req)
user << "<span class='notice'>This spell can only be cast by humans!</span>"
to_chat(user, "<span class='notice'>This spell can only be cast by humans!</span>")
return 0
if(nonabstract_req && (isbrain(user) || ispAI(user)))
user << "<span class='notice'>This spell can only be cast by physical beings!</span>"
to_chat(user, "<span class='notice'>This spell can only be cast by physical beings!</span>")
return 0
@@ -242,6 +242,9 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
/obj/effect/proc_holder/spell/proc/choose_targets(mob/user = usr) //depends on subtype - /targeted or /aoe_turf
return
/obj/effect/proc_holder/spell/proc/can_target(mob/living/target)
return TRUE
/obj/effect/proc_holder/spell/proc/start_recharge()
if(action)
action.UpdateButtonIcon()
@@ -255,7 +258,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
before_cast(targets)
invocation(user)
if(user && user.ckey)
user.attack_log += text("\[[time_stamp()]\] <span class='danger'>[user.real_name] ([user.ckey]) cast the spell [name].</span>")
user.log_message("<span class='danger'>cast the spell [name].</span>", INDIVIDUAL_ATTACK_LOG)
spawn(0)
if(charge_type == "recharge" && recharge)
start_recharge()
@@ -290,7 +293,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
else if(isturf(target))
location = target
if(isliving(target) && message)
target << text("[message]")
to_chat(target, text("[message]"))
if(sparks_spread)
var/datum/effect_system/spark_spread/sparks = new
sparks.set_up(sparks_amt, 0, location) //no idea what the 0 is
@@ -361,6 +364,8 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
switch(max_targets)
if(0) //unlimited
for(var/mob/living/target in view_or_range(range, user, selection_type))
if(!can_target(target))
continue
targets += target
if(1) //single target can be picked
if(range < 0)
@@ -371,6 +376,8 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
for(var/mob/living/M in view_or_range(range, user, selection_type))
if(!include_user && user == M)
continue
if(!can_target(M))
continue
possible_targets += M
//targets += input("Choose the target for the spell.", "Targeting") as mob in possible_targets
@@ -396,6 +403,8 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
else
var/list/possible_targets = list()
for(var/mob/living/target in view_or_range(range, user, selection_type))
if(!can_target(target))
continue
possible_targets += target
for(var/i=1,i<=max_targets,i++)
if(!possible_targets.len)
@@ -420,6 +429,8 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
var/list/targets = list()
for(var/turf/target in view_or_range(range,user,selection_type))
if(!can_target(target))
continue
if(!(target in view_or_range(inner_radius,user,selection_type)))
targets += target
+5 -4
View File
@@ -8,7 +8,7 @@
var/active_icon_state = "projectile"
var/list/projectile_var_overrides = list()
var/projectile_amount = 1 //Projectiles per cast.
var/current_amount = 1 //How many projectiles left.
var/current_amount = 0 //How many projectiles left.
/obj/effect/proc_holder/spell/aimed/Click()
var/mob/living/user = usr
@@ -36,7 +36,8 @@
/obj/effect/proc_holder/spell/aimed/InterceptClickOn(mob/living/caller, params, atom/target)
if(..())
return FALSE
if(!cast_check(0, ranged_ability_user))
var/ignore = (current_amount <= 0)
if(!cast_check(ignore, ranged_ability_user))
remove_ranged_ability()
return FALSE
var/list/targets = list(target)
@@ -51,14 +52,14 @@
return FALSE
fire_projectile(user, target)
user.newtonian_move(get_dir(U, T))
current_amount--
if(current_amount <= 0)
if(--current_amount <= 0)
remove_ranged_ability() //Auto-disable the ability once you run out of bullets.
return TRUE
/obj/effect/proc_holder/spell/aimed/proc/fire_projectile(mob/living/user, atom/target)
var/obj/item/projectile/P = new projectile_type(user.loc)
P.current = get_turf(user)
P.firer = user
P.preparePixelProjectile(target, get_turf(target), user)
for(var/V in projectile_var_overrides)
if(P.vars[V])
+3 -3
View File
@@ -18,17 +18,17 @@
/obj/effect/proc_holder/spell/targeted/barnyardcurse/cast(list/targets, mob/user = usr)
if(!targets.len)
user << "<span class='notice'>No target found in range.</span>"
to_chat(user, "<span class='notice'>No target found in range.</span>")
return
var/mob/living/carbon/target = targets[1]
if(!(target.type in compatible_mobs))
user << "<span class='notice'>You are unable to curse [target]'s head!</span>"
to_chat(user, "<span class='notice'>You are unable to curse [target]'s head!</span>")
return
if(!(target in oview(range)))
user << "<span class='notice'>They are too far away!</span>"
to_chat(user, "<span class='notice'>They are too far away!</span>")
return
var/list/masks = list(/obj/item/clothing/mask/spig, /obj/item/clothing/mask/cowmask, /obj/item/clothing/mask/horsehead)
@@ -19,7 +19,7 @@
perform(target)
return
revert_cast()
user << "<span class='warning'>There must be a nearby source of blood!</span>"
to_chat(user, "<span class='warning'>There must be a nearby source of blood!</span>")
/obj/effect/proc_holder/spell/bloodcrawl/perform(obj/effect/decal/cleanable/target, recharge = 1, mob/living/user = usr)
if(istype(user))
@@ -32,4 +32,4 @@
start_recharge()
return
revert_cast()
user << "<span class='warning'>You are unable to blood crawl!</span>"
to_chat(user, "<span class='warning'>You are unable to blood crawl!</span>")
+5 -5
View File
@@ -44,8 +44,8 @@
charged_item = I
break
else
L << "<span class='caution'>Glowing red letters appear on the front cover...</span>"
L << "<span class='warning'>[pick("NICE TRY BUT NO!","CLEVER BUT NOT CLEVER ENOUGH!", "SUCH FLAGRANT CHEESING IS WHY WE ACCEPTED YOUR APPLICATION!", "CUTE!", "YOU DIDN'T THINK IT'D BE THAT EASY, DID YOU?")]</span>"
to_chat(L, "<span class='caution'>Glowing red letters appear on the front cover...</span>")
to_chat(L, "<span class='warning'>[pick("NICE TRY BUT NO!","CLEVER BUT NOT CLEVER ENOUGH!", "SUCH FLAGRANT CHEESING IS WHY WE ACCEPTED YOUR APPLICATION!", "CUTE!", "YOU DIDN'T THINK IT'D BE THAT EASY, DID YOU?")]</span>")
burnt_out = 1
else if(istype(item, /obj/item/weapon/gun/magic))
var/obj/item/weapon/gun/magic/I = item
@@ -91,9 +91,9 @@
charged_item = item
break
if(!charged_item)
L << "<span class='notice'>You feel magical power surging through your hands, but the feeling rapidly fades...</span>"
to_chat(L, "<span class='notice'>You feel magical power surging through your hands, but the feeling rapidly fades...</span>")
else if(burnt_out)
L << "<span class='caution'>[charged_item] doesn't seem to be reacting to the spell...</span>"
to_chat(L, "<span class='caution'>[charged_item] doesn't seem to be reacting to the spell...</span>")
else
playsound(get_turf(L), 'sound/magic/Charge.ogg', 50, 1)
L << "<span class='notice'>[charged_item] suddenly feels very warm!</span>"
to_chat(L, "<span class='notice'>[charged_item] suddenly feels very warm!</span>")
@@ -146,3 +146,106 @@
smoke_amt = 4
action_icon_state = "parasmoke"
action_background_icon_state = "bg_cult"
/obj/effect/proc_holder/spell/targeted/abyssal_gaze
name = "Abyssal Gaze"
desc = "This spell instills a deep terror in your target, temporarily chilling and blinding it."
charge_max = 750
range = 5
include_user = FALSE
selection_type = "range"
stat_allowed = FALSE
school = "evocation"
clothes_req = FALSE
invocation = "none"
invocation_type = "none"
action_background_icon_state = "bg_demon"
action_icon_state = "abyssal_gaze"
/obj/effect/proc_holder/spell/targeted/abyssal_gaze/cast(list/targets, mob/user = usr)
if(!LAZYLEN(targets))
to_chat(user, "<span class='notice'>No target found in range.</span>")
revert_cast()
return
var/mob/living/carbon/target = targets[1]
if(!(target in oview(range)))
to_chat(user, "<span class='notice'>[target] is too far away!</span>")
revert_cast()
return
to_chat(target, "<span class='userdanger'>A freezing darkness surrounds you...</span>")
target.playsound_local(get_turf(target), 'sound/hallucinations/i_see_you1.ogg', 50, 1)
user.playsound_local(get_turf(user), 'sound/effects/ghost2.ogg', 50, 1)
target.adjust_blindness(5)
addtimer(CALLBACK(src, .proc/cure_blindness, target), 40)
target.bodytemperature -= 200
/obj/effect/proc_holder/spell/targeted/abyssal_gaze/proc/cure_blindness(mob/target)
target.adjust_blindness(-5)
/obj/effect/proc_holder/spell/targeted/dominate
name = "Dominate"
desc = "This spell dominates the mind of a lesser creature, causing it to see you as an ally."
charge_max = 600
range = 7
include_user = FALSE
selection_type = "range"
stat_allowed = FALSE
school = "evocation"
clothes_req = FALSE
invocation = "none"
invocation_type = "none"
action_background_icon_state = "bg_demon"
action_icon_state = "dominate"
/obj/effect/proc_holder/spell/targeted/dominate/cast(list/targets, mob/user = usr)
if(!LAZYLEN(targets))
to_chat(user, "<span class='notice'>No target found in range.</span>")
revert_cast()
return
var/mob/living/simple_animal/S = targets[1]
if(S.ckey)
to_chat(user, "<span class='warning'>[S] is too intelligent to dominate!</span>")
revert_cast()
return
if(S.stat)
to_chat(user, "<span class='warning'>[S] is dead!</span>")
revert_cast()
return
if(S.sentience_type != SENTIENCE_ORGANIC)
to_chat(user, "<span class='warning'>[S] cannot be dominated!</span>")
revert_cast()
return
if(!(S in oview(range)))
to_chat(user, "<span class='notice'>[S] is too far away!</span>")
revert_cast()
return
S.add_atom_colour("#990000", FIXED_COLOUR_PRIORITY)
S.faction = list("cult")
playsound(get_turf(S), 'sound/effects/ghost.ogg', 100, 1)
new /obj/effect/overlay/temp/cult/sac(get_turf(S))
/obj/effect/proc_holder/spell/targeted/dominate/can_target(mob/living/target)
if(!isanimal(target) || target.stat)
return FALSE
if("cult" in target.faction)
return FALSE
return TRUE
/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift/golem
charge_max = 800
jaunt_in_type = /obj/effect/overlay/temp/dir_setting/cult/phase
jaunt_out_type = /obj/effect/overlay/temp/dir_setting/cult/phase/out
+10 -7
View File
@@ -66,7 +66,7 @@
contract = new /obj/item/weapon/paper/contract/infernal/knowledge(C.loc, C.mind, user.mind)
C.put_in_hands(contract)
else
user << "<span class='notice'>[C] seems to not be sentient. You cannot summon a contract for [C.p_them()].</span>"
to_chat(user, "<span class='notice'>[C] seems to not be sentient. You cannot summon a contract for [C.p_them()].</span>")
/obj/effect/proc_holder/spell/aimed/fireball/hellish
@@ -110,21 +110,21 @@
continuing = 1
break
if(continuing)
user << "<span class='warning'>You are now phasing in.</span>"
to_chat(user, "<span class='warning'>You are now phasing in.</span>")
if(do_mob(user,user,150))
user.infernalphasein()
else
user << "<span class='warning'>You can only re-appear near a potential signer."
to_chat(user, "<span class='warning'>You can only re-appear near a potential signer.")
revert_cast()
return ..()
else
user.notransform = 1
user.fakefire()
src << "<span class='warning'>You begin to phase back into sinful flames.</span>"
to_chat(src, "<span class='warning'>You begin to phase back into sinful flames.</span>")
if(do_mob(user,user,150))
user.infernalphaseout()
else
user << "<span class='warning'>You must remain still while exiting.</span>"
to_chat(user, "<span class='warning'>You must remain still while exiting.</span>")
user.ExtinguishMob()
start_recharge()
return
@@ -153,7 +153,7 @@
/mob/living/proc/infernalphasein()
if(src.notransform)
src << "<span class='warning'>You're too busy to jaunt in.</span>"
to_chat(src, "<span class='warning'>You're too busy to jaunt in.</span>")
return 0
fakefire()
src.loc = get_turf(src)
@@ -232,9 +232,12 @@
var/turf/T = dancefloor_turfs[i]
T.ChangeTurf(dancefloor_turfs_types[i])
else
var/list/funky_turfs = RANGE_TURFS(1, user)
for(var/turf/closed/solid in funky_turfs)
user << "<span class='warning'>You're too close to a wall.</span>"
return
dancefloor_exists = TRUE
var/i = 1
var/list/funky_turfs = RANGE_TURFS(1, user)
dancefloor_turfs.len = funky_turfs.len
dancefloor_turfs_types.len = funky_turfs.len
for(var/t in funky_turfs)
@@ -26,7 +26,7 @@
target.notransform = 1
var/turf/mobloc = get_turf(target)
var/obj/effect/dummy/spell_jaunt/holder = new /obj/effect/dummy/spell_jaunt(mobloc)
new jaunt_out_type(mobloc, holder.dir)
new jaunt_out_type(mobloc, target.dir)
target.ExtinguishMob()
if(target.buckled)
target.buckled.unbuckle_mob(target,force=1)
@@ -51,7 +51,7 @@
holder.reappearing = 1
playsound(get_turf(target), 'sound/magic/Ethereal_Exit.ogg', 50, 1, -1)
sleep(25 - jaunt_in_time)
new jaunt_in_type(mobloc, holder.dir)
new jaunt_in_type(mobloc, target.dir)
sleep(jaunt_in_time)
qdel(holder)
if(!QDELETED(target))
@@ -92,7 +92,7 @@
if(!(newLoc.flags & NOJAUNT))
loc = newLoc
else
user << "<span class='warning'>Some strange aura is blocking the way!</span>"
to_chat(user, "<span class='warning'>Some strange aura is blocking the way!</span>")
src.canmove = 0
spawn(2) src.canmove = 1
+2 -2
View File
@@ -22,7 +22,7 @@
if(!iscarbon(user)) //Look ma, no hands
return
if(user.lying || user.handcuffed)
user << "<span class='warning'>You can't reach out!</span>"
to_chat(user, "<span class='warning'>You can't reach out!</span>")
return
..()
@@ -68,7 +68,7 @@
if(!proximity || target == user || !isliving(target) || !iscarbon(user) || user.lying || user.handcuffed) //getting hard after touching yourself would also be bad
return
if(user.lying || user.handcuffed)
user << "<span class='warning'>You can't reach out!</span>"
to_chat(user, "<span class='warning'>You can't reach out!</span>")
return
var/mob/living/M = target
M.Stun(2)
+8 -8
View File
@@ -51,19 +51,19 @@
if(stat_allowed) //Death is not my end!
if(M.stat == CONSCIOUS && iscarbon(M))
M << "<span class='notice'>You aren't dead enough to revive!</span>" //Usually a good problem to have
to_chat(M, "<span class='notice'>You aren't dead enough to revive!</span>" )
charge_counter = charge_max
return
if(!marked_item || QDELETED(marked_item)) //Wait nevermind
M << "<span class='warning'>Your phylactery is gone!</span>"
to_chat(M, "<span class='warning'>Your phylactery is gone!</span>")
return
var/turf/user_turf = get_turf(M)
var/turf/item_turf = get_turf(marked_item)
if(user_turf.z != item_turf.z)
M << "<span class='warning'>Your phylactery is out of range!</span>"
to_chat(M, "<span class='warning'>Your phylactery is out of range!</span>")
return
if(isobserver(M))
@@ -80,7 +80,7 @@
lich.real_name = M.mind.name
M.mind.transfer_to(lich)
lich.hardset_dna(null,null,lich.real_name,null,/datum/species/skeleton)
lich << "<span class='warning'>Your bones clatter and shutter as you are pulled back into this world!</span>"
to_chat(lich, "<span class='warning'>Your bones clatter and shutter as you are pulled back into this world!</span>")
charge_max += 600
var/mob/old_body = current_body
var/turf/body_turf = get_turf(old_body)
@@ -108,14 +108,14 @@
if(ABSTRACT in item.flags || NODROP in item.flags)
continue
marked_item = item
M << "<span class='warning'>You begin to focus your very being into the [item.name]...</span>"
to_chat(M, "<span class='warning'>You begin to focus your very being into the [item.name]...</span>")
break
if(!marked_item)
M << "<span class='caution'>You must hold an item you wish to make your phylactery...</span>"
to_chat(M, "<span class='caution'>You must hold an item you wish to make your phylactery...</span>")
return
if(!do_after(M, 50, needhand=FALSE, target=marked_item))
M << "<span class='warning'>Your soul snaps back to your body as you stop ensouling [marked_item.name]!</span>"
to_chat(M, "<span class='warning'>Your soul snaps back to your body as you stop ensouling [marked_item.name]!</span>")
marked_item = null
return
@@ -129,7 +129,7 @@
marked_item.add_atom_colour("#003300", ADMIN_COLOUR_PRIORITY)
poi_list |= marked_item
M << "<span class='userdanger'>With a hideous feeling of emptiness you watch in horrified fascination as skin sloughs off bone! Blood boils, nerves disintegrate, eyes boil in their sockets! As your organs crumble to dust in your fleshless chest you come to terms with your choice. You're a lich!</span>"
to_chat(M, "<span class='userdanger'>With a hideous feeling of emptiness you watch in horrified fascination as skin sloughs off bone! Blood boils, nerves disintegrate, eyes boil in their sockets! As your organs crumble to dust in your fleshless chest you come to terms with your choice. You're a lich!</span>")
M.set_species(/datum/species/skeleton)
current_body = M.mind.current
if(ishuman(M))
+3 -3
View File
@@ -23,7 +23,7 @@
/obj/effect/proc_holder/spell/targeted/tesla/proc/StartChargeup(mob/user = usr)
ready = 1
user << "<span class='notice'>You start gathering the power.</span>"
to_chat(user, "<span class='notice'>You start gathering the power.</span>")
Snd = new/sound('sound/magic/lightning_chargeup.ogg',channel = 7)
halo = image("icon"='icons/effects/effects.dmi',"icon_state" ="electricity","layer" = EFFECTS_LAYER)
user.add_overlay(halo)
@@ -43,7 +43,7 @@
/obj/effect/proc_holder/spell/targeted/tesla/revert_cast(mob/user = usr, message = 1)
if(message)
user << "<span class='notice'>No target found in range.</span>"
to_chat(user, "<span class='notice'>No target found in range.</span>")
Reset(user)
..()
@@ -53,7 +53,7 @@
Snd=sound(null, repeat = 0, wait = 1, channel = Snd.channel) //byond, why you suck?
playsound(get_turf(user),Snd,50,0)// Sorry MrPerson, but the other ways just didn't do it the way i needed to work, this is the only way.
if(get_dist(user,target)>range)
user << "<span class='notice'>They are too far away!</span>"
to_chat(user, "<span class='notice'>They are too far away!</span>")
Reset(user)
return
+15 -10
View File
@@ -19,7 +19,7 @@
/obj/effect/proc_holder/spell/aoe_turf/conjure/mime_wall/Click()
if(usr && usr.mind)
if(!usr.mind.miming)
usr << "<span class='notice'>You must dedicate yourself to silence first.</span>"
to_chat(usr, "<span class='notice'>You must dedicate yourself to silence first.</span>")
return
invocation = "<B>[usr.real_name]</B> looks as if a wall is in front of [usr.p_them()]."
else
@@ -57,15 +57,15 @@
for(var/mob/living/carbon/human/H in targets)
H.mind.miming=!H.mind.miming
if(H.mind.miming)
H << "<span class='notice'>You make a vow of silence.</span>"
to_chat(H, "<span class='notice'>You make a vow of silence.</span>")
else
H << "<span class='notice'>You break your vow of silence.</span>"
to_chat(H, "<span class='notice'>You break your vow of silence.</span>")
// These spells can only be gotten from the "Guide for Advanced Mimery series+" for Mime Traitors.
// These spells can only be gotten from the "Guide for Advanced Mimery series" for Mime Traitors.
/obj/effect/proc_holder/spell/targeted/forcewall/mime
name = "Invisible Blockade"
desc = "With more polished skills, a powerful mime can create a invisble blockade, blocking off a 3x1 area."
desc = "Form an invisible three tile wide blockade."
wall_type = /obj/effect/forcefield/mime/advanced
invocation_type = "emote"
invocation_emote_self = "<span class='notice'>You form a blockade in front of yourself.</span>"
@@ -81,7 +81,7 @@
/obj/effect/proc_holder/spell/targeted/forcewall/mime/Click()
if(usr && usr.mind)
if(!usr.mind.miming)
usr << "<span class='notice'>You must dedicate yourself to silence first.</span>"
to_chat(usr, "<span class='notice'>You must dedicate yourself to silence first.</span>")
return
invocation = "<B>[usr.real_name]</B> looks as if a blockade is in front of [usr.p_them()]."
else
@@ -90,7 +90,7 @@
/obj/effect/proc_holder/spell/aimed/finger_guns
name = "Finger Guns"
desc = "An ancient technqiue, passed down from mentor to student. Allows you to shoot bullets out of your fingers."
desc = "Shoot a mimed bullet from your fingers that does a stun and some damage."
school = "mime"
panel = "Mime"
charge_max = 300
@@ -99,6 +99,7 @@
invocation_emote_self = "<span class='dangers'>You fire your finger gun!</span>"
range = 20
projectile_type = /obj/item/projectile/bullet/weakbullet2
projectile_amount = 3
sound = null
active_msg = "You draw your fingers!"
deactive_msg = "You put your fingers at ease. Another time."
@@ -110,9 +111,13 @@
/obj/effect/proc_holder/spell/aimed/finger_guns/Click()
var/mob/living/carbon/human/owner = usr
if(owner.incapacitated())
to_chat(owner, "<span class='warning'>You can't properly point your fingers while incapacitated.</span>")
return
if(usr && usr.mind)
if(!usr.mind.miming)
usr << "<span class='notice'>You must dedicate yourself to silence first.</span>"
to_chat(usr, "<span class='notice'>You must dedicate yourself to silence first.</span>")
return
invocation = "<B>[usr.real_name]</B> fires [usr.p_their()] finger gun!"
else
@@ -124,7 +129,7 @@
spell = /obj/effect/proc_holder/spell/targeted/forcewall/mime
spellname = ""
name = "Guide to Advanced Mimery Vol 1"
desc = "When you turn the pages, it won't make a sound!"
desc = "The pages don't make any sound when turned."
icon_state ="bookmime"
/obj/item/weapon/spellbook/oneuse/mimery_guns
@@ -132,4 +137,4 @@
spellname = ""
name = "Guide to Advanced Mimery Vol 2"
desc = "There aren't any words written..."
icon_state ="bookmime"
icon_state ="bookmime"
@@ -22,11 +22,11 @@ Also, you never added distance checking after target is selected. I've went ahea
*/
/obj/effect/proc_holder/spell/targeted/mind_transfer/cast(list/targets, mob/user = usr, distanceoverride)
if(!targets.len)
user << "<span class='warning'>No mind found!</span>"
to_chat(user, "<span class='warning'>No mind found!</span>")
return
if(targets.len > 1)
user << "<span class='warning'>Too many minds! You're not a hive damnit!</span>"//Whaa...aat?
to_chat(user, "<span class='warning'>Too many minds! You're not a hive damnit!</span>")
return
var/mob/living/target = targets[1]
@@ -35,27 +35,27 @@ Also, you never added distance checking after target is selected. I've went ahea
var/t_is = target.p_are()
if(!(target in oview(range)) && !distanceoverride)//If they are not in overview after selection. Do note that !() is necessary for in to work because ! takes precedence over it.
user << "<span class='warning'>[t_He] [t_is] too far away!</span>"
to_chat(user, "<span class='warning'>[t_He] [t_is] too far away!</span>")
return
if(ismegafauna(target))
user << "<span class='warning'>This creature is too powerful to control!</span>"
to_chat(user, "<span class='warning'>This creature is too powerful to control!</span>")
return
if(target.stat == DEAD)
user << "<span class='warning'>You don't particularly want to be dead!</span>"
to_chat(user, "<span class='warning'>You don't particularly want to be dead!</span>")
return
if(!target.key || !target.mind)
user << "<span class='warning'>[t_He] appear[target.p_s()] to be catatonic! Not even magic can affect [target.p_their()] vacant mind.</span>"
to_chat(user, "<span class='warning'>[t_He] appear[target.p_s()] to be catatonic! Not even magic can affect [target.p_their()] vacant mind.</span>")
return
if(user.suiciding)
user << "<span class='warning'>You're killing yourself! You can't concentrate enough to do this!</span>"
to_chat(user, "<span class='warning'>You're killing yourself! You can't concentrate enough to do this!</span>")
return
if((target.mind.special_role in protected_roles) || cmptext(copytext(target.key,1,2),"@"))
user << "<span class='warning'>[target.p_their(TRUE)] mind is resisting your spell!</span>"
to_chat(user, "<span class='warning'>[target.p_their(TRUE)] mind is resisting your spell!</span>")
return
var/mob/living/victim = target//The target of the spell whos body will be transferred to.
@@ -6,7 +6,7 @@
var/list/magicspeciallist = list("staffchange","staffanimation", "wandbelt", "contract", "staffchaos", "necromantic", "bloodcontract")
if(user) //in this case either someone holding a spellbook or a badmin
user << "<B>You summoned [summon_type ? "magic" : "guns"]!</B>"
to_chat(user, "<B>You summoned [summon_type ? "magic" : "guns"]!</B>")
message_admins("[key_name_admin(user, 1)] summoned [summon_type ? "magic" : "guns"]!")
log_game("[key_name(user)] summoned [summon_type ? "magic" : "guns"]!")
for(var/mob/living/carbon/human/H in player_list)
@@ -20,17 +20,17 @@
guns.owner = H.mind
H.mind.objectives += guns
H.mind.special_role = "survivalist"
H << "<B>You are the survivalist! Your own safety matters above all else, and the only way to ensure your safety is to stockpile weapons! Grab as many guns as possible, by any means necessary. Kill anyone who gets in your way.</B>"
to_chat(H, "<B>You are the survivalist! Your own safety matters above all else, and the only way to ensure your safety is to stockpile weapons! Grab as many guns as possible, by any means necessary. Kill anyone who gets in your way.</B>")
else
var/datum/objective/steal_five_of_type/summon_magic/magic = new
magic.owner = H.mind
H.mind.objectives += magic
H.mind.special_role = "amateur magician"
H << "<B>You are the amateur magician! Grow your newfound talent! Grab as many magical artefacts as possible, by any means necessary. Kill anyone who gets in your way.</B>"
to_chat(H, "<B>You are the amateur magician! Grow your newfound talent! Grab as many magical artefacts as possible, by any means necessary. Kill anyone who gets in your way.</B>")
var/datum/objective/survive/survive = new
survive.owner = H.mind
H.mind.objectives += survive
H.attack_log += "\[[time_stamp()]\] <font color='red'>Was made into a survivalist, and trusts no one!</font>"
H.log_message("<font color='red'>Was made into a survivalist, and trusts no one!</font>", INDIVIDUAL_ATTACK_LOG)
H.mind.announce_objectives()
var/randomizeguns = pick(gunslist)
var/randomizemagic = pick(magiclist)
@@ -170,7 +170,7 @@
new /obj/item/weapon/scrying(get_turf(H))
if (!(H.dna.check_mutation(XRAY)))
H.dna.add_mutation(XRAY)
H << "<span class='notice'>The walls suddenly disappear.</span>"
to_chat(H, "<span class='notice'>The walls suddenly disappear.</span>")
if("voodoo")
new /obj/item/voodoo(get_turf(H))
if("whistle")
@@ -198,7 +198,7 @@
new /obj/item/device/necromantic_stone(get_turf(H))
if("bloodcontract")
new /obj/item/blood_contract(get_turf(H))
H << "<span class='notice'>You suddenly feel lucky.</span>"
to_chat(H, "<span class='notice'>You suddenly feel lucky.</span>")
playsound(get_turf(H),'sound/magic/Summon_Magic.ogg', 50, 1)
@@ -39,7 +39,7 @@
/obj/effect/proc_holder/spell/targeted/shapeshift/proc/Shapeshift(mob/living/caster)
for(var/mob/living/M in caster)
if(M.status_flags & GODMODE)
caster << "<span class='warning'>You're already shapeshifted!</span>"
to_chat(caster, "<span class='warning'>You're already shapeshifted!</span>")
return
var/mob/living/shape = new shapeshift_type(caster.loc)
@@ -80,7 +80,7 @@
var/obj/item/bodypart/part = X
if(item_to_retrieve in part.embedded_objects)
part.embedded_objects -= item_to_retrieve
C << "<span class='warning'>The [item_to_retrieve] that was embedded in your [L] has myseriously vanished. How fortunate!</span>"
to_chat(C, "<span class='warning'>The [item_to_retrieve] that was embedded in your [L] has myseriously vanished. How fortunate!</span>")
if(!C.has_embedded_objects())
C.clear_alert("embeddedobject")
break
@@ -110,4 +110,4 @@
if(message)
L << message
to_chat(L, message)
@@ -0,0 +1,23 @@
/obj/effect/proc_holder/spell/aoe_turf/conjure/the_traps
name = "The Traps!"
desc = "Summon a number of traps to confuse and weaken your enemies, and possibly you."
charge_max = 250
cooldown_min = 100
clothes_req = 1
invocation = "CAVERE INSIDIAS"
invocation_type = "shout"
range = 3
summon_type = list(
/obj/structure/trap/stun,
/obj/structure/trap/fire,
/obj/structure/trap/chill,
/obj/structure/trap/damage,
/obj/structure/swarmer/trap
)
summon_lifespan = 0
summon_amt = 5
action_icon_state = "the_traps"
@@ -10,7 +10,7 @@
qdel(attached_hand)
charge_counter = charge_max
attached_hand = null
user << "<span class='notice'>You draw the power out of your hand.</span>"
to_chat(user, "<span class='notice'>You draw the power out of your hand.</span>")
return 0
..()
@@ -29,9 +29,9 @@
qdel(attached_hand)
charge_counter = charge_max
attached_hand = null
user << "<span class='warning'>Your hands are full!</span>"
to_chat(user, "<span class='warning'>Your hands are full!</span>")
return 0
user << "<span class='notice'>You channel the power of the spell to your hand.</span>"
to_chat(user, "<span class='notice'>You channel the power of the spell to your hand.</span>")
return 1
@@ -14,7 +14,7 @@
/obj/effect/proc_holder/spell/voice_of_god/can_cast(mob/user = usr)
if(!user.can_speak())
user << "<span class='warning'>You are unable to speak!</span>"
to_chat(user, "<span class='warning'>You are unable to speak!</span>")
return FALSE
return TRUE
+2 -2
View File
@@ -264,13 +264,13 @@
var/mob/living/M = AM
M.Weaken(5)
M.adjustBruteLoss(5)
M << "<span class='userdanger'>You're slammed into the floor by [user]!</span>"
to_chat(M, "<span class='userdanger'>You're slammed into the floor by [user]!</span>")
else
new sparkle_path(get_turf(AM), get_dir(user, AM)) //created sparkles will disappear on their own
if(isliving(AM))
var/mob/living/M = AM
M.Weaken(stun_amt)
M << "<span class='userdanger'>You're thrown back by [user]!</span>"
to_chat(M, "<span class='userdanger'>You're thrown back by [user]!</span>")
AM.throw_at(throwtarget, ((Clamp((maxthrow - (Clamp(distfromcaster - 2, 0, distfromcaster))), 3, maxthrow))), 1,user)//So stuff gets tossed around at the same time.
/obj/effect/proc_holder/spell/aoe_turf/repulse/xeno //i fixed conflicts only to find out that this is in the WIZARD file instead of the xeno file?!