diff --git a/code/_onclick/cyborg.dm b/code/_onclick/cyborg.dm index 0fe73bad6e..6ed126cf37 100644 --- a/code/_onclick/cyborg.dm +++ b/code/_onclick/cyborg.dm @@ -56,8 +56,7 @@ var/obj/item/W = get_active_held_item() - // Cyborgs have no range-checking unless there is item use - if(!W) + if(!W && get_dist(src,A) <= remote_range) A.attack_robot(src) return @@ -106,38 +105,59 @@ /atom/proc/BorgCtrlShiftClick(mob/living/silicon/robot/user) //forward to human click if not overriden CtrlShiftClick(user) -/obj/machinery/door/airlock/BorgCtrlShiftClick() // Sets/Unsets Emergency Access Override Forwards to AI code. - AICtrlShiftClick() +/obj/machinery/door/airlock/BorgCtrlShiftClick(mob/living/silicon/robot/user) // Sets/Unsets Emergency Access Override Forwards to AI code. + if(get_dist(src,user) <= user.remote_range) + AICtrlShiftClick() + else + ..() /atom/proc/BorgShiftClick(mob/living/silicon/robot/user) //forward to human click if not overriden ShiftClick(user) -/obj/machinery/door/airlock/BorgShiftClick() // Opens and closes doors! Forwards to AI code. - AIShiftClick() +/obj/machinery/door/airlock/BorgShiftClick(mob/living/silicon/robot/user) // Opens and closes doors! Forwards to AI code. + if(get_dist(src,user) <= user.remote_range) + AIShiftClick() + else + ..() /atom/proc/BorgCtrlClick(mob/living/silicon/robot/user) //forward to human click if not overriden CtrlClick(user) -/obj/machinery/door/airlock/BorgCtrlClick() // Bolts doors. Forwards to AI code. - AICtrlClick() +/obj/machinery/door/airlock/BorgCtrlClick(mob/living/silicon/robot/user) // Bolts doors. Forwards to AI code. + if(get_dist(src,user) <= user.remote_range) + AICtrlClick() + else + ..() -/obj/machinery/power/apc/BorgCtrlClick() // turns off/on APCs. Forwards to AI code. - AICtrlClick() +/obj/machinery/power/apc/BorgCtrlClick(mob/living/silicon/robot/user) // turns off/on APCs. Forwards to AI code. + if(get_dist(src,user) <= user.remote_range) + AICtrlClick() + else + ..() -/obj/machinery/turretid/BorgCtrlClick() //turret control on/off. Forwards to AI code. - AICtrlClick() +/obj/machinery/turretid/BorgCtrlClick(mob/living/silicon/robot/user) //turret control on/off. Forwards to AI code. + if(get_dist(src,user) <= user.remote_range) + AICtrlClick() + else + ..() /atom/proc/BorgAltClick(mob/living/silicon/robot/user) AltClick(user) return -/obj/machinery/door/airlock/BorgAltClick() // Eletrifies doors. Forwards to AI code. - AIAltClick() +/obj/machinery/door/airlock/BorgAltClick(mob/living/silicon/robot/user) // Eletrifies doors. Forwards to AI code. + if(get_dist(src,user) <= user.remote_range) + AIAltClick() + else + ..() -/obj/machinery/turretid/BorgAltClick() //turret lethal on/off. Forwards to AI code. - AIAltClick() +/obj/machinery/turretid/BorgAltClick(mob/living/silicon/robot/user) //turret lethal on/off. Forwards to AI code. + if(get_dist(src,user) <= user.remote_range) + AIAltClick() + else + ..() /* As with AI, these are not used in click code, diff --git a/code/controllers/master.dm b/code/controllers/master.dm index c71e34fce3..5ca7b15f72 100644 --- a/code/controllers/master.dm +++ b/code/controllers/master.dm @@ -124,7 +124,8 @@ GLOBAL_REAL(Master, /datum/controller/master) = new var/FireHim = FALSE if(istype(BadBoy)) msg = null - switch(++BadBoy.failure_strikes) + LAZYINITLIST(BadBoy.failure_strikes) + switch(++BadBoy.failure_strikes[BadBoy.type]) if(2) msg = "The [BadBoy.name] subsystem was the last to fire for 2 controller restarts. It will be recovered now and disabled if it happens again." FireHim = TRUE diff --git a/code/controllers/subsystem.dm b/code/controllers/subsystem.dm index 3024c24c15..eee6945c41 100644 --- a/code/controllers/subsystem.dm +++ b/code/controllers/subsystem.dm @@ -31,7 +31,7 @@ var/runlevels = RUNLEVELS_DEFAULT //points of the game at which the SS can fire - var/static/failure_strikes = 0 //How many times we suspect this subsystem has crashed the MC, 3 strikes and you're out! + var/static/list/failure_strikes //How many times we suspect a subsystem type has crashed the MC, 3 strikes and you're out! //Do not override /datum/controller/subsystem/New() diff --git a/code/controllers/subsystem/garbage.dm b/code/controllers/subsystem/garbage.dm index 67846d019d..55132cba28 100644 --- a/code/controllers/subsystem/garbage.dm +++ b/code/controllers/subsystem/garbage.dm @@ -234,33 +234,7 @@ SUBSYSTEM_DEF(garbage) else if(D.gc_destroyed == GC_CURRENTLY_BEING_QDELETED) CRASH("[D.type] destroy proc was called multiple times, likely due to a qdel loop in the Destroy logic") -// Default implementation of clean-up code. -// This should be overridden to remove all references pointing to the object being destroyed. -// Return the appropriate QDEL_HINT; in most cases this is QDEL_HINT_QUEUE. -// TODO: Move this and all datum var definitions into code/datums/datum.dm -/datum/proc/Destroy(force=FALSE) - tag = null - var/list/timers = active_timers - active_timers = null - for(var/thing in timers) - var/datum/timedevent/timer = thing - if (timer.spent) - continue - qdel(timer) - var/list/dc = datum_components - for(var/I in dc) - var/datum/component/C = I - C._RemoveNoSignal() - qdel(C) - if(dc) - dc.Cut() - return QDEL_HINT_QUEUE - -/datum/var/gc_destroyed //Time when this object was destroyed. - #ifdef TESTING -/datum/var/running_find_references -/datum/var/last_find_references = 0 /datum/verb/find_refs() set category = "Debug" diff --git a/code/controllers/subsystem/timer.dm b/code/controllers/subsystem/timer.dm index 5696fa09e7..daf0eb324d 100644 --- a/code/controllers/subsystem/timer.dm +++ b/code/controllers/subsystem/timer.dm @@ -210,7 +210,6 @@ SUBSYSTEM_DEF(timer) timer_id_dict |= SStimer.timer_id_dict bucket_list |= SStimer.bucket_list -/datum/var/list/active_timers /datum/timedevent var/id var/datum/callback/callBack diff --git a/code/datums/action.dm b/code/datums/action.dm index a1048b86bf..d369b08f93 100644 --- a/code/datums/action.dm +++ b/code/datums/action.dm @@ -10,12 +10,13 @@ var/check_flags = 0 var/processing = FALSE var/obj/screen/movable/action_button/button = null - var/button_icon = 'icons/mob/actions.dmi' - var/background_icon_state = ACTION_BUTTON_DEFAULT_BACKGROUND var/buttontooltipstyle = "" - var/icon_icon = 'icons/mob/actions.dmi' - var/button_icon_state = "default" + var/button_icon = 'icons/mob/actions/backgrounds.dmi' //This is the file for the BACKGROUND icon + var/background_icon_state = ACTION_BUTTON_DEFAULT_BACKGROUND //And this is the state for the background icon + + var/icon_icon = 'icons/mob/actions.dmi' //This is the file for the ACTION icon + var/button_icon_state = "default" //And this is the state for the action icon var/mob/owner /datum/action/New(Target) @@ -225,6 +226,7 @@ /datum/action/item_action/toggle_unfriendly_fire name = "Toggle Friendly Fire \[ON\]" desc = "Toggles if the club's blasts cause friendly fire." + icon_icon = 'icons/mob/actions/actions_items.dmi' button_icon_state = "vortex_ff_on" /datum/action/item_action/toggle_unfriendly_fire/Trigger() @@ -258,6 +260,7 @@ /datum/action/item_action/vortex_recall name = "Vortex Recall" desc = "Recall yourself, and anyone nearby, to an attuned hierophant beacon at any time.
If the beacon is still attached, will detach it." + icon_icon = 'icons/mob/actions/actions_items.dmi' button_icon_state = "vortex_recall" /datum/action/item_action/vortex_recall/IsAvailable() @@ -268,6 +271,7 @@ return ..() /datum/action/item_action/clock + icon_icon = 'icons/mob/actions/actions_clockcult.dmi' background_icon_state = "bg_clock" buttontooltipstyle = "clockcult" @@ -367,6 +371,7 @@ /datum/action/item_action/toggle_research_scanner name = "Toggle Research Scanner" + icon_icon = 'icons/mob/actions/actions_items.dmi' button_icon_state = "scan_mode" var/active = FALSE @@ -403,6 +408,7 @@ /datum/action/item_action/ninjajaunt name = "Phase Jaunt (10E)" desc = "Utilizes the internal VOID-shift device to rapidly transit in direction facing." + icon_icon = 'icons/mob/actions/actions_items.dmi' button_icon_state = "ninja_phase" /datum/action/item_action/ninjasmoke @@ -441,6 +447,7 @@ /datum/action/item_action/ninja_stealth name = "Toggle Stealth" desc = "Toggles stealth mode on and off." + icon_icon = 'icons/mob/actions/actions_items.dmi' button_icon_state = "ninja_cloak" /datum/action/item_action/toggle_glove @@ -558,12 +565,14 @@ /datum/action/item_action/stickmen name = "Summon Stick Minions" desc = "Allows you to summon faithful stickmen allies to aide you in battle." + icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' button_icon_state = "art_summon" //surf_ss13 /datum/action/item_action/bhop name = "Activate Jump Boots" desc = "Activates the jump boot's internal propulsion system, allowing the user to dash over 4-wide gaps." + icon_icon = 'icons/mob/actions/actions_items.dmi' button_icon_state = "jetboot" /datum/action/language_menu diff --git a/code/datums/components/component.dm b/code/datums/components/component.dm index 6af3039217..20e2a6e9ac 100644 --- a/code/datums/components/component.dm +++ b/code/datums/components/component.dm @@ -66,8 +66,6 @@ /datum/component/proc/OnTransfer(datum/new_parent) return -/datum/var/list/datum_components //list of /datum/component - /datum/proc/SendSignal(sigtype, ...) var/list/comps = datum_components . = FALSE diff --git a/code/datums/datum.dm b/code/datums/datum.dm new file mode 100644 index 0000000000..3bedbe87cf --- /dev/null +++ b/code/datums/datum.dm @@ -0,0 +1,31 @@ +/datum + var/gc_destroyed //Time when this object was destroyed. + var/list/active_timers //for SStimer + var/list/datum_components //for /datum/components + var/ui_screen = "home" //for tgui + +#ifdef TESTING + var/running_find_references + var/last_find_references = 0 +#endif + +// Default implementation of clean-up code. +// This should be overridden to remove all references pointing to the object being destroyed. +// Return the appropriate QDEL_HINT; in most cases this is QDEL_HINT_QUEUE. +/datum/proc/Destroy(force=FALSE) + tag = null + var/list/timers = active_timers + active_timers = null + for(var/thing in timers) + var/datum/timedevent/timer = thing + if (timer.spent) + continue + qdel(timer) + var/list/dc = datum_components + for(var/I in dc) + var/datum/component/C = I + C._RemoveNoSignal() + qdel(C) + if(dc) + dc.Cut() + return QDEL_HINT_QUEUE \ No newline at end of file diff --git a/code/datums/explosion.dm b/code/datums/explosion.dm index c22829b5d3..5e381c0322 100644 --- a/code/datums/explosion.dm +++ b/code/datums/explosion.dm @@ -68,7 +68,7 @@ GLOBAL_LIST_EMPTY(explosions) //I would make this not ex_act the thing that triggered the explosion, //but everything that explodes gives us their loc or a get_turf() //and somethings expect us to ex_act them so they can qdel() - stoplag() //tldr, let the calling proc call qdel(src) before we explode + sleep(1) //tldr, let the calling proc call qdel(src) before we explode EX_PREPROCESS_EXIT_CHECK @@ -275,7 +275,7 @@ GLOBAL_LIST_EMPTY(explosions) . = list() var/processed = 0 - while(!stopped && running) + while(running) var/I for(I in (processed + 1) to affected_turfs.len) // we cache the explosion block rating of every turf in the explosion area var/turf/T = affected_turfs[I] diff --git a/code/datums/helper_datums/getrev.dm b/code/datums/helper_datums/getrev.dm index f6296bc0c9..806f48a24f 100644 --- a/code/datums/helper_datums/getrev.dm +++ b/code/datums/helper_datums/getrev.dm @@ -73,12 +73,14 @@ return "" . = header ? "The following pull requests are currently test merged:
" : "" for(var/line in testmerge) - var/details + var/details if(world.RunningService()) var/cm = testmerge[line]["commit"] details = ": '" + html_encode(testmerge[line]["title"]) + "' by " + html_encode(testmerge[line]["author"]) + " at commit " + html_encode(copytext(cm, 1, min(length(cm), 7))) else if(has_pr_details) //tgs2 support details = ": '" + html_encode(testmerge[line]["title"]) + "' by " + html_encode(testmerge[line]["user"]["login"]) + if(details && findtext(details, "\[s\]") && (!usr || !usr.client.holder)) + continue . += "#[line][details]
" /client/verb/showrevinfo() diff --git a/code/datums/holocall.dm b/code/datums/holocall.dm index 4e7490f8ee..abad0dba1d 100644 --- a/code/datums/holocall.dm +++ b/code/datums/holocall.dm @@ -38,7 +38,7 @@ calling_pad.say("Connection failure.") qdel(src) return - + testing("Holocall started") //cleans up ALL references :) @@ -49,16 +49,16 @@ if(user_good) user.reset_perspective() user.remote_control = null - + if(!QDELETED(eye)) if(user_good && user.client) for(var/datum/camerachunk/chunk in eye.visibleCameraChunks) chunk.remove(eye) qdel(eye) eye = null - + user = null - + if(hologram) hologram.HC = null hologram = null @@ -75,7 +75,7 @@ if(connected_holopad) connected_holopad.SetLightsAndPower() connected_holopad = null - + testing("Holocall destroyed") return ..() @@ -123,7 +123,7 @@ if(I == H) continue Disconnect(I) - + for(var/I in H.holo_calls) var/datum/holocall/HC = I if(HC != src) @@ -155,7 +155,7 @@ var/obj/machinery/holopad/H = I if(!H.is_operational()) ConnectionFailure(H) - + if(QDELETED(src)) return FALSE @@ -174,6 +174,7 @@ /datum/action/innate/end_holocall name = "End Holocall" + icon_icon = 'icons/mob/actions/actions_silicon.dmi' button_icon_state = "camera_off" var/datum/holocall/hcall diff --git a/code/datums/martial/krav_maga.dm b/code/datums/martial/krav_maga.dm index 94637f10e3..6ce082bd2a 100644 --- a/code/datums/martial/krav_maga.dm +++ b/code/datums/martial/krav_maga.dm @@ -6,6 +6,7 @@ /datum/action/neck_chop name = "Neck Chop - Injures the neck, stopping the victim from speaking for a while." + icon_icon = 'icons/mob/actions/actions_items.dmi' button_icon_state = "neckchop" /datum/action/neck_chop/Trigger() @@ -22,6 +23,7 @@ /datum/action/leg_sweep name = "Leg Sweep - Trips the victim, knocking them down for a brief moment." + icon_icon = 'icons/mob/actions/actions_items.dmi' button_icon_state = "legsweep" /datum/action/leg_sweep/Trigger() @@ -38,6 +40,7 @@ /datum/action/lung_punch//referred to internally as 'quick choke' name = "Lung Punch - Delivers a strong punch just above the victim's abdomen, constraining the lungs. The victim will be unable to breathe for a short time." + icon_icon = 'icons/mob/actions/actions_items.dmi' button_icon_state = "lungpunch" /datum/action/lung_punch/Trigger() diff --git a/code/game/gamemodes/changeling/cellular_emporium.dm b/code/game/gamemodes/changeling/cellular_emporium.dm index 67d15c677c..aaba09c87c 100644 --- a/code/game/gamemodes/changeling/cellular_emporium.dm +++ b/code/game/gamemodes/changeling/cellular_emporium.dm @@ -68,7 +68,8 @@ /datum/action/innate/cellular_emporium name = "Cellular Emporium" - button_icon_state = "cellular_emporium" + icon_icon = 'icons/obj/drinks.dmi' + button_icon_state = "changelingsting" background_icon_state = "bg_alien" var/datum/cellular_emporium/cellular_emporium diff --git a/code/game/gamemodes/cult/cult_comms.dm b/code/game/gamemodes/cult/cult_comms.dm index f6dab6c9cc..a7fb90d253 100644 --- a/code/game/gamemodes/cult/cult_comms.dm +++ b/code/game/gamemodes/cult/cult_comms.dm @@ -2,6 +2,7 @@ #define MARK_COOLDOWN /datum/action/innate/cult + icon_icon = 'icons/mob/actions/actions_cult.dmi' background_icon_state = "bg_demon" buttontooltipstyle = "cult" check_flags = AB_CHECK_RESTRAINED|AB_CHECK_STUN|AB_CHECK_CONSCIOUS @@ -305,6 +306,7 @@ /datum/action/innate/cult/master/pulse name = "Eldritch Pulse" desc = "Seize upon a fellow cultist or cult structure and teleport it to a nearby location." + icon_icon = 'icons/mob/actions/actions_spells.dmi' button_icon_state = "arcane_barrage" var/obj/effect/proc_holder/pulse/PM var/cooldown = 0 diff --git a/code/game/gamemodes/malfunction/Malf_Modules.dm b/code/game/gamemodes/malfunction/Malf_Modules.dm index c5baed144e..8c8108962e 100644 --- a/code/game/gamemodes/malfunction/Malf_Modules.dm +++ b/code/game/gamemodes/malfunction/Malf_Modules.dm @@ -20,7 +20,7 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list( name = "AI Action" desc = "You aren't entirely sure what this does, but it's very beepy and boopy." background_icon_state = "bg_tech_blue" - icon_icon = 'icons/mob/actions_AI.dmi' + icon_icon = 'icons/mob/actions/actions_AI.dmi' var/mob/living/silicon/ai/owner_AI //The owner AI, so we don't have to typecast every time var/uses //If we have multiple uses of the same power var/auto_use_uses = TRUE //If we automatically use up uses on each activation diff --git a/code/game/gamemodes/miniantags/abduction/machinery/camera.dm b/code/game/gamemodes/miniantags/abduction/machinery/camera.dm index 4e74d11be1..ffd1b88d25 100644 --- a/code/game/gamemodes/miniantags/abduction/machinery/camera.dm +++ b/code/game/gamemodes/miniantags/abduction/machinery/camera.dm @@ -65,6 +65,7 @@ /datum/action/innate/teleport_in name = "Send To" + icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' button_icon_state = "beam_down" /datum/action/innate/teleport_in/Activate() @@ -79,6 +80,7 @@ /datum/action/innate/teleport_out name = "Retrieve" + icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' button_icon_state = "beam_up" /datum/action/innate/teleport_out/Activate() @@ -90,6 +92,7 @@ /datum/action/innate/teleport_self name = "Send Self" + icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' button_icon_state = "beam_down" /datum/action/innate/teleport_self/Activate() @@ -104,6 +107,7 @@ /datum/action/innate/vest_mode_swap name = "Switch Vest Mode" + icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' button_icon_state = "vest_mode" /datum/action/innate/vest_mode_swap/Activate() @@ -115,6 +119,7 @@ /datum/action/innate/vest_disguise_swap name = "Switch Vest Disguise" + icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' button_icon_state = "vest_disguise" /datum/action/innate/vest_disguise_swap/Activate() @@ -125,6 +130,7 @@ /datum/action/innate/set_droppoint name = "Set Experiment Release Point" + icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' button_icon_state = "set_drop" /datum/action/innate/set_droppoint/Activate() diff --git a/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm b/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm index 2bbe2cae5f..184564b024 100644 --- a/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm +++ b/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm @@ -85,6 +85,7 @@ charge_max = 0 panel = "Revenant Abilities" message = "You toggle your night vision." + action_icon = 'icons/mob/actions/actions_revenant.dmi' action_icon_state = "r_nightvision" action_background_icon_state = "bg_revenant" @@ -97,6 +98,7 @@ clothes_req = 0 range = 7 include_user = 0 + action_icon = 'icons/mob/actions/actions_revenant.dmi' action_icon_state = "r_transmit" action_background_icon_state = "bg_revenant" @@ -120,6 +122,7 @@ /obj/effect/proc_holder/spell/aoe_turf/revenant clothes_req = 0 + action_icon = 'icons/mob/actions/actions_revenant.dmi' action_background_icon_state = "bg_revenant" panel = "Revenant Abilities (Locked)" name = "Report this to a coder" diff --git a/code/game/machinery/computer/camera_advanced.dm b/code/game/machinery/computer/camera_advanced.dm index edce17b82a..3d5b8f026b 100644 --- a/code/game/machinery/computer/camera_advanced.dm +++ b/code/game/machinery/computer/camera_advanced.dm @@ -175,6 +175,7 @@ /datum/action/innate/camera_off name = "End Camera View" + icon_icon = 'icons/mob/actions/actions_silicon.dmi' button_icon_state = "camera_off" /datum/action/innate/camera_off/Activate() @@ -187,6 +188,7 @@ /datum/action/innate/camera_jump name = "Jump To Camera" + icon_icon = 'icons/mob/actions/actions_silicon.dmi' button_icon_state = "camera_jump" /datum/action/innate/camera_jump/Activate() diff --git a/code/game/mecha/mecha_actions.dm b/code/game/mecha/mecha_actions.dm index df96c78e8c..050498d8f1 100644 --- a/code/game/mecha/mecha_actions.dm +++ b/code/game/mecha/mecha_actions.dm @@ -22,6 +22,7 @@ /datum/action/innate/mecha check_flags = AB_CHECK_RESTRAINED | AB_CHECK_STUN | AB_CHECK_CONSCIOUS + icon_icon = 'icons/mob/actions/actions_mecha.dmi' var/obj/mecha/chassis /datum/action/innate/mecha/Grant(mob/living/L, obj/mecha/M) diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm index f7d396f9ee..e798a0c0ad 100644 --- a/code/modules/clothing/chameleon.dm +++ b/code/modules/clothing/chameleon.dm @@ -2,6 +2,7 @@ /datum/action/item_action/chameleon/drone/randomise name = "Randomise Headgear" + icon_icon = 'icons/mob/actions/actions_items.dmi' button_icon_state = "random" /datum/action/item_action/chameleon/drone/randomise/Trigger() @@ -21,6 +22,7 @@ /datum/action/item_action/chameleon/drone/togglehatmask name = "Toggle Headgear Mode" + icon_icon = 'icons/mob/actions/actions_silicon.dmi' /datum/action/item_action/chameleon/drone/togglehatmask/New() ..() diff --git a/code/modules/clothing/spacesuits/chronosuit.dm b/code/modules/clothing/spacesuits/chronosuit.dm index 45b7ccb61f..23ea5bc5ff 100644 --- a/code/modules/clothing/spacesuits/chronosuit.dm +++ b/code/modules/clothing/spacesuits/chronosuit.dm @@ -320,6 +320,7 @@ /datum/action/innate/chrono_teleport name = "Teleport Now" + icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' button_icon_state = "chrono_phase" check_flags = AB_CHECK_CONSCIOUS //|AB_CHECK_INSIDE var/obj/item/clothing/suit/space/chronos/chronosuit = null diff --git a/code/modules/clothing/spacesuits/flightsuit.dm b/code/modules/clothing/spacesuits/flightsuit.dm index c1c2733b71..9888be0494 100644 --- a/code/modules/clothing/spacesuits/flightsuit.dm +++ b/code/modules/clothing/spacesuits/flightsuit.dm @@ -1266,6 +1266,9 @@ //ITEM actionS------------------------------------------------------------------------------------------------------------------------------------------------------ //TODO: TOGGLED BUTTON SPRITES +/datum/action/item_action/flightsuit + icon_icon = 'icons/mob/actions/actions_flightsuit.dmi' + /datum/action/item_action/flightsuit/toggle_boots name = "Toggle Boots" button_icon_state = "flightsuit_shoes" @@ -1286,6 +1289,9 @@ button_icon_state = "flightsuit_lock" background_icon_state = "bg_tech" +/datum/action/item_action/flightpack + icon_icon = 'icons/mob/actions/actions_flightsuit.dmi' + /datum/action/item_action/flightpack/toggle_flight name = "Toggle Flight" button_icon_state = "flightpack_fly" @@ -1313,5 +1319,7 @@ /datum/action/item_action/flightpack/zoom name = "Helmet Smart Zoom" + icon_icon = 'icons/mob/actions.dmi' background_icon_state = "bg_tech_blue" + icon_icon = 'icons/mob/actions/actions_items.dmi' button_icon_state = "sniper_zoom" diff --git a/code/modules/goonchat/browserOutput.dm b/code/modules/goonchat/browserOutput.dm index 407c6c2846..7b236ea56f 100644 --- a/code/modules/goonchat/browserOutput.dm +++ b/code/modules/goonchat/browserOutput.dm @@ -180,21 +180,24 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("data/iconCache.sav")) //Cache of ic /proc/bicon(thing) if (!thing) return - + var/static/list/bicon_cache = list() if (isicon(thing)) - //Icons get pooled constantly, references are no good here. - /*if (!bicon_cache["\ref[obj]"]) // Doesn't exist yet, make it. - bicon_cache["\ref[obj]"] = icon2base64(obj) - return ""*/ - return "" + var/icon/I = thing + var/icon_md5 = md5(I) + if (!bicon_cache[icon_md5]) // Doesn't exist yet, make it. + I = icon(I) //copy it + I.Scale(16,16) //scale it + bicon_cache[icon_md5] = icon2base64(thing) //base64 it + return "" // Either an atom or somebody fucked up and is gonna get a runtime, which I'm fine with. var/atom/A = thing var/key = "[istype(A.icon, /icon) ? "\ref[A.icon]" : A.icon]:[A.icon_state]" - var/static/list/bicon_cache = list() + if (!bicon_cache[key]) // Doesn't exist, make it. var/icon/I = icon(A.icon, A.icon_state, SOUTH, 1) + I.Scale(16,16) if (ishuman(thing)) // Shitty workaround for a BYOND issue. var/icon/temp = I I = icon() diff --git a/code/modules/mining/aux_base_camera.dm b/code/modules/mining/aux_base_camera.dm index d629be13ee..62702fc202 100644 --- a/code/modules/mining/aux_base_camera.dm +++ b/code/modules/mining/aux_base_camera.dm @@ -128,6 +128,7 @@ eyeobj.invisibility = INVISIBILITY_MAXIMUM //Hide the eye when not in use. /datum/action/innate/aux_base //Parent aux base action + icon_icon = 'icons/mob/actions/actions_construction.dmi' var/mob/living/C //Mob using the action var/mob/camera/aiEye/remote/base_construction/remote_eye //Console's eye mob var/obj/machinery/computer/camera_advanced/base_construction/B //Console itself diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 430ee65179..0c098256cb 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -680,7 +680,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp to_chat(src, "Data HUDs enabled.") data_huds_on = 1 -/mob/dead/observer/verb/restore_ghost_apperance() +/mob/dead/observer/verb/restore_ghost_appearance() set name = "Restore Ghost Character" set desc = "Sets your deadchat name and ghost appearance to your \ roundstart character." diff --git a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm index 83971dac05..e6a5f58d69 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm @@ -13,7 +13,7 @@ Doesn't work on other aliens/AI.*/ var/check_turf = 0 var/has_action = 1 var/datum/action/spell_action/alien/action = null - var/action_icon = 'icons/mob/actions.dmi' + var/action_icon = 'icons/mob/actions/actions_xeno.dmi' var/action_icon_state = "spell_default" var/action_background_icon_state = "bg_alien" diff --git a/code/modules/mob/living/carbon/human/species_types/angel.dm b/code/modules/mob/living/carbon/human/species_types/angel.dm index 7247509557..7c58ecbf86 100644 --- a/code/modules/mob/living/carbon/human/species_types/angel.dm +++ b/code/modules/mob/living/carbon/human/species_types/angel.dm @@ -66,6 +66,7 @@ /datum/action/innate/flight name = "Toggle Flight" check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_STUN + icon_icon = 'icons/mob/actions/actions_items.dmi' button_icon_state = "flight" /datum/action/innate/flight/Activate() diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index f31b339bf5..fd17f123b8 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -963,6 +963,7 @@ /datum/action/innate/deploy_shell name = "Deploy to AI Shell" desc = "Wirelessly control a specialized cyborg shell." + icon_icon = 'icons/mob/actions/actions_AI.dmi' button_icon_state = "ai_shell" /datum/action/innate/deploy_shell/Trigger() @@ -974,6 +975,7 @@ /datum/action/innate/deploy_last_shell name = "Reconnect to shell" desc = "Reconnect to the most recently used AI shell." + icon_icon = 'icons/mob/actions/actions_AI.dmi' button_icon_state = "ai_last_shell" var/mob/living/silicon/robot/last_used_shell diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index e1aab0d1be..c6dd372532 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -161,6 +161,7 @@ /datum/action/innate/pai name = "PAI Action" + icon_icon = 'icons/mob/actions/actions_silicon.dmi' var/mob/living/silicon/pai/P /datum/action/innate/pai/Trigger() @@ -197,8 +198,10 @@ /datum/action/innate/pai/rest/Trigger() ..() P.lay_down() + /datum/action/innate/pai/light name = "Toggle Integrated Lights" + icon_icon = 'icons/mob/actions/actions_spells.dmi' button_icon_state = "emp" background_icon_state = "bg_tech" diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index f083f6c5f5..93f88bdfee 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -93,6 +93,8 @@ /obj/item/clothing/head/sombrero, /obj/item/clothing/head/witchunter_hat) + var/remote_range = 7 //How far can you interact with machines. + can_buckle = TRUE buckle_lying = FALSE can_ride_typecache = list(/mob/living/carbon/human) @@ -1079,6 +1081,7 @@ /datum/action/innate/undeployment name = "Disconnect from shell" desc = "Stop controlling your shell and resume normal core operations." + icon_icon = 'icons/mob/actions/actions_AI.dmi' button_icon_state = "ai_core" /datum/action/innate/undeployment/Trigger() diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index fd31f7537c..74f855bf8c 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -383,6 +383,7 @@ /datum/action/innate/seek_prey name = "Seek the Harvest" desc = "None can hide from Nar'Sie, activate to track a survivor attempting to flee the red harvest!" + icon_icon = 'icons/mob/actions/actions_cult.dmi' background_icon_state = "bg_demon" buttontooltipstyle = "cult" button_icon_state = "cult_mark" diff --git a/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm b/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm index aaad3176e2..b827950d79 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm @@ -196,5 +196,6 @@ /datum/action/generic/drone/select_filter name = "Select Vision Filter" + icon_icon = 'icons/mob/actions/actions_silicon.dmi' button_icon_state = "drone_vision" procname = /mob/living/simple_animal/drone/verb/toggle_statics diff --git a/code/modules/mob/living/simple_animal/hostile/bosses/paperwizard.dm b/code/modules/mob/living/simple_animal/hostile/bosses/paperwizard.dm index 280ccd6c26..2fa2101aa2 100644 --- a/code/modules/mob/living/simple_animal/hostile/bosses/paperwizard.dm +++ b/code/modules/mob/living/simple_animal/hostile/bosses/paperwizard.dm @@ -27,6 +27,7 @@ //Lets the wizard summon his art to fight for him /datum/action/boss/wizard_summon_minions name = "Summon Minions" + icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' button_icon_state = "art_summon" usage_probability = 40 boss_cost = 30 @@ -54,6 +55,7 @@ //Hitting the wizard himself destroys all decoys /datum/action/boss/wizard_mimic name = "Craft Mimicry" + icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' button_icon_state = "mimic_summon" usage_probability = 30 boss_cost = 40 diff --git a/code/modules/mob/living/simple_animal/hostile/jungle_mobs.dm b/code/modules/mob/living/simple_animal/hostile/jungle_mobs.dm index 2e39ab9b82..169a95f157 100644 --- a/code/modules/mob/living/simple_animal/hostile/jungle_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/jungle_mobs.dm @@ -585,3 +585,249 @@ #undef MOOK_ATTACK_ACTIVE #undef MOOK_ATTACK_RECOVERY #undef ATTACK_INTERMISSION_TIME + +////Jungle Seedling//// + +#define SEEDLING_STATE_NEUTRAL 0 +#define SEEDLING_STATE_WARMUP 1 +#define SEEDLING_STATE_ACTIVE 2 +#define SEEDLING_STATE_RECOVERY 3 + + +/mob/living/simple_animal/hostile/jungle/seedling + name = "seedling" + desc = "This oversized, predatory flower conceals what can only be described as an organic energy cannon, and it will not die until its hidden vital organs are sliced out. \ + The concentrated streams of energy it sometimes produces require its full attention, attacking it during this time will prevent it from finishing its attack." + maxHealth = 100 + health = 100 + melee_damage_lower = 30 + melee_damage_upper = 30 + icon = 'icons/mob/jungle/arachnid.dmi' + icon_state = "seedling" + icon_living = "seedling" + icon_dead = "seedling_dead" + pixel_x = -16 + pixel_y = -14 + minimum_distance = 3 + move_to_delay = 20 + vision_range = 9 + aggro_vision_range = 15 + ranged = TRUE + ranged_cooldown_time = 10 + projectiletype = /obj/item/projectile/seedling + projectilesound = 'sound/weapons/pierce.ogg' + robust_searching = TRUE + stat_attack = UNCONSCIOUS + anchored = TRUE + var/combatant_state = SEEDLING_STATE_NEUTRAL + var/obj/seedling_weakpoint/weak_point + var/mob/living/beam_debuff_target + var/solar_beam_identifier = 0 + +/obj/item/projectile/seedling + name = "solar energy" + icon_state = "seedling" + damage = 10 + damage_type = BURN + light_range = 2 + flag = "energy" + light_color = LIGHT_COLOR_YELLOW + hitsound = 'sound/weapons/sear.ogg' + hitsound_wall = 'sound/weapons/effects/searwall.ogg' + nondirectional_sprite = TRUE + +/obj/item/projectile/seedling/Collide(atom/A)//Stops seedlings from destroying other jungle mobs through FF + if(isliving(A)) + var/mob/living/L = A + if("jungle" in L.faction) + return FALSE + return ..() + +/obj/effect/temp_visual/solarbeam_killsat + name = "beam of solar energy" + icon_state = "solar_beam" + icon = 'icons/effects/beam.dmi' + layer = LIGHTING_LAYER + duration = 5 + randomdir = FALSE + +/datum/status_effect/seedling_beam_indicator + id = "seedling beam indicator" + duration = 30 + status_type = STATUS_EFFECT_MULTIPLE + alert_type = null + tick_interval = 1 + var/obj/screen/seedling/seedling_screen_object + var/atom/target + + +/datum/status_effect/seedling_beam_indicator/on_creation(mob/living/new_owner, target_plant) + . = ..() + if(.) + target = target_plant + tick() + +/datum/status_effect/seedling_beam_indicator/on_apply() + if(owner.client) + seedling_screen_object = new /obj/screen/seedling() + owner.client.screen += seedling_screen_object + tick() + return ..() + +/datum/status_effect/seedling_beam_indicator/Destroy() + if(owner) + if(owner.client) + owner.client.screen -= seedling_screen_object + return ..() + +/datum/status_effect/seedling_beam_indicator/tick() + var/target_angle = Get_Angle(owner, target) + var/matrix/final = matrix() + final.Turn(target_angle) + seedling_screen_object.transform = final + +/obj/screen/seedling + icon = 'icons/mob/jungle/arachnid.dmi' + icon_state = "seedling_beam_indicator" + screen_loc = "CENTER:-16,CENTER:-16" + +/mob/living/simple_animal/hostile/jungle/seedling/Goto() + if(combatant_state != SEEDLING_STATE_NEUTRAL) + return + return ..() + +/mob/living/simple_animal/hostile/jungle/seedling/AttackingTarget() + if(isliving(target)) + if(ranged_cooldown <= world.time && combatant_state == SEEDLING_STATE_NEUTRAL) + OpenFire(target) + return + return ..() + +/mob/living/simple_animal/hostile/jungle/seedling/OpenFire() + WarmupAttack() + +/mob/living/simple_animal/hostile/jungle/seedling/proc/WarmupAttack() + if(combatant_state == SEEDLING_STATE_NEUTRAL) + combatant_state = SEEDLING_STATE_WARMUP + walk(src,0) + update_icons() + var/target_dist = get_dist(src,target) + var/living_target_check = isliving(target) + if(living_target_check) + if(target_dist > 7)//Offscreen check + SolarBeamStartup(target) + return + if(get_dist(src,target) >= 4 && prob(40)) + SolarBeamStartup(target) + return + addtimer(CALLBACK(src, .proc/Volley), 5) + +/mob/living/simple_animal/hostile/jungle/seedling/proc/SolarBeamStartup(mob/living/living_target)//It's more like requiem than final spark + if(combatant_state == SEEDLING_STATE_WARMUP && target) + combatant_state = SEEDLING_STATE_ACTIVE + living_target.apply_status_effect(/datum/status_effect/seedling_beam_indicator, src) + beam_debuff_target = living_target + playsound(src,'sound/effects/seedling_chargeup.ogg', 100, 0) + if(get_dist(src,living_target) > 7) + playsound(living_target,'sound/effects/seedling_chargeup.ogg', 100, 0) + solar_beam_identifier = world.time + addtimer(CALLBACK(src, .proc/Beamu, living_target, solar_beam_identifier), 35) + +/mob/living/simple_animal/hostile/jungle/seedling/proc/Beamu(mob/living/living_target, beam_id = 0) + if(combatant_state == SEEDLING_STATE_ACTIVE && living_target && beam_id == solar_beam_identifier) + if(living_target.z == z) + update_icons() + var/obj/effect/temp_visual/solarbeam_killsat/S = new (get_turf(src)) + var/matrix/starting = matrix() + starting.Scale(1,32) + starting.Translate(0,520) + S.transform = starting + var/obj/effect/temp_visual/solarbeam_killsat/K = new (get_turf(living_target)) + var/matrix/final = matrix() + final.Scale(1,32) + final.Translate(0,512) + K.transform = final + living_target.adjustFireLoss(30) + living_target.adjust_fire_stacks(0.2)//Just here for the showmanship + living_target.IgniteMob() + playsound(living_target,'sound/weapons/sear.ogg', 50, 1) + addtimer(CALLBACK(src, .proc/AttackRecovery), 5) + return + AttackRecovery() + +/mob/living/simple_animal/hostile/jungle/seedling/proc/Volley() + if(combatant_state == SEEDLING_STATE_WARMUP && target) + combatant_state = SEEDLING_STATE_ACTIVE + update_icons() + var/datum/callback/cb = CALLBACK(src, .proc/InaccurateShot) + for(var/i in 1 to 13) + addtimer(cb, i) + addtimer(CALLBACK(src, .proc/AttackRecovery), 14) + +/mob/living/simple_animal/hostile/jungle/seedling/proc/InaccurateShot() + if(!QDELETED(target) && combatant_state == SEEDLING_STATE_ACTIVE && !stat) + if(get_dist(src,target) <= 3)//If they're close enough just aim straight at them so we don't miss at point blank ranges + Shoot(target) + return + var/turf/our_turf = get_turf(src) + var/obj/item/projectile/seedling/readied_shot = new /obj/item/projectile/seedling(our_turf) + readied_shot.current = our_turf + readied_shot.starting = our_turf + readied_shot.firer = src + readied_shot.original = target + readied_shot.yo = target.y - our_turf.y + rand(-1,1) + readied_shot.xo = target.x - our_turf.x + rand(-1,1) + readied_shot.fire() + playsound(src, projectilesound, 100, 1) + +/mob/living/simple_animal/hostile/jungle/seedling/proc/AttackRecovery() + if(combatant_state == SEEDLING_STATE_ACTIVE) + combatant_state = SEEDLING_STATE_RECOVERY + update_icons() + ranged_cooldown = world.time + ranged_cooldown_time + if(target) + face_atom(target) + addtimer(CALLBACK(src, .proc/ResetNeutral), 10) + +/mob/living/simple_animal/hostile/jungle/seedling/proc/ResetNeutral() + combatant_state = SEEDLING_STATE_NEUTRAL + if(target && !stat) + update_icons() + Goto(target, move_to_delay, minimum_distance) + +/mob/living/simple_animal/hostile/jungle/seedling/adjustHealth() + . = ..() + if(combatant_state == SEEDLING_STATE_ACTIVE && beam_debuff_target) + beam_debuff_target.remove_status_effect(/datum/status_effect/seedling_beam_indicator) + beam_debuff_target = null + solar_beam_identifier = 0 + AttackRecovery() + +/mob/living/simple_animal/hostile/jungle/seedling/update_icons() + . = ..() + if(!stat) + switch(combatant_state) + if(SEEDLING_STATE_NEUTRAL) + icon_state = "seedling" + if(SEEDLING_STATE_WARMUP) + icon_state = "seedling_charging" + if(SEEDLING_STATE_ACTIVE) + icon_state = "seedling_fire" + if(SEEDLING_STATE_RECOVERY) + icon_state = "seedling" + +/mob/living/simple_animal/hostile/jungle/seedling/GiveTarget() + if(target) + if(combatant_state == SEEDLING_STATE_WARMUP || combatant_state == SEEDLING_STATE_ACTIVE)//So it doesn't 180 and blast you in the face while it's firing at someone else + return + return ..() + +/mob/living/simple_animal/hostile/jungle/seedling/LoseTarget() + if(combatant_state == SEEDLING_STATE_WARMUP || combatant_state == SEEDLING_STATE_ACTIVE) + return + return ..() + +#undef SEEDLING_STATE_NEUTRAL +#undef SEEDLING_STATE_WARMUP +#undef SEEDLING_STATE_ACTIVE +#undef SEEDLING_STATE_RECOVERY \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm index 1e47342416..6cebdd9500 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm @@ -754,6 +754,7 @@ Difficulty: Very Hard range = -1 include_user = 1 selection_type = "view" + action_icon = 'icons/mob/actions/actions_spells.dmi' action_icon_state = "exit_possession" sound = null diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm index 43c9197edc..f9a6575d1e 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm @@ -293,7 +293,7 @@ Difficulty: Medium animate(src, pixel_z = 0, time = duration) /obj/effect/temp_visual/target - icon = 'icons/mob/actions.dmi' + icon = 'icons/mob/actions/actions_items.dmi' icon_state = "sniper_zoom" layer = BELOW_MOB_LAYER light_range = 2 diff --git a/code/modules/mob/living/simple_animal/slime/powers.dm b/code/modules/mob/living/simple_animal/slime/powers.dm index dab6b717a4..2b817a7f96 100644 --- a/code/modules/mob/living/simple_animal/slime/powers.dm +++ b/code/modules/mob/living/simple_animal/slime/powers.dm @@ -7,6 +7,7 @@ /datum/action/innate/slime check_flags = AB_CHECK_CONSCIOUS + icon_icon = 'icons/mob/actions/actions_slime.dmi' background_icon_state = "bg_alien" var/needs_growth = NO_GROWTH_NEEDED diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 84f730f833..9542f6af1a 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -446,6 +446,7 @@ /datum/action/toggle_scope_zoom name = "Toggle Scope" check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_RESTRAINED|AB_CHECK_STUN|AB_CHECK_LYING + icon_icon = 'icons/mob/actions/actions_items.dmi' button_icon_state = "sniper_zoom" var/obj/item/weapon/gun/gun = null diff --git a/code/modules/research/xenobiology/xenobio_camera.dm b/code/modules/research/xenobiology/xenobio_camera.dm index f2546ea465..ae20aa45d1 100644 --- a/code/modules/research/xenobiology/xenobio_camera.dm +++ b/code/modules/research/xenobiology/xenobio_camera.dm @@ -88,6 +88,7 @@ /datum/action/innate/slime_place name = "Place Slimes" + icon_icon = 'icons/mob/actions/actions_silicon.dmi' button_icon_state = "slime_down" /datum/action/innate/slime_place/Activate() @@ -107,6 +108,7 @@ /datum/action/innate/slime_pick_up name = "Pick up Slime" + icon_icon = 'icons/mob/actions/actions_silicon.dmi' button_icon_state = "slime_up" /datum/action/innate/slime_pick_up/Activate() @@ -132,6 +134,7 @@ /datum/action/innate/feed_slime name = "Feed Slimes" + icon_icon = 'icons/mob/actions/actions_silicon.dmi' button_icon_state = "monkey_down" /datum/action/innate/feed_slime/Activate() @@ -153,6 +156,7 @@ /datum/action/innate/monkey_recycle name = "Recycle Monkeys" + icon_icon = 'icons/mob/actions/actions_silicon.dmi' button_icon_state = "monkey_up" /datum/action/innate/monkey_recycle/Activate() diff --git a/code/modules/spells/spell.dm b/code/modules/spells/spell.dm index e4466972a2..ea113ba4fd 100644 --- a/code/modules/spells/spell.dm +++ b/code/modules/spells/spell.dm @@ -118,7 +118,7 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) //needed for th var/critfailchance = 0 var/centcom_cancast = 1 //Whether or not the spell should be allowed on z2 - var/action_icon = 'icons/mob/actions.dmi' + var/action_icon = 'icons/mob/actions/actions_spells.dmi' var/action_icon_state = "spell_default" var/action_background_icon_state = "bg_spell" var/datum/action/spell_action/action diff --git a/code/modules/spells/spell_types/bloodcrawl.dm b/code/modules/spells/spell_types/bloodcrawl.dm index d7c5221e3d..e4c33380b2 100644 --- a/code/modules/spells/spell_types/bloodcrawl.dm +++ b/code/modules/spells/spell_types/bloodcrawl.dm @@ -9,6 +9,7 @@ range = 1 cooldown_min = 0 overlay = null + action_icon = 'icons/mob/actions/actions_minor_antag.dmi' action_icon_state = "bloodcrawl" action_background_icon_state = "bg_demon" var/phased = 0 diff --git a/code/modules/spells/spell_types/construct_spells.dm b/code/modules/spells/spell_types/construct_spells.dm index c8a7c387ee..5c28ff5029 100644 --- a/code/modules/spells/spell_types/construct_spells.dm +++ b/code/modules/spells/spell_types/construct_spells.dm @@ -2,6 +2,7 @@ /obj/effect/proc_holder/spell/aoe_turf/conjure/construct/lesser charge_max = 1800 + action_icon = 'icons/mob/actions/actions_cult.dmi' action_icon_state = "artificer" action_background_icon_state = "bg_demon" @@ -20,6 +21,7 @@ invocation = "none" invocation_type = "none" range = 2 + action_icon = 'icons/mob/actions/actions_cult.dmi' action_icon_state = "areaconvert" action_background_icon_state = "bg_cult" @@ -40,6 +42,7 @@ invocation_type = "none" range = 0 summon_type = list(/turf/open/floor/engine/cult) + action_icon = 'icons/mob/actions/actions_cult.dmi' action_icon_state = "floorconstruct" action_background_icon_state = "bg_cult" @@ -54,6 +57,7 @@ invocation = "none" invocation_type = "none" range = 0 + action_icon = 'icons/mob/actions/actions_cult.dmi' action_icon_state = "lesserconstruct" action_background_icon_state = "bg_cult" @@ -83,6 +87,7 @@ invocation = "none" invocation_type = "none" range = 0 + action_icon = 'icons/mob/actions/actions_cult.dmi' action_icon_state = "summonsoulstone" action_background_icon_state = "bg_demon" @@ -109,6 +114,7 @@ range = 0 summon_type = list(/obj/effect/forcefield/cult) summon_lifespan = 200 + action_icon = 'icons/mob/actions/actions_cult.dmi' action_icon_state = "cultforcewall" action_background_icon_state = "bg_demon" @@ -125,6 +131,7 @@ range = -1 include_user = 1 jaunt_duration = 50 //in deciseconds + action_icon = 'icons/mob/actions/actions_cult.dmi' action_icon_state = "phaseshift" action_background_icon_state = "bg_demon" jaunt_in_time = 12 @@ -164,7 +171,7 @@ smoke_spread = 3 smoke_amt = 4 - action_icon_state = "parasmoke" + action_icon_state = "smoke" action_background_icon_state = "bg_cult" @@ -182,6 +189,7 @@ clothes_req = FALSE invocation = "none" invocation_type = "none" + action_icon = 'icons/mob/actions/actions_cult.dmi' action_background_icon_state = "bg_demon" action_icon_state = "abyssal_gaze" @@ -222,6 +230,7 @@ clothes_req = FALSE invocation = "none" invocation_type = "none" + action_icon = 'icons/mob/actions/actions_cult.dmi' action_background_icon_state = "bg_demon" action_icon_state = "dominate" diff --git a/code/modules/spells/spell_types/devil.dm b/code/modules/spells/spell_types/devil.dm index 78d568c39e..ca9764af1f 100644 --- a/code/modules/spells/spell_types/devil.dm +++ b/code/modules/spells/spell_types/devil.dm @@ -10,6 +10,7 @@ school = "conjuration" charge_max = 150 cooldown_min = 10 + action_icon = 'icons/mob/actions/actions_minor_antag.dmi' action_icon_state = "pitchfork" action_background_icon_state = "bg_demon" @@ -26,6 +27,7 @@ invocation = "I aint have this much fun since Georgia." action_icon_state = "golden_violin" name = "Summon golden violin" + action_icon = 'icons/mob/actions/actions_minor_antag.dmi' action_background_icon_state = "bg_demon" /obj/effect/proc_holder/spell/targeted/summon_contract @@ -110,7 +112,7 @@ user.infernalphasein() else to_chat(user, "You are no longer near a potential signer.") - + else to_chat(user, "You can only re-appear near a potential signer.") revert_cast() @@ -178,6 +180,7 @@ cooldown_min = 0 overlay = null include_user = 0 + action_icon = 'icons/mob/actions/actions_cult.dmi' action_icon_state = "sintouch" action_background_icon_state = "bg_demon" phase_allowed = 0 @@ -213,6 +216,7 @@ school = "conjuration" charge_max = 10 cooldown_min = 50 //5 seconds, so the smoke can't be spammed + action_icon = 'icons/mob/actions/actions_minor_antag.dmi' action_icon_state = "funk" action_background_icon_state = "bg_demon" diff --git a/code/modules/spells/spell_types/devil_boons.dm b/code/modules/spells/spell_types/devil_boons.dm index 75b6597f07..192a15e96c 100644 --- a/code/modules/spells/spell_types/devil_boons.dm +++ b/code/modules/spells/spell_types/devil_boons.dm @@ -8,6 +8,7 @@ school = "conjuration" charge_max = 100 cooldown_min = 10 + action_icon = 'icons/mob/actions/actions_minor_antag.dmi' action_icon_state = "moneybag" @@ -34,6 +35,7 @@ clothes_req = 0 charge_max = 50 cooldown_min = 10 + action_icon = 'icons/mob/actions/actions_silicon.dmi' action_icon_state = "camera_jump" var/ranges = list(7,8,9,10) @@ -52,6 +54,7 @@ clothes_req = 0 charge_max = 50 cooldown_min = 10 + action_icon = 'icons/mob/actions/actions_spells.dmi' action_icon_state = "sacredflame" var/mob/living/friend var/obj/effect/mob_spawn/human/demonic_friend/friendShell diff --git a/code/modules/spells/spell_types/lichdom.dm b/code/modules/spells/spell_types/lichdom.dm index bc5ce48c7b..cc728f942e 100644 --- a/code/modules/spells/spell_types/lichdom.dm +++ b/code/modules/spells/spell_types/lichdom.dm @@ -17,6 +17,7 @@ cooldown_min = 10 include_user = 1 + action_icon = 'icons/mob/actions/actions_spells.dmi' action_icon_state = "skeleton" /obj/effect/proc_holder/spell/targeted/lichdom/cast(list/targets,mob/user = usr) diff --git a/code/modules/spells/spell_types/voice_of_god.dm b/code/modules/spells/spell_types/voice_of_god.dm index 6636c920f2..a5b44b8e0f 100644 --- a/code/modules/spells/spell_types/voice_of_god.dm +++ b/code/modules/spells/spell_types/voice_of_god.dm @@ -5,6 +5,7 @@ cooldown_min = 0 level_max = 1 clothes_req = 0 + action_icon = 'icons/mob/actions/actions_items.dmi' action_icon_state = "voice_of_god" var/command var/cooldown_mod = 1 diff --git a/code/modules/spells/spell_types/wizard.dm b/code/modules/spells/spell_types/wizard.dm index b9eae51f79..73995ab018 100644 --- a/code/modules/spells/spell_types/wizard.dm +++ b/code/modules/spells/spell_types/wizard.dm @@ -301,6 +301,7 @@ cooldown_min = 150 invocation_type = "none" sparkle_path = /obj/effect/temp_visual/dir_setting/tailsweep + action_icon = 'icons/mob/actions/actions_xeno.dmi' action_icon_state = "tailsweep" action_background_icon_state = "bg_alien" diff --git a/code/modules/tgui/external.dm b/code/modules/tgui/external.dm index a45b4a7daf..2d75ebab6a 100644 --- a/code/modules/tgui/external.dm +++ b/code/modules/tgui/external.dm @@ -60,13 +60,6 @@ /datum/proc/ui_host() return src // Default src. - /** - * global - * - * Used to track the current screen. - **/ -/datum/var/ui_screen = "home" - /** * global * diff --git a/goon/code/datums/browserOutput.dm b/goon/code/datums/browserOutput.dm index a6cabcba87..d928397728 100644 --- a/goon/code/datums/browserOutput.dm +++ b/goon/code/datums/browserOutput.dm @@ -2,9 +2,6 @@ For the main html chat area *********************************/ -#define BICON_X_MAX 96 -#define BICON_Y_MAX 96 - //Precaching a bunch of shit GLOBAL_DATUM_INIT(iconCache, /savefile, new("data/iconCache.sav")) //Cache of icons for the browser output @@ -191,10 +188,6 @@ GLOBAL_LIST_EMPTY(bicon_cache) /proc/icon2base64(icon/icon, iconKey = "misc") if (!isicon(icon)) return FALSE - //DOS exploit - if(icon.Width() > BICON_X_MAX || icon.Length() > BICON_Y_MAX) - return FALSE - // GLOB.iconCache[iconKey] << icon var/iconData = GLOB.iconCache.ExportText(iconKey) var/list/partial = splittext(iconData, "{") @@ -293,4 +286,4 @@ GLOBAL_LIST_EMPTY(bicon_cache) return M.current.client /datum/log //exists purely to capture to_chat() output - var/log = "" + var/log = "" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-2233.yml b/html/changelogs/AutoChangeLog-pr-2233.yml new file mode 100644 index 0000000000..4a8109664b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2233.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - rscadd: "Adds the \"seedling\" planetstation mob to the backend" diff --git a/icons/effects/beam.dmi b/icons/effects/beam.dmi index 71fdb96a85..e7f61d605d 100644 Binary files a/icons/effects/beam.dmi and b/icons/effects/beam.dmi differ diff --git a/icons/mob/actions/actions_AI.dmi b/icons/mob/actions/actions_AI.dmi new file mode 100644 index 0000000000..c6e4e1dae7 Binary files /dev/null and b/icons/mob/actions/actions_AI.dmi differ diff --git a/icons/mob/actions/actions_clockcult.dmi b/icons/mob/actions/actions_clockcult.dmi new file mode 100644 index 0000000000..251e387f50 Binary files /dev/null and b/icons/mob/actions/actions_clockcult.dmi differ diff --git a/icons/mob/actions/actions_construction.dmi b/icons/mob/actions/actions_construction.dmi new file mode 100644 index 0000000000..43fe0b48c4 Binary files /dev/null and b/icons/mob/actions/actions_construction.dmi differ diff --git a/icons/mob/actions/actions_cult.dmi b/icons/mob/actions/actions_cult.dmi new file mode 100644 index 0000000000..f96242ea9e Binary files /dev/null and b/icons/mob/actions/actions_cult.dmi differ diff --git a/icons/mob/actions/actions_flightsuit.dmi b/icons/mob/actions/actions_flightsuit.dmi new file mode 100644 index 0000000000..3121c24355 Binary files /dev/null and b/icons/mob/actions/actions_flightsuit.dmi differ diff --git a/icons/mob/actions/actions_items.dmi b/icons/mob/actions/actions_items.dmi new file mode 100644 index 0000000000..266c197ad3 Binary files /dev/null and b/icons/mob/actions/actions_items.dmi differ diff --git a/icons/mob/actions/actions_mecha.dmi b/icons/mob/actions/actions_mecha.dmi new file mode 100644 index 0000000000..c064441ed2 Binary files /dev/null and b/icons/mob/actions/actions_mecha.dmi differ diff --git a/icons/mob/actions/actions_minor_antag.dmi b/icons/mob/actions/actions_minor_antag.dmi new file mode 100644 index 0000000000..4e5806f2fb Binary files /dev/null and b/icons/mob/actions/actions_minor_antag.dmi differ diff --git a/icons/mob/actions/actions_revenant.dmi b/icons/mob/actions/actions_revenant.dmi new file mode 100644 index 0000000000..3f664d5c27 Binary files /dev/null and b/icons/mob/actions/actions_revenant.dmi differ diff --git a/icons/mob/actions/actions_silicon.dmi b/icons/mob/actions/actions_silicon.dmi new file mode 100644 index 0000000000..5b198649ba Binary files /dev/null and b/icons/mob/actions/actions_silicon.dmi differ diff --git a/icons/mob/actions/actions_slime.dmi b/icons/mob/actions/actions_slime.dmi new file mode 100644 index 0000000000..94cf319958 Binary files /dev/null and b/icons/mob/actions/actions_slime.dmi differ diff --git a/icons/mob/actions/actions_spells.dmi b/icons/mob/actions/actions_spells.dmi new file mode 100644 index 0000000000..8935bd993b Binary files /dev/null and b/icons/mob/actions/actions_spells.dmi differ diff --git a/icons/mob/actions/actions_xeno.dmi b/icons/mob/actions/actions_xeno.dmi new file mode 100644 index 0000000000..0a96fea8c4 Binary files /dev/null and b/icons/mob/actions/actions_xeno.dmi differ diff --git a/icons/mob/actions/backgrounds.dmi b/icons/mob/actions/backgrounds.dmi new file mode 100644 index 0000000000..6af3b98728 Binary files /dev/null and b/icons/mob/actions/backgrounds.dmi differ diff --git a/icons/mob/actions_AI.dmi b/icons/mob/actions_AI.dmi deleted file mode 100644 index 3a789984e6..0000000000 Binary files a/icons/mob/actions_AI.dmi and /dev/null differ diff --git a/icons/mob/jungle/arachnid.dmi b/icons/mob/jungle/arachnid.dmi index 342509a79e..ccd52eeb7d 100644 Binary files a/icons/mob/jungle/arachnid.dmi and b/icons/mob/jungle/arachnid.dmi differ diff --git a/icons/obj/projectiles.dmi b/icons/obj/projectiles.dmi index 98ac40f0c3..def7a71bd3 100644 Binary files a/icons/obj/projectiles.dmi and b/icons/obj/projectiles.dmi differ diff --git a/sound/effects/seedling_chargeup.ogg b/sound/effects/seedling_chargeup.ogg new file mode 100644 index 0000000000..155cc36c67 Binary files /dev/null and b/sound/effects/seedling_chargeup.ogg differ diff --git a/tgstation.dme b/tgstation.dme index 8fc6e297d5..9e09f17fdb 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -247,6 +247,7 @@ #include "code\datums\browser.dm" #include "code\datums\callback.dm" #include "code\datums\datacore.dm" +#include "code\datums\datum.dm" #include "code\datums\datumvars.dm" #include "code\datums\dna.dm" #include "code\datums\dog_fashion.dm"