Overhauls and 2/28 sync (#244)
* map tweaks/shuttle engines * helpers and defines * global/onclick * controllers and datums * mapping * game folder * some other stuff * some modules * modules that aren't mobs * some mob stuff * new player stuff * mob living * silicon stuff * simple animal things * carbon/ayylmao * update_icons * carbon/human * sounds and tools * icons and stuff * hippie grinder changes + tgui * kitchen.dmi * compile issues fixed * mapfix * Mapfixes 2.0 * mapedit2.0 * mapmerger pls * Revert "mapedit2.0" This reverts commit 74139a3cacea10df7aafca06c0a10bd3daf3a481. * clean up vore folder + 2 hotfixes * admin ticket refinement * Blob tweaks and LAZYADD * LAZYADD IS LAZY * Magic strings purged * DEFINES NEED HIGHER PRIORITIES * Only a sleepless idiot deals in absolute TRUE|FALSE * u h g * progress bar fix * reverts ticket logs * there's always that one guy * fixes and stuff * 2/27 fixes * game folder stuff * stats * some modules again * clothing stuff gets vg clothing out of the main files * everything not mobs again * mob stuff * maps, tgui, sql stuff * icons * additional fixes and compile errors * don't need this anymore * Oh right this isn't needed anymore * maint bar re-added * that doesn't need to be here * stupid events * wtfeven * probably makes Travis happy * don't care to fix the grinder atm * fixes vending sprites, changes turret * lethal, not lethals * overylays are finicky creatures * lazy fix for bleeding edgy (#252) * map tweaks/shuttle engines * helpers and defines * global/onclick * controllers and datums * mapping * game folder * some other stuff * some modules * modules that aren't mobs * some mob stuff * new player stuff * mob living * silicon stuff * simple animal things * carbon/ayylmao * update_icons * carbon/human * sounds and tools * icons and stuff * hippie grinder changes + tgui * kitchen.dmi * compile issues fixed * mapfix * Mapfixes 2.0 * mapedit2.0 * mapmerger pls * Revert "mapedit2.0" This reverts commit 74139a3cacea10df7aafca06c0a10bd3daf3a481. * clean up vore folder + 2 hotfixes * admin ticket refinement * Blob tweaks and LAZYADD * LAZYADD IS LAZY * Magic strings purged * DEFINES NEED HIGHER PRIORITIES * Only a sleepless idiot deals in absolute TRUE|FALSE * u h g * progress bar fix * reverts ticket logs * there's always that one guy * fixes and stuff * 2/27 fixes * game folder stuff * stats * some modules again * clothing stuff gets vg clothing out of the main files * everything not mobs again * mob stuff * maps, tgui, sql stuff * icons * additional fixes and compile errors * don't need this anymore * Oh right this isn't needed anymore * maint bar re-added * that doesn't need to be here * stupid events * wtfeven * probably makes Travis happy * don't care to fix the grinder atm * fixes vending sprites, changes turret * lethal, not lethals * overylays are finicky creatures
This commit is contained in:
@@ -7,6 +7,7 @@
|
||||
var/active = FALSE //Used by toggle based abilities.
|
||||
var/ranged_mousepointer
|
||||
var/mob/living/ranged_ability_user
|
||||
var/ranged_clickcd_override = -1
|
||||
|
||||
var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin verb for now
|
||||
|
||||
@@ -20,7 +21,10 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
|
||||
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.
|
||||
ranged_ability_user.next_click = world.time + CLICK_CD_CLICK_ABILITY
|
||||
if(ranged_clickcd_override >= 0)
|
||||
ranged_ability_user.next_click = world.time + ranged_clickcd_override
|
||||
else
|
||||
ranged_ability_user.next_click = world.time + CLICK_CD_CLICK_ABILITY
|
||||
ranged_ability_user.face_atom(A)
|
||||
return FALSE
|
||||
|
||||
|
||||
@@ -6,7 +6,9 @@
|
||||
var/active_msg = "You charge your projectile!"
|
||||
var/base_icon_state = "projectile"
|
||||
var/active_icon_state = "projectile"
|
||||
var/projectile_damage_override = -1
|
||||
var/list/projectile_var_overrides = list()
|
||||
var/projectile_amount = 1 //Projectiles per cast.
|
||||
var/current_amount = 1 //How many projectiles left.
|
||||
|
||||
/obj/effect/proc_holder/spell/aimed/Click()
|
||||
var/mob/living/user = usr
|
||||
@@ -22,6 +24,7 @@
|
||||
remove_ranged_ability(msg)
|
||||
else
|
||||
msg = "<span class='notice'>[active_msg]<B>Left-click to shoot it at a target!</B></span>"
|
||||
current_amount = projectile_amount
|
||||
add_ranged_ability(user, msg, TRUE)
|
||||
|
||||
/obj/effect/proc_holder/spell/aimed/update_icon()
|
||||
@@ -48,18 +51,18 @@
|
||||
return FALSE
|
||||
fire_projectile(user, target)
|
||||
user.newtonian_move(get_dir(U, T))
|
||||
remove_ranged_ability() //Auto-disable the ability once successfully performed
|
||||
current_amount--
|
||||
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.preparePixelProjectile(target, get_turf(target), user)
|
||||
if(projectile_damage_override != -1)
|
||||
P.damage = projectile_damage_override
|
||||
P.nodamage = TRUE
|
||||
if(P.damage)
|
||||
P.nodamage = FALSE
|
||||
for(var/V in projectile_var_overrides)
|
||||
if(P.vars[V])
|
||||
P.vars[V] = projectile_var_overrides[V]
|
||||
P.fire()
|
||||
return TRUE
|
||||
|
||||
@@ -76,26 +79,10 @@
|
||||
base_icon_state = "lightning"
|
||||
sound = 'sound/magic/lightningbolt.ogg'
|
||||
active = FALSE
|
||||
var/tesla_range = 15
|
||||
var/tesla_power = 20000
|
||||
var/tesla_boom = FALSE
|
||||
projectile_var_overrides = list("tesla_range" = 15, "tesla_power" = 20000, "tesla_boom" = FALSE)
|
||||
active_msg = "You energize your hand with arcane lightning!"
|
||||
deactive_msg = "You let the energy flow out of your hands back into yourself..."
|
||||
|
||||
/obj/effect/proc_holder/spell/aimed/lightningbolt/fire_projectile(mob/living/user, atom/target)
|
||||
var/obj/item/projectile/magic/aoe/lightning/P = new /obj/item/projectile/magic/aoe/lightning(user.loc)
|
||||
P.current = get_turf(user)
|
||||
P.preparePixelProjectile(target, get_turf(target), user)
|
||||
if(projectile_damage_override != -1)
|
||||
P.damage = projectile_damage_override
|
||||
P.nodamage = TRUE
|
||||
if(P.damage)
|
||||
P.nodamage = FALSE
|
||||
P.tesla_power = tesla_power
|
||||
P.tesla_range = tesla_range
|
||||
P.tesla_boom = tesla_boom
|
||||
P.fire()
|
||||
return TRUE
|
||||
projectile_type = /obj/item/projectile/magic/aoe/lightning
|
||||
|
||||
/obj/effect/proc_holder/spell/aimed/fireball
|
||||
name = "Fireball"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/obj/effect/proc_holder/spell/targeted/barnyardcurse
|
||||
name = "Curse of the Barnyard"
|
||||
desc = "This spell dooms the fate of any unlucky soul to the speech and facial attributes of a barnyard animal"
|
||||
desc = "This spell dooms an unlucky soul to possess the speech and facial attributes of a barnyard animal."
|
||||
school = "transmutation"
|
||||
charge_type = "recharge"
|
||||
charge_max = 150
|
||||
@@ -40,7 +40,7 @@
|
||||
var/obj/item/clothing/mask/magichead = new choice
|
||||
magichead.flags |=NODROP
|
||||
magichead.flags_inv = null
|
||||
target.visible_message("<span class='danger'>[target]'s face lights up in fire, and after the event a barnyard animal's head takes it's place!</span>", \
|
||||
target.visible_message("<span class='danger'>[target]'s face bursts into flames, and a barnyard animal's head takes its place!</span>", \
|
||||
"<span class='danger'>Your face burns up, and shortly after the fire you realise you have the face of a barnyard animal!</span>")
|
||||
if(!target.dropItemToGround(target.wear_mask))
|
||||
qdel(target.wear_mask)
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
if(M.mind)
|
||||
for(var/obj/effect/proc_holder/spell/S in M.mind.spell_list)
|
||||
S.charge_counter = S.charge_max
|
||||
M <<"<span class='notice'>you feel raw magic flowing through you, it feels good!</span>"
|
||||
M <<"<span class='notice'>You feel raw magic flowing through you. It feels good!</span>"
|
||||
else
|
||||
M <<"<span class='notice'>you feel very strange for a moment, but then it passes.</span>"
|
||||
burnt_out = 1
|
||||
@@ -91,7 +91,7 @@
|
||||
charged_item = item
|
||||
break
|
||||
if(!charged_item)
|
||||
L << "<span class='notice'>you feel magical power surging to your hands, but the feeling rapidly fades...</span>"
|
||||
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>"
|
||||
else
|
||||
|
||||
@@ -158,7 +158,7 @@
|
||||
fakefire()
|
||||
src.loc = get_turf(src)
|
||||
src.client.eye = src
|
||||
src.visible_message("<span class='warning'><B>[src] appears in a firey blaze!</B>")
|
||||
src.visible_message("<span class='warning'><B>[src] appears in a fiery blaze!</B>")
|
||||
playsound(get_turf(src), 'sound/magic/exit_blood.ogg', 100, 1, -1)
|
||||
addtimer(CALLBACK(src, .proc/fakefireextinguish), 15, TIMER_UNIQUE)
|
||||
|
||||
|
||||
@@ -11,15 +11,16 @@
|
||||
range = -1
|
||||
include_user = 1
|
||||
cooldown_min = 50 //12 deciseconds reduction per rank
|
||||
var/wall_type = /obj/effect/forcefield/wizard
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/forcewall/cast(list/targets,mob/user = usr)
|
||||
new /obj/effect/forcefield/wizard(get_turf(user),user)
|
||||
new wall_type(get_turf(user),user)
|
||||
if(user.dir == SOUTH || user.dir == NORTH)
|
||||
new /obj/effect/forcefield/wizard(get_step(user, EAST),user)
|
||||
new /obj/effect/forcefield/wizard(get_step(user, WEST),user)
|
||||
new wall_type(get_step(user, EAST),user)
|
||||
new wall_type(get_step(user, WEST),user)
|
||||
else
|
||||
new /obj/effect/forcefield/wizard(get_step(user, NORTH),user)
|
||||
new /obj/effect/forcefield/wizard(get_step(user, SOUTH),user)
|
||||
new wall_type(get_step(user, NORTH),user)
|
||||
new wall_type(get_step(user, SOUTH),user)
|
||||
|
||||
|
||||
/obj/effect/forcefield/wizard
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon_state = "syndballoon"
|
||||
item_state = null
|
||||
flags = ABSTRACT | NODROP
|
||||
flags = ABSTRACT | NODROP | DROPDEL
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
force = 0
|
||||
throwforce = 0
|
||||
@@ -33,10 +33,10 @@
|
||||
attached_spell.attached_hand = null
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/melee/touch_attack/dropped()
|
||||
/obj/item/weapon/melee/touch_attack/Destroy()
|
||||
if(attached_spell)
|
||||
attached_spell.attached_hand = null
|
||||
qdel(src)
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/melee/touch_attack/disintegrate
|
||||
name = "\improper disintegrating touch"
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
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.overlays.Add(halo)
|
||||
user.add_overlay(halo)
|
||||
playsound(get_turf(user), Snd, 50, 0)
|
||||
if(do_mob(user,user,100,1))
|
||||
if(ready && cast_check(skipcharge=1))
|
||||
@@ -39,7 +39,7 @@
|
||||
/obj/effect/proc_holder/spell/targeted/tesla/proc/Reset(mob/user = usr)
|
||||
ready = 0
|
||||
if(halo)
|
||||
user.overlays.Remove(halo)
|
||||
user.cut_overlay(halo)
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/tesla/revert_cast(mob/user = usr, message = 1)
|
||||
if(message)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/obj/effect/proc_holder/spell/aoe_turf/conjure/mime_wall
|
||||
name = "Invisible wall"
|
||||
name = "Invisible Wall"
|
||||
desc = "The mime's performance transmutates into physical reality."
|
||||
school = "mime"
|
||||
panel = "Mime"
|
||||
@@ -59,4 +59,77 @@
|
||||
if(H.mind.miming)
|
||||
H << "<span class='notice'>You make a vow of silence.</span>"
|
||||
else
|
||||
H << "<span class='notice'>You break your vow of silence.</span>"
|
||||
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.
|
||||
|
||||
/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."
|
||||
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>"
|
||||
charge_max = 600
|
||||
sound = null
|
||||
clothes_req = 0
|
||||
range = -1
|
||||
include_user = 1
|
||||
|
||||
action_icon_state = "mime"
|
||||
action_background_icon_state = "bg_mime"
|
||||
|
||||
/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>"
|
||||
return
|
||||
invocation = "<B>[usr.real_name]</B> looks as if a blockade is in front of [usr.p_them()]."
|
||||
else
|
||||
invocation_type ="none"
|
||||
..()
|
||||
|
||||
/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."
|
||||
school = "mime"
|
||||
panel = "Mime"
|
||||
charge_max = 300
|
||||
clothes_req = 0
|
||||
invocation_type = "emote"
|
||||
invocation_emote_self = "<span class='dangers'>You fire your finger gun!</span>"
|
||||
range = 20
|
||||
projectile_type = /obj/item/projectile/bullet/weakbullet2
|
||||
sound = null
|
||||
active_msg = "You draw your fingers!"
|
||||
deactive_msg = "You put your fingers at ease. Another time."
|
||||
active = FALSE
|
||||
|
||||
action_icon_state = "mime"
|
||||
action_background_icon_state = "bg_mime"
|
||||
base_icon_state = "mime"
|
||||
|
||||
|
||||
/obj/effect/proc_holder/spell/aimed/finger_guns/Click()
|
||||
if(usr && usr.mind)
|
||||
if(!usr.mind.miming)
|
||||
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
|
||||
invocation_type ="none"
|
||||
..()
|
||||
|
||||
|
||||
/obj/item/weapon/spellbook/oneuse/mimery_blockade
|
||||
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!"
|
||||
icon_state ="bookmime"
|
||||
|
||||
/obj/item/weapon/spellbook/oneuse/mimery_guns
|
||||
spell = /obj/effect/proc_holder/spell/aimed/finger_guns
|
||||
spellname = ""
|
||||
name = "Guide to Advanced Mimery Vol 2"
|
||||
desc = "There aren't any words written..."
|
||||
icon_state ="bookmime"
|
||||
@@ -0,0 +1,44 @@
|
||||
/obj/effect/proc_holder/spell/voice_of_god
|
||||
name = "Voice of God"
|
||||
desc = "Speak with an incredibly compelling voice, forcing listeners to obey your commands."
|
||||
charge_max = 1200 //variable
|
||||
cooldown_min = 0
|
||||
level_max = 1
|
||||
clothes_req = 0
|
||||
action_icon_state = "voice_of_god"
|
||||
var/command
|
||||
var/cooldown_mod = 1
|
||||
var/power_mod = 1
|
||||
var/list/spans = list("colossus","yell")
|
||||
var/speech_sound = 'sound/magic/clockwork/invoke_general.ogg'
|
||||
|
||||
/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>"
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/obj/effect/proc_holder/spell/voice_of_god/choose_targets(mob/user = usr)
|
||||
perform(user=user)
|
||||
/obj/effect/proc_holder/spell/voice_of_god/perform(list/targets, recharge = 1, mob/user = usr)
|
||||
command = input(user, "Speak with the Voice of God", "Command")
|
||||
if(QDELETED(src) || QDELETED(user))
|
||||
return
|
||||
if(!command)
|
||||
revert_cast(user)
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/effect/proc_holder/spell/voice_of_god/cast(list/targets, mob/user = usr)
|
||||
user.say(uppertext(command), spans = spans, sanitize = FALSE)
|
||||
playsound(get_turf(user), speech_sound, 300, 1, 5)
|
||||
var/cooldown = voice_of_god(command, user, spans, base_multiplier = power_mod)
|
||||
charge_max = (cooldown * cooldown_mod)
|
||||
|
||||
/obj/effect/proc_holder/spell/voice_of_god/clown
|
||||
name = "Voice of Clown"
|
||||
desc = "Speak with an incredibly funny voice, startling people into obeying you for a brief moment."
|
||||
power_mod = 0.1
|
||||
cooldown_mod = 0.5
|
||||
spans = list("clown")
|
||||
speech_sound = 'sound/spookoween/scary_horn2.ogg'
|
||||
Reference in New Issue
Block a user