From d252656e4b2a540b4a3e0e1243cfc9f5fdd76e04 Mon Sep 17 00:00:00 2001 From: "Wowzewow (Wezzy)" <42310821+alsoandanswer@users.noreply.github.com> Date: Wed, 3 Jun 2020 16:51:28 +0800 Subject: [PATCH] RFD animations for building stuff (#8769) --- code/__defines/_layers.dm | 3 +- code/game/machinery/doors/airlock.dm | 2 +- code/game/objects/effects/misc.dm | 40 +++++++++ code/game/objects/items/weapons/RFD.dm | 107 +++++++++++++------------ html/changelogs/wezzy_RFD_anims.yml | 44 ++++++++++ icons/effects/effects_rfd.dmi | Bin 0 -> 22425 bytes 6 files changed, 144 insertions(+), 52 deletions(-) create mode 100644 html/changelogs/wezzy_RFD_anims.yml create mode 100644 icons/effects/effects_rfd.dmi diff --git a/code/__defines/_layers.dm b/code/__defines/_layers.dm index b4269ce6e9a..567eddffb30 100644 --- a/code/__defines/_layers.dm +++ b/code/__defines/_layers.dm @@ -14,6 +14,7 @@ #define DOOR_CLOSED_LAYER 3.1 //Above most items if closed #define BELOW_MOB_LAYER 3.7 #define ABOVE_MOB_LAYER 4.1 +#define ABOVE_ALL_MOB_LAYER 4.5 #define LIGHTING_LAYER 11 #define EFFECTS_ABOVE_LIGHTING_LAYER 12 // For overlays you want to be above light. #define HUD_LAYER 20 //Above lighting, but below obfuscation. For in-game HUD effects (whereas SCREEN_LAYER is for abstract/OOC things like inventory slots) @@ -30,4 +31,4 @@ #define MECH_ARM_LAYER 4.06 #define MECH_DECAL_LAYER 4.07 #define MECH_GEAR_LAYER 4.08 -#define MECH_ABOVE_LAYER 4.09 \ No newline at end of file +#define MECH_ABOVE_LAYER 4.09 diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 92c4eff6417..7156c9950d0 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -1040,7 +1040,7 @@ About the new airlock wires panel: if(src.isElectrified()) if(src.shock(user, 75)) return - if(istype(C, /obj/item/taperoll)) + if(istype(C, /obj/item/taperoll) || istype(C, /obj/item/rfd)) return if(!istype(C, /obj/item/forensics)) src.add_fingerprint(user) diff --git a/code/game/objects/effects/misc.dm b/code/game/objects/effects/misc.dm index 86ec454a8a5..7913fb6b69b 100644 --- a/code/game/objects/effects/misc.dm +++ b/code/game/objects/effects/misc.dm @@ -37,3 +37,43 @@ /proc/shadow(atom/movable/target) new /atom/movable/afterimage(get_turf(target), target) + +/obj/effect/constructing_effect + icon = 'icons/effects/effects_rfd.dmi' + icon_state = "" + layer = ABOVE_ALL_MOB_LAYER + anchored = TRUE + var/delay = 0 + var/status = 0 + +/obj/effect/constructing_effect/Initialize(mapload, build_delay, mode) + . = ..() + delay = build_delay // so the variables transfer over between procs. + status = mode + if(status == 3) + addtimer(CALLBACK(src, /atom/.proc/update_icon), 11) + delay -= 11 + icon_state = "rfd_end_reverse" + else + update_icon() + +/obj/effect/constructing_effect/update_icon() + icon_state = "rfd" + if(delay < 10) + icon_state += "_shortest" + else if(delay < 20) + icon_state += "_shorter" + else if(delay < 37) + icon_state += "_short" + if(status == 3) + icon_state += "_reverse" + +/obj/effect/constructing_effect/proc/end_animation() + if(status == 3) + end() + else + icon_state = "rfd_end" + addtimer(CALLBACK(src, .proc/end), 15) + +/obj/effect/constructing_effect/proc/end() + qdel(src) diff --git a/code/game/objects/items/weapons/RFD.dm b/code/game/objects/items/weapons/RFD.dm index c8a02513d48..416c7c227b8 100644 --- a/code/game/objects/items/weapons/RFD.dm +++ b/code/game/objects/items/weapons/RFD.dm @@ -23,18 +23,23 @@ drop_sound = 'sound/items/drop/gun.ogg' pickup_sound = 'sound/items/pickup/gun.ogg' var/stored_matter = 30 // Starts off full. - var/working = 0 + var/working = FALSE var/mode = 1 var/number_of_modes = 1 var/list/modes var/crafting = FALSE + var/build_cost = 0 + var/build_type + var/build_turf + var/build_delay + /obj/item/rfd/Initialize() . = ..() update_icon() /obj/item/rfd/attack() - return 0 + return FALSE /obj/item/rfd/proc/can_use(var/mob/user,var/turf/T) return (user.Adjacent(T) && user.get_active_hand() == src && !user.stat && !user.restrained()) @@ -59,7 +64,6 @@ if((stored_matter + 10) > 30) to_chat(user, "The RFD can't hold any more matter-units.") return - //TODO: Possible better animation user.drop_from_inventory(W,src) qdel(W) stored_matter += 10 @@ -96,10 +100,10 @@ /obj/item/rfd/proc/useResource(var/amount, var/mob/user) if(stored_matter < amount) - return 0 + return FALSE stored_matter -= amount update_icon() - return 1 + return TRUE /obj/item/rfd/update_icon() //For the fancy "ammo" counter overlays.Cut() @@ -150,43 +154,38 @@ RFD Construction-Class mode = 3 else mode = 1 - to_chat(user, SPAN_NOTICE("You switch the selection dial to \"[current_mode]\".")) - playsound(src.loc, 'sound/effects/pop.ogg', 50, 0) - if(prob(20)) - spark(get_turf(src), 3, alldirs) + if(current_mode) + to_chat(user, SPAN_NOTICE("You switch the selection dial to \"[current_mode]\".")) + playsound(src.loc, 'sound/effects/pop.ogg', 50, 0) + if(prob(20)) + spark(get_turf(src), 3, alldirs) /obj/item/rfd/construction/afterattack(atom/A, mob/user, proximity) if(!proximity) return if(disabled && !isrobot(user)) - return 0 + return FALSE if(istype(get_area(A),/area/shuttle)||istype(get_area(A),/turf/space/transit)) - return 0 + return FALSE var/turf/t = get_turf(A) if (isNotStationLevel(t.z)) - return 0 + return FALSE return alter_turf(A, user, (mode == 3)) /obj/item/rfd/construction/proc/alter_turf(var/turf/T,var/mob/user,var/deconstruct) - var/build_cost = 0 - var/build_type - var/build_turf - var/build_delay - var/build_other - - if(working == 1) - return 0 + if(working) + return FALSE if(mode == 3 && istype(T,/obj/machinery/door/airlock)) build_cost = 10 build_delay = 50 build_type = "airlock" else if(mode == 2 && !deconstruct && istype(T,/turf/simulated/floor)) - build_cost = 10 - build_delay = 50 + build_cost = 3 + build_delay = 20 build_type = "airlock" - build_other = /obj/machinery/door/airlock + build_turf = /obj/machinery/door/airlock else if(!deconstruct && (istype(T,/turf/space) || istype(T,T.baseturf))) build_cost = 1 build_type = "floor" @@ -203,39 +202,48 @@ RFD Construction-Class build_type = deconstruct ? "floor" : "wall" build_turf = deconstruct ? T.baseturf : /turf/simulated/wall else - return 0 + return FALSE if(!build_type) - working = 0 - return 0 + working = FALSE + return FALSE - if(!useResource(build_cost, user)) + if(mode == 3 && !T.density && !istype(T,/turf/simulated/floor)) + to_chat(user, "\The [build_type] must be closed before you can deconstruct it.") + return FALSE + + if(stored_matter < build_cost) to_chat(user, SPAN_WARNING("The \'Low Ammo\' light on the device blinks yellow.")) flick("[icon_state]-empty", src) - return 0 + return FALSE - playsound(get_turf(src), 'sound/machines/hydraulic_long.ogg', 50, 1) + playsound(get_turf(src), 'sound/machines/hydraulic_short.ogg', 50, 1) - working = 1 + working = TRUE user.visible_message(SPAN_NOTICE("[user] holds \the [src] towards \the [T]."), SPAN_NOTICE("You start [deconstruct ? "deconstructing" : "constructing"] \a [build_type]...")) + var/obj/effect/constructing_effect/rfd_effect = new(get_turf(T), src.build_delay, src.mode) - if(build_delay && !do_after(user, build_delay)) - working = 0 - return 0 + if((build_delay && !do_after(user, build_delay)) || (!useResource(build_cost, user))) + working = FALSE + rfd_effect.end_animation() + return FALSE - working = 0 + working = FALSE if(build_delay && !can_use(user,T)) - return 0 + return FALSE if(build_turf) T.ChangeTurf(build_turf) - else if(build_other) - new build_other(T) else qdel(T) + rfd_effect.end_animation() playsound(get_turf(src), 'sound/effects/magnetclamp.ogg', 50, 1) - return 1 + build_cost = null + build_delay = null + build_type = null + build_turf = null // So it resets and any fuckery is avoided + return TRUE /obj/item/rfd/construction/borg canRwall = 1 @@ -247,11 +255,11 @@ RFD Construction-Class var/cost = amount*30 if(R.cell.charge >= cost) R.cell.use(cost) - return 1 - return 0 + return TRUE + return FALSE /obj/item/rfd/construction/borg/infinite/useResource() - return 1 + return TRUE /obj/item/rfd/construction/borg/attackby() return @@ -266,13 +274,13 @@ RFD Construction-Class if(module.holder && module.holder.cell) if(module.holder.cell.charge >= cost) module.holder.cell.use(cost) - return 1 + return TRUE else if(istype(user, /mob/living/heavy_vehicle)) var/obj/item/cell/c = user.get_cell() if(c && c.charge >= cost) c.use(cost) - return 1 - return 0 + return TRUE + return FALSE /obj/item/rfd/construction/mounted/attackby() return @@ -462,8 +470,8 @@ RFD Piping-Class var/selected_mode = STANDARD_PIPE var/pipe_examine = "Pipe" // used in the examine proc to see what you're putting down at a glance var/selected_pipe = 0 // default is standard pipe, used for the new pipe creation - var/build_cost = 1 // this RFD only uses 1 unit of power per pipe, but can be modified if need be in future - var/build_delay = 10 + build_cost = 1 // this RFD only uses 1 unit of power per pipe, but can be modified if need be in future + build_delay = 10 // The numbers below refer to the numberized designator for each pipe, which is used in obj/item/pipe's new // Take a look at code\game\machinery\pipe\construction.dm line 69 for more information. - Geeves @@ -522,7 +530,7 @@ RFD Piping-Class if(working) return FALSE - if(!useResource(build_cost, user)) + if(stored_matter < build_cost) to_chat(user, SPAN_WARNING("The \'Low Ammo\' light on the device blinks yellow.")) flick("[icon_state]-empty", src) return FALSE @@ -530,13 +538,12 @@ RFD Piping-Class playsound(get_turf(src), 'sound/machines/click.ogg', 50, TRUE) working = TRUE - to_chat(user, SPAN_NOTICE("You start laying down your pipe...")) + user.visible_message(SPAN_NOTICE("[user] holds \the [src] towards \the [T]."), SPAN_NOTICE("You start laying down your pipe...")) - if(build_delay && !do_after(user, build_delay)) + if((build_delay && !do_after(user, build_delay)) || (!useResource(build_cost, user))) working = FALSE return FALSE - working = FALSE if(build_delay && !can_use(user, T)) return FALSE diff --git a/html/changelogs/wezzy_RFD_anims.yml b/html/changelogs/wezzy_RFD_anims.yml new file mode 100644 index 00000000000..1f9d9a53ca3 --- /dev/null +++ b/html/changelogs/wezzy_RFD_anims.yml @@ -0,0 +1,44 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +# balance +# admin +# backend +# security +# refactor +################################# + +# Your name. +author: Wowzewow (Wezzy), MrDoomBringer + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - imageadd: "RFD-Cs have cool animations now. Check it out!" + - bugfix: "RFD-Cs can properly build airlocks now." + - bugfix: "RFDs no longer eat your ammo when you move away." + - bugfix: "RFD-Cs construct airlocks cheaper and faster to be more in line with wall deconstruction." diff --git a/icons/effects/effects_rfd.dmi b/icons/effects/effects_rfd.dmi new file mode 100644 index 0000000000000000000000000000000000000000..c97e314ed67d20398f67629a8a12da37e59a1dd0 GIT binary patch literal 22425 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 R3NDG+^=*LP{T;`%{}0>fG;06= literal 0 HcmV?d00001