Merge pull request #963 from ZomgPonies/superhero2

Superhero Overhaul Part 2: Magnetic Boogaloo
This commit is contained in:
TheDZD
2015-05-08 16:55:59 -04:00
13 changed files with 272 additions and 18 deletions
+122
View File
@@ -0,0 +1,122 @@
/obj/effect/proc_holder/spell/wizard/targeted/magnet
name = "Magnetic Pull"
desc = "Pulls metalic objects from enemies hands with the power of MAGNETS."
charge_type = "recharge"
charge_max = 300
clothes_req = 0
invocation = "UN'LTD P'WAH!"
invocation_type = "none"
range = 7
cooldown_min = 30
selection_type = "view"
random_target = 1
var/energy = 0
var/ready = 0
var/image/halo = null
icon_power_button = "spell_tech"
/obj/effect/proc_holder/spell/wizard/targeted/magnet/Click()
if(!ready)
if(cast_check())
StartChargeup()
else
if(cast_check(skipcharge=1))
choose_targets()
return 1
/obj/effect/proc_holder/spell/wizard/targeted/magnet/proc/StartChargeup(mob/user = usr)
ready = 1
user << "<span class='notice'>You start gathering the power.</span>"
halo = image("icon"='icons/effects/effects.dmi',"icon_state" ="electricity","layer" = EFFECTS_LAYER)
user.overlays.Add(halo)
spawn(0)
while(ready)
sleep(1)
energy++
if(energy >= 100 && ready)
Discharge()
obj/effect/proc_holder/spell/wizard/targeted/magnet/proc/Reset(mob/user = usr)
ready = 0
energy = 0
if(halo)
user.overlays.Remove(halo)
/obj/effect/proc_holder/spell/wizard/targeted/magnet/revert_cast(mob/user = usr)
user << "<span class='notice'>No target found in range.</span>"
Reset(user)
..()
/obj/effect/proc_holder/spell/wizard/targeted/magnet/proc/Discharge(mob/user = usr)
var/mob/living/M = user
//M.electrocute_act(25,"magnet Bolt")
M << "<span class='danger'>You lose control over the power.</span>"
Reset(user)
start_recharge()
/obj/effect/proc_holder/spell/wizard/targeted/magnet/cast(list/targets, mob/user = usr)
var/mob/living/carbon/target = targets[1]
if(get_dist(user,target)>range)
user << "<span class='notice'>They are too far away!</span>"
Reset(user)
return
user.Beam(target,icon_state="lightning",icon='icons/effects/effects.dmi',time=5)
switch(energy)
if(0 to 25)
if(prob(50))
for(var/obj/item/I in target.l_hand)
if(I.flags & CONDUCT)
I.throw_at(user, I.throw_range, 4, target)
else
for(var/obj/item/I in target.r_hand)
if(I.flags & CONDUCT)
I.throw_at(user, I.throw_range, 4, target)
playsound(get_turf(target), 'sound/machines/defib_zap.ogg', 50, 1, -1)
if(25 to 75)
for(var/obj/item/I in target.l_hand)
if(I.flags & CONDUCT)
I.throw_at(user, I.throw_range, 4, target)
for(var/obj/item/I in target.r_hand)
if(I.flags & CONDUCT)
I.throw_at(user, I.throw_range, 4, target)
playsound(get_turf(target), 'sound/machines/defib_zap.ogg', 50, 1, -1)
if(75 to 100)
//CHAIN magnet
Bolt(user,target,energy,user)
Reset(user)
/obj/effect/proc_holder/spell/wizard/targeted/magnet/proc/Bolt(mob/origin,mob/target,bolt_energy,mob/user = usr)
origin.Beam(target,icon_state="lightning",icon='icons/effects/effects.dmi',time=5)
var/mob/living/carbon/current = target
if(bolt_energy < 75)
for(var/obj/item/I in target.l_hand)
if(I.flags & CONDUCT)
I.throw_at(user, I.throw_range, 4, target)
for(var/obj/item/I in target.r_hand)
if(I.flags & CONDUCT)
I.throw_at(user, I.throw_range, 4, target)
playsound(get_turf(current), 'sound/machines/defib_zap.ogg', 50, 1, -1)
else
for(var/obj/item/I in target.l_hand)
if(I.flags & CONDUCT)
I.throw_at(user, I.throw_range, 4, target)
for(var/obj/item/I in target.r_hand)
if(I.flags & CONDUCT)
I.throw_at(user, I.throw_range, 4, target)
playsound(get_turf(current), 'sound/machines/defib_zap.ogg', 50, 1, -1)
var/list/possible_targets = new
for(var/mob/living/M in view_or_range(range,target,"view"))
if(user == M || target == M && los_check(current,M)) // || origin == M ? Not sure double shockings is good or not
continue
possible_targets += M
if(!possible_targets.len)
return
var/mob/living/next = pick(possible_targets)
if(next)
Bolt(current,next,bolt_energy-6,user) // 5 max bounces
+48 -12
View File
@@ -346,22 +346,56 @@
desc = "Sometimes people choose justice. Sometimes, justice chooses you..."
icon_state = "securitybelt"
item_state = "security"
storage_slots = 14
storage_slots = 6
max_w_class = 3
max_combined_w_class = 28 // = 14 * 2
max_combined_w_class = 18
origin_tech = "bluespace=4;syndicate=2"
allow_quick_empty = 1
can_hold = list()
flags = NODROP
New()
..()
new /obj/item/weapon/grenade/smokebomb(src)
new /obj/item/weapon/grenade/smokebomb(src)
new /obj/item/weapon/grenade/smokebomb(src)
new /obj/item/weapon/grenade/smokebomb(src)
new /obj/item/weapon/legcuffs/bolas(src)
new /obj/item/weapon/legcuffs/bolas(src)
can_hold = list(
"/obj/item/weapon/grenade/smokebomb",
"/obj/item/weapon/legcuffs/bolas"
)
flags = NODROP
var/smokecount = 0
var/bolacount = 0
var/cooldown = 0
/obj/item/weapon/storage/belt/bluespace/owlman/New()
..()
new /obj/item/weapon/grenade/smokebomb(src)
new /obj/item/weapon/grenade/smokebomb(src)
new /obj/item/weapon/grenade/smokebomb(src)
new /obj/item/weapon/grenade/smokebomb(src)
new /obj/item/weapon/legcuffs/bolas(src)
new /obj/item/weapon/legcuffs/bolas(src)
processing_objects.Add(src)
cooldown = world.time
/obj/item/weapon/storage/belt/bluespace/owlman/process()
if(cooldown < world.time - 600)
smokecount = 0
var/obj/item/weapon/grenade/smokebomb/S
for(S in src)
smokecount++
bolacount = 0
var/obj/item/weapon/legcuffs/bolas/B
for(B in src)
bolacount++
if(smokecount < 4)
while(smokecount < 4)
new /obj/item/weapon/grenade/smokebomb(src)
smokecount++
if(bolacount < 2)
while(bolacount < 2)
new /obj/item/weapon/legcuffs/bolas(src)
bolacount++
cooldown = world.time
update_icon()
/* DEPRECATED DUE TO SUPERHERO CODE AND NODROP
// As a last resort, the belt can be used as a plastic explosive with a fixed timer (15 seconds). Naturally, you'll lose all your gear...
// Of course, it could be worse. It could spawn a singularity!
/obj/item/weapon/storage/belt/bluespace/owlman/afterattack(atom/target as obj|turf, mob/user as mob, flag)
@@ -400,6 +434,8 @@
del(target)
if (src)
del(src)
*/
/obj/item/weapon/storage/belt/bluespace/attack(mob/M as mob, mob/user as mob, def_zone)
return
+23
View File
@@ -240,6 +240,10 @@
flags = BLOCKHAIR | NODROP
siemens_coefficient = 2.0
/obj/item/clothing/head/corgi/en
name = "E-N suit head"
icon_state = "enhead"
/obj/item/clothing/head/bearpelt
name = "bear pelt hat"
desc = "Fuzzy."
@@ -344,6 +348,25 @@
item_state = "griffinhat"
flags = BLOCKHAIR|NODROP
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
var/cooldown = 0
action_button_name = "Caw"
icon_action_button = "action_griffin"
/obj/item/clothing/head/griffin/attack_self()
caw()
/obj/item/clothing/head/griffin/verb/caw()
set category = "Object"
set name = "Caw"
set src in usr
if(!istype(usr, /mob/living)) return
if(usr.stat) return
if(cooldown < world.time - 20) // A cooldown, to stop people being jerks
playsound(src.loc, "sound/misc/caw.ogg", 50, 1)
cooldown = world.time
/obj/item/clothing/head/lordadmiralhat
name = "Lord Admiral's Hat"
+17
View File
@@ -136,7 +136,24 @@
icon_state = "owl"
species_fit = list("Vox")
flags = MASKCOVERSMOUTH | MASKCOVERSEYES | BLOCK_GAS_SMOKE_EFFECT | MASKINTERNALS | NODROP
var/cooldown = 0
action_button_name = "Hoot"
icon_action_button = "action_owlman"
/obj/item/clothing/mask/gas/owl_mask/attack_self()
hoot()
/obj/item/clothing/mask/gas/owl_mask/verb/hoot()
set category = "Object"
set name = "Hoot"
set src in usr
if(!istype(usr, /mob/living)) return
if(usr.stat) return
if(cooldown < world.time - 35) // A cooldown, to stop people being jerks
playsound(src.loc, "sound/misc/hoot.ogg", 50, 1)
cooldown = world.time
// ********************************************************************
@@ -158,6 +158,25 @@
siemens_coefficient = 2.0
flags = NODROP
/obj/item/clothing/suit/corgisuit/en
name = "E-N Suit"
icon_state = "ensuit"
/obj/item/clothing/suit/corgisuit/en/New()
..()
processing_objects.Add(src)
/obj/item/clothing/suit/corgisuit/en/process()
if(prob(2))
for(var/obj/M in orange(2,src))
if(!M.anchored && (M.flags & CONDUCT))
step_towards(M,src)
for(var/mob/living/silicon/S in orange(2,src))
if(istype(S, /mob/living/silicon/ai)) continue
step_towards(S,src)
for(var/mob/living/carbon/human/machine/M in orange(2,src))
step_towards(M,src)
/obj/item/clothing/suit/monkeysuit
name = "Monkey Suit"
desc = "A suit that looks like a primate"
+42 -6
View File
@@ -21,6 +21,7 @@
for(var/obj/item/W in H)
if(istype(W,/obj/item/organ)) continue
H.unEquip(W)
H.equip_to_slot_or_del(new /obj/item/device/radio/headset(H), slot_l_ear)
/datum/superheroes/proc/assign_genes(var/mob/living/carbon/human/H)
if(default_genes.len)
@@ -39,7 +40,7 @@
/datum/superheroes/proc/assign_id(var/mob/living/carbon/human/H)
var/obj/item/weapon/card/id/syndicate/W = new(H)
W.registered_name = H.real_name
W.access = get_all_accesses()
W.access = list(access_maint_tunnels)
if(class == "Superhero")
W.name = "[H.real_name]'s ID Card (Superhero)"
W.assignment = "Superhero"
@@ -64,7 +65,7 @@
/datum/superheroes/owlman/equip(var/mob/living/carbon/human/H)
..()
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black/greytide(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/clothing/under/owl(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/suit/toggle/owlwings(H), slot_wear_suit)
H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/owl_mask(H), slot_wear_mask)
@@ -88,6 +89,14 @@
H.equip_to_slot_or_del(new /obj/item/clothing/suit/toggle/owlwings/griffinwings(H), slot_wear_suit)
H.equip_to_slot_or_del(new /obj/item/clothing/head/griffin(H), slot_head)
var/obj/item/weapon/implant/freedom/L = new/obj/item/weapon/implant/freedom(H)
L.imp_in = H
L.implanted = 1
var/obj/item/organ/external/affected = H.organs_by_name["head"]
affected.implants += L
L.part = affected
return 1
/datum/superheroes/lightnian
name = "LightnIan"
@@ -100,7 +109,7 @@
/datum/superheroes/lightnian/equip(var/mob/living/carbon/human/H)
..()
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/orange(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/clothing/under/color/brown(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/suit/corgisuit(H), slot_wear_suit)
H.equip_to_slot_or_del(new /obj/item/clothing/head/corgi(H), slot_head)
@@ -108,7 +117,22 @@
H.equip_to_slot_or_del(new /obj/item/weapon/bedsheet/orange(H), slot_back)
/datum/superheroes/electro
name = "Electro-Negmatic"
class = "Supevillain"
desc = "You were a roboticist, once. Now you are Electro-Negmatic, a name this station will learn to fear. You designed \
your costume to resemble E-N, your faithful dog that some callous RD destroyed because it was sparking up the plasma. You \
intend to take your revenge and make them all pay thanks to your magnetic powers."
default_spells = list(/obj/effect/proc_holder/spell/wizard/targeted/magnet)
/datum/superheroes/electro/equip(var/mob/living/carbon/human/H)
..()
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black/greytide(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/clothing/under/color/grey(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/suit/corgisuit/en(H), slot_wear_suit)
H.equip_to_slot_or_del(new /obj/item/clothing/head/corgi/en(H), slot_head)
H.equip_to_slot_or_del(new /obj/item/weapon/bedsheet/cult(H), slot_back)
@@ -120,7 +144,6 @@
/obj/effect/proc_holder/spell/wizard/targeted/recruit
name = "Recruit Greyshirt"
desc = "Allows you to recruit a conscious, non-braindead, non-catatonic human to be part of the Greyshirts, your personal henchmen. This works on Civilians only and you can recruit a maximum of 3!."
panel = "Shadowling Abilities"
charge_max = 450
clothes_req = 0
range = 1 //Adjacent to user
@@ -191,11 +214,24 @@
ticker.mode.greyshirts += target.mind
target.set_species("Human")
target.h_style = "Bald"
target.fully_replace_character_name(target.real_name, "Generic Henchman ([rand(1, 1000)])")
target.f_style = "Shaved"
target.s_tone = 35
target.r_eyes = 1
target.b_eyes = 1
target.g_eyes = 1
for(var/obj/item/W in target)
if(istype(W,/obj/item/organ)) continue
target.unEquip(W)
target.fully_replace_character_name(target.real_name, "Generic Henchman ([rand(1, 1000)])")
target.equip_to_slot_or_del(new /obj/item/clothing/under/color/grey/greytide(target), slot_w_uniform)
target.equip_to_slot_or_del(new /obj/item/clothing/shoes/black/greytide(target), slot_shoes)
target.equip_to_slot_or_del(new /obj/item/weapon/storage/toolbox/mechanical/greytide(target), slot_l_hand)
target.regenerate_icons()
var/obj/item/weapon/card/id/syndicate/W = new(target)
W.registered_name = target.real_name
W.access = list(access_maint_tunnels)
W.name = "[target.real_name]'s ID Card (Greyshirt)"
W.assignment = "Greyshirt"
target.equip_to_slot_or_del(W, slot_wear_id)
target.equip_to_slot_or_del(new /obj/item/device/radio/headset(target), slot_l_ear)
target.regenerate_icons()