From c46d689e2b300bdc8c5b153855b1a5bbb2c5b168 Mon Sep 17 00:00:00 2001 From: uporotiy Date: Thu, 23 Jun 2011 08:29:42 +0000 Subject: [PATCH] Glorious comeback update. Object spells - fixed two minor bugs. Added the possibility of making a critical failure effect for the spells. Singularity beacon - added to traitor spawn list. Must be screwdrivered to the floor before you can activate it. Singularity - optimised the code a bit. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@1709 316c924e-a436-60f5-8080-3fe189b3f50e --- code/datums/spell.dm | 10 ++- code/datums/spells/inflict_handler.dm | 4 +- code/datums/spells/projectile.dm | 1 + code/game/objects/devices/PDA/uplink.dm | 6 ++ code/game/spacecraft/syndicatebeacon.dm | 68 ++++++++++++++++-- code/modules/power/singularity/singularity.dm | 34 +++++---- icons/obj/singularity.dmi | Bin 26227 -> 27972 bytes 7 files changed, 96 insertions(+), 27 deletions(-) diff --git a/code/datums/spell.dm b/code/datums/spell.dm index 251e401a957..8fcd4b44adf 100644 --- a/code/datums/spell.dm +++ b/code/datums/spell.dm @@ -31,6 +31,8 @@ var/list/spells = typesof(/obj/proc_holder/spell) //needed for the badmin verb f var/smoke_spread = 0 //1 - harmless, 2 - harmful var/smoke_amt = 0 //cropped at 10 + var/critfailchance = 0 + /obj/proc_holder/spell/proc/cast_check(skipcharge = 0,mob/user = usr) //checks if the spell can be cast based on its settings; skipcharge is used when an additional cast_check is called inside the spell if(!(src in usr.spell_list)) @@ -111,7 +113,10 @@ var/list/spells = typesof(/obj/proc_holder/spell) //needed for the badmin verb f spawn(0) if(charge_type == "recharge" && recharge) start_recharge() - cast(targets) + if(prob(critfailchance)) + critfail(targets) + else + cast(targets) after_cast(targets) /obj/proc_holder/spell/proc/before_cast(list/targets) @@ -156,6 +161,9 @@ var/list/spells = typesof(/obj/proc_holder/spell) //needed for the badmin verb f /obj/proc_holder/spell/proc/cast(list/targets) return +/obj/proc_holder/spell/proc/critfail(list/targets) + return + /obj/proc_holder/spell/proc/revert_cast() //resets recharge or readds a charge switch(charge_type) if("recharge") diff --git a/code/datums/spells/inflict_handler.dm b/code/datums/spells/inflict_handler.dm index e2e5e0cf1cc..a1562b95d7b 100644 --- a/code/datums/spells/inflict_handler.dm +++ b/code/datums/spells/inflict_handler.dm @@ -29,7 +29,7 @@ continue //damage if(amt_dam_brute > 0) - if(amt_dam_fire > 0) + if(amt_dam_fire >= 0) target.take_overall_damage(amt_dam_brute,amt_dam_fire) else if (amt_dam_fire < 0) target.take_overall_damage(amt_dam_brute,0) @@ -38,7 +38,7 @@ if(amt_dam_fire > 0) target.take_overall_damage(0,amt_dam_fire) target.heal_overall_damage(amt_dam_brute,0) - else if (amt_dam_fire < 0) + else if (amt_dam_fire <= 0) target.heal_overall_damage(amt_dam_brute,amt_dam_fire) target.toxloss += amt_dam_tox target.oxyloss += amt_dam_oxy diff --git a/code/datums/spells/projectile.dm b/code/datums/spells/projectile.dm index efcfca2f3c9..bf19c00f134 100644 --- a/code/datums/spells/projectile.dm +++ b/code/datums/spells/projectile.dm @@ -45,6 +45,7 @@ if(proj_homing) if(proj_insubstantial) + projectile.dir = get_dir(projectile,target) projectile.loc = get_step_to(projectile,target) else step_to(projectile,target) diff --git a/code/game/objects/devices/PDA/uplink.dm b/code/game/objects/devices/PDA/uplink.dm index e7c1d08ca30..5092cb2af39 100644 --- a/code/game/objects/devices/PDA/uplink.dm +++ b/code/game/objects/devices/PDA/uplink.dm @@ -55,6 +55,8 @@ menu_message += "
" menu_message += "Binary Translator (3)
" menu_message += "Hacked AI Module (7)
" + menu_message += "
" + menu_message += "Singularity Beacon (does not include a screwdriver) (1)
" menu_message += "
" return @@ -162,6 +164,10 @@ if (uses >= 3) uses -= 3 new /obj/item/device/radio/headset/traitor(get_turf(hostpda)) + if("singubeacon") + if(uses) + uses-- + new /obj/machinery/singularity_beacon/syndicate(get_turf(hostpda)) generate_menu() print_to_host(menu_message) diff --git a/code/game/spacecraft/syndicatebeacon.dm b/code/game/spacecraft/syndicatebeacon.dm index 14cebc2977b..479bc6dc4c5 100644 --- a/code/game/spacecraft/syndicatebeacon.dm +++ b/code/game/spacecraft/syndicatebeacon.dm @@ -98,17 +98,73 @@ selfdestructing = 1 spawn() explosion(src.loc, rand(3,8), rand(1,3), 1, 10) +#define SCREWED 32 + /obj/machinery/singularity_beacon //not the best place for it but it's a hack job anyway -- Urist name = "ominous beacon" desc = "This looks suspicious..." - icon = 'device.dmi' - icon_state = "syndbeacon" + icon = 'singularity.dmi' + icon_state = "beacon" - anchored = 1 + anchored = 0 density = 1 - New(loc) + stat = 0 + + var/active = 0 //It doesn't use up power, so use_power wouldn't really suit it + var/icontype = "beacon" + + proc/Activate(mob/user = null) + for(var/obj/machinery/singularity/singulo in world) + if(singulo.z == z) + singulo.target = src + icon_state = "[icontype]1" + active = 1 + if(user) user << "\blue You activate the beacon." + + proc/Deactivate(mob/user = null) + for(var/obj/machinery/singularity/singulo in world) + if(singulo.target == src) + singulo.target = null + icon_state = "[icontype]0" + active = 0 + if(user) user << "\blue You deactivate the beacon." + + attack_ai(mob/user as mob) + return + + attack_hand(var/mob/user as mob) + if(stat & SCREWED) + return active ? Deactivate(user) : Activate(user) + else + user << "\red You need to screw the beacon to the floor first!" + return + + attackby(obj/item/weapon/W as obj, mob/user as mob) + if(istype(W,/obj/item/weapon/screwdriver)) + if(stat & SCREWED) + if(active) + user << "\red You need to deactivate the beacon first!" + return + else + stat &= ~SCREWED + anchored = 0 + user << "\blue You unscrew the beacon from the floor." + return + else + stat |= SCREWED + anchored = 1 + user << "\blue You screw the beacon to the floor." + return + ..() - for(var/obj/machinery/singularity/singulo in world) - singulo.target = src \ No newline at end of file + Del() + if(active) Deactivate() + ..() + +/obj/machinery/singularity_beacon/syndicate + icontype = "beaconsynd" + icon_state = "beaconsynd0" + +#undef SCREWED \ No newline at end of file diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index 7d9549329d3..ad685ce4813 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -36,8 +36,9 @@ var/global/list/uneatable = list( del(src) ..() for(var/obj/machinery/singularity_beacon/singubeacon in world) - target = singubeacon - break + if(singubeacon.active) + target = singubeacon + break return @@ -195,25 +196,22 @@ var/global/list/uneatable = list( eat() - for(var/atom/X in orange(consume_range,src)) - if(isarea(X)) - continue + for(var/atom/movable/X in orange(consume_range,src)) consume(X) - for(var/atom/X in orange(grav_pull,src)) - if(isarea(X)) - continue + for(var/turf/X in orange(consume_range,src)) + consume(X) + for(var/atom/movable/X in orange(grav_pull,src)) if(is_type_in_list(X, uneatable)) continue - if(!isturf(X)) - if((!X:anchored && (!istype(X,/mob/living/carbon/human)))|| (src.current_size >= 9)) - step_towards(X,src) - else if(istype(X,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = X - if(istype(H.shoes,/obj/item/clothing/shoes/magboots)) - var/obj/item/clothing/shoes/magboots/M = H.shoes - if(M.magpulse) - continue - step_towards(H,src) + if((!X:anchored && (!istype(X,/mob/living/carbon/human)))|| (src.current_size >= 9)) + step_towards(X,src) + else if(istype(X,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = X + if(istype(H.shoes,/obj/item/clothing/shoes/magboots)) + var/obj/item/clothing/shoes/magboots/M = H.shoes + if(M.magpulse) + continue + step_towards(H,src) return diff --git a/icons/obj/singularity.dmi b/icons/obj/singularity.dmi index bd39b710bd46072f3326dc6ce49cba3f4bfe54dc..350052781f7d12c98c156d4ce1f71538b71f00cc 100644 GIT binary patch delta 8560 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 W^tm5=mX-keYbwt)70Y3k@Ba_7?K)5Z