diff --git a/_maps/map_files/AsteroidStation/AsteroidStation.dmm b/_maps/map_files/AsteroidStation/AsteroidStation.dmm index b2272d5e7ca9..597e12ef2a2b 100644 --- a/_maps/map_files/AsteroidStation/AsteroidStation.dmm +++ b/_maps/map_files/AsteroidStation/AsteroidStation.dmm @@ -33904,7 +33904,7 @@ "kns" = ( /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance/two, -/obj/item/latexballon, +/obj/item/latexballoon, /turf/open/floor/plating, /area/maintenance/port/aft) "knA" = ( @@ -59506,7 +59506,7 @@ "sCb" = ( /obj/structure/rack, /obj/item/storage/box/lights/mixed, -/obj/item/latexballon, +/obj/item/latexballoon, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating, /area/maintenance/port) @@ -66056,7 +66056,7 @@ /area/engine/engineering) "uMm" = ( /obj/structure/rack, -/obj/item/latexballon, +/obj/item/latexballoon, /obj/effect/spawner/lootdrop/maintenance/two, /turf/open/floor/plating, /area/maintenance/port/fore) diff --git a/_maps/map_files/YogStation/YogStation.dmm b/_maps/map_files/YogStation/YogStation.dmm index 9c375872059c..55b26f97cd07 100644 --- a/_maps/map_files/YogStation/YogStation.dmm +++ b/_maps/map_files/YogStation/YogStation.dmm @@ -26127,7 +26127,7 @@ /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, /obj/item/storage/box/lights/mixed, -/obj/item/latexballon, +/obj/item/latexballoon, /turf/open/floor/plating, /area/maintenance/port) "gCF" = ( @@ -61070,7 +61070,7 @@ lootcount = 2; name = "2maintenance loot spawner" }, -/obj/item/latexballon, +/obj/item/latexballoon, /obj/structure/disposalpipe/segment{ dir = 4 }, diff --git a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm index 43db37a73bd4..4ec67967a9ac 100644 --- a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm +++ b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm @@ -35,6 +35,8 @@ #define COMSIG_ATOM_NO_UPDATE_ICON_STATE UPDATE_ICON_STATE /// If returned from [COMSIG_ATOM_UPDATE_ICON] it prevents the atom from updating its overlays. #define COMSIG_ATOM_NO_UPDATE_OVERLAYS UPDATE_OVERLAYS +///from base of [atom/update_inhand_icon]: (/mob) +#define COMSIG_ATOM_UPDATE_INHAND_ICON "atom_update_inhand_icon" ///from base of [atom/update_icon_state]: () #define COMSIG_ATOM_UPDATE_ICON_STATE "atom_update_icon_state" ///from base of [/atom/update_overlays]: (list/new_overlays) diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm index 0375106e0f2b..ce9f74588277 100644 --- a/code/__DEFINES/flags.dm +++ b/code/__DEFINES/flags.dm @@ -58,6 +58,22 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 /// Blocks ruins spawning on the turf #define NO_RUINS_1 (1<<10) +// Update flags for [/atom/proc/update_appearance] +/// Update the atom's name +#define UPDATE_NAME (1<<0) +/// Update the atom's desc +#define UPDATE_DESC (1<<1) +/// Update the atom's icon state +#define UPDATE_ICON_STATE (1<<2) +/// Update the atom's overlays +#define UPDATE_OVERLAYS (1<<3) +/// Update the atom's greyscaling +#define UPDATE_GREYSCALE (1<<4) +/// Update the atom's smoothing. (More accurately, queue it for an update) +#define UPDATE_SMOOTHING (1<<5) +/// Update the atom's icon +#define UPDATE_ICON (UPDATE_ICON_STATE|UPDATE_OVERLAYS) + //AREA FLAGS /// If blobs can spawn there and if it counts towards their score. #define BLOBS_ALLOWED (1<<1) diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm index 331f30de8bd1..a8039ae5cdd6 100644 --- a/code/_globalvars/lists/objects.dm +++ b/code/_globalvars/lists/objects.dm @@ -40,3 +40,6 @@ GLOBAL_LIST_EMPTY(ai_core_displays) GLOBAL_LIST_EMPTY(mob_spawners) // All mob_spawn objects GLOBAL_LIST_EMPTY(alert_consoles) // Station alert consoles, /obj/machinery/computer/station_alert GLOBAL_LIST_INIT(alarms, list("Fire" = list(), "Atmosphere" = list(), "Power" = list())) //all engineering alerts for station alert consoles and alarm manager + +GLOBAL_LIST_EMPTY(roundstart_station_borgcharger_areas) // List of area names of roundstart station cyborg rechargers, for the low charge/no charge cyborg screen alert tooltips. +GLOBAL_LIST_EMPTY(roundstart_station_mechcharger_areas) // List of area names of roundstart station mech rechargers, for the low charge/no charge mech screen alert tooltips. diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index 5c532fdbda1e..2d09bed5dd92 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -129,7 +129,7 @@ if(W == A) W.attack_self(src) - update_inv_hands() + update_held_items() return //These are always reachable. diff --git a/code/_onclick/hud/action_button.dm b/code/_onclick/hud/action_button.dm index b422622ecc75..93ed71d04b0a 100644 --- a/code/_onclick/hud/action_button.dm +++ b/code/_onclick/hud/action_button.dm @@ -262,13 +262,14 @@ /atom/movable/screen/button_palette/Initialize(mapload) . = ..() - update_icon() + update_appearance() /atom/movable/screen/button_palette/proc/set_hud(datum/hud/our_hud) src.our_hud = our_hud refresh_owner() -/atom/movable/screen/button_palette/proc/update_name(updates) +/atom/movable/screen/button_palette/update_name(updates) + . = ..() if(expanded) name = "Hide Buttons" else @@ -357,7 +358,7 @@ GLOBAL_LIST_INIT(palette_removed_matrix, list(1.4,0,0,0, 0.7,0.4,0,0, 0.4,0,0.6, expanded = new_expanded our_group.refresh_actions() - update_icon() + update_appearance() if(!usr.client) return diff --git a/code/_onclick/hud/ai.dm b/code/_onclick/hud/ai.dm index 1b13ac173001..bd31a0a94bd3 100644 --- a/code/_onclick/hud/ai.dm +++ b/code/_onclick/hud/ai.dm @@ -192,7 +192,7 @@ var/widescreen = owner?.client?.prefs?.read_preference(/datum/preference/toggle/widescreen) // Language menu - using = new /atom/movable/screen/language_menu + using = new /atom/movable/screen/language_menu(src) if(widescreen) using.screen_loc = ui_ai_language_menu_widescreen else @@ -200,12 +200,12 @@ static_inventory += using //AI core - using = new /atom/movable/screen/ai/aicore() + using = new /atom/movable/screen/ai/aicore(src) using.screen_loc = ui_ai_core static_inventory += using //Dashboard - using = new /atom/movable/screen/ai/dashboard + using = new /atom/movable/screen/ai/dashboard(src) if(widescreen) using.screen_loc = ui_ai_dashboard_widescreen else @@ -214,72 +214,72 @@ static_inventory += using //Camera list - using = new /atom/movable/screen/ai/camera_list() + using = new /atom/movable/screen/ai/camera_list(src) using.screen_loc = ui_ai_camera_list static_inventory += using //Track - using = new /atom/movable/screen/ai/camera_track() + using = new /atom/movable/screen/ai/camera_track(src) using.screen_loc = ui_ai_track_with_camera static_inventory += using //Camera light - using = new /atom/movable/screen/ai/camera_light() + using = new /atom/movable/screen/ai/camera_light(src) using.screen_loc = ui_ai_camera_light static_inventory += using //Crew Monitoring - using = new /atom/movable/screen/ai/crew_monitor() + using = new /atom/movable/screen/ai/crew_monitor(src) using.screen_loc = ui_ai_crew_monitor static_inventory += using //Crew Manifest - using = new /atom/movable/screen/ai/crew_manifest() + using = new /atom/movable/screen/ai/crew_manifest(src) using.screen_loc = ui_ai_crew_manifest static_inventory += using //Alerts - using = new /atom/movable/screen/ai/alerts() + using = new /atom/movable/screen/ai/alerts(src) using.screen_loc = ui_ai_alerts static_inventory += using //Announcement - using = new /atom/movable/screen/ai/announcement() + using = new /atom/movable/screen/ai/announcement(src) using.screen_loc = ui_ai_announcement static_inventory += using //Shuttle - using = new /atom/movable/screen/ai/call_shuttle() + using = new /atom/movable/screen/ai/call_shuttle(src) using.screen_loc = ui_ai_shuttle static_inventory += using //Laws - using = new /atom/movable/screen/ai/state_laws() + using = new /atom/movable/screen/ai/state_laws(src) using.screen_loc = ui_ai_state_laws static_inventory += using //Integrated Tablet - using = new /atom/movable/screen/ai/mod_pc() + using = new /atom/movable/screen/ai/mod_pc(src) using.screen_loc = ui_ai_pda_send static_inventory += using //Take image - using = new /atom/movable/screen/ai/image_take() + using = new /atom/movable/screen/ai/image_take(src) using.screen_loc = ui_ai_take_picture static_inventory += using //View images - using = new /atom/movable/screen/ai/image_view() + using = new /atom/movable/screen/ai/image_view(src) using.screen_loc = ui_ai_view_images static_inventory += using //Medical/Security sensors - using = new /atom/movable/screen/ai/sensors() + using = new /atom/movable/screen/ai/sensors(src) using.screen_loc = ui_ai_sensor static_inventory += using //Multicamera mode - using = new /atom/movable/screen/ai/multicam() + using = new /atom/movable/screen/ai/multicam(src) if(widescreen) using.screen_loc = ui_ai_multicam_widescreen else @@ -287,7 +287,7 @@ static_inventory += using //Add multicamera camera - using = new /atom/movable/screen/ai/add_multicam() + using = new /atom/movable/screen/ai/add_multicam(src) if(widescreen) using.screen_loc = ui_ai_add_multicam_widescreen else diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm index 9562ed56c9ce..7c11d0644a55 100644 --- a/code/_onclick/hud/alert.dm +++ b/code/_onclick/hud/alert.dm @@ -530,15 +530,48 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." /atom/movable/screen/alert/emptycell name = "Out of Power" - desc = "Unit's power cell has no charge remaining. No modules available until power cell is recharged. \ -Recharging stations are available in robotics, the dormitory bathrooms, and the AI satellite." + desc = "Unit's power cell has no charge remaining. No modules available until power cell is recharged." icon_state = "emptycell" +/atom/movable/screen/alert/emptycell/Initialize(mapload) + . = ..() + update_appearance(updates=UPDATE_DESC) + +/atom/movable/screen/alert/emptycell/update_desc() + . = ..() + desc = initial(desc) + if(length(GLOB.roundstart_station_borgcharger_areas)) + desc += " Recharging stations are available in [english_list(GLOB.roundstart_station_borgcharger_areas)]." + /atom/movable/screen/alert/lowcell name = "Low Charge" - desc = "Unit's power cell is running low. Recharging stations are available in robotics, the dormitory bathrooms, and the AI satellite." + desc = "Unit's power cell is running low." icon_state = "lowcell" +/atom/movable/screen/alert/lowcell/Initialize(mapload) + . = ..() + update_appearance(updates=UPDATE_DESC) + +/atom/movable/screen/alert/lowcell/update_desc() + . = ..() + desc = initial(desc) + if(length(GLOB.roundstart_station_borgcharger_areas)) + desc += " Recharging stations are available in [english_list(GLOB.roundstart_station_borgcharger_areas)]." + +//MECH + +/atom/movable/screen/alert/lowcell/mech/update_desc() + . = ..() + desc = initial(desc) + if(length(GLOB.roundstart_station_mechcharger_areas)) + desc += " Power ports are available in [english_list(GLOB.roundstart_station_mechcharger_areas)]." + +/atom/movable/screen/alert/emptycell/mech/update_desc() + . = ..() + desc = initial(desc) + if(length(GLOB.roundstart_station_mechcharger_areas)) + desc += " Power ports are available in [english_list(GLOB.roundstart_station_mechcharger_areas)]." + //Ethereal /atom/movable/screen/alert/etherealcharge diff --git a/code/_onclick/hud/alien.dm b/code/_onclick/hud/alien.dm index 7473d74e5e5a..14821f021fcf 100644 --- a/code/_onclick/hud/alien.dm +++ b/code/_onclick/hud/alien.dm @@ -39,26 +39,26 @@ //begin buttons - using = new /atom/movable/screen/swap_hand() + using = new /atom/movable/screen/swap_hand(src) using.icon = ui_style using.icon_state = "swap_1" using.screen_loc = ui_swaphand_position(owner,1) static_inventory += using - using = new /atom/movable/screen/swap_hand() + using = new /atom/movable/screen/swap_hand(src) using.icon = ui_style using.icon_state = "swap_2" using.screen_loc = ui_swaphand_position(owner,2) static_inventory += using - using = new /atom/movable/screen/act_intent/alien() + using = new /atom/movable/screen/act_intent/alien(src) using.icon_state = mymob.a_intent static_inventory += using action_intent = using if(isalienhunter(mymob)) var/mob/living/carbon/alien/humanoid/hunter/H = mymob - H.leap_icon = new /atom/movable/screen/alien/leap() + H.leap_icon = new /atom/movable/screen/alien/leap(src) H.leap_icon.screen_loc = ui_alien_storage_r static_inventory += H.leap_icon @@ -66,48 +66,48 @@ using.screen_loc = ui_alien_language_menu static_inventory += using - using = new /atom/movable/screen/drop() + using = new /atom/movable/screen/drop(src) using.icon = ui_style using.screen_loc = ui_drop_throw static_inventory += using - using = new /atom/movable/screen/resist() + using = new /atom/movable/screen/resist(src) using.icon = ui_style using.screen_loc = ui_above_movement hotkeybuttons += using - throw_icon = new /atom/movable/screen/throw_catch() + throw_icon = new /atom/movable/screen/throw_catch(src) throw_icon.icon = ui_style throw_icon.screen_loc = ui_drop_throw hotkeybuttons += throw_icon - pull_icon = new /atom/movable/screen/pull() + pull_icon = new /atom/movable/screen/pull(src) pull_icon.icon = ui_style - pull_icon.update_icon(mymob) + pull_icon.update_appearance(UPDATE_ICON) pull_icon.screen_loc = ui_above_movement static_inventory += pull_icon //begin indicators - healths = new /atom/movable/screen/healths/alien() + healths = new /atom/movable/screen/healths/alien(src) infodisplay += healths - alien_plasma_display = new /atom/movable/screen/alien/plasma_display() + alien_plasma_display = new /atom/movable/screen/alien/plasma_display(src) infodisplay += alien_plasma_display if(!isalienqueen(mymob)) - alien_queen_finder = new /atom/movable/screen/alien/alien_queen_finder + alien_queen_finder = new /atom/movable/screen/alien/alien_queen_finder(src) infodisplay += alien_queen_finder - zone_select = new /atom/movable/screen/zone_sel/alien() - zone_select.update_icon(mymob) + zone_select = new /atom/movable/screen/zone_sel/alien(src) + zone_select.update_appearance(UPDATE_ICON) static_inventory += zone_select for(var/atom/movable/screen/inventory/inv in (static_inventory + toggleable_inventory)) if(inv.slot_id) inv.hud = src inv_slots[TOBITSHIFT(inv.slot_id) + 1] = inv - inv.update_icon() + inv.update_appearance(UPDATE_ICON) /datum/hud/alien/persistent_inventory_update() if(!mymob) diff --git a/code/_onclick/hud/alien_larva.dm b/code/_onclick/hud/alien_larva.dm index 5c7062a365f1..f20a3a182ede 100644 --- a/code/_onclick/hud/alien_larva.dm +++ b/code/_onclick/hud/alien_larva.dm @@ -5,19 +5,19 @@ ..() var/atom/movable/screen/using - using = new /atom/movable/screen/act_intent/alien() + using = new /atom/movable/screen/act_intent/alien(src) using.icon_state = mymob.a_intent static_inventory += using action_intent = using - healths = new /atom/movable/screen/healths/alien() + healths = new /atom/movable/screen/healths/alien(src) infodisplay += healths - alien_queen_finder = new /atom/movable/screen/alien/alien_queen_finder() + alien_queen_finder = new /atom/movable/screen/alien/alien_queen_finder(src) infodisplay += alien_queen_finder - pull_icon = new /atom/movable/screen/pull() + pull_icon = new /atom/movable/screen/pull(src) pull_icon.icon = 'icons/mob/screen_alien.dmi' - pull_icon.update_icon(mymob) + pull_icon.update_appearance(UPDATE_ICON) pull_icon.screen_loc = ui_above_movement hotkeybuttons += pull_icon @@ -25,6 +25,6 @@ using.screen_loc = ui_alien_language_menu static_inventory += using - zone_select = new /atom/movable/screen/zone_sel/alien() - zone_select.update_icon(mymob) + zone_select = new /atom/movable/screen/zone_sel/alien(src) + zone_select.update_appearance(UPDATE_ICON) static_inventory += zone_select diff --git a/code/_onclick/hud/blob_overmind.dm b/code/_onclick/hud/blob_overmind.dm index 622e45e69e98..b69902fc380a 100644 --- a/code/_onclick/hud/blob_overmind.dm +++ b/code/_onclick/hud/blob_overmind.dm @@ -126,7 +126,7 @@ ..() var/atom/movable/screen/using - blobpwrdisplay = new /atom/movable/screen() + blobpwrdisplay = new /atom/movable/screen(src) blobpwrdisplay.name = "blob power" blobpwrdisplay.icon_state = "block" blobpwrdisplay.screen_loc = ui_health @@ -135,44 +135,44 @@ blobpwrdisplay.plane = ABOVE_HUD_PLANE infodisplay += blobpwrdisplay - healths = new /atom/movable/screen/healths/blob() + healths = new /atom/movable/screen/healths/blob(src) infodisplay += healths - using = new /atom/movable/screen/blob/BlobHelp() + using = new /atom/movable/screen/blob/BlobHelp(src) using.screen_loc = "WEST:6,NORTH:-3" static_inventory += using - using = new /atom/movable/screen/blob/JumpToNode() + using = new /atom/movable/screen/blob/JumpToNode(src) using.screen_loc = ui_inventory static_inventory += using - using = new /atom/movable/screen/blob/JumpToCore() + using = new /atom/movable/screen/blob/JumpToCore(src) using.screen_loc = ui_zonesel using.hud = src static_inventory += using - using = new /atom/movable/screen/blob/Blobbernaut() + using = new /atom/movable/screen/blob/Blobbernaut(src) using.screen_loc = ui_belt static_inventory += using - using = new /atom/movable/screen/blob/ResourceBlob() + using = new /atom/movable/screen/blob/ResourceBlob(src) using.screen_loc = ui_back static_inventory += using - using = new /atom/movable/screen/blob/NodeBlob() + using = new /atom/movable/screen/blob/NodeBlob(src) using.screen_loc = ui_hand_position(2) static_inventory += using - using = new /atom/movable/screen/blob/FactoryBlob() + using = new /atom/movable/screen/blob/FactoryBlob(src) using.screen_loc = ui_hand_position(1) static_inventory += using - using = new /atom/movable/screen/blob/ReadaptStrain() + using = new /atom/movable/screen/blob/ReadaptStrain(src) using.screen_loc = ui_storage1 using.hud = src static_inventory += using - using = new /atom/movable/screen/blob/RelocateCore() + using = new /atom/movable/screen/blob/RelocateCore(src) using.screen_loc = ui_storage2 static_inventory += using diff --git a/code/_onclick/hud/blobbernauthud.dm b/code/_onclick/hud/blobbernauthud.dm index 2431a1afeaa2..130f2159888f 100644 --- a/code/_onclick/hud/blobbernauthud.dm +++ b/code/_onclick/hud/blobbernauthud.dm @@ -1,6 +1,6 @@ /datum/hud/living/blobbernaut/New(mob/living/owner) . = ..() - blobpwrdisplay = new /atom/movable/screen/healths/blob/overmind() + blobpwrdisplay = new /atom/movable/screen/healths/blob/overmind(src) blobpwrdisplay.hud = src - infodisplay += blobpwrdisplay \ No newline at end of file + infodisplay += blobpwrdisplay diff --git a/code/_onclick/hud/constructs.dm b/code/_onclick/hud/constructs.dm index 4b8fb2838042..e17b335122f2 100644 --- a/code/_onclick/hud/constructs.dm +++ b/code/_onclick/hud/constructs.dm @@ -3,11 +3,11 @@ /datum/hud/constructs/New(mob/owner) ..() - pull_icon = new /atom/movable/screen/pull() + pull_icon = new /atom/movable/screen/pull(src) pull_icon.icon = ui_style - pull_icon.update_icon(mymob) + pull_icon.update_appearance(UPDATE_ICON) pull_icon.screen_loc = ui_construct_pull static_inventory += pull_icon - healths = new /atom/movable/screen/healths/construct() + healths = new /atom/movable/screen/healths/construct(src) infodisplay += healths diff --git a/code/_onclick/hud/devil.dm b/code/_onclick/hud/devil.dm index 3e4b39832322..d987366920ed 100644 --- a/code/_onclick/hud/devil.dm +++ b/code/_onclick/hud/devil.dm @@ -6,20 +6,20 @@ ..() var/atom/movable/screen/using - using = new /atom/movable/screen/drop() + using = new /atom/movable/screen/drop(src) using.icon = ui_style using.screen_loc = ui_drone_drop static_inventory += using - pull_icon = new /atom/movable/screen/pull() + pull_icon = new /atom/movable/screen/pull(src) pull_icon.icon = ui_style - pull_icon.update_icon(mymob) + pull_icon.update_appearance(UPDATE_ICON) pull_icon.screen_loc = ui_drone_pull static_inventory += pull_icon build_hand_slots() - using = new /atom/movable/screen/inventory() + using = new /atom/movable/screen/inventory(src) using.name = "hand" using.icon = ui_style using.icon_state = "swap_1_m" @@ -28,7 +28,7 @@ using.plane = HUD_PLANE static_inventory += using - using = new /atom/movable/screen/inventory() + using = new /atom/movable/screen/inventory(src) using.name = "hand" using.icon = ui_style using.icon_state = "swap_2" @@ -37,9 +37,9 @@ using.plane = HUD_PLANE static_inventory += using - zone_select = new /atom/movable/screen/zone_sel() + zone_select = new /atom/movable/screen/zone_sel(src) zone_select.icon = ui_style - zone_select.update_icon(mymob) + zone_select.update_appearance(UPDATE_ICON) devilsouldisplay = new /atom/movable/screen/devil/soul_counter infodisplay += devilsouldisplay diff --git a/code/_onclick/hud/drones.dm b/code/_onclick/hud/drones.dm index a2cae8986443..e853c01826ad 100644 --- a/code/_onclick/hud/drones.dm +++ b/code/_onclick/hud/drones.dm @@ -2,7 +2,7 @@ ..() var/atom/movable/screen/inventory/inv_box - inv_box = new /atom/movable/screen/inventory() + inv_box = new /atom/movable/screen/inventory(src) inv_box.name = "internal storage" inv_box.icon = ui_style inv_box.icon_state = "suit_storage" @@ -11,7 +11,7 @@ inv_box.slot_id = ITEM_SLOT_DEX_STORAGE static_inventory += inv_box - inv_box = new /atom/movable/screen/inventory() + inv_box = new /atom/movable/screen/inventory(src) inv_box.name = "head/mask" inv_box.icon = ui_style inv_box.icon_state = "mask" @@ -24,7 +24,7 @@ if(inv.slot_id) inv.hud = src inv_slots[TOBITSHIFT(inv.slot_id) + 1] = inv - inv.update_icon() + inv.update_appearance(UPDATE_ICON) /datum/hud/dextrous/drone/persistent_inventory_update() diff --git a/code/_onclick/hud/generic_dextrous.dm b/code/_onclick/hud/generic_dextrous.dm index 85077ac2c398..315a65ac3492 100644 --- a/code/_onclick/hud/generic_dextrous.dm +++ b/code/_onclick/hud/generic_dextrous.dm @@ -3,26 +3,26 @@ ..() var/atom/movable/screen/using - using = new /atom/movable/screen/drop() + using = new /atom/movable/screen/drop(src) using.icon = ui_style using.screen_loc = ui_drone_drop static_inventory += using - pull_icon = new /atom/movable/screen/pull() + pull_icon = new /atom/movable/screen/pull(src) pull_icon.icon = ui_style - pull_icon.update_icon(mymob) + pull_icon.update_appearance(UPDATE_ICON) pull_icon.screen_loc = ui_drone_pull static_inventory += pull_icon build_hand_slots() - using = new /atom/movable/screen/swap_hand() + using = new /atom/movable/screen/swap_hand(src) using.icon = ui_style using.icon_state = "swap_1_m" using.screen_loc = ui_swaphand_position(owner,1) static_inventory += using - using = new /atom/movable/screen/swap_hand() + using = new /atom/movable/screen/swap_hand(src) using.icon = ui_style using.icon_state = "swap_2" using.screen_loc = ui_swaphand_position(owner,2) @@ -31,20 +31,20 @@ if(mymob.possible_a_intents) if(mymob.possible_a_intents.len == 4) // All possible intents - full intent selector - action_intent = new /atom/movable/screen/act_intent/segmented + action_intent = new /atom/movable/screen/act_intent/segmented(src) else - action_intent = new /atom/movable/screen/act_intent + action_intent = new /atom/movable/screen/act_intent(src) action_intent.icon = ui_style action_intent.icon_state = mymob.a_intent static_inventory += action_intent - zone_select = new /atom/movable/screen/zone_sel() + zone_select = new /atom/movable/screen/zone_sel(src) zone_select.icon = ui_style - zone_select.update_icon(mymob) + zone_select.update_appearance(UPDATE_ICON) static_inventory += zone_select - using = new /atom/movable/screen/area_creator + using = new /atom/movable/screen/area_creator(src) using.icon = ui_style static_inventory += using @@ -54,7 +54,7 @@ if(inv.slot_id) inv.hud = src inv_slots[TOBITSHIFT(inv.slot_id) + 1] = inv - inv.update_icon() + inv.update_appearance(UPDATE_ICON) /datum/hud/dextrous/persistent_inventory_update() if(!mymob) diff --git a/code/_onclick/hud/ghost.dm b/code/_onclick/hud/ghost.dm index b3e456eeb0ec..c58b790d3515 100644 --- a/code/_onclick/hud/ghost.dm +++ b/code/_onclick/hud/ghost.dm @@ -48,47 +48,47 @@ ..() var/atom/movable/screen/using - using = new /atom/movable/screen/ghost/jump_to_mob() + using = new /atom/movable/screen/ghost/jump_to_mob(src) using.screen_loc = ui_ghost_jump_to_mob static_inventory += using - using = new /atom/movable/screen/ghost/orbit() + using = new /atom/movable/screen/ghost/orbit(src) using.screen_loc = ui_ghost_orbit static_inventory += using - using = new /atom/movable/screen/ghost/reenter_corpse() + using = new /atom/movable/screen/ghost/reenter_corpse(src) using.screen_loc = ui_ghost_reenter_corpse static_inventory += using - using = new /atom/movable/screen/ghost/teleport() + using = new /atom/movable/screen/ghost/teleport(src) using.screen_loc = ui_ghost_teleport static_inventory += using - using = new /atom/movable/screen/ghost/spawners() + using = new /atom/movable/screen/ghost/spawners(src) using.screen_loc = ui_ghost_spawners static_inventory += using - using = new /atom/movable/screen/ghost/med_scan() + using = new /atom/movable/screen/ghost/med_scan(src) using.screen_loc = ui_ghost_med static_inventory += using - using = new /atom/movable/screen/ghost/chem_scan() + using = new /atom/movable/screen/ghost/chem_scan(src) using.screen_loc = ui_ghost_chem static_inventory += using - using = new /atom/movable/screen/ghost/nanite_scan() + using = new /atom/movable/screen/ghost/nanite_scan(src) using.screen_loc = ui_ghost_nanite static_inventory += using - using = new /atom/movable/screen/ghost/wound_scan() + using = new /atom/movable/screen/ghost/wound_scan(src) using.screen_loc = ui_ghost_wound static_inventory += using - using = new /atom/movable/screen/ghost/pai() + using = new /atom/movable/screen/ghost/pai(src) using.screen_loc = ui_ghost_pai static_inventory += using - using = new /atom/movable/screen/language_menu/ghost + using = new /atom/movable/screen/language_menu/ghost(src) using.icon = ui_style static_inventory += using diff --git a/code/_onclick/hud/guardian.dm b/code/_onclick/hud/guardian.dm index 6ea4b233d5c2..de8866e5172e 100644 --- a/code/_onclick/hud/guardian.dm +++ b/code/_onclick/hud/guardian.dm @@ -5,33 +5,33 @@ ..() var/atom/movable/screen/using - pull_icon = new /atom/movable/screen/pull() + pull_icon = new /atom/movable/screen/pull(src) pull_icon.icon = ui_style - pull_icon.update_icon() + pull_icon.update_appearance(UPDATE_ICON) pull_icon.screen_loc = ui_living_pull pull_icon.hud = src static_inventory += pull_icon - healths = new /atom/movable/screen/healths/guardian() + healths = new /atom/movable/screen/healths/guardian(src) infodisplay += healths - using = new /atom/movable/screen/guardian/Manifest() + using = new /atom/movable/screen/guardian/Manifest(src) using.screen_loc = ui_hand_position(2) static_inventory += using - using = new /atom/movable/screen/guardian/Recall() + using = new /atom/movable/screen/guardian/Recall(src) using.screen_loc = ui_hand_position(1) static_inventory += using - using = new owner.toggle_button_type() + using = new owner.toggle_button_type(src) using.screen_loc = ui_storage1 static_inventory += using - using = new /atom/movable/screen/guardian/ToggleLight() + using = new /atom/movable/screen/guardian/ToggleLight(src) using.screen_loc = ui_inventory static_inventory += using - using = new /atom/movable/screen/guardian/Communicate() + using = new /atom/movable/screen/guardian/Communicate(src) using.screen_loc = ui_back static_inventory += using diff --git a/code/_onclick/hud/horror.dm b/code/_onclick/hud/horror.dm index 3cc1c016093e..66cf769f8cee 100644 --- a/code/_onclick/hud/horror.dm +++ b/code/_onclick/hud/horror.dm @@ -9,7 +9,7 @@ /datum/hud/chemical_counter/New(mob/owner) . = ..() - chemical_counter = new /atom/movable/screen/horror_chemicals + chemical_counter = new /atom/movable/screen/horror_chemicals(src) infodisplay += chemical_counter /datum/hud/chemical_counter/Destroy() diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index 3dcce9b09a83..61aed71beb91 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -302,16 +302,15 @@ GLOBAL_LIST_INIT(available_ui_styles, list( hand_slots = list() var/atom/movable/screen/inventory/hand/hand_box for(var/i in 1 to mymob.held_items.len) - hand_box = new /atom/movable/screen/inventory/hand() + hand_box = new /atom/movable/screen/inventory/hand(src) hand_box.name = mymob.get_held_index_name(i) hand_box.icon = ui_style hand_box.icon_state = "hand_[mymob.held_index_to_dir(i)]" hand_box.screen_loc = ui_hand_position(i) hand_box.held_index = i hand_slots["[i]"] = hand_box - hand_box.hud = src static_inventory += hand_box - hand_box.update_icon() + hand_box.update_appearance(UPDATE_ICON) var/i = 1 for(var/atom/movable/screen/swap_hand/SH in static_inventory) diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm index a887012f4cb6..f5a979309741 100644 --- a/code/_onclick/hud/human.dm +++ b/code/_onclick/hud/human.dm @@ -95,28 +95,28 @@ using.screen_loc = UI_BOXLANG static_inventory += using - using = new /atom/movable/screen/area_creator + using = new /atom/movable/screen/area_creator(src) using.icon = ui_style if(!widescreen_layout) using.screen_loc = UI_BOXAREA static_inventory += using - action_intent = new /atom/movable/screen/act_intent/segmented + action_intent = new /atom/movable/screen/act_intent/segmented(src) action_intent.icon_state = mymob.a_intent static_inventory += action_intent - using = new /atom/movable/screen/mov_intent + using = new /atom/movable/screen/mov_intent(src) using.icon = ui_style using.icon_state = (mymob.m_intent == MOVE_INTENT_RUN ? "running" : "walking") using.screen_loc = ui_movi static_inventory += using - using = new /atom/movable/screen/drop() + using = new /atom/movable/screen/drop(src) using.icon = ui_style using.screen_loc = ui_drop_throw static_inventory += using - inv_box = new /atom/movable/screen/inventory() + inv_box = new /atom/movable/screen/inventory(src) inv_box.name = "i_clothing" inv_box.icon = ui_style inv_box.slot_id = ITEM_SLOT_ICLOTHING @@ -124,7 +124,7 @@ inv_box.screen_loc = ui_iclothing toggleable_inventory += inv_box - inv_box = new /atom/movable/screen/inventory() + inv_box = new /atom/movable/screen/inventory(src) inv_box.name = "o_clothing" inv_box.icon = ui_style inv_box.slot_id = ITEM_SLOT_OCLOTHING @@ -134,19 +134,19 @@ build_hand_slots() - using = new /atom/movable/screen/swap_hand() + using = new /atom/movable/screen/swap_hand(src) using.icon = ui_style using.icon_state = "swap_1" using.screen_loc = ui_swaphand_position(owner,1) static_inventory += using - using = new /atom/movable/screen/swap_hand() + using = new /atom/movable/screen/swap_hand(src) using.icon = ui_style using.icon_state = "swap_2" using.screen_loc = ui_swaphand_position(owner,2) static_inventory += using - inv_box = new /atom/movable/screen/inventory() + inv_box = new /atom/movable/screen/inventory(src) inv_box.name = "id" inv_box.icon = ui_style inv_box.icon_state = "id" @@ -154,7 +154,7 @@ inv_box.slot_id = ITEM_SLOT_ID static_inventory += inv_box - inv_box = new /atom/movable/screen/inventory() + inv_box = new /atom/movable/screen/inventory(src) inv_box.name = "mask" inv_box.icon = ui_style inv_box.icon_state = "mask" @@ -162,7 +162,7 @@ inv_box.slot_id = ITEM_SLOT_MASK toggleable_inventory += inv_box - inv_box = new /atom/movable/screen/inventory() + inv_box = new /atom/movable/screen/inventory(src) inv_box.name = "neck" inv_box.icon = ui_style inv_box.icon_state = "neck" @@ -170,7 +170,7 @@ inv_box.slot_id = ITEM_SLOT_NECK toggleable_inventory += inv_box - inv_box = new /atom/movable/screen/inventory() + inv_box = new /atom/movable/screen/inventory(src) inv_box.name = "back" inv_box.icon = ui_style inv_box.icon_state = "back" @@ -178,7 +178,7 @@ inv_box.slot_id = ITEM_SLOT_BACK static_inventory += inv_box - inv_box = new /atom/movable/screen/inventory() + inv_box = new /atom/movable/screen/inventory(src) inv_box.name = "storage1" inv_box.icon = ui_style inv_box.icon_state = "pocket" @@ -186,7 +186,7 @@ inv_box.slot_id = ITEM_SLOT_LPOCKET static_inventory += inv_box - inv_box = new /atom/movable/screen/inventory() + inv_box = new /atom/movable/screen/inventory(src) inv_box.name = "storage2" inv_box.icon = ui_style inv_box.icon_state = "pocket" @@ -194,7 +194,7 @@ inv_box.slot_id = ITEM_SLOT_RPOCKET static_inventory += inv_box - inv_box = new /atom/movable/screen/inventory() + inv_box = new /atom/movable/screen/inventory(src) inv_box.name = "suit storage" inv_box.icon = ui_style inv_box.icon_state = "suit_storage" @@ -202,22 +202,22 @@ inv_box.slot_id = ITEM_SLOT_SUITSTORE static_inventory += inv_box - using = new /atom/movable/screen/resist() + using = new /atom/movable/screen/resist(src) using.icon = ui_style using.screen_loc = ui_above_intent hotkeybuttons += using - using = new /atom/movable/screen/human/toggle() + using = new /atom/movable/screen/human/toggle(src) using.icon = ui_style using.screen_loc = ui_inventory static_inventory += using - using = new /atom/movable/screen/human/equip() + using = new /atom/movable/screen/human/equip(src) using.icon = ui_style using.screen_loc = ui_equip_position(mymob) static_inventory += using - inv_box = new /atom/movable/screen/inventory() + inv_box = new /atom/movable/screen/inventory(src) inv_box.name = "gloves" inv_box.icon = ui_style inv_box.icon_state = "gloves" @@ -225,7 +225,7 @@ inv_box.slot_id = ITEM_SLOT_GLOVES toggleable_inventory += inv_box - inv_box = new /atom/movable/screen/inventory() + inv_box = new /atom/movable/screen/inventory(src) inv_box.name = "eyes" inv_box.icon = ui_style inv_box.icon_state = "glasses" @@ -233,7 +233,7 @@ inv_box.slot_id = ITEM_SLOT_EYES toggleable_inventory += inv_box - inv_box = new /atom/movable/screen/inventory() + inv_box = new /atom/movable/screen/inventory(src) inv_box.name = "ears" inv_box.icon = ui_style inv_box.icon_state = "ears" @@ -241,7 +241,7 @@ inv_box.slot_id = ITEM_SLOT_EARS toggleable_inventory += inv_box - inv_box = new /atom/movable/screen/inventory() + inv_box = new /atom/movable/screen/inventory(src) inv_box.name = "head" inv_box.icon = ui_style inv_box.icon_state = "head" @@ -249,7 +249,7 @@ inv_box.slot_id = ITEM_SLOT_HEAD toggleable_inventory += inv_box - inv_box = new /atom/movable/screen/inventory() + inv_box = new /atom/movable/screen/inventory(src) inv_box.name = "shoes" inv_box.icon = ui_style inv_box.icon_state = "shoes" @@ -257,7 +257,7 @@ inv_box.slot_id = ITEM_SLOT_FEET toggleable_inventory += inv_box - inv_box = new /atom/movable/screen/inventory() + inv_box = new /atom/movable/screen/inventory(src) inv_box.name = "belt" inv_box.icon = ui_style inv_box.icon_state = "belt" @@ -266,45 +266,45 @@ inv_box.slot_id = ITEM_SLOT_BELT static_inventory += inv_box - throw_icon = new /atom/movable/screen/throw_catch() + throw_icon = new /atom/movable/screen/throw_catch(src) throw_icon.icon = ui_style throw_icon.screen_loc = ui_drop_throw hotkeybuttons += throw_icon - rest_icon = new /atom/movable/screen/rest() + rest_icon = new /atom/movable/screen/rest(src) rest_icon.icon = ui_style rest_icon.screen_loc = ui_above_movement static_inventory += rest_icon - healths = new /atom/movable/screen/healths() + healths = new /atom/movable/screen/healths(src) infodisplay += healths - stamina = new /atom/movable/screen/stamina() + stamina = new /atom/movable/screen/stamina(src) stamina.hud = src infodisplay += stamina - healthdoll = new /atom/movable/screen/healthdoll() + healthdoll = new /atom/movable/screen/healthdoll(src) infodisplay += healthdoll - pull_icon = new /atom/movable/screen/pull() + pull_icon = new /atom/movable/screen/pull(src) pull_icon.icon = ui_style - pull_icon.update_icon(mymob) + pull_icon.update_appearance(UPDATE_ICON) pull_icon.screen_loc = ui_above_intent static_inventory += pull_icon - devilsouldisplay = new /atom/movable/screen/devil/soul_counter + devilsouldisplay = new /atom/movable/screen/devil/soul_counter(src) infodisplay += devilsouldisplay - zone_select = new /atom/movable/screen/zone_sel() + zone_select = new /atom/movable/screen/zone_sel(src) zone_select.icon = ui_style - zone_select.update_icon(mymob) + zone_select.update_appearance(UPDATE_ICON) static_inventory += zone_select for(var/atom/movable/screen/inventory/inv in (static_inventory + toggleable_inventory)) if(inv.slot_id) inv.hud = src inv_slots[TOBITSHIFT(inv.slot_id) + 1] = inv - inv.update_icon() + inv.update_appearance(UPDATE_ICON) update_locked_slots() diff --git a/code/_onclick/hud/lavaland_elite.dm b/code/_onclick/hud/lavaland_elite.dm index fd3957f27f44..9523e4fb4592 100644 --- a/code/_onclick/hud/lavaland_elite.dm +++ b/code/_onclick/hud/lavaland_elite.dm @@ -3,13 +3,13 @@ /datum/hud/lavaland_elite/New(mob/living/simple_animal/hostile/asteroid/elite) ..() - pull_icon = new /atom/movable/screen/pull() + pull_icon = new /atom/movable/screen/pull(src) pull_icon.icon = ui_style - pull_icon.update_icon() + pull_icon.update_appearance(UPDATE_ICON) pull_icon.screen_loc = ui_living_pull pull_icon.hud = src static_inventory += pull_icon - healths = new /atom/movable/screen/healths/lavaland_elite() + healths = new /atom/movable/screen/healths/lavaland_elite(src) healths.hud = src infodisplay += healths diff --git a/code/_onclick/hud/living.dm b/code/_onclick/hud/living.dm index 90022ec028f9..66cf1f648147 100644 --- a/code/_onclick/hud/living.dm +++ b/code/_onclick/hud/living.dm @@ -4,14 +4,14 @@ /datum/hud/living/New(mob/living/owner) ..() - pull_icon = new /atom/movable/screen/pull() + pull_icon = new /atom/movable/screen/pull(src) pull_icon.icon = ui_style - pull_icon.update_icon() + pull_icon.update_appearance(UPDATE_ICON) pull_icon.screen_loc = ui_living_pull pull_icon.hud = src static_inventory += pull_icon //mob health doll! assumes whatever sprite the mob is - healthdoll = new /atom/movable/screen/healthdoll/living() + healthdoll = new /atom/movable/screen/healthdoll/living(src) healthdoll.hud = src infodisplay += healthdoll diff --git a/code/_onclick/hud/monkey.dm b/code/_onclick/hud/monkey.dm index 3789aff2e3df..2e020499a6ec 100644 --- a/code/_onclick/hud/monkey.dm +++ b/code/_onclick/hud/monkey.dm @@ -3,13 +3,13 @@ var/atom/movable/screen/using var/atom/movable/screen/inventory/inv_box - action_intent = new /atom/movable/screen/act_intent() + action_intent = new /atom/movable/screen/act_intent(src) action_intent.icon = ui_style action_intent.icon_state = mymob.a_intent action_intent.screen_loc = ui_acti static_inventory += action_intent - using = new /atom/movable/screen/mov_intent() + using = new /atom/movable/screen/mov_intent(src) using.icon = ui_style using.icon_state = (mymob.m_intent == MOVE_INTENT_RUN ? "running" : "walking") using.screen_loc = ui_movi @@ -19,26 +19,26 @@ using.icon = ui_style static_inventory += using - using = new /atom/movable/screen/drop() + using = new /atom/movable/screen/drop(src) using.icon = ui_style using.screen_loc = ui_drop_throw static_inventory += using build_hand_slots() - using = new /atom/movable/screen/swap_hand() + using = new /atom/movable/screen/swap_hand(src) using.icon = ui_style using.icon_state = "swap_1_m" //extra wide! using.screen_loc = ui_swaphand_position(owner,1) static_inventory += using - using = new /atom/movable/screen/swap_hand() + using = new /atom/movable/screen/swap_hand(src) using.icon = ui_style using.icon_state = "swap_2" using.screen_loc = ui_swaphand_position(owner,2) static_inventory += using - inv_box = new /atom/movable/screen/inventory() + inv_box = new /atom/movable/screen/inventory(src) inv_box.name = "mask" inv_box.icon = ui_style inv_box.icon_state = "mask" @@ -47,7 +47,7 @@ inv_box.slot_id = ITEM_SLOT_MASK static_inventory += inv_box - inv_box = new /atom/movable/screen/inventory() + inv_box = new /atom/movable/screen/inventory(src) inv_box.name = "neck" inv_box.icon = ui_style inv_box.icon_state = "neck" @@ -56,7 +56,7 @@ inv_box.slot_id = ITEM_SLOT_NECK static_inventory += inv_box - inv_box = new /atom/movable/screen/inventory() + inv_box = new /atom/movable/screen/inventory(src) inv_box.name = "head" inv_box.icon = ui_style inv_box.icon_state = "head" @@ -65,7 +65,7 @@ inv_box.slot_id = ITEM_SLOT_HEAD static_inventory += inv_box - inv_box = new /atom/movable/screen/inventory() + inv_box = new /atom/movable/screen/inventory(src) inv_box.name = "back" inv_box.icon = ui_style inv_box.icon_state = "back" @@ -73,28 +73,28 @@ inv_box.slot_id = ITEM_SLOT_BACK static_inventory += inv_box - throw_icon = new /atom/movable/screen/throw_catch() + throw_icon = new /atom/movable/screen/throw_catch(src) throw_icon.icon = ui_style throw_icon.screen_loc = ui_drop_throw hotkeybuttons += throw_icon - healths = new /atom/movable/screen/healths() + healths = new /atom/movable/screen/healths(src) infodisplay += healths - pull_icon = new /atom/movable/screen/pull() + pull_icon = new /atom/movable/screen/pull(src) pull_icon.icon = ui_style - pull_icon.update_icon(mymob) + pull_icon.update_appearance(UPDATE_ICON) pull_icon.screen_loc = ui_above_movement static_inventory += pull_icon - zone_select = new /atom/movable/screen/zone_sel() + zone_select = new /atom/movable/screen/zone_sel(src) zone_select.icon = ui_style - zone_select.update_icon(mymob) + zone_select.update_appearance(UPDATE_ICON) static_inventory += zone_select mymob.client.screen = list() - using = new /atom/movable/screen/resist() + using = new /atom/movable/screen/resist(src) using.icon = ui_style using.screen_loc = ui_above_intent hotkeybuttons += using @@ -103,7 +103,7 @@ if(inv.slot_id) inv.hud = src inv_slots[TOBITSHIFT(inv.slot_id) + 1] = inv - inv.update_icon() + inv.update_appearance(UPDATE_ICON) /datum/hud/monkey/persistent_inventory_update() if(!mymob) diff --git a/code/_onclick/hud/pai.dm b/code/_onclick/hud/pai.dm index 8a1fd1cbe2c0..265bbd1f5723 100644 --- a/code/_onclick/hud/pai.dm +++ b/code/_onclick/hud/pai.dm @@ -173,77 +173,77 @@ var/atom/movable/screen/using // Software menu - using = new /atom/movable/screen/pai/software + using = new /atom/movable/screen/pai/software(src) using.screen_loc = ui_pai_software static_inventory += using // Holoform - using = new /atom/movable/screen/pai/shell + using = new /atom/movable/screen/pai/shell(src) using.screen_loc = ui_pai_shell static_inventory += using // Chassis Select Menu - using = new /atom/movable/screen/pai/chassis + using = new /atom/movable/screen/pai/chassis(src) using.screen_loc = ui_pai_chassis static_inventory += using // Rest - using = new /atom/movable/screen/pai/rest + using = new /atom/movable/screen/pai/rest(src) using.screen_loc = ui_pai_rest static_inventory += using // Integrated Light - using = new /atom/movable/screen/pai/light + using = new /atom/movable/screen/pai/light(src) using.screen_loc = ui_pai_light static_inventory += using // Newscaster - using = new /atom/movable/screen/pai/newscaster + using = new /atom/movable/screen/pai/newscaster(src) using.screen_loc = ui_pai_newscaster static_inventory += using // Language menu - using = new /atom/movable/screen/language_menu + using = new /atom/movable/screen/language_menu(src) using.screen_loc = ui_borg_language_menu static_inventory += using // Host Monitor - using = new /atom/movable/screen/pai/host_monitor() + using = new /atom/movable/screen/pai/host_monitor(src) using.screen_loc = ui_pai_host_monitor static_inventory += using // Crew Manifest - using = new /atom/movable/screen/pai/crew_manifest() + using = new /atom/movable/screen/pai/crew_manifest(src) using.screen_loc = ui_pai_crew_manifest static_inventory += using // Laws - using = new /atom/movable/screen/pai/state_laws() + using = new /atom/movable/screen/pai/state_laws(src) using.screen_loc = ui_pai_state_laws static_inventory += using // PDA message - using = new /atom/movable/screen/pai/pda_msg_send() + using = new /atom/movable/screen/pai/pda_msg_send(src) using.screen_loc = ui_pai_pda_send static_inventory += using // PDA log - using = new /atom/movable/screen/pai/pda_msg_show() + using = new /atom/movable/screen/pai/pda_msg_show(src) using.screen_loc = ui_pai_pda_log static_inventory += using // Take image - using = new /atom/movable/screen/pai/image_take() + using = new /atom/movable/screen/pai/image_take(src) using.screen_loc = ui_pai_take_picture static_inventory += using // View images - using = new /atom/movable/screen/pai/image_view() + using = new /atom/movable/screen/pai/image_view(src) using.screen_loc = ui_pai_view_images static_inventory += using // Radio - using = new /atom/movable/screen/pai/radio() + using = new /atom/movable/screen/pai/radio(src) using.screen_loc = ui_borg_radio static_inventory += using diff --git a/code/_onclick/hud/revenanthud.dm b/code/_onclick/hud/revenanthud.dm index dc801fe89871..2a64d7593385 100644 --- a/code/_onclick/hud/revenanthud.dm +++ b/code/_onclick/hud/revenanthud.dm @@ -4,12 +4,12 @@ /datum/hud/revenant/New(mob/owner) ..() - pull_icon = new /atom/movable/screen/pull() + pull_icon = new /atom/movable/screen/pull(src) pull_icon.icon = ui_style - pull_icon.update_icon() + pull_icon.update_appearance(UPDATE_ICON) pull_icon.screen_loc = ui_living_pull pull_icon.hud = src static_inventory += pull_icon - healths = new /atom/movable/screen/healths/revenant() + healths = new /atom/movable/screen/healths/revenant(src) infodisplay += healths diff --git a/code/_onclick/hud/robot.dm b/code/_onclick/hud/robot.dm index 1135d4564a9f..5e5bff505f9b 100644 --- a/code/_onclick/hud/robot.dm +++ b/code/_onclick/hud/robot.dm @@ -91,29 +91,29 @@ static_inventory += using //Radio - using = new /atom/movable/screen/robot/radio() + using = new /atom/movable/screen/robot/radio(src) using.screen_loc = ui_borg_radio static_inventory += using //Module select - using = new /atom/movable/screen/robot/module1() + using = new /atom/movable/screen/robot/module1(src) using.screen_loc = ui_inv1 static_inventory += using mymobR.inv1 = using - using = new /atom/movable/screen/robot/module2() + using = new /atom/movable/screen/robot/module2(src) using.screen_loc = ui_inv2 static_inventory += using mymobR.inv2 = using - using = new /atom/movable/screen/robot/module3() + using = new /atom/movable/screen/robot/module3(src) using.screen_loc = ui_inv3 static_inventory += using mymobR.inv3 = using //End of module select - using = new /atom/movable/screen/robot/lamp() + using = new /atom/movable/screen/robot/lamp(src) using.screen_loc = ui_borg_lamp using.hud = src static_inventory += using @@ -122,24 +122,24 @@ lampscreen.robot = mymobR //Photography stuff - using = new /atom/movable/screen/ai/image_take() + using = new /atom/movable/screen/ai/image_take(src) using.screen_loc = ui_borg_camera using.hud = src static_inventory += using //Sec/Med HUDs - using = new /atom/movable/screen/ai/sensors() + using = new /atom/movable/screen/ai/sensors(src) using.screen_loc = ui_borg_sensor static_inventory += using //Thrusters - using = new /atom/movable/screen/robot/thrusters() + using = new /atom/movable/screen/robot/thrusters(src) using.screen_loc = ui_borg_thrusters static_inventory += using mymobR.thruster_button = using //Borg Integrated Tablet - using = new /atom/movable/screen/robot/modPC() + using = new /atom/movable/screen/robot/modPC(src) using.screen_loc = ui_borg_tablet using.hud = src static_inventory += using @@ -150,32 +150,32 @@ tabletbutton.robot = mymobR //Intent - action_intent = new /atom/movable/screen/act_intent/robot() + action_intent = new /atom/movable/screen/act_intent/robot(src) action_intent.icon_state = mymob.a_intent static_inventory += action_intent //Health - healths = new /atom/movable/screen/healths/robot() + healths = new /atom/movable/screen/healths/robot(src) infodisplay += healths //Installed Module - mymobR.hands = new /atom/movable/screen/robot/module() + mymobR.hands = new /atom/movable/screen/robot/module(src) mymobR.hands.screen_loc = ui_borg_module static_inventory += mymobR.hands //Store - module_store_icon = new /atom/movable/screen/robot/store() + module_store_icon = new /atom/movable/screen/robot/store(src) module_store_icon.screen_loc = ui_borg_store - pull_icon = new /atom/movable/screen/pull() + pull_icon = new /atom/movable/screen/pull(src) pull_icon.icon = 'icons/mob/screen_cyborg.dmi' - pull_icon.update_icon(mymob) + pull_icon.update_appearance(UPDATE_ICON) pull_icon.screen_loc = ui_borg_pull hotkeybuttons += pull_icon - zone_select = new /atom/movable/screen/zone_sel/robot() - zone_select.update_icon(mymob) + zone_select = new /atom/movable/screen/zone_sel/robot(src) + zone_select.update_appearance(UPDATE_ICON) static_inventory += zone_select @@ -281,13 +281,11 @@ if(.) return robot?.toggle_headlamp() - update_icon() + update_appearance(UPDATE_ICON) -/atom/movable/screen/robot/lamp/update_icon() - if(robot?.lamp_enabled) - icon_state = "lamp_on" - else - icon_state = "lamp_off" +/atom/movable/screen/robot/lamp/update_icon_state() + icon_state = robot?.lamp_enabled ? "lamp_on" : "lamp_off" + return ..() /atom/movable/screen/robot/modPC name = "Modular Interface" diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index bb48dba1daa4..179d3cf3af04 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -15,8 +15,15 @@ speech_span = SPAN_ROBOT vis_flags = VIS_INHERIT_PLANE appearance_flags = APPEARANCE_UI - var/obj/master = null //A reference to the object in the slot. Grabs or items, generally. - var/datum/hud/hud = null // A reference to the owner HUD, if any. + /// A reference to the object in the slot. Grabs or items, generally. + var/obj/master = null + /// A reference to the owner HUD, if any. + var/datum/hud/hud = null + +/atom/movable/screen/New(datum/hud/new_hud) + . = ..() + if(istype(new_hud)) + hud = new_hud /atom/movable/screen/Destroy() master = null @@ -169,7 +176,7 @@ return inv_item.Click(location, control, params) if(usr.attack_ui(slot_id)) - usr.update_inv_hands() + usr.update_held_items() return 1 /atom/movable/screen/inventory/MouseEntered() @@ -181,7 +188,7 @@ cut_overlay(object_overlays) object_overlays.Cut() -/atom/movable/screen/inventory/update_icon() +/atom/movable/screen/inventory/update_icon_state() if(!icon_empty) icon_empty = icon_state @@ -190,6 +197,7 @@ icon_state = icon_full else icon_state = icon_empty + return ..() /atom/movable/screen/inventory/proc/add_overlays() var/mob/user = hud.mymob @@ -216,7 +224,7 @@ var/static/mutable_appearance/blocked_overlay = mutable_appearance('icons/mob/screen_gen.dmi', "blocked") var/held_index = 0 -/atom/movable/screen/inventory/hand/update_icon() +/atom/movable/screen/inventory/hand/update_overlays() . = ..() if(!handcuff_overlay) @@ -224,22 +232,20 @@ var/state = (!(held_index % 2)) ? "markus" : "gabrielle" handcuff_overlay = mutable_appearance((ui_style ? ui_style2icon(ui_style) : 'icons/mob/screen_gen.dmi'), state) - cut_overlays() - if(!hud?.mymob) return if(iscarbon(hud.mymob)) var/mob/living/carbon/C = hud.mymob if(C.handcuffed) - add_overlay(handcuff_overlay) + . += handcuff_overlay if(held_index) if(!C.has_hand_for_held_index(held_index)) - add_overlay(blocked_overlay) + . += blocked_overlay if(held_index == hud.mymob.active_hand_index) - add_overlay((held_index % 2) ? "lhandactive" : "rhandactive") + . += (held_index % 2) ? "lhandactive" : "rhandactive" /atom/movable/screen/inventory/hand/Click(location, control, params) @@ -329,16 +335,13 @@ /atom/movable/screen/mov_intent/Click() toggle(usr) -/atom/movable/screen/mov_intent/update_icon(mob/user) - if(!user && hud) - user = hud.mymob - if(!user) - return - switch(user.m_intent) +/atom/movable/screen/mov_intent/update_icon_state() + switch(hud?.mymob?.m_intent) if(MOVE_INTENT_WALK) icon_state = "walking" if(MOVE_INTENT_RUN) icon_state = "running" + return ..() /atom/movable/screen/mov_intent/proc/toggle(mob/user) if(isobserver(user)) @@ -349,19 +352,16 @@ name = "stop pulling" icon = 'icons/mob/screen_midnight.dmi' icon_state = "pull" + base_icon_state = "pull" /atom/movable/screen/pull/Click() if(isobserver(usr)) return usr.stop_pulling() -/atom/movable/screen/pull/update_icon(mob/mymob) - if(!mymob) - return - if(mymob.pulling) - icon_state = "pull" - else - icon_state = "pull0" +/atom/movable/screen/pull/update_icon_state() + icon_state = "[base_icon_state][hud?.mymob?.pulling ? null : 0]" + return ..() /atom/movable/screen/resist name = "resist" @@ -379,6 +379,7 @@ name = "rest" icon = 'icons/mob/screen_midnight.dmi' icon_state = "act_rest" + base_icon_state = "act_rest" layer = HUD_LAYER plane = HUD_PLANE @@ -387,14 +388,12 @@ var/mob/living/L = usr L.lay_down() -/atom/movable/screen/rest/update_icon(mob/mymob) - if(!isliving(mymob)) - return - var/mob/living/L = mymob - if(!L.resting) - icon_state = "act_rest" - else - icon_state = "act_rest0" +/atom/movable/screen/rest/update_icon_state() + var/mob/living/user = hud?.mymob + if(!istype(user)) + return ..() + icon_state = "[base_icon_state][user.resting ? 0 : null]" + return ..() /atom/movable/screen/storage name = "storage" @@ -434,7 +433,7 @@ name = "damage zone" icon_state = "zone_sel" screen_loc = ui_zonesel - var/selecting = BODY_ZONE_CHEST + var/overlay_icon = 'icons/mob/screen_gen.dmi' var/static/list/hover_overlays_cache = list() var/hovering @@ -452,6 +451,7 @@ return set_selected_zone(choice, usr) /atom/movable/screen/zone_sel/MouseEntered(location, control, params) + . = ..() MouseMove(location, control, params) /atom/movable/screen/zone_sel/MouseMove(location, control, params) @@ -527,31 +527,31 @@ return BODY_ZONE_HEAD /atom/movable/screen/zone_sel/proc/set_selected_zone(choice, mob/user) - if(isobserver(user)) + if(user != hud?.mymob) return - if(choice != selecting) - selecting = choice - update_icon(usr) - return 1 + if(choice != hud.mymob.zone_selected) +// if(should_log) +// hud.mymob.log_manual_zone_selected_update("screen_hud", new_target = choice) + hud.mymob.zone_selected = choice + update_appearance() + SEND_SIGNAL(user, COMSIG_MOB_SELECTED_ZONE_SET, choice) -/atom/movable/screen/zone_sel/update_icon(mob/user) - cut_overlays() - add_overlay(mutable_appearance('icons/mob/screen_gen.dmi', "[selecting]")) - user.zone_selected = selecting + return TRUE + +/atom/movable/screen/zone_sel/update_overlays() + . = ..() + if(!hud?.mymob) + return + . += mutable_appearance(overlay_icon, "[hud.mymob.zone_selected]") /atom/movable/screen/zone_sel/alien icon = 'icons/mob/screen_alien.dmi' - -/atom/movable/screen/zone_sel/alien/update_icon(mob/user) - cut_overlays() - add_overlay(mutable_appearance('icons/mob/screen_alien.dmi', "[selecting]")) - user.zone_selected = selecting + overlay_icon = 'icons/mob/screen_alien.dmi' /atom/movable/screen/zone_sel/robot icon = 'icons/mob/screen_cyborg.dmi' - /atom/movable/screen/flash name = "flash" icon_state = "blank" diff --git a/code/_onclick/hud/slime.dm b/code/_onclick/hud/slime.dm index 20b72312db97..e4f0bf0a2ed2 100644 --- a/code/_onclick/hud/slime.dm +++ b/code/_onclick/hud/slime.dm @@ -4,13 +4,13 @@ /datum/hud/slime/New(mob/living/simple_animal/slime/owner) ..() - pull_icon = new /atom/movable/screen/pull() + pull_icon = new /atom/movable/screen/pull(src) pull_icon.icon = ui_style - pull_icon.update_icon() + pull_icon.update_appearance(UPDATE_ICON) pull_icon.screen_loc = ui_living_pull pull_icon.hud = src static_inventory += pull_icon - healths = new /atom/movable/screen/healths/slime() + healths = new /atom/movable/screen/healths/slime(src) infodisplay += healths diff --git a/code/_onclick/hud/swarmer.dm b/code/_onclick/hud/swarmer.dm index 328053720ccf..44d09c3e5692 100644 --- a/code/_onclick/hud/swarmer.dm +++ b/code/_onclick/hud/swarmer.dm @@ -72,32 +72,32 @@ . = ..() var/atom/movable/screen/using - using = new /atom/movable/screen/swarmer/fabricate_trap() + using = new /atom/movable/screen/swarmer/fabricate_trap(src) using.screen_loc = ui_hand_position(2) using.hud = src static_inventory += using - using = new /atom/movable/screen/swarmer/barricade() + using = new /atom/movable/screen/swarmer/barricade(src) using.screen_loc = ui_hand_position(1) using.hud = src static_inventory += using - using = new /atom/movable/screen/swarmer/replicate() + using = new /atom/movable/screen/swarmer/replicate(src) using.screen_loc = ui_zonesel using.hud = src static_inventory += using - using = new /atom/movable/screen/swarmer/repair_self() + using = new /atom/movable/screen/swarmer/repair_self(src) using.screen_loc = ui_storage1 using.hud = src static_inventory += using - using = new /atom/movable/screen/swarmer/toggle_light() + using = new /atom/movable/screen/swarmer/toggle_light(src) using.screen_loc = ui_back using.hud = src static_inventory += using - using = new /atom/movable/screen/swarmer/contact_swarmers() + using = new /atom/movable/screen/swarmer/contact_swarmers(src) using.screen_loc = ui_inventory using.hud = src static_inventory += using diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm index 45aa05ea2801..9844aa44b39f 100644 --- a/code/_onclick/other_mobs.dm +++ b/code/_onclick/other_mobs.dm @@ -234,7 +234,7 @@ return ..() if(!ismob(A)) A.attack_hand(src) - update_inv_hands() + update_held_items() /* diff --git a/code/_onclick/telekinesis.dm b/code/_onclick/telekinesis.dm index c622cefd7656..26489fe5537f 100644 --- a/code/_onclick/telekinesis.dm +++ b/code/_onclick/telekinesis.dm @@ -92,7 +92,7 @@ /obj/item/tk_grab/process() if(check_if_focusable(focus)) //if somebody grabs your thing, no waiting for them to put it down and hitting them again. - update_icon() + update_appearance(UPDATE_ICON) /obj/item/tk_grab/dropped(mob/user) if(focus && user && loc != user && loc != user.loc) // drop_item() gets called when you tk-attack a table/closet with an item @@ -120,7 +120,7 @@ qdel(src) return focus.attack_self_tk(user) - update_icon() + update_appearance(UPDATE_ICON) /obj/item/tk_grab/afterattack(atom/target, mob/living/carbon/user, proximity, params)//TODO: go over this . = ..() @@ -135,7 +135,7 @@ if(target == focus) target.attack_self_tk(user) - update_icon() + update_appearance(UPDATE_ICON) return @@ -149,7 +149,7 @@ apply_focus_overlay() focus.throw_at(target, 10, 1,user) user.changeNext_move(CLICK_CD_MELEE) - update_icon() + update_appearance(UPDATE_ICON) /proc/tkMaxRangeCheck(mob/user, atom/target) var/d = get_dist(user, target) @@ -165,7 +165,7 @@ if(!check_if_focusable(target)) return focus = target - update_icon() + update_appearance(UPDATE_ICON) apply_focus_overlay() return TRUE @@ -183,16 +183,15 @@ return new /obj/effect/temp_visual/telekinesis(get_turf(focus)) -/obj/item/tk_grab/update_icon() - cut_overlays() - if(focus) - var/old_layer = focus.layer - var/old_plane = focus.plane - focus.layer = layer+0.01 - focus.plane = ABOVE_HUD_PLANE - add_overlay(focus) //this is kind of ick, but it's better than using icon() - focus.layer = old_layer - focus.plane = old_plane +/obj/item/tk_grab/update_overlays() + . = ..() + if(!focus) + return + + var/mutable_appearance/focus_overlay = new(focus) + focus_overlay.layer = layer + 0.01 + focus_overlay.plane = ABOVE_HUD_PLANE + . += focus_overlay /obj/item/tk_grab/suicide_act(mob/user) user.visible_message(span_suicide("[user] is using [user.p_their()] telekinesis to choke [user.p_them()]self! It looks like [user.p_theyre()] trying to commit suicide!")) diff --git a/code/controllers/subsystem/air.dm b/code/controllers/subsystem/air.dm index 8e1ddea754c4..7f014fe3be49 100644 --- a/code/controllers/subsystem/air.dm +++ b/code/controllers/subsystem/air.dm @@ -354,24 +354,24 @@ SUBSYSTEM_DEF(air) /datum/controller/subsystem/air/proc/setup_allturfs() var/list/active_turfs = src.active_turfs - var/times_fired = ++src.times_fired + times_fired++ // Clear active turfs - faster than removing every single turf in the world // one-by-one, and Initalize_Atmos only ever adds `src` back in. active_turfs.Cut() - for(var/thing in ALL_TURFS()) - var/turf/T = thing - if (T.blocks_air) + for(var/turf/setup as anything in ALL_TURFS()) + if (setup.blocks_air) continue - T.Initalize_Atmos(times_fired) + setup.Initalize_Atmos(times_fired) CHECK_TICK if(active_turfs.len) var/starting_ats = active_turfs.len sleep(world.tick_lag) var/timer = world.timeofday - log_mapping("There are [starting_ats] active turfs at roundstart caused by a difference of the air between the adjacent turfs. You can see its coordinates using \"Mapping -> Show roundstart AT list\" verb (debug verbs required).") + log_mapping("There are [starting_ats] active turfs at roundstart caused by a difference of the air between the adjacent turfs. \ + You can see its coordinates using \"Mapping -> Show roundstart AT list\" verb (debug verbs required).") for(var/turf/T in active_turfs) GLOB.active_turfs_startlist += T diff --git a/code/controllers/subsystem/communications.dm b/code/controllers/subsystem/communications.dm index 6640a08155e5..616572e33999 100644 --- a/code/controllers/subsystem/communications.dm +++ b/code/controllers/subsystem/communications.dm @@ -48,7 +48,7 @@ SUBSYSTEM_DEF(communications) var/obj/item/paper/P = new /obj/item/paper(C.loc) P.name = "paper - '[sending.title]'" P.info = sending.content - P.update_icon() + P.update_appearance(UPDATE_ICON) #undef COMMUNICATION_COOLDOWN #undef COMMUNICATION_COOLDOWN_AI diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm index b8b3396a129c..2fe87a4d8e97 100644 --- a/code/controllers/subsystem/mapping.dm +++ b/code/controllers/subsystem/mapping.dm @@ -220,7 +220,7 @@ SUBSYSTEM_DEF(mapping) for(var/N in nuke_tiles) var/turf/open/floor/circuit/C = N - C.update_icon() + C.update_appearance(UPDATE_ICON) /datum/controller/subsystem/mapping/Recover() flags |= SS_NO_INIT diff --git a/code/controllers/subsystem/persistence.dm b/code/controllers/subsystem/persistence.dm index ed5e8892ee4a..b6cc26769c3a 100644 --- a/code/controllers/subsystem/persistence.dm +++ b/code/controllers/subsystem/persistence.dm @@ -141,7 +141,7 @@ SUBSYSTEM_DEF(persistence) T.showpiece = new /obj/item/showpiece_dummy(T, path) T.trophy_message = chosen_trophy["message"] T.placer_key = chosen_trophy["placer_key"] - T.update_icon() + T.update_appearance(updates = ALL) /datum/controller/subsystem/persistence/proc/CollectData() CollectChiselMessages() diff --git a/code/datums/actions/action.dm b/code/datums/actions/action.dm index 555e769039f4..8a911901d5bb 100644 --- a/code/datums/actions/action.dm +++ b/code/datums/actions/action.dm @@ -364,14 +364,14 @@ var/update_flag = ALL var/forced = TRUE -// if(updates & UPDATE_ICON_STATE) -// update_flag |= UPDATE_BUTTON_ICON -// forced = TRUE -// if(updates & UPDATE_OVERLAYS) -// update_flag |= UPDATE_BUTTON_OVERLAY -// forced = TRUE -// if(updates & (UPDATE_NAME|UPDATE_DESC)) -// update_flag |= UPDATE_BUTTON_NAME + if(updates & UPDATE_ICON_STATE) + update_flag |= UPDATE_BUTTON_ICON + forced = TRUE + if(updates & UPDATE_OVERLAYS) + update_flag |= UPDATE_BUTTON_OVERLAY + forced = TRUE + if(updates & (UPDATE_NAME|UPDATE_DESC)) + update_flag |= UPDATE_BUTTON_NAME // Status is not relevant, and background is not relevant. Neither will change // Force the update if an icon state or overlay change was done diff --git a/code/datums/components/acid.dm b/code/datums/components/acid.dm index 35709d6bb4bc..cd834f591594 100644 --- a/code/datums/components/acid.dm +++ b/code/datums/components/acid.dm @@ -45,7 +45,7 @@ set_volume(_acid_volume) var/atom/parent_atom = parent RegisterSignal(parent, COMSIG_ATOM_UPDATE_OVERLAYS, PROC_REF(on_update_overlays)) - parent_atom.update_icon() + parent_atom.update_appearance(updates = ALL) sizzle = new(list(parent), TRUE) START_PROCESSING(SSacid, src) /datum/component/acid/Destroy(force, silent) @@ -57,7 +57,7 @@ UnregisterSignal(parent, COMSIG_ATOM_UPDATE_OVERLAYS) if(parent && !QDELING(parent)) var/atom/parent_atom = parent - parent_atom.update_icon() + parent_atom.update_appearance(updates = ALL) return ..() /datum/component/acid/RegisterWithParent() RegisterSignal(parent, COMSIG_PARENT_EXAMINE, PROC_REF(on_examine)) diff --git a/code/datums/components/armor_plate.dm b/code/datums/components/armor_plate.dm index 0b44926ed9bf..c6e78ac3298c 100644 --- a/code/datums/components/armor_plate.dm +++ b/code/datums/components/armor_plate.dm @@ -66,7 +66,7 @@ if(ismecha(O)) var/obj/mecha/R = O - R.update_icon() + R.update_appearance(updates = ALL) to_chat(user, span_info("You strengthen [R], improving its resistance against melee, bullet and laser damage.")) else to_chat(user, span_info("You strengthen [O], improving its resistance against melee attacks.")) diff --git a/code/datums/components/crafting/crafting.dm b/code/datums/components/crafting/crafting.dm index 12de02741fb7..3d1944b297c0 100644 --- a/code/datums/components/crafting/crafting.dm +++ b/code/datums/components/crafting/crafting.dm @@ -257,6 +257,7 @@ RG.volume -= amt data = RG.data RC.reagents.conditional_update(RC) + RC.update_appearance(UPDATE_ICON) RG = locate(RG.type) in Deletion RG.volume = amt RG.data += data @@ -266,6 +267,7 @@ amt -= RG.volume RC.reagents.reagent_list -= RG RC.reagents.conditional_update(RC) + RC.update_appearance(UPDATE_ICON) RGNT = locate(RG.type) in Deletion RGNT.volume += RG.volume RGNT.data += RG.data diff --git a/code/datums/components/grillable.dm b/code/datums/components/grillable.dm index 9ff014753aa7..19227596f879 100644 --- a/code/datums/components/grillable.dm +++ b/code/datums/components/grillable.dm @@ -45,8 +45,8 @@ RegisterSignal(parent, COMSIG_MOVABLE_MOVED, PROC_REF(OnMoved),TRUE) AddGrilledItemOverlay(parent) - //var/atom/A = parent - //A.update_icon() + var/atom/A = parent + A.update_appearance(updates = ALL) ///Ran when an object finished grilling /datum/component/grillable/proc/FinishGrilling(atom/grill_source) @@ -78,11 +78,11 @@ ///Ran when an object moves from the grill /datum/component/grillable/proc/OnMoved(atom/A, atom/OldLoc, Dir, Forced) currently_grilling = FALSE - var/obj/O = parent; + var/obj/O = parent O.cut_overlays() - //UnregisterSignal(parent, COMSIG_ATOM_UPDATE_OVERLAYS) + UnregisterSignal(parent, COMSIG_ATOM_UPDATE_OVERLAYS) UnregisterSignal(parent, COMSIG_MOVABLE_MOVED) - //A.update_icon() + A.update_appearance(updates = ALL) /datum/component/grillable/proc/AddGrilledItemOverlay(obj/source) diff --git a/code/datums/components/storage/concrete/_concrete.dm b/code/datums/components/storage/concrete/_concrete.dm index 55d33addeb18..507f24292d0b 100644 --- a/code/datums/components/storage/concrete/_concrete.dm +++ b/code/datums/components/storage/concrete/_concrete.dm @@ -140,7 +140,7 @@ SEND_SIGNAL(parent, COMSIG_STORAGE_REMOVED, AM, new_location) if(isobj(parent)) var/obj/O = parent - O.update_icon() + O.update_appearance() return TRUE /datum/component/storage/concrete/proc/slave_can_insert_object(datum/component/storage/slave, obj/item/I, stop_messages = FALSE, mob/M) @@ -191,13 +191,12 @@ if(!prevent_warning) mob_item_insertion_feedback(usr, M, I) SEND_SIGNAL(parent, COMSIG_STORAGE_INSERTED, I, M) - update_icon() + update_icons() return TRUE -/datum/component/storage/concrete/update_icon() +/datum/component/storage/concrete/update_icons() if(isobj(parent)) var/obj/O = parent - O.update_icon() - for(var/i in slaves) - var/datum/component/storage/slave = i - slave.update_icon() + O.update_appearance() + for(var/datum/component/storage/slave as anything in slaves) + slave.update_icons() diff --git a/code/datums/components/storage/storage.dm b/code/datums/components/storage/storage.dm index 14dbd5abd8d9..1eac549f30dc 100644 --- a/code/datums/components/storage/storage.dm +++ b/code/datums/components/storage/storage.dm @@ -688,10 +688,10 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) else if(I && I.w_class >= 3) //Otherwise they can only see large or normal items from a distance... viewing.show_message(span_notice("[M] puts [I] [insert_preposition]to [parent]."), MSG_VISUAL) -/datum/component/storage/proc/update_icon() +/datum/component/storage/proc/update_icons() if(isobj(parent)) var/obj/O = parent - O.update_icon() + O.update_appearance() /datum/component/storage/proc/signal_insertion_attempt(datum/source, obj/item/I, mob/M, silent = FALSE, force = FALSE) if((!force && !can_be_inserted(I, TRUE, M)) || (I == parent)) diff --git a/code/datums/diseases/appendicitis.dm b/code/datums/diseases/appendicitis.dm index 3384f42520dd..1f0fc97e3ba1 100644 --- a/code/datums/diseases/appendicitis.dm +++ b/code/datums/diseases/appendicitis.dm @@ -25,7 +25,7 @@ var/obj/item/organ/appendix/A = affected_mob.getorgan(/obj/item/organ/appendix) if(A) A.inflamed = 1 - A.update_icon() + A.update_appearance(updates = ALL) if(prob(3)) to_chat(affected_mob, span_warning("You feel a stabbing pain in your abdomen!")) affected_mob.adjustOrganLoss(ORGAN_SLOT_APPENDIX, 5) diff --git a/code/datums/elements/update_icon_blocker.dm b/code/datums/elements/update_icon_blocker.dm new file mode 100644 index 000000000000..e921b6e472f4 --- /dev/null +++ b/code/datums/elements/update_icon_blocker.dm @@ -0,0 +1,18 @@ +/// Prevents calling anything in update_appearance(updates = ALL) like update_icon_state() or update_overlays() +/datum/element/update_icon_blocker + +/datum/element/update_icon_blocker/Attach(datum/target) + . = ..() + if(!isatom(target)) + return ELEMENT_INCOMPATIBLE + + RegisterSignal(target, COMSIG_ATOM_UPDATE_ICON, PROC_REF(block_update_icon)) + +/datum/element/update_icon_blocker/Detach(datum/source, ...) + UnregisterSignal(source, COMSIG_ATOM_UPDATE_ICON) + return ..() + +/datum/element/update_icon_blocker/proc/block_update_icon() + SIGNAL_HANDLER + + return COMSIG_ATOM_NO_UPDATE_ICON_STATE | COMSIG_ATOM_NO_UPDATE_OVERLAYS diff --git a/code/datums/martial/sleeping_carp.dm b/code/datums/martial/sleeping_carp.dm index 0f303e307b86..25e957c32f44 100644 --- a/code/datums/martial/sleeping_carp.dm +++ b/code/datums/martial/sleeping_carp.dm @@ -181,9 +181,9 @@ righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi' block_chance = 50 -/obj/item/twohanded/bostaff/update_icon() +/obj/item/twohanded/bostaff/update_icon_state() icon_state = "bostaff[wielded]" - return + return ..() /obj/item/twohanded/bostaff/attack(mob/target, mob/living/user) add_fingerprint(user) diff --git a/code/datums/status_effects/debuffs/debuffs.dm b/code/datums/status_effects/debuffs/debuffs.dm index c8d6e3884832..091d2eb94f04 100644 --- a/code/datums/status_effects/debuffs/debuffs.dm +++ b/code/datums/status_effects/debuffs/debuffs.dm @@ -1087,7 +1087,7 @@ /datum/status_effect/eldritch/on_apply() if(owner.mob_size >= MOB_SIZE_HUMAN) owner.underlays |= marked_underlay - //owner.update_icon() + owner.update_appearance(updates = ALL) return TRUE return FALSE @@ -1235,7 +1235,7 @@ /datum/status_effect/cloudstruck/on_apply() mob_overlay = mutable_appearance('icons/effects/eldritch.dmi', "cloud_swirl", ABOVE_MOB_LAYER) owner.overlays += mob_overlay - //owner.update_icon() + owner.update_appearance(updates = ALL) ADD_TRAIT(owner, TRAIT_BLIND, "cloudstruck") return TRUE @@ -1246,7 +1246,7 @@ REMOVE_TRAIT(owner, TRAIT_BLIND, "cloudstruck") if(owner) owner.overlays -= mob_overlay - //owner.update_icon() + owner.update_appearance(updates = ALL) /datum/status_effect/cloudstruck/Destroy() . = ..() diff --git a/code/datums/wires/airalarm.dm b/code/datums/wires/airalarm.dm index f6c166c59676..ab31a42ce460 100644 --- a/code/datums/wires/airalarm.dm +++ b/code/datums/wires/airalarm.dm @@ -30,7 +30,7 @@ if(WIRE_POWER) // Short out for a long time. if(!A.shorted) A.shorted = TRUE - A.update_icon() + A.update_appearance(updates = ALL) addtimer(CALLBACK(A, TYPE_PROC_REF(/obj/machinery/airalarm, reset), wire), 1200) if(WIRE_IDSCAN) // Toggle lock. A.locked = !A.locked @@ -49,7 +49,7 @@ var/area/AA = get_area(A) if(AA.atmosalert(0, holder)) A.post_alert(0) - A.update_icon() + A.update_appearance(updates = ALL) /datum/wires/airalarm/on_cut(wire, mend) var/obj/machinery/airalarm/A = holder @@ -57,7 +57,7 @@ if(WIRE_POWER) // Short out forever. A.shock(usr, 50) A.shorted = !mend - A.update_icon() + A.update_appearance(updates = ALL) if(WIRE_IDSCAN) if(!mend) A.locked = TRUE @@ -71,4 +71,4 @@ var/area/AA = get_area(A) if(AA.atmosalert(2, holder)) A.post_alert(2) - A.update_icon() + A.update_appearance(updates = ALL) diff --git a/code/datums/wires/airlock.dm b/code/datums/wires/airlock.dm index 09f3a4f5d260..60bcb6c0c10e 100644 --- a/code/datums/wires/airlock.dm +++ b/code/datums/wires/airlock.dm @@ -104,13 +104,13 @@ else if(A.hasPower()) A.unbolt() - A.update_icon() + A.update_appearance(updates = ALL) if(WIRE_IDSCAN) // Pulse to disable emergency access and flash red lights. if(A.hasPower() && A.density) A.do_animate("deny") if(A.emergency) A.emergency = FALSE - A.update_icon() + A.update_appearance(updates = ALL) if(WIRE_AI) // Pulse to disable WIRE_AI control for 10 ticks (follows same rules as cutting). if(A.aiControlDisabled == AI_WIRE_NORMAL) A.aiControlDisabled = AI_WIRE_DISABLED @@ -129,7 +129,7 @@ A.normalspeed = !A.normalspeed if(WIRE_LIGHT) A.lights = !A.lights - A.update_icon() + A.update_appearance(updates = ALL) /obj/machinery/door/airlock/proc/reset_ai_wire() if(aiControlDisabled == AI_WIRE_DISABLED) @@ -188,7 +188,7 @@ A.close() if(WIRE_LIGHT) // Cut to disable lights, mend to re-enable. A.lights = mend - A.update_icon() + A.update_appearance(updates = ALL) if(WIRE_ZAP1, WIRE_ZAP2) // Ouch. if(usr) A.shock(usr, 50) diff --git a/code/datums/wires/airlock_cycle.dm b/code/datums/wires/airlock_cycle.dm index fdd9f08b67a7..b49b733eaa1c 100644 --- a/code/datums/wires/airlock_cycle.dm +++ b/code/datums/wires/airlock_cycle.dm @@ -29,7 +29,7 @@ if(WIRE_POWER) // Short out for a long time. if(!A.shorted) A.shorted = TRUE - A.update_icon() + A.update_appearance(updates = ALL) addtimer(CALLBACK(A, TYPE_PROC_REF(/obj/machinery/advanced_airlock_controller, reset), wire), 1200) if(WIRE_IDSCAN) // Toggle lock. A.locked = !A.locked @@ -59,7 +59,7 @@ if(WIRE_POWER) // Short out forever. A.shock(usr, 50) A.shorted = !mend - A.update_icon() + A.update_appearance(updates = ALL) if(WIRE_IDSCAN) if(!mend) A.locked = TRUE diff --git a/code/datums/wires/igniter.dm b/code/datums/wires/igniter.dm index 46f7e28732af..7114aba618db 100644 --- a/code/datums/wires/igniter.dm +++ b/code/datums/wires/igniter.dm @@ -28,18 +28,18 @@ A.safety = !A.safety if(A.safety) A.on = FALSE - A.update_icon() + A.update_appearance(updates = ALL) if(WIRE_POWER) // Toggle power A.on = !A.on - A.update_icon() + A.update_appearance(updates = ALL) /datum/wires/igniter/on_cut(wire, mend) var/obj/machinery/igniter/A = holder switch(wire) if(WIRE_POWER) // Toggle power A.on = FALSE - A.update_icon() + A.update_appearance(updates = ALL) if(WIRE_SAFETY) // Stop it from being turned on A.on = FALSE A.safety = FALSE - A.update_icon() + A.update_appearance(updates = ALL) diff --git a/code/datums/wires/syndicatebomb.dm b/code/datums/wires/syndicatebomb.dm index 3c448934b589..cd42d5d049dd 100644 --- a/code/datums/wires/syndicatebomb.dm +++ b/code/datums/wires/syndicatebomb.dm @@ -50,7 +50,7 @@ if(!B.active) holder.visible_message(span_danger("[icon2html(B, viewers(holder))] You hear the bomb start ticking!")) B.activate() - B.update_icon() + B.update_appearance(updates = ALL) else if(B.delayedlittle) holder.visible_message(span_notice("[icon2html(B, viewers(holder))] Nothing happens.")) else @@ -82,7 +82,7 @@ B.active = FALSE B.delayedlittle = FALSE B.delayedbig = FALSE - B.update_icon() + B.update_appearance(updates = ALL) /datum/wires/syndicatebomb/proc/tell_admins(obj/machinery/syndicatebomb/B) if(istype(B, /obj/machinery/syndicatebomb/training)) diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index c269471969de..c6213fcf47ed 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -381,7 +381,7 @@ GLOBAL_LIST_EMPTY(teleportlocs) ModifyFiredoors(FALSE) for(var/item in firealarms) var/obj/machinery/firealarm/F = item - F.update_icon() + F.update_appearance(UPDATE_ICON) for (var/item in GLOB.alert_consoles) var/obj/machinery/computer/station_alert/a = item @@ -412,7 +412,7 @@ GLOBAL_LIST_EMPTY(teleportlocs) ModifyFiredoors(TRUE) for(var/item in firealarms) var/obj/machinery/firealarm/F = item - F.update_icon() + F.update_appearance(UPDATE_ICON) for (var/item in GLOB.silicon_mobs) var/mob/living/silicon/aiPlayer = item @@ -524,7 +524,7 @@ GLOBAL_LIST_EMPTY(teleportlocs) * Im not sure what the heck this does, somethign to do with weather being able to set icon * states on areas?? where the heck would that even display? */ -/area/update_icon() +/area/update_icon_state() var/weather_icon for(var/V in SSweather.processing) var/datum/weather/W = V @@ -533,13 +533,14 @@ GLOBAL_LIST_EMPTY(teleportlocs) weather_icon = TRUE if(!weather_icon) icon_state = null + return ..() /** * Update the icon of the area (overridden to always be null for space */ -/area/space/update_icon() +/area/space/update_icon_state() icon_state = null - + return ..() /** * Returns int 1 or 0 if the area has power for the given channel @@ -577,7 +578,7 @@ GLOBAL_LIST_EMPTY(teleportlocs) /area/proc/power_change() for(var/obj/machinery/M in src) // for each machine in the area M.power_change() // reverify power status (to update icons etc.) - update_icon() + update_appearance(UPDATE_ICON) /** * Return the usage of power per channel diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 6e828d26c9bc..ab311c6ad9fd 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -49,6 +49,8 @@ ///vis overlays managed by SSvis_overlays to automaticaly turn them like other overlays var/list/managed_vis_overlays + ///overlays managed by [update_overlays][/atom/proc/update_overlays] to prevent removing overlays that weren't added by the same proc. Single items are stored on their own, not in a list. + var/list/managed_overlays ///Proximity monitor associated with this atom var/datum/proximity_monitor/proximity_monitor @@ -86,6 +88,9 @@ var/base_pixel_x = 0 ///Default pixel y shifting for the atom's icon. var/base_pixel_y = 0 + ///Used for changing icon states for different base sprites. + var/base_icon_state + ///Mobs that are currently do_after'ing this atom, to be cleared from on Destroy() var/list/targeted_by @@ -366,8 +371,7 @@ /atom/proc/return_air() if(loc) return loc.return_air() - else - return null + return null /atom/proc/return_analyzable_air() return null @@ -544,8 +548,99 @@ if(!LAZYLEN(.)) // lol ..length return FALSE -/atom/proc/update_icon() - return +/** + * Updates the appearence of the icon + * + * Mostly delegates to update_name, update_desc, and update_icon + * + * Arguments: + * - updates: A set of bitflags dictating what should be updated. Defaults to [ALL] + */ +/atom/proc/update_appearance(updates=ALL) + SHOULD_NOT_SLEEP(TRUE) + SHOULD_CALL_PARENT(TRUE) + + . = NONE + updates &= ~SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_APPEARANCE, updates) + if(updates & UPDATE_NAME) + . |= update_name(updates) + if(updates & UPDATE_DESC) + . |= update_desc(updates) + if(updates & UPDATE_ICON) + . |= update_icon(updates) + +/// Updates the name of the atom +/atom/proc/update_name(updates=ALL) + SHOULD_CALL_PARENT(TRUE) + return SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_NAME, updates) + +/// Updates the description of the atom +/atom/proc/update_desc(updates=ALL) + SHOULD_CALL_PARENT(TRUE) + return SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_DESC, updates) + +/// Updates the icon of the atom +/atom/proc/update_icon(updates=ALL) + SIGNAL_HANDLER + SHOULD_CALL_PARENT(TRUE) + + . = NONE + updates &= ~SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_ICON, updates) + if(updates & UPDATE_ICON_STATE) + update_icon_state() + . |= UPDATE_ICON_STATE + + if(updates & UPDATE_OVERLAYS) + if(LAZYLEN(managed_vis_overlays)) + SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays) + + var/list/new_overlays = update_overlays(updates) + if (managed_overlays) + if (length(overlays) == (islist(managed_overlays) ? length(managed_overlays) : 1)) + overlays = null + POST_OVERLAY_CHANGE(src) + else + cut_overlay(managed_overlays) + managed_overlays = null + if(length(new_overlays)) + if (length(new_overlays) == 1) + managed_overlays = new_overlays[1] + else + managed_overlays = new_overlays + add_overlay(new_overlays) + . |= UPDATE_OVERLAYS + + . |= SEND_SIGNAL(src, COMSIG_ATOM_UPDATED_ICON, updates, .) + +/// Updates the icon state of the atom +/atom/proc/update_icon_state() + SHOULD_CALL_PARENT(TRUE) + return SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_ICON_STATE) + +/// Updates the overlays of the atom +/atom/proc/update_overlays() + SHOULD_CALL_PARENT(TRUE) + . = list() + SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_OVERLAYS, .) + +/** + * Checks the atom's loc and calls update_held_items on it if it is a mob. + * + * This should only be used in situations when you are unable to use /datum/element/update_icon_updates_onmob for whatever reason. + * Check code/datums/elements/update_icon_updates_onmob.dm before using this. Adding that to the atom and calling update_appearance will work for most cases. + * + * Arguments: + * * mob/target - The mob to update the icons of. Optional argument, use if the atom's loc is not the mob you want to update. + */ +/atom/proc/update_inhand_icon(mob/target = loc) + SHOULD_CALL_PARENT(TRUE) + if(!istype(target)) + return + + target.update_held_items() + + SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_INHAND_ICON, target) + /** * An atom we are buckled or is contained within us has tried to move * diff --git a/code/game/gamemodes/clock_cult/clock_cult.dm b/code/game/gamemodes/clock_cult/clock_cult.dm index 2a1f65a8f938..742bdace5bb5 100644 --- a/code/game/gamemodes/clock_cult/clock_cult.dm +++ b/code/game/gamemodes/clock_cult/clock_cult.dm @@ -308,7 +308,7 @@ Credit where due: H.equip_to_slot_if_possible(PDA, ITEM_SLOT_ID) PDA.update_label() - PDA.update_icon() + PDA.update_appearance(updates = ALL) PDA.update_filters() if(plasmaman && !visualsOnly) //If we need to breathe from the plasma tank, we should probably start doing that diff --git a/code/game/gamemodes/clown_ops/bananium_bomb.dm b/code/game/gamemodes/clown_ops/bananium_bomb.dm index 5101251b0aec..13106b020650 100644 --- a/code/game/gamemodes/clown_ops/bananium_bomb.dm +++ b/code/game/gamemodes/clown_ops/bananium_bomb.dm @@ -4,7 +4,8 @@ icon = 'icons/obj/machines/nuke.dmi' icon_state = "bananiumbomb_base" -/obj/machinery/nuclearbomb/syndicate/bananium/update_icon() +/obj/machinery/nuclearbomb/syndicate/bananium/update_appearance(updates = ALL) + . = ..() if(deconstruction_state == NUKESTATE_INTACT) switch(get_nuke_state()) if(NUKE_OFF_LOCKED, NUKE_OFF_UNLOCKED) diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index 0178bbce4697..a9cee3fe5fec 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -189,7 +189,7 @@ return //We're done here else B.current_fullness++ - B.update_icon() + B.update_appearance(updates = ALL) addtimer(CALLBACK(src, PROC_REF(increase_bloodstone_power)), 30 SECONDS) /datum/game_mode/proc/create_anchor_bloodstone() diff --git a/code/game/gamemodes/events.dm b/code/game/gamemodes/events.dm index 4503462051ec..cf30df00a4ad 100644 --- a/code/game/gamemodes/events.dm +++ b/code/game/gamemodes/events.dm @@ -6,7 +6,7 @@ S.charge = 0 S.output_level = 0 S.output_attempt = FALSE - S.update_icon() + S.update_appearance(updates = ALL) S.power_change() for(var/area/A in GLOB.the_station_areas) @@ -41,7 +41,7 @@ S.charge = S.capacity S.output_level = S.output_level_max S.output_attempt = TRUE - S.update_icon() + S.update_appearance(updates = ALL) S.power_change() for(var/area/A in GLOB.the_station_areas) if(!A.requires_power || A.always_unpowered) @@ -61,6 +61,6 @@ S.charge = S.capacity S.output_level = S.output_level_max S.output_attempt = TRUE - S.update_icon() + S.update_appearance(updates = ALL) S.power_change() diff --git a/code/game/golf/golf.dm b/code/game/golf/golf.dm index 1cd8f3aa189e..4218c7d8c8b5 100644 --- a/code/game/golf/golf.dm +++ b/code/game/golf/golf.dm @@ -39,7 +39,7 @@ golfball.loc = src visible_message(span_notice("The golfball lands in [src].")) - update_icon() + update_appearance(updates = ALL) else visible_message(span_notice("The golfball bounces out of [src]!")) return FALSE diff --git a/code/game/machinery/PDApainter.dm b/code/game/machinery/PDApainter.dm index d195ef17ae52..c0580497ce8e 100644 --- a/code/game/machinery/PDApainter.dm +++ b/code/game/machinery/PDApainter.dm @@ -3,28 +3,28 @@ desc = "A PDA painting machine. To use, simply insert your PDA and choose the desired preset paint scheme." icon = 'icons/obj/pda.dmi' icon_state = "pdapainter" + base_icon_state = "pdapainter" density = TRUE max_integrity = 200 var/obj/item/pda/storedpda = null var/list/colorlist = list() -/obj/machinery/pdapainter/update_icon() - cut_overlays() +/obj/machinery/pdapainter/update_icon_state() + if(stat & BROKEN) + icon_state = "[base_icon_state]-broken" + return ..() + icon_state = "[base_icon_state][powered() ? null : "-off"]" + return ..() + +/obj/machinery/pdapainter/update_overlays() + . = ..() if(stat & BROKEN) - icon_state = "[initial(icon_state)]-broken" return if(storedpda) - add_overlay("[initial(icon_state)]-closed") - - if(powered()) - icon_state = initial(icon_state) - else - icon_state = "[initial(icon_state)]-off" - - return + . += "[initial(icon_state)]-closed" /obj/machinery/pdapainter/Initialize(mapload) . = ..() @@ -61,7 +61,7 @@ /obj/machinery/pdapainter/handle_atom_del(atom/A) if(A == storedpda) storedpda = null - update_icon() + update_appearance(UPDATE_ICON) /obj/machinery/pdapainter/attackby(obj/item/O, mob/user, params) if(default_unfasten_wrench(user, O)) @@ -76,7 +76,7 @@ return storedpda = O O.add_fingerprint(user) - update_icon() + update_appearance(UPDATE_ICON) else if(O.tool_behaviour == TOOL_WELDER && user.a_intent != INTENT_HARM) if(stat & BROKEN) @@ -91,7 +91,7 @@ to_chat(user, span_notice("You repair [src].")) stat &= ~BROKEN obj_integrity = max_integrity - update_icon() + update_appearance(UPDATE_ICON) else to_chat(user, span_notice("[src] does not need repairs.")) else @@ -136,6 +136,6 @@ if(storedpda) storedpda.forceMove(drop_location()) storedpda = null - update_icon() + update_appearance(UPDATE_ICON) else to_chat(usr, span_warning("[src] is empty!")) diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index b424d63e5818..d41944ec70fc 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -51,7 +51,7 @@ /obj/machinery/sleeper/Initialize(mapload) . = ..() occupant_typecache = GLOB.typecache_living - update_icon() + update_appearance(updates = ALL) /obj/machinery/sleeper/RefreshParts() var/E @@ -69,7 +69,8 @@ available_treatments |= treatments[i] stasis = (I >= 4) -/obj/machinery/sleeper/update_icon() +/obj/machinery/sleeper/update_appearance(updates = ALL) + . = ..() if(state_open) icon_state = "[initial(icon_state)]-open" else diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm index 23af50b89a50..ff99945a83b8 100644 --- a/code/game/machinery/_machinery.dm +++ b/code/game/machinery/_machinery.dm @@ -189,7 +189,7 @@ Class Procs: density = FALSE if(drop) dropContents() - update_icon() + update_appearance(updates = ALL) updateUsrDialog() /obj/machinery/proc/dropContents(list/subset = null) @@ -227,7 +227,7 @@ Class Procs: occupant = target target.forceMove(src) updateUsrDialog() - update_icon() + update_appearance(updates = ALL) /obj/machinery/proc/auto_use_power() if(!powered(power_channel)) @@ -426,7 +426,7 @@ Class Procs: if(!(stat & BROKEN) && !(flags_1 & NODECONSTRUCT_1)) stat |= BROKEN SEND_SIGNAL(src, COMSIG_MACHINERY_BROKEN, damage_flag) - update_icon() + update_appearance(updates = ALL) return TRUE return FALSE @@ -437,7 +437,7 @@ Class Procs: /obj/machinery/handle_atom_del(atom/A) if(A == occupant) occupant = null - update_icon() + update_appearance(updates = ALL) updateUsrDialog() /obj/machinery/proc/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/I) diff --git a/code/game/machinery/ai_slipper.dm b/code/game/machinery/ai_slipper.dm index 54030e0be8bb..6f8e7f9a43e5 100644 --- a/code/game/machinery/ai_slipper.dm +++ b/code/game/machinery/ai_slipper.dm @@ -17,13 +17,14 @@ . = ..() . += span_notice("It has [uses] uses of foam remaining.") -/obj/machinery/ai_slipper/update_icon() +/obj/machinery/ai_slipper/update_icon_state() if(stat & BROKEN) return if((stat & NOPOWER) || cooldown_time > world.time || !uses) icon_state = "ai-slipper0" else icon_state = "ai-slipper1" + return ..() /obj/machinery/ai_slipper/interact(mob/user) if(!allowed(user)) diff --git a/code/game/machinery/airlock_control.dm b/code/game/machinery/airlock_control.dm index f192e398cb1a..c420ad12fa5e 100644 --- a/code/game/machinery/airlock_control.dm +++ b/code/game/machinery/airlock_control.dm @@ -23,21 +23,21 @@ if("unlock") locked = FALSE - update_icon() + update_appearance(updates = ALL) if("lock") locked = TRUE - update_icon() + update_appearance(updates = ALL) if("secure_open") locked = FALSE - update_icon() + update_appearance(updates = ALL) sleep(0.2 SECONDS) open(1) locked = TRUE - update_icon() + update_appearance(updates = ALL) if("secure_close") locked = FALSE @@ -45,7 +45,7 @@ locked = TRUE sleep(0.2 SECONDS) - update_icon() + update_appearance(updates = ALL) send_status() @@ -113,14 +113,9 @@ id_tag = INCINERATOR_SYNDICATELAVA_AIRLOCK_SENSOR master_tag = INCINERATOR_SYNDICATELAVA_AIRLOCK_CONTROLLER -/obj/machinery/airlock_sensor/update_icon() - if(on) - if(alert) - icon_state = "airlock_sensor_alert" - else - icon_state = "airlock_sensor_standby" - else - icon_state = "airlock_sensor_off" +/obj/machinery/airlock_sensor/update_icon_state() + icon_state = "airlock_sensor_[on ? "[alert ? "alert" : "standby"]" : "off"]" + return ..() /obj/machinery/airlock_sensor/attack_hand(mob/user) . = ..() @@ -148,7 +143,7 @@ radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = RADIO_AIRLOCK) - update_icon() + update_appearance(updates = ALL) /obj/machinery/airlock_sensor/proc/set_frequency(new_frequency) SSradio.remove_object(src, frequency) diff --git a/code/game/machinery/airlock_cycle_control.dm b/code/game/machinery/airlock_cycle_control.dm index d3d2639d7a83..2e664c5b6086 100644 --- a/code/game/machinery/airlock_cycle_control.dm +++ b/code/game/machinery/airlock_cycle_control.dm @@ -107,7 +107,7 @@ pixel_x = (dir & 3)? 0 : (dir == 4 ? -24 : 24) pixel_y = (dir & 3)? (dir == 1 ? -24 : 24) : 0 - update_icon() + update_appearance(updates = ALL) /obj/machinery/advanced_airlock_controller/Destroy() qdel(wires) @@ -134,7 +134,8 @@ if(airlock.density && (cyclestate == AIRLOCK_CYCLESTATE_CLOSED || (airlocks[A] && cyclestate == AIRLOCK_CYCLESTATE_INOPEN) || (!airlocks[A] && cyclestate == AIRLOCK_CYCLESTATE_OUTOPEN))) airlock.bolt() -/obj/machinery/advanced_airlock_controller/update_icon(use_hash = FALSE) +/obj/machinery/advanced_airlock_controller/update_appearance(updates = ALL, use_hash = FALSE) + . = ..() var/turf/location = get_turf(src) if(!location) return @@ -193,7 +194,7 @@ if(WIRE_POWER) if(!wires.is_cut(WIRE_POWER)) shorted = FALSE - update_icon() + update_appearance(updates = ALL) if(WIRE_AI) if(!wires.is_cut(WIRE_AI)) aidisabled = FALSE @@ -292,12 +293,12 @@ /obj/machinery/advanced_airlock_controller/process_atmos() if((stat & (NOPOWER|BROKEN)) || shorted) - update_icon(TRUE) + update_appearance(UPDATE_ICON, TRUE) return var/turf/location = get_turf(src) if(!location) - update_icon(TRUE) + update_appearance(UPDATE_ICON, TRUE) return var/pressure = 0 if(location) @@ -323,10 +324,10 @@ vent.pressure_checks = 1 vent.external_pressure_bound = interior_pressure vent.on = TRUE - vent.update_icon() + vent.update_appearance(updates = ALL) else vent.on = FALSE - vent.update_icon() + vent.update_appearance(updates = ALL) return if(AIRLOCK_CYCLESTATE_INCLOSING) for(var/airlock in airlocks) @@ -340,10 +341,10 @@ vent.external_pressure_bound = depressurization_target vents_valid = FALSE vent.on = TRUE - vent.update_icon() + vent.update_appearance(updates = ALL) else vent.on = FALSE - vent.update_icon() + vent.update_appearance(updates = ALL) if(pressure < depressurization_margin) vents_valid = TRUE if((doors_valid && vents_valid) || is_skipping) @@ -361,10 +362,10 @@ vent.external_pressure_bound = depressurization_target vents_valid = FALSE vent.on = TRUE - vent.update_icon() + vent.update_appearance(updates = ALL) else vent.on = FALSE - vent.update_icon() + vent.update_appearance(updates = ALL) if(pressure < depressurization_margin) vents_valid = TRUE if(vents_valid || is_skipping) @@ -382,10 +383,10 @@ vent.external_pressure_bound = interior_pressure vents_valid = FALSE vent.on = TRUE - vent.update_icon() + vent.update_appearance(updates = ALL) else vent.on = FALSE - vent.update_icon() + vent.update_appearance(updates = ALL) if(pressure > interior_pressure - 0.5) vents_valid = TRUE if(vents_valid || is_skipping) @@ -407,10 +408,10 @@ vent.external_pressure_bound = exterior_pressure vents_valid = FALSE vent.on = TRUE - vent.update_icon() + vent.update_appearance(updates = ALL) else vent.on = FALSE - vent.update_icon() + vent.update_appearance(updates = ALL) if(pressure > exterior_pressure - 0.5) vents_valid = TRUE if(vents_valid || is_skipping) @@ -424,13 +425,13 @@ for(var/V in vents) var/obj/machinery/atmospherics/components/unary/vent_pump/vent = V vent.on = FALSE - vent.update_icon() + vent.update_appearance(updates = ALL) if(AIRLOCK_CYCLESTATE_OUTOPEN) for(var/V in vents) var/obj/machinery/atmospherics/components/unary/vent_pump/vent = V vent.on = FALSE - vent.update_icon() - update_icon(TRUE) + vent.update_appearance(updates = ALL) + update_appearance(UPDATE_ICON, TRUE) /obj/machinery/advanced_airlock_controller/attackby(obj/item/W, mob/user, params) switch(buildstage) @@ -440,13 +441,13 @@ to_chat(user, span_notice("You cut the final wires.")) new /obj/item/stack/cable_coil(loc, 5) buildstage = 1 - update_icon() + update_appearance(updates = ALL) return else if(W.tool_behaviour == TOOL_SCREWDRIVER) // Opening that up. W.play_tool_sound(src) panel_open = !panel_open to_chat(user, span_notice("The wires have been [panel_open ? "exposed" : "unexposed"].")) - update_icon() + update_appearance(updates = ALL) return else if(W.GetID())// trying to unlock the interface with an ID card togglelock(user) @@ -465,7 +466,7 @@ new /obj/item/electronics/advanced_airlock_controller( src.loc ) playsound(src.loc, 'sound/items/deconstruct.ogg', 50, 1) buildstage = 0 - update_icon() + update_appearance(updates = ALL) return if(istype(W, /obj/item/stack/cable_coil)) @@ -486,14 +487,14 @@ cut_links() shorted = 0 buildstage = 2 - update_icon() + update_appearance(updates = ALL) return if(0) if(istype(W, /obj/item/electronics/advanced_airlock_controller)) if(user.temporarilyRemoveItemFromInventory(W)) to_chat(user, span_notice("You insert the circuit.")) buildstage = 1 - update_icon() + update_appearance(updates = ALL) qdel(W) return @@ -504,7 +505,7 @@ user.visible_message(span_notice("[user] fabricates a circuit and places it into [src]."), \ span_notice("You adapt an airlock controller circuit and slot it into the assembly.")) buildstage = 1 - update_icon() + update_appearance(updates = ALL) return if(W.tool_behaviour == TOOL_WRENCH) @@ -732,7 +733,7 @@ depressurization_target = clamp(text2num(params["pressure"]), 0, depressurization_margin - 0.15) if("skip_delay") skip_delay = clamp(text2num(params["skip_delay"]), 0, 1200) - update_icon(TRUE) + update_appearance(UPDATE_ICON, TRUE) /obj/machinery/advanced_airlock_controller/proc/request_from_door(airlock) var/role = airlocks[airlock] @@ -775,7 +776,7 @@ else if(src.allowed(usr) && !wires.is_cut(WIRE_IDSCAN)) locked = !locked - update_icon() + update_appearance(updates = ALL) to_chat(user, span_notice("You [ locked ? "lock" : "unlock"] the airlock controller interface.")) updateUsrDialog() else @@ -784,7 +785,7 @@ /obj/machinery/advanced_airlock_controller/power_change() ..() - update_icon() + update_appearance(updates = ALL) /obj/machinery/advanced_airlock_controller/emag_act(mob/user) if(obj_flags & EMAGGED) @@ -795,7 +796,7 @@ /obj/machinery/advanced_airlock_controller/obj_break(damage_flag) ..() - update_icon() + update_appearance(updates = ALL) /obj/machinery/advanced_airlock_controller/deconstruct(disassembled = TRUE) if(!(flags_1 & NODECONSTRUCT_1)) diff --git a/code/game/machinery/announcement_system.dm b/code/game/machinery/announcement_system.dm index 8136c6135a7c..0c1f3def8f4d 100644 --- a/code/game/machinery/announcement_system.dm +++ b/code/game/machinery/announcement_system.dm @@ -30,25 +30,25 @@ GLOBAL_LIST_EMPTY(announcement_systems) . = ..() GLOB.announcement_systems += src radio = new /obj/item/radio/headset/silicon/ai(src) - update_icon() + update_appearance(updates = ALL) -/obj/machinery/announcement_system/update_icon() - cut_overlays() +/obj/machinery/announcement_system/update_overlays() + . = ..() if(is_operational()) var/mutable_appearance/on_app = mutable_appearance(icon, "AAS_on") - add_overlay(on_app) + . += on_app if(arrivalToggle) var/mutable_appearance/arriving = mutable_appearance(icon, greenlight) - add_overlay(arriving) + . += arriving if(newheadToggle) var/mutable_appearance/newhead = mutable_appearance(icon, pinklight) - add_overlay(newhead) + . += newhead if(stat & BROKEN) var/mutable_appearance/icecream = mutable_appearance(icon, errorlight) - add_overlay(icecream) + . += icecream /obj/machinery/announcement_system/Destroy() QDEL_NULL(radio) @@ -60,13 +60,13 @@ GLOBAL_LIST_EMPTY(announcement_systems) P.play_tool_sound(src) panel_open = !panel_open to_chat(user, span_notice("You [panel_open ? "open" : "close"] the maintenance hatch of [src].")) - update_icon() + update_appearance(updates = ALL) else if(default_deconstruction_crowbar(P)) return else if(P.tool_behaviour == TOOL_MULTITOOL && panel_open && (stat & BROKEN)) to_chat(user, span_notice("You reset [src]'s firmware.")) stat &= ~BROKEN - update_icon() + update_appearance(updates = ALL) else return ..() @@ -141,10 +141,10 @@ GLOBAL_LIST_EMPTY(announcement_systems) log_game("The head announcement was updated: [NewMessage] by:[key_name(usr)]") if("NewheadToggle") newheadToggle = !newheadToggle - update_icon() + update_appearance(updates = ALL) if("ArrivalToggle") arrivalToggle = !arrivalToggle - update_icon() + update_appearance(updates = ALL) add_fingerprint(usr) /obj/machinery/announcement_system/attack_robot(mob/living/silicon/user) diff --git a/code/game/machinery/aug_manipulator.dm b/code/game/machinery/aug_manipulator.dm index ce4a02d70946..eacb61be45f4 100644 --- a/code/game/machinery/aug_manipulator.dm +++ b/code/game/machinery/aug_manipulator.dm @@ -19,7 +19,8 @@ initial_icon_state = initial(icon_state) return ..() -/obj/machinery/aug_manipulator/update_icon() +/obj/machinery/aug_manipulator/update_appearance(updates = ALL) + . = ..() cut_overlays() if(stat & BROKEN) @@ -50,7 +51,7 @@ /obj/machinery/aug_manipulator/handle_atom_del(atom/A) if(A == storedpart) storedpart = null - update_icon() + update_appearance(updates = ALL) /obj/machinery/aug_manipulator/attackby(obj/item/O, mob/user, params) if(default_unfasten_wrench(user, O)) @@ -71,7 +72,7 @@ return storedpart = O O.add_fingerprint(user) - update_icon() + update_appearance(updates = ALL) else if(O.tool_behaviour == TOOL_WELDER && user.a_intent != INTENT_HARM) if(obj_integrity < max_integrity) @@ -88,7 +89,7 @@ to_chat(user, span_notice("You repair [src].")) stat &= ~BROKEN obj_integrity = max(obj_integrity, max_integrity) - update_icon() + update_appearance(updates = ALL) else to_chat(user, span_notice("[src] does not need repairs.")) else @@ -118,7 +119,7 @@ if(storedpart) storedpart.forceMove(get_turf(src)) storedpart = null - update_icon() + update_appearance(updates = ALL) else to_chat(user, span_notice("[src] is empty.")) diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 429e68cf5682..be72a3d7a13a 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -177,7 +177,7 @@ if(printdirection > 8) // Simple Sanity Check printdirection = 0 - update_icon() + update_appearance(updates = ALL) /obj/machinery/autolathe/on_deconstruction() var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) @@ -372,7 +372,7 @@ A = location if(is_stack) // If its a stack we need to define it as so var/obj/item/stack/N = new D.build_path(A, multiplier) - N.update_icon() + N.update_appearance(updates = ALL) N.autolathe_crafted(src) else for(var/i=1, i<=multiplier, i++) diff --git a/code/game/machinery/bounty_board.dm b/code/game/machinery/bounty_board.dm index 3cc9a8f31be6..0b5ac1266bc5 100644 --- a/code/game/machinery/bounty_board.dm +++ b/code/game/machinery/bounty_board.dm @@ -31,12 +31,12 @@ GLOBAL_LIST_EMPTY(request_list) GLOB.allbountyboards -= src . = ..() -/obj/machinery/bounty_board/update_icon() - ..() +/obj/machinery/bounty_board/update_icon_state() if(stat & (NOPOWER|BROKEN)) icon_state = "request_kiosk_off" else icon_state = "request_kiosk" + return ..() /obj/machinery/bounty_board/attackby(obj/item/I, mob/living/user, params) . = ..() diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm index 52df5d0a383e..d86949fa7d2f 100644 --- a/code/game/machinery/buttons.dm +++ b/code/game/machinery/buttons.dm @@ -25,7 +25,7 @@ pixel_x = (dir & 3)? 0 : (dir == 4 ? -24 : 24) pixel_y = (dir & 3)? (dir ==1 ? -24 : 24) : 0 panel_open = TRUE - update_icon() + update_appearance(updates = ALL) if(!built && !device && device_type) @@ -42,26 +42,32 @@ board.accesses = req_one_access -/obj/machinery/button/update_icon() - cut_overlays() +/obj/machinery/button/update_icon_state() if(panel_open) icon_state = "button-open" - if(device) - add_overlay("button-device") - if(board) - add_overlay("button-board") + return ..() + if(stat & (NOPOWER|BROKEN)) + icon_state = "[skin]-p" + return ..() + icon_state = skin + return ..() - else - if(stat & (NOPOWER|BROKEN)) - icon_state = "[skin]-p" - else - icon_state = skin +/obj/machinery/button/update_overlays() + . = ..() +// if(light_mask && !(stat & (NOPOWER|BROKEN)) && !panel_open) +// . += emissive_appearance(icon, light_mask, src, alpha = alpha) + if(!panel_open) + return + if(device) + . += "button-device" + if(board) + . += "button-board" /obj/machinery/button/attackby(obj/item/W, mob/user, params) if(W.tool_behaviour == TOOL_SCREWDRIVER) if(panel_open || allowed(user)) default_deconstruction_screwdriver(user, "button-open", "[skin]",W) - update_icon() + update_appearance(updates = ALL) else to_chat(user, span_danger("Maintenance Access Denied")) flick("[skin]-denied", src) @@ -118,7 +124,7 @@ to_chat(user, span_notice("You wipe the button's ID.")) id = null - update_icon() + update_appearance(updates = ALL) return if(user.a_intent != INTENT_HARM && !(W.item_flags & NOBLUDGEON)) @@ -167,7 +173,7 @@ req_access = list() req_one_access = list() board = null - update_icon() + update_appearance(updates = ALL) to_chat(user, span_notice("You remove electronics from the button frame.")) else @@ -195,7 +201,7 @@ if(device) device.pulsed() - addtimer(CALLBACK(src, TYPE_PROC_REF(/atom/, update_icon)), 15) + addtimer(CALLBACK(src, TYPE_PROC_REF(/atom/, update_appearance)), 15) /obj/machinery/button/door name = "door button" diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 4961d1dc4754..fd4dbaa382c4 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -96,7 +96,7 @@ if(mapload && is_station_level(z) && prob(3) && !start_active) toggle_cam() else //this is handled by toggle_camera, so no need to update it twice. - update_icon() + update_appearance(updates = ALL) /obj/machinery/camera/Destroy() if(can_use()) @@ -147,14 +147,14 @@ return if(!(. & EMP_PROTECT_SELF)) if(prob(150/severity)) - update_icon() + update_appearance(updates = ALL) var/list/previous_network = network network = list() GLOB.cameranet.removeCamera(src) stat |= EMPED set_light(0) emped = emped+1 //Increase the number of consecutive EMP's - update_icon() + update_appearance(updates = ALL) var/thisemp = emped //Take note of which EMP this proc is for spawn(900) if(loc) //qdel limbo @@ -162,7 +162,7 @@ if(emped == thisemp) //Only fix it if the camera hasn't been EMP'd again network = previous_network stat &= ~EMPED - update_icon() + update_appearance(updates = ALL) if(can_use()) GLOB.cameranet.addCamera(src) emped = 0 //Resets the consecutive EMP count @@ -200,7 +200,7 @@ panel_open = !panel_open to_chat(user, span_notice("You screw the camera's panel [panel_open ? "open" : "closed"].")) I.play_tool_sound(src) - update_icon() + update_appearance(updates = ALL) return TRUE /obj/machinery/camera/wirecutter_act(mob/living/user, obj/item/I) @@ -354,7 +354,8 @@ new /obj/item/stack/cable_coil(loc, 2) qdel(src) -/obj/machinery/camera/update_icon() //TO-DO: Make panel open states, xray camera, and indicator lights overlays instead. +/obj/machinery/camera/update_appearance(updates = ALL) + . = ..() //TO-DO: Make panel open states, xray camera, and indicator lights overlays instead. var/xray_module if(isXRay(TRUE)) xray_module = "xray" @@ -393,7 +394,7 @@ visible_message(span_danger("\The [src] [change_msg]!")) playsound(src, 'sound/items/wirecutter.ogg', 100, TRUE) - update_icon() //update Initialize(mapload) if you remove this. + update_appearance(updates = ALL) //update Initialize() if you remove this. // now disconnect anyone using the camera //Apparently, this will disconnect anyone even if the camera was re-activated. diff --git a/code/game/machinery/camera/camera_assembly.dm b/code/game/machinery/camera/camera_assembly.dm index f69ec7ca6b95..fe098f2dbd68 100644 --- a/code/game/machinery/camera/camera_assembly.dm +++ b/code/game/machinery/camera/camera_assembly.dm @@ -67,13 +67,14 @@ if(building) setDir(ndir) -/obj/structure/camera_assembly/update_icon() +/obj/structure/camera_assembly/update_appearance(updates = ALL) + . = ..() icon_state = "[xray_module ? "xray" : null][initial(icon_state)]" /obj/structure/camera_assembly/handle_atom_del(atom/A) if(A == xray_module) xray_module = null - update_icon() + update_appearance(updates = ALL) if(malf_xray_firmware_present) malf_xray_firmware_active = malf_xray_firmware_present //re-enable firmware based upgrades after the part is removed. if(istype(loc, /obj/machinery/camera)) @@ -109,7 +110,7 @@ xray_module = null if(malf_xray_firmware_present) malf_xray_firmware_active = malf_xray_firmware_present //re-enable firmware based upgrades after the part is removed. - update_icon() + update_appearance(updates = ALL) else if(I == emp_module) emp_module = null @@ -174,7 +175,7 @@ if(malf_xray_firmware_active) malf_xray_firmware_active = FALSE //flavor reason: MALF AI Upgrade Camera Network ability's firmware is incompatible with the new part //real reason: make it a normal upgrade so the finished camera's icons and examine texts are restored. - update_icon() + update_appearance(updates = ALL) return else if(istype(W, /obj/item/assembly/prox_sensor)) //motion sensing upgrade diff --git a/code/game/machinery/camera/presets.dm b/code/game/machinery/camera/presets.dm index 41dbd102f53f..d33c60afc1ed 100644 --- a/code/game/machinery/camera/presets.dm +++ b/code/game/machinery/camera/presets.dm @@ -113,12 +113,12 @@ assembly.malf_xray_firmware_active = FALSE //make it appear like it's just normally upgraded so the icons and examine texts are restored. upgrades |= CAMERA_UPGRADE_XRAY - update_icon() + update_appearance(updates = ALL) /obj/machinery/camera/proc/removeXRay(ignore_malf_upgrades) if(!ignore_malf_upgrades) //don't downgrade it if malf software is forced onto it. upgrades &= ~CAMERA_UPGRADE_XRAY - update_icon() + update_appearance(updates = ALL) diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm index 7bd231e9afb9..7ddb89201d1d 100644 --- a/code/game/machinery/cell_charger.dm +++ b/code/game/machinery/cell_charger.dm @@ -13,15 +13,17 @@ var/chargelevel = -1 var/charge_rate = 250 -/obj/machinery/cell_charger/update_icon() - cut_overlays() - if(charging) - add_overlay(image(charging.icon, charging.icon_state)) - add_overlay("ccharger-on") - if(!(stat & (BROKEN|NOPOWER))) - var/newlevel = round(charging.percent() * 4 / 100) - chargelevel = newlevel - add_overlay("ccharger-o[newlevel]") +/obj/machinery/cell_charger/update_overlays() + . = ..() + if(!charging) + return + + . += image(charging.icon, charging.icon_state) + . += "ccharger-on" + if(!(stat & (BROKEN|NOPOWER))) + var/newlevel = round(charging.percent() * 4 / 100) + chargelevel = newlevel + . += "ccharger-o[newlevel]" /obj/machinery/cell_charger/examine(mob/user) . = ..() @@ -61,7 +63,7 @@ charging = W user.visible_message("[user] inserts a cell into [src].", span_notice("You insert a cell into [src].")) chargelevel = -1 - update_icon() + update_appearance(updates = ALL) else if(!charging && default_deconstruction_screwdriver(user, icon_state, icon_state, W)) return @@ -81,10 +83,10 @@ return ..() /obj/machinery/cell_charger/proc/removecell() - charging.update_icon() + charging.update_appearance(updates = ALL) charging = null chargelevel = -1 - update_icon() + update_appearance(updates = ALL) /obj/machinery/cell_charger/attack_hand(mob/user) . = ..() @@ -141,4 +143,4 @@ use_power(charge_rate * delta_time) charging.give(charge_rate * delta_time) //this is 2558, efficient batteries exist - update_icon() + update_appearance(updates = ALL) diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index 3bc95103097b..13873aaad854 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -215,13 +215,13 @@ GLOBAL_VAR_INIT(clones, 0) INVOKE_ASYNC(src, PROC_REF(horrifyingsound)) mess = TRUE icon_state = "pod_g" - update_icon() + update_appearance(updates = ALL) return NONE if(clonemind.zombified) //Can't clone the damned x2 INVOKE_ASYNC(src, PROC_REF(horrifyingsound)) mess = TRUE icon_state = "pod_g" - update_icon() + update_appearance(updates = ALL) return NONE current_insurance = insurance attempting = TRUE //One at a time!! diff --git a/code/game/machinery/computer/_computer.dm b/code/game/machinery/computer/_computer.dm index 42c8a300fd3e..ac668106d71f 100644 --- a/code/game/machinery/computer/_computer.dm +++ b/code/game/machinery/computer/_computer.dm @@ -22,7 +22,7 @@ /obj/machinery/computer/Initialize(mapload, obj/item/circuitboard/C) . = ..() if(mapload) - update_icon() + update_appearance(updates = ALL) power_change() if(!QDELETED(C)) qdel(circuit) @@ -44,7 +44,7 @@ icon_screen = "ratvar[rand(1, 4)]" icon_keyboard = "ratvar_key[rand(1, 6)]" icon_state = "ratvarcomputer[rand(1, 4)]" - update_icon() + update_appearance(updates = ALL) /obj/machinery/computer/narsie_act() if(clockwork && clockwork != initial(clockwork)) //if it's clockwork but isn't normally clockwork @@ -52,9 +52,10 @@ icon_screen = initial(icon_screen) icon_keyboard = initial(icon_keyboard) icon_state = initial(icon_state) - update_icon() + update_appearance(updates = ALL) -/obj/machinery/computer/update_icon() +/obj/machinery/computer/update_appearance(updates = ALL) + . = ..() cut_overlays() SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays) diff --git a/code/game/machinery/computer/aifixer.dm b/code/game/machinery/computer/aifixer.dm index e37e87599c5e..df89017a011b 100644 --- a/code/game/machinery/computer/aifixer.dm +++ b/code/game/machinery/computer/aifixer.dm @@ -75,10 +75,10 @@ var/oldstat = occupier.stat restoring = Fix() if(oldstat != occupier.stat) - update_icon() + update_appearance(updates = ALL) -/obj/machinery/computer/aifixer/update_icon() - ..() +/obj/machinery/computer/aifixer/update_appearance(updates = ALL) + . = ..() if(stat & (NOPOWER|BROKEN)) return else @@ -108,7 +108,7 @@ to_chat(AI, "You have been uploaded to a stationary terminal. Sadly, there is no remote access from here.") to_chat(user, "[span_boldnotice("Transfer successful")]: [AI.name] ([rand(1000,9999)].exe) installed and executed successfully. Local copy has been removed.") card.AI = null - update_icon() + update_appearance(updates = ALL) else //Uploading AI from terminal to card if(occupier && !restoring) @@ -117,7 +117,7 @@ occupier.forceMove(card) card.AI = occupier occupier = null - update_icon() + update_appearance(updates = ALL) else if (restoring) to_chat(user, span_alert("ERROR: Reconstruction in progress.")) else if (!occupier) diff --git a/code/game/machinery/computer/apc_control.dm b/code/game/machinery/computer/apc_control.dm index 23f4a2b74f8e..e1e0beaf1a92 100644 --- a/code/game/machinery/computer/apc_control.dm +++ b/code/game/machinery/computer/apc_control.dm @@ -26,7 +26,7 @@ playsound(active_apc, 'sound/machines/boltsdown.ogg', 25, FALSE) playsound(active_apc, 'sound/machines/terminal_alert.ogg', 50, FALSE) active_apc.locked = TRUE - active_apc.update_icon() + active_apc.update_appearance(updates = ALL) active_apc.remote_control = null active_apc = null @@ -125,7 +125,7 @@ playsound(active_apc, 'sound/machines/boltsdown.ogg', 25, FALSE) playsound(active_apc, 'sound/machines/terminal_alert.ogg', 50, FALSE) active_apc.locked = TRUE - active_apc.update_icon() + active_apc.update_appearance(updates = ALL) active_apc.remote_control = null active_apc = null APC.remote_control = src @@ -138,7 +138,7 @@ playsound(APC, 'sound/machines/boltsup.ogg', 25, FALSE) playsound(APC, 'sound/machines/terminal_alert.ogg', 50, FALSE) APC.locked = FALSE - APC.update_icon() + APC.update_appearance(updates = ALL) active_apc = APC if("check-logs") log_activity("Checked Logs") @@ -160,7 +160,7 @@ log_game("Warning: possible href exploit by [key_name(usr)] - attempted to set [html_encode(type)] on [target] to [html_encode(value)]") return target.vars[type] = target.setsubsystem(text2num(value)) - target.update_icon() + target.update_appearance(updates = ALL) target.update() var/setTo = "" switch(target.vars[type]) diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index b5ca55cbf96c..2b820eb18dc2 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -83,7 +83,8 @@ GLOBAL_LIST_INIT(arcade_prize_pool, list( return INITIALIZE_HINT_QDEL Reset() -/obj/machinery/computer/arcade/update_icon() +/obj/machinery/computer/arcade/update_appearance(updates = ALL) + . = ..() if(dir == 2) icon_screen = "invaders" else @@ -141,7 +142,7 @@ GLOBAL_LIST_INIT(arcade_prize_pool, list( return prizevend(user) T.pay_tickets() - T.update_icon() + T.update_appearance(updates = ALL) O = T to_chat(user, span_notice("You turn in 2 tickets to the [src] and claim a prize!")) return diff --git a/code/game/machinery/computer/atmos_alert.dm b/code/game/machinery/computer/atmos_alert.dm index fb4283d89c4f..0ea40e8b0b9a 100644 --- a/code/game/machinery/computer/atmos_alert.dm +++ b/code/game/machinery/computer/atmos_alert.dm @@ -51,7 +51,7 @@ to_chat(usr, "Minor alarm for [zone] cleared.") minor_alarms -= zone . = TRUE - update_icon() + update_appearance(updates = ALL) /obj/machinery/computer/atmos_alert/proc/set_frequency(new_frequency) SSradio.remove_object(src, receive_frequency) @@ -74,14 +74,14 @@ priority_alarms += zone else if (severity == "minor") minor_alarms += zone - update_icon() + update_appearance(updates = ALL) return -/obj/machinery/computer/atmos_alert/update_icon() - ..() +/obj/machinery/computer/atmos_alert/update_appearance(updates = ALL) + . = ..() if(stat & (NOPOWER|BROKEN)) return if(priority_alarms.len) add_overlay("alert:2") else if(minor_alarms.len) - add_overlay("alert:1") \ No newline at end of file + add_overlay("alert:1") diff --git a/code/game/machinery/computer/atmos_control.dm b/code/game/machinery/computer/atmos_control.dm index 451b4f03a7a9..519c44c2b993 100644 --- a/code/game/machinery/computer/atmos_control.dm +++ b/code/game/machinery/computer/atmos_control.dm @@ -42,8 +42,9 @@ name = "incinerator chamber gas sensor" id_tag = ATMOS_GAS_MONITOR_SENSOR_INCINERATOR -/obj/machinery/air_sensor/update_icon() - icon_state = "gsensor[on]" +/obj/machinery/air_sensor/update_appearance(updates = ALL) + . = ..() + icon_state = "gsensor[on]" /obj/machinery/air_sensor/process_atmos() if(on) diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index b88a5b396976..46c4a8ef62dc 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -260,7 +260,8 @@ clockwork = TRUE //it'd look very weird light_power = 0 -/obj/machinery/computer/security/telescreen/update_icon() +/obj/machinery/computer/security/telescreen/update_appearance(updates = ALL) + . = ..() icon_state = initial(icon_state) if(stat & BROKEN) icon_state += "b" diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm index 988c6af30393..fc78b58f4085 100644 --- a/code/game/machinery/computer/medical.dm +++ b/code/game/machinery/computer/medical.dm @@ -523,7 +523,7 @@ P.info += "Medical Record Lost!
" P.name = text("MR-[] '[]'", GLOB.data_core.medicalPrintCount, "Record Lost") P.info += "" - P.update_icon() + P.update_appearance(updates = ALL) src.printing = null src.add_fingerprint(usr) diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm index caa218a0c869..64062234d88c 100644 --- a/code/game/machinery/computer/security.dm +++ b/code/game/machinery/computer/security.dm @@ -414,7 +414,7 @@ P.info += "Security Record Lost!
" P.name = text("SR-[] '[]'", GLOB.data_core.securityPrintCount, "Record Lost") P.info += "" - P.update_icon() + P.update_appearance(updates = ALL) printing = FALSE if("print_poster") diff --git a/code/game/machinery/computer/station_alert.dm b/code/game/machinery/computer/station_alert.dm index 8f06417778a1..bb0b718b5c21 100644 --- a/code/game/machinery/computer/station_alert.dm +++ b/code/game/machinery/computer/station_alert.dm @@ -74,8 +74,8 @@ L -= I return !cleared -/obj/machinery/computer/station_alert/update_icon() - ..() +/obj/machinery/computer/station_alert/update_appearance(updates = ALL) + . = ..() if(stat & (NOPOWER|BROKEN)) return var/active_alarms = FALSE diff --git a/code/game/machinery/computer/teleporter.dm b/code/game/machinery/computer/teleporter.dm index f0900240f1d7..4a840daf9a0c 100644 --- a/code/game/machinery/computer/teleporter.dm +++ b/code/game/machinery/computer/teleporter.dm @@ -66,13 +66,13 @@ switch(action) if("regimeset") power_station.engaged = FALSE - power_station.teleporter_hub.update_icon() + power_station.teleporter_hub.update_appearance(updates = ALL) power_station.teleporter_hub.calibrated = FALSE reset_regime() . = TRUE if("settarget") power_station.engaged = FALSE - power_station.teleporter_hub.update_icon() + power_station.teleporter_hub.update_appearance(updates = ALL) power_station.teleporter_hub.calibrated = FALSE set_target(usr) . = TRUE @@ -86,7 +86,7 @@ say("Processing hub calibration to target...") calibrating = TRUE - power_station.update_icon() + power_station.update_appearance(updates = ALL) spawn(50 * (3 - power_station.teleporter_hub.accuracy)) //Better parts mean faster calibration calibrating = FALSE if(check_hub_connection()) @@ -94,7 +94,7 @@ say("Calibration complete.") else say("Error: Unable to detect hub.") - power_station.update_icon() + power_station.update_appearance(updates = ALL) . = TRUE /obj/machinery/computer/teleporter/proc/check_hub_connection() @@ -159,10 +159,10 @@ target_station.stat &= ~NOPOWER if(target_station.teleporter_hub) target_station.teleporter_hub.stat &= ~NOPOWER - target_station.teleporter_hub.update_icon() + target_station.teleporter_hub.update_appearance(updates = ALL) if(target_station.teleporter_console) target_station.teleporter_console.stat &= ~NOPOWER - target_station.teleporter_console.update_icon() + target_station.teleporter_console.update_appearance(updates = ALL) /obj/machinery/computer/teleporter/proc/is_eligible(atom/movable/AM) var/turf/T = get_turf(AM) diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index d6b03e1198de..715776297d57 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -172,7 +172,7 @@ GLOBAL_VAR_INIT(cryopods_enabled, FALSE) ..() /obj/machinery/cryopod/LateInitialize() - update_icon() + update_appearance(updates = ALL) find_control_computer() /obj/machinery/cryopod/proc/PowerOn() diff --git a/code/game/machinery/dance_machine.dm b/code/game/machinery/dance_machine.dm index 8078a7c1986d..ef4fd2fda0bd 100644 --- a/code/game/machinery/dance_machine.dm +++ b/code/game/machinery/dance_machine.dm @@ -80,11 +80,9 @@ return return ..() -/obj/machinery/jukebox/update_icon() - if(active) - icon_state = "[initial(icon_state)]-active" - else - icon_state = "[initial(icon_state)]" +/obj/machinery/jukebox/update_icon_state() + icon_state = "[initial(icon_state)][active ? "-active" : null]" + return ..() /obj/machinery/jukebox/ui_status(mob/user) if(!anchored) @@ -174,7 +172,7 @@ /obj/machinery/jukebox/proc/activate_music() active = TRUE - update_icon() + update_appearance(updates = ALL) START_PROCESSING(SSobj, src) var/sound/song_played = sound(selection.song_path) var/list/close = range(10,src) @@ -465,7 +463,7 @@ STOP_PROCESSING(SSobj, src) dance_over() playsound(src,'sound/machines/terminal_off.ogg',50,TRUE) - update_icon() + update_appearance(updates = ALL) stop = world.time + 100 /obj/machinery/jukebox/disco/process() diff --git a/code/game/machinery/decontamination.dm b/code/game/machinery/decontamination.dm index 7e858278f3cc..92074f633560 100644 --- a/code/game/machinery/decontamination.dm +++ b/code/game/machinery/decontamination.dm @@ -35,11 +35,11 @@ . = ..() decon = new(list(src), FALSE) decon_emagged = new(list(src), FALSE) - update_icon() + update_appearance(updates = ALL) -/obj/machinery/decontamination_unit/update_icon() - . = ..() +/obj/machinery/decontamination_unit/update_icon_state() icon_state = uv? "tube_on" : (state_open? "tube_open" : "tube") + return ..() /obj/machinery/decontamination_unit/proc/store_items() var/atom/pickup_zone = drop_location() @@ -52,7 +52,7 @@ open_machine() dump_mob() playsound(src, 'sound/machines/decon/decon-open.ogg', 50, TRUE) - update_icon() + update_appearance(updates = ALL) /obj/machinery/decontamination_unit/proc/dump_mob() var/turf/T = get_turf(src) @@ -97,7 +97,7 @@ uv_cycles-- uv = TRUE locked = TRUE - update_icon() + update_appearance(updates = ALL) if(uv_emagged) radiation_pulse(src, 500, 5) decon_emagged.start() @@ -309,7 +309,7 @@ return FALSE visible_message(span_notice("[user] inserts [I] into [src]."), span_notice("You load [I] into [src].")) - update_icon() + update_appearance(updates = ALL) return if(!state_open && !uv) @@ -441,7 +441,7 @@ dispense(O, usr) desired-- return TRUE - update_icon() + update_appearance(updates = ALL) /obj/machinery/decontamination_unit/proc/load(obj/item/O) if(ismob(O.loc)) @@ -489,4 +489,4 @@ if(!user.canUseTopic(src, !issilicon(user)) || state_open) return locked = !locked - update_icon() + update_appearance(updates = ALL) diff --git a/code/game/machinery/defibrillator_mount.dm b/code/game/machinery/defibrillator_mount.dm index 500389f6e5e5..2f1952cef4a2 100644 --- a/code/game/machinery/defibrillator_mount.dm +++ b/code/game/machinery/defibrillator_mount.dm @@ -36,9 +36,10 @@ if(defib && defib.cell && defib.cell.charge < defib.cell.maxcharge && is_operational()) use_power(200) defib.cell.give(180) //90% efficiency, slightly better than the cell charger's 87.5% - update_icon() + update_appearance(updates = ALL) -/obj/machinery/defibrillator_mount/update_icon() +/obj/machinery/defibrillator_mount/update_appearance(updates = ALL) + . = ..() cut_overlays() if(defib) add_overlay("defib") @@ -76,7 +77,7 @@ span_notice("You press [I] into the mount, and it clicks into place.")) playsound(src, 'sound/machines/click.ogg', 50, TRUE) defib = I - update_icon() + update_appearance(updates = ALL) return else if(defib && I == defib.paddles) defib.paddles.snap_back() @@ -89,7 +90,7 @@ return clamps_locked = !clamps_locked to_chat(user, span_notice("Clamps [clamps_locked ? "" : "dis"]engaged.")) - update_icon() + update_appearance(updates = ALL) else to_chat(user, span_warning("Insufficient access.")) return @@ -111,7 +112,7 @@ span_notice("You override the locking clamps on [src]!")) playsound(src, 'sound/machines/locktoggle.ogg', 50, TRUE) clamps_locked = FALSE - update_icon() + update_appearance(updates = ALL) return TRUE /obj/machinery/defibrillator_mount/AltClick(mob/living/carbon/user) @@ -130,7 +131,7 @@ span_notice("You slide out [defib] from [src] and unhook the charging cables.")) playsound(src, 'sound/items/deconstruct.ogg', 50, TRUE) defib = null - update_icon() + update_appearance(updates = ALL) //wallframe, for attaching the mounts easily /obj/item/wallframe/defib_mount diff --git a/code/game/machinery/dish_drive.dm b/code/game/machinery/dish_drive.dm index 1e410913b7cd..82e366085c9d 100644 --- a/code/game/machinery/dish_drive.dm +++ b/code/game/machinery/dish_drive.dm @@ -125,6 +125,6 @@ playsound(src, 'sound/items/pshoom.ogg', 50, TRUE) playsound(bin, 'sound/items/pshoom.ogg', 50, TRUE) Beam(bin, icon_state = "rped_upgrade", time = 5) - bin.update_icon() + bin.update_appearance(updates = ALL) flick("synthesizer_beam", src) time_since_dishes = world.time + 600 diff --git a/code/game/machinery/dna_scanner.dm b/code/game/machinery/dna_scanner.dm index 31e527017524..4e0d559bc1c3 100644 --- a/code/game/machinery/dna_scanner.dm +++ b/code/game/machinery/dna_scanner.dm @@ -35,24 +35,24 @@ if(scan_level >= 3) . += "Scanner has been upgraded to support autoprocessing." -/obj/machinery/dna_scannernew/update_icon() - +/obj/machinery/dna_scannernew/update_icon_state() //no power or maintenance if(stat & (NOPOWER|BROKEN)) icon_state = initial(icon_state)+ (state_open ? "_open" : "") + "_unpowered" - return + return ..() if((stat & MAINT) || panel_open) icon_state = initial(icon_state)+ (state_open ? "_open" : "") + "_maintenance" - return + return ..() //running and someone in there if(occupant) icon_state = initial(icon_state)+ "_occupied" - return + return ..() //running icon_state = initial(icon_state)+ (state_open ? "_open" : "") + return ..() /obj/machinery/dna_scannernew/proc/toggle_open(mob/user) if(panel_open) @@ -128,7 +128,7 @@ /obj/machinery/dna_scannernew/attackby(obj/item/I, mob/user, params) if(!occupant && default_deconstruction_screwdriver(user, icon_state, icon_state, I))//sent icon_state is irrelevant... - update_icon()//..since we're updating the icon here, since the scanner can be unpowered when opened/closed + update_appearance(updates = ALL)//..since we're updating the icon here, since the scanner can be unpowered when opened/closed return if(default_pry_open(I)) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index a85a6d3dbddc..99655163b82a 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -214,7 +214,7 @@ welded = TRUE if(24 to 30) panel_open = TRUE - update_icon() + update_appearance(updates = ALL) /obj/machinery/door/airlock/proc/rebuild_parts() if(part_overlays) @@ -371,7 +371,7 @@ return emergency = !emergency - update_icon() + update_appearance(updates = ALL) /obj/machinery/door/airlock/lock() bolt() @@ -382,7 +382,7 @@ locked = TRUE playsound(src,boltDown,30,0,3) audible_message(span_italics("You hear a click from the bottom of the door."), null, 1) - update_icon() + update_appearance(updates = ALL) /obj/machinery/door/airlock/unlock() unbolt() @@ -393,7 +393,7 @@ locked = FALSE playsound(src,boltUp,30,0,3) audible_message(span_italics("You hear a click from the bottom of the door."), null, 1) - update_icon() + update_appearance(updates = ALL) /obj/machinery/door/airlock/narsie_act() var/turf/T = get_turf(src) @@ -456,7 +456,7 @@ /obj/machinery/door/airlock/handle_atom_del(atom/A) if(A == note) note = null - update_icon() + update_appearance(updates = ALL) /obj/machinery/door/airlock/Bumped(atom/movable/AM) if(operating || (obj_flags & EMAGGED)) @@ -530,7 +530,7 @@ /obj/machinery/door/airlock/proc/regainMainPower() if(secondsMainPowerLost > 0) secondsMainPowerLost = 0 - update_icon() + update_appearance(updates = ALL) /obj/machinery/door/airlock/proc/handlePowerRestore() var/cont = TRUE @@ -551,7 +551,7 @@ cont = TRUE spawnPowerRestoreRunning = FALSE updateDialog() - update_icon() + update_appearance(updates = ALL) /obj/machinery/door/airlock/proc/loseMainPower() if(secondsMainPowerLost <= 0) @@ -561,7 +561,7 @@ if(!spawnPowerRestoreRunning) spawnPowerRestoreRunning = TRUE INVOKE_ASYNC(src, PROC_REF(handlePowerRestore)) - update_icon() + update_appearance(updates = ALL) /obj/machinery/door/airlock/proc/loseBackupPower() if(secondsBackupPowerLost < 60) @@ -569,12 +569,12 @@ if(!spawnPowerRestoreRunning) spawnPowerRestoreRunning = TRUE INVOKE_ASYNC(src, PROC_REF(handlePowerRestore)) - update_icon() + update_appearance(updates = ALL) /obj/machinery/door/airlock/proc/regainBackupPower() if(secondsBackupPowerLost > 0) secondsBackupPowerLost = 0 - update_icon() + update_appearance(updates = ALL) // shock user with probability prb (if all connections & power are working) // returns TRUE if shocked, FALSE otherwise @@ -594,7 +594,8 @@ else return FALSE -/obj/machinery/door/airlock/update_icon(state=0, override=0) +/obj/machinery/door/airlock/update_icon(updates=ALL, state=0, override=0) + . = ..() cut_overlays() if(operating && !override) return @@ -731,6 +732,7 @@ var/iconkey = "[icon_state][icon_file]" if((!(. = airlock_overlays[iconkey]))) . = airlock_overlays[iconkey] = mutable_appearance(icon_file, icon_state) + return list(., /*em_blocker*/) /obj/machinery/door/airlock/proc/check_unres() //unrestricted sides. This overlay indicates which directions the player can access even without an ID if(hasPower() && unres_sides) @@ -764,15 +766,15 @@ /obj/machinery/door/airlock/do_animate(animation) switch(animation) if("opening") - update_icon(AIRLOCK_OPENING) + update_icon(ALL, AIRLOCK_OPENING) if("closing") - update_icon(AIRLOCK_CLOSING) + update_appearance(ALL, AIRLOCK_CLOSING) if("deny") if(!stat) - update_icon(AIRLOCK_DENY) + update_icon(ALL, AIRLOCK_DENY) playsound(src,doorDeni,50,0,3) sleep(0.6 SECONDS) - update_icon(AIRLOCK_CLOSED) + update_icon(ALL, AIRLOCK_CLOSED) /obj/machinery/door/airlock/examine(mob/user) . = ..() @@ -975,7 +977,7 @@ user.visible_message(span_notice("[user] reinforces \the [src] with metal."), span_notice("You reinforce \the [src] with metal.")) security_level = AIRLOCK_SECURITY_METAL - update_icon() + update_appearance(updates = ALL) return else if(istype(C, /obj/item/stack/sheet/plasteel)) var/obj/item/stack/sheet/plasteel/S = C @@ -991,7 +993,7 @@ security_level = AIRLOCK_SECURITY_PLASTEEL modify_max_integrity(normal_integrity * AIRLOCK_INTEGRITY_MULTIPLIER) damage_deflection = AIRLOCK_DAMAGE_DEFLECTION_R - update_icon() + update_appearance(updates = ALL) return if(AIRLOCK_SECURITY_METAL) if(C.tool_behaviour == TOOL_WELDER) @@ -1006,7 +1008,7 @@ span_italics("You hear welding.")) security_level = AIRLOCK_SECURITY_NONE spawn_atom_to_turf(/obj/item/stack/sheet/metal, user.loc, 2) - update_icon() + update_appearance(updates = ALL) return if(AIRLOCK_SECURITY_PLASTEEL_I_S) if(C.tool_behaviour == TOOL_CROWBAR) @@ -1023,7 +1025,7 @@ modify_max_integrity(normal_integrity) damage_deflection = AIRLOCK_DAMAGE_DEFLECTION_N spawn_atom_to_turf(/obj/item/stack/sheet/plasteel, user.loc, 1) - update_icon() + update_appearance(updates = ALL) return if(AIRLOCK_SECURITY_PLASTEEL_I) if(C.tool_behaviour == TOOL_WELDER) @@ -1083,13 +1085,13 @@ panel_open = !panel_open to_chat(user, span_notice("You [panel_open ? "open":"close"] the maintenance panel of the airlock.")) C.play_tool_sound(src) - update_icon() + update_appearance(updates = ALL) else if((C.tool_behaviour == TOOL_WIRECUTTER) && note) user.visible_message(span_notice("[user] cuts down [note] from [src]."), span_notice("You remove [note] from [src].")) C.play_tool_sound(src) note.forceMove(get_turf(user)) note = null - update_icon() + update_appearance(updates = ALL) else if(is_wire_tool(C) && panel_open) attempt_wire_interaction(user) return @@ -1115,7 +1117,7 @@ return to_chat(user, span_warning("You apply [C]. Next time someone opens the door, it will explode.")) panel_open = FALSE - update_icon() + update_appearance(updates = ALL) user.transferItemToLoc(C, src, TRUE) charge = C else if(istype(C,/obj/item/electronics/airlock)) @@ -1141,7 +1143,7 @@ return user.visible_message(span_notice("[user] pins [C] to [src]."), span_notice("You pin [C] to [src].")) note = C - update_icon() + update_appearance(updates = ALL) else if(istype(C, /obj/item/brace)) //yogs apply_brace(C, user) //yogs else if(istype(C, /obj/item/umbral_tendrils)) @@ -1218,7 +1220,7 @@ welded = !welded user.visible_message("[user.name] has [welded? "welded shut":"unwelded"] [src].", \ span_notice("You [welded ? "weld the airlock shut":"unweld the airlock"].")) - update_icon() + update_appearance(updates = ALL) else if(obj_integrity < max_integrity) if(!W.tool_start_check(user, amount=0)) @@ -1231,7 +1233,7 @@ stat &= ~BROKEN user.visible_message("[user.name] has repaired [src].", \ span_notice("You finish repairing the airlock.")) - update_icon() + update_appearance(updates = ALL) else to_chat(user, span_notice("The airlock doesn't need repairing.")) @@ -1392,7 +1394,7 @@ if(welded) welded = !welded operating = TRUE - update_icon(AIRLOCK_OPENING, 1) + update_icon(ALL, AIRLOCK_OPENING, 1) sleep(0.1 SECONDS) set_opacity(0) update_freelook_sight() @@ -1402,7 +1404,7 @@ air_update_turf(1) sleep(0.1 SECONDS) layer = OPEN_DOOR_LAYER - update_icon(AIRLOCK_OPEN, 1) + update_icon(ALL, AIRLOCK_OPEN, 1) operating = FALSE if(delayed_close_requested) delayed_close_requested = FALSE @@ -1437,7 +1439,7 @@ SSexplosions.med_mov_atom += killthis operating = TRUE - update_icon(AIRLOCK_CLOSING, 1) + update_icon(ALL, AIRLOCK_CLOSING, 1) layer = CLOSED_DOOR_LAYER if(air_tight) density = TRUE @@ -1453,7 +1455,7 @@ set_opacity(1) update_freelook_sight() sleep(0.1 SECONDS) - update_icon(AIRLOCK_CLOSED, 1) + update_icon(ALL, AIRLOCK_CLOSED, 1) operating = FALSE delayed_close_requested = FALSE if(safe) @@ -1494,7 +1496,7 @@ assemblytype = initial(airlock.assemblytype) anim_parts = initial(airlock.anim_parts) rebuild_parts() - update_icon() + update_appearance(updates = ALL) /obj/machinery/door/airlock/CanAStarPass(obj/item/card/id/ID) //Airlock is passable if it is open (!density), bot has access, and is not bolted shut or powered off) @@ -1503,13 +1505,13 @@ /obj/machinery/door/airlock/emag_act(mob/user) if(!operating && density && hasPower() && !(obj_flags & EMAGGED)) operating = TRUE - update_icon(AIRLOCK_EMAG, 1) + update_icon(ALL, AIRLOCK_EMAG, 1) sleep(0.6 SECONDS) if(QDELETED(src)) return operating = FALSE if(!open()) - update_icon(AIRLOCK_CLOSED, 1) + update_icon(ALL, AIRLOCK_CLOSED, 1) obj_flags |= EMAGGED lights = FALSE locked = TRUE @@ -1581,7 +1583,7 @@ /obj/machinery/door/airlock/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) . = ..() if(obj_integrity < (0.75 * max_integrity)) - update_icon() + update_appearance(updates = ALL) /obj/machinery/door/airlock/deconstruct(disassembled = TRUE, mob/user) @@ -1599,7 +1601,7 @@ A.created_name = name A.previous_assembly = previous_airlock A.update_name() - A.update_icon() + A.update_appearance(updates = ALL) if(!disassembled) if(A) @@ -1703,14 +1705,14 @@ if("disrupt-main") if(!secondsMainPowerLost) loseMainPower() - update_icon() + update_appearance(updates = ALL) else to_chat(usr, "Main power is already offline.") . = TRUE if("disrupt-backup") if(!secondsBackupPowerLost) loseBackupPower() - update_icon() + update_appearance(updates = ALL) else to_chat(usr, "Backup power is already offline.") . = TRUE @@ -1737,7 +1739,7 @@ . = TRUE if("light-toggle") lights = !lights - update_icon() + update_appearance(updates = ALL) . = TRUE if("safe-toggle") safe = !safe @@ -1798,7 +1800,7 @@ if(!user_allowed(user)) return emergency = !emergency - update_icon() + update_appearance(updates = ALL) /obj/machinery/door/airlock/proc/user_toggle_open(mob/user) if(!user_allowed(user)) @@ -1814,7 +1816,7 @@ /obj/machinery/door/airlock/proc/blow_charge() panel_open = TRUE - update_icon(AIRLOCK_OPENING) + update_icon(ALL, AIRLOCK_OPENING) visible_message(span_warning("[src]'s panel is blown off in a spray of deadly shrapnel!")) charge.forceMove(drop_location()) charge.ex_act(EXPLODE_DEVASTATE) diff --git a/code/game/machinery/doors/airlock_types.dm b/code/game/machinery/doors/airlock_types.dm index aaf51356776c..903e63089daf 100644 --- a/code/game/machinery/doors/airlock_types.dm +++ b/code/game/machinery/doors/airlock_types.dm @@ -226,7 +226,7 @@ DA.glass = TRUE if(heat_proof) DA.heat_proof_finished = TRUE - DA.update_icon() + DA.update_appearance(updates = ALL) DA.update_name() qdel(src) @@ -501,7 +501,7 @@ name = "airlock" desc = "It opens and closes." stealthy = TRUE - update_icon() + update_appearance(updates = ALL) /obj/machinery/door/airlock/cult/proc/reveal() icon = initial(icon) @@ -509,7 +509,7 @@ name = initial(name) desc = initial(desc) stealthy = initial(stealthy) - update_icon() + update_appearance(updates = ALL) /obj/machinery/door/airlock/cult/narsie_act() return diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm index 4aa7e893bfac..d7407b43d3f4 100644 --- a/code/game/machinery/doors/brigdoors.dm +++ b/code/game/machinery/doors/brigdoors.dm @@ -102,7 +102,7 @@ if(!targets.len) obj_break() - update_icon() + update_appearance(updates = ALL) /obj/machinery/door_timer/attackby(obj/item/W, mob/user, params) var/obj/item/card/id/card = W.GetID() @@ -122,7 +122,7 @@ if(timing) if(world.time - activation_time >= timer_duration) timer_end() // open doors, reset timer, clear status screen - update_icon() + update_appearance(updates = ALL) // open/closedoor checks if door_timer has power, if so it checks if the // linked door is open/closed (by density) then opens it/closes it. @@ -144,7 +144,7 @@ if(C.opened && !C.close()) continue C.locked = TRUE - C.update_icon() + C.update_appearance(updates = ALL) if(desired_crime) var/datum/data/record/R = find_record("name", desired_name, GLOB.data_core.security) @@ -172,7 +172,7 @@ timing = FALSE activation_time = null set_timer(0) - update_icon() + update_appearance(updates = ALL) var/datum/data/record/R = find_record("name", desired_name, GLOB.data_core.security) if(R) R.fields["criminal"] = WANTED_DISCHARGED @@ -190,7 +190,7 @@ if(C.opened) continue C.locked = FALSE - C.update_icon() + C.update_appearance(updates = ALL) desired_crime = null desired_name = null @@ -314,7 +314,8 @@ // if NOPOWER, display blank // if BROKEN, display blue screen of death icon AI uses // if timing=true, run update display function -/obj/machinery/door_timer/update_icon() +/obj/machinery/door_timer/update_appearance(updates = ALL) + . = ..() if(stat & (NOPOWER)) icon_state = "frame" return diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 85a2e91e470f..56aa007bd92e 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -3,6 +3,7 @@ desc = "It opens and closes." icon = 'icons/obj/doors/Doorint.dmi' icon_state = "door1" + base_icon_state = "door" opacity = 1 density = TRUE move_resist = MOVE_FORCE_VERY_STRONG @@ -294,11 +295,9 @@ /obj/machinery/door/proc/unelectrify() secondsElectrified = MACHINE_NOT_ELECTRIFIED -/obj/machinery/door/update_icon() - if(density) - icon_state = "door1" - else - icon_state = "door0" +/obj/machinery/door/update_icon_state() + icon_state = "[base_icon_state][density]" + return ..() /obj/machinery/door/proc/do_animate(animation) switch(animation) @@ -329,7 +328,7 @@ density = FALSE sleep(open_speed) layer = initial(layer) - update_icon() + update_appearance(updates = ALL) set_opacity(0) operating = FALSE air_update_turf(1) @@ -360,7 +359,7 @@ sleep(open_speed) density = TRUE sleep(open_speed) - update_icon() + update_appearance(UPDATE_ICON) if(visible && !glass) set_opacity(1) operating = FALSE diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index 511d85a947c4..156d26fe8bd8 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -36,6 +36,10 @@ setDir(direct) CalculateAffectingAreas() + if(prob(0.004) && icon == 'icons/obj/doors/doorfireglass.dmi') + base_icon_state = "sus" + desc += " This one looks a bit sus..." + /obj/machinery/door/firedoor/examine(mob/user) . = ..() if(!density) @@ -157,7 +161,7 @@ if(W.use_tool(src, user, 40, volume=50)) welded = !welded to_chat(user, span_danger("[user] [welded?"welds":"unwelds"] [src]."), span_notice("You [welded ? "weld" : "unweld"] [src].")) - update_icon() + update_appearance(updates = ALL) /obj/machinery/door/firedoor/try_to_crowbar(obj/item/I, mob/user) if(welded || operating) @@ -211,22 +215,20 @@ /obj/machinery/door/firedoor/do_animate(animation) switch(animation) if("opening") - flick("door_opening", src) + flick("[base_icon_state]_opening", src) if("closing") - flick("door_closing", src) + flick("[base_icon_state]_closing", src) -/obj/machinery/door/firedoor/update_icon() - cut_overlays() - if(density) - icon_state = "door_closed" - if(welded) - add_overlay("welded") - else - icon_state = "door_open" - if(welded) - add_overlay("welded_open") +/obj/machinery/door/firedoor/update_icon_state() + . = ..() + icon_state = "[base_icon_state]_[density ? "closed" : "open"]" SSdemo.mark_dirty(src) +/obj/machinery/door/firedoor/update_overlays() + . = ..() + if(welded) + . += density ? "welded" : "welded_open" + /obj/machinery/door/firedoor/open() . = ..() latetoggle() @@ -294,7 +296,7 @@ if(!(flags_1 & NODECONSTRUCT_1) && disassembled) var/obj/structure/firelock_frame/F = new assemblytype(get_turf(src)) F.constructionStep = CONSTRUCTION_PANEL_OPEN - F.update_icon() + F.update_appearance(updates = ALL) qdel(src) @@ -317,6 +319,7 @@ /obj/machinery/door/firedoor/border_only/closed icon_state = "door_closed" + base_icon_state = "door_closed" opacity = TRUE density = TRUE @@ -472,8 +475,8 @@ if(CONSTRUCTION_NOCIRCUIT) . += span_notice("There are no firelock electronics in the frame. The frame could be cut apart.") -/obj/structure/firelock_frame/update_icon() - ..() +/obj/structure/firelock_frame/update_appearance(updates = ALL) + . = ..() icon_state = "frame[constructionStep]" /obj/structure/firelock_frame/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) @@ -503,7 +506,7 @@ user.visible_message(span_notice("[user] pries out a metal plate from [src], exposing the wires."), \ span_notice("You remove the cover plate from [src], exposing the wires.")) constructionStep = CONSTRUCTION_WIRES_EXPOSED - update_icon() + update_appearance(updates = ALL) return if(C.tool_behaviour == TOOL_WRENCH) for(var/obj/machinery/door/firedoor/door in get_turf(src)) //go through each obj/machinery/door/firedoor in the turf @@ -574,7 +577,7 @@ span_notice("You remove the wiring from [src], exposing the circuit board.")) new/obj/item/stack/cable_coil(get_turf(src), 5) constructionStep = CONSTRUCTION_GUTTED - update_icon() + update_appearance(updates = ALL) return if(C.tool_behaviour == TOOL_CROWBAR) C.play_tool_sound(src) @@ -588,7 +591,7 @@ user.visible_message(span_notice("[user] pries the metal plate into [src]."), \ span_notice("You pry [src]'s cover plate into place, hiding the wires.")) constructionStep = CONSTRUCTION_PANEL_OPEN - update_icon() + update_appearance(updates = ALL) return if(CONSTRUCTION_GUTTED) if(C.tool_behaviour == TOOL_CROWBAR) @@ -602,7 +605,7 @@ span_notice("You remove the circuit board from [src].")) new /obj/item/electronics/firelock(drop_location()) constructionStep = CONSTRUCTION_NOCIRCUIT - update_icon() + update_appearance(updates = ALL) return if(istype(C, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/B = C @@ -620,7 +623,7 @@ playsound(get_turf(src), 'sound/items/deconstruct.ogg', 50, 1) B.use(5) constructionStep = CONSTRUCTION_WIRES_EXPOSED - update_icon() + update_appearance(updates = ALL) return if(CONSTRUCTION_NOCIRCUIT) if(C.tool_behaviour == TOOL_WELDER) @@ -653,7 +656,7 @@ span_notice("You insert and secure [C].")) playsound(get_turf(src), 'sound/items/deconstruct.ogg', 50, 1) constructionStep = CONSTRUCTION_GUTTED - update_icon() + update_appearance(updates = ALL) return if(istype(C, /obj/item/electroadaptive_pseudocircuit)) var/obj/item/electroadaptive_pseudocircuit/P = C @@ -662,7 +665,7 @@ user.visible_message(span_notice("[user] fabricates a circuit and places it into [src]."), \ span_notice("You adapt a firelock circuit and slot it into the assembly.")) constructionStep = CONSTRUCTION_GUTTED - update_icon() + update_appearance(updates = ALL) return return ..() @@ -677,7 +680,7 @@ user.visible_message(span_notice("[user] fabricates a circuit and places it into [src]."), \ span_notice("You adapt a firelock circuit and slot it into the assembly.")) constructionStep = CONSTRUCTION_GUTTED - update_icon() + update_appearance(updates = ALL) return TRUE return FALSE diff --git a/code/game/machinery/doors/passworddoor.dm b/code/game/machinery/doors/passworddoor.dm index ee8a4ec57627..e3d55b528382 100644 --- a/code/game/machinery/doors/passworddoor.dm +++ b/code/game/machinery/doors/passworddoor.dm @@ -42,7 +42,8 @@ else do_animate("deny") -/obj/machinery/door/password/update_icon() +/obj/machinery/door/password/update_appearance(updates = ALL) + . = ..() if(density) icon_state = "closed" else @@ -70,4 +71,4 @@ return /obj/machinery/door/password/ex_act(severity, target) - return \ No newline at end of file + return diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm index 1f692c99fb13..623a47bc208d 100644 --- a/code/game/machinery/doors/poddoor.dm +++ b/code/game/machinery/doors/poddoor.dm @@ -89,7 +89,8 @@ flick("closing", src) playsound(src, 'sound/machines/blastdoor.ogg', 30, 1) -/obj/machinery/door/poddoor/update_icon() +/obj/machinery/door/poddoor/update_appearance(updates = ALL) + . = ..() if(density) icon_state = "closed" else diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index 5a85886a7616..4d82274e5850 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -36,6 +36,7 @@ debris += new /obj/item/stack/rods(src, rods) if(cable) debris += new /obj/item/stack/cable_coil(src, cable) + update_appearance(UPDATE_ICON) /obj/machinery/door/window/Destroy() density = FALSE @@ -45,13 +46,46 @@ electronics = null return ..() -/obj/machinery/door/window/update_icon() - if(density) - icon_state = base_state - else - icon_state = "[base_state]open" +/obj/machinery/door/window/update_appearance(updates = ALL) + . = ..() SSdemo.mark_dirty(src) +/obj/machinery/door/window/update_icon_state() + . = ..() + icon_state = "[base_state][density ? null : "open"]" + + if(hasPower() && unres_sides) + set_light(l_range = 2, l_power = 1) + return + + set_light(l_range = 0) + +/obj/machinery/door/window/update_overlays() + . = ..() + + if(!hasPower() || !unres_sides) + return + + switch(dir) + if(NORTH,SOUTH) + if(unres_sides & NORTH) + var/image/side_overlay = image(icon='icons/obj/doors/airlocks/station/overlays.dmi', icon_state="unres_n") + side_overlay.pixel_y = dir == NORTH ? 31 : 6 + . += side_overlay + if(unres_sides & SOUTH) + var/image/side_overlay = image(icon='icons/obj/doors/airlocks/station/overlays.dmi', icon_state="unres_s") + side_overlay.pixel_y = dir == NORTH ? -6 : -31 + . += side_overlay + if(EAST,WEST) + if(unres_sides & EAST) + var/image/side_overlay = image(icon='icons/obj/doors/airlocks/station/overlays.dmi', icon_state="unres_e") + side_overlay.pixel_x = dir == EAST ? 31 : 6 + . += side_overlay + if(unres_sides & WEST) + var/image/side_overlay = image(icon='icons/obj/doors/airlocks/station/overlays.dmi', icon_state="unres_w") + side_overlay.pixel_x = dir == EAST ? -6 : -31 + . += side_overlay + /obj/machinery/door/window/proc/open_and_close() if(!open()) return @@ -261,7 +295,7 @@ WA.state= "02" WA.setDir(dir) WA.ini_dir = dir - WA.update_icon() + WA.update_appearance(updates = ALL) WA.created_name = name if(obj_flags & EMAGGED) diff --git a/code/game/machinery/doppler_array.dm b/code/game/machinery/doppler_array.dm index 3047bcf6a838..67e4ba6d8edb 100644 --- a/code/game/machinery/doppler_array.dm +++ b/code/game/machinery/doppler_array.dm @@ -81,7 +81,8 @@ GLOBAL_LIST_EMPTY(doppler_arrays) return FALSE return ..() -/obj/machinery/doppler_array/update_icon() +/obj/machinery/doppler_array/update_appearance(updates = ALL) + . = ..() if(stat & BROKEN) icon_state = "[initial(icon_state)]-broken" else if(powered()) diff --git a/code/game/machinery/droneDispenser.dm b/code/game/machinery/droneDispenser.dm index 671516ebfb73..abf2e341f77d 100644 --- a/code/game/machinery/droneDispenser.dm +++ b/code/game/machinery/droneDispenser.dm @@ -135,7 +135,7 @@ playsound(src, work_sound, 50, 1) mode = DRONE_PRODUCTION timer = world.time + production_time - update_icon() + update_appearance(updates = ALL) if(DRONE_PRODUCTION) materials.use_materials(using_materials) @@ -152,7 +152,7 @@ mode = DRONE_RECHARGING timer = world.time + cooldownTime - update_icon() + update_appearance(updates = ALL) if(DRONE_RECHARGING) if(recharge_sound) @@ -161,7 +161,7 @@ visible_message(span_notice("[src] [recharge_message]")) mode = DRONE_READY - update_icon() + update_appearance(updates = ALL) /obj/machinery/droneDispenser/proc/count_shells() . = 0 @@ -169,7 +169,8 @@ if(istype(a, dispense_type)) .++ -/obj/machinery/droneDispenser/update_icon() +/obj/machinery/droneDispenser/update_appearance(updates = ALL) + . = ..() if(stat & (BROKEN|NOPOWER)) icon_state = icon_off else if(mode == DRONE_RECHARGING) @@ -207,7 +208,7 @@ stat &= ~BROKEN obj_integrity = max_integrity - update_icon() + update_appearance(updates = ALL) else return ..() diff --git a/code/game/machinery/electrolyzer.dm b/code/game/machinery/electrolyzer.dm index 5a71154aecbc..68d2ba9449a4 100644 --- a/code/game/machinery/electrolyzer.dm +++ b/code/game/machinery/electrolyzer.dm @@ -32,7 +32,7 @@ . = ..() if(ispath(cell)) cell = new cell(src) - update_icon() + update_appearance(updates = ALL) /obj/machinery/electrolyzer/Destroy() if(cell) @@ -54,37 +54,40 @@ else . += "There is no power cell installed." -/obj/machinery/electrolyzer/update_icon() - cut_overlays() +/obj/machinery/electrolyzer/update_icon_state() icon_state = "electrolyzer-[on ? "[mode]" : "off"]" + return ..() + +/obj/machinery/electrolyzer/update_overlays() + . = ..() if(panel_open) - add_overlay("electrolyzer-open") + . += "electrolyzer-open" /obj/machinery/electrolyzer/process(delta_time) if((stat & (BROKEN|MAINT)) && on) on = FALSE if(!on) active_power_usage = 0 - update_icon() + update_appearance(updates = ALL) return PROCESS_KILL if((stat & NOPOWER) && (!cell || cell.charge <= 0)) on = FALSE - update_icon() + update_appearance(updates = ALL) return FALSE var/turf/L = loc if(!istype(L)) if(mode != ELECTROLYZER_MODE_STANDBY) mode = ELECTROLYZER_MODE_STANDBY - update_icon() + update_appearance(updates = ALL) return var/newMode = on ? ELECTROLYZER_MODE_WORKING : ELECTROLYZER_MODE_STANDBY //change the mode to working if the machine is on if(mode != newMode) //check if the mode is set correctly mode = newMode - update_icon() + update_appearance(updates = ALL) if(mode == ELECTROLYZER_MODE_STANDBY) return @@ -114,7 +117,7 @@ if (!cell.use((5 * proportion) / (efficiency + workingPower))) //automatically turn off machine when cell depletes on = FALSE - update_icon() + update_appearance(updates = ALL) working = FALSE else active_power_usage = (5 * proportion) / (efficiency + workingPower) @@ -167,7 +170,7 @@ if(I.tool_behaviour == TOOL_SCREWDRIVER) panel_open = !panel_open user.visible_message(span_notice("\The [user] [panel_open ? "opens" : "closes"] the hatch on \the [src]."), span_notice("You [panel_open ? "open" : "close"] the hatch on \the [src].")) - update_icon() + update_appearance(updates = ALL) return if(default_deconstruction_crowbar(I)) return @@ -200,7 +203,7 @@ on = !on mode = ELECTROLYZER_MODE_STANDBY usr.visible_message(span_notice("[usr] switches [on ? "on" : "off"] \the [src]."), span_notice("You switch [on ? "on" : "off"] \the [src].")) - update_icon() + update_appearance(updates = ALL) if (on) START_PROCESSING(SSmachines, src) . = TRUE diff --git a/code/game/machinery/embedded_controller/access_controller.dm b/code/game/machinery/embedded_controller/access_controller.dm index 2a19b4055e65..ae51fdcb4644 100644 --- a/code/game/machinery/embedded_controller/access_controller.dm +++ b/code/game/machinery/embedded_controller/access_controller.dm @@ -40,6 +40,7 @@ /obj/machinery/doorButtons/access_button icon = 'icons/obj/airlock_machines.dmi' icon_state = "access_button_standby" + base_icon_state = "access_button" name = "access button" desc = "A button used for the explicit purpose of opening an airlock." var/idDoor @@ -67,7 +68,7 @@ if(controller.stat & NOPOWER) return busy = TRUE - update_icon() + update_appearance(updates = ALL) if(door.density) if(!controller.exteriorAirlock || !controller.interiorAirlock) controller.onlyOpen(door) @@ -82,16 +83,14 @@ /obj/machinery/doorButtons/access_button/proc/not_busy() busy = FALSE - update_icon() + update_appearance(updates = ALL) -/obj/machinery/doorButtons/access_button/update_icon() +/obj/machinery/doorButtons/access_button/update_icon_state() if(stat & NOPOWER) - icon_state = "access_button_off" - else - if(busy) - icon_state = "access_button_cycle" - else - icon_state = "access_button_standby" + icon_state = "[base_icon_state]_off" + return ..() + icon_state = "[base_icon_state]_[busy ? "cycle" : "standby"]" + return ..() /obj/machinery/doorButtons/access_button/removeMe(obj/O) if(O == door) @@ -102,6 +101,7 @@ /obj/machinery/doorButtons/airlock_controller icon = 'icons/obj/airlock_machines.dmi' icon_state = "access_control_standby" + base_icon_state = "access_control" name = "access console" desc = "A small console that can cycle opening between two airlocks." var/obj/machinery/door/airlock/interiorAirlock @@ -148,7 +148,7 @@ /obj/machinery/doorButtons/airlock_controller/proc/onlyOpen(obj/machinery/door/airlock/A) if(A) busy = CLOSING - update_icon() + update_appearance(updates = ALL) openDoor(A) /obj/machinery/doorButtons/airlock_controller/proc/onlyClose(obj/machinery/door/airlock/A) @@ -160,7 +160,7 @@ if(A.density) goIdle() return FALSE - update_icon() + update_appearance(updates = ALL) A.safe = FALSE //Door crushies, manual door after all. Set every time in case someone changed it, safe doors can end up waiting forever. A.unbolt() if(A.close()) @@ -179,7 +179,7 @@ if(exteriorAirlock.density == interiorAirlock.density || !A.density) return busy = CYCLE - update_icon() + update_appearance(updates = ALL) if(A == interiorAirlock) if(closeDoor(exteriorAirlock)) busy = CYCLE_INTERIOR @@ -217,7 +217,7 @@ lostPower = FALSE busy = FALSE if(update) - update_icon() + update_appearance(updates = ALL) updateUsrDialog() /obj/machinery/doorButtons/airlock_controller/process() @@ -243,14 +243,12 @@ else if(A.id_tag == idExterior) exteriorAirlock = A -/obj/machinery/doorButtons/airlock_controller/update_icon() +/obj/machinery/doorButtons/airlock_controller/update_icon_state() if(stat & NOPOWER) icon_state = "access_control_off" - return - if(busy || lostPower) - icon_state = "access_control_process" - else - icon_state = "access_control_standby" + return ..() + icon_state = "[base_icon_state]_[(busy || lostPower) ? "process" : "standby"]" + return ..() /obj/machinery/doorButtons/airlock_controller/ui_interact(mob/user) var/datum/browser/popup = new(user, "computer", name) diff --git a/code/game/machinery/embedded_controller/airlock_controller.dm b/code/game/machinery/embedded_controller/airlock_controller.dm index bb838b650fc2..eeddaae84f7d 100644 --- a/code/game/machinery/embedded_controller/airlock_controller.dm +++ b/code/game/machinery/embedded_controller/airlock_controller.dm @@ -196,6 +196,7 @@ /obj/machinery/embedded_controller/radio/airlock_controller icon = 'icons/obj/airlock_machines.dmi' icon_state = "airlock_control_standby" + base_icon_state = "airlock_control" name = "airlock console" density = FALSE @@ -255,14 +256,9 @@ new_prog.master = src program = new_prog -/obj/machinery/embedded_controller/radio/airlock_controller/update_icon() - if(on && program) - if(program.memory["processing"]) - icon_state = "airlock_control_process" - else - icon_state = "airlock_control_standby" - else - icon_state = "airlock_control_off" +/obj/machinery/embedded_controller/radio/airlock_controller/update_icon_state() + icon_state = "[base_icon_state]_[program?.memory["processing"] ? "process" : "standby"]" + return ..() /obj/machinery/embedded_controller/radio/airlock_controller/return_text() diff --git a/code/game/machinery/embedded_controller/embedded_controller_base.dm b/code/game/machinery/embedded_controller/embedded_controller_base.dm index e923b8a2f7e5..24996bb79d99 100644 --- a/code/game/machinery/embedded_controller/embedded_controller_base.dm +++ b/code/game/machinery/embedded_controller/embedded_controller_base.dm @@ -32,8 +32,6 @@ popup.set_content(return_text()) popup.open() -/obj/machinery/embedded_controller/update_icon() - /obj/machinery/embedded_controller/proc/return_text() /obj/machinery/embedded_controller/proc/post_signal(datum/signal/signal, comm_line) @@ -58,7 +56,7 @@ if(program) program.process(delta_time) - update_icon() + update_appearance(updates = ALL) src.updateDialog() /obj/machinery/embedded_controller/radio diff --git a/code/game/machinery/embedded_controller/simple_vent_controller.dm b/code/game/machinery/embedded_controller/simple_vent_controller.dm index 7679080ea1f9..1bb9ac69dae1 100644 --- a/code/game/machinery/embedded_controller/simple_vent_controller.dm +++ b/code/game/machinery/embedded_controller/simple_vent_controller.dm @@ -54,7 +54,8 @@ new_prog.master = src program = new_prog -/obj/machinery/embedded_controller/radio/simple_vent_controller/update_icon() +/obj/machinery/embedded_controller/radio/simple_vent_controller/update_appearance(updates = ALL) + . = ..() if(on && program) icon_state = "airlock_control_standby" else diff --git a/code/game/machinery/fat_sucker.dm b/code/game/machinery/fat_sucker.dm index 2f77b31a8209..b7ed5685c531 100644 --- a/code/game/machinery/fat_sucker.dm +++ b/code/game/machinery/fat_sucker.dm @@ -30,7 +30,7 @@ /obj/machinery/fat_sucker/Initialize(mapload) . = ..() soundloop = new(list(src), FALSE) - update_icon() + update_appearance(updates = ALL) /obj/machinery/fat_sucker/RefreshParts() ..() @@ -59,7 +59,7 @@ return to_chat(occupant, span_notice("You enter [src]")) addtimer(CALLBACK(src, PROC_REF(start_extracting)), 20, TIMER_OVERRIDE|TIMER_UNIQUE) - update_icon() + update_appearance(updates = ALL) /obj/machinery/fat_sucker/open_machine(mob/user) make_meat() @@ -106,7 +106,8 @@ free_exit = !free_exit to_chat(user, span_notice("Safety hatch [free_exit ? "unlocked" : "locked"].")) -/obj/machinery/fat_sucker/update_icon() +/obj/machinery/fat_sucker/update_appearance(updates = ALL) + . = ..() overlays.Cut() if(!state_open) if(processing) @@ -158,7 +159,7 @@ if(C.nutrition > start_at) processing = TRUE soundloop.start() - update_icon() + update_appearance(updates = ALL) set_light(2, 1, "#ff0000") else say("Subject not fat enough.") @@ -195,7 +196,7 @@ to_chat(user, span_warning("[src] must be closed to [panel_open ? "close" : "open"] its maintenance hatch!")) return if(default_deconstruction_screwdriver(user, icon_state, icon_state, I)) - update_icon() + update_appearance(updates = ALL) return return FALSE diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm index 303562183071..e6667b04be2a 100644 --- a/code/game/machinery/firealarm.dm +++ b/code/game/machinery/firealarm.dm @@ -44,7 +44,7 @@ panel_open = TRUE pixel_x = (dir & 3)? 0 : (dir == 4 ? -24 : 24) pixel_y = (dir & 3)? (dir ==1 ? -24 : 24) : 0 - update_icon() + update_appearance() myarea = get_area(src) LAZYADD(myarea.firealarms, src) @@ -52,31 +52,34 @@ LAZYREMOVE(myarea.firealarms, src) return ..() -/obj/machinery/firealarm/update_icon() - cut_overlays() +/obj/machinery/firealarm/update_appearance(updates) + . = ..() SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays) +/obj/machinery/firealarm/update_icon_state() if(panel_open) icon_state = "fire_b[buildstage]" - return - + return ..() if(stat & BROKEN) icon_state = "firex" - return - + return ..() icon_state = "fire0" + return ..() +/obj/machinery/firealarm/update_overlays() + . = ..() if(stat & NOPOWER) return - add_overlay("fire_overlay") + if(panel_open) + return if(is_station_level(z)) - add_overlay("fire_[GLOB.security_level]") + . += "fire_[GLOB.security_level]" SSvis_overlays.add_vis_overlay(src, icon, "fire_[GLOB.security_level]", layer, plane, dir) SSvis_overlays.add_vis_overlay(src, icon, "fire_[GLOB.security_level]", layer, EMISSIVE_PLANE, dir) else - add_overlay("fire_[SEC_LEVEL_GREEN]") + . += "fire_[SEC_LEVEL_GREEN]" SSvis_overlays.add_vis_overlay(src, icon, "fire_[SEC_LEVEL_GREEN]", layer, plane, dir) SSvis_overlays.add_vis_overlay(src, icon, "fire_[SEC_LEVEL_GREEN]", layer, EMISSIVE_PLANE, dir) @@ -84,15 +87,15 @@ A = A.loc if(!detecting || !A.fire) - add_overlay("fire_off") + . += "fire_off" SSvis_overlays.add_vis_overlay(src, icon, "fire_off", layer, plane, dir) SSvis_overlays.add_vis_overlay(src, icon, "fire_off", layer, EMISSIVE_PLANE, dir) else if(obj_flags & EMAGGED) - add_overlay("fire_emagged") + . += "fire_emagged" SSvis_overlays.add_vis_overlay(src, icon, "fire_emagged", layer, plane, dir) SSvis_overlays.add_vis_overlay(src, icon, "fire_emagged", layer, EMISSIVE_PLANE, dir) else - add_overlay("fire_on") + . += "fire_on" SSvis_overlays.add_vis_overlay(src, icon, "fire_on", layer, plane, dir) SSvis_overlays.add_vis_overlay(src, icon, "fire_on", layer, EMISSIVE_PLANE, dir) @@ -109,7 +112,7 @@ if(obj_flags & EMAGGED) return obj_flags |= EMAGGED - update_icon() + update_appearance(UPDATE_ICON) if(user) user.visible_message(span_warning("Sparks fly out of [src]!"), span_notice("You emag [src], disabling its thermal sensors.")) @@ -161,7 +164,7 @@ W.play_tool_sound(src) panel_open = !panel_open to_chat(user, span_notice("The wires have been [panel_open ? "exposed" : "unexposed"].")) - update_icon() + update_appearance() return if(panel_open) @@ -194,7 +197,7 @@ W.play_tool_sound(src) new /obj/item/stack/cable_coil(user.loc, 5) to_chat(user, span_notice("You cut the wires from \the [src].")) - update_icon() + update_appearance() return else if(W.force) //hit and turn it on @@ -213,7 +216,7 @@ coil.use(5) buildstage = 2 to_chat(user, span_notice("You wire \the [src].")) - update_icon() + update_appearance() return else if(W.tool_behaviour == TOOL_CROWBAR) @@ -228,14 +231,14 @@ to_chat(user, span_notice("You pry out the circuit.")) new /obj/item/electronics/firealarm(user.loc) buildstage = 0 - update_icon() + update_appearance() return if(0) if(istype(W, /obj/item/electronics/firealarm)) to_chat(user, span_notice("You insert the circuit.")) qdel(W) buildstage = 1 - update_icon() + update_appearance() return else if(istype(W, /obj/item/electroadaptive_pseudocircuit)) @@ -245,7 +248,7 @@ user.visible_message(span_notice("[user] fabricates a circuit and places it into [src]."), \ span_notice("You adapt a fire alarm circuit and slot it into the assembly.")) buildstage = 1 - update_icon() + update_appearance() return else if(W.tool_behaviour == TOOL_WRENCH) @@ -271,7 +274,7 @@ user.visible_message(span_notice("[user] fabricates a circuit and places it into [src]."), \ span_notice("You adapt a fire alarm circuit and slot it into the assembly.")) buildstage = 1 - update_icon() + update_appearance() return TRUE return FALSE @@ -310,10 +313,9 @@ return // do nothing if we're already active if(fire) set_light(l_power = 0.8) - update_icon() else set_light(l_power = 0) - update_icon() + update_appearance() /* * Return of the Return of the Party button diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm index 425f1ce08590..796ee51775e8 100644 --- a/code/game/machinery/flasher.dm +++ b/code/game/machinery/flasher.dm @@ -46,14 +46,9 @@ return FALSE return ..() -/obj/machinery/flasher/update_icon() - if (powered()) - if(bulb.burnt_out) - icon_state = "[base_state]1-p" - else - icon_state = "[base_state]1" - else - icon_state = "[base_state]1-p" +/obj/machinery/flasher/update_icon_state() + icon_state = "[base_icon_state]1[(bulb?.burnt_out || !powered()) ? "-p" : null]" + return ..() //Don't want to render prison breaks impossible /obj/machinery/flasher/attackby(obj/item/W, mob/user, params) diff --git a/code/game/machinery/gulag_processor.dm b/code/game/machinery/gulag_processor.dm index cfa0ccdcedb4..0f7036d6e4d3 100644 --- a/code/game/machinery/gulag_processor.dm +++ b/code/game/machinery/gulag_processor.dm @@ -62,7 +62,7 @@ GLOBAL_VAR_INIT(gulag_required_items, typecacheof(list( /obj/machinery/gulag_processor/power_change() ..() - update_icon() + update_appearance(updates = ALL) /obj/machinery/gulag_processor/interact(mob/user) . = ..() @@ -73,7 +73,7 @@ GLOBAL_VAR_INIT(gulag_required_items, typecacheof(list( /obj/machinery/gulag_processor/attackby(obj/item/I, mob/user) if(!occupant && default_deconstruction_screwdriver(user, "[icon_state]", "[icon_state]",I)) - update_icon() + update_appearance(updates = ALL) return if(default_deconstruction_crowbar(I)) @@ -94,7 +94,8 @@ GLOBAL_VAR_INIT(gulag_required_items, typecacheof(list( return ..() -/obj/machinery/gulag_processor/update_icon() +/obj/machinery/gulag_processor/update_appearance(updates = ALL) + . = ..() icon_state = initial(icon_state) + (state_open ? "_open" : "") //no power or maintenance if(stat & (NOPOWER|BROKEN)) diff --git a/code/game/machinery/gulag_teleporter.dm b/code/game/machinery/gulag_teleporter.dm index 7291c8ea0d93..76f6c159b23a 100644 --- a/code/game/machinery/gulag_teleporter.dm +++ b/code/game/machinery/gulag_teleporter.dm @@ -11,6 +11,7 @@ The console is located at computer/gulag_teleporter.dm desc = "A bluespace teleporter used for teleporting prisoners to the labor camp." icon = 'icons/obj/machines/implantchair.dmi' icon_state = "implantchair" + base_icon_state = "implantchair" state_open = FALSE density = TRUE use_power = IDLE_POWER_USE @@ -53,7 +54,7 @@ The console is located at computer/gulag_teleporter.dm /obj/machinery/gulag_teleporter/attackby(obj/item/I, mob/user) if(!occupant && default_deconstruction_screwdriver(user, "[icon_state]", "[icon_state]",I)) - update_icon() + update_appearance(updates = ALL) return if(default_deconstruction_crowbar(I)) @@ -64,23 +65,23 @@ The console is located at computer/gulag_teleporter.dm return ..() -/obj/machinery/gulag_teleporter/update_icon() - icon_state = initial(icon_state) + (state_open ? "_open" : "") +/obj/machinery/gulag_teleporter/update_icon_state() + icon_state = "[base_icon_state][state_open ? "_open" : null]" //no power or maintenance if(stat & (NOPOWER|BROKEN)) icon_state += "_unpowered" if((stat & MAINT) || panel_open) icon_state += "_maintenance" - return + return ..() if((stat & MAINT) || panel_open) icon_state += "_maintenance" - return + return ..() //running and someone in there if(occupant) icon_state += "_occupied" - return + return ..() /obj/machinery/gulag_teleporter/relaymove(mob/user) diff --git a/code/game/machinery/harvester.dm b/code/game/machinery/harvester.dm index 8ded6b016160..535b6221c87c 100644 --- a/code/game/machinery/harvester.dm +++ b/code/game/machinery/harvester.dm @@ -4,6 +4,7 @@ density = TRUE icon = 'icons/obj/machines/harvester.dmi' icon_state = "harvester" + base_icon_state = "harvester" verb_say = "states" state_open = FALSE idle_power_usage = 50 @@ -11,6 +12,7 @@ light_color = LIGHT_COLOR_BLUE var/interval = 20 var/harvesting = FALSE + var/warming_up = FALSE var/list/operation_order = list() //Order of wich we harvest limbs. var/allow_clothing = FALSE var/allow_living = FALSE @@ -27,21 +29,24 @@ max_time -= L.rating interval = max(max_time,1) -/obj/machinery/harvester/update_icon(warming_up) - if(warming_up) - icon_state = initial(icon_state)+"-charging" - return +/obj/machinery/harvester/update_icon_state() if(state_open) - icon_state = initial(icon_state)+"-open" - else if(harvesting) - icon_state = initial(icon_state)+"-active" - else - icon_state = initial(icon_state) + icon_state = "[base_icon_state]-open" + return ..() + if(warming_up) + icon_state = "[base_icon_state]-charging" + return ..() + if(harvesting) + icon_state = "[base_icon_state]-active" + return ..() + icon_state = base_icon_state + return ..() /obj/machinery/harvester/open_machine(drop = TRUE) if(panel_open) return . = ..() + warming_up = FALSE harvesting = FALSE /obj/machinery/harvester/attack_hand(mob/user) @@ -84,14 +89,16 @@ return var/mob/living/carbon/C = occupant operation_order = reverseList(C.bodyparts) //Chest and head are first in bodyparts, so we invert it to make them suffer more + warming_up = TRUE harvesting = TRUE visible_message(span_notice("The [name] begins warming up!")) say("Initializing harvest protocol.") - update_icon(TRUE) + update_appearance(UPDATE_ICON, TRUE) addtimer(CALLBACK(src, PROC_REF(harvest)), interval) /obj/machinery/harvester/proc/harvest() - update_icon() + warming_up = FALSE + update_appearance(updates = ALL) if(!harvesting || state_open || !powered(AREA_USAGE_EQUIP) || !occupant || !iscarbon(occupant)) return playsound(src, 'sound/machines/juicer.ogg', 20, 1) @@ -115,6 +122,7 @@ addtimer(CALLBACK(src, PROC_REF(harvest)), interval) /obj/machinery/harvester/proc/end_harvesting() + warming_up = FALSE harvesting = FALSE open_machine() say("Subject has been successfully harvested.") diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index 1e1e6157e2f5..3757cacf67aa 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -33,6 +33,7 @@ GLOBAL_LIST_EMPTY(holopads) name = "holopad" desc = "It's a floor-mounted device for projecting holographic images." icon_state = "holopad0" + base_icon_state = "holopad0" layer = LOW_OBJ_LAYER plane = FLOOR_PLANE flags_1 = HEAR_1 @@ -399,7 +400,7 @@ obj/machinery/holopad/secure/Initialize(mapload) playsound(src, 'sound/machines/twobeep.ogg', 100) //bring, bring! ringing = TRUE - update_icon() + update_appearance(UPDATE_ICON_STATE) /obj/machinery/holopad/proc/activate_holo(mob/living/user) var/mob/living/silicon/ai/AI = user @@ -467,16 +468,18 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ set_light_on(TRUE) else set_light_on(FALSE) - update_icon() + update_appearance() -/obj/machinery/holopad/update_icon() +/obj/machinery/holopad/update_icon_state() var/total_users = LAZYLEN(masters) + LAZYLEN(holo_calls) if(ringing) - icon_state = "holopad_ringing" - else if(total_users || replay_mode) - icon_state = "holopad1" - else - icon_state = "holopad0" + icon_state = "[base_icon_state]_ringing" + return ..() + if(panel_open) + icon_state = "[base_icon_state]_open" + return ..() + icon_state = "[base_icon_state][(total_users || replay_mode) ? 1 : 0]" + return ..() /obj/machinery/holopad/proc/set_holo(mob/living/user, obj/effect/overlay/holo_pad_hologram/h) LAZYSET(masters, user, h) diff --git a/code/game/machinery/holosign.dm b/code/game/machinery/holosign.dm index 70b15d62e138..6f5cb74d25c5 100644 --- a/code/game/machinery/holosign.dm +++ b/code/game/machinery/holosign.dm @@ -14,9 +14,10 @@ lit = FALSE else lit = !lit - update_icon() + update_appearance(updates = ALL) -/obj/machinery/holosign/update_icon() +/obj/machinery/holosign/update_appearance(updates = ALL) + . = ..() if(!lit) icon_state = initial(icon_state) set_light(0) @@ -27,7 +28,7 @@ /obj/machinery/holosign/power_change() if(!is_operational()) lit = FALSE - update_icon() + update_appearance(updates = ALL) /obj/machinery/holosign/surgery name = "surgery holosign" diff --git a/code/game/machinery/igniter.dm b/code/game/machinery/igniter.dm index 8ffe8f0b9eaa..737b29aab5c2 100644 --- a/code/game/machinery/igniter.dm +++ b/code/game/machinery/igniter.dm @@ -39,7 +39,7 @@ on = !(on) else on = FALSE - update_icon() + update_appearance(updates = ALL) /obj/machinery/igniter/attackby(obj/item/O, mob/user, params) if(default_deconstruction_screwdriver(user, icon_state, icon_state, O)) @@ -56,7 +56,7 @@ /obj/machinery/igniter/process() //ugh why is this even in process()? if(safety || panel_open) on = FALSE - update_icon() + update_appearance(updates = ALL) return if (src.on && !(stat & NOPOWER)) var/turf/location = src.loc @@ -69,7 +69,8 @@ wires = new /datum/wires/igniter(src) icon_state = "igniter[on]" -/obj/machinery/igniter/update_icon() +/obj/machinery/igniter/update_appearance(updates = ALL) + . = ..() if(stat & NOPOWER) icon_state = "igniter0" else @@ -101,7 +102,8 @@ QDEL_NULL(spark_system) return ..() -/obj/machinery/sparker/update_icon() +/obj/machinery/sparker/update_appearance(updates = ALL) + . = ..() if(disable) icon_state = "[initial(icon_state)]-d" else if(powered()) @@ -122,7 +124,7 @@ user.visible_message(span_notice("[user] has disabled \the [src]!"), span_notice("You disable the connection to \the [src].")) if (!src.disable) user.visible_message(span_notice("[user] has reconnected \the [src]!"), span_notice("You fix the connection to \the [src].")) - update_icon() + update_appearance(updates = ALL) else return ..() diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm index 4985dcf70aea..76433e46f3ae 100644 --- a/code/game/machinery/iv_drip.dm +++ b/code/game/machinery/iv_drip.dm @@ -6,6 +6,7 @@ desc = "An IV drip with an advanced infusion pump that can both drain blood into and inject liquids from attached containers. Blood packs are processed at an accelerated rate." icon = 'icons/obj/iv_drip.dmi' icon_state = "iv_drip" + base_icon_state = "iv_drip" anchored = FALSE mouse_drag_pointer = MOUSE_ACTIVE_POINTER var/mob/living/carbon/attached @@ -18,54 +19,40 @@ /obj/machinery/iv_drip/Initialize(mapload) . = ..() - update_icon() + update_appearance(UPDATE_ICON) /obj/machinery/iv_drip/Destroy() attached = null QDEL_NULL(beaker) return ..() -/obj/machinery/iv_drip/update_icon() +/obj/machinery/iv_drip/update_icon_state() if(attached) - if(mode) - icon_state = "injecting" - else - icon_state = "donating" + icon_state = "[base_icon_state]_[mode ? "injecting" : "donating"]" else - if(mode) - icon_state = "injectidle" - else - icon_state = "donateidle" + icon_state = "[base_icon_state]_[mode ? "injectidle" : "donateidle"]" + return ..() - cut_overlays() +/obj/machinery/iv_drip/update_overlays() + . = ..() - if(beaker) - if(attached) - add_overlay("beakeractive") - else - add_overlay("beakeridle") - if(beaker.reagents.total_volume) - var/mutable_appearance/filling_overlay = mutable_appearance('icons/obj/iv_drip.dmi', "reagent") - - var/percent = round((beaker.reagents.total_volume / beaker.volume) * 100) - switch(percent) - if(0 to 9) - filling_overlay.icon_state = "reagent0" - if(10 to 24) - filling_overlay.icon_state = "reagent10" - if(25 to 49) - filling_overlay.icon_state = "reagent25" - if(50 to 74) - filling_overlay.icon_state = "reagent50" - if(75 to 79) - filling_overlay.icon_state = "reagent75" - if(80 to 90) - filling_overlay.icon_state = "reagent80" - if(91 to INFINITY) - filling_overlay.icon_state = "reagent100" - - filling_overlay.color = list("#0000", "#0000", "#0000", "#000f", mix_color_from_reagents(beaker.reagents.reagent_list)) - add_overlay(filling_overlay) + if(!beaker) + return + + . += attached ? "beakeractive" : "beakeridle" + var/datum/reagents/container_reagents = beaker.reagents + if(!container_reagents) + return + +/* var/threshold = null + for(var/i in 1 to fill_icon_thresholds.len) + if(ROUND_UP(100 * container_reagents.total_volume / container_reagents.maximum_volume) >= fill_icon_thresholds[i]) + threshold = i + if(threshold) + var/fill_name = "[fill_icon_state][fill_icon_thresholds[threshold]]" + var/mutable_appearance/filling = mutable_appearance(icon, fill_name) + filling.color = mix_color_from_reagents(container_reagents.reagent_list) + . += filling*/ /obj/machinery/iv_drip/MouseDrop(mob/living/target) . = ..() @@ -75,7 +62,7 @@ if(attached) visible_message(span_warning("[attached] is detached from [src].")) attached = null - update_icon() + update_appearance(UPDATE_ICON) return if(!target.has_dna()) @@ -89,7 +76,7 @@ add_fingerprint(usr) attached = target START_PROCESSING(SSmachines, src) - update_icon() + update_appearance(UPDATE_ICON) else to_chat(usr, span_warning("There's nothing attached to the IV drip!")) @@ -105,7 +92,7 @@ to_chat(user, span_notice("You attach [W] to [src].")) user.log_message("attached a [W] to [src] at [AREACOORD(src)] containing ([beaker.reagents.log_list()])", LOG_ATTACK) add_fingerprint(user) - update_icon() + update_appearance(UPDATE_ICON) return else if(istype(W,/obj/item/screwdriver)) return @@ -125,7 +112,7 @@ to_chat(attached, span_userdanger("The IV drip needle is ripped out of you!")) attached.apply_damage(3, BRUTE, pick(BODY_ZONE_R_ARM, BODY_ZONE_L_ARM)) attached = null - update_icon() + update_appearance(UPDATE_ICON) return PROCESS_KILL if(beaker) @@ -139,7 +126,7 @@ var/fraction = min(transfer_amount/beaker.reagents.total_volume, 1) //the fraction that is transfered of the total volume beaker.reagents.reaction(attached, INJECT, fraction, FALSE) //make reagents reacts, but don't spam messages beaker.reagents.trans_to(attached, transfer_amount * delta_time * 0.5) - update_icon() + update_appearance(UPDATE_ICON) // Take blood else @@ -156,7 +143,7 @@ visible_message("[src] beeps loudly.") playsound(loc, 'sound/machines/twobeep_high.ogg', 50, 1) attached.transfer_blood_to(beaker, amount) - update_icon() + update_appearance(UPDATE_ICON) /obj/machinery/iv_drip/attack_hand(mob/user) . = ..() @@ -167,7 +154,7 @@ if(attached) visible_message("[attached] is detached from [src]") attached = null - update_icon() + update_appearance(UPDATE_ICON) return else if(beaker) eject_beaker(user) @@ -188,7 +175,7 @@ if(beaker) beaker.forceMove(drop_location()) beaker = null - update_icon() + update_appearance(UPDATE_ICON) /obj/machinery/iv_drip/verb/toggle_mode() set category = "Object" @@ -203,7 +190,7 @@ return mode = !mode to_chat(usr, "The IV drip is now [mode ? "injecting" : "taking blood"].") - update_icon() + update_appearance(UPDATE_ICON) /obj/machinery/iv_drip/examine(mob/user) . = ..() @@ -245,11 +232,8 @@ can_convert = FALSE /obj/machinery/iv_drip/saline/Initialize(mapload) - . = ..() - beaker = new /obj/item/reagent_containers/glass/saline(src) - -/obj/machinery/iv_drip/saline/update_icon() - return + AddElement(/datum/element/update_icon_blocker) + . = ..() /obj/machinery/iv_drip/saline/eject_beaker() return diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm index 1e4f95bdba62..19c1667622cc 100644 --- a/code/game/machinery/lightswitch.dm +++ b/code/game/machinery/lightswitch.dm @@ -3,6 +3,7 @@ name = "light switch" icon = 'icons/obj/power.dmi' icon_state = "light-p" + base_icon_state = "light-p" desc = "Make dark." power_channel = AREA_USAGE_LIGHT @@ -25,15 +26,26 @@ if(!name) name = "light switch ([area.name])" - update_icon() + update_appearance(updates = ALL) -/obj/machinery/light_switch/update_icon() - SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays) - if(!(stat & NOPOWER)) - if(area.lightswitch) - SSvis_overlays.add_vis_overlay(src, icon, "light1", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir) - else - SSvis_overlays.add_vis_overlay(src, icon, "light0", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir) +/obj/machinery/light_switch/update_appearance(updates=ALL) + . = ..() + luminosity = (stat & NOPOWER) ? 0 : 1 + +/obj/machinery/light_switch/update_icon_state() + set_light(area.lightswitch ? 0 : light_range) + icon_state = "[base_icon_state]" + if(stat & NOPOWER) + icon_state += "-nopower" + return ..() + icon_state += "[area.lightswitch ? "-on" : "-off"]" + return ..() + +/obj/machinery/light_switch/update_overlays() + . = ..() + if(stat & NOPOWER) + return ..() +// . += emissive_appearance(icon, "[base_icon_state]-emissive[area.lightswitch ? "-on" : "-off"]", src, alpha = src.alpha) /obj/machinery/light_switch/examine(mob/user) . = ..() @@ -47,10 +59,10 @@ . = ..() area.lightswitch = !area.lightswitch - area.update_icon() + area.update_appearance(updates = ALL) for(var/obj/machinery/light_switch/L in area) - L.update_icon() + L.update_appearance(updates = ALL) area.power_change() diff --git a/code/game/machinery/magnet.dm b/code/game/machinery/magnet.dm index f0e96fda4894..3d7782c751c6 100644 --- a/code/game/machinery/magnet.dm +++ b/code/game/machinery/magnet.dm @@ -46,10 +46,11 @@ // update the invisibility and icon /obj/machinery/magnetic_module/hide(intact) invisibility = intact ? INVISIBILITY_MAXIMUM : 0 - update_icon() + update_appearance(updates = ALL) // update the icon_state -/obj/machinery/magnetic_module/update_icon() +/obj/machinery/magnetic_module/update_appearance(updates = ALL) + . = ..() var/state="floor_magnet" var/onstate="" if(!on) @@ -161,7 +162,7 @@ else use_power = NO_POWER_USE - update_icon() + update_appearance(updates = ALL) /obj/machinery/magnetic_module/proc/magnetic_process() // proc that actually does the magneting diff --git a/code/game/machinery/medical_kiosk.dm b/code/game/machinery/medical_kiosk.dm index ab55420206f1..54481583f2a8 100644 --- a/code/game/machinery/medical_kiosk.dm +++ b/code/game/machinery/medical_kiosk.dm @@ -70,7 +70,8 @@ scan_active_4 = FALSE return -/obj/machinery/medical_kiosk/update_icon() +/obj/machinery/medical_kiosk/update_appearance(updates = ALL) + . = ..() if(is_operational()) icon_state = "kiosk_off" else diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm index 22b4e48f2560..de69f35df4ac 100644 --- a/code/game/machinery/navbeacon.dm +++ b/code/game/machinery/navbeacon.dm @@ -72,10 +72,11 @@ // hide the object if turf is intact /obj/machinery/navbeacon/hide(intact) invisibility = intact ? INVISIBILITY_MAXIMUM : 0 - update_icon() + update_appearance(updates = ALL) // update the icon_state -/obj/machinery/navbeacon/update_icon() +/obj/machinery/navbeacon/update_appearance(updates = ALL) + . = ..() var/state="navbeacon[open]" if(invisibility) @@ -94,7 +95,7 @@ user.visible_message("[user] [open ? "opens" : "closes"] the beacon's cover.", span_notice("You [open ? "open" : "close"] the beacon's cover.")) - update_icon() + update_appearance(updates = ALL) else if(I.GetID()) if(open) diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index 1e49c5f35e0f..7ac99eb57113 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -150,7 +150,7 @@ GLOBAL_LIST_EMPTY(allCasters) if(newMessage) for(var/obj/machinery/newscaster/N in GLOB.allCasters) N.newsAlert() - N.update_icon() + N.update_appearance(updates = ALL) /datum/newscaster/feed_network/proc/deleteWanted() wanted_issue.active = 0 @@ -159,7 +159,7 @@ GLOBAL_LIST_EMPTY(allCasters) wanted_issue.scannedUser = null wanted_issue.img = null for(var/obj/machinery/newscaster/NEWSCASTER in GLOB.allCasters) - NEWSCASTER.update_icon() + NEWSCASTER.update_appearance(updates = ALL) /datum/newscaster/feed_network/proc/save_photo(icon/photo) var/photo_file = copytext_char(md5("\icon[photo]"), 1, 6) @@ -183,6 +183,7 @@ GLOBAL_LIST_EMPTY(allCasters) desc = "A standard Nanotrasen-licensed newsfeed handler for use in commercial space stations. All the news you absolutely have no use for, in one place!" icon = 'icons/obj/terminals.dmi' icon_state = "newscaster_normal" + base_icon_state = "newscaster_normal" verb_say = "beeps" verb_ask = "beeps" verb_exclaim = "beeps" @@ -218,7 +219,7 @@ GLOBAL_LIST_EMPTY(allCasters) GLOB.allCasters += src unit_no = GLOB.allCasters.len - update_icon() + update_appearance(updates = ALL) /obj/machinery/newscaster/Destroy() GLOB.allCasters -= src @@ -226,31 +227,43 @@ GLOBAL_LIST_EMPTY(allCasters) picture = null return ..() -/obj/machinery/newscaster/update_icon() - cut_overlays() +/obj/machinery/newscaster/update_appearance(updates=ALL) + . = ..() if(stat & (NOPOWER|BROKEN)) - icon_state = "newscaster_off" - else - if(GLOB.news_network.wanted_issue.active) - icon_state = "newscaster_wanted" - else - icon_state = "newscaster_normal" - if(alert) - add_overlay("newscaster_alert") - var/hp_percent = obj_integrity * 100 /max_integrity + set_light(0) + return + set_light(1.5, 0.7, "#34D352") // green light + +/obj/machinery/newscaster/update_overlays() + . = ..() + + + if(!(stat & (NOPOWER|BROKEN))) + var/state = "[base_icon_state]_[GLOB.news_network.wanted_issue.active ? "wanted" : "normal"]" + . += mutable_appearance(icon, state) +// . += emissive_appearance(icon, state, src, alpha = src.alpha) + + if(GLOB.news_network.wanted_issue.active && alert) + . += mutable_appearance(icon, "[base_icon_state]_alert") +// . += emissive_appearance(icon, "[base_icon_state]_alert", src, alpha = src.alpha,) + + var/hp_percent = obj_integrity * 100 / max_integrity switch(hp_percent) if(75 to 100) return if(50 to 75) - add_overlay("crack1") + . += "crack1" +// . += emissive_blocker(icon, "crack1", src, alpha = src.alpha) if(25 to 50) - add_overlay("crack2") + . += "crack2" +// . += emissive_blocker(icon, "crack2", src, alpha = src.alpha) else - add_overlay("crack3") + . += "crack3" +// . += emissive_blocker(icon, "crack3", src, alpha = src.alpha) /obj/machinery/newscaster/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) . = ..() - update_icon() + update_appearance(updates = ALL) /obj/machinery/newscaster/ui_interact(mob/user) . = ..() @@ -732,7 +745,7 @@ GLOBAL_LIST_EMPTY(allCasters) to_chat(user, span_notice("You repair [src].")) obj_integrity = max_integrity stat &= ~BROKEN - update_icon() + update_appearance(updates = ALL) else to_chat(user, span_notice("[src] does not need repairs.")) else @@ -827,13 +840,13 @@ GLOBAL_LIST_EMPTY(allCasters) /obj/machinery/newscaster/proc/remove_alert() alert = FALSE - update_icon() + update_appearance(updates = ALL) /obj/machinery/newscaster/proc/newsAlert(channel) if(channel) say("Breaking news from [channel]!") alert = TRUE - update_icon() + update_appearance(updates = ALL) addtimer(CALLBACK(src, PROC_REF(remove_alert)),alert_delay,TIMER_UNIQUE|TIMER_OVERRIDE) playsound(loc, 'sound/machines/twobeep_high.ogg', 75, 1) else diff --git a/code/game/machinery/pipe/pipe_dispenser.dm b/code/game/machinery/pipe/pipe_dispenser.dm index 7e7f5525e518..a04674df27d3 100644 --- a/code/game/machinery/pipe/pipe_dispenser.dm +++ b/code/game/machinery/pipe/pipe_dispenser.dm @@ -154,7 +154,7 @@ if(href_list["dir"]) C.setDir(text2num(href_list["dir"])) C.add_fingerprint(usr) - C.update_icon() + C.update_appearance(updates = ALL) wait = world.time + 15 return diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm index 3b8aa2b67cb1..c196d7e1dffe 100644 --- a/code/game/machinery/porta_turret/portable_turret.dm +++ b/code/game/machinery/porta_turret/portable_turret.dm @@ -18,7 +18,7 @@ req_access = list(ACCESS_SEC_DOORS) power_channel = AREA_USAGE_EQUIP //drains power from the EQUIPMENT channel - var/base_icon_state = "standard" + base_icon_state = "standard" var/scan_range = 7 var/atom/base = null //for turrets inside other objects @@ -81,7 +81,7 @@ . = ..() if(!base) base = src - update_icon() + update_appearance(updates = ALL) //Sets up a spark system spark_system = new /datum/effect_system/spark_spread spark_system.set_up(5, 0, src) @@ -97,7 +97,8 @@ if(!has_cover) INVOKE_ASYNC(src, PROC_REF(popUp)) -/obj/machinery/porta_turret/update_icon() +/obj/machinery/porta_turret/update_appearance(updates = ALL) + . = ..() cut_overlays() if(!anchored) icon_state = "turretCover" @@ -143,7 +144,7 @@ if(gun_properties["reqpower"]) reqpower = gun_properties["reqpower"] - update_icon() + update_appearance(updates = ALL) return gun_properties /obj/machinery/porta_turret/Destroy() @@ -220,7 +221,7 @@ /obj/machinery/porta_turret/power_change() . = ..() if(!anchored || (stat & BROKEN) || !powered()) - update_icon() + update_appearance(updates = ALL) remove_control() /obj/machinery/porta_turret/attackby(obj/item/I, mob/user, params) @@ -250,7 +251,7 @@ if(!anchored && !isinspace()) setAnchored(TRUE) invisibility = INVISIBILITY_MAXIMUM - update_icon() + update_appearance(updates = ALL) to_chat(user, span_notice("You secure the exterior bolts on the turret.")) if(has_cover) cover = new /obj/machinery/porta_turret_cover(loc) //create a new turret. While this is handled in process(), this is to workaround a bug where the turret becomes invisible for a split second @@ -286,7 +287,7 @@ obj_flags |= EMAGGED controllock = TRUE on = FALSE //turns off the turret temporarily - update_icon() + update_appearance(updates = ALL) sleep(6 SECONDS) //6 seconds for the traitor to gtfo of the area before the turret decides to ruin his shit on = TRUE //turns it back on. The cover popUp() popDown() are automatically called in process(), no need to define it here @@ -461,7 +462,7 @@ cover.icon_state = "turretCover" raised = 0 invisibility = 2 - update_icon() + update_appearance(updates = ALL) /obj/machinery/porta_turret/proc/assess_perp(mob/living/carbon/human/perp) var/threatcount = 0 //the integer returned @@ -541,7 +542,7 @@ T = closer break - update_icon() + update_appearance(updates = ALL) var/obj/item/projectile/A //any emagged turrets drains 2x power and uses a different projectile? if(mode == TURRET_STUN) @@ -935,10 +936,10 @@ /obj/machinery/turretid/proc/updateTurrets() for (var/obj/machinery/porta_turret/aTurret in turrets) aTurret.setState(enabled, lethal) - update_icon() + update_appearance(updates = ALL) -/obj/machinery/turretid/update_icon() - ..() +/obj/machinery/turretid/update_appearance(updates = ALL) + . = ..() if(stat & NOPOWER) icon_state = "control_off" else if (enabled) diff --git a/code/game/machinery/porta_turret/portable_turret_cover.dm b/code/game/machinery/porta_turret/portable_turret_cover.dm index a8d4da97b57f..6abd799bc6da 100644 --- a/code/game/machinery/porta_turret/portable_turret_cover.dm +++ b/code/game/machinery/porta_turret/portable_turret_cover.dm @@ -48,12 +48,12 @@ parent_turret.setAnchored(TRUE) to_chat(user, span_notice("You secure the exterior bolts on the turret.")) parent_turret.invisibility = 0 - parent_turret.update_icon() + parent_turret.update_appearance(updates = ALL) else parent_turret.setAnchored(FALSE) to_chat(user, span_notice("You unsecure the exterior bolts on the turret.")) parent_turret.invisibility = INVISIBILITY_MAXIMUM - parent_turret.update_icon() + parent_turret.update_appearance(updates = ALL) qdel(src) else if(I.GetID()) diff --git a/code/game/machinery/prisonlabor.dm b/code/game/machinery/prisonlabor.dm index e74a55019e2f..bde03ec6cc7a 100644 --- a/code/game/machinery/prisonlabor.dm +++ b/code/game/machinery/prisonlabor.dm @@ -9,7 +9,7 @@ var/obj/item/stack/license_plates/empty/current_plate var/pressing = FALSE -/obj/machinery/plate_press/update_icon() +/obj/machinery/plate_press/update_appearance(updates = ALL) . = ..() if(!is_operational()) icon_state = "offline" @@ -35,7 +35,7 @@ var/obj/item/stack/license_plates/empty/plate = I plate.use(1) current_plate = new plate.type(src, 1) //Spawn a new single sheet in the machine - update_icon() + update_appearance(updates = ALL) else return ..() @@ -48,12 +48,12 @@ ///This proc attempts to create a plate. User cannot move during this process. /obj/machinery/plate_press/proc/work_press(mob/living/user) pressing = TRUE - update_icon() + update_appearance(updates = ALL) to_chat(user, "You start pressing a new license plate!") if(!do_after(user, 4 SECONDS, src)) pressing = FALSE - update_icon() + update_appearance(updates = ALL) return FALSE use_power(100) @@ -61,6 +61,6 @@ pressing = FALSE QDEL_NULL(current_plate) - update_icon() + update_appearance(updates = ALL) new /obj/item/stack/license_plates/filled(drop_location(), 1) diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index f8b2ebda8247..374b7b1a3770 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -54,7 +54,7 @@ else use_power = IDLE_POWER_USE icon_state = initial(icon_state) - update_icon() + update_appearance(updates = ALL) /obj/machinery/recharger/attackby(obj/item/G, mob/user, params) if(G.tool_behaviour == TOOL_WRENCH) @@ -111,14 +111,14 @@ add_fingerprint(user) if(charging) - charging.update_icon() + charging.update_appearance(updates = ALL) charging.forceMove(drop_location()) user.put_in_hands(charging) setCharging(null) /obj/machinery/recharger/attack_tk(mob/user) if(charging) - charging.update_icon() + charging.update_appearance(updates = ALL) charging.forceMove(drop_location()) setCharging(null) @@ -132,7 +132,7 @@ if(C.charge < C.maxcharge) C.give(C.chargerate * recharge_coeff * delta_time / 2) use_power(125 * recharge_coeff * delta_time) - update_icon() + update_appearance(updates = ALL) if(istype(charging, /obj/item/ammo_box/magazine/recharge)) var/obj/item/ammo_box/magazine/recharge/R = charging @@ -142,7 +142,7 @@ if(R.stored_ammo.len <= R.max_ammo) break use_power(100 * recharge_coeff) - update_icon() + update_appearance(updates = ALL) return if(istype(charging, /obj/item/ammo_box/magazine/m308/laser)) var/obj/item/ammo_box/magazine/m308/laser/R = charging @@ -150,11 +150,11 @@ for(var/i in 1 to recharge_coeff) //See above R.stored_ammo += new R.ammo_type(R) use_power(100 * recharge_coeff) - update_icon() + update_appearance(updates = ALL) return else if(charging) - charging.update_icon() + charging.update_appearance(updates = ALL) charging.forceMove(drop_location()) setCharging(null) return PROCESS_KILL @@ -175,8 +175,18 @@ B.cell.charge = 0 -/obj/machinery/recharger/update_icon() //we have an update_icon() in addition to the stuff in process to make it feel a tiny bit snappier. - cut_overlays() +/obj/machinery/recharger/update_appearance(updates) + . = ..() + if((stat & (NOPOWER|BROKEN)) || panel_open || !anchored) + luminosity = 0 + return + luminosity = 1 + +/obj/machinery/recharger/update_overlays() //we have an update_appearance(updates = ALL) in addition to the stuff in process to make it feel a tiny bit snappier. + . = ..() + if(stat & (NOPOWER|BROKEN) || !anchored) + return + if(charging) var/mutable_appearance/scan = mutable_appearance(icon, "[initial(icon_state)]filled") var/obj/item/stock_parts/cell/C = charging.get_cell() @@ -194,7 +204,7 @@ scan.color = "#58d0ff" else scan.color = gradient(list(0, "#ff0000", 0.99, "#00ff00", 1, "#cece00"), num) - add_overlay(scan) + . += scan /obj/machinery/recharger/wallrecharger name = "wall recharger" diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm index b67e6fcde40a..c722a1e03b0a 100644 --- a/code/game/machinery/rechargestation.dm +++ b/code/game/machinery/rechargestation.dm @@ -16,7 +16,13 @@ /obj/machinery/recharge_station/Initialize(mapload) . = ..() - update_icon() + update_appearance() + + var/area_name = get_area_name(src, format_text = TRUE) + if(area_name in GLOB.roundstart_station_borgcharger_areas) + return + GLOB.roundstart_station_borgcharger_areas += area_name + /obj/machinery/recharge_station/RefreshParts() recharge_speed = 0 @@ -88,7 +94,8 @@ use_power = ACTIVE_POWER_USE //It always tries to charge, even if it can't. add_fingerprint(occupant) -/obj/machinery/recharge_station/update_icon() +/obj/machinery/recharge_station/update_appearance(updates = ALL) + . = ..() if(is_operational()) if(state_open) icon_state = "borgcharger0" @@ -107,7 +114,7 @@ /obj/machinery/recharge_station/fullupgrade/Initialize(mapload) . = ..() - update_icon() + update_appearance(updates = ALL) component_parts = list() component_parts += new /obj/item/circuitboard/machine/cyborgrecharger(null) component_parts += new /obj/item/stock_parts/capacitor/quadratic(null) diff --git a/code/game/machinery/recycler.dm b/code/game/machinery/recycler.dm index 12b2b5d2398b..ca6d185b7b66 100644 --- a/code/game/machinery/recycler.dm +++ b/code/game/machinery/recycler.dm @@ -21,7 +21,7 @@ AddComponent(/datum/component/material_container, list(/datum/material/iron, /datum/material/glass, /datum/material/plasma, /datum/material/silver, /datum/material/gold, /datum/material/diamond, /datum/material/uranium, /datum/material/bananium, /datum/material/titanium, /datum/material/bluespace, /datum/material/dilithium, /datum/material/plastic), INFINITY, FALSE, null, null, null, TRUE) AddComponent(/datum/component/butchering, 1, amount_produced,amount_produced/5) . = ..() - update_icon() + update_appearance(UPDATE_ICON) req_one_access = get_all_accesses() + get_all_centcom_access() /obj/machinery/recycler/RefreshParts() @@ -67,16 +67,16 @@ obj_flags |= EMAGGED if(safety_mode) safety_mode = FALSE - update_icon() + update_appearance(updates = ALL) playsound(src, "sparks", 75, TRUE, -1) to_chat(user, span_notice("You use the cryptographic sequencer on [src].")) -/obj/machinery/recycler/update_icon() - ..() +/obj/machinery/recycler/update_icon_state() var/is_powered = !(stat & (BROKEN|NOPOWER)) if(safety_mode) is_powered = FALSE icon_state = icon_name + "[is_powered]" + "[(bloody ? "bld" : "")]" // add the blood tag at the end + return ..() /obj/machinery/recycler/CanAllowThrough(atom/movable/AM) . = ..() @@ -160,13 +160,13 @@ /obj/machinery/recycler/proc/emergency_stop() playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE) safety_mode = TRUE - update_icon() + update_appearance(updates = ALL) addtimer(CALLBACK(src, PROC_REF(reboot)), SAFETY_COOLDOWN) /obj/machinery/recycler/proc/reboot() playsound(src, 'sound/machines/ping.ogg', 50, FALSE) safety_mode = FALSE - update_icon() + update_appearance(updates = ALL) /obj/machinery/recycler/proc/crush_living(mob/living/L) @@ -184,7 +184,7 @@ if(!bloody && !issilicon(L)) bloody = TRUE - update_icon() + update_appearance(updates = ALL) // Instantly lie down, also go unconscious from the pain, before you die. L.Unconscious(100) diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm index 97d232260848..00bdea6268c5 100644 --- a/code/game/machinery/requests_console.dm +++ b/code/game/machinery/requests_console.dm @@ -29,6 +29,7 @@ GLOBAL_LIST_EMPTY(req_console_ckey_departments) desc = "A console intended to send requests to different departments on the station." icon = 'icons/obj/terminals.dmi' icon_state = "req_comp0" + base_icon_state = "req_comp0" var/department = "Unknown" //The list of all departments on the station (Determined from this variable on each unit) Set this to the same thing if you want several consoles in one department var/list/messages = list() //List of all messages var/departmentType = 0 //bitflag @@ -69,28 +70,35 @@ GLOBAL_LIST_EMPTY(req_console_ckey_departments) max_integrity = 300 armor = list(MELEE = 70, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 0, BIO = 0, RAD = 0, FIRE = 90, ACID = 90) -/obj/machinery/requests_console/update_icon() +/obj/machinery/requests_console/update_appearance(updates = ALL) + . = ..() if(stat & NOPOWER) set_light(0) - else - set_light(1.4,0.7,"#34D352")//green light + return + set_light(1.5, 0.7, "#34D352")//green light + +/obj/machinery/requests_console/update_overlays() + . = ..() + if(open) - if(!hackState) - icon_state="req_comp_open" - else - icon_state="req_comp_rewired" - else if(stat & NOPOWER) - if(icon_state != "req_comp_off") - icon_state = "req_comp_off" + . += mutable_appearance(icon, "req_comp_open") + + if(open || (stat & NOPOWER)) + return + + var/screen_state + + if(emergency || (newmessagepriority == REQ_EXTREME_MESSAGE_PRIORITY)) + screen_state = "[base_icon_state]3" + else if(newmessagepriority == REQ_HIGH_MESSAGE_PRIORITY) + screen_state = "[base_icon_state]2" + else if(newmessagepriority == REQ_NORMAL_MESSAGE_PRIORITY) + screen_state = "[base_icon_state]1" else - if(emergency || (newmessagepriority == REQ_EXTREME_MESSAGE_PRIORITY)) - icon_state = "req_comp3" - else if(newmessagepriority == REQ_HIGH_MESSAGE_PRIORITY) - icon_state = "req_comp2" - else if(newmessagepriority == REQ_NORMAL_MESSAGE_PRIORITY) - icon_state = "req_comp1" - else - icon_state = "req_comp0" + screen_state = "[base_icon_state]0" + + . += mutable_appearance(icon, screen_state) +// . += emissive_appearance(icon, screen_state, src, alpha = src.alpha) /obj/machinery/requests_console/Initialize(mapload) . = ..() @@ -174,10 +182,10 @@ GLOBAL_LIST_EMPTY(req_console_ckey_departments) for (var/obj/machinery/requests_console/Console in GLOB.allConsoles) if (Console.department == department) Console.newmessagepriority = REQ_NO_NEW_MESSAGE - Console.update_icon() + Console.update_appearance(updates = ALL) newmessagepriority = REQ_NO_NEW_MESSAGE - update_icon() + update_appearance(updates = ALL) var/messageComposite = "" for(var/msg in messages) // This puts more recent messages at the *top*, where they belong. messageComposite = "
[msg]
" + messageComposite @@ -288,7 +296,7 @@ GLOBAL_LIST_EMPTY(req_console_ckey_departments) if(radio_freq) Radio.set_frequency(radio_freq) Radio.talk_into(src,"[emergency] emergency in [department]!!",radio_freq) - update_icon() + update_appearance(updates = ALL) addtimer(CALLBACK(src, PROC_REF(clear_emergency)), 5 MINUTES) if(href_list["send"] && message && to_department && priority) @@ -351,7 +359,7 @@ GLOBAL_LIST_EMPTY(req_console_ckey_departments) /obj/machinery/requests_console/proc/clear_emergency() emergency = null - update_icon() + update_appearance(updates = ALL) //from message_server.dm: Console.createmessage(data["sender"], data["send_dpt"], data["message"], data["verified"], data["stamped"], data["priority"], data["notify_freq"]) /obj/machinery/requests_console/proc/createmessage(source, source_department, message, msgVerified, msgStamped, priority, radio_freq) @@ -374,14 +382,14 @@ GLOBAL_LIST_EMPTY(req_console_ckey_departments) if(REQ_NORMAL_MESSAGE_PRIORITY) if(newmessagepriority < REQ_NORMAL_MESSAGE_PRIORITY) newmessagepriority = REQ_NORMAL_MESSAGE_PRIORITY - update_icon() + update_appearance(updates = ALL) if(REQ_HIGH_MESSAGE_PRIORITY) header = "[span_bad("High Priority")]
[header]" alert = "PRIORITY Alert from [source][authentic]" if(newmessagepriority < REQ_HIGH_MESSAGE_PRIORITY) newmessagepriority = REQ_HIGH_MESSAGE_PRIORITY - update_icon() + update_appearance(updates = ALL) if(REQ_EXTREME_MESSAGE_PRIORITY) header = "[span_bad("!!!Extreme Priority!!!")]
[header]" @@ -389,7 +397,7 @@ GLOBAL_LIST_EMPTY(req_console_ckey_departments) silenced = FALSE if(newmessagepriority < REQ_EXTREME_MESSAGE_PRIORITY) newmessagepriority = REQ_EXTREME_MESSAGE_PRIORITY - update_icon() + update_appearance(updates = ALL) messages += "[header][sending]" @@ -409,7 +417,7 @@ GLOBAL_LIST_EMPTY(req_console_ckey_departments) else to_chat(user, span_notice("You open the maintenance panel.")) open = TRUE - update_icon() + update_appearance(updates = ALL) return if(O.tool_behaviour == TOOL_SCREWDRIVER) if(open) @@ -418,7 +426,7 @@ GLOBAL_LIST_EMPTY(req_console_ckey_departments) to_chat(user, span_notice("You modify the wiring.")) else to_chat(user, span_notice("You reset the wiring.")) - update_icon() + update_appearance(updates = ALL) else to_chat(user, span_warning("You must open the maintenance panel first!")) return diff --git a/code/game/machinery/sci_bombardment.dm b/code/game/machinery/sci_bombardment.dm index 0e512e199cb6..a49f8c19ccb4 100644 --- a/code/game/machinery/sci_bombardment.dm +++ b/code/game/machinery/sci_bombardment.dm @@ -53,13 +53,14 @@ break radio = new /obj/item/radio/(src) radio.frequency = radio_freq - update_icon() + update_appearance(updates = ALL) /obj/machinery/sci_bombardment/Destroy() QDEL_NULL(radio) return ..() -/obj/machinery/sci_bombardment/update_icon() +/obj/machinery/sci_bombardment/update_appearance(updates = ALL) + . = ..() cut_overlays() if(!powered(power_channel)) add_overlay("LAM_radar0") @@ -80,7 +81,7 @@ scibomb = B playsound(src, 'sound/effects/bin_close.ogg', 100, 1) to_chat(usr, span_notice("You load [B] into the firing mechanism.")) - update_icon() + update_appearance(updates = ALL) else to_chat(usr, span_warning("There is already a transfer valve loaded in the firing mechanism!")) else @@ -132,7 +133,7 @@ targetdest = initial(dest) tcoords = initial(tcoords) scibomb = initial(scibomb) - update_icon() + update_appearance(updates = ALL) . = TRUE /** @@ -144,7 +145,7 @@ */ /obj/machinery/sci_bombardment/proc/reset_lam() target_delay = !target_delay - update_icon() + update_appearance(updates = ALL) if(target_delay) spawn(100) reset_lam() @@ -202,7 +203,7 @@ radio.talk_into(src, "Controls [locked ? "locked" : "unlocked"] by [I.registered_name].",) else to_chat(usr, span_warning("Access denied. Please seek assistance from station AI or Research Director.")) - update_icon() + update_appearance(updates = ALL) . = TRUE if("count")//Prompts user to change countdown timer (Minimum based on mincount) if(locked) @@ -222,7 +223,7 @@ to_chat(usr, span_notice("[scibomb] is ejected from the loading chamber.")) scibomb.forceMove(drop_location()) scibomb = null - update_icon() + update_appearance(updates = ALL) . = TRUE if("launch")//Transfers var/countdown to var/tick before proc'ing countdown() if(locked || target_delay || !scibomb || !dest) diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm index 0935ae2d7828..cf86b90840f9 100644 --- a/code/game/machinery/shieldgen.dm +++ b/code/game/machinery/shieldgen.dm @@ -93,7 +93,7 @@ /obj/machinery/shieldgen/proc/shields_up() active = TRUE - update_icon() + update_appearance(updates = ALL) move_resist = INFINITY for(var/turf/target_tile in range(shield_range, src)) @@ -104,7 +104,7 @@ /obj/machinery/shieldgen/proc/shields_down() active = FALSE move_resist = initial(move_resist) - update_icon() + update_appearance(updates = ALL) QDEL_LIST(deployed_shields) /obj/machinery/shieldgen/process(delta_time) @@ -164,7 +164,7 @@ obj_integrity = max_integrity stat &= ~BROKEN to_chat(user, span_notice("You repair \the [src].")) - update_icon() + update_appearance(updates = ALL) else if(W.tool_behaviour == TOOL_WRENCH) if(locked) @@ -203,7 +203,8 @@ playsound(src, "sparks", 100, 1) to_chat(user, span_warning("You short out the access controller.")) -/obj/machinery/shieldgen/update_icon() +/obj/machinery/shieldgen/update_appearance(updates = ALL) + . = ..() if(active) icon_state = (stat & BROKEN) ? "shieldonbr":"shieldon" else diff --git a/code/game/machinery/slotmachine.dm b/code/game/machinery/slotmachine.dm index ae39ff35f466..e822e9a33aa7 100644 --- a/code/game/machinery/slotmachine.dm +++ b/code/game/machinery/slotmachine.dm @@ -65,7 +65,8 @@ money += round(delta_time / 2) //SPESSH MAJICKS -/obj/machinery/computer/slot_machine/update_icon() +/obj/machinery/computer/slot_machine/update_appearance(updates = ALL) + . = ..() if(stat & NOPOWER) icon_state = "slots0" @@ -205,7 +206,7 @@ working = 1 toggle_reel_spin(1) - update_icon() + update_appearance(updates = ALL) updateDialog() spawn(0) @@ -218,7 +219,7 @@ toggle_reel_spin(0, REEL_DEACTIVATE_DELAY) working = 0 give_prizes(the_name, user) - update_icon() + update_appearance(updates = ALL) updateDialog() /obj/machinery/computer/slot_machine/proc/can_spin(mob/user) diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm index d6d8b435ca83..df55cb38b0c8 100644 --- a/code/game/machinery/spaceheater.dm +++ b/code/game/machinery/spaceheater.dm @@ -32,13 +32,13 @@ /obj/machinery/space_heater/Initialize(mapload) . = ..() cell = new(src) - update_icon() + update_appearance(updates = ALL) /obj/machinery/space_heater/on_construction() qdel(cell) cell = null panel_open = TRUE - update_icon() + update_appearance(updates = ALL) return ..() /obj/machinery/space_heater/on_deconstruction() @@ -57,7 +57,8 @@ if(in_range(user, src) || isobserver(user)) . += "The status display reads: Temperature range at [settableTemperatureRange]°C.
Heating power at [heatingPower*0.001]kJ.
Power consumption at [(efficiency*-0.0025)+150]%." //100%, 75%, 50%, 25% -/obj/machinery/space_heater/update_icon() +/obj/machinery/space_heater/update_appearance(updates = ALL) + . = ..() icon_state = "sheater-[on ? "[mode]" : "off"]" cut_overlays() @@ -69,19 +70,19 @@ if (on) // If it's broken, turn it off too on = FALSE active_power_usage = 0 - update_icon() + update_appearance(updates = ALL) return PROCESS_KILL if((stat & NOPOWER) && (!cell || cell.charge <= 0)) on = FALSE - update_icon() + update_appearance(updates = ALL) return PROCESS_KILL var/turf/L = loc if(!istype(L)) if(mode != HEATER_MODE_STANDBY) mode = HEATER_MODE_STANDBY - update_icon() + update_appearance(updates = ALL) return var/datum/gas_mixture/env = L.return_air() @@ -94,7 +95,7 @@ if(mode != newMode) mode = newMode - update_icon() + update_appearance(updates = ALL) if(mode == HEATER_MODE_STANDBY) return @@ -119,7 +120,7 @@ if (!cell.use(requiredEnergy / efficiency)) //automatically turn off machine when cell depletes on = FALSE - update_icon() + update_appearance(updates = ALL) working = FALSE else active_power_usage = requiredEnergy / efficiency @@ -180,7 +181,7 @@ else if(I.tool_behaviour == TOOL_SCREWDRIVER) panel_open = !panel_open user.visible_message("\The [user] [panel_open ? "opens" : "closes"] the hatch on \the [src].", span_notice("You [panel_open ? "open" : "close"] the hatch on \the [src].")) - update_icon() + update_appearance(updates = ALL) else if(default_deconstruction_crowbar(I)) return else @@ -262,7 +263,7 @@ on = !on mode = HEATER_MODE_STANDBY usr.visible_message("[usr] switches [on ? "on" : "off"] \the [src].", span_notice("You switch [on ? "on" : "off"] \the [src].")) - update_icon() + update_appearance(updates = ALL) if (on) START_PROCESSING(SSmachines, src) diff --git a/code/game/machinery/stasis.dm b/code/game/machinery/stasis.dm index d60265b3bfef..d09c25b9c55e 100644 --- a/code/game/machinery/stasis.dm +++ b/code/game/machinery/stasis.dm @@ -97,7 +97,7 @@ stasis_can_toggle = world.time + stasis_cooldown playsound(src, 'sound/machines/click.ogg', 60, TRUE) play_power_sound() - update_icon() + update_appearance(updates = ALL) /obj/machinery/stasis/Exited(atom/movable/AM, atom/newloc) if(AM == occupant) @@ -109,7 +109,7 @@ /obj/machinery/stasis/proc/stasis_running() return stasis_enabled && is_operational() -/obj/machinery/stasis/update_icon() +/obj/machinery/stasis/update_appearance(updates = ALL) . = ..() var/_running = stasis_running() var/list/overlays_to_remove = managed_vis_overlays @@ -166,13 +166,13 @@ occupant = L if(stasis_running() && check_nap_violations()) chill_out(L) - update_icon() + update_appearance(updates = ALL) /obj/machinery/stasis/post_unbuckle_mob(mob/living/L) thaw_them(L) if(L == occupant) occupant = null - update_icon() + update_appearance(updates = ALL) /obj/machinery/stasis/process() if( !( occupant && isliving(occupant) && check_nap_violations() ) ) @@ -189,7 +189,7 @@ /obj/machinery/stasis/screwdriver_act(mob/living/user, obj/item/I) . = default_deconstruction_screwdriver(user, "stasis_maintenance", "stasis", I) - update_icon() + update_appearance(updates = ALL) /obj/machinery/stasis/wrench_act(mob/living/user, obj/item/I) if(default_change_direction_wrench(user, I)) diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm index 2f0e935e630e..80ba1edf990f 100644 --- a/code/game/machinery/status_display.dm +++ b/code/game/machinery/status_display.dm @@ -30,7 +30,49 @@ var/obj/effect/overlay/status_display_text/message1_overlay var/obj/effect/overlay/status_display_text/message2_overlay +/* +/obj/machinery/status_display/update_appearance(updates=ALL) + . = ..() + if( \ + (stat & (NOPOWER|BROKEN)) || \ + (current_mode == SD_BLANK) || \ + (current_mode != SD_PICTURE && message1 == "" && message2 == "") \ + ) + set_light(0) + return + set_light(1.5, 0.7, LIGHT_COLOR_BLUE) // blue light + +/obj/machinery/status_display/update_overlays() + . = ..() + + if(stat & (NOPOWER|BROKEN)) + remove_messages() + return + switch(current_mode) + if(SD_BLANK) + remove_messages() + // Turn off backlight. + return + if(SD_PICTURE) + remove_messages() + . += mutable_appearance(icon, current_picture) + if(current_picture == AI_DISPLAY_DONT_GLOW) // If the thing's off, don't display the emissive yeah? + return . + else + var/overlay = update_message(message1_overlay, LINE1_Y, message1) + if(overlay) + message1_overlay = overlay + overlay = update_message(message2_overlay, LINE2_Y, message2) + if(overlay) + message2_overlay = overlay + + // Turn off backlight if message is blank + if(message1 == "" && message2 == "") + return + + . += emissive_appearance(icon, "outline", src, alpha = src.alpha) +*/ /// Immediately blank the display. /obj/machinery/status_display/proc/remove_display() cut_overlays() diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index 5754b48ec1f5..0a129623a160 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -135,7 +135,7 @@ mask = new mask_type(src) if(storage_type) storage = new storage_type(src) - update_icon() + update_appearance(updates = ALL) /obj/machinery/suit_storage_unit/Destroy() QDEL_NULL(suit) @@ -144,7 +144,8 @@ QDEL_NULL(storage) return ..() -/obj/machinery/suit_storage_unit/update_icon() +/obj/machinery/suit_storage_unit/update_appearance(updates = ALL) + . = ..() cut_overlays() if(uv) @@ -173,7 +174,7 @@ if(!is_operational() && state_open) open_machine() dump_contents() - update_icon() + update_appearance(updates = ALL) /obj/machinery/suit_storage_unit/proc/dump_contents() dropContents() @@ -222,7 +223,7 @@ uv_cycles-- uv = TRUE locked = TRUE - update_icon() + update_appearance(updates = ALL) if(occupant) if(uv_super) mob_occupant.adjustFireLoss(rand(20, 36)) @@ -365,7 +366,7 @@ storage = I visible_message(span_notice("[user] inserts [I] into [src]."), span_notice("You load [I] into [src].")) - update_icon() + update_appearance(updates = ALL) return if(panel_open && is_wire_tool(I)) @@ -472,7 +473,7 @@ if(I) I.forceMove(loc) . = TRUE - update_icon() + update_appearance(updates = ALL) /obj/machinery/suit_storage_unit/AltClick(mob/user) if(!user.canUseTopic(src, !issilicon(user))) @@ -496,4 +497,4 @@ if(!user.canUseTopic(src, !issilicon(user)) || state_open) return locked = !locked - update_icon() + update_appearance(updates = ALL) diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm index ba80fbf25317..a9a3e789767d 100644 --- a/code/game/machinery/syndicatebomb.dm +++ b/code/game/machinery/syndicatebomb.dm @@ -81,7 +81,7 @@ if(active && ((detonation_timer <= world.time) || explode_now)) active = FALSE timer_set = initial(timer_set) - update_icon() + update_appearance(updates = ALL) try_detonate(TRUE) /obj/machinery/syndicatebomb/Initialize(mapload) @@ -89,7 +89,7 @@ wires = new /datum/wires/syndicatebomb(src) if(payload) payload = new payload(src) - update_icon() + update_appearance(updates = ALL) countdown = new(src) STOP_PROCESSING(SSfastprocess, src) @@ -103,7 +103,8 @@ . = ..() . += {"A digital display on it reads "[seconds_remaining()]"."} -/obj/machinery/syndicatebomb/update_icon() +/obj/machinery/syndicatebomb/update_appearance(updates = ALL) + . = ..() icon_state = "[initial(icon_state)][active ? "-active" : "-inactive"][open_panel ? "-wires" : ""]" /obj/machinery/syndicatebomb/proc/seconds_remaining() @@ -133,7 +134,7 @@ else if(I.tool_behaviour == TOOL_SCREWDRIVER) open_panel = !open_panel - update_icon() + update_appearance(updates = ALL) to_chat(user, span_notice("You [open_panel ? "open" : "close"] the wire panel.")) else if(is_wire_tool(I) && open_panel) @@ -203,7 +204,7 @@ if(!active) visible_message(span_danger("[icon2html(src, viewers(loc))] [timer_set] seconds until detonation, please clear the area.")) activate() - update_icon() + update_appearance(updates = ALL) add_fingerprint(user) if(payload && !istype(payload, /obj/item/bombcore/training)) @@ -313,7 +314,7 @@ holder.delayedbig = FALSE holder.delayedlittle = FALSE holder.explode_now = FALSE - holder.update_icon() + holder.update_appearance(updates = ALL) holder.updateDialog() STOP_PROCESSING(SSfastprocess, holder) diff --git a/code/game/machinery/telecomms/machine_interactions.dm b/code/game/machinery/telecomms/machine_interactions.dm index a0e36e587e6c..2a6a73cd108a 100644 --- a/code/game/machinery/telecomms/machine_interactions.dm +++ b/code/game/machinery/telecomms/machine_interactions.dm @@ -12,7 +12,7 @@ /obj/machinery/telecomms/attackby(obj/item/P, mob/user, params) if(default_deconstruction_screwdriver(user, "[initial(icon_state)]_o", initial(icon_state), P)) - update_icon() + update_appearance(updates = ALL) return // Using a multitool lets you access the receiver's interface else if(P.tool_behaviour == TOOL_MULTITOOL) @@ -95,7 +95,7 @@ if("toggle") toggled = !toggled update_power() - update_icon() + update_appearance(updates = ALL) log_game("[key_name(operator)] toggled [toggled ? "On" : "Off"] [src] at [AREACOORD(src)].") . = TRUE if("id") diff --git a/code/game/machinery/telecomms/machines/broadcaster.dm b/code/game/machinery/telecomms/machines/broadcaster.dm index df5285e9d601..f0865c7de865 100644 --- a/code/game/machinery/telecomms/machines/broadcaster.dm +++ b/code/game/machinery/telecomms/machines/broadcaster.dm @@ -57,7 +57,8 @@ GLOBAL_VAR_INIT(message_delay, 0) // To make sure restarting the recentmessages var/mutable_appearance/sending = mutable_appearance(icon, "broadcaster_send", 1) flick(sending, src) -/obj/machinery/telecomms/broadcaster/update_icon() // Special fuckery +/obj/machinery/telecomms/broadcaster/update_appearance(updates = ALL) + . = ..() // Special fuckery cut_overlays() if(on) var/mutable_appearance/on_overlay = mutable_appearance(icon, on_icon, 0) diff --git a/code/game/machinery/telecomms/machines/message_server.dm b/code/game/machinery/telecomms/machines/message_server.dm index a67deadf7a2c..d02baca48ee7 100644 --- a/code/game/machinery/telecomms/machines/message_server.dm +++ b/code/game/machinery/telecomms/machines/message_server.dm @@ -27,7 +27,7 @@ user.put_in_hands(stored) stored = null to_chat(user, span_notice("You remove the blackbox from [src]. The tapes stop spinning.")) - update_icon() + update_appearance(updates = ALL) return else to_chat(user, span_warning("It seems that the blackbox is missing...")) @@ -43,7 +43,7 @@ span_notice("You press the device into [src], and it clicks into place. The tapes begin spinning again.")) playsound(src, 'sound/machines/click.ogg', 50, TRUE) stored = I - update_icon() + update_appearance(updates = ALL) return ..() return ..() @@ -53,7 +53,7 @@ new /obj/effect/decal/cleanable/oil(loc) return ..() -/obj/machinery/blackbox_recorder/update_icon() +/obj/machinery/blackbox_recorder/update_appearance(updates = ALL) . = ..() if(!stored) icon_state = "blackbox_b" @@ -157,7 +157,8 @@ if(!relay_information(signal, /obj/machinery/telecomms/hub)) relay_information(signal, /obj/machinery/telecomms/broadcaster) -/obj/machinery/telecomms/message_server/update_icon() +/obj/machinery/telecomms/message_server/update_appearance(updates = ALL) + . = ..() cut_overlays() if(calibrating && on) var/mutable_appearance/calibrate = mutable_appearance(icon, "message_server_disabled") diff --git a/code/game/machinery/telecomms/telecomunications.dm b/code/game/machinery/telecomms/telecomunications.dm index 23eec2e038cf..a0d7a71d6ce5 100644 --- a/code/game/machinery/telecomms/telecomunications.dm +++ b/code/game/machinery/telecomms/telecomunications.dm @@ -120,7 +120,8 @@ GLOBAL_LIST_EMPTY(telecomms_list) T.links |= src -/obj/machinery/telecomms/update_icon() +/obj/machinery/telecomms/update_appearance(updates = ALL) + . = ..() cut_overlays() if(on) var/mutable_appearance/on_overlay @@ -177,7 +178,7 @@ GLOBAL_LIST_EMPTY(telecomms_list) update_power() // Update the icon - update_icon() + update_appearance(updates = ALL) update_speed() diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm index 71b2b2629471..6c639b1f5a5f 100644 --- a/code/game/machinery/teleporter.dm +++ b/code/game/machinery/teleporter.dm @@ -58,7 +58,7 @@ if(default_deconstruction_screwdriver(user, "tele-o", "tele0", W)) if(power_station && power_station.engaged) power_station.engaged = 0 //hub with panel open is off, so the station must be informed. - update_icon() + update_appearance(updates = ALL) return if(default_deconstruction_crowbar(W)) return @@ -87,7 +87,8 @@ calibrated = 0 return -/obj/machinery/teleport/hub/update_icon() +/obj/machinery/teleport/hub/update_appearance(updates = ALL) + . = ..() if(panel_open) icon_state = "tele-o" else if(is_ready()) @@ -154,7 +155,7 @@ /obj/machinery/teleport/station/Destroy() if(teleporter_hub) teleporter_hub.power_station = null - teleporter_hub.update_icon() + teleporter_hub.update_appearance(updates = ALL) teleporter_hub = null if (teleporter_console) teleporter_console.power_station = null @@ -179,7 +180,7 @@ to_chat(user, span_alert("This station can't hold more information, try to use better parts.")) return else if(default_deconstruction_screwdriver(user, "controller-o", "controller", W)) - update_icon() + update_appearance(updates = ALL) return else if(default_deconstruction_crowbar(W)) @@ -209,15 +210,16 @@ else to_chat(user, span_alert("No target detected.")) engaged = FALSE - teleporter_hub.update_icon() + teleporter_hub.update_appearance(updates = ALL) add_fingerprint(user) /obj/machinery/teleport/station/power_change() . = ..() if(teleporter_hub) - teleporter_hub.update_icon() + teleporter_hub.update_appearance(updates = ALL) -/obj/machinery/teleport/station/update_icon() +/obj/machinery/teleport/station/update_appearance(updates = ALL) + . = ..() if(panel_open) icon_state = "controller-o" else if(stat & (BROKEN|NOPOWER)) diff --git a/code/game/machinery/transformer.dm b/code/game/machinery/transformer.dm index 59e95d83ffff..59d39fff3e4c 100644 --- a/code/game/machinery/transformer.dm +++ b/code/game/machinery/transformer.dm @@ -34,8 +34,8 @@ QDEL_NULL(countdown) . = ..() -/obj/machinery/transformer/update_icon() - ..() +/obj/machinery/transformer/update_appearance(updates = ALL) + . = ..() if(stat & (BROKEN|NOPOWER) || cooldown == 1) icon_state = "separator-AO0" else @@ -66,7 +66,7 @@ /obj/machinery/transformer/process() if(cooldown && (cooldown_timer <= world.time)) cooldown = FALSE - update_icon() + update_appearance(updates = ALL) /obj/machinery/transformer/proc/do_transform(mob/living/carbon/human/H) if(stat & (BROKEN|NOPOWER)) @@ -81,7 +81,7 @@ // Activate the cooldown cooldown = 1 cooldown_timer = world.time + cooldown_duration - update_icon() + update_appearance(updates = ALL) playsound(src.loc, 'sound/items/welder.ogg', 50, 1) H.emote("scream") // It is painful diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm index 248261f0b870..c756887f7965 100644 --- a/code/game/machinery/washing_machine.dm +++ b/code/game/machinery/washing_machine.dm @@ -146,7 +146,7 @@ GLOBAL_LIST_INIT(dye_registry, list( to_chat(user, span_warning("[src] must be cleaned up first.")) return busy = TRUE - update_icon() + update_appearance(updates = ALL) addtimer(CALLBACK(src, PROC_REF(wash_cycle)), 200) START_PROCESSING(SSfastprocess, src) @@ -172,7 +172,7 @@ GLOBAL_LIST_INIT(dye_registry, list( . = ..() if(!busy && bloody_mess && (clean_types & CLEAN_TYPE_BLOOD)) bloody_mess = FALSE - update_icon() + update_appearance(updates = ALL) . = TRUE /obj/machinery/washing_machine/proc/wash_cycle() @@ -185,7 +185,7 @@ GLOBAL_LIST_INIT(dye_registry, list( if(color_source) qdel(color_source) color_source = null - update_icon() + update_appearance(updates = ALL) /obj/item/proc/dye_item(dye_color) if(undyeable) @@ -258,7 +258,8 @@ GLOBAL_LIST_INIT(dye_registry, list( add_fingerprint(user) open_machine() -/obj/machinery/washing_machine/update_icon() +/obj/machinery/washing_machine/update_appearance(updates = ALL) + . = ..() cut_overlays() if(busy) icon_state = "wm_running_[bloody_mess]" @@ -275,7 +276,7 @@ GLOBAL_LIST_INIT(dye_registry, list( return if(default_deconstruction_screwdriver(user, null, null, W)) - update_icon() + update_appearance(updates = ALL) return else if(user.a_intent != INTENT_HARM) @@ -298,7 +299,7 @@ GLOBAL_LIST_INIT(dye_registry, list( if(W.dye_color) color_source = W - update_icon() + update_appearance(updates = ALL) else return ..() @@ -318,14 +319,14 @@ GLOBAL_LIST_INIT(dye_registry, list( if(state_open) if(iscorgi(L)) L.forceMove(src) - update_icon() + update_appearance(updates = ALL) return if(!state_open) open_machine() else state_open = FALSE //close the door - update_icon() + update_appearance(updates = ALL) /obj/machinery/washing_machine/deconstruct(disassembled = TRUE) new /obj/item/stack/sheet/metal(drop_location(), 2) diff --git a/code/game/mecha/equipment/tools/medical_tools.dm b/code/game/mecha/equipment/tools/medical_tools.dm index e79736180bee..23c75da4c054 100644 --- a/code/game/mecha/equipment/tools/medical_tools.dm +++ b/code/game/mecha/equipment/tools/medical_tools.dm @@ -341,12 +341,12 @@ else if(mechsyringe.loc == trg) mechsyringe.icon_state = initial(mechsyringe.icon_state) mechsyringe.icon = initial(mechsyringe.icon) - mechsyringe.update_icon() + mechsyringe.update_appearance(updates = ALL) break else mechsyringe.icon_state = initial(mechsyringe.icon_state) mechsyringe.icon = initial(mechsyringe.icon) - mechsyringe.update_icon() + mechsyringe.update_appearance(updates = ALL) break sleep(0.1 SECONDS) return 1 diff --git a/code/game/mecha/equipment/tools/work_tools.dm b/code/game/mecha/equipment/tools/work_tools.dm index ff2540a446b2..e73964e40abb 100644 --- a/code/game/mecha/equipment/tools/work_tools.dm +++ b/code/game/mecha/equipment/tools/work_tools.dm @@ -496,13 +496,13 @@ var/obj/structure/cable/NC = new(new_turf, "red") NC.d1 = 0 NC.d2 = fdirn - NC.update_icon() + NC.update_appearance(updates = ALL) var/datum/powernet/PN if(last_piece && last_piece.d2 != chassis.dir) last_piece.d1 = min(last_piece.d2, chassis.dir) last_piece.d2 = max(last_piece.d2, chassis.dir) - last_piece.update_icon() + last_piece.update_appearance(updates = ALL) PN = last_piece.powernet if(!PN) diff --git a/code/game/mecha/equipment/weapons/mecha_ammo.dm b/code/game/mecha/equipment/weapons/mecha_ammo.dm index c3080a16a99e..eccc9f4567f1 100644 --- a/code/game/mecha/equipment/weapons/mecha_ammo.dm +++ b/code/game/mecha/equipment/weapons/mecha_ammo.dm @@ -17,11 +17,17 @@ /// Type of ammo. used to make sure the ammo type is compatable with the weapon itself var/ammo_type -/obj/item/mecha_ammo/proc/update_name() - if(!rounds) - name = "empty ammo box" - desc = "An exosuit ammuniton box that has since been emptied. Please recycle." - icon_state = "empty" +/obj/item/mecha_ammo/update_name() + . = ..() + name = "[rounds ? null : "empty "][initial(name)]" + +/obj/item/mecha_ammo/update_desc() + . = ..() + desc = rounds ? initial(desc) : "An exosuit ammuniton box that has since been emptied. It can be safely folded for recycling." + +/obj/item/mecha_ammo/update_icon_state() + icon_state = rounds ? initial(icon_state) : "empty" + return ..() /obj/item/mecha_ammo/attack_self(mob/user) ..() diff --git a/code/game/mecha/mech_bay.dm b/code/game/mecha/mech_bay.dm index 6856bf252b10..87a778c02d61 100644 --- a/code/game/mecha/mech_bay.dm +++ b/code/game/mecha/mech_bay.dm @@ -32,6 +32,11 @@ . = ..() recharging_turf = get_step(loc, dir) + var/area_name = get_area_name(src, format_text = TRUE) + if(area_name in GLOB.roundstart_station_mechcharger_areas) + return + GLOB.roundstart_station_mechcharger_areas += area_name + /obj/machinery/mech_bay_recharge_port/Destroy() if (recharge_console && recharge_console.recharge_port == src) recharge_console.recharge_port = null @@ -58,17 +63,17 @@ if(!recharging_mech) recharging_mech = locate(/obj/mecha) in recharging_turf if(recharging_mech) - recharge_console.update_icon() + recharge_console.update_appearance(updates = ALL) if(recharging_mech && recharging_mech.cell) if(recharging_mech.cell.charge < recharging_mech.cell.maxcharge) var/delta = min(max_charge, recharging_mech.cell.maxcharge - recharging_mech.cell.charge) recharging_mech.give_power(delta) use_power(delta*150) else - recharge_console.update_icon() + recharge_console.update_appearance(updates = ALL) if(recharging_mech.loc != recharging_turf) recharging_mech = null - recharge_console.update_icon() + recharge_console.update_appearance(updates = ALL) /obj/machinery/mech_bay_recharge_port/attackby(obj/item/I, mob/user, params) @@ -105,7 +110,7 @@ if("reconnect") reconnect() . = TRUE - update_icon() + update_appearance(updates = ALL) /obj/machinery/computer/mech_bay_power_console/ui_data(mob/user) var/list/data = list() @@ -138,8 +143,8 @@ else recharge_port = null -/obj/machinery/computer/mech_bay_power_console/update_icon() - ..() +/obj/machinery/computer/mech_bay_power_console/update_appearance(updates = ALL) + . = ..() if(!recharge_port || !recharge_port.recharging_mech || !recharge_port.recharging_mech.cell || !(recharge_port.recharging_mech.cell.charge < recharge_port.recharging_mech.cell.maxcharge) || stat & (NOPOWER|BROKEN)) return add_overlay("recharge_comp_on") diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 2dd6d04dc012..1b89b7297d98 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -170,7 +170,8 @@ diag_hud_set_mechcell() diag_hud_set_mechstat() -/obj/mecha/update_icon() +/obj/mecha/update_appearance(updates = ALL) + . = ..() if (silicon_pilot && silicon_icon_state) icon_state = silicon_icon_state . = ..() @@ -467,13 +468,13 @@ if(0.75 to INFINITY) occupant.clear_alert("charge") if(0.5 to 0.75) - occupant.throw_alert("charge", /atom/movable/screen/alert/lowcell, 1) + occupant.throw_alert("charge", /atom/movable/screen/alert/lowcell/mech, 1) if(0.25 to 0.5) - occupant.throw_alert("charge", /atom/movable/screen/alert/lowcell, 2) + occupant.throw_alert("charge", /atom/movable/screen/alert/lowcell/mech, 2) if(0.01 to 0.25) - occupant.throw_alert("charge", /atom/movable/screen/alert/lowcell, 3) + occupant.throw_alert("charge", /atom/movable/screen/alert/lowcell/mech, 3) else - occupant.throw_alert("charge", /atom/movable/screen/alert/emptycell) + occupant.throw_alert("charge", /atom/movable/screen/alert/emptycell/mech) var/integrity = obj_integrity/max_integrity*100 switch(integrity) @@ -914,7 +915,7 @@ occupant = AI silicon_pilot = TRUE icon_state = initial(icon_state) - update_icon() + update_appearance(updates = ALL) playsound(src, 'sound/machines/windowdoor.ogg', 50, 1) if(!internal_damage) SEND_SOUND(occupant, sound('sound/mecha/nominal.ogg',volume=50)) @@ -1097,7 +1098,7 @@ brainmob.update_mobility() brainmob.update_mouse_pointer() icon_state = initial(icon_state) - update_icon() + update_appearance(updates = ALL) setDir(dir_in) log_message("[mmi_as_oc] moved in as pilot.", LOG_MECHA) if(istype(mmi_as_oc, /obj/item/mmi/posibrain)) //yogs start reminder to posibrain to not be shitlers @@ -1190,7 +1191,7 @@ L.forceMove(mmi) L.reset_perspective() mmi.mecha = null - mmi.update_icon() + mmi.update_appearance(updates = ALL) L.mobility_flags = NONE icon_state = initial(icon_state)+"-open" setDir(dir_in) diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm index 281768bcb5ed..4616a9bbe2fe 100644 --- a/code/game/mecha/working/ripley.dm +++ b/code/game/mecha/working/ripley.dm @@ -33,14 +33,14 @@ /obj/mecha/working/ripley/go_out() ..() - update_icon() + update_appearance(updates = ALL) /obj/mecha/working/ripley/moved_inside(mob/living/carbon/human/H) ..() - update_icon() + update_appearance(updates = ALL) -/obj/mecha/working/ripley/update_icon() - ..() +/obj/mecha/working/ripley/update_appearance(updates = ALL) + . = ..() var/datum/component/armor_plate/C = GetComponent(/datum/component/armor_plate) if (C.amount) cut_overlays() diff --git a/code/game/objects/effects/decals/cleanable.dm b/code/game/objects/effects/decals/cleanable.dm index cc8431e6b7da..5ccadca1aaa8 100644 --- a/code/game/objects/effects/decals/cleanable.dm +++ b/code/game/objects/effects/decals/cleanable.dm @@ -101,7 +101,7 @@ S.bloody_shoes[blood_state] = min(MAX_SHOE_BLOODINESS,S.bloody_shoes[blood_state]+add_blood) S.add_blood_DNA(return_blood_DNA()) S.blood_state = blood_state - update_icon() + update_appearance(updates = ALL) H.update_inv_shoes() diff --git a/code/game/objects/effects/decals/cleanable/humans.dm b/code/game/objects/effects/decals/cleanable/humans.dm index a2201e36b820..3663f2e6228b 100644 --- a/code/game/objects/effects/decals/cleanable/humans.dm +++ b/code/game/objects/effects/decals/cleanable/humans.dm @@ -210,7 +210,7 @@ shoe_types |= S.type if (!(entered_dirs & H.dir)) entered_dirs |= H.dir - update_icon() + update_appearance(updates = ALL) /obj/effect/decal/cleanable/blood/footprints/Uncrossed(atom/movable/O) ..() @@ -222,10 +222,11 @@ shoe_types |= S.type if (!(exited_dirs & H.dir)) exited_dirs |= H.dir - update_icon() + update_appearance(updates = ALL) -/obj/effect/decal/cleanable/blood/footprints/update_icon() +/obj/effect/decal/cleanable/blood/footprints/update_appearance(updates = ALL) + . = ..() cut_overlays() for(var/Ddir in GLOB.cardinals) diff --git a/code/game/objects/effects/effect_system/fluid_spread/effects_foam.dm b/code/game/objects/effects/effect_system/fluid_spread/effects_foam.dm index ceb1508bdc9e..d4182515032e 100644 --- a/code/game/objects/effects/effect_system/fluid_spread/effects_foam.dm +++ b/code/game/objects/effects/effect_system/fluid_spread/effects_foam.dm @@ -400,7 +400,7 @@ for(var/obj/machinery/atmospherics/components/unary/comp in location) if(!comp.welded) comp.welded = TRUE - comp.update_icon() + comp.update_appearance(updates = ALL) comp.visible_message(span_danger("[comp] sealed shut!")) for(var/mob/living/potential_tinder in location) diff --git a/code/game/objects/effects/effect_system/fluid_spread/effects_smoke.dm b/code/game/objects/effects/effect_system/fluid_spread/effects_smoke.dm index 28fd3ac25150..3d28e7ac499f 100644 --- a/code/game/objects/effects/effect_system/fluid_spread/effects_smoke.dm +++ b/code/game/objects/effects/effect_system/fluid_spread/effects_smoke.dm @@ -306,7 +306,7 @@ for(var/obj/machinery/atmospherics/components/unary/comp in chilly) if(!isnull(comp.welded) && !comp.welded) //must be an unwelded vent pump or vent scrubber. comp.welded = TRUE - comp.update_icon() + comp.update_appearance(updates = ALL) comp.visible_message(span_danger("[comp] is frozen shut!")) // Extinguishes everything in the turf diff --git a/code/game/objects/effects/glowshroom.dm b/code/game/objects/effects/glowshroom.dm index c1e5fbb34288..f0001c9997af 100644 --- a/code/game/objects/effects/glowshroom.dm +++ b/code/game/objects/effects/glowshroom.dm @@ -87,7 +87,7 @@ GLOBAL_VAR_INIT(glowshrooms, 0) myseed.genes += G set_light(G.glow_range(myseed), G.glow_power(myseed), G.glow_color) setDir(calc_dir()) - var/base_icon_state = initial(icon_state) + base_icon_state = initial(icon_state) if(!floor) switch(dir) //offset to make it be on the wall rather than on the floor if(NORTH) diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm index 9c4618da8052..2f65621a85ce 100644 --- a/code/game/objects/effects/mines.dm +++ b/code/game/objects/effects/mines.dm @@ -84,6 +84,7 @@ anchored = TRUE icon = 'icons/obj/misc.dmi' icon_state = "uglymine" + base_icon_state = "uglymine" alpha = 30 var/triggered = 0 var/smartmine = FALSE @@ -93,6 +94,7 @@ /obj/effect/mine/Initialize(mapload) . = ..() layer = ABOVE_MOB_LAYER + update_appearance(UPDATE_ICON_STATE) /obj/effect/mine/attackby(obj/I, mob/user, params) if(istype(I, /obj/item/multitool)) @@ -104,6 +106,13 @@ return return ..() +/obj/effect/mine/update_icon_state() + . = ..() + if(triggered) + icon_state = base_icon_state +// else +// icon_state = "[base_icon_state]-inactive" + /obj/effect/mine/proc/mineEffect(mob/victim) to_chat(victim, span_danger("*click*")) @@ -150,6 +159,7 @@ desc = "Rubber ducky you're so fine, you make bathtime lots of fuuun. Rubber ducky I'm awfully fooooond of yooooouuuu~" icon = 'icons/obj/watercloset.dmi' icon_state = "rubberducky" + base_icon_state = "rubberducky" var/sound = 'sound/items/bikehorn.ogg' range_heavy = 2 range_light = 3 @@ -260,6 +270,7 @@ desc = "pick me up" icon = 'icons/effects/effects.dmi' icon_state = "electricity2" + base_icon_state = "electricity2" density = FALSE alpha = 255 var/duration = 0 diff --git a/code/game/objects/effects/spawners/bombspawner.dm b/code/game/objects/effects/spawners/bombspawner.dm index ef4a9eda4c6c..4d64257e2ede 100644 --- a/code/game/objects/effects/spawners/bombspawner.dm +++ b/code/game/objects/effects/spawners/bombspawner.dm @@ -35,7 +35,7 @@ V.attached_device = A A.holder = V - V.update_icon() + V.update_appearance(updates = ALL) return INITIALIZE_HINT_QDEL diff --git a/code/game/objects/effects/temporary_visuals/miscellaneous.dm b/code/game/objects/effects/temporary_visuals/miscellaneous.dm index 575a9938b457..b71325398101 100644 --- a/code/game/objects/effects/temporary_visuals/miscellaneous.dm +++ b/code/game/objects/effects/temporary_visuals/miscellaneous.dm @@ -164,7 +164,7 @@ /obj/effect/temp_visual/dir_setting/curse/hand/Initialize(mapload, set_dir, handedness) . = ..() - update_icon() + update_appearance(updates = ALL) /obj/effect/temp_visual/bsa_splash name = "\improper Bluespace energy wave" @@ -183,7 +183,8 @@ if(EAST) icon_state = "beam_splash_e" -/obj/item/projectile/curse_hand/update_icon() +/obj/item/projectile/curse_hand/update_appearance(updates = ALL) + . = ..() icon_state = "[icon_state][handedness]" /obj/effect/temp_visual/wizard @@ -530,13 +531,14 @@ status = rcd_status delay = rcd_delay if (status == RCD_DECONSTRUCT) - addtimer(CALLBACK(src, TYPE_PROC_REF(/atom/, update_icon)), 11) + addtimer(CALLBACK(src, TYPE_PROC_REF(/atom/, update_appearance)), 11) delay -= 11 icon_state = "rcd_end_reverse" else - update_icon() + update_appearance(updates = ALL) -/obj/effect/constructing_effect/update_icon() +/obj/effect/constructing_effect/update_appearance(updates = ALL) + . = ..() icon_state = "rcd" if (delay < 10) icon_state += "_shortest" diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 71419193dd92..829be6ed8ff7 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -939,7 +939,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) var/hand_index = M.get_held_index_of_item(src) if(hand_index) M.held_items[hand_index] = null - M.update_inv_hands() + M.update_held_items() if(M.client) M.client.screen -= src layer = initial(layer) diff --git a/code/game/objects/items/RCD.dm b/code/game/objects/items/RCD.dm index 51da17397150..d44e84e3e5fe 100644 --- a/code/game/objects/items/RCD.dm +++ b/code/game/objects/items/RCD.dm @@ -114,7 +114,7 @@ RLD loaded = loadwithsheets(O, user) if(loaded) to_chat(user, span_notice("[src] now holds [matter]/[max_matter] matter-units.")) - update_icon() //ensures that ammo counters (if present) get updated + update_appearance(updates = ALL) //ensures that ammo counters (if present) get updated return loaded /obj/item/construction/proc/loadwithsheets(obj/item/stack/S, mob/user) @@ -148,7 +148,7 @@ RLD to_chat(user, no_ammo_message) return FALSE matter -= amount - update_icon() + update_appearance(updates = ALL) return TRUE else if(silo_mats.on_hold()) @@ -736,8 +736,8 @@ RLD explosion(src, 0, 0, 3, 1, flame_range = 1) qdel(src) -/obj/item/construction/rcd/update_icon() - ..() +/obj/item/construction/rcd/update_appearance(updates = ALL) + . = ..() if(has_ammobar) var/ratio = CEILING((matter / max_matter) * ammo_sections, 1) cut_overlays() //To prevent infinite stacking of overlays @@ -745,7 +745,7 @@ RLD /obj/item/construction/rcd/Initialize(mapload) . = ..() - update_icon() + update_appearance(updates = ALL) /obj/item/construction/rcd/borg no_ammo_message = span_warning("Insufficient charge.") @@ -875,7 +875,8 @@ RLD else ..() -/obj/item/construction/rld/update_icon() +/obj/item/construction/rld/update_appearance(updates = ALL) + . = ..() icon_state = "rld-[round(matter/35)]" ..() diff --git a/code/game/objects/items/RCL.dm b/code/game/objects/items/RCL.dm index 431d6ed997d4..fddb07c4a711 100644 --- a/code/game/objects/items/RCL.dm +++ b/code/game/objects/items/RCL.dm @@ -23,6 +23,10 @@ var/datum/radial_menu/persistent/wiring_gui_menu var/mob/listeningTo +/obj/item/twohanded/rcl/Initialize(mapload) + . = ..() + update_appearance(UPDATE_ICON_STATE) + /obj/item/twohanded/rcl/attackby(obj/item/W, mob/user) if(istype(W, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/C = W @@ -42,7 +46,7 @@ loaded.amount += transfer_amount else return - update_icon() + update_appearance(UPDATE_ICON_STATE) to_chat(user, span_notice("You add the cables to [src]. It now contains [loaded.amount].")) else if(W.tool_behaviour == TOOL_SCREWDRIVER) if(!loaded) @@ -74,7 +78,7 @@ loaded.forceMove(get_turf(user)) loaded = null - update_icon() + update_appearance(UPDATE_ICON_STATE) else ..() @@ -90,7 +94,7 @@ QDEL_NULL(wiring_gui_menu) return ..() -/obj/item/twohanded/rcl/update_icon() +/obj/item/twohanded/rcl/update_icon_state() if(!loaded) icon_state = "rcl-0" item_state = "rcl-0" @@ -108,9 +112,10 @@ else icon_state = "rcl-0" item_state = "rcl-0" + return ..() /obj/item/twohanded/rcl/proc/is_empty(mob/user, loud = 1) - update_icon() + update_appearance(UPDATE_ICON_STATE) if(!loaded || !loaded.amount) if(loud) to_chat(user, span_notice("The last of the cables unreel from [src].")) @@ -193,7 +198,7 @@ loaded.color = colors[current_color_index] last = loaded.place_turf(get_turf(src), user, turn(user.dir, 180)) is_empty(user) //If we've run out, display message - update_icon() + update_appearance(UPDATE_ICON_STATE) //searches the current tile for a stub cable of the same colour @@ -286,11 +291,11 @@ loaded = new() loaded.max_amount = max_amount loaded.amount = max_amount - update_icon() + update_appearance(UPDATE_ICON_STATE) /obj/item/twohanded/rcl/Initialize(mapload) . = ..() - update_icon() + update_appearance(UPDATE_ICON_STATE) /obj/item/twohanded/rcl/ui_action_click(mob/user, action) if(istype(action, /datum/action/item_action/rcl_col)) @@ -315,7 +320,7 @@ name = "makeshift rapid cable layer" ghetto = TRUE -/obj/item/twohanded/rcl/ghetto/update_icon() +/obj/item/twohanded/rcl/ghetto/update_icon_state() if(!loaded) icon_state = "rclg-0" item_state = "rclg-0" @@ -327,6 +332,7 @@ else icon_state = "rclg-1" item_state = "rclg-1" + return ..() /datum/action/item_action/rcl_col name = "Change Cable Color" diff --git a/code/game/objects/items/RPD.dm b/code/game/objects/items/RPD.dm index 2c15f37f7aca..363631a7d6f4 100644 --- a/code/game/objects/items/RPD.dm +++ b/code/game/objects/items/RPD.dm @@ -493,7 +493,7 @@ GLOBAL_LIST_INIT(fluid_duct_recipes, list( activate() C.add_fingerprint(usr) - C.update_icon() + C.update_appearance(updates = ALL) if(mode&WRENCH_MODE) C.wrench_act(user, src) return diff --git a/code/game/objects/items/ashtray.dm b/code/game/objects/items/ashtray.dm index b00227bde330..018700fe40ff 100644 --- a/code/game/objects/items/ashtray.dm +++ b/code/game/objects/items/ashtray.dm @@ -5,8 +5,8 @@ icon_state = "ashtray" var/max_butts = 10 -/obj/item/ashtray/update_icon() - ..() +/obj/item/ashtray/update_appearance(updates = ALL) + . = ..() overlays.Cut() if(contents.len == max_butts) add_overlay(image('icons/obj/objects.dmi',"ashtray_full")) @@ -32,7 +32,7 @@ if(user.transferItemToLoc(W, src)) visible_message(span_notice("[user] places [W] in [src].")) - update_icon() + update_appearance(updates = ALL) return ..() @@ -42,5 +42,5 @@ visible_message(span_danger("\The [src] slams into [hit_atom], spilling its contents!")) for(var/obj/O in contents) O.forceMove(drop_location()) - update_icon() + update_appearance(updates = ALL) return ..() diff --git a/code/game/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm index eda41ee6e58b..d5ef69b589c4 100644 --- a/code/game/objects/items/bodybag.dm +++ b/code/game/objects/items/bodybag.dm @@ -148,5 +148,5 @@ bag.killing = !bag.killing if(bag.deployed_bag) - bag.deployed_bag.update_icon() + bag.deployed_bag.update_appearance(updates = ALL) to_chat(user, span_notice("\The [bag] is now set to [bag.killing ? "LETHAL" : "NON-LETHAL"].")) diff --git a/code/game/objects/items/candle.dm b/code/game/objects/items/candle.dm index a4192a0ccc97..edc18b3e0244 100644 --- a/code/game/objects/items/candle.dm +++ b/code/game/objects/items/candle.dm @@ -24,7 +24,8 @@ if(start_lit) light() -/obj/item/candle/update_icon() +/obj/item/candle/update_icon_state() + . = ..() icon_state = "candle[(wax > 800) ? ((wax > 1500) ? 1 : 2) : 3][lit ? "_lit" : ""]" /obj/item/candle/attackby(obj/item/W, mob/user, params) @@ -49,13 +50,13 @@ usr.visible_message(show_message) set_light_on(TRUE) START_PROCESSING(SSobj, src) - update_icon() + update_appearance(UPDATE_ICON | UPDATE_NAME) /obj/item/candle/proc/put_out_candle() if(!lit) return lit = FALSE - update_icon() + update_appearance(updates = ALL) set_light_on(FALSE) return TRUE @@ -75,7 +76,7 @@ else new /obj/item/trash/candle(loc) qdel(src) - update_icon() + update_appearance(updates = ALL) open_flame() /obj/item/candle/attack_self(mob/user) @@ -99,7 +100,8 @@ wax = 2000 candle_type = "resin" -/obj/item/candle/resin/update_icon() +/obj/item/candle/resin/update_appearance(updates = ALL) + . = ..() icon_state = "resincandle[(wax > 800) ? ((wax > 1500) ? 1 : 2) : 3][lit ? "_lit" : ""]" #undef CANDLE_LUMINOSITY diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm index ef5817c0b0da..6632fee2c330 100644 --- a/code/game/objects/items/cards_ids.dm +++ b/code/game/objects/items/cards_ids.dm @@ -37,16 +37,16 @@ var/detail_color = COLOR_ASSEMBLY_ORANGE /obj/item/card/data/Initialize(mapload) - .=..() - update_icon() + . = ..() + update_appearance(updates = ALL) -/obj/item/card/data/update_icon() - cut_overlays() +/obj/item/card/data/update_overlays() + . = ..() if(detail_color == COLOR_FLOORTILE_GRAY) return var/mutable_appearance/detail_overlay = mutable_appearance('icons/obj/card.dmi', "[icon_state]-color") detail_overlay.color = detail_color - add_overlay(detail_overlay) + . += detail_overlay /obj/item/card/data/full_color desc = "A plastic magstripe card for simple and speedy data storage and transfer. This one has the entire card colored." @@ -601,7 +601,11 @@ update_label("John Doe", "Clowny") addtimer(CALLBACK(src, PROC_REF(wipe_id)), 50 SECONDS) /obj/item/card/id/captains_spare/temporary/proc/wipe_id() - visible_message(span_danger("The temporary spare begins to smolder"), span_userdanger("The temporary spare begins to smolder"), span_userdanger("The temporary spare begins to smolder")) + visible_message( + span_danger("The temporary spare begins to smolder!"), \ + span_userdanger("The temporary spare begins to smolder!"), \ + span_userdanger("You smell something burning really badly!") + ) sleep(10 SECONDS) if(isliving(loc)) var/mob/living/M = loc @@ -614,7 +618,7 @@ update_label("John Doe", "Clowny") if(holder.obj_integrity > holder.integrity_failure) //we dont want to heal it by accident holder.take_damage(holder.obj_integrity - holder.integrity_failure, BURN) //we do a bit of trolling for being naughty else - holder.update_icon() //update the icon anyway so it pops out + holder.update_appearance(updates = ALL) //update the icon anyway so it pops out visible_message(span_danger("The heat of the temporary spare shatters the glass!")); fire_act() sleep(2 SECONDS) @@ -622,7 +626,7 @@ update_label("John Doe", "Clowny") var/obj/structure/fireaxecabinet/bridge/spare/holder = loc forceMove(holder.loc) holder.spareid = null - holder.update_icon() + holder.update_appearance(updates = ALL) burn() //yogs: redd ports holopay but as paystands diff --git a/code/game/objects/items/chrono_eraser.dm b/code/game/objects/items/chrono_eraser.dm index 6a966ba8fb84..5eb12bd42ea3 100644 --- a/code/game/objects/items/chrono_eraser.dm +++ b/code/game/objects/items/chrono_eraser.dm @@ -57,6 +57,7 @@ var/turf/startpos = null /obj/item/gun/energy/chrono_gun/Initialize(mapload) + AddElement(/datum/element/update_icon_blocker) . = ..() ADD_TRAIT(src, TRAIT_NODROP, CHRONO_GUN_TRAIT) if(istype(loc, /obj/item/chrono_eraser)) @@ -65,9 +66,6 @@ TED = new(src.loc) return INITIALIZE_HINT_QDEL -/obj/item/gun/energy/chrono_gun/update_icon() - return - /obj/item/gun/energy/chrono_gun/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0) if(field) field_disconnect(field) @@ -192,7 +190,7 @@ cached_icon.Insert(mob_icon, "frame[i]") mob_underlay = mutable_appearance(cached_icon, "frame1") - update_icon() + update_appearance(updates = ALL) desc = initial(desc) + "
[span_info("It appears to contain [target.name].")]" START_PROCESSING(SSobj, src) @@ -203,7 +201,8 @@ gun.field_disconnect(src) return ..() -/obj/structure/chrono_field/update_icon() +/obj/structure/chrono_field/update_appearance(updates = ALL) + . = ..() var/ttk_frame = 1 - (timetokill / initial(timetokill)) ttk_frame = clamp(CEILING(ttk_frame * CHRONO_FRAME_COUNT, 1), 1, CHRONO_FRAME_COUNT) if(ttk_frame != RPpos) @@ -232,7 +231,7 @@ captured.Unconscious(80) if(captured.loc != src) captured.forceMove(src) - update_icon() + update_appearance(updates = ALL) if(gun) if(gun.field_check(src)) timetokill -= delta_time diff --git a/code/game/objects/items/cigs_lighters.dm b/code/game/objects/items/cigs_lighters.dm index 49b113d4b35e..d4f3dbc81fb0 100644 --- a/code/game/objects/items/cigs_lighters.dm +++ b/code/game/objects/items/cigs_lighters.dm @@ -50,7 +50,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM desc = "A [initial(name)]. This one is lit." attack_verb = list("burnt","singed") START_PROCESSING(SSobj, src) - update_icon() + update_appearance(updates = ALL) /obj/item/match/proc/matchburnout() if(lit) @@ -225,7 +225,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM if(ismob(loc)) var/mob/M = loc M.update_inv_wear_mask() - M.update_inv_hands() + M.update_held_items() /obj/item/clothing/mask/cigarette/extinguish() if(!lit) @@ -244,7 +244,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM var/mob/living/M = loc to_chat(M, span_notice("Your [name] goes out.")) M.update_inv_wear_mask() - M.update_inv_hands() + M.update_held_items() /obj/item/clothing/mask/cigarette/proc/handle_reagents() if(reagents.total_volume) @@ -571,7 +571,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM . = ..() if(!overlay_state) overlay_state = pick(overlay_list) - update_icon() + update_appearance(updates = ALL) /obj/item/lighter/cyborg_unequip(mob/user) if(!lit) @@ -587,7 +587,8 @@ CIGARETTE PACKETS ARE IN FANCY.DM user.visible_message(span_suicide("[user] begins whacking [user.p_them()]self with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!")) return BRUTELOSS -/obj/item/lighter/update_icon() +/obj/item/lighter/update_appearance(updates = ALL) + . = ..() cut_overlays() var/mutable_appearance/lighter_overlay = mutable_appearance(icon,"lighter_overlay_[overlay_state][lit ? "-on" : ""]") icon_state = "[initial(icon_state)][lit ? "-on" : ""]" @@ -614,7 +615,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM attack_verb = null //human_defense.dm takes care of it STOP_PROCESSING(SSobj, src) set_light_on(lit) - update_icon() + update_appearance(updates = ALL) /obj/item/lighter/extinguish() set_lit(FALSE) @@ -719,9 +720,10 @@ CIGARETTE PACKETS ARE IN FANCY.DM . = ..() if(!lighter_color) lighter_color = pick(color_list) - update_icon() + update_appearance(updates = ALL) -/obj/item/lighter/greyscale/update_icon() +/obj/item/lighter/greyscale/update_appearance(updates = ALL) + . = ..() cut_overlays() var/mutable_appearance/lighter_overlay = mutable_appearance(icon,"lighter_overlay_[overlay_state][lit ? "-on" : ""]") icon_state = "[initial(icon_state)][lit ? "-on" : ""]" diff --git a/code/game/objects/items/clown_items.dm b/code/game/objects/items/clown_items.dm index db9f88b54758..2c1e11ca74b9 100644 --- a/code/game/objects/items/clown_items.dm +++ b/code/game/objects/items/clown_items.dm @@ -167,7 +167,7 @@ if(T) // this would be awkward if there wasn't a tongue here at this point user.visible_message(span_alert("[user] shoves [src] inside of [T]!")) T.honked = TRUE - T.update_icon() + T.update_appearance(updates = ALL) qdel(src) /obj/item/bikehorn/Initialize(mapload) diff --git a/code/game/objects/items/cosmetics.dm b/code/game/objects/items/cosmetics.dm index afefb10b3efa..0053d3a74edd 100644 --- a/code/game/objects/items/cosmetics.dm +++ b/code/game/objects/items/cosmetics.dm @@ -8,6 +8,16 @@ var/colour = "red" var/open = FALSE +/obj/item/lipstick/Initialize(mapload) + . = ..() +// AddElement(/datum/element/update_icon_updates_onmob) + update_appearance(UPDATE_ICON) + +/obj/item/lipstick/vv_edit_var(vname, vval) + . = ..() + if(vname == NAMEOF(src, open)) + update_appearance(UPDATE_ICON) + /obj/item/lipstick/purple name = "purple lipstick" colour = "purple" @@ -32,16 +42,22 @@ name = "[colour] lipstick" /obj/item/lipstick/attack_self(mob/user) - cut_overlays() to_chat(user, span_notice("You twist \the [src] [open ? "closed" : "open"].")) open = !open - if(open) - var/mutable_appearance/colored_overlay = mutable_appearance(icon, "lipstick_uncap_color") - colored_overlay.color = colour - icon_state = "lipstick_uncap" - add_overlay(colored_overlay) - else - icon_state = "lipstick" + update_appearance(UPDATE_ICON) + +/obj/item/lipstick/update_icon_state() + icon_state = "lipstick[open ? "_uncap" : null]" + item_state = "lipstick[open ? "open" : null]" + return ..() + +/obj/item/lipstick/update_overlays() + . = ..() + if(!open) + return + var/mutable_appearance/colored_overlay = mutable_appearance(icon, "lipstick_uncap_color") + colored_overlay.color = colour + . += colored_overlay /obj/item/lipstick/attack(mob/M, mob/user) if(!open) diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index 0cc21547a31f..d8a31abe616f 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -172,7 +172,7 @@ if(has_cap) is_capped = !is_capped to_chat(user, span_notice("The cap on [src] is now [is_capped ? "on" : "off"].")) - update_icon() + update_appearance(updates = ALL) /obj/item/toy/crayon/proc/staticDrawables() @@ -262,7 +262,7 @@ . = TRUE paint_mode = PAINT_NORMAL drawtype = "a" - update_icon() + update_appearance(updates = ALL) /obj/item/toy/crayon/proc/crayon_text_strip(text) var/static/regex/crayon_r = new /regex(@"[^\w!?,.=%#&+\/\-]") @@ -548,9 +548,10 @@ new /obj/item/toy/crayon/blue(src) new /obj/item/toy/crayon/purple(src) new /obj/item/toy/crayon/black(src) - update_icon() + update_appearance(updates = ALL) -/obj/item/storage/crayons/update_icon() +/obj/item/storage/crayons/update_appearance(updates = ALL) + . = ..() cut_overlays() for(var/obj/item/toy/crayon/crayon in contents) add_overlay(mutable_appearance('icons/obj/crayons.dmi', crayon.crayon_color)) @@ -615,7 +616,7 @@ playsound(src, 'sound/effects/spray.ogg', 5, TRUE, 5) if(can_change_colour) paint_color = "#C0C0C0" - update_icon() + update_appearance(updates = ALL) if(actually_paints) H.lip_style = "spray_face" H.lip_color = paint_color @@ -634,7 +635,7 @@ paint_color = pick("#DA0000","#FF9300","#FFF200","#A8E61D","#00B7EF", "#DA00FF") refill() - update_icon() + update_appearance(updates = ALL) /obj/item/toy/crayon/spraycan/examine(mob/user) @@ -702,7 +703,8 @@ . = ..() -/obj/item/toy/crayon/spraycan/update_icon() +/obj/item/toy/crayon/spraycan/update_appearance(updates = ALL) + . = ..() icon_state = is_capped ? icon_capped : icon_uncapped if(use_overlays) cut_overlays() diff --git a/code/game/objects/items/credit_holochip.dm b/code/game/objects/items/credit_holochip.dm index e5d687fcc2fa..87b68ab7390e 100644 --- a/code/game/objects/items/credit_holochip.dm +++ b/code/game/objects/items/credit_holochip.dm @@ -12,7 +12,7 @@ . = ..() if(amount) credits = amount - update_icon() + update_appearance(updates = ALL) /obj/item/holochip/examine(mob/user) . = ..() @@ -22,7 +22,8 @@ /obj/item/holochip/get_item_credit_value() return credits -/obj/item/holochip/update_icon() +/obj/item/holochip/update_appearance(updates = ALL) + . = ..() name = "\improper [credits] credit holochip" var/rounded_credits = credits switch(credits) @@ -65,7 +66,7 @@ credits -= amount if(credits == 0) qdel(src) - update_icon() + update_appearance(updates = ALL) return amount else if(pay_anyway) qdel(src) @@ -79,7 +80,7 @@ var/obj/item/holochip/H = I credits += H.credits to_chat(user, span_notice("You insert the credits into [src].")) - update_icon() + update_appearance(updates = ALL) qdel(H) /obj/item/holochip/AltClick(mob/user) diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm index 46ffad89b726..4fdb24925208 100644 --- a/code/game/objects/items/defib.dm +++ b/code/game/objects/items/defib.dm @@ -30,14 +30,14 @@ /obj/item/defibrillator/Initialize(mapload) //starts without a cell for rnd . = ..() paddles = make_paddles() - update_icon() + update_appearance(updates = ALL) return /obj/item/defibrillator/loaded/Initialize(mapload) //starts with hicap . = ..() paddles = make_paddles() cell = new(src) - update_icon() + update_appearance(updates = ALL) return /obj/item/defibrillator/fire_act(exposed_temperature, exposed_volume) @@ -50,9 +50,10 @@ if(paddles?.loc == src) paddles.extinguish() -/obj/item/defibrillator/update_icon() +/obj/item/defibrillator/update_appearance(updates = ALL) + . = ..() update_power() - update_overlays() + update_appearance(UPDATE_OVERLAYS) update_charge() /obj/item/defibrillator/proc/update_power() @@ -64,16 +65,16 @@ else powered = FALSE -/obj/item/defibrillator/proc/update_overlays() - cut_overlays() +/obj/item/defibrillator/update_overlays() + . = ..() if(!on) - add_overlay("[initial(icon_state)]-paddles") + . += "[initial(icon_state)]-paddles" if(powered) - add_overlay("[initial(icon_state)]-powered") + . += "[initial(icon_state)]-powered" if(!cell) - add_overlay("[initial(icon_state)]-nocell") + . += "[initial(icon_state)]-nocell" if(!safety) - add_overlay("[initial(icon_state)]-emagged") + . += "[initial(icon_state)]-emagged" /obj/item/defibrillator/proc/update_charge() if(powered) //so it doesn't show charge if it's unpowered @@ -85,7 +86,7 @@ /obj/item/defibrillator/CheckParts(list/parts_list) ..() cell = locate(/obj/item/stock_parts/cell) in contents - update_icon() + update_appearance(updates = ALL) /obj/item/defibrillator/ui_action_click() toggle_paddles() @@ -133,15 +134,15 @@ return cell = W to_chat(user, span_notice("You install a cell in [src].")) - update_icon() + update_appearance(updates = ALL) else if(W.tool_behaviour == TOOL_SCREWDRIVER) if(cell) - cell.update_icon() + cell.update_appearance(updates = ALL) cell.forceMove(get_turf(src)) cell = null to_chat(user, span_notice("You remove the cell from [src].")) - update_icon() + update_appearance(updates = ALL) else return ..() @@ -169,7 +170,7 @@ else visible_message(span_notice("[src] buzzes: Surge detected!")) playsound(src, 'sound/machines/buzz-sigh.ogg', 50, 0) - update_icon() + update_appearance(updates = ALL) /obj/item/defibrillator/proc/toggle_paddles() set name = "Toggle Paddles" @@ -182,14 +183,14 @@ if(!usr.put_in_hands(paddles)) on = FALSE to_chat(user, span_warning("You need a free hand to hold the paddles!")) - update_icon() + update_appearance(updates = ALL) return else //Remove from their hands and back onto the defib unit paddles.unwield() remove_paddles(user) - update_icon() + update_appearance(updates = ALL) for(var/X in actions) var/datum/action/A = X A.build_all_button_icons() @@ -201,7 +202,7 @@ ..() if((slot_flags == ITEM_SLOT_BACK && slot != ITEM_SLOT_BACK) || (slot_flags == ITEM_SLOT_BELT && slot != ITEM_SLOT_BELT)) remove_paddles(user) - update_icon() + update_appearance(updates = ALL) /obj/item/defibrillator/item_action_slot_check(slot, mob/user) if(slot == user.getBackSlot()) @@ -219,18 +220,18 @@ remove_paddles(M) QDEL_NULL(paddles) . = ..() - update_icon() + update_appearance(updates = ALL) /obj/item/defibrillator/proc/deductcharge(chrgdeductamt) if(cell) if(cell.charge < (paddles.revivecost+chrgdeductamt)) powered = FALSE - update_icon() + update_appearance(updates = ALL) if(cell.use(chrgdeductamt)) - update_icon() + update_appearance(updates = ALL) return TRUE else - update_icon() + update_appearance(updates = ALL) return FALSE /obj/item/defibrillator/proc/cooldowncheck(mob/user) @@ -243,8 +244,8 @@ user.visible_message(span_notice("[src] beeps: Charge depleted.")) playsound(src, 'sound/machines/defib_failed.ogg', 50, 0) paddles.cooldown = FALSE - paddles.update_icon() - update_icon() + paddles.update_appearance(updates = ALL) + update_appearance(updates = ALL) /obj/item/defibrillator/compact name = "compact defibrillator" @@ -263,7 +264,7 @@ . = ..() paddles = make_paddles() cell = new(src) - update_icon() + update_appearance(updates = ALL) /obj/item/defibrillator/compact/combat name = "combat defibrillator" @@ -275,13 +276,13 @@ . = ..() paddles = make_paddles() cell = new /obj/item/stock_parts/cell/infinite(src) - update_icon() + update_appearance(updates = ALL) /obj/item/defibrillator/compact/combat/loaded/attackby(obj/item/W, mob/user, params) if(W == paddles) paddles.unwield() toggle_paddles() - update_icon() + update_appearance(updates = ALL) return //paddles @@ -346,13 +347,13 @@ if(req_defib || !time) return cooldown = TRUE - update_icon() + update_appearance(updates = ALL) sleep(time) var/turf/T = get_turf(src) T.audible_message(span_notice("[src] beeps: Unit is recharged.")) playsound(src, 'sound/machines/defib_ready.ogg', 50, 0) cooldown = FALSE - update_icon() + update_appearance(updates = ALL) /obj/item/twohanded/shockpaddles/New(mainunit) ..() @@ -360,16 +361,17 @@ defib = mainunit forceMove(defib) busy = FALSE - update_icon() + update_appearance(updates = ALL) -/obj/item/twohanded/shockpaddles/update_icon() +/obj/item/twohanded/shockpaddles/update_icon_state() icon_state = "defibpaddles[wielded]" item_state = "defibpaddles[wielded]" if(cooldown) icon_state = "defibpaddles[wielded]_cooldown" if(iscarbon(loc)) var/mob/living/carbon/C = loc - C.update_inv_hands() + C.update_held_items() + return ..() /obj/item/twohanded/shockpaddles/suicide_act(mob/user) if(req_defib && !defib.deductcharge(revivecost)) @@ -397,7 +399,7 @@ return defib.on = FALSE forceMove(defib) - defib.update_icon() + defib.update_appearance(updates = ALL) /obj/item/twohanded/shockpaddles/proc/check_defib_exists(mainunit, mob/living/carbon/M, obj/O) if(!req_defib) @@ -491,7 +493,7 @@ defib.deductcharge(revivecost) cooldown = TRUE busy = FALSE - update_icon() + update_appearance(updates = ALL) if(req_defib) defib.cooldowncheck(user) else @@ -505,7 +507,7 @@ user.visible_message(span_warning("[user] begins to place [src] on [H]'s chest."), span_warning("You overcharge the paddles and begin to place them onto [H]'s chest...")) busy = TRUE - update_icon() + update_appearance(updates = ALL) if(do_after(user, 3 SECONDS, H)) user.visible_message(span_notice("[user] places [src] on [H]'s chest."), span_warning("You place [src] on [H]'s chest and begin to charge them.")) @@ -518,13 +520,13 @@ if(do_after(user, 3 SECONDS, H)) //Takes longer due to overcharging if(!H) busy = FALSE - update_icon() + update_appearance(updates = ALL) return if(H && H.stat == DEAD) to_chat(user, span_warning("[H] is dead.")) playsound(src, 'sound/machines/defib_failed.ogg', 50, 0) busy = FALSE - update_icon() + update_appearance(updates = ALL) return user.visible_message(span_boldannounce("[user] shocks [H] with \the [src]!"), span_warning("You shock [H] with \the [src]!")) playsound(src, 'sound/machines/defib_zap.ogg', 100, 1, -1) @@ -544,18 +546,18 @@ defib.deductcharge(revivecost) cooldown = TRUE busy = FALSE - update_icon() + update_appearance(updates = ALL) if(!req_defib) recharge(6 SECONDS) if(req_defib && (defib.cooldowncheck(user))) return busy = FALSE - update_icon() + update_appearance(updates = ALL) /obj/item/twohanded/shockpaddles/proc/do_help(mob/living/carbon/H, mob/living/user) user.visible_message(span_warning("[user] begins to place [src] on [H]'s chest."), span_warning("You begin to place [src] on [H]'s chest...")) busy = TRUE - update_icon() + update_appearance(updates = ALL) if(do_after(user, 3 SECONDS, H)) //beginning to place the paddles on patient's chest to allow some time for people to move away to stop the process user.visible_message(span_notice("[user] places [src] on [H]'s chest."), span_warning("You place [src] on [H]'s chest.")) playsound(src, 'sound/machines/defib_charge.ogg', 75, 0) @@ -573,7 +575,7 @@ user.audible_message(span_warning("[req_defib ? "[defib]" : "[src]"] buzzes: Patient's chest is obscured. Operation aborted.")) playsound(src, 'sound/machines/defib_failed.ogg', 50, 0) busy = FALSE - update_icon() + update_appearance(updates = ALL) return if(H.stat == DEAD) H.visible_message(span_warning("[H]'s body convulses a bit.")) @@ -640,7 +642,7 @@ if(req_defib) defib.deductcharge(revivecost) cooldown = 1 - update_icon() + update_appearance(updates = ALL) if(req_defib) defib.cooldowncheck(user) else @@ -660,7 +662,7 @@ user.visible_message(span_warning("[req_defib ? "[defib]" : "[src]"] buzzes: Patient is not in a valid state. Operation aborted.")) playsound(src, 'sound/machines/defib_failed.ogg', 50, 0) busy = FALSE - update_icon() + update_appearance(updates = ALL) /obj/item/twohanded/shockpaddles/cyborg name = "cyborg defibrillator paddles" diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 33f9eeb9899e..b9b1567adc9d 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -128,7 +128,7 @@ GLOBAL_LIST_EMPTY(PDAs) cartridge.host_pda = src if(insert_type) inserted_item = SSwardrobe.provide_type(insert_type, src) - update_icon() + update_appearance(updates = ALL) /obj/item/pda/Destroy() GLOB.PDAs -= src @@ -197,7 +197,8 @@ GLOBAL_LIST_EMPTY(PDAs) return TRUE return FALSE -/obj/item/pda/update_icon() +/obj/item/pda/update_appearance(updates = ALL) + . = ..() cut_overlays() var/mutable_appearance/overlay = new() overlay.pixel_x = overlays_x_offset @@ -349,7 +350,7 @@ GLOBAL_LIST_EMPTY(PDAs) if (pai) if(pai.loc != src) pai = null - update_icon() + update_appearance(updates = ALL) else dat += "
  • pAI Device Configuration
  • " dat += "
  • Eject pAI Device
  • " @@ -529,7 +530,7 @@ GLOBAL_LIST_EMPTY(PDAs) scanmode = PDA_SCANNER_NONE cartridge.host_pda = null cartridge = null - update_icon() + update_appearance(updates = ALL) //MENU FUNCTIONS=================================== @@ -722,7 +723,7 @@ GLOBAL_LIST_EMPTY(PDAs) //EXTRA FUNCTIONS=================================== if (mode == 2 || mode == 21)//To clear message overlays. - update_icon() + update_appearance(updates = ALL) if ((honkamt > 0) && (prob(60)))//For clown virus. honkamt-- @@ -753,7 +754,7 @@ GLOBAL_LIST_EMPTY(PDAs) . = id id = null - update_icon() + update_appearance(updates = ALL) if(ishuman(loc)) var/mob/living/carbon/human/H = loc @@ -856,7 +857,7 @@ GLOBAL_LIST_EMPTY(PDAs) to_chat(L, "[icon2html(src)] Message from [hrefstart][signal.data["name"]] ([signal.data["job"]])[hrefend], [signal.format_message(L)] [reply]") - update_icon() + update_appearance(updates = ALL) add_overlay(icon_alert) /obj/item/pda/proc/receive_ping(message) @@ -949,7 +950,7 @@ GLOBAL_LIST_EMPTY(PDAs) set_light_on(FALSE) else if(light_range) set_light_on(TRUE) - update_icon() + update_appearance(updates = ALL) for(var/X in actions) var/datum/action/A = X A.build_all_button_icons() @@ -962,7 +963,7 @@ GLOBAL_LIST_EMPTY(PDAs) if(inserted_item) to_chat(usr, span_notice("You remove [inserted_item] from [src].")) usr.put_in_hands(inserted_item) //Don't need to manage the pen ref, handled on Exited() - update_icon() + update_appearance(updates = ALL) else to_chat(usr, span_warning("This PDA does not have a pen in it!")) @@ -981,7 +982,7 @@ GLOBAL_LIST_EMPTY(PDAs) if(!user.transferItemToLoc(I, src)) return FALSE insert_id(I, user) - update_icon() + update_appearance(updates = ALL) return TRUE @@ -1007,7 +1008,7 @@ GLOBAL_LIST_EMPTY(PDAs) cartridge = C cartridge.host_pda = src to_chat(user, span_notice("You insert [cartridge] into [src].")) - update_icon() + update_appearance(updates = ALL) else if(istype(C, /obj/item/card/id)) var/obj/item/card/id/idcard = C @@ -1033,7 +1034,7 @@ GLOBAL_LIST_EMPTY(PDAs) return pai = C to_chat(user, span_notice("You slot \the [C] into [src].")) - update_icon() + update_appearance(updates = ALL) updateUsrDialog() else if(is_type_in_list(C, contained_item)) //Checks if there is a pen if(inserted_item) @@ -1043,7 +1044,7 @@ GLOBAL_LIST_EMPTY(PDAs) return to_chat(user, span_notice("You slide \the [C] into \the [src].")) inserted_item = C - update_icon() + update_appearance(updates = ALL) else if(istype(C, /obj/item/photo)) var/obj/item/photo/P = C picture = P.picture diff --git a/code/game/objects/items/devices/aicard.dm b/code/game/objects/items/devices/aicard.dm index 7fded4c4ae46..d1a17cbb42d3 100644 --- a/code/game/objects/items/devices/aicard.dm +++ b/code/game/objects/items/devices/aicard.dm @@ -38,22 +38,25 @@ target.transfer_ai(AI_TRANS_TO_CARD, user, null, src) if(AI) log_combat(user, AI, "carded", src) - update_icon() //Whatever happened, update the card's state (icon, name) to match. + update_appearance(updates = ALL) //Whatever happened, update the card's state (icon, name) to match. -/obj/item/aicard/update_icon() - cut_overlays() - if(AI) - name = "[initial(name)] - [AI.name]" - if(AI.stat == DEAD) - icon_state = "[initial(icon_state)]-404" - else - icon_state = "[initial(icon_state)]-full" - if(!AI.control_disabled) - add_overlay("[initial(icon_state)]-on") - AI.cancel_camera() - else - name = initial(name) +/obj/item/aicard/update_name() + . = ..() + name = "[initial(name)][AI ? " - [AI.name]" : null]" + +/obj/item/aicard/update_icon_state() + if(!AI) icon_state = initial(icon_state) + return ..() + icon_state = "[initial(icon_state)]-[AI.stat == DEAD ? "404" : "full"]" + AI.cancel_camera() + return ..() + +/obj/item/aicard/update_overlays() + . = ..() + if(!AI?.control_disabled) + return + . += "[initial(icon_state)]-on" /obj/item/aicard/ui_state(mob/user) return GLOB.hands_state @@ -104,4 +107,4 @@ AI.radio_enabled = !AI.radio_enabled to_chat(AI, "Your Subspace Transceiver has been [AI.radio_enabled ? "enabled" : "disabled"]!") . = TRUE - update_icon() + update_appearance(updates = ALL) diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index 37892b2b45ef..f5ce2bd69418 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -530,28 +530,31 @@ if(fuel <= 0) turn_off() STOP_PROCESSING(SSobj, src) - update_icon() + update_appearance(updates = ALL) /obj/item/flashlight/glowstick/proc/turn_off() on = FALSE - update_icon() + update_appearance(UPDATE_ICON) -/obj/item/flashlight/glowstick/update_icon() - item_state = "glowstick" - cut_overlays() +/obj/item/flashlight/glowstick/update_appearance(updates=ALL) + . = ..() if(fuel <= 0) - icon_state = "glowstick-empty" - cut_overlays() set_light_on(FALSE) - else if(on) - var/mutable_appearance/glowstick_overlay = mutable_appearance(icon, "glowstick-glow") - glowstick_overlay.color = color - add_overlay(glowstick_overlay) - item_state = "glowstick-on" + return + if(on) set_light_on(TRUE) - else - icon_state = "glowstick" - cut_overlays() + return + +/obj/item/flashlight/glowstick/update_icon_state() + icon_state = "[base_icon_state][(fuel <= 0) ? "-empty" : ""]" + item_state = "[base_icon_state][((fuel > 0) && on) ? "-on" : ""]" + return ..() + +/obj/item/flashlight/glowstick/update_overlays() + . = ..() + if(fuel <= 0 && !on) + return + /obj/item/flashlight/glowstick/attack_self(mob/user) if(fuel <= 0) diff --git a/code/game/objects/items/devices/geiger_counter.dm b/code/game/objects/items/devices/geiger_counter.dm index 11a22a8d7bc9..06a226907734 100644 --- a/code/game/objects/items/devices/geiger_counter.dm +++ b/code/game/objects/items/devices/geiger_counter.dm @@ -51,7 +51,7 @@ current_tick_amount = 0 - update_icon() + update_appearance(UPDATE_ICON) update_sound() /obj/item/geiger_counter/examine(mob/user) @@ -78,13 +78,15 @@ . += span_notice("The last radiation amount detected was [last_tick_amount]") -/obj/item/geiger_counter/update_icon() +/obj/item/geiger_counter/update_icon_state() if(!scanning) icon_state = "geiger_off" - return 1 + return ..() + if(obj_flags & EMAGGED) icon_state = "geiger_on_emag" - return 1 + return ..() + switch(radiation_count) if(-INFINITY to RAD_LEVEL_NORMAL) icon_state = "geiger_on_1" @@ -98,7 +100,7 @@ icon_state = "geiger_on_4" if(RAD_LEVEL_CRITICAL + 1 to INFINITY) icon_state = "geiger_on_5" - ..() + return ..() /obj/item/geiger_counter/proc/update_sound() var/datum/looping_sound/geiger/loop = soundloop @@ -116,11 +118,11 @@ if(amount <= RAD_BACKGROUND_RADIATION || !scanning) return current_tick_amount += amount - update_icon() + update_appearance(UPDATE_ICON) /obj/item/geiger_counter/attack_self(mob/user) scanning = !scanning - update_icon() + update_appearance(UPDATE_ICON) to_chat(user, span_notice("[icon2html(src, user)] You switch [scanning ? "on" : "off"] [src].")) /obj/item/geiger_counter/afterattack(atom/target, mob/user) @@ -163,7 +165,7 @@ user.visible_message(span_notice("[user] refastens [src]'s maintenance panel!"), span_notice("You reset [src] to its factory settings!")) obj_flags &= ~EMAGGED radiation_count = 0 - update_icon() + update_appearance(UPDATE_ICON) return 1 else return ..() @@ -176,7 +178,7 @@ return 0 radiation_count = 0 to_chat(usr, span_notice("You flush [src]'s radiation counts, resetting it to normal.")) - update_icon() + update_appearance(UPDATE_ICON) /obj/item/geiger_counter/emag_act(mob/user) if(obj_flags & EMAGGED) @@ -196,7 +198,7 @@ if(!scanning) return scanning = FALSE - update_icon() + update_appearance(UPDATE_ICON) /obj/item/geiger_counter/cyborg/equipped(mob/user) . = ..() diff --git a/code/game/objects/items/devices/lightreplacer.dm b/code/game/objects/items/devices/lightreplacer.dm index 69a308e2dabf..479e6dd67570 100644 --- a/code/game/objects/items/devices/lightreplacer.dm +++ b/code/game/objects/items/devices/lightreplacer.dm @@ -152,7 +152,8 @@ ReplaceLight(target, user) to_chat(user, status_string()) -/obj/item/lightreplacer/update_icon() +/obj/item/lightreplacer/update_appearance(updates = ALL) + . = ..() icon_state = "lightreplacer[(obj_flags & EMAGGED ? 1 : 0)]" /obj/item/lightreplacer/proc/status_string() @@ -225,7 +226,7 @@ name = "shortcircuited [initial(name)]" else name = initial(name) - update_icon() + update_appearance(updates = ALL) /obj/item/lightreplacer/proc/CanUse(mob/living/user) src.add_fingerprint(user) @@ -255,7 +256,7 @@ /obj/item/lightreplacer/proc/janicart_insert(mob/user, obj/structure/janitorialcart/J) J.put_in_cart(src, user) J.myreplacer = src - J.update_icon() + J.update_appearance(updates = ALL) /obj/item/lightreplacer/cyborg/janicart_insert(mob/user, obj/structure/janitorialcart/J) return diff --git a/code/game/objects/items/devices/megaphone.dm b/code/game/objects/items/devices/megaphone.dm index 2a101fbef0bb..2b75565c8b2e 100644 --- a/code/game/objects/items/devices/megaphone.dm +++ b/code/game/objects/items/devices/megaphone.dm @@ -24,7 +24,7 @@ /obj/item/megaphone/Initialize(mapload) . = ..() - update_icon() + update_appearance(updates = ALL) /obj/item/megaphone/equipped(mob/M, slot) . = ..() @@ -42,11 +42,11 @@ if(last_used > world.time) return FALSE last_used = world.time + recharge_time - update_icon() - addtimer(CALLBACK(src, TYPE_PROC_REF(/atom/, update_icon)), recharge_time) + update_appearance(updates = ALL) + addtimer(CALLBACK(src, TYPE_PROC_REF(/atom/, update_appearance)), recharge_time) return TRUE -/obj/item/megaphone/update_icon() +/obj/item/megaphone/update_appearance(updates = ALL) . = ..() cut_overlays() var/mutable_appearance/base_overlay diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm index a7c9cc6c68da..73dd04ae304e 100644 --- a/code/game/objects/items/devices/multitool.dm +++ b/code/game/objects/items/devices/multitool.dm @@ -77,7 +77,8 @@ if(hud_on) remove_hud(user) -/obj/item/multitool/ai_detect/update_icon() +/obj/item/multitool/ai_detect/update_appearance(updates = ALL) + . = ..() icon_state = "[initial(icon_state)][detect_state]" /obj/item/multitool/ai_detect/process() @@ -86,7 +87,7 @@ eye.setLoc(get_turf(src)) multitool_detect() if(detect_state != old_detect_state) - update_icon() + update_appearance(updates = ALL) /obj/item/multitool/ai_detect/proc/toggle_hud(mob/user) hud_on = !hud_on diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm index 449e9e660fa2..af79b4ca18e3 100644 --- a/code/game/objects/items/devices/powersink.dm +++ b/code/game/objects/items/devices/powersink.dm @@ -26,7 +26,8 @@ var/obj/structure/cable/attached // the attached cable -/obj/item/powersink/update_icon() +/obj/item/powersink/update_appearance(updates = ALL) + . = ..() icon_state = "powersink[mode == OPERATING]" /obj/item/powersink/proc/set_mode(value) @@ -56,7 +57,7 @@ density = TRUE mode = value - update_icon() + update_appearance(updates = ALL) set_light(0) /obj/item/powersink/attackby(obj/item/I, mob/user, params) diff --git a/code/game/objects/items/devices/quantum_keycard.dm b/code/game/objects/items/devices/quantum_keycard.dm index 7fb752a506fc..092424749c29 100644 --- a/code/game/objects/items/devices/quantum_keycard.dm +++ b/code/game/objects/items/devices/quantum_keycard.dm @@ -25,7 +25,8 @@ to_chat(user, span_notice("The keycard beeps twice and disconnects the quantum link.")) qpad = null -/obj/item/quantum_keycard/update_icon() +/obj/item/quantum_keycard/update_appearance(updates = ALL) + . = ..() if(qpad) icon_state = "quantum_keycard_on" else diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm index fdd1b6386b1d..bd981167f051 100644 --- a/code/game/objects/items/devices/taperecorder.dm +++ b/code/game/objects/items/devices/taperecorder.dm @@ -27,7 +27,7 @@ . = ..() if(starting_tape_type) mytape = new starting_tape_type(src) - update_icon() + update_appearance(updates = ALL) /obj/item/taperecorder/examine(mob/user) @@ -62,7 +62,7 @@ return mytape = I to_chat(user, span_notice("You insert [I] into [src].")) - update_icon() + update_appearance(updates = ALL) /obj/item/taperecorder/proc/eject(mob/user) @@ -71,7 +71,7 @@ stop() user.put_in_hands(mytape) mytape = null - update_icon() + update_appearance(updates = ALL) /obj/item/taperecorder/fire_act(exposed_temperature, exposed_volume) mytape.ruin() //Fires destroy the tape @@ -103,7 +103,8 @@ eject(usr) -/obj/item/taperecorder/update_icon() +/obj/item/taperecorder/update_appearance(updates = ALL) + . = ..() if(!mytape) icon_state = "taperecorder_empty" else if(recording) @@ -136,7 +137,7 @@ if(mytape.used_capacity < mytape.max_capacity) to_chat(usr, span_notice("Recording started.")) recording = 1 - update_icon() + update_appearance(updates = ALL) mytape.timestamp += mytape.used_capacity mytape.storedinfo += "\[[time2text(mytape.used_capacity * 10,"mm:ss")]\] Recording started." var/used = mytape.used_capacity //to stop runtimes when you eject the tape @@ -146,7 +147,7 @@ used++ sleep(1 SECONDS) recording = 0 - update_icon() + update_appearance(updates = ALL) else to_chat(usr, span_notice("The tape is full.")) @@ -168,7 +169,7 @@ playing = 0 var/turf/T = get_turf(src) T.visible_message("Tape Recorder: Playback stopped.") - update_icon() + update_appearance(updates = ALL) /obj/item/taperecorder/verb/play() @@ -185,7 +186,7 @@ return playing = 1 - update_icon() + update_appearance(updates = ALL) to_chat(usr, span_notice("Playing started.")) var/used = mytape.used_capacity //to stop runtimes when you eject the tape var/max = mytape.max_capacity @@ -210,7 +211,7 @@ i++ playing = 0 - update_icon() + update_appearance(updates = ALL) /obj/item/taperecorder/attack_self(mob/user) diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm index eb7dba3b8602..c40222c0975d 100644 --- a/code/game/objects/items/devices/traitordevices.dm +++ b/code/game/objects/items/devices/traitordevices.dm @@ -275,4 +275,4 @@ effective or pretty fucking useless. GLOB.active_jammers |= src else GLOB.active_jammers -= src - update_icon() + update_appearance(updates = ALL) diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm index f8cc8bfc3f33..3f18775cd324 100644 --- a/code/game/objects/items/devices/transfer_valve.dm +++ b/code/game/objects/items/devices/transfer_valve.dm @@ -35,7 +35,7 @@ tank_two = item to_chat(user, span_notice("You attach the tank to the transfer valve.")) - update_icon() + update_appearance(updates = ALL) //TODO: Have this take an assemblyholder else if(isassembly(item)) var/obj/item/assembly/A = item @@ -50,7 +50,7 @@ attached_device = A to_chat(user, span_notice("You attach the [item] to the valve controls and secure it.")) A.holder = src - A.toggle_secure() //this calls update_icon(), which calls update_icon() on the holder (i.e. the bomb). + A.toggle_secure() //this calls update_appearance(updates = ALL), which calls update_appearance(updates = ALL) on the holder (i.e. the bomb). log_bomber(user, "attached a [item.name] to a ttv -", src, null, FALSE) attacher = user return @@ -96,7 +96,8 @@ /obj/item/transfer_valve/proc/toggle_off() toggle = TRUE -/obj/item/transfer_valve/update_icon() +/obj/item/transfer_valve/update_appearance(updates = ALL) + . = ..() cut_overlays() if(!tank_one && !tank_two && !attached_device) @@ -186,12 +187,12 @@ merge_gases() for(var/i in 1 to 6) - addtimer(CALLBACK(src, TYPE_PROC_REF(/atom/, update_icon)), 20 + (i - 1) * 10) + addtimer(CALLBACK(src, TYPE_PROC_REF(/atom/, update_appearance)), 20 + (i - 1) * 10) else if(valve_open && tank_one && tank_two) split_gases() valve_open = FALSE - update_icon() + update_appearance(updates = ALL) // this doesn't do anything but the timer etc. expects it to be here // eventually maybe have it update icon to show state (timer, prox etc.) like old bombs @@ -247,4 +248,4 @@ attached_device = null . = TRUE - update_icon() + update_appearance(updates = ALL) diff --git a/code/game/objects/items/dice.dm b/code/game/objects/items/dice.dm index 1274c8f6efe1..3e76b27ffb27 100644 --- a/code/game/objects/items/dice.dm +++ b/code/game/objects/items/dice.dm @@ -52,7 +52,7 @@ . = ..() if(!result) result = roll(sides) - update_icon() + update_appearance(updates = ALL) /obj/item/dice/suicide_act(mob/user) user.visible_message(span_suicide("[user] is gambling with death! It looks like [user.p_theyre()] trying to commit suicide!")) @@ -142,8 +142,9 @@ w_class = WEIGHT_CLASS_SMALL sides = 100 -/obj/item/dice/d100/update_icon() - return +/obj/item/dice/d100/Initialize(mapload) + AddElement(/datum/element/update_icon_blocker) + return ..() /obj/item/dice/eightbd20 name = "strange d20" @@ -152,8 +153,9 @@ sides = 20 special_faces = list("It is certain","It is decidedly so","Without a doubt","Yes, definitely","You may rely on it","As I see it, yes","Most likely","Outlook good","Yes","Signs point to yes","Reply hazy try again","Ask again later","Better not tell you now","Cannot predict now","Concentrate and ask again","Don't count on it","My reply is no","My sources say no","Outlook not so good","Very doubtful") -/obj/item/dice/eightbd20/update_icon() - return +/obj/item/dice/eightbd20/Initialize(mapload) + AddElement(/datum/element/update_icon_blocker) + return ..() /obj/item/dice/fourdd6 name = "4d d6" @@ -162,8 +164,9 @@ sides = 48 special_faces = list("Cube-Side: 1-1","Cube-Side: 1-2","Cube-Side: 1-3","Cube-Side: 1-4","Cube-Side: 1-5","Cube-Side: 1-6","Cube-Side: 2-1","Cube-Side: 2-2","Cube-Side: 2-3","Cube-Side: 2-4","Cube-Side: 2-5","Cube-Side: 2-6","Cube-Side: 3-1","Cube-Side: 3-2","Cube-Side: 3-3","Cube-Side: 3-4","Cube-Side: 3-5","Cube-Side: 3-6","Cube-Side: 4-1","Cube-Side: 4-2","Cube-Side: 4-3","Cube-Side: 4-4","Cube-Side: 4-5","Cube-Side: 4-6","Cube-Side: 5-1","Cube-Side: 5-2","Cube-Side: 5-3","Cube-Side: 5-4","Cube-Side: 5-5","Cube-Side: 5-6","Cube-Side: 6-1","Cube-Side: 6-2","Cube-Side: 6-3","Cube-Side: 6-4","Cube-Side: 6-5","Cube-Side: 6-6","Cube-Side: 7-1","Cube-Side: 7-2","Cube-Side: 7-3","Cube-Side: 7-4","Cube-Side: 7-5","Cube-Side: 7-6","Cube-Side: 8-1","Cube-Side: 8-2","Cube-Side: 8-3","Cube-Side: 8-4","Cube-Side: 8-5","Cube-Side: 8-6") -/obj/item/dice/fourdd6/update_icon() - return +/obj/item/dice/fourdd6/Initialize(mapload) + AddElement(/datum/element/update_icon_blocker) + return ..() /obj/item/dice/attack_self(mob/user) diceroll(user) @@ -188,7 +191,7 @@ comment = "NAT 20!" else if(sides == 20 && result == 1) comment = "Ouch, bad luck." - update_icon() + update_appearance(updates = ALL) if(initial(icon_state) == "d00") result = (result - 1)*10 if(special_faces.len == sides) @@ -205,7 +208,8 @@ else if(!src.throwing) //Dice was thrown and is coming to rest visible_message(span_notice("[src] rolls to a stop, landing on [result]. [comment]")) -/obj/item/dice/update_icon() +/obj/item/dice/update_appearance(updates = ALL) + . = ..() cut_overlays() add_overlay("[src.icon_state]-[src.result]") diff --git a/code/game/objects/items/discoball.dm b/code/game/objects/items/discoball.dm index 89050035ff53..dbdef247b827 100644 --- a/code/game/objects/items/discoball.dm +++ b/code/game/objects/items/discoball.dm @@ -28,7 +28,7 @@ /obj/structure/discoball/Initialize(mapload) . = ..() - update_icon() + update_appearance(updates = ALL) /obj/structure/discoball/attack_hand(mob/living/carbon/human/user) . = ..() @@ -51,7 +51,7 @@ TurnedOn = FALSE set_light(0) remove_atom_colour(TEMPORARY_COLOUR_PRIORITY) - update_icon() + update_appearance(updates = ALL) if(TimerID) deltimer(TimerID) over() @@ -69,10 +69,11 @@ current_color = random_color() set_light_color(current_color) add_atom_colour("#[current_color]", FIXED_COLOUR_PRIORITY) - update_icon() + update_appearance(updates = ALL) TimerID = addtimer(CALLBACK(src, PROC_REF(DiscoFever)), 5, TIMER_STOPPABLE) //Call ourselves every 0.5 seconds to change colors -/obj/structure/discoball/update_icon() +/obj/structure/discoball/update_appearance(updates = ALL) + . = ..() cut_overlays() icon_state = "disco_[TurnedOn]" var/mutable_appearance/base_overlay = mutable_appearance(icon, "ethdisco_base") diff --git a/code/game/objects/items/documents.dm b/code/game/objects/items/documents.dm index f9f44e9a8859..52a04549baa8 100644 --- a/code/game/objects/items/documents.dm +++ b/code/game/objects/items/documents.dm @@ -56,4 +56,4 @@ icon_state = "docs_[C.crayon_color]" forgedseal = C.crayon_color to_chat(user, span_notice("You forge the official seal with a [C.crayon_color] crayon. No one will notice... right?")) - update_icon() + update_appearance(updates = ALL) diff --git a/code/game/objects/items/etherealdiscoball.dm b/code/game/objects/items/etherealdiscoball.dm index a2bff00767c0..72c75a70fe33 100644 --- a/code/game/objects/items/etherealdiscoball.dm +++ b/code/game/objects/items/etherealdiscoball.dm @@ -25,7 +25,7 @@ /obj/structure/etherealball/Initialize(mapload) . = ..() - update_icon() + update_appearance(updates = ALL) /obj/structure/etherealball/attack_hand(mob/living/carbon/human/user) . = ..() @@ -53,7 +53,7 @@ TurnedOn = FALSE set_light(0) remove_atom_colour(TEMPORARY_COLOUR_PRIORITY) - update_icon() + update_appearance(updates = ALL) if(TimerID) deltimer(TimerID) @@ -62,10 +62,11 @@ current_color = random_color() set_light(range, power, current_color) add_atom_colour("#[current_color]", FIXED_COLOUR_PRIORITY) - update_icon() + update_appearance(updates = ALL) TimerID = addtimer(CALLBACK(src, PROC_REF(DiscoFever)), 5, TIMER_STOPPABLE) //Call ourselves every 0.5 seconds to change colors -/obj/structure/etherealball/update_icon() +/obj/structure/etherealball/update_appearance(updates = ALL) + . = ..() cut_overlays() icon_state = "ethdisco_head_[TurnedOn]" var/mutable_appearance/base_overlay = mutable_appearance(icon, "ethdisco_base") diff --git a/code/game/objects/items/flamethrower.dm b/code/game/objects/items/flamethrower.dm index 33f9d6790b37..8f8738735442 100644 --- a/code/game/objects/items/flamethrower.dm +++ b/code/game/objects/items/flamethrower.dm @@ -54,7 +54,8 @@ igniter.flamethrower_process(location) -/obj/item/flamethrower/update_icon() +/obj/item/flamethrower/update_appearance(updates = ALL) + . = ..() cut_overlays() if(igniter) add_overlay("+igniter[status]") @@ -67,7 +68,7 @@ item_state = "flamethrower_0" if(ismob(loc)) var/mob/M = loc - M.update_inv_hands() + M.update_held_items() return /obj/item/flamethrower/afterattack(atom/target, mob/user, flag) @@ -104,7 +105,7 @@ else if(W.tool_behaviour == TOOL_SCREWDRIVER && igniter && !lit) status = !status to_chat(user, span_notice("[igniter] is now [status ? "secured" : "unsecured"]!")) - update_icon() + update_appearance(updates = ALL) return else if(isigniter(W)) @@ -116,7 +117,7 @@ if(!user.transferItemToLoc(W, src)) return igniter = I - update_icon() + update_appearance(updates = ALL) return else if(istype(W, /obj/item/tank/internals/plasma)) @@ -129,7 +130,7 @@ if(!user.transferItemToLoc(W, src)) return ptank = W - update_icon() + update_appearance(updates = ALL) return else @@ -150,7 +151,7 @@ user.put_in_hands(ptank) ptank = null to_chat(user, span_notice("You remove the plasma tank from [src]!")) - update_icon() + update_appearance(updates = ALL) /obj/item/flamethrower/examine(mob/user) . = ..() @@ -178,7 +179,7 @@ playsound(loc, deac_sound, 50, TRUE) STOP_PROCESSING(SSobj,src) set_light_on(lit) - update_icon() + update_appearance(updates = ALL) /obj/item/flamethrower/CheckParts(list/parts_list) ..() @@ -187,7 +188,7 @@ weldtool.status = FALSE igniter.secured = FALSE status = TRUE - update_icon() + update_appearance(updates = ALL) //Called from turf.dm turf/dblclick /obj/item/flamethrower/proc/flame_turf(turflist) @@ -265,7 +266,7 @@ set_light(0) playsound(loc, deac_sound, 50, TRUE) STOP_PROCESSING(SSobj,src) - update_icon() + update_appearance(updates = ALL) return FALSE //Burn it @@ -302,7 +303,7 @@ status = TRUE if(create_with_tank) ptank = new /obj/item/tank/internals/plasma/full(src) - update_icon() + update_appearance(updates = ALL) /obj/item/flamethrower/full create_full = TRUE diff --git a/code/game/objects/items/granters/martial_arts/plasma_fist.dm b/code/game/objects/items/granters/martial_arts/plasma_fist.dm index 8b9b1adb4b82..820a7825a35a 100644 --- a/code/game/objects/items/granters/martial_arts/plasma_fist.dm +++ b/code/game/objects/items/granters/martial_arts/plasma_fist.dm @@ -18,9 +18,9 @@ /obj/item/book/granter/martial/plasma_fist/on_reading_finished(mob/living/carbon/user) . = ..() - update_icon() + update_appearance(updates = ALL) -/obj/item/book/granter/martial/plasma_fist/update_icon() +/obj/item/book/granter/martial/plasma_fist/update_appearance(updates = ALL) . = ..() if(uses <= 0) name = "empty scroll" diff --git a/code/game/objects/items/granters/martial_arts/sleeping_carp.dm b/code/game/objects/items/granters/martial_arts/sleeping_carp.dm index a6e2eed79f23..89ce70279e54 100644 --- a/code/game/objects/items/granters/martial_arts/sleeping_carp.dm +++ b/code/game/objects/items/granters/martial_arts/sleeping_carp.dm @@ -21,9 +21,9 @@ /obj/item/book/granter/martial/carp/on_reading_finished(mob/living/carbon/user) . = ..() - update_icon() + update_appearance(updates = ALL) -/obj/item/book/granter/martial/carp/update_icon(updates) +/obj/item/book/granter/martial/carp/update_appearance(updates) . = ..() if(!uses) name = "empty scroll" diff --git a/code/game/objects/items/grenades/plastic.dm b/code/game/objects/items/grenades/plastic.dm index 9fd496e03565..6db078962692 100644 --- a/code/game/objects/items/grenades/plastic.dm +++ b/code/game/objects/items/grenades/plastic.dm @@ -42,14 +42,14 @@ assemblyattacher = user.ckey to_chat(user, span_notice("You add [A] to the [name].")) playsound(src, 'sound/weapons/tap.ogg', 20, 1) - update_icon() + update_appearance(updates = ALL) return if(nadeassembly && I.tool_behaviour == TOOL_WIRECUTTER) I.play_tool_sound(src, 20) nadeassembly.forceMove(get_turf(src)) nadeassembly.master = null nadeassembly = null - update_icon() + update_appearance(updates = ALL) return ..() @@ -167,7 +167,8 @@ user.gib(1, 1) qdel(src) -/obj/item/grenade/plastic/update_icon() +/obj/item/grenade/plastic/update_appearance(updates = ALL) + . = ..() if(nadeassembly) icon_state = "[item_state]1" else diff --git a/code/game/objects/items/handcuffs.dm b/code/game/objects/items/handcuffs.dm index ab87e548e670..0471950468b8 100644 --- a/code/game/objects/items/handcuffs.dm +++ b/code/game/objects/items/handcuffs.dm @@ -264,9 +264,10 @@ /obj/item/restraints/legcuffs/beartrap/Initialize(mapload) . = ..() - update_icon() + update_appearance(updates = ALL) -/obj/item/restraints/legcuffs/beartrap/update_icon() +/obj/item/restraints/legcuffs/beartrap/update_appearance(updates = ALL) + . = ..() icon_state = "[initial(icon_state)][armed]" /obj/item/restraints/legcuffs/beartrap/suicide_act(mob/user) @@ -281,12 +282,12 @@ ..() if(ishuman(user) && !user.stat && !user.restrained()) armed = !armed - update_icon() + update_appearance(updates = ALL) to_chat(user, span_notice("[src] is now [armed ? "armed" : "disarmed"]")) /obj/item/restraints/legcuffs/beartrap/proc/close_trap() armed = FALSE - update_icon() + update_appearance(updates = ALL) playsound(src, 'sound/effects/snap.ogg', 50, TRUE) /obj/item/restraints/legcuffs/beartrap/Crossed(AM as mob|obj) diff --git a/code/game/objects/items/holy_weapons.dm b/code/game/objects/items/holy_weapons.dm index 733066766591..127dbc226747 100644 --- a/code/game/objects/items/holy_weapons.dm +++ b/code/game/objects/items/holy_weapons.dm @@ -497,7 +497,7 @@ user.balloon_alert(user, "you unsheathe \the [src].") playsound(user, 'sound/items/unsheath.ogg', 25, TRUE) swords = FALSE - update_icon() + update_appearance(updates = ALL) /obj/item/nullrod/dualsword/attackby(obj/item/I, mob/living/user, params) . = ..() @@ -511,9 +511,9 @@ user.balloon_alert(user, "You sheathe \the [src].") playsound(user, 'sound/items/sheath.ogg', 25, TRUE) - update_icon() + update_appearance(updates = ALL) -/obj/item/nullrod/dualsword/update_icon() +/obj/item/nullrod/dualsword/update_appearance(updates = ALL) . = ..() item_state = swords ? "fulldual" : "emptydual" icon_state = item_state @@ -566,7 +566,7 @@ sheath.swordleft.forceMove(sheath) if(!sheath.swords) user.balloon_alert(user, "you sheathe \the [sheath].") - sheath.update_icon() + sheath.update_appearance(updates = ALL) playsound(user, 'sound/items/sheath.ogg', 25, TRUE) sheath.swords = TRUE diff --git a/code/game/objects/items/hot_potato.dm b/code/game/objects/items/hot_potato.dm index 2cf1258162b5..350187e5e3d1 100644 --- a/code/game/objects/items/hot_potato.dm +++ b/code/game/objects/items/hot_potato.dm @@ -138,7 +138,7 @@ /obj/item/hot_potato/proc/activate(delay, mob/user) if(active) return - update_icon() + update_appearance(updates = ALL) if(sticky) ADD_TRAIT(src, TRAIT_NODROP, HOT_POTATO_TRAIT) name = "primed [name]" @@ -150,14 +150,15 @@ active = TRUE /obj/item/hot_potato/proc/deactivate() - update_icon() + update_appearance(updates = ALL) name = initial(name) REMOVE_TRAIT(src, TRAIT_NODROP, HOT_POTATO_TRAIT) STOP_PROCESSING(SSfastprocess, src) colorize(null) active = FALSE -/obj/item/hot_potato/update_icon() +/obj/item/hot_potato/update_appearance(updates = ALL) + . = ..() icon_state = "[initial(icon_state)]" + "[active ? "_active" : ""]" /obj/item/hot_potato/syndicate diff --git a/code/game/objects/items/hourglass.dm b/code/game/objects/items/hourglass.dm index a9e35a0c206b..dfe3ec7ecb25 100644 --- a/code/game/objects/items/hourglass.dm +++ b/code/game/objects/items/hourglass.dm @@ -29,7 +29,8 @@ to_chat(user,span_notice("You stop the [src].")) //Sand magically flows back because that's more convinient to use. stop() -/obj/item/hourglass/update_icon() +/obj/item/hourglass/update_appearance(updates = ALL) + . = ..() if(timing_id) icon_state = "hourglass_active" else @@ -54,7 +55,7 @@ countdown.stop() finish_time = null animate(src) - update_icon() + update_appearance(updates = ALL) /obj/item/hourglass/proc/finish() visible_message(span_notice("[src] stops.")) @@ -79,4 +80,4 @@ if(user.client && user.client.holder) toggle(user) -#undef HOURGLASS_STATES \ No newline at end of file +#undef HOURGLASS_STATES diff --git a/code/game/objects/items/implants/implantcase.dm b/code/game/objects/items/implants/implantcase.dm index 17db84ab385e..37ef34642dd2 100644 --- a/code/game/objects/items/implants/implantcase.dm +++ b/code/game/objects/items/implants/implantcase.dm @@ -14,7 +14,8 @@ var/imp_type -/obj/item/implantcase/update_icon() +/obj/item/implantcase/update_appearance(updates = ALL) + . = ..() if(imp) icon_state = "implantcase-[imp.implant_color]" reagents = imp.reagents @@ -45,8 +46,8 @@ I.imp.forceMove(src) imp = I.imp I.imp = null - update_icon() - I.update_icon() + update_appearance(updates = ALL) + I.update_appearance(updates = ALL) else if(imp) if(I.imp) @@ -54,8 +55,8 @@ imp.forceMove(I) I.imp = imp imp = null - update_icon() - I.update_icon() + update_appearance(updates = ALL) + I.update_appearance(updates = ALL) else return ..() @@ -64,7 +65,7 @@ . = ..() if(imp_type) imp = new imp_type(src) - update_icon() + update_appearance(updates = ALL) /obj/item/implantcase/tracking diff --git a/code/game/objects/items/implants/implantchair.dm b/code/game/objects/items/implants/implantchair.dm index be5eee920a42..8135895097aa 100644 --- a/code/game/objects/items/implants/implantchair.dm +++ b/code/game/objects/items/implants/implantchair.dm @@ -24,7 +24,7 @@ /obj/machinery/implantchair/Initialize(mapload) . = ..() open_machine() - update_icon() + update_appearance(updates = ALL) /obj/machinery/implantchair/ui_state(mob/user) @@ -84,7 +84,7 @@ addtimer(CALLBACK(src,"set_ready"),injection_cooldown) else playsound(get_turf(src), 'sound/machines/buzz-sigh.ogg', 25, 1) - update_icon() + update_appearance(updates = ALL) /obj/machinery/implantchair/proc/implant_action(mob/living/M) var/obj/item/I = new implant_type @@ -99,7 +99,8 @@ visible_message(span_warning("[M] has been implanted by [src].")) return TRUE -/obj/machinery/implantchair/update_icon() +/obj/machinery/implantchair/update_appearance(updates = ALL) + . = ..() icon_state = initial(icon_state) if(state_open) icon_state += "_open" @@ -120,7 +121,7 @@ /obj/machinery/implantchair/proc/set_ready() ready = TRUE - update_icon() + update_appearance(updates = ALL) /obj/machinery/implantchair/container_resist(mob/living/user) user.changeNext_move(CLICK_CD_BREAKOUT) diff --git a/code/game/objects/items/implants/implanter.dm b/code/game/objects/items/implants/implanter.dm index c7ed44cd5f67..c8b6568a9bf0 100644 --- a/code/game/objects/items/implants/implanter.dm +++ b/code/game/objects/items/implants/implanter.dm @@ -15,7 +15,8 @@ var/imp_type = null -/obj/item/implanter/update_icon() +/obj/item/implanter/update_appearance(updates = ALL) + . = ..() if(imp) icon_state = "implanter1" else @@ -38,7 +39,7 @@ else M.visible_message("[user] has implanted [M].", span_notice("[user] implants you.")) imp = null - update_icon() + update_appearance(updates = ALL) else to_chat(user, span_warning("[src] fails to implant [M].")) @@ -63,4 +64,4 @@ . = ..() if(imp_type) imp = new imp_type(src) - update_icon() + update_appearance(updates = ALL) diff --git a/code/game/objects/items/implants/implantpad.dm b/code/game/objects/items/implants/implantpad.dm index a713a85584f3..47bdf0bcc3df 100644 --- a/code/game/objects/items/implants/implantpad.dm +++ b/code/game/objects/items/implants/implantpad.dm @@ -11,7 +11,8 @@ w_class = WEIGHT_CLASS_SMALL var/obj/item/implantcase/case = null -/obj/item/implantpad/update_icon() +/obj/item/implantpad/update_appearance(updates = ALL) + . = ..() icon_state = "implantpad-[!QDELETED(case)]" /obj/item/implantpad/examine(mob/user) @@ -27,7 +28,7 @@ /obj/item/implantpad/handle_atom_del(atom/A) if(A == case) case = null - update_icon() + update_appearance(updates = ALL) updateSelfDialog() . = ..() @@ -46,7 +47,7 @@ case = null updateSelfDialog() - update_icon() + update_appearance(updates = ALL) /obj/item/implantpad/attackby(obj/item/implantcase/C, mob/user, params) if(istype(C, /obj/item/implantcase) && !case) @@ -54,7 +55,7 @@ return case = C updateSelfDialog() - update_icon() + update_appearance(updates = ALL) else return ..() diff --git a/code/game/objects/items/inducer.dm b/code/game/objects/items/inducer.dm index bd4cbb3fbd1b..a30ada95d50e 100644 --- a/code/game/objects/items/inducer.dm +++ b/code/game/objects/items/inducer.dm @@ -22,8 +22,8 @@ var/totransfer = min(cell.charge,(powertransfer * coefficient)) var/transferred = target.give(totransfer) cell.use(transferred) - cell.update_icon() - target.update_icon() + cell.update_appearance(updates = ALL) + target.update_appearance(updates = ALL) /obj/item/inducer/get_cell() return cell @@ -66,12 +66,12 @@ if(!opened) to_chat(user, span_notice("You unscrew the battery compartment.")) opened = TRUE - update_icon() + update_appearance(updates = ALL) return else to_chat(user, span_notice("You close the battery compartment.")) opened = FALSE - update_icon() + update_appearance(updates = ALL) return if(istype(W, /obj/item/stock_parts/cell)) if(opened) @@ -80,7 +80,7 @@ return to_chat(user, span_notice("You insert [W] into [src].")) cell = W - update_icon() + update_appearance(updates = ALL) return else to_chat(user, span_notice("[src] already has \a [cell] installed!")) @@ -132,7 +132,7 @@ user.visible_message("Smoke rises off of [A]'s body!",span_notice("You smell something burning as [A] is charged by the [src]!")) do_sparks(1, FALSE, A) if(O) - O.update_icon() + O.update_appearance(updates = ALL) else break if(done_any) // Only show a message if we succeeded at least once @@ -154,7 +154,7 @@ induce(C, coefficient) do_sparks(1, FALSE, A) if(O) - O.update_icon() + O.update_appearance(updates = ALL) else break if(done_any) // Only show a message if we succeeded at least once @@ -179,10 +179,10 @@ /obj/item/inducer/attack_self(mob/user) if(opened && cell) user.visible_message("[user] removes [cell] from [src]!",span_notice("You remove [cell].")) - cell.update_icon() + cell.update_appearance(updates = ALL) user.put_in_hands(cell) cell = null - update_icon() + update_appearance(updates = ALL) /obj/item/inducer/examine(mob/living/M) @@ -194,7 +194,8 @@ if(opened) . += span_notice("Its battery compartment is open.") -/obj/item/inducer/update_icon() +/obj/item/inducer/update_appearance(updates = ALL) + . = ..() cut_overlays() if(opened) if(!cell) @@ -212,4 +213,4 @@ /obj/item/inducer/sci/Initialize(mapload) . = ..() - update_icon() + update_appearance(updates = ALL) diff --git a/code/game/objects/items/laser_level.dm b/code/game/objects/items/laser_level.dm index d6f9b5b7bc63..1a73ef90238b 100644 --- a/code/game/objects/items/laser_level.dm +++ b/code/game/objects/items/laser_level.dm @@ -15,7 +15,7 @@ /obj/item/laserlevel/Initialize(mapload) . = ..() - update_icon() + update_appearance(updates = ALL) /obj/item/laserlevel/attack_self(mob/user) lightlevel--; @@ -26,10 +26,11 @@ set_light(l_range = lightlevel / 2, l_power = (lightlevel / 4), l_color = "#00ff00") else set_light(0) - update_icon() + update_appearance(updates = ALL) update_overlay(user) -/obj/item/laserlevel/update_icon() +/obj/item/laserlevel/update_appearance(updates = ALL) + . = ..() cut_overlays() add_overlay("[initial(icon_state)][lightlevel]") return diff --git a/code/game/objects/items/latexballoon.dm b/code/game/objects/items/latexballoon.dm index c8b2cc81f41e..464a19d6e71f 100644 --- a/code/game/objects/items/latexballoon.dm +++ b/code/game/objects/items/latexballoon.dm @@ -1,59 +1,113 @@ -/obj/item/latexballon +#define INFLATED "inflated" +#define POPPED "popped" +#define DEFLATED "deflated" + +/obj/item/latexballoon name = "latex glove" desc = "Sterile and airtight." + icon_state = "latexballoon" icon = 'icons/obj/toy.dmi' - icon_state = "latexballon" item_state = "lgloves" force = 0 throwforce = 0 w_class = WEIGHT_CLASS_TINY throw_speed = 1 throw_range = 7 - var/state + var/state = DEFLATED var/datum/gas_mixture/air_contents = null -/obj/item/latexballon/proc/blow(obj/item/tank/tank, mob/user) - if (icon_state == "latexballon_bursted") +/obj/item/latexballoon/Initialize(mapload) + . = ..() +// AddElement(/datum/element/atmos_sensitive, mapload) +// AddElement(/datum/element/update_icon_updates_onmob, ITEM_SLOT_HANDS) + +/obj/item/latexballoon/proc/set_state(state_to_set) + state = state_to_set + update_appearance(UPDATE_ICON | UPDATE_DESC) + +/obj/item/latexballoon/update_icon_state() + . = ..() + + switch(state) + if(INFLATED) + icon_state = "latexballoon_blow" + lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' + righthand_file = 'icons/mob/inhands/items_righthand.dmi' + item_state = "latexballoon" + if(POPPED) + icon_state = "latexballoon_bursted" + item_state = initial(item_state) + lefthand_file = initial(lefthand_file) + righthand_file = initial(righthand_file) + +/obj/item/latexballoon/update_desc() + . = ..() + switch(state) + if(INFLATED) + desc = "It's a blown up latex glove on a string." + if(POPPED) + desc = "The remains of a latex glove." + +/obj/item/latexballoon/proc/blow(obj/item/tank/tank, mob/user) + if(state == POPPED) return - icon_state = "latexballon_blow" - item_state = "latexballon" - user.update_inv_hands() - to_chat(user, span_notice("You blow up [src] with [tank].")) + air_contents = tank.remove_air_volume(3) -/obj/item/latexballon/proc/burst() - if (!air_contents || icon_state != "latexballon_blow") + if(isnull(air_contents)) + balloon_alert(user, "tank is empty!") return - playsound(src, 'sound/weapons/gunshot.ogg', 100, 1) - icon_state = "latexballon_bursted" - item_state = "lgloves" - if(isliving(loc)) - var/mob/living/user = src.loc - user.update_inv_hands() + + if(state == INFLATED) + burst() // too much air, pop it! + return + + playsound(src, 'sound/weapons/gunshot.ogg', 100, TRUE) + + balloon_alert(user, "you blow up the balloon!") // because it's a balloon obviously + + set_state(INFLATED) + +///obj/item/latexballoon/should_atmos_process(datum/gas_mixture/air, exposed_temperature) +// return (exposed_temperature > T0C+100) + +///obj/item/latexballoon/atmos_expose(datum/gas_mixture/air, exposed_temperature) +// burst() + +/obj/item/latexballoon/proc/burst() + if (!air_contents || state != INFLATED) + return + + set_state(POPPED) + playsound(src, 'sound/weapons/gunshot.ogg', 100, TRUE) loc.assume_air(air_contents) -/obj/item/latexballon/ex_act(severity, target) +/obj/item/latexballoon/ex_act(severity, target) burst() switch(severity) - if (1) + if (EXPLODE_DEVASTATE) qdel(src) - if (2) + if (EXPLODE_HEAVY) if (prob(50)) qdel(src) -/obj/item/latexballon/bullet_act(obj/item/projectile/P) - if(!P.nodamage) +/obj/item/latexballoon/bullet_act(obj/item/projectile/projectile) + if(projectile.damage > 0) burst() - return ..() -/obj/item/latexballon/temperature_expose(datum/gas_mixture/air, temperature, volume) - if(temperature > T0C+100) - burst() + return ..() -/obj/item/latexballon/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/tank)) - var/obj/item/tank/T = W - blow(T, user) +/obj/item/latexballoon/attackby(obj/item/item, mob/user, params) + if(istype(item, /obj/item/tank)) + var/obj/item/tank/air_tank = item + blow(air_tank, user) return - if (W.is_sharp() || W.is_hot()) + if(item.get_sharpness() || item.get_temperature()) burst() + return + + return ..() + +#undef INFLATED +#undef POPPED +#undef DEFLATED diff --git a/code/game/objects/items/mail.dm b/code/game/objects/items/mail.dm index f9cec544e499..4aa47cb9cb93 100644 --- a/code/game/objects/items/mail.dm +++ b/code/game/objects/items/mail.dm @@ -71,9 +71,9 @@ var/stamp_count = rand(1, stamp_max) for(var/i in 1 to stamp_count) stamps += list("stamp_[rand(2, 6)]") - update_icon() + update_appearance(updates = ALL) -/obj/item/mail/update_icon() +/obj/item/mail/update_appearance(updates = ALL) . = ..() var/bonus_stamp_offset = 0 for(var/stamp in stamps) @@ -217,7 +217,7 @@ desc = "A certified post crate from CentCom." icon_state = "mail" -/obj/structure/closet/crate/mail/update_icon() +/obj/structure/closet/crate/mail/update_appearance(updates = ALL) . = ..() if(opened) icon_state = "[initial(icon_state)]open" @@ -255,7 +255,7 @@ else if(prob(MAIL_JUNK_CHANCE)) new_mail.junk_mail() - update_icon() + update_appearance(updates = ALL) return mail_count diff --git a/code/game/objects/items/melee/energy.dm b/code/game/objects/items/melee/energy.dm index e7f75f6af293..0f4afddb832d 100644 --- a/code/game/objects/items/melee/energy.dm +++ b/code/game/objects/items/melee/energy.dm @@ -203,7 +203,7 @@ if(active) icon_state = "swordrainbow" - user.update_inv_hands() + user.update_held_items() else to_chat(user, span_warning("It's already fabulous!")) else diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm index 80e4a74d4a0e..3ab8c4e1e3c8 100644 --- a/code/game/objects/items/melee/misc.dm +++ b/code/game/objects/items/melee/misc.dm @@ -728,16 +728,16 @@ held_sausage = target else to_chat(user, span_warning("[target] doesn't seem to want to get on [src]!")) - update_icon() + update_appearance(updates = ALL) /obj/item/melee/roastingstick/attack_hand(mob/user) ..() if (held_sausage) user.put_in_hands(held_sausage) held_sausage = null - update_icon() + update_appearance(updates = ALL) -/obj/item/melee/roastingstick/update_icon() +/obj/item/melee/roastingstick/update_appearance(updates = ALL) . = ..() cut_overlays() if (held_sausage) @@ -759,7 +759,7 @@ /obj/item/melee/roastingstick/handle_atom_del(atom/target) if (target == held_sausage) held_sausage = null - update_icon() + update_appearance(updates = ALL) /obj/item/melee/roastingstick/afterattack(atom/target, mob/user, proximity) . = ..() @@ -790,4 +790,4 @@ held_sausage.add_atom_colour(rgb(103,63,24), FIXED_COLOUR_PRIORITY) held_sausage.name = "[target.name]-roasted [held_sausage.name]" held_sausage.desc = "[held_sausage.desc] It has been cooked to perfection on \a [target]." - update_icon() + update_appearance(updates = ALL) diff --git a/code/game/objects/items/mop.dm b/code/game/objects/items/mop.dm index 1b30148a6be8..783ed9b316bf 100644 --- a/code/game/objects/items/mop.dm +++ b/code/game/objects/items/mop.dm @@ -68,7 +68,7 @@ if(insertable) J.put_in_cart(src, user) J.mymop=src - J.update_icon() + J.update_appearance(updates = ALL) else to_chat(user, span_warning("You are unable to fit your [name] into the [J.name].")) return diff --git a/code/game/objects/items/pet_carrier.dm b/code/game/objects/items/pet_carrier.dm index 5bae8781895e..697bc44a46c9 100644 --- a/code/game/objects/items/pet_carrier.dm +++ b/code/game/objects/items/pet_carrier.dm @@ -67,7 +67,7 @@ to_chat(user, span_notice("You open [src]'s door.")) playsound(user, 'sound/effects/bin_open.ogg', 50, TRUE) open = TRUE - update_icon() + update_appearance(updates = ALL) /obj/item/pet_carrier/AltClick(mob/living/user) if(open || !user.canUseTopic(src, BE_CLOSE)) @@ -78,7 +78,7 @@ playsound(user, 'sound/machines/boltsdown.ogg', 30, TRUE) else playsound(user, 'sound/machines/boltsup.ogg', 30, TRUE) - update_icon() + update_appearance(updates = ALL) /obj/item/pet_carrier/attack(mob/living/target, mob/living/user) if(user.a_intent == INTENT_HARM) @@ -111,7 +111,7 @@ loc.visible_message(span_notice("[user] pushes open the door to [src]!"), \ span_warning("[user] pushes open the door of [src]!")) open = TRUE - update_icon() + update_appearance(updates = ALL) return else if(user.client) container_resist(user) @@ -128,7 +128,7 @@ to_chat(user, span_boldannounce("Bingo! The lock pops open!")) locked = FALSE playsound(src, 'sound/machines/boltsup.ogg', 30, TRUE) - update_icon() + update_appearance(updates = ALL) else loc.visible_message(span_warning("[src] starts rattling as something pushes against the door!"), null, null, null, user) to_chat(user, span_notice("You start pushing out of [src]... (This will take about 20 seconds.)")) @@ -138,10 +138,11 @@ to_chat(user, span_notice("You shove open [src]'s door against the lock's resistance and fall out!")) locked = FALSE open = TRUE - update_icon() + update_appearance(updates = ALL) remove_occupant(user) -/obj/item/pet_carrier/update_icon() +/obj/item/pet_carrier/update_appearance(updates = ALL) + . = ..() cut_overlay("unlocked") cut_overlay("locked") if(open) diff --git a/code/game/objects/items/pinpointer.dm b/code/game/objects/items/pinpointer.dm index b9b0f901ffdf..5c5f8ed6e668 100644 --- a/code/game/objects/items/pinpointer.dm +++ b/code/game/objects/items/pinpointer.dm @@ -43,18 +43,19 @@ else target = null STOP_PROCESSING(SSfastprocess, src) - update_icon() + update_appearance(updates = ALL) /obj/item/pinpointer/process() if(!active) return PROCESS_KILL scan_for_target() - update_icon() + update_appearance(updates = ALL) /obj/item/pinpointer/proc/scan_for_target() return -/obj/item/pinpointer/update_icon() +/obj/item/pinpointer/update_appearance(updates = ALL) + . = ..() cut_overlays() if(!active) return diff --git a/code/game/objects/items/plushes.dm b/code/game/objects/items/plushes.dm index cedef7937a18..fb7fba1e4e25 100644 --- a/code/game/objects/items/plushes.dm +++ b/code/game/objects/items/plushes.dm @@ -236,7 +236,7 @@ vowbroken = TRUE mood_message = pick(vowbroken_message) - update_desc() + update_appearance(UPDATE_DESC) /obj/item/toy/plush/proc/scorned_by(obj/item/toy/plush/Outmoded) scorned_by.Add(Outmoded) @@ -250,7 +250,7 @@ lover.cheer_up() mood_message = pick(love_message) - update_desc() + update_appearance(UPDATE_DESC) if(partner) //who? partner = null //more like who cares @@ -267,7 +267,7 @@ partner.heal_memories() mood_message = pick(partner_message) - update_desc() + update_appearance(UPDATE_DESC) /obj/item/toy/plush/proc/plop(obj/item/toy/plush/Daddy) if(partner != Daddy) @@ -292,12 +292,12 @@ young = TRUE name = "[Mama] Jr" //Icelandic naming convention pending normal_desc = "[src] is a little baby of [maternal_parent] and [paternal_parent]!" //original desc won't be used so the child can have moods - update_desc() + update_appearance(UPDATE_DESC) Mama.mood_message = pick(Mama.parent_message) - Mama.update_desc() + Mama.update_appearance(UPDATE_DESC) Dada.mood_message = pick(Dada.parent_message) - Dada.update_desc() + Dada.update_appearance(UPDATE_DESC) /obj/item/toy/plush/proc/bad_news(obj/item/toy/plush/Deceased) //cotton to cotton, sawdust to sawdust var/is_that_letter_for_me = FALSE @@ -336,7 +336,7 @@ if(is_that_letter_for_me) heartbroken = TRUE mood_message = pick(heartbroken_message) - update_desc() + update_appearance(UPDATE_DESC) /obj/item/toy/plush/proc/cheer_up() //it'll be all right if(!heartbroken) @@ -348,7 +348,7 @@ if(mood_message in heartbroken_message) mood_message = null - update_desc() + update_appearance(UPDATE_DESC) /obj/item/toy/plush/proc/heal_memories() //time fixes all wounds if(!vowbroken) @@ -357,7 +357,8 @@ mood_message = null cheer_up() -/obj/item/toy/plush/proc/update_desc() +/obj/item/toy/plush/update_desc() + . = ..() desc = normal_desc if(mood_message) desc += mood_message diff --git a/code/game/objects/items/pneumaticCannon.dm b/code/game/objects/items/pneumaticCannon.dm index f0342d8bb99c..c58e88fee87b 100644 --- a/code/game/objects/items/pneumaticCannon.dm +++ b/code/game/objects/items/pneumaticCannon.dm @@ -225,7 +225,7 @@ loadedWeightClass -= I.w_class else if (A == tank) tank = null - update_icon() + update_appearance(updates = ALL) /obj/item/pneumatic_cannon/ghetto //Obtainable by improvised methods; more gas per use, less capacity name = "improvised pneumatic cannon" @@ -250,9 +250,10 @@ return to_chat(user, span_notice("You hook \the [thetank] up to \the [src].")) tank = thetank - update_icon() + update_appearance(updates = ALL) -/obj/item/pneumatic_cannon/update_icon() +/obj/item/pneumatic_cannon/update_appearance(updates = ALL) + . = ..() cut_overlays() if(!tank) return diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm index b03a6ae36e00..7510695d91ec 100644 --- a/code/game/objects/items/robot/robot_items.dm +++ b/code/game/objects/items/robot/robot_items.dm @@ -180,8 +180,8 @@ /obj/item/borg/charger/Initialize(mapload) . = ..() -/obj/item/borg/charger/update_icon() - ..() +/obj/item/borg/charger/update_appearance(updates = ALL) + . = ..() icon_state = "charger_[mode]" /obj/item/borg/charger/attack_self(mob/user) @@ -190,7 +190,7 @@ else mode = "draw" to_chat(user, span_notice("You toggle [src] to \"[mode]\" mode.")) - update_icon() + update_appearance(updates = ALL) /obj/item/borg/charger/afterattack(obj/item/target, mob/living/silicon/robot/user, proximity_flag) . = ..() @@ -253,7 +253,7 @@ break if(!user.cell.give(draw)) break - target.update_icon() + target.update_appearance(updates = ALL) to_chat(user, span_notice("You stop charging yourself.")) @@ -291,7 +291,7 @@ break if(!cell.give(draw)) break - target.update_icon() + target.update_appearance(updates = ALL) to_chat(user, span_notice("You stop charging [target].")) @@ -608,10 +608,11 @@ to_chat(user, span_warning("[src]'s safety cutoff prevents you from activating it due to living beings being ontop of you!")) else deactivate_field() - update_icon() + update_appearance(updates = ALL) to_chat(user, span_boldnotice("You [active? "activate":"deactivate"] [src].")) -/obj/item/borg/projectile_dampen/update_icon() +/obj/item/borg/projectile_dampen/update_appearance(updates = ALL) + . = ..() icon_state = "[initial(icon_state)][active]" /obj/item/borg/projectile_dampen/proc/activate_field() diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm index 702eaa9836de..c0fd3b943323 100644 --- a/code/game/objects/items/robot/robot_parts.dm +++ b/code/game/objects/items/robot/robot_parts.dm @@ -36,7 +36,7 @@ /obj/item/robot_suit/Initialize(mapload) . = ..() - update_icon() + update_appearance(updates = ALL) /obj/item/robot_suit/prebuilt/Initialize(mapload) . = ..() @@ -51,7 +51,8 @@ chest.wired = TRUE chest.cell = new /obj/item/stock_parts/cell/high/plus(chest) -/obj/item/robot_suit/update_icon() +/obj/item/robot_suit/update_appearance(updates = ALL) + . = ..() cut_overlays() if(l_arm) add_overlay("[l_arm.icon_state]+o") @@ -108,7 +109,7 @@ to_chat(user, span_notice("You disassemble the cyborg shell.")) else to_chat(user, span_notice("There is nothing to remove from the endoskeleton.")) - update_icon() + update_appearance(updates = ALL) /obj/item/robot_suit/proc/put_in_hand_or_drop(mob/living/user, obj/item/I) //normal put_in_hands() drops the item ontop of the player, this drops it at the suit's loc if(!user.put_in_hands(I)) @@ -172,7 +173,7 @@ W.icon_state = initial(W.icon_state) W.cut_overlays() l_leg = W - update_icon() + update_appearance(updates = ALL) else if(istype(W, /obj/item/bodypart/r_leg/robot)) var/obj/item/bodypart/r_leg/robot/L = W @@ -186,7 +187,7 @@ W.icon_state = initial(W.icon_state) W.cut_overlays() r_leg = W - update_icon() + update_appearance(updates = ALL) else if(istype(W, /obj/item/bodypart/l_arm/robot)) var/obj/item/bodypart/l_leg/robot/L = W @@ -200,7 +201,7 @@ W.icon_state = initial(W.icon_state) W.cut_overlays() l_arm = W - update_icon() + update_appearance(updates = ALL) else if(istype(W, /obj/item/bodypart/r_arm/robot)) if(r_arm) @@ -210,7 +211,7 @@ W.icon_state = initial(W.icon_state)//in case it is a dismembered robotic limb W.cut_overlays() r_arm = W - update_icon() + update_appearance(updates = ALL) else if(istype(W, /obj/item/bodypart/chest/robot)) var/obj/item/bodypart/chest/robot/CH = W @@ -222,7 +223,7 @@ CH.icon_state = initial(CH.icon_state) //in case it is a dismembered robotic limb CH.cut_overlays() chest = CH - update_icon() + update_appearance(updates = ALL) else if(!CH.wired) to_chat(user, span_warning("You need to attach wires to it first!")) else @@ -242,7 +243,7 @@ HD.icon_state = initial(HD.icon_state)//in case it is a dismembered robotic limb HD.cut_overlays() head = HD - update_icon() + update_appearance(updates = ALL) else to_chat(user, span_warning("You need to attach a flash to it first!")) diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index 2d9f490bc109..ffd2fb164d0c 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -452,9 +452,10 @@ else to_chat(cyborg, span_notice("You deactivate the self-repair module.")) STOP_PROCESSING(SSobj, src) - update_icon() + update_appearance(updates = ALL) -/obj/item/borg/upgrade/selfrepair/update_icon() +/obj/item/borg/upgrade/selfrepair/update_appearance(updates = ALL) + . = ..() if(cyborg) icon_state = "selfrepair_[on ? "on" : "off"]" for(var/X in actions) @@ -466,7 +467,7 @@ /obj/item/borg/upgrade/selfrepair/proc/deactivate_sr() STOP_PROCESSING(SSobj, src) on = FALSE - update_icon() + update_appearance(updates = ALL) /obj/item/borg/upgrade/selfrepair/process() if(world.time < next_repair) diff --git a/code/game/objects/items/sharpener.dm b/code/game/objects/items/sharpener.dm index f01ce181d0df..90814f643ed7 100644 --- a/code/game/objects/items/sharpener.dm +++ b/code/game/objects/items/sharpener.dm @@ -48,7 +48,7 @@ name = "worn out [name]" desc = "[desc] At least, it used to." used = 1 - update_icon() + update_appearance(updates = ALL) /obj/item/sharpener/super name = "super whetstone" diff --git a/code/game/objects/items/shields.dm b/code/game/objects/items/shields.dm index b3041e42b3ef..d241f1a52b82 100644 --- a/code/game/objects/items/shields.dm +++ b/code/game/objects/items/shields.dm @@ -152,20 +152,21 @@ /obj/item/shield/riot/flash/Initialize(mapload) . = ..() embedded_flash = new(src) + update_appearance(UPDATE_ICON) /obj/item/shield/riot/flash/attack(mob/living/M, mob/user) . = embedded_flash.attack(M, user) - update_icon() + update_appearance(UPDATE_ICON) /obj/item/shield/riot/flash/attack_self(mob/living/carbon/user) . = embedded_flash.attack_self(user) - update_icon() + update_appearance(UPDATE_ICON) /obj/item/shield/riot/flash/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) . = ..() if (. && !embedded_flash.burnt_out) embedded_flash.activate() - update_icon() + update_appearance(UPDATE_ICON) /obj/item/shield/riot/flash/attackby(obj/item/W, mob/user) @@ -183,22 +184,23 @@ qdel(embedded_flash) embedded_flash = flash flash.forceMove(src) - update_icon() + update_appearance(updates = ALL) return ..() /obj/item/shield/riot/flash/emp_act(severity) . = ..() embedded_flash.emp_act(severity) - update_icon() + update_appearance(updates = ALL) -/obj/item/shield/riot/flash/update_icon() - if(!embedded_flash || embedded_flash.burnt_out) +/obj/item/shield/riot/flash/update_icon_state() + if(QDELETED(embedded_flash) || embedded_flash.burnt_out) icon_state = "riot" item_state = "riot" else icon_state = "flashshield" item_state = "flashshield" + return ..() /obj/item/shield/riot/flash/examine(mob/user) . = ..() @@ -217,7 +219,7 @@ force = 3 throwforce = 3 throw_speed = 3 - var/base_icon_state = "eshield" // [base_icon_state]1 for expanded, [base_icon_state]0 for contracted + base_icon_state = "eshield" // [base_icon_state]1 for expanded, [base_icon_state]0 for contracted var/on_force = 10 var/on_throwforce = 8 var/on_throw_speed = 2 diff --git a/code/game/objects/items/singularityhammer.dm b/code/game/objects/items/singularityhammer.dm index bff05696d0e1..b9d83345c549 100644 --- a/code/game/objects/items/singularityhammer.dm +++ b/code/game/objects/items/singularityhammer.dm @@ -30,7 +30,8 @@ charged++ return -/obj/item/twohanded/singularityhammer/update_icon() //Currently only here to fuck with the on-mob icons. +/obj/item/twohanded/singularityhammer/update_appearance(updates = ALL) + . = ..() //Currently only here to fuck with the on-mob icons. icon_state = "singhammer[wielded]" return @@ -119,6 +120,7 @@ else shock(hit_atom) -/obj/item/twohanded/mjollnir/update_icon() //Currently only here to fuck with the on-mob icons. +/obj/item/twohanded/mjollnir/update_appearance(updates = ALL) + . = ..() //Currently only here to fuck with the on-mob icons. icon_state = "mjollnir[wielded]" return diff --git a/code/game/objects/items/stacks/cash.dm b/code/game/objects/items/stacks/cash.dm index 05b108612065..6f5f3bca6f69 100644 --- a/code/game/objects/items/stacks/cash.dm +++ b/code/game/objects/items/stacks/cash.dm @@ -16,9 +16,10 @@ /obj/item/stack/spacecash/Initialize(mapload) . = ..() - update_desc() + update_appearance(UPDATE_DESC) -/obj/item/stack/spacecash/proc/update_desc() +/obj/item/stack/spacecash/update_desc() + . = ..() var/total_worth = get_item_credit_value() desc = "It's worth [total_worth] credit[( total_worth > 1 ) ? "s" : ""]" @@ -27,11 +28,11 @@ /obj/item/stack/spacecash/merge(obj/item/stack/S) . = ..() - update_desc() + update_appearance(UPDATE_DESC) /obj/item/stack/spacecash/use(used, transfer = FALSE) . = ..() - update_desc() + update_appearance(UPDATE_DESC) /obj/item/stack/spacecash/c1 icon_state = "spacecash" diff --git a/code/game/objects/items/stacks/license_plates.dm b/code/game/objects/items/stacks/license_plates.dm index 03970a9af37f..9c7f393ed3ff 100644 --- a/code/game/objects/items/stacks/license_plates.dm +++ b/code/game/objects/items/stacks/license_plates.dm @@ -23,7 +23,7 @@ merge_type = /obj/item/stack/license_plates/filled ///Override to allow for variations -/obj/item/stack/license_plates/filled/update_icon() +/obj/item/stack/license_plates/filled/update_appearance(updates = ALL) . = ..() if(novariants) return diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index ae0f7e2f7f14..c3fb2157768f 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -360,9 +360,10 @@ . = ..() if(amount == max_amount) //only seal full mesh packs is_open = FALSE - update_icon() + update_appearance(updates = ALL) -/obj/item/stack/medical/mesh/update_icon() +/obj/item/stack/medical/mesh/update_appearance(updates = ALL) + . = ..() if(is_open) return ..() icon_state = "regen_mesh_closed" @@ -399,7 +400,7 @@ if(!is_open) is_open = TRUE to_chat(user, span_notice("You open the sterile mesh package.")) - update_icon() + update_appearance(updates = ALL) playsound(src, 'sound/items/poster_ripped.ogg', 20, TRUE) return . = ..() @@ -417,7 +418,8 @@ flesh_regeneration = 3.5 grind_results = list(/datum/reagent/consumable/aloejuice = 1) -/obj/item/stack/medical/mesh/advanced/update_icon() +/obj/item/stack/medical/mesh/advanced/update_appearance(updates = ALL) + . = ..() if(is_open) return ..() icon_state = "aloe_mesh_closed" diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm index bd9aad727da5..86c4dd97b6dc 100644 --- a/code/game/objects/items/stacks/rods.dm +++ b/code/game/objects/items/stacks/rods.dm @@ -42,9 +42,10 @@ GLOBAL_LIST_INIT(rod_recipes, list ( \ . = ..() recipes = GLOB.rod_recipes - update_icon() + update_appearance(updates = ALL) -/obj/item/stack/rods/update_icon() +/obj/item/stack/rods/update_appearance(updates = ALL) + . = ..() var/amount = get_amount() if((amount <= 5) && (amount > 0)) icon_state = "rods-[amount]" @@ -80,7 +81,7 @@ GLOBAL_LIST_INIT(rod_recipes, list ( \ A.initialize_custom_food(src, S, user) else A.initialize_custom_food(src, S, user, TRUE) - update_icon() + update_appearance(updates = ALL) else return ..() @@ -89,8 +90,9 @@ GLOBAL_LIST_INIT(rod_recipes, list ( \ is_cyborg = 1 cost = 250 -/obj/item/stack/rods/cyborg/update_icon() - return +/obj/item/stack/rods/cyborg/Initialize(mapload) + AddElement(/datum/element/update_icon_blocker) + return ..() /obj/item/stack/rods/ten amount = 10 diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 5905792f3906..017ba711a850 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -64,7 +64,7 @@ if(S.merge_type == merge_type) merge(S) update_weight() - update_icon() + update_appearance(updates = ALL) /obj/item/stack/proc/update_weight() if(amount <= (max_amount * (1/3))) @@ -74,7 +74,8 @@ else w_class = full_w_class -/obj/item/stack/update_icon() +/obj/item/stack/update_appearance(updates = ALL) + . = ..() if(novariants) return ..() if(amount <= (max_amount * (1/3))) @@ -312,7 +313,7 @@ amount -= used if(check) zero_amount() - update_icon() + update_appearance(updates = ALL) update_weight() return TRUE @@ -343,7 +344,7 @@ source.add_charge(amount * cost) else src.amount += amount - update_icon() + update_appearance(updates = ALL) update_weight() /obj/item/stack/proc/merge(obj/item/stack/S) //Merge src into S, as much as possible diff --git a/code/game/objects/items/stacks/tickets.dm b/code/game/objects/items/stacks/tickets.dm index d08d877ea8e6..a13351ba8fc5 100644 --- a/code/game/objects/items/stacks/tickets.dm +++ b/code/game/objects/items/stacks/tickets.dm @@ -10,9 +10,10 @@ /obj/item/stack/arcadeticket/Initialize(mapload, new_amount, merge = TRUE) . = ..() - update_icon() + update_appearance(updates = ALL) -/obj/item/stack/arcadeticket/update_icon() +/obj/item/stack/arcadeticket/update_appearance(updates = ALL) + . = ..() var/amount = get_amount() if((amount >= 12) && (amount > 0)) icon_state = "arcade-ticket_4" diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm index d6b5f7f8475a..c2dc5373e846 100644 --- a/code/game/objects/items/storage/bags.dm +++ b/code/game/objects/items/storage/bags.dm @@ -55,7 +55,8 @@ playsound(loc, 'sound/items/eatfood.ogg', 50, 1, -1) return (TOXLOSS) -/obj/item/storage/bag/trash/update_icon() +/obj/item/storage/bag/trash/update_appearance(updates = ALL) + . = ..() //yogs start if(icon_state == "[initial(icon_state)]_broken") return @@ -75,7 +76,7 @@ if(insertable) J.put_in_cart(src, user) J.mybag=src - J.update_icon() + J.update_appearance(updates = ALL) else to_chat(user, span_warning("You are unable to fit your [name] into the [J.name].")) return @@ -382,20 +383,21 @@ if(ishuman(M) || ismonkey(M)) if(prob(10)) M.Paralyze(40) - update_icon() + update_appearance(updates = ALL) -/obj/item/storage/bag/tray/update_icon() +/obj/item/storage/bag/tray/update_appearance(updates = ALL) + . = ..() cut_overlays() for(var/obj/item/I in contents) add_overlay(new /mutable_appearance(I)) /obj/item/storage/bag/tray/Entered() . = ..() - update_icon() + update_appearance(updates = ALL) /obj/item/storage/bag/tray/Exited() . = ..() - update_icon() + update_appearance(updates = ALL) /* * Chemistry bag diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index 946e12df997a..d700b6088d00 100644 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -17,7 +17,8 @@ user.visible_message(span_suicide("[user] begins belting [user.p_them()]self with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!")) return BRUTELOSS -/obj/item/storage/belt/update_icon() +/obj/item/storage/belt/update_appearance(updates = ALL) + . = ..() cut_overlays() if(content_overlays) for(var/obj/item/I in contents) @@ -27,7 +28,7 @@ /obj/item/storage/belt/Initialize(mapload) . = ..() - update_icon() + update_appearance(updates = ALL) /obj/item/storage/belt/utility name = "toolbelt" //Carn: utility belt is nicer, but it bamboozles the text parsing. @@ -353,7 +354,7 @@ SSwardrobe.provide_type(/obj/item/assembly/flash/handheld, src) SSwardrobe.provide_type(/obj/item/melee/baton/loaded, src) SSwardrobe.provide_type(/obj/item/barrier_taperoll/police, src) - update_icon() + update_appearance(updates = ALL) /obj/item/storage/belt/security/chief name = "\improper Head of Security's toolbelt" @@ -375,7 +376,7 @@ SSwardrobe.provide_type(/obj/item/melee/baton/loaded, src) SSwardrobe.provide_type(/obj/item/barrier_taperoll/police, src) SSwardrobe.provide_type(/obj/item/shield/riot/tele, src) - update_icon() + update_appearance(updates = ALL) /obj/item/storage/belt/security/webbing name = "security webbing" @@ -815,8 +816,8 @@ content_overlays = TRUE slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK -/obj/item/storage/belt/quiver/update_icon() - ..() +/obj/item/storage/belt/quiver/update_appearance(updates = ALL) + . = ..() if(content_overlays && ismob(loc)) var/mob/M = loc M.update_inv_belt() @@ -908,7 +909,7 @@ if(bow.chambered == arrow) bow.chambered = null bow.update_slowdown() - bow.update_icon() + bow.update_appearance(updates = ALL) if(!SEND_SIGNAL(src, COMSIG_TRY_STORAGE_INSERT, arrow, null, TRUE, TRUE)) return @@ -1182,11 +1183,12 @@ var/obj/item/I = contents[1] user.visible_message("[user] takes [I] out of [src].", span_notice("You take [I] out of [src].")) user.put_in_hands(I) - update_icon() + update_appearance(updates = ALL) else to_chat(user, "[src] is empty.") -/obj/item/storage/belt/sabre/update_icon() +/obj/item/storage/belt/sabre/update_appearance(updates = ALL) + . = ..() icon_state = "sheath" item_state = "sheath" if(contents.len) @@ -1199,7 +1201,7 @@ /obj/item/storage/belt/sabre/PopulateContents() new /obj/item/melee/sabre(src) - update_icon() + update_appearance(updates = ALL) /obj/item/storage/belt/multi name = "multi-belt" diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm index d2b51453ced9..7dc2ec6f8ef9 100644 --- a/code/game/objects/items/storage/boxes.dm +++ b/code/game/objects/items/storage/boxes.dm @@ -36,7 +36,7 @@ /obj/item/storage/box/Initialize(mapload) . = ..() - update_icon() + update_appearance(updates = ALL) /obj/item/storage/box/suicide_act(mob/living/carbon/user) var/obj/item/bodypart/head/myhead = user.get_bodypart(BODY_ZONE_HEAD) @@ -49,7 +49,7 @@ user.visible_message(span_suicide("[user] attempts to put [user.p_their()] head into \the [src], but realizes [user.p_their()] has no head!")) return SHAME -/obj/item/storage/box/update_icon() +/obj/item/storage/box/update_appearance(updates = ALL) . = ..() if(illustration) cut_overlays() @@ -984,7 +984,8 @@ foldable = null var/design = NODESIGN -/obj/item/storage/box/papersack/update_icon() +/obj/item/storage/box/papersack/update_appearance(updates = ALL) + . = ..() if(contents.len == 0) icon_state = "[item_state]" else icon_state = "[item_state]_closed" diff --git a/code/game/objects/items/storage/fancy.dm b/code/game/objects/items/storage/fancy.dm index 129e4a26aba8..f7b8648df780 100644 --- a/code/game/objects/items/storage/fancy.dm +++ b/code/game/objects/items/storage/fancy.dm @@ -29,7 +29,8 @@ for(var/i = 1 to STR.max_items) new spawn_type(src) -/obj/item/storage/box/fancy/update_icon() +/obj/item/storage/box/fancy/update_appearance(updates = ALL) + . = ..() if(fancy_open) icon_state = "[icon_type]box[contents.len]" else @@ -45,18 +46,18 @@ /obj/item/storage/box/fancy/attack_self(mob/user) fancy_open = !fancy_open - update_icon() + update_appearance(updates = ALL) . = ..() /obj/item/storage/box/fancy/Exited() . = ..() fancy_open = TRUE - update_icon() + update_appearance(updates = ALL) /obj/item/storage/box/fancy/Entered() . = ..() fancy_open = TRUE - update_icon() + update_appearance(updates = ALL) /* * Donut Box @@ -142,7 +143,7 @@ /obj/item/storage/box/fancy/candle_box/attack_self(mob_user) . = ..() - update_icon() + update_appearance(updates = ALL) /obj/item/storage/box/fancy/candle_box/Initialize(mapload) . = ..() @@ -196,7 +197,8 @@ else to_chat(user, span_notice("There are no [icon_type]s left in the pack.")) -/obj/item/storage/box/fancy/cigarettes/update_icon() +/obj/item/storage/box/fancy/cigarettes/update_appearance(updates = ALL) + . = ..() if(fancy_open || !contents.len) cut_overlays() if(!contents.len) @@ -376,7 +378,8 @@ for(var/i in 1 to 10) new /obj/item/rollingpaper(src) -/obj/item/storage/box/fancy/rollingpapers/update_icon() +/obj/item/storage/box/fancy/rollingpapers/update_appearance(updates = ALL) + . = ..() cut_overlays() if(!contents.len) add_overlay("[icon_state]_empty") @@ -404,7 +407,8 @@ for(var/i in 1 to 5) new /obj/item/clothing/mask/cigarette/cigar(src) -/obj/item/storage/box/fancy/cigarettes/cigars/update_icon() +/obj/item/storage/box/fancy/cigarettes/cigars/update_appearance(updates = ALL) + . = ..() cut_overlays() if(fancy_open) icon_state = "[initial(icon_state)]_open" diff --git a/code/game/objects/items/storage/lockbox.dm b/code/game/objects/items/storage/lockbox.dm index 5b0334e841c8..9665f3de119d 100644 --- a/code/game/objects/items/storage/lockbox.dm +++ b/code/game/objects/items/storage/lockbox.dm @@ -63,12 +63,12 @@ /obj/item/storage/lockbox/Entered() . = ..() open = TRUE - update_icon() + update_appearance(updates = ALL) /obj/item/storage/lockbox/Exited() . = ..() open = TRUE - update_icon() + update_appearance(updates = ALL) /obj/item/storage/lockbox/AltClick(mob/user) ..() @@ -138,7 +138,7 @@ if(user.canUseTopic(src, BE_CLOSE)) if(!SEND_SIGNAL(src, COMSIG_IS_STORAGE_LOCKED)) open = (open ? FALSE : TRUE) - update_icon() + update_appearance(updates = ALL) ..() /obj/item/storage/lockbox/medal/PopulateContents() @@ -154,7 +154,8 @@ for(var/i in 1 to 3) new /obj/item/clothing/accessory/medal/conduct(src) -/obj/item/storage/lockbox/medal/update_icon() +/obj/item/storage/lockbox/medal/update_appearance(updates = ALL) + . = ..() cut_overlays() var/locked = SEND_SIGNAL(src, COMSIG_IS_STORAGE_LOCKED) if(locked) @@ -242,7 +243,8 @@ icon_closed = "vialbox" icon_broken = "vialbox" -/obj/item/storage/lockbox/vialbox/update_icon() +/obj/item/storage/lockbox/vialbox/update_appearance(updates = ALL) + . = ..() cut_overlays() var/locked = SEND_SIGNAL(src, COMSIG_IS_STORAGE_LOCKED) var/slot = 1 @@ -270,7 +272,7 @@ /obj/item/storage/lockbox/vialbox/Initialize(mapload) . = ..() - update_icon() + update_appearance(updates = ALL) /obj/item/storage/lockbox/vialbox/Initialize(mapload) . = ..() @@ -283,11 +285,11 @@ /obj/item/storage/lockbox/vialbox/attackby(obj/item/W, mob/user, params) . = ..() - update_icon() + update_appearance(updates = ALL) /obj/item/storage/lockbox/vialbox/AltClick(mob/user) ..() - update_icon() + update_appearance(updates = ALL) /obj/item/storage/lockbox/vialbox/full/PopulateContents() for(var/i in 1 to 6) diff --git a/code/game/objects/items/storage/toolbox.dm b/code/game/objects/items/storage/toolbox.dm index 54c223a2d08e..f369b6aa5483 100644 --- a/code/game/objects/items/storage/toolbox.dm +++ b/code/game/objects/items/storage/toolbox.dm @@ -28,10 +28,10 @@ latches = "double_latch" if(prob(1)) latches = "triple_latch" - update_icon() + update_appearance(updates = ALL) -/obj/item/storage/toolbox/update_icon() - ..() +/obj/item/storage/toolbox/update_appearance(updates = ALL) + . = ..() cut_overlays() if(has_latches) add_overlay(latches) @@ -309,7 +309,7 @@ if(/obj/item/storage/toolbox/syndicate) B.toolbox_color = "s" user.put_in_hands(B) - B.update_icon() + B.update_appearance(updates = ALL) to_chat(user, span_notice("You add the tiles into the empty [name]. They protrude from the top.")) qdel(src) else diff --git a/code/game/objects/items/storage/wallets.dm b/code/game/objects/items/storage/wallets.dm index e365b45a8f5a..4893b54dc6ab 100644 --- a/code/game/objects/items/storage/wallets.dm +++ b/code/game/objects/items/storage/wallets.dm @@ -55,13 +55,14 @@ var/mob/living/carbon/human/H = loc if(H.wear_id == src) H.sec_hud_set_ID() - update_icon() + update_appearance(UPDATE_ICON) /obj/item/storage/wallet/Entered(atom/movable/AM) . = ..() refreshID() -/obj/item/storage/wallet/update_icon() +/obj/item/storage/wallet/update_appearance(updates = ALL) + . = ..() var/new_state = "wallet" if(front_id) new_state = "wallet_[front_id.icon_state]" @@ -97,4 +98,4 @@ /obj/item/storage/wallet/random/PopulateContents() new /obj/item/holochip(src, rand(5,30)) - update_icon() + update_appearance(updates = ALL) diff --git a/code/game/objects/items/stunbaton.dm b/code/game/objects/items/stunbaton.dm index 9c096cb43d4d..2fe4cc8954e8 100644 --- a/code/game/objects/items/stunbaton.dm +++ b/code/game/objects/items/stunbaton.dm @@ -56,7 +56,7 @@ else cell = new preload_cell_type(src) RegisterSignal(src, COMSIG_MOVABLE_PRE_DROPTHROW, PROC_REF(throwbaton)) - update_icon() + update_appearance(updates = ALL) /obj/item/melee/baton/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) if(..()) @@ -77,7 +77,7 @@ status = FALSE visible_message(span_warning("The safety strap on [src] is pulled as it is dropped, triggering its emergency shutoff!")) addtimer(VARSET_CALLBACK(src, dropcheck, FALSE), 8 SECONDS) - update_icon() + update_appearance(updates = ALL) else thrown = FALSE @@ -97,12 +97,13 @@ if(status && cell.charge < hitcost) //we're below minimum, turn off status = FALSE - update_icon() + update_appearance(updates = ALL) playsound(loc, "sparks", 75, 1, -1) STOP_PROCESSING(SSobj, src) // no more charge? stop checking for discharge -/obj/item/melee/baton/update_icon() +/obj/item/melee/baton/update_appearance(updates = ALL) + . = ..() if(status) icon_state = "[initial(icon_state)]_active" else if(!cell) @@ -137,16 +138,16 @@ return cell = W to_chat(user, span_notice("You install a cell in [src].")) - update_icon() + update_appearance(updates = ALL) else if(W.tool_behaviour == TOOL_SCREWDRIVER) if(cell) - cell.update_icon() + cell.update_appearance(updates = ALL) cell.forceMove(get_turf(src)) cell = null to_chat(user, span_notice("You remove the cell from [src].")) status = FALSE STOP_PROCESSING(SSobj, src) // no cell, no charge; stop processing for on because it cant be on - update_icon() + update_appearance(updates = ALL) else return ..() @@ -169,7 +170,7 @@ to_chat(user, span_warning("[src] does not have a power source!")) else to_chat(user, span_warning("[src] is out of charge.")) - update_icon() + update_appearance(updates = ALL) add_fingerprint(user) /obj/item/melee/baton/attack(mob/M, mob/living/carbon/human/user) diff --git a/code/game/objects/items/supermatter_delaminator.dm b/code/game/objects/items/supermatter_delaminator.dm index b537ca44393d..a36b5c4d0a5a 100644 --- a/code/game/objects/items/supermatter_delaminator.dm +++ b/code/game/objects/items/supermatter_delaminator.dm @@ -39,7 +39,7 @@ return FALSE forceMove(tongs) tongs.shard = src - tongs.update_icon() + tongs.update_appearance(updates = ALL) to_chat(user, span_notice("You carefully pick up [src] with [tongs].")) else if(istype(W, /obj/item/antinoblium_container/)) // we don't want it to dust return @@ -84,8 +84,8 @@ T.shard.forceMove(src) shard = T.shard T.shard = null - T.update_icon() - update_icon() + T.update_appearance(updates = ALL) + update_appearance(updates = ALL) to_chat(user, span_warning("Container is resealing...")) addtimer(CALLBACK(src, PROC_REF(seal)), 50) return TRUE @@ -96,8 +96,8 @@ shard.forceMove(T) T.shard = shard shard = null - T.update_icon() - update_icon() + T.update_appearance(updates = ALL) + update_appearance(updates = ALL) visible_message(span_warning("[user] gingerly takes out the antinoblium shard with the tongs...")) return TRUE @@ -107,14 +107,14 @@ STOP_PROCESSING(SSobj, shard) playsound(src, 'sound/items/deconstruct.ogg', 60, 1) sealed = TRUE - update_icon() + update_appearance(updates = ALL) say("Hermetic locks re-engaged; [shard] is safely recontained.") /obj/item/antinoblium_container/proc/unseal() if(!sealed) return sealed = FALSE - update_icon() + update_appearance(updates = ALL) say("Hermetic locks disengaged; [shard] is available for use.") /obj/item/antinoblium_container/attackby(obj/item/hemostat/antinoblium/tongs, mob/user) @@ -138,7 +138,8 @@ seal() to_chat(user, span_warning("[user] seals the [src].")) -/obj/item/antinoblium_container/update_icon() +/obj/item/antinoblium_container/update_appearance(updates = ALL) + . = ..() if(sealed) icon_state = "antinoblium_container_sealed" else if (shard) @@ -160,7 +161,8 @@ QDEL_NULL(shard) return ..() -/obj/item/hemostat/antinoblium/update_icon() +/obj/item/hemostat/antinoblium/update_appearance(updates = ALL) + . = ..() if(shard) icon_state = "antinoblium_tongs_loaded" else @@ -178,7 +180,7 @@ shard.forceMove(loc) visible_message(span_notice("\The [shard] falls out of \the [src] as it hits the ground.")) shard = null - update_icon() + update_appearance(updates = ALL) ..() /obj/item/hemostat/antinoblium/proc/Consume(atom/movable/AM, mob/user) @@ -203,7 +205,7 @@ empulse(src, 5, 10) playsound(src, 'sound/effects/supermatter.ogg', 50, 1) QDEL_NULL(shard) - update_icon() + update_appearance(updates = ALL) /obj/item/supermatter_corruptor name = "supermatter data corruptor bug" diff --git a/code/game/objects/items/syndicateReverseCard.dm b/code/game/objects/items/syndicateReverseCard.dm index d210e7cf92cb..a2845031d8aa 100644 --- a/code/game/objects/items/syndicateReverseCard.dm +++ b/code/game/objects/items/syndicateReverseCard.dm @@ -14,8 +14,8 @@ name = "[cardColor] Reverse" icon_state = "sc_[cardColor] Reverse_uno" -/obj/item/syndicateReverseCard/update_icon() - ..() +/obj/item/syndicateReverseCard/update_appearance(updates = ALL) + . = ..() if (used) cut_overlays() add_overlay(image('icons/obj/toy.dmi', icon_state = "reverse_overlay")) @@ -45,7 +45,7 @@ user.put_in_hands(target_gun) firer.put_in_hands(src) used = TRUE - update_icon() + update_appearance(updates = ALL) /obj/item/syndicateReverseCard/examine(mob/user) . = ..() diff --git a/code/game/objects/items/tanks/jetpack.dm b/code/game/objects/items/tanks/jetpack.dm index fa7e7f08792a..e674c9b384c6 100644 --- a/code/game/objects/items/tanks/jetpack.dm +++ b/code/game/objects/items/tanks/jetpack.dm @@ -54,16 +54,16 @@ /obj/item/tank/jetpack/proc/turn_on(mob/user) on = TRUE - update_icon() + update_appearance(UPDATE_ICON) ion_trail.start() RegisterSignal(user, COMSIG_MOVABLE_MOVED, PROC_REF(move_react)) if(full_speed) user.add_movespeed_modifier(MOVESPEED_ID_JETPACK, priority=100, multiplicative_slowdown=jetspeed, movetypes=FLOATING, conflict=MOVE_CONFLICT_JETPACK) -/obj/item/tank/jetpack/update_icon() - icon_state = initial(icon_state) +/obj/item/tank/jetpack/update_icon_state() + . = ..() if(!classic && on) //does the jetpack have its own on sprite? - icon_state = "[initial(icon_state)]-on" + icon_state = "[initial(icon_state)][on ? "-on" : ""]" else //or does it use the classic overlay cut_overlays() if(on) @@ -72,7 +72,7 @@ /obj/item/tank/jetpack/proc/turn_off(mob/user) on = FALSE stabilizers = FALSE - update_icon() + update_appearance(UPDATE_ICON) ion_trail.stop() UnregisterSignal(user, COMSIG_MOVABLE_MOVED) user.remove_movespeed_modifier(MOVESPEED_ID_JETPACK) diff --git a/code/game/objects/items/tanks/tank_types.dm b/code/game/objects/items/tanks/tank_types.dm index 46596036d1e5..4dfde41b56f9 100644 --- a/code/game/objects/items/tanks/tank_types.dm +++ b/code/game/objects/items/tanks/tank_types.dm @@ -104,7 +104,7 @@ return src.master = F F.ptank = src - F.update_icon() + F.update_appearance(updates = ALL) else return ..() diff --git a/code/game/objects/items/tanks/tanks.dm b/code/game/objects/items/tanks/tanks.dm index 435e63756c0d..98f70e811e5d 100644 --- a/code/game/objects/items/tanks/tanks.dm +++ b/code/game/objects/items/tanks/tanks.dm @@ -313,12 +313,13 @@ // ---------- Procs below are for tanks that are used exclusively in 1-tank bombs ---------- -/obj/item/tank/update_icon() - cut_overlays() - if(tank_assembly) - add_overlay(tank_assembly.icon_state) - copy_overlays(tank_assembly) - add_overlay("bomb_assembly") +/obj/item/tank/update_overlays() + . = ..() + if(!tank_assembly) + return + . += tank_assembly.icon_state + copy_overlays(tank_assembly) + . += "bomb_assembly" /obj/item/tank/wrench_act(mob/living/user, obj/item/I) if(tank_assembly) diff --git a/code/game/objects/items/theft_tools.dm b/code/game/objects/items/theft_tools.dm index 6095106a1aac..435b75436119 100644 --- a/code/game/objects/items/theft_tools.dm +++ b/code/game/objects/items/theft_tools.dm @@ -138,7 +138,7 @@ return FALSE forceMove(tongs) tongs.sliver = src - tongs.update_icon() + tongs.update_appearance(updates = ALL) to_chat(user, span_notice("You carefully pick up [src] with [tongs].")) else if(istype(W, /obj/item/scalpel/supermatter) || istype(W, /obj/item/nuke_core_container/supermatter/)) // we don't want it to dust return @@ -223,7 +223,8 @@ QDEL_NULL(sliver) return ..() -/obj/item/hemostat/supermatter/update_icon() +/obj/item/hemostat/supermatter/update_appearance(updates = ALL) + . = ..() if(sliver) icon_state = "supermatter_tongs_loaded" else @@ -241,7 +242,7 @@ sliver.forceMove(loc) visible_message(span_notice("\The [sliver] falls out of \the [src] as it hits the ground.")) sliver = null - update_icon() + update_appearance(updates = ALL) ..() /obj/item/hemostat/supermatter/proc/Consume(atom/movable/AM, mob/user) @@ -263,4 +264,4 @@ radiation_pulse(src, 500, 2) playsound(src, 'sound/effects/supermatter.ogg', 50, 1) QDEL_NULL(sliver) - update_icon() + update_appearance(updates = ALL) diff --git a/code/game/objects/items/tools/screwdriver.dm b/code/game/objects/items/tools/screwdriver.dm index a404a46d00ba..89d3364604fc 100644 --- a/code/game/objects/items/tools/screwdriver.dm +++ b/code/game/objects/items/tools/screwdriver.dm @@ -44,11 +44,12 @@ icon_state = "screwdriver" var/our_color = pick(screwdriver_colors) add_atom_colour(screwdriver_colors[our_color], FIXED_COLOUR_PRIORITY) - update_icon() + update_appearance(updates = ALL) if(prob(75)) pixel_y = rand(0, 16) -/obj/item/screwdriver/update_icon() +/obj/item/screwdriver/update_appearance(updates = ALL) + . = ..() if(!random_color) //icon override return cut_overlays() diff --git a/code/game/objects/items/tools/weldingtool.dm b/code/game/objects/items/tools/weldingtool.dm index 9fc431828538..143a387f39fb 100644 --- a/code/game/objects/items/tools/weldingtool.dm +++ b/code/game/objects/items/tools/weldingtool.dm @@ -46,7 +46,7 @@ . = ..() create_reagents(max_fuel) reagents.add_reagent(/datum/reagent/fuel, max_fuel) - update_icon() + update_appearance(updates = ALL) /obj/item/weldingtool/proc/update_torch() @@ -57,7 +57,8 @@ item_state = "[initial(item_state)]" -/obj/item/weldingtool/update_icon() +/obj/item/weldingtool/update_appearance(updates = ALL) + . = ..() cut_overlays() if(change_icons) var/ratio = get_fuel() / max_fuel @@ -72,7 +73,7 @@ if(0) force = 3 damtype = "brute" - update_icon() + update_appearance(updates = ALL) if(!can_off_process) STOP_PROCESSING(SSobj, src) return @@ -83,7 +84,7 @@ burned_fuel_for += delta_time if(burned_fuel_for >= WELDER_FUEL_BURN_INTERVAL) use(1) - update_icon() + update_appearance(updates = ALL) //This is to start fires. process() is only called if the welder is on. open_flame() @@ -145,7 +146,7 @@ if(!status && O.is_refillable()) reagents.trans_to(O, reagents.total_volume, transfered_by = user) to_chat(user, span_notice("You empty [src]'s fuel tank into [O].")) - update_icon() + update_appearance(updates = ALL) if(isOn()) use(1) var/turf/location = get_turf(user) @@ -166,7 +167,7 @@ explode() switched_on(user) - update_icon() + update_appearance(updates = ALL) /obj/item/weldingtool/use_tool(atom/target, mob/living/user, delay, amount, volume, datum/callback/extra_checks, robo_check) var/mutable_appearance/sparks = mutable_appearance('icons/effects/welding_effect.dmi', "welding_sparks", GASFIRE_LAYER, src, ABOVE_LIGHTING_PLANE) @@ -206,11 +207,11 @@ if(get_fuel() <= 0 && welding) set_light_on(FALSE) switched_on(user) - update_icon() + update_appearance(updates = ALL) //mob icon update if(ismob(loc)) var/mob/M = loc - M.update_inv_hands(0) + M.update_held_items(0) return 0 return 1 @@ -228,7 +229,7 @@ force = 15 damtype = BURN hitsound = 'sound/items/welder.ogg' - update_icon() + update_appearance(updates = ALL) START_PROCESSING(SSobj, src) else to_chat(user, span_warning("You need more fuel!")) @@ -245,7 +246,7 @@ force = 3 damtype = "brute" hitsound = "swing_hit" - update_icon() + update_appearance(updates = ALL) /obj/item/weldingtool/examine(mob/user) diff --git a/code/game/objects/items/tools/wirecutters.dm b/code/game/objects/items/tools/wirecutters.dm index 4784c3f6f8ca..fea697e2bbea 100644 --- a/code/game/objects/items/tools/wirecutters.dm +++ b/code/game/objects/items/tools/wirecutters.dm @@ -40,9 +40,10 @@ icon_state = "cutters" var/our_color = pick(wirecutter_colors) add_atom_colour(wirecutter_colors[our_color], FIXED_COLOUR_PRIORITY) - update_icon() + update_appearance(updates = ALL) -/obj/item/wirecutters/update_icon() +/obj/item/wirecutters/update_appearance(updates = ALL) + . = ..() if(!random_color) //icon override return cut_overlays() diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index b7dbd2c8e38e..b7e0479444de 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -67,7 +67,7 @@ A.reagents.trans_to(src, 10, transfered_by = user) to_chat(user, span_notice("You fill the balloon with the contents of [A].")) desc = "A translucent balloon with some form of liquid sloshing around in it." - update_icon() + update_appearance(updates = ALL) /obj/item/toy/balloon/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/reagent_containers/glass)) @@ -80,7 +80,7 @@ desc = "A translucent balloon with some form of liquid sloshing around in it." to_chat(user, span_notice("You fill the balloon with the contents of [I].")) I.reagents.trans_to(src, 10, transfered_by = user) - update_icon() + update_appearance(updates = ALL) else if(I.is_sharp()) balloon_burst() else @@ -104,7 +104,8 @@ icon_state = "burst" qdel(src) -/obj/item/toy/balloon/update_icon() +/obj/item/toy/balloon/update_appearance(updates = ALL) + . = ..() if(src.reagents.total_volume >= 1) icon_state = "waterballoon" item_state = "balloon" @@ -207,7 +208,7 @@ to_chat(user, span_notice("You reload [7 - src.bullets] cap\s.")) A.amount_left -= 7 - src.bullets src.bullets = 7 - A.update_icon() + A.update_appearance(updates = ALL) return 1 else return ..() @@ -239,7 +240,8 @@ materials = list(/datum/material/iron=10, /datum/material/glass=10) var/amount_left = 7 -/obj/item/toy/ammo/gun/update_icon() +/obj/item/toy/ammo/gun/update_appearance(updates = ALL) + . = ..() src.icon_state = text("357OLD-[]", src.amount_left) /obj/item/toy/ammo/gun/examine(mob/user) @@ -301,7 +303,7 @@ if(active) icon_state = "swordrainbow" - user.update_inv_hands() + user.update_held_items() else to_chat(user, span_warning("It's already fabulous!")) else @@ -406,9 +408,10 @@ name = "toy pirate sledgehammer" desc += " This one looks different from the ones you see on commercials..." icon_state = "vxtvul_hammer_pirate0-0" - update_icon() + update_appearance(updates = ALL) -/obj/item/twohanded/vxtvulhammer/toy/update_icon() +/obj/item/twohanded/vxtvulhammer/toy/update_appearance(updates = ALL) + . = ..() if(!pirated) icon_state = "vxtvul_hammer_pirate[wielded]-[supercharged]" else @@ -777,7 +780,7 @@ C.deckstyle = deckstyle cards.Cut(1,2) user.put_in_hands(C) - update_icon() + update_appearance(updates = ALL) C.interact(user) else //if more than one card is drawn var/obj/item/toy/cards/cardhand/H = new/obj/item/toy/cards/cardhand(user.drop_location()) @@ -791,9 +794,9 @@ H.deckstyle=deckstyle src.cards.Cut(1,drawnumber+1) user.put_in_hands(H) - update_icon() + update_appearance(updates = ALL) H.interact(user) - H.update_icon() + H.update_appearance(updates = ALL) /obj/item/toy/cards/deck/AltClick(mob/living/L) if(!(L.mobility_flags & MOBILITY_PICKUP)) @@ -806,7 +809,8 @@ drawsize=clamp(drawsize,1,min(cards.len,10)) draw_card(L,drawsize) -/obj/item/toy/cards/deck/update_icon() +/obj/item/toy/cards/deck/update_appearance(updates = ALL) + . = ..() if(cards.len > 26) icon_state = "deck_[deckstyle]_full" else if(cards.len > 10) @@ -840,7 +844,7 @@ qdel(SC) else to_chat(user, span_warning("You can't mix cards from other decks!")) - update_icon() + update_appearance(updates = ALL) else if(istype(I, /obj/item/toy/cards/cardhand)) var/obj/item/toy/cards/cardhand/CH = I if(CH.parentdeck == src) @@ -852,7 +856,7 @@ qdel(CH) else to_chat(user, span_warning("You can't mix cards from other decks!")) - update_icon() + update_appearance(updates = ALL) else return ..() @@ -912,7 +916,7 @@ cardUser.visible_message(span_notice("[cardUser] draws a card from [cardUser.p_their()] hand."), span_notice("You take the [C.cardname] from your hand.")) interact(cardUser) - update_icon() + update_appearance(updates = ALL) if(length(currenthand) == 1) var/obj/item/toy/cards/singlecard/N = new/obj/item/toy/cards/singlecard(loc) N.parentdeck = parentdeck @@ -929,7 +933,7 @@ user.visible_message("[user] adds a card to [user.p_their()] hand.", span_notice("You add the [C.cardname] to your hand.")) qdel(C) interact(user) - update_icon() + update_appearance(updates = ALL) else to_chat(user, span_warning("You can't mix cards from other decks!")) else @@ -944,7 +948,7 @@ user.visible_message("[user] adds the cards from [user.p_their()] hand to another, consolidating them.", span_notice("You add the cards from one hand to another.")) qdel(C) interact(user) - update_icon() + update_appearance(updates = ALL) else to_chat(user, span_warning("You can't mix cards from other decks!")) else @@ -978,7 +982,8 @@ . = ..() . += "This hand has [currenthand.len] cards in it." -/obj/item/toy/cards/cardhand/update_icon() +/obj/item/toy/cards/cardhand/update_appearance(updates = ALL) + . = ..() if(src.currenthand.len > 4) src.icon_state = "[deckstyle]_hand5" else @@ -1055,7 +1060,7 @@ user.visible_message("[user] adds a card to [user.p_their()] hand.", span_notice("You add the [cardname] to your hand.")) qdel(src) H.interact(user) - H.update_icon() + H.update_appearance(updates = ALL) else to_chat(user, span_warning("You can't mix cards from other decks!")) else @@ -1142,7 +1147,8 @@ cards += "Wildcard" cards += "Wild Draw Four" -/obj/item/toy/cards/deck/uno/update_icon() +/obj/item/toy/cards/deck/uno/update_appearance(updates = ALL) + . = ..() if(cards.len > 54) icon_state = "deck_[deckstyle]_full" else if(cards.len > 25) @@ -1680,9 +1686,10 @@ obj/item/toy/turn_tracker /obj/item/toy/eldritch_book/attack_self(mob/user) book_open = !book_open - update_icon() + update_appearance(updates = ALL) -/obj/item/toy/eldritch_book/update_icon() +/obj/item/toy/eldritch_book/update_appearance(updates = ALL) + . = ..() icon_state = book_open ? "book_open" : "book" /* diff --git a/code/game/objects/items/twohanded.dm b/code/game/objects/items/twohanded.dm index e0aa00007926..8581860eeefe 100644 --- a/code/game/objects/items/twohanded.dm +++ b/code/game/objects/items/twohanded.dm @@ -45,11 +45,11 @@ name = copytext(name, 1, sf) else //something wrong name = "[initial(name)]" - update_icon() + update_appearance(updates = ALL) if(user.get_item_by_slot(ITEM_SLOT_BACK) == src) user.update_inv_back() else - user.update_inv_hands() + user.update_held_items() if(show_message) if(iscyborg(user)) to_chat(user, span_notice("You free up your module.")) @@ -86,7 +86,7 @@ if(force_wielded) force += force_wielded name = "[name] (Wielded)" - update_icon() + update_appearance(updates = ALL) if(iscyborg(user)) to_chat(user, span_notice("You dedicate your module to [src].")) else @@ -108,8 +108,9 @@ return unwield(user) -/obj/item/twohanded/update_icon() - return +/obj/item/twohanded/Initialize(mapload) //lol + AddElement(/datum/element/update_icon_blocker) + return ..() /obj/item/twohanded/attack_self(mob/user) . = ..() @@ -254,7 +255,8 @@ . = ..() AddComponent(/datum/component/butchering, 100, 80, 0 , hitsound) //axes are not known for being precision butchering tools -/obj/item/twohanded/fireaxe/update_icon() //Currently only here to fuck with the on-mob icons. +/obj/item/twohanded/fireaxe/update_appearance(updates = ALL) + . = ..() //Currently only here to fuck with the on-mob icons. icon_state = "fireaxe[wielded]" return @@ -289,7 +291,8 @@ desc = "A large, menacing axe made of an unknown substance that the most elder atmosians call Metallic Hydrogen. Truly an otherworldly weapon." force_wielded = 18 -/obj/item/twohanded/fireaxe/metal_h2_axe/update_icon() //Currently only here to fuck with the on-mob icons. +/obj/item/twohanded/fireaxe/metal_h2_axe/update_appearance(updates = ALL) + . = ..() //Currently only here to fuck with the on-mob icons. icon_state = "metalh2_axe[wielded]" return @@ -348,7 +351,8 @@ var/obj/O = A O.take_damage(force, BRUTE, MELEE, FALSE, null, armour_penetration) -/obj/item/twohanded/fireaxe/energy/update_icon() +/obj/item/twohanded/fireaxe/energy/update_appearance(updates = ALL) + . = ..() icon_state = "energy-fireaxe[wielded]" SEND_SIGNAL(src, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_TYPE_BLOOD) @@ -455,7 +459,8 @@ STOP_PROCESSING(SSobj, src) . = ..() -/obj/item/twohanded/dualsaber/update_icon() +/obj/item/twohanded/dualsaber/update_appearance(updates = ALL) + . = ..() if(wielded) icon_state = "dualsaber[saber_color][wielded]" else @@ -565,7 +570,7 @@ hacked = TRUE to_chat(user, span_warning("2XRNBW_ENGAGE")) saber_color = "rainbow" - update_icon() + update_appearance(updates = ALL) else to_chat(user, span_warning("It's starting to look like a triple rainbow - no, nevermind.")) else @@ -624,7 +629,8 @@ . = ..() AddComponent(/datum/component/jousting) -/obj/item/twohanded/spear/update_icon() +/obj/item/twohanded/spear/update_appearance(updates = ALL) + . = ..() icon_state = "[icon_prefix][wielded]" /obj/item/twohanded/spear/deconstruct() //we drop our rod and maybe the glass shard used @@ -646,7 +652,7 @@ righthand_file = 'yogstation/icons/mob/inhands/weapons/polearms_righthand.dmi' //yogs mob_overlay_icon = 'yogstation/icons/mob/clothing/back.dmi' //yogs icon_prefix = "spearplasma" - update_icon() + update_appearance(updates = ALL) qdel(tip) var/obj/item/grenade/G = locate() in parts_list if(G) @@ -671,7 +677,7 @@ G.forceMove(src) explosive = G desc = "A makeshift spear with [G] attached to it" - update_icon() + update_appearance(updates = ALL) /obj/item/twohanded/spear/explosive/suicide_act(mob/living/carbon/user) user.visible_message(span_suicide("[user] begins to sword-swallow \the [src]! It looks like [user.p_theyre()] trying to commit suicide!")) @@ -686,7 +692,8 @@ . = ..() . += span_notice("Alt-click to set your war cry.") -/obj/item/twohanded/spear/explosive/update_icon() +/obj/item/twohanded/spear/explosive/update_appearance(updates = ALL) + . = ..() icon_state = "spearbomb[wielded]" /obj/item/twohanded/spear/explosive/AltClick(mob/user) @@ -765,7 +772,7 @@ hitsound = "swing_hit" if(src == user.get_active_held_item()) //update inhands - user.update_inv_hands() + user.update_held_items() for(var/X in actions) var/datum/action/A = X A.build_all_button_icons() @@ -870,7 +877,8 @@ throwforce = 100 force_wielded = 500000 // Kills you DEAD. -/obj/item/twohanded/pitchfork/update_icon() +/obj/item/twohanded/pitchfork/update_appearance(updates = ALL) + . = ..() icon_state = "pitchfork[wielded]" /obj/item/twohanded/pitchfork/suicide_act(mob/user) @@ -946,7 +954,8 @@ return 1 return 0 -/obj/item/twohanded/vibro_weapon/update_icon() +/obj/item/twohanded/vibro_weapon/update_appearance(updates = ALL) + . = ..() icon_state = "hfrequency[wielded]" /obj/item/twohanded/vibro_weapon/wizard @@ -971,7 +980,8 @@ desc = "A large, vicious axe crafted out of several sharpened bone plates and crudely tied together. Made of monsters, by killing monsters, for killing monsters." force_wielded = 18 -/obj/item/twohanded/fireaxe/boneaxe/update_icon() +/obj/item/twohanded/fireaxe/boneaxe/update_appearance(updates = ALL) + . = ..() icon_state = "bone_axe[wielded]" /* @@ -999,7 +1009,8 @@ attack_verb = list("attacked", "poked", "jabbed", "torn", "gored") sharpness = SHARP_EDGED -/obj/item/twohanded/bonespear/update_icon() +/obj/item/twohanded/bonespear/update_appearance(updates = ALL) + . = ..() icon_state = "bone_spear[wielded]" /obj/item/twohanded/bonespear/chitinspear //like a mix of a bone spear and bone axe, but more like a bone spear. And better. @@ -1012,7 +1023,8 @@ throwforce = 25 attack_verb = list("attacked", "poked", "jabbed", "torn", "gored", "sliced", "ripped", "cut") -/obj/item/twohanded/bonespear/chitinspear/update_icon() +/obj/item/twohanded/bonespear/chitinspear/update_appearance(updates = ALL) + . = ..() icon_state = "chitin_spear[wielded]" /obj/item/twohanded/binoculars @@ -1079,7 +1091,8 @@ attack_verb = list("attacked", "poked", "jabbed", "torn", "gored") sharpness = SHARP_EDGED -/obj/item/twohanded/bamboospear/update_icon() +/obj/item/twohanded/bamboospear/update_appearance(updates = ALL) + . = ..() icon_state = "bamboo_spear[wielded]" /* @@ -1142,7 +1155,8 @@ QDEL_NULL(spark_system) return ..() -/obj/item/twohanded/vxtvulhammer/update_icon() +/obj/item/twohanded/vxtvulhammer/update_appearance(updates = ALL) + . = ..() icon_state = "vxtvul_hammer[wielded]-[supercharged]" /obj/item/twohanded/vxtvulhammer/examine(mob/living/carbon/user) @@ -1182,7 +1196,7 @@ set_light_on(FALSE) force = initial(force) + (wielded ? force_wielded : 0) armour_penetration = initial(armour_penetration) - update_icon() + update_appearance(updates = ALL) /obj/item/twohanded/vxtvulhammer/proc/charge_hammer(mob/living/carbon/user) if(!wielded) @@ -1285,7 +1299,8 @@ desc = "A relic sledgehammer with charge packs wired to two blast pads on its head. This one has been defaced by Syndicate pirates. \ While wielded in two hands, the user can charge a massive blow that will shatter construction and hurl bodies." -/obj/item/twohanded/vxtvulhammer/pirate/update_icon() +/obj/item/twohanded/vxtvulhammer/pirate/update_appearance(updates = ALL) + . = ..() icon_state = "vxtvul_hammer_pirate[wielded]-[supercharged]" // Baseball Bats @@ -1390,7 +1405,8 @@ w_class = WEIGHT_CLASS_HUGE slot_flags = ITEM_SLOT_BACK -/obj/item/twohanded/bigspoon/update_icon() +/obj/item/twohanded/bigspoon/update_appearance(updates = ALL) + . = ..() hitsound = wielded ? 'yogstation/sound/weapons/bat_hit.ogg' : 'sound/items/trayhit1.ogg' //big donk if wielded item_state = "bigspoon[wielded]" //i don't know why it's item_state rather than icon_state like every other wielded weapon return @@ -1417,7 +1433,8 @@ Broom attack_verb = list("swept", "brushed off", "bludgeoned", "whacked") resistance_flags = FLAMMABLE -/obj/item/twohanded/broom/update_icon() +/obj/item/twohanded/broom/update_appearance(updates = ALL) + . = ..() icon_state = "broom[wielded]" /obj/item/twohanded/broom/wield(mob/user) @@ -1457,14 +1474,14 @@ Broom break if (i > 1) if (target_bin) - target_bin.update_icon() + target_bin.update_appearance(updates = ALL) to_chat(user, span_notice("You sweep the pile of garbage into [target_bin].")) playsound(loc, 'sound/weapons/thudswoosh.ogg', 30, TRUE, -1) /obj/item/twohanded/broom/proc/janicart_insert(mob/user, obj/structure/janitorialcart/J) //bless you whoever fixes this copypasta J.put_in_cart(src, user) J.mybroom=src - J.update_icon() + J.update_appearance(updates = ALL) /obj/item/twohanded/broom/cyborg name = "robotic push broom" diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm index 0ea32fd47df9..d01ed19801a2 100644 --- a/code/game/objects/items/weaponry.dm +++ b/code/game/objects/items/weaponry.dm @@ -734,7 +734,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 name = "slapper" desc = "This is how real men fight." icon = 'icons/obj/toy.dmi' - icon_state = "latexballon" + icon_state = "latexballoon" item_state = "nothing" force = 0 throwforce = 0 @@ -828,7 +828,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 name = "raised hands" desc = "What are you, French?" icon = 'icons/obj/toy.dmi' - icon_state = "latexballon" + icon_state = "latexballoon" item_state = "nothing" force = 0 throwforce = 0 diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 8203dbca94c3..fde9d84a512b 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -107,8 +107,7 @@ /obj/return_air() if(loc) return loc.return_air() - else - return null + return null /obj/proc/handle_internal_lifeform(mob/lifeform_inside_me, breath_request) //Return: (NONSTANDARD) diff --git a/code/game/objects/structures/aliens.dm b/code/game/objects/structures/aliens.dm index 20f17484332a..32025fa8ef17 100644 --- a/code/game/objects/structures/aliens.dm +++ b/code/game/objects/structures/aliens.dm @@ -229,7 +229,7 @@ /obj/structure/alien/egg/Initialize(mapload) . = ..() - update_icon() + update_appearance(updates = ALL) if(status == GROWING || status == GROWN) child = new(src) if(status == GROWING) @@ -238,8 +238,8 @@ if(status == BURST) obj_integrity = integrity_failure -/obj/structure/alien/egg/update_icon() - ..() +/obj/structure/alien/egg/update_appearance(updates = ALL) + . = ..() switch(status) if(GROWING) icon_state = "[base_icon]_growing" @@ -279,7 +279,7 @@ /obj/structure/alien/egg/proc/Grow() status = GROWN - update_icon() + update_appearance(updates = ALL) proximity_monitor.SetRange(1) //drops and kills the hugger if any is remaining @@ -287,7 +287,7 @@ if(status == GROWN || status == GROWING) proximity_monitor.SetRange(0) status = BURST - update_icon() + update_appearance(updates = ALL) flick("egg_opening", src) addtimer(CALLBACK(src, PROC_REF(finish_bursting), kill), 15) diff --git a/code/game/objects/structures/artstuff.dm b/code/game/objects/structures/artstuff.dm index 9d07af715228..dfee49234193 100644 --- a/code/game/objects/structures/artstuff.dm +++ b/code/game/objects/structures/artstuff.dm @@ -119,7 +119,7 @@ var/y = text2num(params["y"]) grid[x][y] = color used = TRUE - update_icon() + update_appearance(updates = ALL) . = TRUE if("finalize") . = TRUE @@ -132,7 +132,8 @@ generate_proper_overlay() try_rename(user) -/obj/item/canvas/update_icon() +/obj/item/canvas/update_appearance(updates = ALL) + . = ..() cut_overlays() if(!icon_generated) if(used) @@ -155,7 +156,7 @@ CRASH("Error generating painting png : [result]") generated_icon = new(png_filename) icon_generated = TRUE - update_icon() + update_appearance(updates = ALL) /obj/item/canvas/proc/get_data_string() var/list/data = list() @@ -281,7 +282,7 @@ C.forceMove(drop_location()) C = null to_chat(user, span_notice("You remove the painting from the frame.")) - update_icon() + update_appearance(updates = ALL) return TRUE /obj/structure/sign/painting/proc/frame_canvas(mob/user,obj/item/canvas/new_canvas) @@ -290,13 +291,13 @@ if(!C.finalized) C.finalize(user) to_chat(user,span_notice("You frame [C].")) - update_icon() + update_appearance(updates = ALL) /obj/structure/sign/painting/proc/try_rename(mob/user) if(C.painting_name == initial(C.painting_name)) C.try_rename(user) -/obj/structure/sign/painting/update_icon() +/obj/structure/sign/painting/update_appearance(updates = ALL) . = ..() if(C && C.generated_icon) @@ -356,7 +357,7 @@ new_canvas.author_ckey = author new_canvas.name = "painting - [title]" C = new_canvas - update_icon() + update_appearance(updates = ALL) /obj/structure/sign/painting/proc/save_persistent() if(!persistence_id || !C || C.no_save) diff --git a/code/game/objects/structures/barsigns.dm b/code/game/objects/structures/barsigns.dm index 38236af658f7..7b4991688544 100644 --- a/code/game/objects/structures/barsigns.dm +++ b/code/game/objects/structures/barsigns.dm @@ -20,27 +20,55 @@ if(!istype(sign)) return - icon_state = sign.icon + if(sign.rename_area) + rename_area(src, sign.name) + + chosen_sign = sign + update_appearance() + +/obj/structure/sign/barsign/update_icon_state() + if(chosen_sign?.icon) + icon_state = chosen_sign.icon + else + icon_state = "empty" + + return ..() + +/obj/structure/sign/barsign/update_desc() + . = ..() + + if(chosen_sign && chosen_sign.desc) + desc = chosen_sign.desc - if(sign.name) - name = "[initial(name)] ([sign.name])" +/obj/structure/sign/barsign/update_name() + . = ..() + if(chosen_sign && chosen_sign.rename_area) + name = "[initial(name)] ([chosen_sign.name])" else name = "[initial(name)]" - if(sign.desc) - desc = sign.desc +/*/obj/structure/sign/barsign/update_overlays() + . = ..() - if(sign.rename_area && sign.name) - rename_area(src, sign.name) + if(stat & (NOPOWER|BROKEN)) + return - return sign + if(chosen_sign && chosen_sign.light_mask) + . += emissive_appearance(icon, "[chosen_sign.icon]-light-mask", src)*/ + +/obj/structure/sign/barsign/update_appearance(updates=ALL) + . = ..() +// if(stat & (NOPOWER|BROKEN)) +// set_light(0) +// return +// if(chosen_sign && chosen_sign.neon_color) +// set_light(MINIMUM_USEFUL_LIGHT_RANGE, 0.7, chosen_sign.neon_color) /obj/structure/sign/barsign/proc/set_sign_by_name(sign_name) - for(var/d in subtypesof(/datum/barsign)) - var/datum/barsign/D = d - if(initial(D.name) == sign_name) - var/new_sign = new D - return set_sign(new_sign) + for(var/datum/barsign/sign as anything in subtypesof(/datum/barsign)) + if(initial(sign.name) == sign_name) + var/new_sign = new sign + set_sign(new_sign) /obj/structure/sign/barsign/obj_break(damage_flag) if(!broken && !(flags_1 & NODECONSTRUCT_1)) diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm index 747009d314d1..6627711bebeb 100644 --- a/code/game/objects/structures/bedsheet_bin.dm +++ b/code/game/objects/structures/bedsheet_bin.dm @@ -350,7 +350,8 @@ LINEN BINS . += "There are [amount] bed sheets in the bin." -/obj/structure/bedsheetbin/update_icon() +/obj/structure/bedsheetbin/update_appearance(updates = ALL) + . = ..() switch(amount) if(0) icon_state = "linenbin-empty" @@ -362,7 +363,7 @@ LINEN BINS /obj/structure/bedsheetbin/fire_act(exposed_temperature, exposed_volume) if(amount) amount = 0 - update_icon() + update_appearance(updates = ALL) ..() /obj/structure/bedsheetbin/attackby(obj/item/I, mob/user, params) @@ -372,7 +373,7 @@ LINEN BINS sheets.Add(I) amount++ to_chat(user, span_notice("You put [I] in [src].")) - update_icon() + update_appearance(updates = ALL) else if(default_unfasten_wrench(user, I, 5)) return @@ -421,7 +422,7 @@ LINEN BINS B.forceMove(drop_location()) user.put_in_hands(B) to_chat(user, span_notice("You take [B] out of [src].")) - update_icon() + update_appearance(updates = ALL) if(hidden) hidden.forceMove(drop_location()) @@ -444,7 +445,7 @@ LINEN BINS B.forceMove(drop_location()) to_chat(user, span_notice("You telekinetically remove [B] from [src].")) - update_icon() + update_appearance(updates = ALL) if(hidden) hidden.forceMove(drop_location()) diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index d72f1cac07c1..e76196d6e908 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -13,14 +13,14 @@ GLOBAL_LIST_EMPTY(lockers) var/welded = FALSE var/locked = FALSE var/large = TRUE - var/wall_mounted = 0 //never solid (You can always pass over it) + var/wall_mounted = FALSE //never solid (You can always pass over it) max_integrity = 200 integrity_failure = 50 armor = list(MELEE = 20, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 10, BIO = 0, RAD = 0, FIRE = 70, ACID = 60) var/breakout_time = 1200 var/message_cooldown var/can_weld_shut = TRUE - var/open_flags = 0 + var/open_flags = NONE var/dense_when_open = FALSE //if it's dense when open or not var/max_mob_size = MOB_SIZE_HUMAN //Biggest mob_size accepted by the container var/mob_storage_capacity = 3 // how many human sized mob/living can fit together inside a closet. @@ -56,7 +56,7 @@ GLOBAL_LIST_EMPTY(lockers) if(mapload && !opened) // if closed, any item at the crate's loc is put in the contents . = INITIALIZE_HINT_LATELOAD - update_icon() + update_appearance(updates = ALL) PopulateContents() var/static/list/loc_connections = list( COMSIG_ATOM_MAGICALLY_UNLOCKED = PROC_REF(on_magic_unlock), @@ -78,30 +78,45 @@ GLOBAL_LIST_EMPTY(lockers) GLOB.lockers -= src return ..() +/obj/structure/closet/update_appearance(updates=ALL) + . = ..() + if(opened || broken || !secure) + luminosity = 0 + return + luminosity = 1 + /obj/structure/closet/update_icon() - cut_overlays() - if(!opened) - layer = OBJ_LAYER - if(!is_animating_door) - if(icon_door) - add_overlay("[icon_door]_door") - else - add_overlay("[icon_state]_door") - if(welded) - add_overlay(icon_welded) - if(secure && !broken) - if(locked) - add_overlay("locked") - else - add_overlay("unlocked") + . = ..() + if(issupplypod(src)) + return - else - layer = BELOW_OBJ_LAYER - if(!is_animating_door) - if(icon_door_override) - add_overlay("[icon_door]_open") - else - add_overlay("[icon_state]_open") + layer = opened ? BELOW_OBJ_LAYER : OBJ_LAYER + +/obj/structure/closet/update_overlays() + . = ..() + closet_update_overlays(.) + +/obj/structure/closet/proc/closet_update_overlays(list/new_overlays) + . = new_overlays + if(!is_animating_door) + if(opened && !notreallyacloset) + var/mutable_appearance/door_overlay = mutable_appearance(icon, "[icon_state]_open", alpha = src.alpha) + . += door_overlay +// door_overlay.overlays += emissive_blocker(door_overlay.icon, door_overlay.icon_state, src, alpha = door_overlay.alpha) // If we don't do this the door doesn't block emissives and it looks weird. + else if(!notreallyacloset) + . += "[icon_door || icon_state]_door" + + if(opened) + return + + if(welded) + . += icon_welded + + if(broken || !secure) + return + //Overlay is similar enough for both that we can use the same mask for both +// . += emissive_appearance(icon, "locked", src, alpha = src.alpha) + . += locked ? "locked" : "unlocked" /obj/structure/closet/proc/animate_door(closing = FALSE) if(!door_anim_time) @@ -131,7 +146,7 @@ GLOBAL_LIST_EMPTY(lockers) /obj/structure/closet/proc/end_door_animation() is_animating_door = FALSE vis_contents -= door_obj - update_icon() + update_appearance(updates = ALL) /obj/structure/closet/proc/get_door_transform(angle) var/matrix/M = matrix() @@ -211,7 +226,7 @@ GLOBAL_LIST_EMPTY(lockers) climb_time *= 0.5 //it's faster to climb onto an open thing dump_contents() animate_door(FALSE) - update_icon() + update_appearance(updates = ALL) update_airtightness() return 1 @@ -265,7 +280,7 @@ GLOBAL_LIST_EMPTY(lockers) opened = FALSE density = TRUE animate_door(TRUE) - update_icon() + update_appearance(updates = ALL) update_airtightness() close_storage(user) return TRUE @@ -339,7 +354,7 @@ GLOBAL_LIST_EMPTY(lockers) user.visible_message(span_notice("[user] [welded ? "welds shut" : "unwelded"] \the [src]."), span_notice("You [welded ? "weld" : "unwelded"] \the [src] with \the [W]."), span_italics("You hear welding.")) - update_icon() + update_appearance(updates = ALL) else if(W.tool_behaviour == TOOL_WRENCH && anchorable) if(isinspace() && !anchored) return @@ -516,7 +531,7 @@ GLOBAL_LIST_EMPTY(lockers) locked = !locked user.visible_message(span_notice("[user] [locked ? null : "un"]locks [src]."), span_notice("You [locked ? null : "un"]lock [src].")) - update_icon() + update_appearance(updates = ALL) else if(!silent) to_chat(user, span_notice("Access Denied")) else if(secure && broken) @@ -530,7 +545,7 @@ GLOBAL_LIST_EMPTY(lockers) playsound(src, "sparks", 50, 1) broken = TRUE locked = FALSE - update_icon() + update_appearance(updates = ALL) /obj/structure/closet/get_remote_view_fullscreens(mob/user) if(user.stat == DEAD || !(user.sight & (SEEOBJS|SEEMOBS))) @@ -546,7 +561,7 @@ GLOBAL_LIST_EMPTY(lockers) if(secure && !broken && !(. & EMP_PROTECT_SELF)) if(prob(50 / severity)) locked = !locked - update_icon() + update_appearance(updates = ALL) if(prob(20 / severity) && !opened) if(!locked) open() diff --git a/code/game/objects/structures/crates_lockers/closets/bluespace_locker.dm b/code/game/objects/structures/crates_lockers/closets/bluespace_locker.dm index 0b3cdd9700d0..73981bdd8019 100644 --- a/code/game/objects/structures/crates_lockers/closets/bluespace_locker.dm +++ b/code/game/objects/structures/crates_lockers/closets/bluespace_locker.dm @@ -87,7 +87,8 @@ else return ..() -/obj/structure/closet/bluespace/internal/update_icon() +/obj/structure/closet/bluespace/internal/update_appearance(updates = ALL) + . = ..() cut_overlays() var/obj/structure/closet/other = get_other_locker() if(!other) diff --git a/code/game/objects/structures/crates_lockers/closets/bodybag.dm b/code/game/objects/structures/crates_lockers/closets/bodybag.dm index 7ef203bd313c..b71083690c81 100644 --- a/code/game/objects/structures/crates_lockers/closets/bodybag.dm +++ b/code/game/objects/structures/crates_lockers/closets/bodybag.dm @@ -38,7 +38,7 @@ if(t) name = "[initial(name)] - [t]" tagged = 1 - update_icon() + update_appearance(updates = ALL) else name = initial(name) return @@ -46,10 +46,10 @@ to_chat(user, span_notice("You cut the tag off [src].")) name = initial(name) tagged = 0 - update_icon() + update_appearance(updates = ALL) -/obj/structure/closet/body_bag/update_icon() - ..() +/obj/structure/closet/body_bag/update_appearance(updates = ALL) + . = ..() if (tagged) add_overlay("bodybag_label") @@ -190,7 +190,7 @@ to_chat(the_folder, span_warning("You wrestle with [src], but it won't fold while its straps are fastened.")) return ..() -/obj/structure/closet/body_bag/environmental/prisoner/update_icon() +/obj/structure/closet/body_bag/environmental/prisoner/update_appearance(updates = ALL) . = ..() if(sinched) icon_state = initial(icon_state) + "_sinched" @@ -216,7 +216,7 @@ if(!dense_when_open) density = FALSE dump_contents() - update_icon() + update_appearance(updates = ALL) return TRUE /obj/structure/closet/body_bag/environmental/prisoner/container_resist(mob/living/user) @@ -278,7 +278,7 @@ span_notice("You [sinched ? null : "un"]sinch [src]."), span_hear("You hear stretching followed by metal clicking from [src].")) log_game("[key_name(user)] [sinched ? "sinched":"unsinched"] secure environmental bag [src] at [AREACOORD(src)]") - update_icon() + update_appearance(updates = ALL) /obj/structure/closet/body_bag/environmental/prisoner/syndicate name = "syndicate prisoner transport bag" @@ -292,7 +292,7 @@ breakout_time = 8 MINUTES sinch_time = 4 SECONDS -/obj/structure/closet/body_bag/environmental/prisoner/syndicate/update_icon() +/obj/structure/closet/body_bag/environmental/prisoner/syndicate/update_appearance(updates = ALL) . = ..() var/obj/item/bodybag/environmental/prisoner/syndicate/inner_bag = foldedbag_instance if(sinched && inner_bag && inner_bag.killing) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm index 60952c2af129..bc7c0ab7d11e 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm @@ -57,7 +57,7 @@ if(allowed(user) || !registered_name || (istype(I) && (registered_name == I.registered_name))) //they can open all lockers, or nobody owns this, or they own this locker locked = !locked - update_icon() + update_appearance(updates = ALL) if(!registered_name) registered_name = I.registered_name diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index faadb6fba554..06e858bbb1c9 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -23,7 +23,7 @@ . = ..() if(icon_state == "[initial(icon_state)]open") opened = TRUE - update_icon() + update_appearance(updates = ALL) /obj/structure/closet/crate/CanAllowThrough(atom/movable/mover, turf/target) . = ..() @@ -35,7 +35,8 @@ if(!locatedcrate.opened) //otherwise, if the located crate is closed, allow entering return TRUE -/obj/structure/closet/crate/update_icon() +/obj/structure/closet/crate/update_appearance(updates = ALL) + . = ..() icon_state = "[initial(icon_state)][opened ? "open" : ""]" cut_overlays() @@ -56,7 +57,7 @@ playsound(src, 'sound/items/poster_ripped.ogg', 75, 1) manifest.forceMove(get_turf(src)) manifest = null - update_icon() + update_appearance(updates = ALL) /obj/structure/closet/crate/proc/tear_manifest(mob/user) to_chat(user, span_notice("You tear the manifest off of [src].")) @@ -66,7 +67,7 @@ if(ishuman(user)) user.put_in_hands(manifest) manifest = null - update_icon() + update_appearance(updates = ALL) /obj/structure/closet/crate/coffin name = "coffin" diff --git a/code/game/objects/structures/crates_lockers/crates/bins.dm b/code/game/objects/structures/crates_lockers/crates/bins.dm index f5dcce0f0782..b88d63f5b9a7 100644 --- a/code/game/objects/structures/crates_lockers/crates/bins.dm +++ b/code/game/objects/structures/crates_lockers/crates/bins.dm @@ -10,10 +10,10 @@ /obj/structure/closet/crate/bin/Initialize(mapload) . = ..() - update_icon() + update_appearance(updates = ALL) -/obj/structure/closet/crate/bin/update_icon() - ..() +/obj/structure/closet/crate/bin/update_appearance(updates = ALL) + . = ..() cut_overlays() if(contents.len == 0) add_overlay("largebing") @@ -28,7 +28,7 @@ to_chat(user, span_notice("You fill the bag.")) for(var/obj/item/O in src) SEND_SIGNAL(T, COMSIG_TRY_STORAGE_INSERT, O, user, TRUE) - T.update_icon() + T.update_appearance(updates = ALL) do_animate() else if(istype(W, /obj/item/wrench)) anchored = !anchored @@ -41,4 +41,4 @@ flick("animate_largebins", src) spawn(13) playsound(loc, close_sound, 15, 1, -3) - update_icon() + update_appearance(updates = ALL) diff --git a/code/game/objects/structures/crates_lockers/crates/critter.dm b/code/game/objects/structures/crates_lockers/crates/critter.dm index 74b9e7827d31..5980d7e45b95 100644 --- a/code/game/objects/structures/crates_lockers/crates/critter.dm +++ b/code/game/objects/structures/crates_lockers/crates/critter.dm @@ -21,18 +21,18 @@ return ..() -/obj/structure/closet/crate/critter/update_icon() - cut_overlays() +/obj/structure/closet/crate/critter/update_overlays() + . = ..() if(opened) - add_overlay("crittercrate_door_open") + . += "crittercrate_door_open" else - add_overlay("crittercrate_door") + . += "crittercrate_door" if(manifest) - add_overlay("manifest") + . += "manifest" /obj/structure/closet/crate/critter/return_air() if(tank) - return tank.air_contents + return tank.return_air() else return loc.return_air() diff --git a/code/game/objects/structures/crates_lockers/crates/secure.dm b/code/game/objects/structures/crates_lockers/crates/secure.dm index 4f338ba105b0..92ecc4fbc5a9 100644 --- a/code/game/objects/structures/crates_lockers/crates/secure.dm +++ b/code/game/objects/structures/crates_lockers/crates/secure.dm @@ -13,8 +13,8 @@ return 0 . = ..() -/obj/structure/closet/crate/secure/update_icon() - ..() +/obj/structure/closet/crate/secure/update_appearance(updates = ALL) + . = ..() if(broken) add_overlay("securecrateemag") else if(locked) @@ -131,4 +131,4 @@ locked = !locked user.visible_message(span_notice("[user] [locked ? null : "un"]locks [src]."), span_notice("You [locked ? null : "un"]lock [src].")) - update_icon() + update_appearance(updates = ALL) diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index 06feb41fda5b..5c2f644d2e91 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -30,7 +30,7 @@ trophy_message = showpiece_entry["trophy_message"] if(start_showpiece_type) showpiece = new start_showpiece_type (src) - update_icon() + update_appearance(updates = ALL) /obj/structure/displaycase/Destroy() if(electronics) @@ -75,7 +75,7 @@ broken = 1 new /obj/item/shard( src.loc ) playsound(src, "shatter", 70, TRUE) - update_icon() + update_appearance(updates = ALL) trigger_alarm() /obj/structure/displaycase/proc/trigger_alarm() @@ -85,7 +85,8 @@ alarmed.burglaralert(src) playsound(src, 'sound/effects/alert.ogg', 50, TRUE) -/obj/structure/displaycase/update_icon() +/obj/structure/displaycase/update_appearance(updates = ALL) + . = ..() var/icon/I if(open) I = icon('icons/obj/stationobjs.dmi',"glassbox_open") @@ -115,7 +116,7 @@ to_chat(user, span_notice("You begin repairing [src]...")) if(W.use_tool(src, user, 40, amount=5, volume=50)) obj_integrity = max_integrity - update_icon() + update_appearance(updates = ALL) to_chat(user, span_notice("You repair [src].")) else to_chat(user, span_warning("[src] is already in good condition!")) @@ -139,7 +140,7 @@ if(user.transferItemToLoc(W, src)) showpiece = W to_chat(user, span_notice("You put [W] on display.")) - update_icon() + update_appearance(updates = ALL) else if(glass_fix && broken && istype(W, /obj/item/stack/sheet/glass)) var/obj/item/stack/sheet/glass/G = W if(G.get_amount() < 2) @@ -150,13 +151,13 @@ G.use(2) broken = 0 obj_integrity = max_integrity - update_icon() + update_appearance(updates = ALL) else return ..() /obj/structure/displaycase/proc/toggle_lock(mob/user) open = !open - update_icon() + update_appearance(updates = ALL) /obj/structure/displaycase/attack_paw(mob/user) return attack_hand(user) @@ -171,7 +172,7 @@ log_combat(user, src, "deactivates the hover field of") dump() src.add_fingerprint(user) - update_icon() + update_appearance(updates = ALL) return else //prevents remote "kicks" with TK @@ -306,7 +307,7 @@ to_chat(user, span_notice("You insert [W] into the case.")) showpiece = W added_roundstart = FALSE - update_icon() + update_appearance(updates = ALL) placer_key = user.ckey diff --git a/code/game/objects/structures/divine.dm b/code/game/objects/structures/divine.dm index 3599e70c7a8f..2ff48587c96e 100644 --- a/code/game/objects/structures/divine.dm +++ b/code/game/objects/structures/divine.dm @@ -40,11 +40,12 @@ last_process = world.time to_chat(user, span_notice("The water feels warm and soothing as you touch it. The fountain immediately dries up shortly afterwards.")) user.reagents.add_reagent(/datum/reagent/medicine/omnizine/godblood,20) - update_icon() - addtimer(CALLBACK(src, TYPE_PROC_REF(/atom/, update_icon)), time_between_uses) + update_appearance(updates = ALL) + addtimer(CALLBACK(src, TYPE_PROC_REF(/atom/, update_appearance)), time_between_uses) -/obj/structure/healingfountain/update_icon() +/obj/structure/healingfountain/update_appearance(updates = ALL) + . = ..() if(last_process + time_between_uses > world.time) icon_state = "fountain" else diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm index f7756fab8ffd..4b628b3f4325 100644 --- a/code/game/objects/structures/door_assembly.dm +++ b/code/game/objects/structures/door_assembly.dm @@ -22,8 +22,7 @@ /obj/structure/door_assembly/Initialize(mapload) . = ..() - update_icon() - update_name() + update_appearance(updates = ALL) /obj/structure/door_assembly/examine(mob/user) . = ..() @@ -255,22 +254,21 @@ door.name = base_name door.previous_airlock = previous_assembly electronics.forceMove(door) - door.update_icon() + door.update_appearance(updates = ALL) qdel(src) else return ..() - update_name() - update_icon() + update_appearance(updates = ALL) -/obj/structure/door_assembly/update_icon() - cut_overlays() +/obj/structure/door_assembly/update_overlays() + . = ..() if(!glass) - add_overlay(get_airlock_overlay("fill_construction", icon)) - else if(glass) - add_overlay(get_airlock_overlay("glass_construction", overlays_file)) - add_overlay(get_airlock_overlay("panel_c[state+1]", overlays_file)) + . += get_airlock_overlay("fill_construction", icon, src, /*TRUE*/) + else + . += get_airlock_overlay("glass_construction", overlays_file, src, /*TRUE*/) + . += get_airlock_overlay("panel_c[state+1]", overlays_file, src, /*TRUE*/) -/obj/structure/door_assembly/proc/update_name() +/obj/structure/door_assembly/update_name() name = "" switch(state) if(AIRLOCK_ASSEMBLY_NEEDS_WIRES) @@ -281,6 +279,7 @@ if(AIRLOCK_ASSEMBLY_NEEDS_SCREWDRIVER) name = "near finished " name += "[heat_proof_finished ? "heat-proofed " : ""][glass ? "window " : ""][base_name] assembly" + return ..() /obj/structure/door_assembly/proc/transfer_assembly_vars(obj/structure/door_assembly/source, obj/structure/door_assembly/target, previous = FALSE) target.glass = source.glass @@ -293,7 +292,7 @@ if(electronics) target.electronics = source.electronics source.electronics.forceMove(target) - target.update_icon() + target.update_appearance(updates = ALL) target.update_name() qdel(source) diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm index 0d3f46a82036..e1aaf16b2d75 100644 --- a/code/game/objects/structures/extinguisher.dm +++ b/code/game/objects/structures/extinguisher.dm @@ -44,7 +44,7 @@ /obj/structure/extinguisher_cabinet/handle_atom_del(atom/A) if(A == stored_extinguisher) stored_extinguisher = null - update_icon() + update_appearance(updates = ALL) /obj/structure/extinguisher_cabinet/attackby(obj/item/I, mob/user, params) if(I.tool_behaviour == TOOL_WRENCH && !stored_extinguisher) @@ -64,7 +64,7 @@ return stored_extinguisher = I to_chat(user, span_notice("You place [I] in [src].")) - update_icon() + update_appearance(updates = ALL) return TRUE else toggle_cabinet(user) @@ -87,7 +87,7 @@ if(!opened) opened = 1 playsound(loc, 'sound/machines/click.ogg', 15, 1, -3) - update_icon() + update_appearance(updates = ALL) else toggle_cabinet(user) @@ -99,7 +99,7 @@ stored_extinguisher = null opened = 1 playsound(loc, 'sound/machines/click.ogg', 15, 1, -3) - update_icon() + update_appearance(updates = ALL) else toggle_cabinet(user) @@ -118,9 +118,10 @@ else playsound(loc, 'sound/machines/click.ogg', 15, 1, -3) opened = !opened - update_icon() + update_appearance(updates = ALL) -/obj/structure/extinguisher_cabinet/update_icon() +/obj/structure/extinguisher_cabinet/update_appearance(updates = ALL) + . = ..() if(!opened) icon_state = "extinguisher_closed" return @@ -139,7 +140,7 @@ if(stored_extinguisher) stored_extinguisher.forceMove(loc) stored_extinguisher = null - update_icon() + update_appearance(updates = ALL) /obj/structure/extinguisher_cabinet/deconstruct(disassembled = TRUE) diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm index ebe4f37d2b2d..d1f2d1407fbf 100644 --- a/code/game/objects/structures/false_walls.dm +++ b/code/game/objects/structures/false_walls.dm @@ -59,7 +59,7 @@ for(var/mob/living/obstacle in srcturf) //Stop people from using this as a shield return opening = TRUE - update_icon() + update_appearance(updates = ALL) addtimer(CALLBACK(src, /obj/structure/falsewall/proc/toggle_open), 5) /obj/structure/falsewall/proc/toggle_open() @@ -67,10 +67,11 @@ density = !density set_opacity(density) opening = FALSE - update_icon() + update_appearance(updates = ALL) air_update_turf(TRUE) -/obj/structure/falsewall/update_icon()//Calling icon_update will refresh the smoothwalls if it's closed, otherwise it will make sure the icon is correct if it's open +/obj/structure/falsewall/update_appearance(updates = ALL) + . = ..()//Calling icon_update will refresh the smoothwalls if it's closed, otherwise it will make sure the icon is correct if it's open if(opening) if(density) icon_state = "fwall_opening" diff --git a/code/game/objects/structures/fireaxe.dm b/code/game/objects/structures/fireaxe.dm index 49548bf352c4..b0ee79a4b09f 100644 --- a/code/game/objects/structures/fireaxe.dm +++ b/code/game/objects/structures/fireaxe.dm @@ -21,7 +21,7 @@ /obj/structure/fireaxecabinet/Initialize(mapload) . = ..() fireaxe = new - update_icon() + update_appearance(updates = ALL) //yogs NOTICE - Destroy() function MIRRORED to yogstation/code/game/objects/structure/fireaxe.dm //changes made to the below function will have no effect @@ -44,7 +44,7 @@ to_chat(user, span_notice("You begin repairing [src].")) if(I.use_tool(src, user, 40, volume=50, amount=2)) obj_integrity = max_integrity - update_icon() + update_appearance(updates = ALL) to_chat(user, span_notice("You repair [src].")) else to_chat(user, span_warning("[src] is already in good condition!")) @@ -59,7 +59,7 @@ if(do_after(user, 2 SECONDS, src) && G.use(2)) broken = 0 obj_integrity = max_integrity - update_icon() + update_appearance(updates = ALL) //yogs start - warn user if they use the wrong type of glass to repair else if(istype(I, /obj/item/stack/sheet/glass) && broken) to_chat(user, span_warning("You need reinforced glass sheets to fix [src]!")) @@ -75,7 +75,7 @@ return fireaxe = F to_chat(user, span_caution("You place the [F.name] back in the [name].")) - update_icon() + update_appearance(updates = ALL) return else if(istype(I, /obj/item/card/id/captains_spare) && !spareid && !axe) var/obj/item/card/id/captains_spare/S = I @@ -83,7 +83,7 @@ return spareid = S to_chat(user, span_caution("You place the [S.name] back in the [name].")) - update_icon() + update_appearance(updates = ALL) return else if(istype(I, /obj/item/twohanded/fishingrod/collapsible/miningmedic) && !olreliable && !axe) var/obj/item/twohanded/fishingrod/collapsible/miningmedic/R = I @@ -94,7 +94,7 @@ return olreliable = R to_chat(user, span_caution("You place the [R.name] back in the [name].")) - update_icon() + update_appearance(updates = ALL) return else if(!broken) //open the cabinet normally. @@ -131,11 +131,11 @@ return . = ..() if(.) - update_icon() + update_appearance(updates = ALL) /obj/structure/fireaxecabinet/obj_break(damage_flag) if(!broken && !(flags_1 & NODECONSTRUCT_1)) - update_icon() + update_appearance(updates = ALL) broken = TRUE playsound(src, 'sound/effects/glassbr3.ogg', 100, 1) new /obj/item/shard(loc) @@ -178,7 +178,7 @@ spareid = null olreliable = null src.add_fingerprint(user) - update_icon() + update_appearance(updates = ALL) return toggle_open()//yogs - consolidates opening code return @@ -194,7 +194,8 @@ toggle_open()//yogs - consolidates opening code return -/obj/structure/fireaxecabinet/update_icon() +/obj/structure/fireaxecabinet/update_appearance(updates = ALL) + . = ..() cut_overlays() if(fireaxe) add_overlay("axe") @@ -231,7 +232,7 @@ if(do_after(user, 2 SECONDS, src)) to_chat(user, span_caution("You [locked ? "disable" : "re-enable"] the locking modules.")) locked = !locked - update_icon() + update_appearance(updates = ALL) /obj/structure/fireaxecabinet/verb/toggle_open() set name = "Open/Close" @@ -247,7 +248,7 @@ else playsound(loc, 'sound/machines/click.ogg', 15, 1, -3)//yogs - adds open/close sound open = !open - update_icon() + update_appearance(updates = ALL) return /obj/structure/fireaxecabinet/proc/trigger_alarm() @@ -270,7 +271,7 @@ . = ..() fireaxe = null spareid = new(src) - update_icon() + update_appearance(updates = ALL) /obj/structure/fireaxecabinet/bridge/spare/reset_lock(mob/user) //this happens when you hack the lock as a synthetic/AI, or with a multitool. @@ -308,4 +309,4 @@ . = ..() fireaxe = null olreliable = new(src) - update_icon() + update_appearance(updates = ALL) diff --git a/code/game/objects/structures/fireplace.dm b/code/game/objects/structures/fireplace.dm index 51c919119ce3..0475fc4e3b76 100644 --- a/code/game/objects/structures/fireplace.dm +++ b/code/game/objects/structures/fireplace.dm @@ -69,7 +69,8 @@ else . = ..() -/obj/structure/fireplace/update_icon() +/obj/structure/fireplace/update_appearance(updates = ALL) + . = ..() cut_overlays() if(lit) switch(burn_time_remaining()) @@ -112,7 +113,7 @@ playsound(src, 'sound/effects/comfyfire.ogg',50,0, 0, 1) var/turf/T = get_turf(src) T.hotspot_expose(700, 2.5 * delta_time) - update_icon() + update_appearance(updates = ALL) adjust_light() /obj/structure/fireplace/extinguish() @@ -142,11 +143,11 @@ desc = "A large stone brick fireplace, warm and cozy." flame_expiry_timer = world.time + fuel_added fuel_added = 0 - update_icon() + update_appearance(updates = ALL) adjust_light() /obj/structure/fireplace/proc/put_out() lit = FALSE - update_icon() + update_appearance(updates = ALL) adjust_light() desc = initial(desc) diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index fa60e3d5d10a..63a4560bf3d5 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -34,20 +34,22 @@ if(broken) holes = (holes | 16) //16 is the biggest hole - update_icon() + update_appearance(updates = ALL) return holes = (holes | (1 << rand(0,3))) //add random holes between 1 and 8 - update_icon() + update_appearance(updates = ALL) -/obj/structure/grille/update_icon() +/obj/structure/grille/update_appearance(updates = ALL) + . = ..() if(QDELETED(src)) return for(var/i = 0; i < 5; i++) var/mask = 1 << i if(holes & mask) filters += filter(type="alpha", icon = icon('icons/obj/smooth_structures/grille.dmi', "broken_[i]"), flags = MASK_INVERSE) + return ..() /obj/structure/grille/examine(mob/user) . = ..() @@ -303,7 +305,7 @@ /obj/structure/grille/broken/Initialize(mapload) . = ..() holes = (holes | 16) - update_icon() + update_appearance(updates = ALL) /obj/structure/grille/ratvar icon = 'icons/obj/structures.dmi' diff --git a/code/game/objects/structures/guncase.dm b/code/game/objects/structures/guncase.dm index a9326cf17293..cfd4346a3081 100644 --- a/code/game/objects/structures/guncase.dm +++ b/code/game/objects/structures/guncase.dm @@ -19,10 +19,11 @@ I.forceMove(src) if(contents.len >= capacity) break - update_icon() + update_appearance(updates = ALL) return ..() -/obj/structure/guncase/update_icon() +/obj/structure/guncase/update_appearance(updates = ALL) + . = ..() cut_overlays() if(case_type && LAZYLEN(contents)) var/mutable_appearance/gun_overlay = mutable_appearance(icon, case_type) @@ -42,14 +43,14 @@ if(!user.transferItemToLoc(I, src)) return to_chat(user, span_notice("You place [I] in [src].")) - update_icon() + update_appearance(updates = ALL) else to_chat(user, span_warning("[src] is full.")) return else if(user.a_intent != INTENT_HARM) open = !open - update_icon() + update_appearance(updates = ALL) else return ..() @@ -63,7 +64,7 @@ ShowWindow(user) else open = !open - update_icon() + update_appearance(updates = ALL) /obj/structure/guncase/proc/ShowWindow(mob/user) var/dat = {"
    @@ -89,10 +90,10 @@ if(ishuman(usr)) if(!usr.put_in_hands(O)) O.forceMove(get_turf(src)) - update_icon() + update_appearance(updates = ALL) /obj/structure/guncase/handle_atom_del(atom/A) - update_icon() + update_appearance(updates = ALL) /obj/structure/guncase/contents_explosion(severity, target) for(var/thing in contents) diff --git a/code/game/objects/structures/headpike.dm b/code/game/objects/structures/headpike.dm index 258ef6579213..6d0a49ade7e8 100644 --- a/code/game/objects/structures/headpike.dm +++ b/code/game/objects/structures/headpike.dm @@ -20,7 +20,7 @@ victim = locate(/obj/item/bodypart/head) in parts_list name = "[victim.name] on a spear" ..() - update_icon() + update_appearance(updates = ALL) /obj/structure/headpike/glass/CheckParts(list/parts_list) spear = locate(/obj/item/twohanded/spear) in parts_list @@ -38,8 +38,8 @@ . = ..() pixel_x = rand(-8, 8) -/obj/structure/headpike/update_icon() - ..() +/obj/structure/headpike/update_appearance(updates = ALL) + . = ..() var/obj/item/bodypart/head/H = locate() in contents var/mutable_appearance/MA = new() if(H) diff --git a/code/game/objects/structures/holosign.dm b/code/game/objects/structures/holosign.dm index 57844bb77b00..81e84d533f20 100644 --- a/code/game/objects/structures/holosign.dm +++ b/code/game/objects/structures/holosign.dm @@ -215,14 +215,15 @@ /obj/structure/holosign/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) playsound(loc, 'sound/weapons/egloves.ogg', 80, 1) -/obj/structure/holobed/update_icon() +/obj/structure/holobed/update_appearance(updates = ALL) + . = ..() icon_state = "[initial(icon_state)][stasis ? "" : "_off"]" /obj/structure/holobed/AltClick(mob/living/user) if(user.a_intent == INTENT_HELP) stasis = !stasis handle_stasis(occupant) - update_icon() + update_appearance(updates = ALL) to_chat(user, span_warning("You [stasis ? "activate" : "deactivate"] the stasis field.")) /obj/structure/holobed/Exited(atom/movable/AM, atom/newloc) diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm index 37bb885f2d59..7676d452e812 100644 --- a/code/game/objects/structures/janicart.dm +++ b/code/game/objects/structures/janicart.dm @@ -64,28 +64,28 @@ if(!myspray) put_in_cart(I, user) myspray=I - update_icon() + update_appearance(updates = ALL) else to_chat(user, fail_msg) else if(istype(I, /obj/item/paint/paint_remover)) if(!myremover) put_in_cart(I, user) myremover=I - update_icon() + update_appearance(updates = ALL) else to_chat(user, fail_msg) else if(istype(I, /obj/item/melee/flyswatter)) if(!myswatter) put_in_cart(I, user) myswatter=I - update_icon() + update_appearance(updates = ALL) else to_chat(user, fail_msg) else if(istype(I, /obj/item/flashlight)) if(!mylight) put_in_cart(I, user) mylight=I - update_icon() + update_appearance(updates = ALL) else to_chat(user, fail_msg) else if(istype(I, /obj/item/lightreplacer)) @@ -104,7 +104,7 @@ if(signs < max_signs) put_in_cart(I, user) signs++ - update_icon() + update_appearance(updates = ALL) else to_chat(user, span_warning("[src] can't hold any more signs!")) else if(mybag) @@ -208,7 +208,7 @@ else return - update_icon() + update_appearance(updates = ALL) /* check_menu: Checks if we are allowed to interact with a radial menu @@ -223,7 +223,8 @@ return FALSE return TRUE -/obj/structure/janitorialcart/update_icon() +/obj/structure/janitorialcart/update_appearance(updates = ALL) + . = ..() cut_overlays() if(mybag) add_overlay("cart_garbage") diff --git a/code/game/objects/structures/ladders.dm b/code/game/objects/structures/ladders.dm index e894818d15bc..4ccf516aa9a0 100644 --- a/code/game/objects/structures/ladders.dm +++ b/code/game/objects/structures/ladders.dm @@ -13,11 +13,11 @@ if (up) src.up = up up.down = src - up.update_icon() + up.update_appearance(updates = ALL) if (down) src.down = down down.up = src - down.update_icon() + down.update_appearance(updates = ALL) return INITIALIZE_HINT_LATELOAD /obj/structure/ladder/Destroy(force) @@ -36,26 +36,27 @@ if (L) down = L L.up = src // Don't waste effort looping the other way - L.update_icon() + L.update_appearance(updates = ALL) if (!up) L = locate() in SSmapping.get_turf_above(T) if (L) up = L L.down = src // Don't waste effort looping the other way - L.update_icon() + L.update_appearance(updates = ALL) - update_icon() + update_appearance(updates = ALL) /obj/structure/ladder/proc/disconnect() if(up && up.down == src) up.down = null - up.update_icon() + up.update_appearance(updates = ALL) if(down && down.up == src) down.up = null - down.update_icon() + down.update_appearance(updates = ALL) up = down = null -/obj/structure/ladder/update_icon() +/obj/structure/ladder/update_appearance(updates = ALL) + . = ..() if(up && down) icon_state = "ladder11" @@ -160,7 +161,7 @@ /obj/structure/ladder/unbreakable/LateInitialize() // Override the parent to find ladders based on being height-linked if (!id || (up && down)) - update_icon() + update_appearance(updates = ALL) return for (var/O in GLOB.ladders) @@ -170,17 +171,17 @@ if (!down && L.height == height - 1) down = L L.up = src - L.update_icon() + L.update_appearance(updates = ALL) if (up) break // break if both our connections are filled else if (!up && L.height == height + 1) up = L L.down = src - L.update_icon() + L.update_appearance(updates = ALL) if (down) break // break if both our connections are filled - update_icon() + update_appearance(updates = ALL) /obj/structure/ladder/unbreakable/binary name = "mysterious ladder" diff --git a/code/game/objects/structures/life_candle.dm b/code/game/objects/structures/life_candle.dm index 3b91e7e76d21..cc293407bacf 100644 --- a/code/game/objects/structures/life_candle.dm +++ b/code/game/objects/structures/life_candle.dm @@ -37,7 +37,7 @@ user.visible_message(span_notice("[user] touches [src]. It seems to respond to [user.p_their()] presence!"), span_warning("You create a connection between you and [src].")) linked_minds |= user.mind - update_icon() + update_appearance(updates = ALL) float(linked_minds.len) if(linked_minds.len) START_PROCESSING(SSobj, src) @@ -46,7 +46,8 @@ STOP_PROCESSING(SSobj, src) set_light(0) -/obj/structure/life_candle/update_icon() +/obj/structure/life_candle/update_appearance(updates = ALL) + . = ..() if(linked_minds.len) icon_state = icon_state_active else diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm index 3dbc37c7fb3b..87ec0efe70f1 100644 --- a/code/game/objects/structures/mineral_doors.dm +++ b/code/game/objects/structures/mineral_doors.dm @@ -95,7 +95,7 @@ door_opened = TRUE layer = OPEN_DOOR_LAYER air_update_turf(1) - update_icon() + update_appearance(updates = ALL) isSwitchingStates = FALSE if(close_delay != -1) @@ -116,10 +116,11 @@ door_opened = FALSE layer = initial(layer) air_update_turf(1) - update_icon() + update_appearance(updates = ALL) isSwitchingStates = FALSE -/obj/structure/mineral_door/update_icon() +/obj/structure/mineral_door/update_appearance(updates = ALL) + . = ..() icon_state = "[initial(icon_state)][door_opened ? "open":""]" /obj/structure/mineral_door/attackby(obj/item/I, mob/user) diff --git a/code/game/objects/structures/mop_bucket.dm b/code/game/objects/structures/mop_bucket.dm index 300cc049d6c4..f99f7ac55089 100644 --- a/code/game/objects/structures/mop_bucket.dm +++ b/code/game/objects/structures/mop_bucket.dm @@ -19,27 +19,28 @@ if(!user.transferItemToLoc(M, src)) return ourmop = M - update_icon() + update_appearance(updates = ALL) to_chat(user, span_notice("You put [M] into [src].")) else reagents.trans_to(M, 5, transfered_by = user) to_chat(user, span_notice("You wet [M] in [src].")) playsound(loc, 'sound/effects/slosh.ogg', 25, 1) - update_icon() + update_appearance(updates = ALL) else . = ..() - update_icon() + update_appearance(updates = ALL) /obj/structure/mopbucket/attack_hand(mob/user) if(ourmop) user.put_in_hands(ourmop) to_chat(user, span_notice("You take [ourmop] from [src].")) ourmop = null - update_icon() + update_appearance(updates = ALL) return return ..() -/obj/structure/mopbucket/update_icon() +/obj/structure/mopbucket/update_appearance(updates = ALL) + . = ..() cut_overlays() if(reagents.total_volume > 0) add_overlay("mopbucket_water") diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index f02d14fe7fe4..bbf5610e1a2e 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -29,6 +29,7 @@ GLOBAL_LIST_EMPTY(bodycontainers) //Let them act as spawnpoints for revenants an var/breakout_time = 600 /obj/structure/bodycontainer/Initialize(mapload) + AddElement(/datum/element/update_icon_blocker) . = ..() GLOB.bodycontainers += src recursive_organ_check(src) @@ -43,10 +44,7 @@ GLOBAL_LIST_EMPTY(bodycontainers) //Let them act as spawnpoints for revenants an /obj/structure/bodycontainer/on_log(login) ..() - update_icon() - -/obj/structure/bodycontainer/update_icon() - return + update_appearance(updates = ALL) /obj/structure/bodycontainer/relaymove(mob/user) if(user.stat || !isturf(loc)) @@ -130,7 +128,7 @@ GLOBAL_LIST_EMPTY(bodycontainers) //Let them act as spawnpoints for revenants an for(var/atom/movable/AM in src) AM.forceMove(T) recursive_organ_check(src) - update_icon() + update_appearance(updates = ALL) /obj/structure/bodycontainer/proc/close() playsound(src, 'sound/effects/roll.ogg', 5, 1) @@ -140,7 +138,7 @@ GLOBAL_LIST_EMPTY(bodycontainers) //Let them act as spawnpoints for revenants an if(ismob(AM) && !isliving(AM)) continue AM.forceMove(src) - update_icon() + update_appearance(updates = ALL) /obj/structure/bodycontainer/get_remote_view_fullscreens(mob/user) if(user.stat == DEAD || !(user.sight & (SEEOBJS|SEEMOBS))) @@ -173,7 +171,8 @@ GLOBAL_LIST_EMPTY(bodycontainers) //Let them act as spawnpoints for revenants an beeper = !beeper to_chat(user, span_notice("You turn the speaker function [beeper ? "on" : "off"].")) -/obj/structure/bodycontainer/morgue/update_icon() +/obj/structure/bodycontainer/morgue/update_appearance(updates = ALL) + . = ..() if (!connected || connected.loc != src) // Open or tray is gone. icon_state = "morgue0" else @@ -232,7 +231,8 @@ GLOBAL_LIST_EMPTY(crematoriums) connected = new /obj/structure/tray/c_tray(src) connected.connected = src -/obj/structure/bodycontainer/crematorium/update_icon() +/obj/structure/bodycontainer/crematorium/update_appearance(updates = ALL) + . = ..() if(!connected || connected.loc != src) icon_state = "crema0" else @@ -260,7 +260,7 @@ GLOBAL_LIST_EMPTY(crematoriums) else audible_message(span_italics("You hear a roar as the crematorium fires up.")) locked = TRUE - update_icon() + update_appearance(updates = ALL) cremate_timer = addtimer(CALLBACK(src, PROC_REF(finish_cremate), user), (breakout_time + cremate_time ), TIMER_STOPPABLE) @@ -271,7 +271,7 @@ GLOBAL_LIST_EMPTY(crematoriums) playsound(src.loc, 'sound/machines/ding.ogg', 50, 1) //you horrible people deltimer(cremate_timer) cremate_timer = null - update_icon() + update_appearance(updates = ALL) /obj/structure/bodycontainer/crematorium/proc/finish_cremate(mob/user) var/list/conts = get_all_contents() - src - connected @@ -327,7 +327,7 @@ GLOBAL_LIST_EMPTY(crematoriums) if(!QDELETED(src)) locked = FALSE - update_icon() + update_appearance(updates = ALL) playsound(src.loc, 'sound/machines/ding.ogg', 50, 1) //you horrible people /obj/structure/bodycontainer/crematorium/creamatorium @@ -362,7 +362,7 @@ GLOBAL_LIST_EMPTY(crematoriums) /obj/structure/tray/Destroy() if(connected) connected.connected = null - connected.update_icon() + connected.update_appearance(updates = ALL) connected = null return ..() diff --git a/code/game/objects/structures/safe.dm b/code/game/objects/structures/safe.dm index 8913505ecbf4..6a47c8bb1423 100644 --- a/code/game/objects/structures/safe.dm +++ b/code/game/objects/structures/safe.dm @@ -56,7 +56,8 @@ FLOOR SAFES space += I.w_class I.forceMove(src) -/obj/structure/safe/update_icon() +/obj/structure/safe/update_appearance(updates = ALL) + . = ..() if(open) icon_state = "[initial(icon_state)]-open" else @@ -147,7 +148,7 @@ FLOOR SAFES return to_chat(user, span_notice("You [open ? "close" : "open"] [src].")) open = !open - update_icon() + update_appearance(updates = ALL) return TRUE if("turnright") if(open) diff --git a/code/game/objects/structures/shower.dm b/code/game/objects/structures/shower.dm index 5f691e267775..24aa76832ff0 100644 --- a/code/game/objects/structures/shower.dm +++ b/code/game/objects/structures/shower.dm @@ -29,7 +29,7 @@ /obj/machinery/shower/interact(mob/M) on = !on - update_icon() + update_appearance(updates = ALL) handle_mist() add_fingerprint(M) if(on) @@ -69,7 +69,7 @@ . = ..() . += span_notice("You can alt-click to change the temperature.") -/obj/machinery/shower/update_icon() +/obj/machinery/shower/update_appearance(updates = ALL) . = ..() cut_overlays() if(on) diff --git a/code/game/objects/structures/signs/signs_interactive.dm b/code/game/objects/structures/signs/signs_interactive.dm index 589f1e251033..2d7b63f40534 100644 --- a/code/game/objects/structures/signs/signs_interactive.dm +++ b/code/game/objects/structures/signs/signs_interactive.dm @@ -18,20 +18,20 @@ GLOBAL_LIST_EMPTY(map_delamination_counters) /obj/structure/sign/delamination_counter/proc/update_count(new_count) since_last = min(new_count, 99) - update_icon() + update_appearance(UPDATE_ICON) -/obj/structure/sign/delamination_counter/update_icon() - cut_overlays() +/obj/structure/sign/delamination_counter/update_overlays() + . = ..() var/ones = since_last % 10 var/mutable_appearance/ones_overlay = mutable_appearance('icons/obj/decals.dmi', "days_[ones]") ones_overlay.pixel_x = 4 - add_overlay(ones_overlay) + . += ones_overlay var/tens = (since_last / 10) % 10 var/mutable_appearance/tens_overlay = mutable_appearance('icons/obj/decals.dmi', "days_[tens]") tens_overlay.pixel_x = -5 - add_overlay(tens_overlay) + . += tens_overlay /obj/structure/sign/delamination_counter/examine(mob/user) . = ..() diff --git a/code/game/objects/structures/stairs.dm b/code/game/objects/structures/stairs.dm index 40e2517985d8..3b25ba231e01 100644 --- a/code/game/objects/structures/stairs.dm +++ b/code/game/objects/structures/stairs.dm @@ -34,12 +34,12 @@ update_surrounding() /obj/structure/stairs/proc/update_surrounding() - update_icon() + update_appearance(updates = ALL) for(var/i in GLOB.cardinals) var/turf/T = get_step(get_turf(src), i) var/obj/structure/stairs/S = locate() in T if(S) - S.update_icon() + S.update_appearance(updates = ALL) /obj/structure/stairs/Uncross(atom/movable/AM, atom/newloc) if(!newloc || !AM) @@ -54,7 +54,8 @@ return FALSE return ..() -/obj/structure/stairs/update_icon() +/obj/structure/stairs/update_appearance(updates = ALL) + . = ..() if(isTerminator()) icon_state = "stairs_t" else diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index e8e0eee656b0..7fa74a74bb3e 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -76,7 +76,8 @@ /obj/structure/table/proc/deconstruction_hints(mob/user) return span_notice("The top is screwed on, but the main bolts are also visible.") -/obj/structure/table/update_icon() +/obj/structure/table/update_appearance(updates = ALL) + . = ..() if(smooth) queue_smooth(src) queue_smooth_neighbors(src) diff --git a/code/game/objects/structures/tank_dispenser.dm b/code/game/objects/structures/tank_dispenser.dm index d2b91fa512e7..9beef0f2ea83 100644 --- a/code/game/objects/structures/tank_dispenser.dm +++ b/code/game/objects/structures/tank_dispenser.dm @@ -23,9 +23,10 @@ new /obj/item/tank/internals/oxygen(src) for(var/i in 1 to plasmatanks) new /obj/item/tank/internals/plasma(src) - update_icon() + update_appearance(updates = ALL) -/obj/structure/tank_dispenser/update_icon() +/obj/structure/tank_dispenser/update_appearance(updates = ALL) + . = ..() cut_overlays() switch(oxygentanks) if(1 to 3) @@ -69,7 +70,7 @@ if(!user.transferItemToLoc(I, src)) return to_chat(user, span_notice("You put [I] in [src].")) - update_icon() + update_appearance(updates = ALL) /obj/structure/tank_dispenser/ui_state(mob/user) return GLOB.physical_state @@ -109,7 +110,7 @@ usr.put_in_hands(tank) oxygentanks-- . = TRUE - update_icon() + update_appearance(updates = ALL) /obj/structure/tank_dispenser/deconstruct(disassembled = TRUE) diff --git a/code/game/objects/structures/transit_tubes/station.dm b/code/game/objects/structures/transit_tubes/station.dm index 55a4f827e09a..50e89b5c148d 100644 --- a/code/game/objects/structures/transit_tubes/station.dm +++ b/code/game/objects/structures/transit_tubes/station.dm @@ -38,7 +38,7 @@ for(var/obj/structure/transit_tube_pod/pod in loc) if(!pod.moving && !pod.cargo) AM.forceMove(pod) - pod.update_icon() + pod.update_appearance(updates = ALL) return @@ -152,7 +152,7 @@ continue S.forceMove(pod) playsound(src, 'sound/mecha/mechturn.ogg', 25 ,1) - pod.update_icon() + pod.update_appearance(updates = ALL) sleep(SleepTime) if(open_status == STATION_TUBE_CLOSED && pod && pod.loc == loc) pod.follow_tube() diff --git a/code/game/objects/structures/transit_tubes/transit_tube_cargo_pod.dm b/code/game/objects/structures/transit_tubes/transit_tube_cargo_pod.dm index 363e07b906eb..ef6a0d40c5e3 100644 --- a/code/game/objects/structures/transit_tubes/transit_tube_cargo_pod.dm +++ b/code/game/objects/structures/transit_tubes/transit_tube_cargo_pod.dm @@ -4,7 +4,8 @@ cargo = TRUE name = "transit tube cargo pod" -/obj/structure/transit_tube_pod/cargo/update_icon() +/obj/structure/transit_tube_pod/cargo/update_appearance(updates = ALL) + . = ..() if(contents.len) icon_state = "pod_cargo_occupied" else diff --git a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm index 99e985c417c3..4aa98fb62bfa 100644 --- a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm +++ b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm @@ -19,7 +19,8 @@ empty_pod() return ..() -/obj/structure/transit_tube_pod/update_icon() +/obj/structure/transit_tube_pod/update_appearance(updates = ALL) + . = ..() if(contents.len) icon_state = "pod_occupied" else @@ -88,7 +89,7 @@ location = get_turf(src) for(var/atom/movable/M in contents) M.forceMove(location) - update_icon() + update_appearance(updates = ALL) /obj/structure/transit_tube_pod/Process_Spacemove() if(moving) //No drifting while moving in the tubes @@ -176,7 +177,7 @@ if(direction == turn(station.boarding_dir,180)) if(station.open_status == STATION_TUBE_OPEN) mob.forceMove(loc) - update_icon() + update_appearance(updates = ALL) else station.open_animation() diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index d1c3f214b08d..911dced2f7d7 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -14,7 +14,7 @@ /obj/structure/toilet/Initialize(mapload) . = ..() open = round(rand(0, 1)) - update_icon() + update_appearance(updates = ALL) /obj/structure/toilet/attack_hand(mob/living/user) @@ -67,10 +67,11 @@ w_items -= I.w_class else open = !open - update_icon() + update_appearance(updates = ALL) -/obj/structure/toilet/update_icon() +/obj/structure/toilet/update_appearance(updates = ALL) + . = ..() icon_state = "toilet[open][cistern]" @@ -81,7 +82,7 @@ if(I.use_tool(src, user, 30)) user.visible_message("[user] [cistern ? "replaces the lid on the cistern" : "lifts the lid off the cistern"]!", span_notice("You [cistern ? "replace the lid on the cistern" : "lift the lid off the cistern"]!"), span_italics("You hear grinding porcelain.")) cistern = !cistern - update_icon() + update_appearance(updates = ALL) else if(cistern) if(user.a_intent != INTENT_HARM) @@ -392,9 +393,10 @@ /obj/structure/curtain/proc/toggle() open = !open - update_icon() + update_appearance(updates = ALL) -/obj/structure/curtain/update_icon() +/obj/structure/curtain/update_appearance(updates = ALL) + . = ..() if(!open) icon_state = "closed" layer = WALL_OBJ_LAYER diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm index f96d2a764bc1..5d4170c98cb9 100644 --- a/code/game/objects/structures/windoor_assembly.dm +++ b/code/game/objects/structures/windoor_assembly.dm @@ -47,7 +47,8 @@ setDir(ini_dir) move_update_air(T) -/obj/structure/windoor_assembly/update_icon() +/obj/structure/windoor_assembly/update_appearance(updates = ALL) + . = ..() icon_state = "[facing]_[secure ? "secure_" : ""]windoor_assembly[state]" /obj/structure/windoor_assembly/CanAllowThrough(atom/movable/mover, turf/target) @@ -309,7 +310,7 @@ return ..() //Update to reflect changes(if applicable) - update_icon() + update_appearance(updates = ALL) @@ -339,7 +340,7 @@ /obj/structure/windoor_assembly/proc/after_rotation(mob/user) ini_dir = dir - update_icon() + update_appearance(updates = ALL) //Flips the windoor assembly, determines whather the door opens to the left or the right /obj/structure/windoor_assembly/verb/flip() @@ -361,5 +362,5 @@ facing = "l" to_chat(usr, span_notice("The windoor will now slide to the left.")) - update_icon() + update_appearance(updates = ALL) return diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index a1efbe1afd29..27df59aaffdd 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -326,12 +326,13 @@ //This proc is used to update the icons of nearby windows. /obj/structure/window/proc/update_nearby_icons() - update_icon() + update_appearance(updates = ALL) if(smooth) queue_smooth_neighbors(src) //merges adjacent full-tile windows into one -/obj/structure/window/update_icon() +/obj/structure/window/update_appearance(updates = ALL) + . = ..() if(!QDELETED(src)) if(!fulltile) return @@ -807,7 +808,7 @@ /obj/structure/window/reinforced/clockwork/ratvar_act() if(GLOB.ratvar_awakens) obj_integrity = max_integrity - update_icon() + update_appearance(updates = ALL) /obj/structure/window/reinforced/clockwork/narsie_act() take_damage(rand(25, 75), BRUTE) @@ -873,7 +874,7 @@ /obj/structure/window/paperframe/Initialize(mapload) . = ..() - update_icon() + update_appearance(updates = ALL) /obj/structure/window/paperframe/examine(mob/user) . = ..() @@ -899,19 +900,19 @@ playsound(src, hitsound, 50, 1) if(!QDELETED(src)) user.visible_message(span_danger("[user] tears a hole in [src].")) - update_icon() + update_appearance(updates = ALL) -/obj/structure/window/paperframe/update_icon() - if(obj_integrity < max_integrity) - cut_overlay(paper) - add_overlay(torn) - set_opacity(FALSE) - else - cut_overlay(torn) - add_overlay(paper) - set_opacity(TRUE) +/obj/structure/window/paperframe/update_appearance(updates) + . = ..() + set_opacity(obj_integrity >= max_integrity) + +/obj/structure/window/paperframe/update_icon(updates = ALL) + . = ..() queue_smooth(src) +/obj/structure/window/paperframe/update_overlays() + . = ..() + . += (obj_integrity < max_integrity) ? torn : paper /obj/structure/window/paperframe/attackby(obj/item/W, mob/user) if(W.is_hot()) @@ -926,10 +927,10 @@ qdel(W) user.visible_message("[user] patches some of the holes in \the [src].") if(obj_integrity == max_integrity) - update_icon() + update_appearance(updates = ALL) return ..() - update_icon() + update_appearance(updates = ALL) @@ -950,9 +951,10 @@ /obj/structure/cloth_curtain/proc/toggle() open = !open - update_icon() + update_appearance(updates = ALL) -/obj/structure/cloth_curtain/update_icon() +/obj/structure/cloth_curtain/update_appearance(updates = ALL) + . = ..() if(!open) icon_state = "curtain_closed" layer = WALL_OBJ_LAYER diff --git a/code/game/turfs/open.dm b/code/game/turfs/open.dm index 8a361f3306a9..bf7359fe14c4 100644 --- a/code/game/turfs/open.dm +++ b/code/game/turfs/open.dm @@ -317,7 +317,7 @@ /turf/open/floor/grass/fairy/Initialize(mapload) . = ..() icon_state = "fairygrass[rand(1,4)]" - update_icon() + update_appearance(updates = ALL) /turf/open/indestructible/boss //you put stone tiles on this and use it as a base name = "necropolis floor" diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index 64fe6c622ee7..ea45a43bb7cb 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -116,8 +116,8 @@ return /turf/open/floor/update_icon() + . = ..() update_visuals() - return 1 /turf/open/floor/attack_paw(mob/user) return attack_hand(user) @@ -164,7 +164,7 @@ W.icon_regular_floor = old_icon W.icon_state_regular_floor = old_icon_state W.setDir(old_dir) - W.update_icon() + W.update_appearance(updates = ALL) return W /turf/open/floor/attackby(obj/item/C, mob/user, params) @@ -285,7 +285,7 @@ new_window.req_one_access = the_rcd.airlock_electronics.one_access new_window.unres_sides = the_rcd.airlock_electronics.unres_sides new_window.autoclose = TRUE - new_window.update_icon() + new_window.update_appearance(updates = ALL) return TRUE to_chat(user, span_notice("You build an airlock.")) var/obj/machinery/door/airlock/new_airlock = new the_rcd.airlock_type(src) @@ -304,7 +304,7 @@ if(new_airlock.electronics.unres_sides) new_airlock.unres_sides = new_airlock.electronics.unres_sides new_airlock.autoclose = TRUE - new_airlock.update_icon() + new_airlock.update_appearance(updates = ALL) return TRUE if(RCD_DECONSTRUCT) diff --git a/code/game/turfs/simulated/floor/fancy_floor.dm b/code/game/turfs/simulated/floor/fancy_floor.dm index 3ae163c2e448..d8f74784169e 100644 --- a/code/game/turfs/simulated/floor/fancy_floor.dm +++ b/code/game/turfs/simulated/floor/fancy_floor.dm @@ -197,7 +197,7 @@ . = ..() if(src.type == /turf/open/floor/grass) //don't want grass subtypes getting the icon state, icon_state = "grass[rand(1,4)]" - update_icon() + update_appearance(updates = ALL) /turf/open/floor/grass/attackby(obj/item/C, mob/user, params) if((C.tool_behaviour == TOOL_SHOVEL) && params) @@ -293,9 +293,10 @@ /turf/open/floor/carpet/Initialize(mapload) . = ..() - update_icon() + update_appearance(updates = ALL) -/turf/open/floor/carpet/update_icon() +/turf/open/floor/carpet/update_appearance(updates = ALL) + . = ..() if(!..()) return 0 if(!broken && !burnt) @@ -402,11 +403,11 @@ /turf/open/floor/carpet/break_tile() broken = TRUE - update_icon() + update_appearance(updates = ALL) /turf/open/floor/carpet/burn_tile() burnt = TRUE - update_icon() + update_appearance(updates = ALL) /turf/open/floor/carpet/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir) return FALSE diff --git a/code/game/turfs/simulated/floor/light_floor.dm b/code/game/turfs/simulated/floor/light_floor.dm index 75b94e76ea9c..096f44898e63 100644 --- a/code/game/turfs/simulated/floor/light_floor.dm +++ b/code/game/turfs/simulated/floor/light_floor.dm @@ -34,7 +34,7 @@ /turf/open/floor/light/Initialize(mapload) . = ..() - update_icon() + update_appearance(updates = ALL) if(!length(lighttile_designs)) populate_lighttile_designs() @@ -43,8 +43,8 @@ light_range = 0 update_light() -/turf/open/floor/light/update_icon() - ..() +/turf/open/floor/light/update_appearance(updates = ALL) + . = ..() if(on) switch(state) if(0) @@ -79,7 +79,7 @@ if(!choice) return FALSE currentcolor = choice - update_icon() + update_appearance(updates = ALL) /turf/open/floor/light/attack_ai(mob/user) if(!can_modify_colour) @@ -88,7 +88,7 @@ if(!choice) return FALSE currentcolor = choice - update_icon() + update_appearance(updates = ALL) return attack_hand(user) /turf/open/floor/light/attackby(obj/item/C, mob/user, params) @@ -98,7 +98,7 @@ if(state && user.temporarilyRemoveItemFromInventory(C)) qdel(C) state = 0 //fixing it by bashing it with a light bulb, fun eh? - update_icon() + update_appearance(updates = ALL) to_chat(user, span_notice("You replace the light bulb.")) else to_chat(user, span_notice("The light bulb seems fine, no need to replace it.")) diff --git a/code/game/turfs/simulated/floor/mineral_floor.dm b/code/game/turfs/simulated/floor/mineral_floor.dm index d575fdfb7347..9ce69e08083b 100644 --- a/code/game/turfs/simulated/floor/mineral_floor.dm +++ b/code/game/turfs/simulated/floor/mineral_floor.dm @@ -23,7 +23,8 @@ icons = typelist("icons", icons) -/turf/open/floor/mineral/update_icon() +/turf/open/floor/mineral/update_appearance(updates = ALL) + . = ..() if(!..()) return 0 if(!broken && !burnt) diff --git a/code/game/turfs/simulated/floor/misc_floor.dm b/code/game/turfs/simulated/floor/misc_floor.dm index 69254b140a13..e1346b073418 100644 --- a/code/game/turfs/simulated/floor/misc_floor.dm +++ b/code/game/turfs/simulated/floor/misc_floor.dm @@ -20,14 +20,15 @@ /turf/open/floor/circuit/Initialize(mapload) SSmapping.nuke_tiles += src - update_icon() + update_appearance(updates = ALL) . = ..() /turf/open/floor/circuit/Destroy() SSmapping.nuke_tiles -= src return ..() -/turf/open/floor/circuit/update_icon() +/turf/open/floor/circuit/update_appearance(updates = ALL) + . = ..() if(on) if(LAZYLEN(SSmapping.nuke_threats)) icon_state = "rcircuitanim" diff --git a/code/game/turfs/simulated/floor/plasteel_floor.dm b/code/game/turfs/simulated/floor/plasteel_floor.dm index e3150da9027d..f4fbbe00c59c 100644 --- a/code/game/turfs/simulated/floor/plasteel_floor.dm +++ b/code/game/turfs/simulated/floor/plasteel_floor.dm @@ -13,7 +13,8 @@ new /obj/effect/glowing_rune(src) ChangeTurf(/turf/open/floor/plating/rust) -/turf/open/floor/plasteel/update_icon() +/turf/open/floor/plasteel/update_appearance(updates = ALL) + . = ..() if(!..()) return 0 if(!broken && !burnt) diff --git a/code/game/turfs/simulated/floor/plating.dm b/code/game/turfs/simulated/floor/plating.dm index a4907cbc81de..9aa6b2f19443 100644 --- a/code/game/turfs/simulated/floor/plating.dm +++ b/code/game/turfs/simulated/floor/plating.dm @@ -44,7 +44,8 @@ else icon_plating = initial(icon_state) -/turf/open/floor/plating/update_icon() +/turf/open/floor/plating/update_appearance(updates = ALL) + . = ..() if(!..()) return if(!broken && !burnt) diff --git a/code/game/turfs/simulated/minerals.dm b/code/game/turfs/simulated/minerals.dm index e092293e435a..7ada3ecffa3b 100644 --- a/code/game/turfs/simulated/minerals.dm +++ b/code/game/turfs/simulated/minerals.dm @@ -93,9 +93,10 @@ if(hardness <= 0) gets_drilled(user,triggered_by_explosion) else - update_icon() + update_appearance(updates = ALL) -/turf/closed/mineral/update_icon() +/turf/closed/mineral/update_appearance(updates = ALL) + . = ..() if(hardness != initial(hardness)) var/mutable_appearance/cracks = mutable_appearance('icons/turf/mining.dmi',"rock_cracks",ON_EDGED_TURF_LAYER) var/matrix/M = new diff --git a/code/game/turfs/simulated/wall/reinf_walls.dm b/code/game/turfs/simulated/wall/reinf_walls.dm index 5b87b9094dfd..eea5255b0c31 100644 --- a/code/game/turfs/simulated/wall/reinf_walls.dm +++ b/code/game/turfs/simulated/wall/reinf_walls.dm @@ -55,7 +55,7 @@ if(W.tool_behaviour == TOOL_WIRECUTTER) W.play_tool_sound(src, 100) d_state = SUPPORT_LINES - update_icon() + update_appearance(updates = ALL) to_chat(user, span_notice("You cut the outer grille.")) return 1 @@ -66,14 +66,14 @@ if(!istype(src, /turf/closed/wall/r_wall) || d_state != SUPPORT_LINES) return 1 d_state = COVER - update_icon() + update_appearance(updates = ALL) to_chat(user, span_notice("You unsecure the support lines.")) return 1 else if(W.tool_behaviour == TOOL_WIRECUTTER) W.play_tool_sound(src, 100) d_state = INTACT - update_icon() + update_appearance(updates = ALL) to_chat(user, span_notice("You repair the outer grille.")) return 1 @@ -86,7 +86,7 @@ if(!istype(src, /turf/closed/wall/r_wall) || d_state != COVER) return 1 d_state = CUT_COVER - update_icon() + update_appearance(updates = ALL) to_chat(user, span_notice("You press firmly on the cover, dislodging it.")) return 1 @@ -96,7 +96,7 @@ if(!istype(src, /turf/closed/wall/r_wall) || d_state != COVER) return 1 d_state = SUPPORT_LINES - update_icon() + update_appearance(updates = ALL) to_chat(user, span_notice("The support lines have been secured.")) return 1 @@ -107,7 +107,7 @@ if(!istype(src, /turf/closed/wall/r_wall) || d_state != CUT_COVER) return 1 d_state = ANCHOR_BOLTS - update_icon() + update_appearance(updates = ALL) to_chat(user, span_notice("You pry off the cover.")) return 1 @@ -119,7 +119,7 @@ if(!istype(src, /turf/closed/wall/r_wall) || d_state != CUT_COVER) return TRUE d_state = COVER - update_icon() + update_appearance(updates = ALL) to_chat(user, span_notice("The metal cover has been welded securely to the frame.")) return 1 @@ -130,7 +130,7 @@ if(!istype(src, /turf/closed/wall/r_wall) || d_state != ANCHOR_BOLTS) return 1 d_state = SUPPORT_RODS - update_icon() + update_appearance(updates = ALL) to_chat(user, span_notice("You remove the bolts anchoring the support rods.")) return 1 @@ -140,7 +140,7 @@ if(!istype(src, /turf/closed/wall/r_wall) || d_state != ANCHOR_BOLTS) return 1 d_state = CUT_COVER - update_icon() + update_appearance(updates = ALL) to_chat(user, span_notice("The metal cover has been pried back into place.")) return 1 @@ -153,7 +153,7 @@ if(!istype(src, /turf/closed/wall/r_wall) || d_state != SUPPORT_RODS) return 1 d_state = SHEATH - update_icon() + update_appearance(updates = ALL) to_chat(user, span_notice("You slice through the support rods.")) return 1 @@ -164,7 +164,7 @@ if(!istype(src, /turf/closed/wall/r_wall) || d_state != SUPPORT_RODS) return 1 d_state = ANCHOR_BOLTS - update_icon() + update_appearance(updates = ALL) to_chat(user, span_notice("You tighten the bolts anchoring the support rods.")) return 1 @@ -186,12 +186,13 @@ if(!istype(src, /turf/closed/wall/r_wall) || d_state != SHEATH) return TRUE d_state = SUPPORT_RODS - update_icon() + update_appearance(updates = ALL) to_chat(user, span_notice("You weld the support rods back together.")) return 1 return 0 -/turf/closed/wall/r_wall/update_icon() +/turf/closed/wall/r_wall/update_appearance(updates = ALL) + . = ..() if(d_state != INTACT) smooth = SMOOTH_FALSE clear_smooth_overlays() diff --git a/code/game/turfs/space/transit.dm b/code/game/turfs/space/transit.dm index fbd722e33640..e619e898b3fc 100644 --- a/code/game/turfs/space/transit.dm +++ b/code/game/turfs/space/transit.dm @@ -8,7 +8,7 @@ /turf/open/space/transit/Initialize(mapload) . = ..() - update_icon() + update_appearance(updates = ALL) RegisterSignal(src, COMSIG_TURF_RESERVATION_RELEASED, PROC_REF(launch_contents)) /turf/open/space/transit/Destroy() @@ -67,7 +67,8 @@ /turf/open/space/transit/east dir = EAST -/turf/open/space/transit/update_icon() +/turf/open/space/transit/update_appearance(updates = ALL) + . = ..() icon_state = "speedspace_ns_[get_transit_state(src)]" transform = turn(matrix(), get_transit_angle(src)) diff --git a/code/modules/NTNet/relays.dm b/code/modules/NTNet/relays.dm index edaf2ed31fe9..9fc7fae6473e 100644 --- a/code/modules/NTNet/relays.dm +++ b/code/modules/NTNet/relays.dm @@ -32,7 +32,8 @@ return FALSE return TRUE -/obj/machinery/ntnet_relay/update_icon() +/obj/machinery/ntnet_relay/update_appearance(updates = ALL) + . = ..() cut_overlays() if(is_operational()) var/mutable_appearance/on_overlay = mutable_appearance(icon, "[initial(icon_state)]_on") @@ -49,7 +50,7 @@ else use_power = IDLE_POWER_USE - update_icon() + update_appearance(updates = ALL) if(dos_overload > 0) dos_overload = max(0, dos_overload - dos_dissipate * delta_time) @@ -57,12 +58,12 @@ // If DoS traffic exceeded capacity, crash. if((dos_overload > dos_capacity) && !dos_failure) dos_failure = 1 - update_icon() + update_appearance(updates = ALL) SSnetworks.station_network.add_log("Quantum relay switched from normal operation mode to overload recovery mode.") // If the DoS buffer reaches 0 again, restart. if((dos_overload == 0) && dos_failure) dos_failure = 0 - update_icon() + update_appearance(updates = ALL) SSnetworks.station_network.add_log("Quantum relay switched from overload recovery mode to normal operation mode.") ..() @@ -89,13 +90,13 @@ if("restart") dos_overload = 0 dos_failure = 0 - update_icon() + update_appearance(updates = ALL) SSnetworks.station_network.add_log("Quantum relay manually restarted from overload recovery mode to normal operation mode.") return TRUE if("toggle") enabled = !enabled SSnetworks.station_network.add_log("Quantum relay manually [enabled ? "enabled" : "disabled"].") - update_icon() + update_appearance(updates = ALL) return TRUE /obj/machinery/ntnet_relay/Initialize(mapload) diff --git a/code/modules/VR/vr_sleeper.dm b/code/modules/VR/vr_sleeper.dm index 154cbd61fd30..98cc19615109 100644 --- a/code/modules/VR/vr_sleeper.dm +++ b/code/modules/VR/vr_sleeper.dm @@ -22,7 +22,7 @@ sparks = new /datum/effect_system/spark_spread() sparks.set_up(2,0) sparks.attach(src) - update_icon() + update_appearance(updates = ALL) /obj/machinery/vr_sleeper/attackby(obj/item/I, mob/user, params) if(!state_open && !occupant) @@ -61,7 +61,8 @@ sparks.start() addtimer(CALLBACK(src, PROC_REF(emagNotify)), 150) -/obj/machinery/vr_sleeper/update_icon() +/obj/machinery/vr_sleeper/update_appearance(updates = ALL) + . = ..() icon_state = "[initial(icon_state)][state_open ? "-open" : ""]" /obj/machinery/vr_sleeper/open_machine() diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 57f6fbf87d68..3e86d2e55447 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1397,7 +1397,7 @@ var/obj/item/reagent_containers/food/snacks/cookie/cookie = new(H) if(H.put_in_hands(cookie)) // They have hands and can use them to hold cookies - H.update_inv_hands() + H.update_held_items() log_admin("[key_name(H)] got their cookie in-hand, spawned by [key_name(src.owner)].") message_admins("[key_name(H)] got their cookie in-hand, spawned by [key_name(src.owner)].") else // They do not have hands available, for some reason diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 1e05e75f80c2..6357aa54e44d 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -457,7 +457,7 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention) var/obj/item/storage/wallet/W = worn W.front_id = id id.forceMove(W) - W.update_icon() + W.update_appearance(updates = ALL) else H.equip_to_slot(id,ITEM_SLOT_ID) else if(isanimal(M)) @@ -848,7 +848,7 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention) F.anchored = TRUE F.warming_up = 3 F.start_fields() - F.update_icon() + F.update_appearance(updates = ALL) spawn(30) for(var/obj/machinery/the_singularitygen/G in GLOB.machines) diff --git a/code/modules/admin/verbs/manipulate_organs.dm b/code/modules/admin/verbs/manipulate_organs.dm index 92eacb7af34b..67b29052c24e 100644 --- a/code/modules/admin/verbs/manipulate_organs.dm +++ b/code/modules/admin/verbs/manipulate_organs.dm @@ -71,4 +71,4 @@ var/obj/item/implantcase/case = new(get_turf(C)) case.imp = I I.forceMove(case) - case.update_icon() + case.update_appearance(updates = ALL) diff --git a/code/modules/antagonists/_common/antag_hud.dm b/code/modules/antagonists/_common/antag_hud.dm index 9fcca9388dbf..98c35ef20fd8 100644 --- a/code/modules/antagonists/_common/antag_hud.dm +++ b/code/modules/antagonists/_common/antag_hud.dm @@ -54,7 +54,7 @@ GLOBAL_LIST_EMPTY_TYPED(has_antagonist_huds, /datum/atom_hud/alternate_appearanc /datum/atom_hud/alternate_appearance/basic/antagonist_hud/process(delta_time) index += 1 - update_icon() + update_appearance() /datum/atom_hud/alternate_appearance/basic/antagonist_hud/proc/check_processing() if (antag_hud_images.len > 1 && !(DF_ISPROCESSING in datum_flags)) @@ -77,7 +77,7 @@ GLOBAL_LIST_EMPTY_TYPED(has_antagonist_huds, /datum/atom_hud/alternate_appearanc return final_antag_hud_images -/datum/atom_hud/alternate_appearance/basic/antagonist_hud/proc/update_icon() +/datum/atom_hud/alternate_appearance/basic/antagonist_hud/proc/update_appearance() if (antag_hud_images.len == 0) image.icon = icon('icons/blanks/32x32.dmi', "nothing") else @@ -88,5 +88,5 @@ GLOBAL_LIST_EMPTY_TYPED(has_antagonist_huds, /datum/atom_hud/alternate_appearanc antag_hud_images = get_antag_hud_images(source) index = clamp(index, 1, antag_hud_images.len) - update_icon() + update_appearance() check_processing() diff --git a/code/modules/antagonists/abductor/equipment/abduction_gear.dm b/code/modules/antagonists/abductor/equipment/abduction_gear.dm index 567636e03180..db71a730d399 100644 --- a/code/modules/antagonists/abductor/equipment/abduction_gear.dm +++ b/code/modules/antagonists/abductor/equipment/abduction_gear.dm @@ -74,7 +74,7 @@ M.icon_state = disguise.icon_state M.cut_overlays() M.add_overlay(disguise.overlays) - M.update_inv_hands() + M.update_held_items() /obj/item/clothing/suit/armor/abductor/vest/proc/DeactivateStealth() if(!stealth_active) @@ -405,8 +405,9 @@
    Congratulations! You are now trained for invasive xenobiology research!"} -/obj/item/paper/guides/antag/abductor/update_icon() - return +/obj/item/paper/guides/antag/abductor/Initialize(mapload) + AddElement(/datum/element/update_icon_blocker) + return ..() /obj/item/paper/guides/antag/abductor/AltClick() return //otherwise it would fold into a paperplane. @@ -442,9 +443,10 @@ Congratulations! You are now trained for invasive xenobiology research!"} txt = "probing" to_chat(usr, span_notice("You switch the baton to [txt] mode.")) - update_icon() + update_appearance(updates = ALL) -/obj/item/abductor/baton/update_icon() +/obj/item/abductor/baton/update_appearance(updates = ALL) + . = ..() switch(mode) if(BATON_STUN) icon_state = "wonderprodStun" diff --git a/code/modules/antagonists/abductor/equipment/gland.dm b/code/modules/antagonists/abductor/equipment/gland.dm index 74fd4e93cdff..186fd79befc2 100644 --- a/code/modules/antagonists/abductor/equipment/gland.dm +++ b/code/modules/antagonists/abductor/equipment/gland.dm @@ -18,6 +18,7 @@ var/active_mind_control = FALSE /obj/item/organ/heart/gland/Initialize(mapload) + AddElement(/datum/element/update_icon_blocker) . = ..() icon_state = pick(list("health", "spider", "slime", "emp", "species", "egg", "vent", "mindshock", "viral")) @@ -49,9 +50,6 @@ holder.icon_state = "hudgland_ready" else holder.icon_state = "hudgland_spent" - -/obj/item/organ/heart/gland/update_icon() - return // stop it from switching to the non existent heart_on sprite /obj/item/organ/heart/gland/proc/mind_control(command, mob/living/user) if(!ownerCheck() || !mind_control_uses || active_mind_control) diff --git a/code/modules/antagonists/abductor/machinery/experiment.dm b/code/modules/antagonists/abductor/machinery/experiment.dm index af79d3d5e118..3161e519810b 100644 --- a/code/modules/antagonists/abductor/machinery/experiment.dm +++ b/code/modules/antagonists/abductor/machinery/experiment.dm @@ -183,7 +183,8 @@ SSjob.SendToLateJoin(H, FALSE) return -/obj/machinery/abductor/experiment/update_icon() +/obj/machinery/abductor/experiment/update_appearance(updates = ALL) + . = ..() if(state_open) icon_state = "experiment-open" else diff --git a/code/modules/antagonists/blob/blobstrains/_blobstrain.dm b/code/modules/antagonists/blob/blobstrains/_blobstrain.dm index fb81ebac4274..f1049e654c55 100644 --- a/code/modules/antagonists/blob/blobstrains/_blobstrain.dm +++ b/code/modules/antagonists/blob/blobstrains/_blobstrain.dm @@ -31,7 +31,7 @@ GLOBAL_LIST_INIT(valid_blobstrains, subtypesof(/datum/blobstrain) - list(/datum/ point_rate = point_rate * overmind.basemodifier for(var/BL in GLOB.blobs) var/obj/structure/blob/B = BL - B.update_icon() + B.update_appearance(updates = ALL) for(var/BLO in overmind.blob_mobs) var/mob/living/simple_animal/hostile/blob/BM = BLO BM.update_icons() //If it's getting a new strain, tell it what it does! diff --git a/code/modules/antagonists/blob/blobstrains/replicating_foam.dm b/code/modules/antagonists/blob/blobstrains/replicating_foam.dm index 73ffff293882..cd744c7af998 100644 --- a/code/modules/antagonists/blob/blobstrains/replicating_foam.dm +++ b/code/modules/antagonists/blob/blobstrains/replicating_foam.dm @@ -17,7 +17,7 @@ var/obj/structure/blob/newB = B.expand(null, null, 0) if(newB) newB.obj_integrity = B.obj_integrity - damage - newB.update_icon() + newB.update_appearance(updates = ALL) return ..() diff --git a/code/modules/antagonists/blob/overmind.dm b/code/modules/antagonists/blob/overmind.dm index eb3d55cdad08..63e3b613e61b 100644 --- a/code/modules/antagonists/blob/overmind.dm +++ b/code/modules/antagonists/blob/overmind.dm @@ -59,7 +59,7 @@ GLOBAL_LIST_EMPTY(blob_nodes) set_strain(BS) color = blobstrain.complementary_color if(blob_core) - blob_core.update_icon() + blob_core.update_appearance(updates = ALL) SSshuttle.registerHostileEnvironment(src) announcement_time = world.time + 6000 . = ..() @@ -180,7 +180,7 @@ GLOBAL_LIST_EMPTY(blob_nodes) var/obj/structure/blob/B = BL if(B && B.overmind == src) B.overmind = null - B.update_icon() //reset anything that was ours + B.update_appearance(updates = ALL) //reset anything that was ours for(var/BLO in blob_mobs) var/mob/living/simple_animal/hostile/blob/BM = BLO if(BM) diff --git a/code/modules/antagonists/blob/powers.dm b/code/modules/antagonists/blob/powers.dm index 2aa7516c5faf..dad35bc8ed9b 100644 --- a/code/modules/antagonists/blob/powers.dm +++ b/code/modules/antagonists/blob/powers.dm @@ -51,7 +51,7 @@ core.overmind = src blobs_legit += src blob_core = core - core.update_icon() + core.update_appearance(updates = ALL) update_health_hud() placed = 1 return 1 @@ -173,7 +173,7 @@ if(LAZYLEN(candidates)) //if we got at least one candidate, they're a blobbernaut now. B.max_integrity = initial(B.max_integrity) * 0.25 //factories that produced a blobbernaut have much lower health B.obj_integrity = min(B.obj_integrity, B.max_integrity) - B.update_icon() + B.update_appearance(updates = ALL) B.visible_message(span_warning("The blobbernaut [pick("rips", "tears", "shreds")] its way out of the factory blob!")) playsound(B.loc, 'sound/effects/splat.ogg', 50, 1) var/mob/living/simple_animal/hostile/blob/blobbernaut/blobber = new /mob/living/simple_animal/hostile/blob/blobbernaut(get_turf(B)) diff --git a/code/modules/antagonists/blob/structures/_blob.dm b/code/modules/antagonists/blob/structures/_blob.dm index 5482732d13b7..372486ad86d2 100644 --- a/code/modules/antagonists/blob/structures/_blob.dm +++ b/code/modules/antagonists/blob/structures/_blob.dm @@ -29,7 +29,7 @@ overmind.blobs_legit += src GLOB.blobs += src //Keep track of the blob in the normal list either way setDir(pick(GLOB.cardinals)) - update_icon() + update_appearance(updates = ALL) if(atmosblock) air_update_turf(1) ConsumeTile() @@ -82,7 +82,8 @@ var/atom/movable/mover = caller . = . || (mover.pass_flags & PASSBLOB) -/obj/structure/blob/update_icon() //Updates color based on overmind color if we have an overmind. +/obj/structure/blob/update_appearance(updates = ALL) + . = ..() //Updates color based on overmind color if we have an overmind. if(overmind) add_atom_colour(overmind.blobstrain.color, FIXED_COLOUR_PRIORITY) else @@ -103,7 +104,7 @@ var/obj/structure/blob/B = L if(!B.overmind && !istype(B, /obj/structure/blob/core) && prob(30)) B.overmind = pulsing_overmind //reclaim unclaimed, non-core blobs. - B.update_icon() + B.update_appearance(updates = ALL) var/distance = get_dist(get_turf(src), get_turf(B)) var/expand_probablity = max(20 - distance * 8, 1) if(B.Adjacent(src)) @@ -127,7 +128,7 @@ if(heal_timestamp <= world.time) obj_integrity = min(max_integrity, obj_integrity+health_regen) heal_timestamp = world.time + 20 - update_icon() + update_appearance(updates = ALL) pulse_timestamp = world.time + 10 return 1 //we did it, we were pulsed! return 0 //oh no we failed @@ -185,7 +186,7 @@ if(T.Enter(B,src)) //NOW we can attempt to move into the tile B.density = initial(B.density) B.forceMove(T) - B.update_icon() + B.update_appearance(updates = ALL) if(B.overmind && expand_reaction) B.overmind.blobstrain.expand_reaction(src, B, T, controller) return B @@ -289,7 +290,7 @@ /obj/structure/blob/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) . = ..() if(. && obj_integrity > 0) - update_icon() + update_appearance(updates = ALL) /obj/structure/blob/obj_destruction(damage_flag) if(overmind) @@ -301,7 +302,7 @@ CRASH("change_to(): invalid type for blob") var/obj/structure/blob/B = new type(src.loc, controller) B.creation_action() - B.update_icon() + B.update_appearance(updates = ALL) B.setDir(dir) qdel(src) return B @@ -344,8 +345,8 @@ return "Currently weak to brute damage." return "N/A" -/obj/structure/blob/normal/update_icon() - ..() +/obj/structure/blob/normal/update_appearance(updates = ALL) + . = ..() if(obj_integrity <= 15) icon_state = "blob_damaged" name = "fragile blob" diff --git a/code/modules/antagonists/blob/structures/core.dm b/code/modules/antagonists/blob/structures/core.dm index 1cecdc9f8e16..cc255fe9e6df 100644 --- a/code/modules/antagonists/blob/structures/core.dm +++ b/code/modules/antagonists/blob/structures/core.dm @@ -15,17 +15,18 @@ GLOB.blob_cores += src START_PROCESSING(SSobj, src) GLOB.poi_list |= src - update_icon() //so it atleast appears + update_appearance(updates = ALL) //so it atleast appears if(!placed && !overmind) return INITIALIZE_HINT_QDEL if(overmind) - update_icon() + update_appearance(updates = ALL) return ..() /obj/structure/blob/core/scannerreport() return "Directs the blob's expansion, gradually expands, and sustains nearby blob spores and blobbernauts." -/obj/structure/blob/core/update_icon() +/obj/structure/blob/core/update_appearance(updates = ALL) + . = ..() cut_overlays() color = null var/mutable_appearance/blob_overlay = mutable_appearance('icons/mob/blob.dmi', "blob") diff --git a/code/modules/antagonists/blob/structures/node.dm b/code/modules/antagonists/blob/structures/node.dm index f9c3b48eb84b..94e96ad43502 100644 --- a/code/modules/antagonists/blob/structures/node.dm +++ b/code/modules/antagonists/blob/structures/node.dm @@ -18,7 +18,8 @@ /obj/structure/blob/node/scannerreport() return "Gradually expands and sustains nearby blob spores and blobbernauts." -/obj/structure/blob/node/update_icon() +/obj/structure/blob/node/update_appearance(updates = ALL) + . = ..() cut_overlays() color = null var/mutable_appearance/blob_overlay = mutable_appearance('icons/mob/blob.dmi', "blob") diff --git a/code/modules/antagonists/blob/structures/shield.dm b/code/modules/antagonists/blob/structures/shield.dm index 0a21174326c4..1c80da669c48 100644 --- a/code/modules/antagonists/blob/structures/shield.dm +++ b/code/modules/antagonists/blob/structures/shield.dm @@ -19,8 +19,8 @@ /obj/structure/blob/shield/core point_return = 0 -/obj/structure/blob/shield/update_icon() - ..() +/obj/structure/blob/shield/update_appearance(updates = ALL) + . = ..() if(obj_integrity < max_integrity * 0.5) icon_state = "[initial(icon_state)]_damaged" name = "weakened [initial(name)]" diff --git a/code/modules/antagonists/bloodsuckers/bloodsuckers.dm b/code/modules/antagonists/bloodsuckers/bloodsuckers.dm index fcd04fefdcd1..03de29db0778 100644 --- a/code/modules/antagonists/bloodsuckers/bloodsuckers.dm +++ b/code/modules/antagonists/bloodsuckers/bloodsuckers.dm @@ -157,16 +157,13 @@ var/datum/hud/bloodsucker_hud = owner.current.hud_used - blood_display = new /atom/movable/screen/bloodsucker/blood_counter() - blood_display.hud = bloodsucker_hud + blood_display = new /atom/movable/screen/bloodsucker/blood_counter(bloodsucker_hud) bloodsucker_hud.infodisplay += blood_display - vamprank_display = new /atom/movable/screen/bloodsucker/rank_counter() - vamprank_display.hud = bloodsucker_hud + vamprank_display = new /atom/movable/screen/bloodsucker/rank_counter(bloodsucker_hud) bloodsucker_hud.infodisplay += vamprank_display - sunlight_display = new /atom/movable/screen/bloodsucker/sunlight_counter() - sunlight_display.hud = bloodsucker_hud + sunlight_display = new /atom/movable/screen/bloodsucker/sunlight_counter(bloodsucker_hud) bloodsucker_hud.infodisplay += sunlight_display INVOKE_ASYNC(bloodsucker_hud, TYPE_PROC_REF(/datum/hud/, show_hud), bloodsucker_hud.hud_version) diff --git a/code/modules/antagonists/bloodsuckers/powers/targeted/lasombra.dm b/code/modules/antagonists/bloodsuckers/powers/targeted/lasombra.dm index 450049b3ed12..6ce4cda367a1 100644 --- a/code/modules/antagonists/bloodsuckers/powers/targeted/lasombra.dm +++ b/code/modules/antagonists/bloodsuckers/powers/targeted/lasombra.dm @@ -78,7 +78,7 @@ if(istype(O, /obj/item/pda)) var/obj/item/pda/PDA = O PDA.set_light_on(FALSE) - PDA.update_icon() + PDA.update_appearance(updates = ALL) O.visible_message(span_danger("The light in [PDA] shorts out!")) else O.visible_message(span_danger("[O] is disintegrated by [src]!")) diff --git a/code/modules/antagonists/bloodsuckers/structures/bloodsucker_coffin.dm b/code/modules/antagonists/bloodsuckers/structures/bloodsucker_coffin.dm index fe9b83f2c7d6..dc96aa1b3ed3 100644 --- a/code/modules/antagonists/bloodsuckers/structures/bloodsucker_coffin.dm +++ b/code/modules/antagonists/bloodsuckers/structures/bloodsucker_coffin.dm @@ -162,7 +162,7 @@ if(user == resident) if(welded) welded = FALSE - update_icon() + update_appearance(updates = ALL) locked = FALSE return TRUE playsound(get_turf(src), 'sound/machines/door_locked.ogg', 20, 1) diff --git a/code/modules/antagonists/bloodsuckers/structures/bloodsucker_crypt.dm b/code/modules/antagonists/bloodsuckers/structures/bloodsucker_crypt.dm index c639c21c7b33..28c933a28272 100644 --- a/code/modules/antagonists/bloodsuckers/structures/bloodsucker_crypt.dm +++ b/code/modules/antagonists/bloodsuckers/structures/bloodsucker_crypt.dm @@ -316,7 +316,7 @@ return icon_state = initial(icon_state) + (awoken ? "_idle" : "_awaken") - update_icon() + update_appearance(updates = ALL) var/rankspent switch(bloodsuckerdatum.clanprogress) if(0) @@ -395,7 +395,8 @@ . = ..() anchored = FALSE -/obj/structure/bloodsucker/moldingstone/update_icon() +/obj/structure/bloodsucker/moldingstone/update_appearance(updates = ALL) + . = ..() cut_overlays() switch(metal) if(1 to 5) @@ -427,7 +428,7 @@ balloon_alert(user, "added [metal] metal") if(istype(I, /obj/item/bloodsucker/chisel)) start_sculpiting(user) - update_icon() + update_appearance(updates = ALL) /obj/structure/bloodsucker/moldingstone/proc/start_sculpiting(mob/living/artist) if(metal < 10) @@ -440,7 +441,7 @@ if(!do_after(artist, 10 SECONDS, src)) artist.balloon_alert(artist, "ruined!") metal -= rand(5, 10) - update_icon() + update_appearance(updates = ALL) return artist.balloon_alert(artist, "done, a masterpiece!") @@ -464,7 +465,7 @@ new /obj/item/stack/sheet/metal(get_turf(user), count) else to_chat(user, span_warning("There's no metal to retrieve in [src].")) - update_icon() + update_appearance(updates = ALL) #undef METALLIMIT /obj/structure/bloodsucker/bloodstatue @@ -710,7 +711,7 @@ playsound(loc, 'sound/effects/pop_expl.ogg', 25, 1) density = TRUE - update_icon() + update_appearance(updates = ALL) // Set up Torture stuff now convert_progress = 3 @@ -746,7 +747,7 @@ visible_message(span_danger("[buckled_mob][buckled_mob.stat == DEAD ? "'s corpse" : ""] slides off of the rack.")) density = FALSE buckled_mob.Paralyze(2 SECONDS) - update_icon() + update_appearance(updates = ALL) return TRUE /obj/structure/bloodsucker/vassalrack/attack_hand(mob/user, list/modifiers) @@ -807,10 +808,11 @@ smallmeat++ meat_amount = bigmeat + intermeat + mediummeat + smallmeat qdel(I) - update_icon() + update_appearance(updates = ALL) #undef MEATLIMIT -/obj/structure/bloodsucker/vassalrack/update_icon() +/obj/structure/bloodsucker/vassalrack/update_appearance(updates = ALL) + . = ..() cut_overlays() if(bigmeat) add_overlay("bigmeat_[bigmeat]") @@ -849,7 +851,7 @@ else to_chat(user, span_warning("There's no meat to retrieve in [src]")) meat_amount = bigmeat + intermeat + mediummeat + smallmeat - update_icon() + update_appearance(updates = ALL) /** * Step One: Tick Down Conversion from 3 to 0 @@ -1149,7 +1151,7 @@ if(bigmeat && meatlost == 4) bigmeat-- meatlost -= 4 - update_icon() + update_appearance(updates = ALL) meat_amount = bigmeat + intermeat + mediummeat + smallmeat //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -1183,7 +1185,8 @@ STOP_PROCESSING(SSobj, src) return ..() -/obj/structure/bloodsucker/candelabrum/update_icon() +/obj/structure/bloodsucker/candelabrum/update_appearance(updates = ALL) + . = ..() icon_state = "candelabrum[lit ? "_lit" : ""]" return ..() @@ -1208,7 +1211,7 @@ else set_light(0) STOP_PROCESSING(SSobj, src) - update_icon() + update_appearance(updates = ALL) /obj/structure/bloodsucker/candelabrum/process() if(!lit) @@ -1284,7 +1287,7 @@ if(!buckle_mob(target)) return - update_icon() + update_appearance(updates = ALL) /obj/structure/bloodsucker/candelabrum/proc/remove_loyalties(mob/living/target, mob/living/user) // Find Mindshield implant & destroy, takes a good while. @@ -1296,7 +1299,7 @@ /obj/structure/bloodsucker/candelabrum/unbuckle_mob(mob/living/buckled_mob, force = FALSE, can_fall = TRUE) . = ..() src.visible_message(span_danger("[buckled_mob][buckled_mob.stat==DEAD?"'s corpse":""] slides off of the candelabrum.")) - update_icon() + update_appearance(updates = ALL) /// Blood Throne - Allows Bloodsuckers to remotely speak with their Vassals. - Code (Mostly) stolen from comfy chairs (armrests) and chairs (layers) /* broken currently diff --git a/code/modules/antagonists/changeling/changeling.dm b/code/modules/antagonists/changeling/changeling.dm index 50745e796481..6076108a95f2 100644 --- a/code/modules/antagonists/changeling/changeling.dm +++ b/code/modules/antagonists/changeling/changeling.dm @@ -407,12 +407,10 @@ if(mob_to_tweak.hud_used) var/datum/hud/hud_used = mob_to_tweak.hud_used - lingchemdisplay = new /atom/movable/screen/ling/chems() - lingchemdisplay.hud = hud_used + lingchemdisplay = new /atom/movable/screen/ling/chems(hud_used) hud_used.infodisplay += lingchemdisplay - lingstingdisplay = new /atom/movable/screen/ling/sting() - lingstingdisplay.hud = hud_used + lingstingdisplay = new /atom/movable/screen/ling/sting(hud_used) hud_used.infodisplay += lingstingdisplay hud_used.show_hud(hud_used.hud_version) diff --git a/code/modules/antagonists/changeling/powers/mutations.dm b/code/modules/antagonists/changeling/powers/mutations.dm index 1ac2f9c46ec4..7d6a4caebdc0 100644 --- a/code/modules/antagonists/changeling/powers/mutations.dm +++ b/code/modules/antagonists/changeling/powers/mutations.dm @@ -33,7 +33,7 @@ if(!silent) playsound(user, 'sound/effects/blobattack.ogg', 30, TRUE) user.visible_message(span_warning("With a sickening crunch, [user] reforms [user.p_their()] [weapon_name_simple] into an arm!"), span_notice("We assimilate the [weapon_name_simple] back into our body."), "You hear organic matter ripping and tearing!") qdel(blade) - target.update_inv_hands() + target.update_held_items() /*/datum/action/changeling/sting/extract_dna //yogs start - removed extract dna sting name = "Extract DNA Sting" diff --git a/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm b/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm index 400a1f0cba1a..1ef4914ac900 100644 --- a/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm +++ b/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm @@ -181,7 +181,7 @@ /obj/effect/clockwork/sigil/transmission/Initialize(mapload) . = ..() - update_icon() + update_appearance(updates = ALL) /obj/effect/clockwork/sigil/transmission/ex_act(severity) if(severity == 3) @@ -242,7 +242,8 @@ return FALSE return TRUE -/obj/effect/clockwork/sigil/transmission/update_icon() +/obj/effect/clockwork/sigil/transmission/update_appearance(updates = ALL) + . = ..() var/power_charge = get_clockwork_power() if(GLOB.ratvar_awakens) alpha = 255 diff --git a/code/modules/antagonists/clockcult/clock_helpers/clock_powerdrain.dm b/code/modules/antagonists/clockcult/clock_helpers/clock_powerdrain.dm index 5ada97e2fd2b..b84d1dbd8b83 100644 --- a/code/modules/antagonists/clockcult/clock_helpers/clock_powerdrain.dm +++ b/code/modules/antagonists/clockcult/clock_helpers/clock_powerdrain.dm @@ -21,7 +21,7 @@ shorted = 1 visible_message(span_warning("The [name]'s screen blurs with static.")) update() - update_icon() + update_appearance(updates = ALL) /obj/machinery/power/smes/power_drain(clockcult_user) if(charge) @@ -32,13 +32,13 @@ icon_state = "[initial(icon_state)]-o" do_sparks(10, FALSE, src) visible_message(span_warning("[src]'s panel flies open with a flurry of sparks!")) - update_icon() + update_appearance(updates = ALL) /obj/item/stock_parts/cell/power_drain(clockcult_user) if(charge) . = min(charge, MIN_CLOCKCULT_POWER*3) charge = use(.) - update_icon() + update_appearance(updates = ALL) /mob/living/silicon/robot/power_drain(clockcult_user) if((!clockcult_user || !is_servant_of_ratvar(src)) && cell && cell.charge) diff --git a/code/modules/antagonists/clockcult/clock_helpers/power_helpers.dm b/code/modules/antagonists/clockcult/clock_helpers/power_helpers.dm index 7542c93ca2a2..4b439b4e71cd 100644 --- a/code/modules/antagonists/clockcult/clock_helpers/power_helpers.dm +++ b/code/modules/antagonists/clockcult/clock_helpers/power_helpers.dm @@ -12,7 +12,7 @@ else current_power = GLOB.clockwork_power = clamp(GLOB.clockwork_power + amount, 0, MAX_CLOCKWORK_POWER) for(var/obj/effect/clockwork/sigil/transmission/T in GLOB.all_clockwork_objects) - T.update_icon() + T.update_appearance(updates = ALL) var/unlock_message if(current_power >= SCRIPT_UNLOCK_THRESHOLD && !GLOB.script_scripture_unlocked) GLOB.script_scripture_unlocked = TRUE diff --git a/code/modules/antagonists/clockcult/clock_scripture.dm b/code/modules/antagonists/clockcult/clock_scripture.dm index 4d02e411a297..f953aa8480d3 100644 --- a/code/modules/antagonists/clockcult/clock_scripture.dm +++ b/code/modules/antagonists/clockcult/clock_scripture.dm @@ -322,7 +322,7 @@ GLOBAL_LIST_INIT(scripture_states,scripture_states_init_value()) //list of clock slab.slab_ability = new ranged_type(slab) slab.slab_ability.slab = slab slab.slab_ability.set_ranged_ability(invoker, ranged_message) - invoker.update_inv_hands() + invoker.update_held_items() var/end_time = world.time + timeout_time var/successful = FALSE if(timeout_time) @@ -348,5 +348,5 @@ GLOBAL_LIST_INIT(scripture_states,scripture_states_init_value()) //list of clock slab.item_state = initial(slab.lefthand_file) slab.item_state = initial(slab.righthand_file) slab.inhand_overlay = null - invoker?.update_inv_hands() + invoker?.update_held_items() return successful //slab doesn't look like a word now. diff --git a/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm b/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm index 35d628814b22..ba3a34a5d7ea 100644 --- a/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm +++ b/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm @@ -296,7 +296,7 @@ if(!O.pulledby && !iseffect(O) && O.density) if(!step_away(O, src, 2) || get_dist(O, src) < 2) O.take_damage(50, BURN, BOMB) - O.update_icon() + O.update_appearance(updates = ALL) for(var/V in GLOB.player_list) var/mob/M = V var/turf/T = get_turf(M) diff --git a/code/modules/antagonists/cult/cult_items.dm b/code/modules/antagonists/cult/cult_items.dm index 74c0b5bd29c7..67c98ef4917a 100644 --- a/code/modules/antagonists/cult/cult_items.dm +++ b/code/modules/antagonists/cult/cult_items.dm @@ -384,7 +384,8 @@ max = 40 prefix = "darkened" -/obj/item/sharpener/cult/update_icon() +/obj/item/sharpener/cult/update_appearance(updates = ALL) + . = ..() icon_state = "cult_sharpener[used ? "_used" : ""]" /obj/item/clothing/suit/hooded/cultrobes/cult_shield @@ -690,7 +691,8 @@ GLOBAL_VAR_INIT(curselimit, 0) qdel(spear_act) ..() -/obj/item/twohanded/cult_spear/update_icon() +/obj/item/twohanded/cult_spear/update_appearance(updates = ALL) + . = ..() icon_state = "bloodspear[wielded]" /obj/item/twohanded/cult_spear/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) diff --git a/code/modules/antagonists/cult/cult_structures.dm b/code/modules/antagonists/cult/cult_structures.dm index d1d13d45a883..a5effdd25bea 100644 --- a/code/modules/antagonists/cult/cult_structures.dm +++ b/code/modules/antagonists/cult/cult_structures.dm @@ -306,13 +306,14 @@ /obj/structure/destructible/cult/pillar/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir, armour_penetration = 0) ..() - update_icon() + update_appearance(updates = ALL) /obj/structure/destructible/cult/pillar/Destroy() new /obj/effect/decal/cleanable/ash(loc) ..() -/obj/structure/destructible/cult/pillar/update_icon() +/obj/structure/destructible/cult/pillar/update_appearance(updates = ALL) + . = ..() icon_state = "pillar[alt ? "alt": ""]2" if (obj_integrity < max_integrity/3) icon_state = "pillar[alt ? "alt": ""]0" @@ -398,7 +399,7 @@ M.playsound_local(src, 'sound/effects/explosionfar.ogg', 50, 1) shake_camera(M, 1, 1) for (var/obj/structure/destructible/cult/pillar/P in pillars) - P.update_icon() + P.update_appearance(updates = ALL) /obj/structure/destructible/cult/bloodstone/proc/summon() resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF //should stop the stone from being destroyed by damage @@ -408,7 +409,7 @@ /obj/structure/destructible/cult/bloodstone/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir, armour_penetration = 0) ..() - update_icon() + update_appearance(updates = ALL) /obj/structure/destructible/cult/bloodstone/ex_act(severity) switch(severity) @@ -470,7 +471,8 @@ else T.narsie_act(TRUE, TRUE) -/obj/structure/destructible/cult/bloodstone/update_icon() +/obj/structure/destructible/cult/bloodstone/update_appearance(updates = ALL) + . = ..() icon_state = "bloodstone-[current_fullness]" cut_overlays() var/image/I_base = image('icons/obj/cult_64x64.dmi',"bloodstone-base") @@ -500,7 +502,7 @@ animate(color = list(1.25,0.12,0,0,0,1.25,0.12,0,0.12,0,1.25,0,0,0,0,1,0,0,0,0), time = 0.1 SECONDS) animate(color = list(1.125,0.06,0,0,0,1.125,0.06,0,0.06,0,1.125,0,0,0,0,1,0,0,0,0), time = 0.1 SECONDS) set_light(20, 20) - update_icon() + update_appearance(updates = ALL) /obj/structure/destructible/cult/bloodstone/conceal() //lol return diff --git a/code/modules/antagonists/devil/true_devil/inventory.dm b/code/modules/antagonists/devil/true_devil/inventory.dm index a3d0dbdf582b..c79229dfc5bd 100644 --- a/code/modules/antagonists/devil/true_devil/inventory.dm +++ b/code/modules/antagonists/devil/true_devil/inventory.dm @@ -1,10 +1,10 @@ /mob/living/carbon/true_devil/doUnEquip(obj/item/I, force, newloc, no_move, invdrop = TRUE, silent = FALSE) if(..()) - update_inv_hands() + update_held_items() return 1 return 0 -/mob/living/carbon/true_devil/update_inv_hands() +/mob/living/carbon/true_devil/update_held_items() //TODO LORDPIDEY: Figure out how to make the hands line up properly. the l/r_hand_overlay should use the down sprite when facing down, left, or right, and the up sprite when facing up. remove_overlay(DEVIL_HANDS_LAYER) var/list/hands_overlays = list() diff --git a/code/modules/antagonists/eldritch_cult/eldritch_book.dm b/code/modules/antagonists/eldritch_cult/eldritch_book.dm index 75f4bb92702a..a70a3c8cbaf2 100644 --- a/code/modules/antagonists/eldritch_cult/eldritch_book.dm +++ b/code/modules/antagonists/eldritch_cult/eldritch_book.dm @@ -155,7 +155,7 @@ if(cultie.gain_knowledge(EK)) return TRUE - update_icon() // Not applicable to all objects. + update_appearance(updates = ALL) // Not applicable to all objects. /obj/item/forbidden_book/ui_close(mob/user) flick("book_closing",src) diff --git a/code/modules/antagonists/eldritch_cult/eldritch_magic.dm b/code/modules/antagonists/eldritch_cult/eldritch_magic.dm index 5a93e1632aa0..12ac1dda3037 100644 --- a/code/modules/antagonists/eldritch_cult/eldritch_magic.dm +++ b/code/modules/antagonists/eldritch_cult/eldritch_magic.dm @@ -759,7 +759,7 @@ pixel_y = rand(-6,6) pixel_x = rand(-6,6) icon_state = "small_rune_[rand(12)]" - update_icon() + update_appearance(updates = ALL) // Shoots out in a wave-like, what rust heretics themselves get /datum/action/cooldown/spell/cone/staggered/entropic_plume diff --git a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm index 6477ecc6b202..735f9be9bf0d 100644 --- a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm +++ b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm @@ -39,7 +39,7 @@ GLOB.nuke_list += src core = new /obj/item/nuke_core(src) STOP_PROCESSING(SSobj, core) - update_icon() + update_appearance(updates = ALL) GLOB.poi_list |= src previous_level = get_security_level() @@ -111,7 +111,7 @@ if(I.use_tool(src, user, 60, volume=100)) deconstruction_state = NUKESTATE_UNSCREWED to_chat(user, span_notice("You remove the screws from [src]'s front panel.")) - update_icon() + update_appearance(updates = ALL) return if(NUKESTATE_PANEL_REMOVED) @@ -122,7 +122,7 @@ if(I.use_tool(src, user, 80, volume=100, amount=1)) to_chat(user, span_notice("You cut [src]'s inner plate.")) deconstruction_state = NUKESTATE_WELDED - update_icon() + update_appearance(updates = ALL) return if(NUKESTATE_CORE_EXPOSED) if(istype(I, /obj/item/nuke_core_container)) @@ -132,7 +132,7 @@ if(core_box.load(core, user)) to_chat(user, span_notice("You load the plutonium core into [core_box].")) deconstruction_state = NUKESTATE_CORE_REMOVED - update_icon() + update_appearance(updates = ALL) core = null else to_chat(user, span_warning("You fail to load the plutonium core into [core_box]. [core_box] has already been used!")) @@ -146,7 +146,7 @@ to_chat(user, span_notice("You repair [src]'s inner metal plate. The radiation is contained.")) deconstruction_state = NUKESTATE_PANEL_REMOVED STOP_PROCESSING(SSobj, core) - update_icon() + update_appearance(updates = ALL) return . = ..() @@ -158,14 +158,14 @@ if(tool.use_tool(src, user, 30, volume=100)) to_chat(user, span_notice("You remove [src]'s front panel.")) deconstruction_state = NUKESTATE_PANEL_REMOVED - update_icon() + update_appearance(updates = ALL) return TRUE if(NUKESTATE_WELDED) to_chat(user, span_notice("You start prying off [src]'s inner plate...")) if(tool.use_tool(src, user, 30, volume=100)) to_chat(user, span_notice("You pry off [src]'s inner plate. You can see the core's green glow!")) deconstruction_state = NUKESTATE_CORE_EXPOSED - update_icon() + update_appearance(updates = ALL) START_PROCESSING(SSobj, core) return TRUE @@ -179,7 +179,8 @@ else return NUKE_OFF_UNLOCKED -/obj/machinery/nuclearbomb/update_icon() +/obj/machinery/nuclearbomb/update_appearance(updates = ALL) + . = ..() if(deconstruction_state == NUKESTATE_INTACT) switch(get_nuke_state()) if(NUKE_OFF_LOCKED, NUKE_OFF_UNLOCKED) @@ -408,7 +409,7 @@ timing = FALSE detonation_timer = null countdown.stop() - update_icon() + update_appearance(updates = ALL) /obj/machinery/nuclearbomb/proc/set_active() if(safety) @@ -429,7 +430,7 @@ S.switch_mode_to(initial(S.mode)) S.alert = FALSE countdown.stop() - update_icon() + update_appearance(updates = ALL) /obj/machinery/nuclearbomb/proc/get_time_left() if(timing) @@ -456,7 +457,7 @@ exploding = TRUE yes_code = FALSE safety = TRUE - update_icon() + update_appearance(updates = ALL) sound_to_playing_players('sound/machines/alarm.ogg') if(SSticker && SSticker.mode) SSticker.roundend_check_paused = TRUE @@ -563,7 +564,7 @@ S.switch_mode_to(initial(S.mode)) S.alert = FALSE countdown.stop() - update_icon() + update_appearance(updates = ALL) /obj/machinery/nuclearbomb/beer/proc/fizzbuzz() var/datum/reagents/R = new/datum/reagents(1000) diff --git a/code/modules/antagonists/nukeop/nukeop.dm b/code/modules/antagonists/nukeop/nukeop.dm index c374a5232ae8..d1090429b0ec 100644 --- a/code/modules/antagonists/nukeop/nukeop.dm +++ b/code/modules/antagonists/nukeop/nukeop.dm @@ -178,7 +178,7 @@ /datum/outfit/nuclear_operative_elite/post_equip(mob/living/carbon/human/H, visualsOnly) var/obj/item/shield/energy/shield = locate() in H.held_items shield.icon_state = "[shield.base_icon_state]1" - H.update_inv_hands() + H.update_held_items() /datum/antagonist/nukeop/leader name = "Nuclear Operative Leader" diff --git a/code/modules/antagonists/revolution/revolution.dm b/code/modules/antagonists/revolution/revolution.dm index 709cb0f00b29..950e1db0449a 100644 --- a/code/modules/antagonists/revolution/revolution.dm +++ b/code/modules/antagonists/revolution/revolution.dm @@ -140,7 +140,7 @@ to_chat(admin, span_danger("Repairing flash failed!")) else flash.burnt_out = FALSE - flash.update_icon() + flash.update_appearance(updates = ALL) /datum/antagonist/rev/head/proc/admin_demote(datum/mind/target,mob/user) message_admins("[key_name_admin(user)] has demoted [key_name_admin(owner)] from head revolutionary.") diff --git a/code/modules/antagonists/slaughter/slaughter.dm b/code/modules/antagonists/slaughter/slaughter.dm index 5493f5eefb60..25a7fa32bebc 100644 --- a/code/modules/antagonists/slaughter/slaughter.dm +++ b/code/modules/antagonists/slaughter/slaughter.dm @@ -75,8 +75,9 @@ icon = 'icons/obj/surgery.dmi' icon_state = "demon_heart-on" -/obj/item/organ/heart/demon/update_icon() - return //always beating visually +/obj/item/organ/internal/heart/demon/Initialize(mapload) + AddElement(/datum/element/update_icon_blocker) + return ..() /obj/item/organ/heart/demon/attack(mob/M, mob/living/carbon/user, obj/target) if(M != user) diff --git a/code/modules/antagonists/traitor/equipment/Malf_Modules.dm b/code/modules/antagonists/traitor/equipment/Malf_Modules.dm index abea49d42908..4fd4331c3b8c 100644 --- a/code/modules/antagonists/traitor/equipment/Malf_Modules.dm +++ b/code/modules/antagonists/traitor/equipment/Malf_Modules.dm @@ -654,7 +654,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/AI_Module)) if(!is_station_level(F.z)) continue F.obj_flags |= EMAGGED - F.update_icon() + F.update_appearance(updates = ALL) to_chat(owner, span_notice("All thermal sensors on the station have been disabled. Fire alerts will no longer be recognized.")) owner.playsound_local(owner, 'sound/machines/terminal_off.ogg', 50, 0) diff --git a/code/modules/antagonists/zombie/abilities/spit.dm b/code/modules/antagonists/zombie/abilities/spit.dm index 809bf1767c5b..669f4b003ca3 100644 --- a/code/modules/antagonists/zombie/abilities/spit.dm +++ b/code/modules/antagonists/zombie/abilities/spit.dm @@ -12,7 +12,8 @@ else add_ranged_ability(user, span_notice("You open your neurotoxin reserves. Left-click to fire at a target!"), TRUE) -/obj/effect/proc_holder/zombie/spit/update_icon() +/obj/effect/proc_holder/zombie/spit/update_appearance(updates = ALL) + . = ..() action.button_icon_state = "alien_neurotoxin_[active]" action.build_all_button_icons() diff --git a/code/modules/assembly/assembly.dm b/code/modules/assembly/assembly.dm index e72de7fe9e5e..32ffa561a860 100644 --- a/code/modules/assembly/assembly.dm +++ b/code/modules/assembly/assembly.dm @@ -11,7 +11,7 @@ throw_range = 7 var/is_position_sensitive = FALSE //set to true if the device has different icons for each position. - //This will prevent things such as visible lasers from facing the incorrect direction when transformed by assembly_holder's update_icon() + //This will prevent things such as visible lasers from facing the incorrect direction when transformed by assembly_holder's update_appearance(updates = ALL) var/secured = TRUE var/list/attached_overlays = null var/obj/item/assembly_holder/holder = null @@ -82,7 +82,7 @@ /obj/item/assembly/proc/toggle_secure() secured = !secured - update_icon() + update_appearance(updates = ALL) return secured diff --git a/code/modules/assembly/doorcontrol.dm b/code/modules/assembly/doorcontrol.dm index 8eff567fcb1a..f6c91fc26751 100644 --- a/code/modules/assembly/doorcontrol.dm +++ b/code/modules/assembly/doorcontrol.dm @@ -65,7 +65,7 @@ if(specialfunctions & BOLTS) if(!D.wires.is_cut(WIRE_BOLTS) && D.hasPower()) D.locked = !D.locked - D.update_icon() + D.update_appearance(updates = ALL) if(specialfunctions & SHOCK) if(D.secondsElectrified) D.set_electrified(MACHINE_ELECTRIFIED_PERMANENT, usr) diff --git a/code/modules/assembly/flash.dm b/code/modules/assembly/flash.dm index 1fae39be6571..246513ed0659 100644 --- a/code/modules/assembly/flash.dm +++ b/code/modules/assembly/flash.dm @@ -45,7 +45,8 @@ attack(user,user) return FIRELOSS -/obj/item/assembly/flash/update_icon(flash = FALSE) +/obj/item/assembly/flash/update_icon(updates = ALL, flash = FALSE) + . = ..() cut_overlays() attached_overlays = list() if(burnt_out) @@ -55,9 +56,9 @@ if(flash) add_overlay(flashing_overlay) attached_overlays += flashing_overlay - addtimer(CALLBACK(src, TYPE_PROC_REF(/atom/, update_icon)), 5) + addtimer(CALLBACK(src, TYPE_PROC_REF(/atom/, update_appearance)), 5) if(holder) - holder.update_icon() + holder.update_appearance(updates = ALL) /obj/item/assembly/flash/proc/clown_check(mob/living/carbon/human/user) if(HAS_TRAIT(user, TRAIT_CLUMSY) && prob(50)) @@ -68,7 +69,7 @@ /obj/item/assembly/flash/proc/burn_out() //Made so you can override it if you want to have an invincible flash from R&D or something. if(!burnt_out) burnt_out = TRUE - update_icon() + update_appearance(updates = ALL) if(ismob(loc)) var/mob/M = loc M.visible_message(span_danger("[src] burns out!"),span_userdanger("[src] burns out!")) @@ -120,7 +121,7 @@ addtimer(CALLBACK(src, PROC_REF(flash_end)), FLASH_LIGHT_DURATION, TIMER_OVERRIDE|TIMER_UNIQUE) times_used++ flash_recharge() - update_icon(TRUE) + update_appearance(UPDATE_ICON, TRUE) if(user && !clown_check(user)) return FALSE return TRUE @@ -173,7 +174,7 @@ var/mob/living/silicon/robot/R = M if(!R.sensor_protection) log_combat(user, R, "flashed", src) - update_icon(1) + update_appearance(UPDATE_ICON, TRUE) R.Paralyze(rand(80,120)) R.set_confusion_if_lower(5 SECONDS * CONFUSION_STACK_MAX_MULTIPLIER) R.flash_act(affect_silicon = 1) @@ -294,7 +295,7 @@ addtimer(CALLBACK(src, PROC_REF(flash_end)), FLASH_LIGHT_DURATION, TIMER_OVERRIDE|TIMER_UNIQUE) addtimer(CALLBACK(src, PROC_REF(cooldown)), flashcd) playsound(src, 'sound/weapons/flash.ogg', 100, TRUE) - update_icon(1) + update_appearance(UPDATE_ICON, TRUE) return TRUE diff --git a/code/modules/assembly/health.dm b/code/modules/assembly/health.dm index 69f90681a7ca..fb22dede8413 100644 --- a/code/modules/assembly/health.dm +++ b/code/modules/assembly/health.dm @@ -27,7 +27,7 @@ else scanning = FALSE STOP_PROCESSING(SSobj, src) - update_icon() + update_appearance(updates = ALL) return secured /obj/item/assembly/health/AltClick(mob/living/user) diff --git a/code/modules/assembly/holder.dm b/code/modules/assembly/holder.dm index 3c983852d139..91fc9e58d28e 100644 --- a/code/modules/assembly/holder.dm +++ b/code/modules/assembly/holder.dm @@ -23,7 +23,7 @@ attach(A,user) attach(A2,user) name = "[A.name]-[A2.name] assembly" - update_icon() + update_appearance(updates = ALL) SSblackbox.record_feedback("tally", "assembly_made", 1, "[initial(A.name)]-[initial(A2.name)]") /obj/item/assembly_holder/proc/attach(obj/item/assembly/A, mob/user) @@ -40,7 +40,8 @@ a_right = A A.holder_movement() -/obj/item/assembly_holder/update_icon() +/obj/item/assembly_holder/update_appearance(updates = ALL) + . = ..() cut_overlays() if(a_left) add_overlay("[a_left.icon_state]_left") @@ -80,8 +81,7 @@ // yogs end add_overlay(right) - if(master) - master.update_icon() + master?.update_appearance(updates) /obj/item/assembly_holder/Crossed(atom/movable/AM as mob|obj) . = ..() diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm index 82c6fd03c3e5..e55adafb17f2 100644 --- a/code/modules/assembly/infrared.dm +++ b/code/modules/assembly/infrared.dm @@ -36,7 +36,7 @@ return FALSE //Cooldown check on = !on refreshBeam() - update_icon() + update_appearance(updates = ALL) return TRUE /obj/item/assembly/infra/toggle_secure() @@ -47,22 +47,23 @@ else QDEL_LIST(beams) STOP_PROCESSING(SSobj, src) - update_icon() + update_appearance(updates = ALL) return secured -/obj/item/assembly/infra/update_icon() - cut_overlays() - attached_overlays = list() - if(on) - add_overlay("infrared_on") - attached_overlays += "infrared_on" - if(visible && secured) - add_overlay("infrared_visible") - attached_overlays += "infrared_visible" +/obj/item/assembly/infra/update_appearance(updates = ALL) + . = ..() + holder?.update_appearance(updates) - if(holder) - holder.update_icon() - return +/obj/item/assembly/infra/update_overlays() + . = ..() + attached_overlays = list() + if(!on) + return + . += "infrared_on" + attached_overlays += "infrared_on" + if(visible && secured) + . += "infrared_visible" + attached_overlays += "infrared_visible" /obj/item/assembly/infra/dropped() . = ..() @@ -204,7 +205,7 @@ visible = !visible . = TRUE - update_icon() + update_appearance(updates = ALL) refreshBeam() /***************************IBeam*********************************/ diff --git a/code/modules/assembly/mousetrap.dm b/code/modules/assembly/mousetrap.dm index 6266ccaf3595..328c0a063213 100644 --- a/code/modules/assembly/mousetrap.dm +++ b/code/modules/assembly/mousetrap.dm @@ -22,16 +22,17 @@ if((HAS_TRAIT(user, TRAIT_DUMB) || HAS_TRAIT(user, TRAIT_CLUMSY)) && prob(50)) to_chat(user, span_warning("Your hand slips, setting off the trigger!")) pulse(FALSE) - update_icon() + update_appearance(updates = ALL) playsound(src, 'sound/weapons/handcuffs.ogg', 30, TRUE, -3) -/obj/item/assembly/mousetrap/update_icon() +/obj/item/assembly/mousetrap/update_appearance(updates = ALL) + . = ..() if(armed) icon_state = "mousetraparmed" else icon_state = "mousetrap" if(holder) - holder.update_icon() + holder.update_appearance(updates = ALL) /obj/item/assembly/mousetrap/proc/triggered(mob/target, type = "feet") if(!armed) @@ -42,7 +43,7 @@ if(HAS_TRAIT(H, TRAIT_PIERCEIMMUNE)) playsound(src, 'sound/effects/snap.ogg', 50, TRUE) armed = FALSE - update_icon() + update_appearance(updates = ALL) pulse(FALSE) return FALSE switch(type) @@ -69,7 +70,7 @@ M.splat() playsound(src, 'sound/effects/snap.ogg', 50, TRUE) armed = FALSE - update_icon() + update_appearance(updates = ALL) pulse(FALSE) @@ -87,7 +88,7 @@ return to_chat(user, span_notice("You disarm [src].")) armed = !armed - update_icon() + update_appearance(updates = ALL) playsound(src, 'sound/weapons/handcuffs.ogg', 30, TRUE, -3) diff --git a/code/modules/assembly/proximity.dm b/code/modules/assembly/proximity.dm index ae7b26bef1da..7749d7249037 100644 --- a/code/modules/assembly/proximity.dm +++ b/code/modules/assembly/proximity.dm @@ -29,7 +29,7 @@ timing = !timing else scanning = FALSE - update_icon() + update_appearance(updates = ALL) return TRUE /obj/item/assembly/prox_sensor/on_detach() @@ -50,7 +50,7 @@ else START_PROCESSING(SSobj, src) proximity_monitor.SetHost(loc,src) - update_icon() + update_appearance(updates = ALL) return secured /obj/item/assembly/prox_sensor/HasProximity(atom/movable/AM as mob|obj) @@ -84,7 +84,7 @@ return FALSE scanning = scan proximity_monitor.SetRange(scanning ? sensitivity : 0) - update_icon() + update_appearance(updates = ALL) /obj/item/assembly/prox_sensor/proc/sensitivity_change(value) var/sense = min(max(sensitivity + value, 0), 5) @@ -92,7 +92,8 @@ if(scanning && proximity_monitor.SetRange(sense)) sense() -/obj/item/assembly/prox_sensor/update_icon() +/obj/item/assembly/prox_sensor/update_appearance(updates = ALL) + . = ..() cut_overlays() attached_overlays = list() if(timing) @@ -102,7 +103,7 @@ add_overlay("prox_scanning") attached_overlays += "prox_scanning" if(holder) - holder.update_icon() + holder.update_appearance(updates = ALL) return /obj/item/assembly/prox_sensor/ui_status(mob/user) @@ -140,7 +141,7 @@ . = TRUE if("time") timing = !timing - update_icon() + update_appearance(updates = ALL) . = TRUE if("input") var/value = text2num(params["adjust"]) diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm index d549dba6d50a..3250e98958e2 100644 --- a/code/modules/assembly/signaler.dm +++ b/code/modules/assembly/signaler.dm @@ -44,9 +44,10 @@ signal() return TRUE -/obj/item/assembly/signaler/update_icon() +/obj/item/assembly/signaler/update_appearance(updates = ALL) + . = ..() if(holder) - holder.update_icon() + holder.update_appearance(updates = ALL) return /obj/item/assembly/signaler/ui_status(mob/user) @@ -104,9 +105,9 @@ else idx++ label_color = label_colors[idx] - update_icon() + update_appearance(updates = ALL) - update_icon() + update_appearance(updates = ALL) /obj/item/assembly/signaler/attackby(obj/item/W, mob/user, params) if(issignaler(W)) @@ -116,7 +117,7 @@ set_frequency(signaler2.frequency) // yogs start - signaller colors label_color = signaler2.label_color - update_icon() + update_appearance(updates = ALL) // yogs end to_chat(user, "You transfer the frequency and code of \the [signaler2.name] to \the [name]") ..() diff --git a/code/modules/assembly/timer.dm b/code/modules/assembly/timer.dm index 0861f88d4eb9..deebf77724aa 100644 --- a/code/modules/assembly/timer.dm +++ b/code/modules/assembly/timer.dm @@ -37,7 +37,7 @@ if(!..()) return FALSE//Cooldown check timing = !timing - update_icon() + update_appearance(updates = ALL) return TRUE @@ -48,7 +48,7 @@ else timing = FALSE STOP_PROCESSING(SSobj, src) - update_icon() + update_appearance(updates = ALL) return secured @@ -63,7 +63,7 @@ LM.playsound_local(get_turf(src), 'sound/machines/triple_beep.ogg', ASSEMBLY_BEEP_VOLUME, TRUE) if(loop) timing = TRUE - update_icon() + update_appearance(updates = ALL) /obj/item/assembly/timer/process(delta_time) @@ -76,14 +76,15 @@ time = saved_time -/obj/item/assembly/timer/update_icon() +/obj/item/assembly/timer/update_appearance(updates = ALL) + . = ..() cut_overlays() attached_overlays = list() if(timing) add_overlay("timer_timing") attached_overlays += "timer_timing" if(holder) - holder.update_icon() + holder.update_appearance(updates = ALL) /obj/item/assembly/timer/ui_status(mob/user) if(is_secured(user)) @@ -115,7 +116,7 @@ timing = !timing if(timing && istype(holder, /obj/item/transfer_valve)) log_bomber(usr, "activated a", src, "attachment on [holder]") - update_icon() + update_appearance(updates = ALL) . = TRUE if("repeat") loop = !loop diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm index 8b9ba4a59fdc..d6b4e01d3f98 100644 --- a/code/modules/atmospherics/machinery/airalarm.dm +++ b/code/modules/atmospherics/machinery/airalarm.dm @@ -236,7 +236,7 @@ if(name == initial(name)) name = "[get_area_name(src)] Air Alarm" - update_icon() + update_appearance(updates = ALL) /obj/machinery/airalarm/Destroy() SSradio.remove_object(src, frequency) @@ -458,7 +458,7 @@ if(A.atmosalert(0, src)) post_alert(0) . = TRUE - update_icon() + update_appearance(updates = ALL) /obj/machinery/airalarm/proc/reset(wire) @@ -466,7 +466,7 @@ if(WIRE_POWER) if(!wires.is_cut(WIRE_POWER)) shorted = FALSE - update_icon() + update_appearance(updates = ALL) if(WIRE_AI) if(!wires.is_cut(WIRE_AI)) aidisabled = FALSE @@ -630,7 +630,8 @@ "set_internal_pressure" = 0 ), signal_source) -/obj/machinery/airalarm/update_icon() +/obj/machinery/airalarm/update_appearance(updates = ALL) + . = ..() if(panel_open) switch(buildstage) if(2) @@ -724,7 +725,7 @@ if(A.atmosalert(new_area_danger_level,src)) //if area was in normal state or if area was in alert state post_alert(new_area_danger_level) - update_icon() + update_appearance(updates = ALL) /obj/machinery/airalarm/attackby(obj/item/W, mob/user, params) switch(buildstage) @@ -734,13 +735,13 @@ to_chat(user, span_notice("You cut the final wires.")) new /obj/item/stack/cable_coil(loc, 5) buildstage = 1 - update_icon() + update_appearance(updates = ALL) return else if(W.tool_behaviour == TOOL_SCREWDRIVER) // Opening that Air Alarm up. W.play_tool_sound(src) panel_open = !panel_open to_chat(user, span_notice("The wires have been [panel_open ? "exposed" : "unexposed"].")) - update_icon() + update_appearance(updates = ALL) return else if(W.GetID())// trying to unlock the interface with an ID card togglelock(user) @@ -759,7 +760,7 @@ new /obj/item/electronics/airalarm( src.loc ) playsound(src.loc, 'sound/items/deconstruct.ogg', 50, 1) buildstage = 0 - update_icon() + update_appearance(updates = ALL) return if(istype(W, /obj/item/stack/cable_coil)) @@ -780,14 +781,14 @@ shorted = 0 post_alert(0) buildstage = 2 - update_icon() + update_appearance(updates = ALL) return if(0) if(istype(W, /obj/item/electronics/airalarm)) if(user.temporarilyRemoveItemFromInventory(W)) to_chat(user, span_notice("You insert the circuit.")) buildstage = 1 - update_icon() + update_appearance(updates = ALL) qdel(W) return @@ -798,7 +799,7 @@ user.visible_message(span_notice("[user] fabricates a circuit and places it into [src]."), \ span_notice("You adapt an air alarm circuit and slot it into the assembly.")) buildstage = 1 - update_icon() + update_appearance(updates = ALL) return if(W.tool_behaviour == TOOL_WRENCH) @@ -828,7 +829,7 @@ user.visible_message(span_notice("[user] fabricates a circuit and places it into [src]."), \ span_notice("You adapt an air alarm circuit and slot it into the assembly.")) buildstage = 1 - update_icon() + update_appearance(updates = ALL) return TRUE return FALSE diff --git a/code/modules/atmospherics/machinery/atmosmachinery.dm b/code/modules/atmospherics/machinery/atmosmachinery.dm index ce6d38b8a42d..d83999b115bf 100644 --- a/code/modules/atmospherics/machinery/atmosmachinery.dm +++ b/code/modules/atmospherics/machinery/atmosmachinery.dm @@ -117,13 +117,14 @@ GLOBAL_LIST_EMPTY(pipeimages) if(can_be_node(target, i)) nodes[i] = target break - update_icon() + update_appearance(updates = ALL) /obj/machinery/atmospherics/proc/setPipingLayer(new_layer) piping_layer = (pipe_flags & PIPING_DEFAULT_LAYER_ONLY) ? PIPING_LAYER_DEFAULT : new_layer - update_icon() + update_appearance(updates = ALL) -/obj/machinery/atmospherics/update_icon() +/obj/machinery/atmospherics/update_appearance(updates = ALL) + . = ..() layer = initial(layer) + piping_layer / 1000 return ..() @@ -175,7 +176,7 @@ GLOBAL_LIST_EMPTY(pipeimages) var/obj/machinery/atmospherics/pipe/P = reference P.destroy_network() nodes[nodes.Find(reference)] = null - update_icon() + update_appearance(updates = ALL) /obj/machinery/atmospherics/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/pipe)) //lets you autodrop diff --git a/code/modules/atmospherics/machinery/components/binary_devices/binary_devices.dm b/code/modules/atmospherics/machinery/components/binary_devices/binary_devices.dm index 861f457062fd..bdb59f2ba587 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/binary_devices.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/binary_devices.dm @@ -14,7 +14,7 @@ initialize_directions = EAST|WEST /obj/machinery/atmospherics/components/binary/hide(intact) - update_icon() + update_appearance(updates = ALL) ..() /obj/machinery/atmospherics/components/binary/getNodeConnects() diff --git a/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm b/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm index e4510f592166..ea72556b0683 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm @@ -36,7 +36,7 @@ /obj/machinery/atmospherics/components/binary/circulator/Initialize(mapload) . = ..() component_parts = list(new /obj/item/circuitboard/machine/circulator) - update_icon() + update_appearance(updates = ALL) AddComponent(/datum/component/simple_rotation,ROTATION_ALTCLICK | ROTATION_CLOCKWISE | ROTATION_COUNTERCLOCKWISE | ROTATION_VERBS ) /obj/machinery/atmospherics/components/binary/circulator/Destroy() @@ -79,7 +79,8 @@ ..() update_icon_nopipes() -/obj/machinery/atmospherics/components/binary/circulator/update_icon() +/obj/machinery/atmospherics/components/binary/circulator/update_appearance(updates = ALL) + . = ..() cut_overlays() if(anchored) @@ -185,7 +186,7 @@ node2.addMember(src) SSair.add_to_rebuild_queue(src) - update_icon() + update_appearance(updates = ALL) return TRUE @@ -254,7 +255,7 @@ generator.cold_circ = null else generator.hot_circ = null - generator.update_icon() + generator.update_appearance(updates = ALL) generator = null /obj/machinery/atmospherics/components/binary/circulator/setPipingLayer(new_layer) @@ -278,5 +279,5 @@ /obj/machinery/atmospherics/components/binary/circulator/obj_break(damage_flag) if(generator) generator.kill_circs() - generator.update_icon() + generator.update_appearance(updates = ALL) ..() diff --git a/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm index 9181b33d5709..98837e855d13 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm @@ -175,7 +175,7 @@ return //do not update_icon spawn(2) broadcast_status() - update_icon() + update_appearance(updates = ALL) /obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume name = "large dual-port air vent" diff --git a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm index cc951ab2977e..24344a37c188 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm @@ -33,7 +33,7 @@ Passive gate is similar to the regular pump except: var/msg = "was turned [on ? "on" : "off"] by [key_name(user)]" investigate_log(msg, INVESTIGATE_ATMOS) investigate_log(msg, INVESTIGATE_SUPERMATTER) // yogs - make supermatter invest useful - update_icon() + update_appearance(updates = ALL) return ..() /obj/machinery/atmospherics/components/binary/passive_gate/AltClick(mob/user) @@ -43,7 +43,7 @@ Passive gate is similar to the regular pump except: investigate_log(msg, INVESTIGATE_ATMOS) investigate_log(msg, INVESTIGATE_SUPERMATTER) // yogs - make supermatter invest useful balloon_alert(user, "pressure output set to [target_pressure] kPa") - update_icon() + update_appearance(updates = ALL) return ..() @@ -148,7 +148,7 @@ Passive gate is similar to the regular pump except: var/msg = "was set to [target_pressure] kPa by [key_name(usr)]" investigate_log(msg, INVESTIGATE_ATMOS) investigate_log(msg, INVESTIGATE_SUPERMATTER) // yogs - make supermatter invest useful - update_icon() + update_appearance(updates = ALL) /obj/machinery/atmospherics/components/binary/passive_gate/atmosinit() ..() @@ -179,7 +179,7 @@ Passive gate is similar to the regular pump except: return broadcast_status() - update_icon() + update_appearance(updates = ALL) /obj/machinery/atmospherics/components/binary/passive_gate/can_unwrench(mob/user) . = ..() diff --git a/code/modules/atmospherics/machinery/components/binary_devices/pressure_valve.dm b/code/modules/atmospherics/machinery/components/binary_devices/pressure_valve.dm index 92a3873e6980..bea0dcde8220 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/pressure_valve.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/pressure_valve.dm @@ -24,7 +24,7 @@ if(can_interact(user)) on = !on investigate_log("was turned [on ? "on" : "off"] by [key_name(user)]", INVESTIGATE_ATMOS) - update_icon() + update_appearance(updates = ALL) return ..() /obj/machinery/atmospherics/components/binary/pressure_valve/AltClick(mob/user) @@ -32,7 +32,7 @@ target_pressure = MAX_OUTPUT_PRESSURE investigate_log("was set to [target_pressure] kPa by [key_name(user)]", INVESTIGATE_ATMOS) balloon_alert(user, "pressure output set to [target_pressure] kPa") - update_icon() + update_appearance(updates = ALL) return ..() /obj/machinery/atmospherics/components/binary/pressure_valve/Destroy() @@ -117,7 +117,7 @@ if(.) target_pressure = clamp(pressure, 0, ONE_ATMOSPHERE*100) investigate_log("was set to [target_pressure] kPa by [key_name(usr)]", INVESTIGATE_ATMOS) - update_icon() + update_appearance(updates = ALL) /obj/machinery/atmospherics/components/binary/pressure_valve/atmosinit() . = ..() @@ -147,7 +147,7 @@ return broadcast_status() - update_icon() + update_appearance(updates = ALL) /obj/machinery/atmospherics/components/binary/pressure_valve/can_unwrench(mob/user) . = ..() diff --git a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm index ef25ea72f46e..f2ea0c5c9517 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm @@ -30,7 +30,7 @@ /obj/machinery/atmospherics/components/binary/pump/CtrlClick(mob/user) if(can_interact(user)) on = !on - update_icon() + update_appearance(updates = ALL) return ..() /obj/machinery/atmospherics/components/binary/pump/AltClick(mob/user) @@ -40,7 +40,7 @@ investigate_log(msg, INVESTIGATE_ATMOS) investigate_log(msg, INVESTIGATE_SUPERMATTER) // yogs - makes supermatter invest useful balloon_alert(user, "pressure output set to [target_pressure] kPa") - update_icon() + update_appearance(updates = ALL) return ..() /obj/machinery/atmospherics/components/binary/pump/Destroy() @@ -137,7 +137,7 @@ var/msg = "was set to [target_pressure] kPa by [key_name(usr)]" investigate_log(msg, INVESTIGATE_ATMOS) investigate_log(msg, INVESTIGATE_SUPERMATTER) // yogs - makes supermatter invest useful - update_icon() + update_appearance(updates = ALL) /obj/machinery/atmospherics/components/binary/pump/atmosinit() ..() @@ -168,7 +168,7 @@ return broadcast_status() - update_icon() + update_appearance(updates = ALL) /obj/machinery/atmospherics/components/binary/pump/can_unwrench(mob/user) . = ..() diff --git a/code/modules/atmospherics/machinery/components/binary_devices/temperature_gate.dm b/code/modules/atmospherics/machinery/components/binary_devices/temperature_gate.dm index 88ccb2a6adc0..932fed89f4d2 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/temperature_gate.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/temperature_gate.dm @@ -23,7 +23,7 @@ if(can_interact(user)) on = !on investigate_log("was turned [on ? "on" : "off"] by [key_name(user)]", INVESTIGATE_ATMOS) - update_icon() + update_appearance(updates = ALL) return ..() /obj/machinery/atmospherics/components/binary/temperature_gate/AltClick(mob/user) @@ -31,7 +31,7 @@ target_temperature = max_temperature investigate_log("was set to [target_temperature] K by [key_name(user)]", INVESTIGATE_ATMOS) balloon_alert(user, "target temperature set to [target_temperature] K") - update_icon() + update_appearance(updates = ALL) return ..() @@ -109,7 +109,7 @@ if(.) target_temperature = clamp(minimum_temperature, temperature, max_temperature) investigate_log("was set to [target_temperature] K by [key_name(usr)]", INVESTIGATE_ATMOS) - update_icon() + update_appearance(updates = ALL) /obj/machinery/atmospherics/components/binary/temperature_gate/can_unwrench(mob/user) . = ..() diff --git a/code/modules/atmospherics/machinery/components/binary_devices/temperature_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/temperature_pump.dm index 579fea954138..0574365adec8 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/temperature_pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/temperature_pump.dm @@ -18,7 +18,7 @@ if(can_interact(user)) on = !on investigate_log("was turned [on ? "on" : "off"] by [key_name(user)]", INVESTIGATE_ATMOS) - update_icon() + update_appearance(updates = ALL) return ..() /obj/machinery/atmospherics/components/binary/temperature_pump/AltClick(mob/user) @@ -26,7 +26,7 @@ heat_transfer_rate = max_heat_transfer_rate investigate_log("was set to [heat_transfer_rate]% by [key_name(user)]", INVESTIGATE_ATMOS) balloon_alert(user, "transfer rate set to [heat_transfer_rate]%") - update_icon() + update_appearance(updates = ALL) return ..() /obj/machinery/atmospherics/components/binary/temperature_pump/update_icon_nopipes() @@ -94,4 +94,4 @@ if(.) heat_transfer_rate = clamp(rate, 0, max_heat_transfer_rate) investigate_log("was set to [heat_transfer_rate]% by [key_name(usr)]", INVESTIGATE_ATMOS) - update_icon() + update_appearance(updates = ALL) diff --git a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm index 04ca2b623e24..b75a4cce11b1 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm @@ -34,7 +34,7 @@ var/msg = "was turned [on ? "on" : "off"] by [key_name(usr)]" investigate_log(msg, INVESTIGATE_ATMOS) investigate_log(msg, INVESTIGATE_SUPERMATTER) // yogs - make supermatter invest useful - update_icon() + update_appearance(updates = ALL) return ..() /obj/machinery/atmospherics/components/binary/volume_pump/AltClick(mob/user) @@ -44,7 +44,7 @@ investigate_log(msg, INVESTIGATE_ATMOS) investigate_log(msg, INVESTIGATE_SUPERMATTER) // yogs - make supermatter invest useful balloon_alert(user, "volume output set to [transfer_rate] L/s") - update_icon() + update_appearance(updates = ALL) return ..() /obj/machinery/atmospherics/components/binary/volume_pump/Destroy() @@ -158,7 +158,7 @@ var/msg = "was set to [transfer_rate] L/s by [key_name(usr)]" investigate_log(msg, INVESTIGATE_ATMOS) investigate_log(msg, INVESTIGATE_SUPERMATTER) // yogs - make supermatter invest useful - update_icon() + update_appearance(updates = ALL) /obj/machinery/atmospherics/components/binary/volume_pump/receive_signal(datum/signal/signal) if(!signal.data["tag"] || (signal.data["tag"] != id) || (signal.data["sigtype"]!="command")) @@ -185,7 +185,7 @@ return //do not update_icon broadcast_status() - update_icon() + update_appearance(updates = ALL) /obj/machinery/atmospherics/components/binary/volume_pump/can_unwrench(mob/user) . = ..() diff --git a/code/modules/atmospherics/machinery/components/components_base.dm b/code/modules/atmospherics/machinery/components/components_base.dm index edb0f39239ab..4adad2671650 100644 --- a/code/modules/atmospherics/machinery/components/components_base.dm +++ b/code/modules/atmospherics/machinery/components/components_base.dm @@ -24,7 +24,8 @@ /obj/machinery/atmospherics/components/proc/update_icon_nopipes() return -/obj/machinery/atmospherics/components/update_icon() +/obj/machinery/atmospherics/components/update_appearance(updates = ALL) + . = ..() update_icon_nopipes() underlays.Cut() diff --git a/code/modules/atmospherics/machinery/components/fusion/hfr_parts.dm b/code/modules/atmospherics/machinery/components/fusion/hfr_parts.dm index 3c60597ff47e..3278ea82ca0a 100644 --- a/code/modules/atmospherics/machinery/components/fusion/hfr_parts.dm +++ b/code/modules/atmospherics/machinery/components/fusion/hfr_parts.dm @@ -52,8 +52,7 @@ if(tool.use_tool(src, user, 10 SECONDS, volume=30, amount=5)) balloon_alert(user, "repaired") cracked = FALSE - update_icon() - update_overlays() + update_appearance(updates = ALL) /obj/machinery/atmospherics/components/unary/hypertorus/default_change_direction_wrench(mob/user, obj/item/I) . = ..() @@ -72,7 +71,7 @@ node.addMember(src) SSair.add_to_rebuild_queue(src) -/obj/machinery/atmospherics/components/unary/hypertorus/update_icon() +/obj/machinery/atmospherics/components/unary/hypertorus/update_appearance(updates = ALL) . = ..() if(panel_open) icon_state = icon_state_open @@ -81,7 +80,8 @@ else icon_state = icon_state_off -/obj/machinery/atmospherics/components/unary/hypertorus/proc/update_overlays() +/obj/machinery/atmospherics/components/unary/hypertorus/update_overlays() + . = ..() if(!cracked) return @@ -153,7 +153,8 @@ return return ..() -/obj/machinery/hypertorus/update_icon() +/obj/machinery/hypertorus/update_appearance(updates = ALL) + . = ..() if(panel_open) icon_state = icon_state_open else if(active) diff --git a/code/modules/atmospherics/machinery/components/fusion/hfr_procs.dm b/code/modules/atmospherics/machinery/components/fusion/hfr_procs.dm index d3c98bc979c2..fa82b7e8f121 100644 --- a/code/modules/atmospherics/machinery/components/fusion/hfr_procs.dm +++ b/code/modules/atmospherics/machinery/components/fusion/hfr_procs.dm @@ -89,22 +89,22 @@ return to_chat(user, span_notice("You link all parts toghether.")) active = TRUE - update_icon() + update_appearance(updates = ALL) linked_interface.active = TRUE - linked_interface.update_icon() + linked_interface.update_appearance(updates = ALL) RegisterSignal(linked_interface, COMSIG_PARENT_QDELETING, PROC_REF(unregister_signals)) linked_input.active = TRUE - linked_input.update_icon() + linked_input.update_appearance(updates = ALL) RegisterSignal(linked_input, COMSIG_PARENT_QDELETING, PROC_REF(unregister_signals)) linked_output.active = TRUE - linked_output.update_icon() + linked_output.update_appearance(updates = ALL) RegisterSignal(linked_output, COMSIG_PARENT_QDELETING, PROC_REF(unregister_signals)) linked_moderator.active = TRUE - linked_moderator.update_icon() + linked_moderator.update_appearance(updates = ALL) RegisterSignal(linked_moderator, COMSIG_PARENT_QDELETING, PROC_REF(unregister_signals)) for(var/obj/machinery/hypertorus/corner/corner in corners) corner.active = TRUE - corner.update_icon() + corner.update_appearance(updates = ALL) RegisterSignal(corner, COMSIG_PARENT_QDELETING, PROC_REF(unregister_signals)) soundloop = new(list(src), TRUE) soundloop.volume = 5 @@ -138,27 +138,27 @@ if(!active) return active = FALSE - update_icon() + update_appearance(updates = ALL) if(linked_interface) linked_interface.active = FALSE - linked_interface.update_icon() + linked_interface.update_appearance(updates = ALL) linked_interface = null if(linked_input) linked_input.active = FALSE - linked_input.update_icon() + linked_input.update_appearance(updates = ALL) linked_input = null if(linked_output) linked_output.active = FALSE - linked_output.update_icon() + linked_output.update_appearance(updates = ALL) linked_output = null if(linked_moderator) linked_moderator.active = FALSE - linked_moderator.update_icon() + linked_moderator.update_appearance(updates = ALL) linked_moderator = null if(corners.len) for(var/obj/machinery/hypertorus/corner/corner in corners) corner.active = FALSE - corner.update_icon() + corner.update_appearance(updates = ALL) corners = list() QDEL_NULL(soundloop) @@ -592,7 +592,7 @@ /obj/machinery/atmospherics/components/unary/hypertorus/core/proc/create_crack() var/obj/machinery/atmospherics/components/unary/hypertorus/part = pick(machine_parts) part.cracked = TRUE - part.update_icon() + part.update_appearance(updates = ALL) part.update_overlays() return part diff --git a/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer.dm b/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer.dm index ec56fa1788a7..33c26c05de2d 100644 --- a/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer.dm +++ b/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer.dm @@ -15,7 +15,7 @@ circuit = /obj/item/circuitboard/machine/crystallizer pipe_flags = PIPING_ONE_PER_TURF| PIPING_DEFAULT_LAYER_ONLY - ///Base icon state for the machine to be used in update_icon() + ///Base icon state for the machine to be used in update_appearance(updates = ALL) var/base_icon = "crystallizer" ///Internal Gas mix used for processing the gases that have been put in var/datum/gas_mixture/internal @@ -79,12 +79,14 @@ SSair.add_to_rebuild_queue(src) return TRUE -/obj/machinery/atmospherics/components/binary/crystallizer/proc/update_overlays() +/obj/machinery/atmospherics/components/binary/crystallizer/update_overlays() + . = ..() cut_overlays() add_overlay(getpipeimage(icon, "pipe", dir, COLOR_LIME, piping_layer)) add_overlay(getpipeimage(icon, "pipe", turn(dir, 180), COLOR_RED, piping_layer)) -/obj/machinery/atmospherics/components/binary/crystallizer/proc/update_icon_state() +/obj/machinery/atmospherics/components/binary/crystallizer/update_icon_state() + . = ..() if(panel_open) icon_state = "[base_icon]-open" else if(on) @@ -92,7 +94,7 @@ else icon_state = "[base_icon]-off" -/obj/machinery/atmospherics/components/binary/crystallizer/update_icon() +/obj/machinery/atmospherics/components/binary/crystallizer/update_appearance(updates = ALL) . = ..() update_icon_state() update_overlays() @@ -102,7 +104,7 @@ return on = !on investigate_log("was turned [on ? "on" : "off"] by [key_name(user)]", INVESTIGATE_ATMOS) - update_icon() + update_appearance(updates = ALL) ///Checks if the gases in the input are the ones needed by the recipe /obj/machinery/atmospherics/components/binary/crystallizer/proc/check_gas_requirements() @@ -341,7 +343,7 @@ var/_gas_input = params["gas_input"] gas_input = clamp(_gas_input, 0, max_gas_input) investigate_log("was set to [gas_input] by [key_name(usr)]", INVESTIGATE_ATMOS) - update_icon() + update_appearance(updates = ALL) #undef MIN_PROGRESS_AMOUNT #undef MIN_DEVIATION_RATE diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm index 4794b303f08e..39e99f35ed7b 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm @@ -21,7 +21,7 @@ var/msg = "was turned [on ? "on" : "off"] by [key_name(usr)]" investigate_log(msg, INVESTIGATE_ATMOS) investigate_log(msg, INVESTIGATE_SUPERMATTER) // yogs - make supermatter invest useful - update_icon() + update_appearance(updates = ALL) return ..() /obj/machinery/atmospherics/components/trinary/filter/AltClick(mob/user) @@ -31,7 +31,7 @@ investigate_log(msg, INVESTIGATE_ATMOS) investigate_log(msg, INVESTIGATE_SUPERMATTER) // yogs - make supermatter invest useful balloon_alert(user, "volume output set to [transfer_rate] L/s") - update_icon() + update_appearance(updates = ALL) return ..() /obj/machinery/atmospherics/components/trinary/filter/proc/set_frequency(new_frequency) @@ -44,7 +44,8 @@ SSradio.remove_object(src,frequency) return ..() -/obj/machinery/atmospherics/components/trinary/filter/update_icon() +/obj/machinery/atmospherics/components/trinary/filter/update_appearance(updates = ALL) + . = ..() cut_overlays() for(var/direction in GLOB.cardinals) if(!(direction & initialize_directions)) @@ -194,7 +195,7 @@ investigate_log(msg, INVESTIGATE_ATMOS) investigate_log(msg, INVESTIGATE_SUPERMATTER) // yogs - make supermatter invest useful . = TRUE - update_icon() + update_appearance(updates = ALL) /obj/machinery/atmospherics/components/trinary/filter/can_unwrench(mob/user) . = ..() diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm index e1b4960217e9..ae04f51ecc38 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm @@ -20,7 +20,7 @@ if(can_interact(user)) on = !on investigate_log("was turned [on ? "on" : "off"] by [key_name(usr)]", INVESTIGATE_ATMOS) - update_icon() + update_appearance(updates = ALL) return ..() /obj/machinery/atmospherics/components/trinary/mixer/AltClick(mob/user) @@ -28,10 +28,11 @@ target_pressure = MAX_OUTPUT_PRESSURE investigate_log("was set to [target_pressure] kPa by [key_name(usr)]", INVESTIGATE_ATMOS) balloon_alert(user, "pressure output on set to [target_pressure] kPa") - update_icon() + update_appearance(updates = ALL) return ..() -/obj/machinery/atmospherics/components/trinary/mixer/update_icon() +/obj/machinery/atmospherics/components/trinary/mixer/update_appearance(updates = ALL) + . = ..() cut_overlays() for(var/direction in GLOB.cardinals) if(!(direction & initialize_directions)) @@ -173,7 +174,7 @@ adjust_node1_value(100 - value) investigate_log("was set to [node2_concentration] % on node 2 by [key_name(usr)]", INVESTIGATE_ATMOS) . = TRUE - update_icon() + update_appearance(updates = ALL) /obj/machinery/atmospherics/components/trinary/mixer/proc/adjust_node1_value(newValue) node1_concentration = newValue / 100 diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm index 19a3c017abca..78ef9ed35219 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm @@ -54,7 +54,7 @@ var/oldoccupant = occupant . = ..() // Parent proc takes care of removing occupant if necessary if (AM == oldoccupant) - update_icon() + update_appearance(updates = ALL) /obj/machinery/atmospherics/components/unary/cryo_cell/on_construction() ..(dir, dir) @@ -102,7 +102,8 @@ beaker.forceMove(drop_location()) beaker = null -/obj/machinery/atmospherics/components/unary/cryo_cell/update_icon() +/obj/machinery/atmospherics/components/unary/cryo_cell/update_appearance(updates = ALL) + . = ..() cut_overlays() if(panel_open) @@ -181,7 +182,7 @@ return if(!is_operational()) on = FALSE - update_icon() + update_appearance(updates = ALL) return if(!occupant) return @@ -198,7 +199,7 @@ playsound(src,'sound/machines/cryo_warning_ignore.ogg',60,1) on = FALSE sleep(0.2 SECONDS)// here for timing. Shuts off right at climax of the effect before falloff. - update_icon() + update_appearance(updates = ALL) return var/robotic_limb_damage = 0 // brute and burn damage to robotic limbs @@ -223,7 +224,7 @@ treating_wounds = has_cryo_wound if(!treating_wounds) on = FALSE - update_icon() + update_appearance(updates = ALL) playsound(src, 'sound/machines/cryo_warning.ogg', volume) // Bug the doctors. var/msg = "Patient fully restored." if(robotic_limb_damage) @@ -270,7 +271,7 @@ if(!nodes[1] || !airs[1] || (air1.get_moles(/datum/gas/oxygen) < 5 && air1.get_moles(/datum/gas/pluoxium) < 5)) // Turn off if the machine won't work. on = FALSE - update_icon() + update_appearance(updates = ALL) return if(occupant) @@ -310,7 +311,7 @@ var/mob/living/L = M L.update_mobility() occupant = null - update_icon() + update_appearance(updates = ALL) /obj/machinery/atmospherics/components/unary/cryo_cell/close_machine(mob/living/carbon/user) treating_wounds = FALSE @@ -371,7 +372,7 @@ || default_change_direction_wrench(user, I) \ || default_pry_open(I) \ || default_deconstruction_crowbar(I)) - update_icon() + update_appearance(updates = ALL) return else if(I.tool_behaviour == TOOL_SCREWDRIVER) to_chat(user, "You can't access the maintenance panel while the pod is " \ @@ -465,7 +466,7 @@ log_game("[key_name(usr)] removed an [beaker] to cryo containing [beaker.reagents.reagent_list]") // yogs -- Adds logging for when the beaker's removed from cryo beaker = null . = TRUE - update_icon() + update_appearance(updates = ALL) /obj/machinery/atmospherics/components/unary/cryo_cell/update_remote_sight(mob/living/user) return // we don't see the pipe network while inside cryo. @@ -511,7 +512,7 @@ on = FALSE else if(!state_open) on = TRUE - update_icon() + update_appearance(updates = ALL) /obj/machinery/atmospherics/components/unary/cryo_cell/AltClick(mob/user) if(!user.canUseTopic(src, !issilicon(user))) @@ -522,6 +523,6 @@ close_machine() else open_machine() - update_icon() + update_appearance(updates = ALL) #undef CRYOMOBS diff --git a/code/modules/atmospherics/machinery/components/unary_devices/heat_exchanger.dm b/code/modules/atmospherics/machinery/components/unary_devices/heat_exchanger.dm index 3cfca0993886..49b9a11a04ad 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/heat_exchanger.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/heat_exchanger.dm @@ -23,7 +23,8 @@ piping_layer = 4 icon_state = "he_map-4" -/obj/machinery/atmospherics/components/unary/heat_exchanger/update_icon() +/obj/machinery/atmospherics/components/unary/heat_exchanger/update_appearance(updates = ALL) + . = ..() if(nodes[1]) icon_state = "he1" var/obj/machinery/atmospherics/node = nodes[1] diff --git a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm index f48524d90e3e..313d05644d0c 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm @@ -28,7 +28,7 @@ if(can_interact(user)) on = !on investigate_log("was turned [on ? "on" : "off"] by [key_name(usr)]", INVESTIGATE_ATMOS) - update_icon() + update_appearance(updates = ALL) return ..() /obj/machinery/atmospherics/components/unary/outlet_injector/AltClick(mob/user) @@ -36,7 +36,7 @@ volume_rate = MAX_TRANSFER_RATE investigate_log("was set to [volume_rate] L/s by [key_name(usr)]", INVESTIGATE_ATMOS) balloon_alert(user, "volume output set to [volume_rate] L/s") - update_icon() + update_appearance(updates = ALL) return ..() /obj/machinery/atmospherics/components/unary/outlet_injector/Destroy() @@ -145,7 +145,7 @@ spawn(2) broadcast_status() - update_icon() + update_appearance(updates = ALL) /obj/machinery/atmospherics/components/unary/outlet_injector/ui_interact(mob/user, datum/tgui/ui) @@ -185,7 +185,7 @@ if(.) volume_rate = clamp(rate, 0, MAX_TRANSFER_RATE) investigate_log("was set to [volume_rate] L/s by [key_name(usr)]", INVESTIGATE_ATMOS) - update_icon() + update_appearance(updates = ALL) broadcast_status() /obj/machinery/atmospherics/components/unary/outlet_injector/can_unwrench(mob/user) @@ -199,7 +199,7 @@ return on = !on investigate_log("was turned [on ? "on" : "off"] by [key_name(usr)]", INVESTIGATE_ATMOS) - update_icon() + update_appearance(updates = ALL) // mapping diff --git a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm index 62c5ef10b2ad..5e1b1524ec30 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm @@ -39,7 +39,8 @@ B += M.rating heat_capacity = 5000 * ((B - 1) ** 2) -/obj/machinery/atmospherics/components/unary/thermomachine/update_icon() +/obj/machinery/atmospherics/components/unary/thermomachine/update_appearance(updates = ALL) + . = ..() cut_overlays() if(panel_open) @@ -68,7 +69,7 @@ if(can_interact(user)) on = !on investigate_log("was turned [on ? "on" : "off"] by [key_name(usr)]", INVESTIGATE_ATMOS) - update_icon() + update_appearance(updates = ALL) return ..() /obj/machinery/atmospherics/components/unary/thermomachine/AltClick(mob/living/user) @@ -183,7 +184,7 @@ target_temperature = clamp(target, min_temperature, max_temperature) investigate_log("was set to [target_temperature] K by [key_name(usr)]", INVESTIGATE_ATMOS) - update_icon() + update_appearance(updates = ALL) /obj/machinery/atmospherics/components/unary/thermomachine/freezer name = "freezer" diff --git a/code/modules/atmospherics/machinery/components/unary_devices/unary_devices.dm b/code/modules/atmospherics/machinery/components/unary_devices/unary_devices.dm index e095517775f1..d5ca80df352d 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/unary_devices.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/unary_devices.dm @@ -18,10 +18,10 @@ /obj/machinery/atmospherics/components/unary/on_construction() ..() - update_icon() + update_appearance(updates = ALL) /obj/machinery/atmospherics/components/unary/hide(intact) - update_icon() + update_appearance(updates = ALL) ..(intact) /obj/machinery/atmospherics/components/unary/proc/assign_uid_vents() diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm index c61b24eabb59..27d1d148bfcd 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm @@ -119,7 +119,7 @@ space_shutoff_ticks-- if(space_shutoff_ticks <= 1 && !on) on = TRUE - update_icon() + update_appearance(updates = ALL) if(!nodes[1]) on = FALSE if(!on || welded) @@ -137,7 +137,7 @@ last_moles_added = 0 on = FALSE space_shutoff_ticks = 20 // shut off for about 20 seconds before trying again. - update_icon() + update_appearance(updates = ALL) return if(pump_direction & RELEASING) // internal -> external @@ -302,7 +302,7 @@ // log_admin("DEBUG \[[world.timeofday]\]: vent_pump/receive_signal: unknown command \"[signal.data["command"]]\"\n[signal.debug_print()]") broadcast_status() - update_icon() + update_appearance(updates = ALL) /obj/machinery/atmospherics/components/unary/vent_pump/welder_act(mob/living/user, obj/item/I) if(!I.tool_start_check(user, amount=0)) @@ -315,7 +315,7 @@ else user.visible_message("[user] unwelded the vent.", span_notice("You unweld the vent."), span_italics("You hear welding.")) welded = FALSE - update_icon() + update_appearance(updates = ALL) pipe_vision_img = image(src, loc, layer = ABOVE_HUD_LAYER, dir = dir) pipe_vision_img.plane = ABOVE_HUD_PLANE investigate_log("was [welded ? "welded shut" : "unwelded"] by [key_name(user)]", INVESTIGATE_ATMOS) @@ -345,7 +345,7 @@ return user.visible_message("[user] furiously claws at [src]!", "You manage to clear away the stuff blocking the vent", "You hear loud scraping noises.") welded = FALSE - update_icon() + update_appearance(updates = ALL) pipe_vision_img = image(src, loc, layer = ABOVE_HUD_LAYER, dir = dir) pipe_vision_img.plane = ABOVE_HUD_PLANE playsound(loc, 'sound/weapons/bladeslice.ogg', 100, 1) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm index 672fa9af62c9..e8a2594ff208 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm @@ -243,7 +243,7 @@ return //do not update_icon broadcast_status() - update_icon() + update_appearance(updates = ALL) return /obj/machinery/atmospherics/components/unary/vent_scrubber/power_change() @@ -261,7 +261,7 @@ else user.visible_message("[user] unwelds the scrubber.", "You unweld the scrubber.", "You hear welding.") welded = FALSE - update_icon() + update_appearance(updates = ALL) pipe_vision_img = image(src, loc, layer = ABOVE_HUD_LAYER, dir = dir) pipe_vision_img.plane = ABOVE_HUD_PLANE investigate_log("was [welded ? "welded shut" : "unwelded"] by [key_name(user)]", INVESTIGATE_ATMOS) @@ -287,7 +287,7 @@ return user.visible_message("[user] furiously claws at [src]!", "You manage to clear away the stuff blocking the scrubber.", "You hear loud scraping noises.") welded = FALSE - update_icon() + update_appearance(updates = ALL) pipe_vision_img = image(src, loc, layer = ABOVE_HUD_LAYER, dir = dir) pipe_vision_img.plane = ABOVE_HUD_PLANE playsound(loc, 'sound/weapons/bladeslice.ogg', 100, 1) diff --git a/code/modules/atmospherics/machinery/other/miner.dm b/code/modules/atmospherics/machinery/other/miner.dm index b6a6290539d9..83fc480c432e 100644 --- a/code/modules/atmospherics/machinery/other/miner.dm +++ b/code/modules/atmospherics/machinery/other/miner.dm @@ -71,12 +71,12 @@ /obj/machinery/atmospherics/miner/proc/set_active(setting) if(active != setting) active = setting - update_icon() + update_appearance(updates = ALL) /obj/machinery/atmospherics/miner/proc/set_broken(setting) if(broken != setting) broken = setting - update_icon() + update_appearance(updates = ALL) /obj/machinery/atmospherics/miner/proc/update_power() if(!active) @@ -108,7 +108,8 @@ return TRUE return FALSE -/obj/machinery/atmospherics/miner/update_icon() +/obj/machinery/atmospherics/miner/update_appearance(updates = ALL) + . = ..() cut_overlays() if(broken) add_overlay("broken") diff --git a/code/modules/atmospherics/machinery/pipes/heat_exchange/junction.dm b/code/modules/atmospherics/machinery/pipes/heat_exchange/junction.dm index 10b8fff66ae3..075d37dc9ee8 100644 --- a/code/modules/atmospherics/machinery/pipes/heat_exchange/junction.dm +++ b/code/modules/atmospherics/machinery/pipes/heat_exchange/junction.dm @@ -30,7 +30,8 @@ return ..(target, given_layer, FALSE) //we want a normal pipe instead return ..(target, given_layer, TRUE) -/obj/machinery/atmospherics/pipe/heat_exchanging/junction/update_icon() +/obj/machinery/atmospherics/pipe/heat_exchanging/junction/update_appearance(updates = ALL) + . = ..() icon_state = "pipe[nodes[1] ? "1" : "0"][nodes[2] ? "1" : "0"]-[piping_layer]" update_layer() update_alpha() diff --git a/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold.dm b/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold.dm index ab63bddb6a14..4fe3d4832434 100644 --- a/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold.dm +++ b/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold.dm @@ -26,7 +26,8 @@ initialize_directions = NORTH|SOUTH|EAST|WEST initialize_directions &= ~dir -/obj/machinery/atmospherics/pipe/heat_exchanging/manifold/update_icon() +/obj/machinery/atmospherics/pipe/heat_exchanging/manifold/update_appearance(updates = ALL) + . = ..() cut_overlays() PIPING_LAYER_DOUBLE_SHIFT(center, piping_layer) diff --git a/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold4w.dm b/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold4w.dm index fddd9ea8b079..f451b690827d 100644 --- a/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold4w.dm +++ b/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold4w.dm @@ -24,7 +24,8 @@ /obj/machinery/atmospherics/pipe/heat_exchanging/manifold4w/SetInitDirections() initialize_directions = initial(initialize_directions) -/obj/machinery/atmospherics/pipe/heat_exchanging/manifold4w/update_icon() +/obj/machinery/atmospherics/pipe/heat_exchanging/manifold4w/update_appearance(updates = ALL) + . = ..() cut_overlays() PIPING_LAYER_DOUBLE_SHIFT(center, piping_layer) diff --git a/code/modules/atmospherics/machinery/pipes/heat_exchange/simple.dm b/code/modules/atmospherics/machinery/pipes/heat_exchange/simple.dm index fd013e11bd36..4e25131645e0 100644 --- a/code/modules/atmospherics/machinery/pipes/heat_exchange/simple.dm +++ b/code/modules/atmospherics/machinery/pipes/heat_exchange/simple.dm @@ -24,7 +24,8 @@ if(EAST, WEST) initialize_directions = EAST|WEST -/obj/machinery/atmospherics/pipe/heat_exchanging/simple/update_icon() +/obj/machinery/atmospherics/pipe/heat_exchanging/simple/update_appearance(updates = ALL) + . = ..() icon_state = "pipe[nodes[1] ? "1" : "0"][nodes[2] ? "1" : "0"]-[piping_layer]" update_layer() update_alpha() diff --git a/code/modules/atmospherics/machinery/pipes/layermanifold.dm b/code/modules/atmospherics/machinery/pipes/layermanifold.dm index 40eeb619ba4f..cca7d01a40a4 100644 --- a/code/modules/atmospherics/machinery/pipes/layermanifold.dm +++ b/code/modules/atmospherics/machinery/pipes/layermanifold.dm @@ -42,7 +42,8 @@ /obj/machinery/atmospherics/pipe/layer_manifold/proc/get_all_connected_nodes() return front_nodes + back_nodes + nodes -/obj/machinery/atmospherics/pipe/layer_manifold/update_icon() //HEAVILY WIP FOR UPDATE ICONS!! +/obj/machinery/atmospherics/pipe/layer_manifold/update_appearance(updates = ALL) + . = ..() //HEAVILY WIP FOR UPDATE ICONS!! cut_overlays() layer = initial(layer) + (PIPING_LAYER_MAX * PIPING_LAYER_LCHANGE) //This is above everything else. @@ -99,7 +100,7 @@ new_nodes += foundfront if(foundback && !QDELETED(foundback)) new_nodes += foundback - update_icon() + update_appearance(updates = ALL) return new_nodes /obj/machinery/atmospherics/pipe/layer_manifold/atmosinit() @@ -128,7 +129,7 @@ if(reference in back_nodes) var/i = back_nodes.Find(reference) back_nodes[i] = null - update_icon() + update_appearance(updates = ALL) /obj/machinery/atmospherics/pipe/layer_manifold/relaymove(mob/living/user, dir) if(initialize_directions & dir) diff --git a/code/modules/atmospherics/machinery/pipes/manifold.dm b/code/modules/atmospherics/machinery/pipes/manifold.dm index e051cf04f92f..cd2935e4b593 100644 --- a/code/modules/atmospherics/machinery/pipes/manifold.dm +++ b/code/modules/atmospherics/machinery/pipes/manifold.dm @@ -22,8 +22,8 @@ var/mutable_appearance/center -/* We use New() instead of Initialize(mapload) because these values are used in update_icon() - * in the mapping subsystem init before Initialize(mapload) is called in the atoms subsystem init. +/* We use New() instead of Initialize() because these values are used in update_appearance(updates = ALL) + * in the mapping subsystem init before Initialize() is called in the atoms subsystem init. * This is true for the other manifolds (the 4 ways and the heat exchanges) too. */ /obj/machinery/atmospherics/pipe/manifold/New() @@ -35,7 +35,8 @@ initialize_directions = NORTH|SOUTH|EAST|WEST initialize_directions &= ~dir -/obj/machinery/atmospherics/pipe/manifold/update_icon() +/obj/machinery/atmospherics/pipe/manifold/update_appearance(updates = ALL) + . = ..() cut_overlays() if(!center) center = mutable_appearance(icon, "manifold_center") diff --git a/code/modules/atmospherics/machinery/pipes/manifold4w.dm b/code/modules/atmospherics/machinery/pipes/manifold4w.dm index 75aa68046046..09b3d681ce69 100644 --- a/code/modules/atmospherics/machinery/pipes/manifold4w.dm +++ b/code/modules/atmospherics/machinery/pipes/manifold4w.dm @@ -29,7 +29,8 @@ /obj/machinery/atmospherics/pipe/manifold4w/SetInitDirections() initialize_directions = initial(initialize_directions) -/obj/machinery/atmospherics/pipe/manifold4w/update_icon() +/obj/machinery/atmospherics/pipe/manifold4w/update_appearance(updates = ALL) + . = ..() cut_overlays() if(!center) center = mutable_appearance(icon, "manifold_center") diff --git a/code/modules/atmospherics/machinery/pipes/pipes.dm b/code/modules/atmospherics/machinery/pipes/pipes.dm index 2d9dfc0b4a13..cda15529ac54 100644 --- a/code/modules/atmospherics/machinery/pipes/pipes.dm +++ b/code/modules/atmospherics/machinery/pipes/pipes.dm @@ -45,7 +45,7 @@ /obj/machinery/atmospherics/pipe/hide(i) if(level == 1 && isturf(loc)) invisibility = i ? INVISIBILITY_MAXIMUM : 0 - update_icon() + update_appearance(updates = ALL) /obj/machinery/atmospherics/pipe/proc/releaseAirToTurf() if(air_temporary) @@ -98,7 +98,7 @@ qdel(meter) . = ..() -/obj/machinery/atmospherics/pipe/update_icon() +/obj/machinery/atmospherics/pipe/update_appearance(updates = ALL) . = ..() update_alpha() @@ -109,7 +109,7 @@ for(var/i in 1 to device_type) if(nodes[i]) var/obj/machinery/atmospherics/N = nodes[i] - N.update_icon() + N.update_appearance(updates = ALL) /obj/machinery/atmospherics/pipe/return_pipenets() . = list(parent) diff --git a/code/modules/atmospherics/machinery/pipes/simple.dm b/code/modules/atmospherics/machinery/pipes/simple.dm index 00d24cebda5e..fad19101a2ab 100644 --- a/code/modules/atmospherics/machinery/pipes/simple.dm +++ b/code/modules/atmospherics/machinery/pipes/simple.dm @@ -32,7 +32,8 @@ if(EAST, WEST) initialize_directions = EAST|WEST -/obj/machinery/atmospherics/pipe/simple/update_icon() +/obj/machinery/atmospherics/pipe/simple/update_appearance(updates = ALL) + . = ..() icon_state = "pipe[nodes[1] ? "1" : "0"][nodes[2] ? "1" : "0"]-[piping_layer]" update_layer() update_alpha() diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm index 632d2a6ed27c..58fdf053b8eb 100644 --- a/code/modules/atmospherics/machinery/portable/canister.dm +++ b/code/modules/atmospherics/machinery/portable/canister.dm @@ -236,7 +236,7 @@ timing = !timing if(timing) valve_timer = world.time + (timer_set * 10) - update_icon() + update_appearance(updates = ALL) /obj/machinery/portable_atmospherics/canister/proto name = "prototype canister" @@ -274,7 +274,7 @@ /obj/machinery/portable_atmospherics/canister/Initialize(mapload) . = ..() - update_icon() + update_appearance(updates = ALL) /obj/machinery/portable_atmospherics/canister/Destroy() qdel(pump) @@ -308,7 +308,8 @@ #define CANISTER_LIGHT_RANGE 0.4 #define CANISTER_LIGHT_POWER 0.5 -/obj/machinery/portable_atmospherics/canister/update_icon() +/obj/machinery/portable_atmospherics/canister/update_appearance(updates = ALL) + . = ..() if(stat & BROKEN) cut_overlays() SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays) @@ -476,7 +477,7 @@ if(.) if(close_valve) valve_open = FALSE - update_icon() + update_appearance(updates = ALL) investigate_log("Valve was closed by [key_name(user)].
    ", INVESTIGATE_ATMOS) else if(valve_open && holding) investigate_log("[key_name(user)] started a transfer into [holding].
    ", INVESTIGATE_ATMOS) @@ -501,7 +502,7 @@ pump.airs[1] = null pump.airs[2] = null - update_icon() + update_appearance(updates = ALL) /obj/machinery/portable_atmospherics/canister/ui_state(mob/user) return GLOB.physical_state @@ -647,7 +648,7 @@ investigate_log("[key_name(usr)] removed the [holding], leaving the valve open and transferring into the [span_boldannounce("air")].", INVESTIGATE_ATMOS) replace_tank(usr, FALSE) . = TRUE - update_icon() + update_appearance(updates = ALL) /obj/machinery/portable_atmospherics/canister/examine(mob/dead/observer/user) if(istype(user)) diff --git a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm index 6651e9376774..d7122f4162e6 100644 --- a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm +++ b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm @@ -70,7 +70,7 @@ anchored = TRUE //Prevent movement pixel_x = new_port.pixel_x pixel_y = new_port.pixel_y - update_icon() + update_appearance(updates = ALL) return TRUE /obj/machinery/portable_atmospherics/Move() @@ -86,7 +86,7 @@ connected_port = null pixel_x = 0 pixel_y = 0 - update_icon() + update_appearance(updates = ALL) return TRUE /obj/machinery/portable_atmospherics/AltClick(mob/living/user) @@ -111,7 +111,7 @@ holding = new_tank else holding = null - update_icon() + update_appearance(updates = ALL) return TRUE /obj/machinery/portable_atmospherics/attackby(obj/item/W, mob/user, params) @@ -122,7 +122,7 @@ return to_chat(user, span_notice("[holding ? "In one smooth motion you pop [holding] out of [src]'s connector and replace it with [T]" : "You insert [T] into [src]"].")) replace_tank(user, FALSE, T) - update_icon() + update_appearance(updates = ALL) else if(W.tool_behaviour == TOOL_WRENCH) if(!(stat & BROKEN)) if(connected_port) @@ -132,7 +132,7 @@ "[user] disconnects [src].", \ span_notice("You unfasten [src] from the port."), \ span_italics("You hear a ratchet.")) - update_icon() + update_appearance(updates = ALL) return else var/obj/machinery/atmospherics/components/unary/portables_connector/possible_port = locate(/obj/machinery/atmospherics/components/unary/portables_connector) in loc @@ -147,7 +147,7 @@ "[user] connects [src].", \ span_notice("You fasten [src] to the port."), \ span_italics("You hear a ratchet.")) - update_icon() + update_appearance(updates = ALL) else return ..() diff --git a/code/modules/atmospherics/machinery/portable/pump.dm b/code/modules/atmospherics/machinery/portable/pump.dm index c5558ef62a09..9f1de8d484ee 100644 --- a/code/modules/atmospherics/machinery/portable/pump.dm +++ b/code/modules/atmospherics/machinery/portable/pump.dm @@ -29,7 +29,8 @@ QDEL_NULL(pump) return ..() -/obj/machinery/portable_atmospherics/pump/update_icon() +/obj/machinery/portable_atmospherics/pump/update_appearance(updates = ALL) + . = ..() icon_state = "psiphon:[on]" cut_overlays() @@ -67,7 +68,7 @@ if(prob(100 / severity)) direction = PUMP_OUT pump.target_pressure = rand(0, 100 * ONE_ATMOSPHERE) - update_icon() + update_appearance(updates = ALL) /obj/machinery/portable_atmospherics/pump/replace_tank(mob/living/user, close_valve) . = ..() @@ -75,7 +76,7 @@ if(close_valve) if(on) on = FALSE - update_icon() + update_appearance(updates = ALL) else if(on && holding && direction == PUMP_OUT) investigate_log("[key_name(user)] started a transfer into [holding].
    ", INVESTIGATE_ATMOS) @@ -153,10 +154,10 @@ if(holding) replace_tank(usr, FALSE) . = TRUE - update_icon() + update_appearance(updates = ALL) /obj/machinery/portable_atmospherics/pump/CtrlShiftClick(mob/user) if(!user.canUseTopic(src, BE_CLOSE)) return on = !on - update_icon() + update_appearance(updates = ALL) diff --git a/code/modules/atmospherics/machinery/portable/scrubber.dm b/code/modules/atmospherics/machinery/portable/scrubber.dm index 6d9e143dbfcc..923da8360818 100644 --- a/code/modules/atmospherics/machinery/portable/scrubber.dm +++ b/code/modules/atmospherics/machinery/portable/scrubber.dm @@ -36,7 +36,8 @@ air_update_turf() return ..() -/obj/machinery/portable_atmospherics/scrubber/update_icon() +/obj/machinery/portable_atmospherics/scrubber/update_appearance(updates = ALL) + . = ..() icon_state = "pscrubber:[on]" cut_overlays() @@ -79,7 +80,7 @@ if(is_operational()) if(prob(50 / severity)) on = !on - update_icon() + update_appearance(updates = ALL) /obj/machinery/portable_atmospherics/scrubber/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) @@ -113,7 +114,7 @@ if(close_valve) if(on) on = FALSE - update_icon() + update_appearance(updates = ALL) else if(on && holding) investigate_log("[key_name(user)] started a transfer into [holding].
    ", INVESTIGATE_ATMOS) @@ -131,7 +132,7 @@ if("toggle_filter") scrubbing ^= gas_id2path(params["val"]) . = TRUE - update_icon() + update_appearance(updates = ALL) /obj/machinery/portable_atmospherics/scrubber/huge name = "huge air scrubber" @@ -149,13 +150,14 @@ /obj/machinery/portable_atmospherics/scrubber/huge/movable movable = TRUE -/obj/machinery/portable_atmospherics/scrubber/huge/update_icon() +/obj/machinery/portable_atmospherics/scrubber/huge/update_appearance(updates = ALL) + . = ..() icon_state = "scrubber:[on]" /obj/machinery/portable_atmospherics/scrubber/huge/process_atmos() if((!anchored && !movable) || !is_operational()) on = FALSE - update_icon() + update_appearance(updates = ALL) use_power = on ? ACTIVE_POWER_USE : IDLE_POWER_USE if(!on) return @@ -176,4 +178,4 @@ if(!user.canUseTopic(src, BE_CLOSE)) return on = !on - update_icon() + update_appearance(updates = ALL) diff --git a/code/modules/awaymissions/gateway.dm b/code/modules/awaymissions/gateway.dm index c183a67a633d..9a397eda7578 100644 --- a/code/modules/awaymissions/gateway.dm +++ b/code/modules/awaymissions/gateway.dm @@ -16,7 +16,7 @@ GLOBAL_DATUM(the_gateway, /obj/machinery/gateway/centerstation) /obj/machinery/gateway/Initialize(mapload) randomspawns = GLOB.awaydestinations - update_icon() + update_appearance(updates = ALL) if(!istype(src, /obj/machinery/gateway/centerstation) && !istype(src, /obj/machinery/gateway/centeraway)) switch(dir) if(SOUTH,SOUTHEAST,SOUTHWEST) @@ -26,9 +26,9 @@ GLOBAL_DATUM(the_gateway, /obj/machinery/gateway/centerstation) /obj/machinery/gateway/proc/toggleoff() for(var/obj/machinery/gateway/G in linked) G.active = 0 - G.update_icon() + G.update_appearance(updates = ALL) active = 0 - update_icon() + update_appearance(updates = ALL) /obj/machinery/gateway/proc/detect() if(!can_link) @@ -53,7 +53,8 @@ GLOBAL_DATUM(the_gateway, /obj/machinery/gateway/centerstation) ready = TRUE return ready -/obj/machinery/gateway/update_icon() +/obj/machinery/gateway/update_appearance(updates = ALL) + . = ..() if(active) icon_state = "on" return @@ -80,7 +81,7 @@ GLOBAL_DATUM(the_gateway, /obj/machinery/gateway/centerstation) . = ..() if(!GLOB.the_gateway) GLOB.the_gateway = src - update_icon() + update_appearance(updates = ALL) wait = world.time + CONFIG_GET(number/gateway_delay) //+ thirty minutes default awaygate = locate(/obj/machinery/gateway/centeraway) @@ -100,7 +101,8 @@ GLOBAL_DATUM(the_gateway, /obj/machinery/gateway/centerstation) var/obj/machinery/gateway/centeraway/awaygate = null can_link = TRUE -/obj/machinery/gateway/centerstation/update_icon() +/obj/machinery/gateway/centerstation/update_appearance(updates = ALL) + . = ..() if(active) icon_state = "oncenter" return @@ -129,9 +131,9 @@ GLOBAL_DATUM(the_gateway, /obj/machinery/gateway/centerstation) for(var/obj/machinery/gateway/G in linked) G.active = 1 - G.update_icon() + G.update_appearance(updates = ALL) active = 1 - update_icon() + update_appearance(updates = ALL) //okay, here's the good teleporting stuff /obj/machinery/gateway/centerstation/Bumped(atom/movable/AM) @@ -179,11 +181,12 @@ GLOBAL_DATUM(the_gateway, /obj/machinery/gateway/centerstation) /obj/machinery/gateway/centeraway/Initialize(mapload) . = ..() - update_icon() + update_appearance(updates = ALL) stationgate = locate(/obj/machinery/gateway/centerstation) -/obj/machinery/gateway/centeraway/update_icon() +/obj/machinery/gateway/centeraway/update_appearance(updates = ALL) + . = ..() if(active) icon_state = "oncenter" return @@ -198,9 +201,9 @@ GLOBAL_DATUM(the_gateway, /obj/machinery/gateway/centerstation) for(var/obj/machinery/gateway/G in linked) G.active = 1 - G.update_icon() + G.update_appearance(updates = ALL) active = 1 - update_icon() + update_appearance(updates = ALL) /obj/machinery/gateway/centeraway/proc/check_exile_implant(mob/living/L) for(var/obj/item/implant/exile/E in L.implants)//Checking that there is an exile implant @@ -250,4 +253,4 @@ GLOBAL_DATUM(the_gateway, /obj/machinery/gateway/centerstation) /obj/item/paper/fluff/gateway info = "Congratulations,

    Your station has been selected to carry out the Gateway Project.

    The equipment will be shipped to you at the start of the next quarter.
    You are to prepare a secure location to house the equipment as outlined in the attached documents.

    --Nanotrasen Bluespace Research" - name = "Confidential Correspondence, Pg 1" \ No newline at end of file + name = "Confidential Correspondence, Pg 1" diff --git a/code/modules/awaymissions/mission_code/Academy.dm b/code/modules/awaymissions/mission_code/Academy.dm index b6e9e8ca6ba2..4cd2f39cf900 100644 --- a/code/modules/awaymissions/mission_code/Academy.dm +++ b/code/modules/awaymissions/mission_code/Academy.dm @@ -413,8 +413,9 @@ icon_state = "1" color = rgb(0,0,255) -/obj/structure/ladder/unbreakable/rune/update_icon() - return +/obj/structure/ladder/unbreakable/rune/Initialize(mapload) + AddElement(/datum/element/update_icon_blocker) + return ..() /obj/structure/ladder/unbreakable/rune/show_fluff_message(up,mob/user) user.visible_message("[user] activates \the [src].",span_notice("You activate \the [src].")) diff --git a/code/modules/awaymissions/pamphlet.dm b/code/modules/awaymissions/pamphlet.dm index 7cbbde096d6e..b28f517ea93b 100644 --- a/code/modules/awaymissions/pamphlet.dm +++ b/code/modules/awaymissions/pamphlet.dm @@ -35,5 +35,6 @@ environs." //we don't want the silly text overlay! -/obj/item/paper/pamphlet/update_icon() - return +/obj/item/paper/pamphlet/Initialize(mapload) + AddElement(/datum/element/update_icon_blocker) + return ..() diff --git a/code/modules/buildmode/buildmode.dm b/code/modules/buildmode/buildmode.dm index a65843e618e0..02a0e42e4b08 100644 --- a/code/modules/buildmode/buildmode.dm +++ b/code/modules/buildmode/buildmode.dm @@ -134,12 +134,12 @@ close_switchstates() mode = new newmode(src) mode.enter_mode(src) - modebutton.update_icon() + modebutton.update_appearance(updates = ALL) /datum/buildmode/proc/change_dir(newdir) build_dir = newdir close_dirswitch() - dirbutton.update_icon() + dirbutton.update_appearance(updates = ALL) return 1 /datum/buildmode/proc/InterceptClickOn(mob/user, params, atom/object) diff --git a/code/modules/buildmode/buttons.dm b/code/modules/buildmode/buttons.dm index a60f105f8321..88af90f667bd 100644 --- a/code/modules/buildmode/buttons.dm +++ b/code/modules/buildmode/buttons.dm @@ -24,14 +24,15 @@ bd.toggle_modeswitch() else if(pa.Find("right")) bd.mode.change_settings(usr.client) - update_icon() + update_appearance(updates = ALL) return 1 -/atom/movable/screen/buildmode/mode/update_icon() - if(bd && bd.mode) +/atom/movable/screen/buildmode/mode/update_icon_state() + if(bd?.mode) icon_state = bd.mode.get_button_iconstate() else icon_state = initial(icon_state) + return ..() /atom/movable/screen/buildmode/help icon_state = "buildhelp" @@ -47,13 +48,13 @@ screen_loc = "NORTH,WEST+2" name = "Change Dir" -/atom/movable/screen/buildmode/bdir/update_icon() +/atom/movable/screen/buildmode/bdir/update_icon_state() dir = bd.build_dir - return + return ..() /atom/movable/screen/buildmode/bdir/Click() bd.toggle_dirswitch() - update_icon() + update_appearance(updates = ALL) return 1 // used to switch between modes diff --git a/code/modules/cargo/bounty_console.dm b/code/modules/cargo/bounty_console.dm index 1059bb18e716..ed8ba3bad062 100644 --- a/code/modules/cargo/bounty_console.dm +++ b/code/modules/cargo/bounty_console.dm @@ -23,7 +23,7 @@ /obj/item/paper/bounty_printout/Initialize(mapload) . = ..() info = "

    Nanotrasen Cargo Bounties


    " - update_icon() + update_appearance(updates = ALL) for(var/datum/bounty/B in GLOB.bounties_list) if(B.claimed) continue diff --git a/code/modules/cargo/centcom_podlauncher.dm b/code/modules/cargo/centcom_podlauncher.dm index 40bf5def556a..1941fe5821f6 100644 --- a/code/modules/cargo/centcom_podlauncher.dm +++ b/code/modules/cargo/centcom_podlauncher.dm @@ -714,7 +714,7 @@ if (isnull(target_turf)) return var/obj/structure/closet/supplypod/centcompod/toLaunch = DuplicateObject(temp_pod) //Duplicate the temp_pod (which we have been varediting or configuring with the UI) and store the result - toLaunch.update_icon()//we update_icon() here so that the door doesnt "flicker on" right after it lands + toLaunch.update_appearance(updates = ALL)//we update_appearance(updates = ALL) here so that the door doesnt "flicker on" right after it lands var/shippingLane = GLOB.areas_by_type[/area/centcom/supplypod/podStorage] toLaunch.forceMove(shippingLane) if (launchClone) //We arent launching the actual items from the bay, rather we are creating clones and launching those diff --git a/code/modules/cargo/expressconsole.dm b/code/modules/cargo/expressconsole.dm index c9d22a586f26..4a712e51d4ac 100644 --- a/code/modules/cargo/expressconsole.dm +++ b/code/modules/cargo/expressconsole.dm @@ -192,7 +192,7 @@ . = TRUE message_admins("[ADMIN_LOOKUPFLW(usr)] has ordered a [SO.pack.name] pod at location [ADMIN_VERBOSEJMP(LZ)]") investigate_log("Order #[SO.id] ([SO.pack.name], placed by [key_name(SO.orderer_ckey)]), paid by [D.account_holder] has shipped.", INVESTIGATE_CARGO) - update_icon() + update_appearance(updates = ALL) else if(SO.pack.get_cost() * (0.72*MAX_EMAG_ROCKETS) <= points_to_check) // bulk discount :^) landingzone = GLOB.areas_by_type[pick(GLOB.the_station_areas)] //override default landing zone @@ -212,7 +212,7 @@ new /obj/effect/DPtarget(LZ, podType, SO) amountordered++ . = TRUE - update_icon() + update_appearance(updates = ALL) CHECK_TICK message_admins("[ADMIN_LOOKUPFLW(usr)] has ordered a [SO.pack.name] pod x[amountordered] at location [ADMIN_VERBOSEJMP(LZ)]") investigate_log("Order #[SO.id] ([SO.pack.name] x[amountordered], placed by [key_name(SO.orderer_ckey)]), paid by [D.account_holder] has shipped.", INVESTIGATE_CARGO) diff --git a/code/modules/cargo/gondolapod.dm b/code/modules/cargo/gondolapod.dm index 7ae9c3426c5e..f47f42f54c75 100644 --- a/code/modules/cargo/gondolapod.dm +++ b/code/modules/cargo/gondolapod.dm @@ -29,11 +29,9 @@ name = linked_pod.name . = ..() -/mob/living/simple_animal/pet/gondola/gondolapod/update_icon() - if(opened) - icon_state = "gondolapod_open" - else - icon_state = "gondolapod" +/mob/living/simple_animal/pet/gondola/gondolapod/update_icon_state() + icon_state = "gondolapod[opened ? "_open" : ""]" + return ..() /mob/living/simple_animal/pet/gondola/gondolapod/verb/deliver() set name = "Release Contents" @@ -60,12 +58,12 @@ /mob/living/simple_animal/pet/gondola/gondolapod/setOpened() opened = TRUE - update_icon() + update_appearance(updates = ALL) addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, setClosed)), 50) /mob/living/simple_animal/pet/gondola/gondolapod/setClosed() opened = FALSE - update_icon() + update_appearance(updates = ALL) /mob/living/simple_animal/pet/gondola/gondolapod/death() qdel(linked_pod) //Will cause the open() proc for the linked supplypod to be called with the "broken" parameter set to true, meaning that it will dump its contents on death diff --git a/code/modules/cargo/order.dm b/code/modules/cargo/order.dm index ca7883ffb2bf..6a7537d79928 100644 --- a/code/modules/cargo/order.dm +++ b/code/modules/cargo/order.dm @@ -54,7 +54,7 @@ P.info += "Rank: [orderer_rank]
    " P.info += "Comment: [reason]
    " - P.update_icon() + P.update_appearance(updates = ALL) return P /datum/supply_order/proc/generateManifest(obj/structure/closet/crate/C, owner, packname) //generates-the-manifests. @@ -92,10 +92,10 @@ while(--lost >= 0) qdel(pick(C.contents)) - P.update_icon() + P.update_appearance(updates = ALL) P.forceMove(C) C.manifest = P - C.update_icon() + C.update_appearance(updates = ALL) return P diff --git a/code/modules/cargo/supplypod.dm b/code/modules/cargo/supplypod.dm index f7c55fc15716..c491d07c682a 100644 --- a/code/modules/cargo/supplypod.dm +++ b/code/modules/cargo/supplypod.dm @@ -58,8 +58,6 @@ var/list/reverse_option_list = list("Mobs"=FALSE,"Objects"=FALSE,"Anchored"=FALSE,"Underfloor"=FALSE,"Wallmounted"=FALSE,"Floors"=FALSE,"Walls"=FALSE, "Mecha"=FALSE) var/list/turfs_in_cargo = list() - var/list/managed_overlays - /obj/structure/closet/supplypod/bluespacepod style = STYLE_BLUESPACE bluespace = TRUE @@ -109,7 +107,7 @@ door = "[base]_door" else door = FALSE - update_icon() + update_appearance(updates = ALL) /obj/structure/closet/supplypod/proc/SetReverseIcon() fin_mask = "bottomfin" @@ -117,7 +115,7 @@ icon_state = GLOB.podstyles[style][POD_BASE] + "_reverse" pixel_x = initial(pixel_x) transform = matrix() - update_icon() + update_appearance(updates = ALL) /obj/structure/closet/supplypod/proc/backToNonReverseIcon() fin_mask = initial(fin_mask) @@ -125,19 +123,13 @@ icon_state = GLOB.podstyles[style][POD_BASE] pixel_x = initial(pixel_x) transform = matrix() - update_icon() - -/obj/structure/closet/supplypod/update_icon() - var/list/new_overlays = update_overlays() - if(managed_overlays) - cut_overlay(managed_overlays) - managed_overlays = null - if(length(new_overlays)) - managed_overlays = new_overlays - add_overlay(new_overlays) - -/obj/structure/closet/supplypod/proc/update_overlays() - . = list() + update_appearance(updates = ALL) + +/obj/structure/closet/supplypod/closet_update_overlays(list/new_overlays) + return + +/obj/structure/closet/supplypod/update_overlays() + . = ..() if(style == STYLE_INVISIBLE) return @@ -420,17 +412,17 @@ /obj/structure/closet/supplypod/setOpened() //Proc exists here, as well as in any atom that can assume the role of a "holder" of a supplypod. Check the open_pod() proc for more details opened = TRUE density = FALSE - update_icon() + update_appearance(updates = ALL) /obj/structure/closet/supplypod/extractionpod/setOpened() opened = TRUE density = TRUE - update_icon() + update_appearance(updates = ALL) /obj/structure/closet/supplypod/setClosed() //Ditto opened = FALSE density = TRUE - update_icon() + update_appearance(updates = ALL) /obj/structure/closet/supplypod/proc/tryMakeRubble(turf/T) //Ditto if (rubble_type == RUBBLE_NONE) @@ -443,7 +435,7 @@ return rubble = new /obj/effect/supplypod_rubble(T) rubble.setStyle(rubble_type, src) - update_icon() + update_appearance(updates = ALL) /obj/structure/closet/supplypod/Moved() deleteRubble() @@ -452,7 +444,7 @@ /obj/structure/closet/supplypod/proc/deleteRubble() rubble?.fadeAway() rubble = null - update_icon() + update_appearance(updates = ALL) /obj/structure/closet/supplypod/proc/addGlow() if (GLOB.podstyles[style][POD_SHAPE] != POD_SHAPE_NORML) @@ -599,7 +591,7 @@ /obj/effect/DPtarget/proc/beginLaunch(effectCircle) //Begin the animation for the pod falling. The effectCircle param determines whether the pod gets to come in from any descent angle pod.addGlow() - pod.update_icon() + pod.update_appearance(updates = ALL) if (pod.style != STYLE_INVISIBLE) pod.add_filter("motionblur",1,list("type"="motion_blur", "x"=0, "y"=3)) pod.forceMove(drop_location()) diff --git a/code/modules/cargo/supplypod_beacon.dm b/code/modules/cargo/supplypod_beacon.dm index a8464a573325..2eeed5cb818e 100644 --- a/code/modules/cargo/supplypod_beacon.dm +++ b/code/modules/cargo/supplypod_beacon.dm @@ -29,9 +29,10 @@ playsound(src,'sound/machines/synth_no.ogg',50,0) if (SP_UNREADY) ready = FALSE - update_icon() + update_appearance(updates = ALL) -/obj/item/supplypod_beacon/update_icon() +/obj/item/supplypod_beacon/update_appearance(updates = ALL) + . = ..() cut_overlays() if (launched) add_overlay("sp_green") diff --git a/code/modules/client/preferences/ghost.dm b/code/modules/client/preferences/ghost.dm index 648feea31e49..ed8356c3a249 100644 --- a/code/modules/client/preferences/ghost.dm +++ b/code/modules/client/preferences/ghost.dm @@ -16,7 +16,7 @@ return ghost.ghost_accs = value - ghost.update_icon() + ghost.update_appearance(updates = ALL) /datum/preference/choiced/ghost_accessories/deserialize(input, datum/preferences/preferences) // Old ghost preferences used to be 1/50/100. @@ -90,7 +90,7 @@ if (!is_donator(client)) return - ghost.update_icon(value) + ghost.update_appearance(UPDATE_ICON, value) /datum/preference/choiced/ghost_form/compile_constant_data() var/list/data = ..() diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm index 42490f1d6549..0e5d21af2dac 100644 --- a/code/modules/clothing/chameleon.dm +++ b/code/modules/clothing/chameleon.dm @@ -243,7 +243,7 @@ var/obj/item/clothing/head/helmet/helmet = initial(HS.helmettype) I.head_piece.initial_state = initial(helmet.icon_state) update_item(helmet, I.head_piece) - I.head_piece.update_icon() + I.head_piece.update_appearance(updates = ALL) qdel(helmet) //YOGS END target.icon = initial(picked_item.icon) diff --git a/code/modules/clothing/ears/_ears.dm b/code/modules/clothing/ears/_ears.dm index 98ea902107de..d62ec497efc7 100644 --- a/code/modules/clothing/ears/_ears.dm +++ b/code/modules/clothing/ears/_ears.dm @@ -35,15 +35,16 @@ /obj/item/clothing/ears/headphones/Initialize(mapload) . = ..() - update_icon() + update_appearance(updates = ALL) -/obj/item/clothing/ears/headphones/update_icon() +/obj/item/clothing/ears/headphones/update_appearance(updates = ALL) + . = ..() icon_state = "[initial(icon_state)]_[headphones_on? "on" : "off"]" item_state = "[initial(item_state)]_[headphones_on? "on" : "off"]" /obj/item/clothing/ears/headphones/proc/toggle(owner) headphones_on = !headphones_on - update_icon() + update_appearance(updates = ALL) var/mob/living/carbon/human/H = owner if(istype(H)) H.update_inv_ears() diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm index 5cf0c4407f9f..f99d6eaf9dcf 100644 --- a/code/modules/clothing/glasses/_glasses.dm +++ b/code/modules/clothing/glasses/_glasses.dm @@ -338,11 +338,12 @@ /obj/item/clothing/glasses/blindfold/white/equipped(mob/living/carbon/human/user, slot) if(ishuman(user) && slot == ITEM_SLOT_EYES) - update_icon(user) + update_appearance(UPDATE_ICON, user) user.update_inv_glasses() //Color might have been changed by update_icon. ..() -/obj/item/clothing/glasses/blindfold/white/update_icon(mob/living/carbon/human/user) +/obj/item/clothing/glasses/blindfold/white/update_appearance(updates = ALL, mob/living/carbon/human/user) + . = ..() if(ishuman(user) && !colored_before) add_atom_colour("#[user.eye_color]", FIXED_COLOUR_PRIORITY) colored_before = TRUE diff --git a/code/modules/clothing/glasses/engine_goggles.dm b/code/modules/clothing/glasses/engine_goggles.dm index bd0d1dba3c7e..cd647cea5805 100644 --- a/code/modules/clothing/glasses/engine_goggles.dm +++ b/code/modules/clothing/glasses/engine_goggles.dm @@ -24,7 +24,7 @@ /obj/item/clothing/glasses/meson/engine/Initialize(mapload) . = ..() START_PROCESSING(SSobj, src) - update_icon() + update_appearance(updates = ALL) /obj/item/clothing/glasses/meson/engine/Destroy() STOP_PROCESSING(SSobj, src) @@ -50,7 +50,7 @@ if(H.glasses == src) H.update_sight() - update_icon() + update_appearance(updates = ALL) for(var/X in actions) var/datum/action/A = X A.build_all_button_icons() @@ -114,7 +114,8 @@ pic = new('icons/turf/overlays.dmi', place, "redOverlay", AREA_LAYER) flick_overlay(pic, list(user.client), 8) -/obj/item/clothing/glasses/meson/engine/update_icon() +/obj/item/clothing/glasses/meson/engine/update_appearance(updates = ALL) + . = ..() icon_state = "trayson-[mode]" update_mob() @@ -125,7 +126,7 @@ if(user.get_item_by_slot(ITEM_SLOT_EYES) == src) user.update_inv_glasses() else - user.update_inv_hands() + user.update_held_items() /obj/item/clothing/glasses/meson/engine/tray //atmos techs have lived far too long without tray goggles while those damned engineers get their dual-purpose gogles all to themselves name = "optical t-ray scanner" diff --git a/code/modules/clothing/head/collectable.dm b/code/modules/clothing/head/collectable.dm index 48297c5499e0..0179d0fb6b95 100644 --- a/code/modules/clothing/head/collectable.dm +++ b/code/modules/clothing/head/collectable.dm @@ -105,11 +105,12 @@ /obj/item/clothing/head/collectable/kitty/equipped(mob/living/carbon/human/user, slot) if(ishuman(user) && slot == ITEM_SLOT_HEAD) - update_icon(user) + update_appearance(UPDATE_ICON, user) user.update_inv_head() //Color might have been changed by update_icon. ..() -/obj/item/clothing/head/collectable/kitty/update_icon(mob/living/carbon/human/user) +/obj/item/clothing/head/collectable/kitty/update_appearance(updates = ALL, mob/living/carbon/human/user) + . = ..() if(ishuman(user)) add_atom_colour("#[user.hair_color]", FIXED_COLOUR_PRIORITY) diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm index 09dce2c10e8e..a7b4b69ee2f1 100644 --- a/code/modules/clothing/head/hardhat.dm +++ b/code/modules/clothing/head/hardhat.dm @@ -31,9 +31,10 @@ turn_on(user) else turn_off(user) - update_icon() + update_appearance(updates = ALL) -/obj/item/clothing/head/hardhat/update_icon() +/obj/item/clothing/head/hardhat/update_appearance(updates = ALL) + . = ..() icon_state = "hardhat[on]_[hat_type]" item_state = "hardhat[on]_[hat_type]" if(ishuman(loc)) @@ -128,7 +129,7 @@ /obj/item/clothing/head/hardhat/weldhat/Initialize(mapload) . = ..() - update_icon() + update_appearance(updates = ALL) /obj/item/clothing/head/hardhat/weldhat/attack_self(mob/living/user) toggle_helmet_light(user) @@ -147,7 +148,7 @@ /obj/item/clothing/head/hardhat/weldhat/proc/toggle_welding_screen(mob/living/user) if(weldingvisortoggle(user)) playsound(src, 'sound/mecha/mechmove03.ogg', 50, 1) //Visors don't just come from nothing - update_icon() + update_appearance(updates = ALL) /obj/item/clothing/head/hardhat/weldhat/worn_overlays(isinhands) . = ..() @@ -156,7 +157,8 @@ if(!up) . += mutable_appearance(mob_overlay_icon, "weldvisor") -/obj/item/clothing/head/hardhat/weldhat/update_icon() +/obj/item/clothing/head/hardhat/weldhat/update_appearance(updates = ALL) + . = ..() cut_overlays() if(!up) add_overlay("weldvisor") diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 015fa6c1949e..0a7d790a6f8c 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -46,7 +46,7 @@ if(A == attached_light) set_attached_light(null) update_helmlight() - update_icon() + update_appearance(updates = ALL) QDEL_NULL(alight) qdel(A) return ..() @@ -368,7 +368,8 @@ //LightToggle -/obj/item/clothing/head/helmet/update_icon() +/obj/item/clothing/head/helmet/update_appearance(updates = ALL) + . = ..() var/state = "[initial(icon_state)]" if(attached_light) if(attached_light.on) @@ -396,7 +397,7 @@ return to_chat(user, span_notice("You click [S] into place on [src].")) set_attached_light(S) - update_icon() + update_appearance(updates = ALL) update_helmlight() alight = new(src) if(loc == user) @@ -416,7 +417,7 @@ var/obj/item/flashlight/removed_light = set_attached_light(null) update_helmlight() removed_light.update_brightness(user) - update_icon() + update_appearance(updates = ALL) user.update_inv_head() QDEL_NULL(alight) return TRUE @@ -441,7 +442,7 @@ /obj/item/clothing/head/helmet/proc/update_helmlight() if(attached_light) - update_icon() + update_appearance(updates = ALL) for(var/X in actions) var/datum/action/A = X A.build_all_button_icons() diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm index 33b94dd71cbe..ad1e8a220e27 100644 --- a/code/modules/clothing/head/misc_special.dm +++ b/code/modules/clothing/head/misc_special.dm @@ -134,7 +134,7 @@ /obj/item/clothing/head/kitty/equipped(mob/living/carbon/human/user, slot) if(ishuman(user) && slot == ITEM_SLOT_HEAD) - update_icon(user) + update_appearance(UPDATE_ICON, user) user.update_inv_head() //Color might have been changed by update_icon. var/datum/language_holder/LH = user.get_language_holder() if(!LH.has_language(/datum/language/felinid) || !LH.can_speak_language(/datum/language/felinid)) @@ -150,7 +150,8 @@ LH.remove_language(/datum/language/felinid,TRUE,TRUE,LANGUAGE_CATEARS) -/obj/item/clothing/head/kitty/update_icon(mob/living/carbon/human/user) +/obj/item/clothing/head/kitty/update_appearance(updates = ALL, mob/living/carbon/human/user) + . = ..() if(ishuman(user)) add_atom_colour("#[user.hair_color]", FIXED_COLOUR_PRIORITY) @@ -207,9 +208,10 @@ /obj/item/clothing/head/wig/Initialize(mapload) . = ..() - update_icon() + update_appearance(updates = ALL) -/obj/item/clothing/head/wig/update_icon() +/obj/item/clothing/head/wig/update_appearance(updates = ALL) + . = ..() cut_overlays() icon_state = "" var/datum/sprite_accessory/S = GLOB.hair_styles_list[hair_style] @@ -241,7 +243,7 @@ user.visible_message(span_notice("[user] changes \the [src]'s hairstyle to [new_style]."), span_notice("You change \the [src]'s hairstyle to [new_style].")) if(adjustablecolor) hair_color = input(usr,"","Choose Color",hair_color) as color|null - update_icon() + update_appearance(updates = ALL) /obj/item/clothing/head/wig/random/Initialize(mapload) @@ -264,7 +266,7 @@ . = ..() if(ishuman(user) && slot == ITEM_SLOT_HEAD) hair_color = "#[user.hair_color]" - update_icon() + update_appearance(updates = ALL) user.update_inv_head() /obj/item/clothing/head/bronze diff --git a/code/modules/clothing/neck/bodycamera.dm b/code/modules/clothing/neck/bodycamera.dm index a73749e00491..864bdd99c29c 100644 --- a/code/modules/clothing/neck/bodycamera.dm +++ b/code/modules/clothing/neck/bodycamera.dm @@ -26,7 +26,7 @@ bodcam.network = list("ss13") bodcam.internal_light = FALSE bodcam.status = FALSE - update_icon() + update_appearance(updates = ALL) /obj/item/clothing/neck/bodycam/attack_self(mob/user) if(!setup) @@ -39,7 +39,7 @@ bodcam.status = TRUE to_chat(user, span_notice("You turn on the body camera.")) getMobhook(user) - update_icon() + update_appearance(updates = ALL) /obj/item/clothing/neck/bodycam/AltClick(mob/user) if(preset) @@ -52,10 +52,10 @@ bodcam.network[1] = temp setup = TRUE bodcam.status = TRUE - update_icon() + update_appearance(updates = ALL) -/obj/item/clothing/neck/bodycam/update_icon() - ..() +/obj/item/clothing/neck/bodycam/update_appearance(updates = ALL) + . = ..() var/suffix = "off" if(bodcam.status) suffix = "on" @@ -92,7 +92,7 @@ Disconnect() bodcam.c_tag = null bodcam.network[1] = null //requires a reset - update_icon() + update_appearance(updates = ALL) /obj/item/clothing/neck/bodycam/Destroy() Disconnect() diff --git a/code/modules/clothing/shoes/bananashoes.dm b/code/modules/clothing/shoes/bananashoes.dm index 064b1dc748fc..755feba632fc 100644 --- a/code/modules/clothing/shoes/bananashoes.dm +++ b/code/modules/clothing/shoes/bananashoes.dm @@ -23,7 +23,7 @@ on = !on if(!always_noslip) clothing_flags &= ~NOSLIP - update_icon() + update_appearance(updates = ALL) to_chat(loc, span_warning("You ran out of bananium!")) else new /obj/item/grown/bananapeel/specialpeel(get_step(src,turn(usr.dir, 180))) //honk @@ -45,7 +45,7 @@ var/datum/component/material_container/bananium = GetComponent(/datum/component/material_container) if(bananium.get_material_amount(/datum/material/bananium)) on = !on - update_icon() + update_appearance(updates = ALL) to_chat(user, span_notice("You [on ? "activate" : "deactivate"] the prototype shoes.")) if(!always_noslip) if(on) @@ -55,7 +55,8 @@ else to_chat(user, span_warning("You need bananium to turn the prototype shoes on!")) -/obj/item/clothing/shoes/clown_shoes/banana_shoes/update_icon() +/obj/item/clothing/shoes/clown_shoes/banana_shoes/update_appearance(updates = ALL) + . = ..() if(on) icon_state = "clown_prototype_on" else diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index fd422cc78b1e..88c3053962d7 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -305,7 +305,8 @@ visor_flags_inv = HIDEMASK|HIDEEYES|HIDEFACE|HIDEFACIALHAIR visor_flags = STOPSPRESSUREDAMAGE -/obj/item/clothing/head/helmet/space/hardsuit/syndi/update_icon() +/obj/item/clothing/head/helmet/space/hardsuit/syndi/update_appearance(updates = ALL) + . = ..() icon_state = "hardsuit[on]-[hardsuit_type]" /obj/item/clothing/head/helmet/space/hardsuit/syndi/Initialize(mapload) @@ -336,7 +337,7 @@ flags_cover &= ~(HEADCOVERSEYES | HEADCOVERSMOUTH) flags_inv &= ~visor_flags_inv cold_protection &= ~HEAD - update_icon() + update_appearance(updates = ALL) playsound(src.loc, 'sound/mecha/mechmove03.ogg', 50, 1) toggle_hardsuit_mode(user) user.update_inv_head() @@ -363,7 +364,7 @@ linkedsuit.cold_protection &= ~(CHEST | GROIN | LEGS | FEET | ARMS | HANDS) linkedsuit.icon_state = "hardsuit[on]-[hardsuit_type]" - linkedsuit.update_icon() + linkedsuit.update_appearance(updates = ALL) user.update_inv_wear_suit() user.update_inv_w_uniform() diff --git a/code/modules/clothing/spacesuits/plasmamen.dm b/code/modules/clothing/spacesuits/plasmamen.dm index 30ba60f29546..56da5dd2f5e1 100644 --- a/code/modules/clothing/spacesuits/plasmamen.dm +++ b/code/modules/clothing/spacesuits/plasmamen.dm @@ -61,7 +61,7 @@ helmet_on = !helmet_on icon_state = "[initial(icon_state)][helmet_on ? "-light":""]" item_state = icon_state - update_icon(user) + update_appearance(UPDATE_ICON, user) set_light_on(helmet_on) @@ -78,9 +78,10 @@ saved_style = "enviro[GLOB.plasmaman_helmet_list[style]]" add_overlay(mutable_appearance('icons/obj/clothing/hats.dmi', saved_style)) helmet_mob_overlay = mutable_appearance('icons/mob/clothing/head/head.dmi', saved_style) - update_icon(user) + update_appearance(UPDATE_ICON, user) -/obj/item/clothing/head/helmet/space/plasmaman/update_icon(mob/living/carbon/human/user) +/obj/item/clothing/head/helmet/space/plasmaman/update_appearance(updates = ALL, mob/living/carbon/human/user) + . = ..() if(!user) return user.cut_overlay(helmet_mob_overlay) @@ -95,7 +96,7 @@ if(slot != ITEM_SLOT_HEAD) user.cut_overlay(helmet_mob_overlay) return - update_icon(user) + update_appearance(UPDATE_ICON, user) /obj/item/clothing/head/helmet/space/plasmaman/dropped(mob/living/user) user.cut_overlay(helmet_mob_overlay) diff --git a/code/modules/detectivework/scanner.dm b/code/modules/detectivework/scanner.dm index 5200b8744533..83d83a0538bb 100644 --- a/code/modules/detectivework/scanner.dm +++ b/code/modules/detectivework/scanner.dm @@ -137,7 +137,7 @@ P.info = text("
    Forensic Record - (FR-[])


    ", frNum) P.info += jointext(log, "
    ") P.info += "
    Notes:
    " - P.update_icon() + P.update_appearance(updates = ALL) if(ismob(loc)) var/mob/M = loc diff --git a/code/modules/events/pirates.dm b/code/modules/events/pirates.dm index 4fa101792923..a7f299e8cc86 100644 --- a/code/modules/events/pirates.dm +++ b/code/modules/events/pirates.dm @@ -137,7 +137,7 @@ . = ..() gps = new/obj/item/gps/internal/pirate(src) gps.tracking = FALSE - update_icon() + update_appearance(updates = ALL) /obj/machinery/shuttle_scrambler/process() if(active) @@ -168,7 +168,7 @@ if(active || !user.canUseTopic(src, BE_CLOSE)) return toggle_on(user) - update_icon() + update_appearance(updates = ALL) send_notification() else dump_loot(user) @@ -195,7 +195,8 @@ active = FALSE STOP_PROCESSING(SSobj,src) -/obj/machinery/shuttle_scrambler/update_icon() +/obj/machinery/shuttle_scrambler/update_appearance(updates = ALL) + . = ..() if(active) icon_state = "dominator-blue" else diff --git a/code/modules/events/prison_break.dm b/code/modules/events/prison_break.dm index a581d6c659ea..4ae297f33e11 100644 --- a/code/modules/events/prison_break.dm +++ b/code/modules/events/prison_break.dm @@ -49,7 +49,7 @@ if(istype(O, /obj/structure/closet/secure_closet)) var/obj/structure/closet/secure_closet/temp = O temp.locked = FALSE - temp.update_icon() + temp.update_appearance(updates = ALL) else if(istype(O, /obj/machinery/door/airlock)) var/obj/machinery/door/airlock/temp = O //Skip doors in critical positions, such as the SM chamber, and skip doors the AI can't control since it's a virus diff --git a/code/modules/events/shuttle_loan.dm b/code/modules/events/shuttle_loan.dm index 328a3bba45fe..7df520ff344d 100644 --- a/code/modules/events/shuttle_loan.dm +++ b/code/modules/events/shuttle_loan.dm @@ -271,7 +271,7 @@ setAnchored(TRUE) timer_set = rand(480, 600) //once the supply shuttle docks (after 5 minutes travel time), players have between 3-5 minutes to defuse the bomb activate() - update_icon() + update_appearance(updates = ALL) /obj/item/paper/fluff/cargo/bomb name = "hastly scribbled note" diff --git a/code/modules/events/stray_cargo.dm b/code/modules/events/stray_cargo.dm index 0666ca9bd206..90eca071d24a 100644 --- a/code/modules/events/stray_cargo.dm +++ b/code/modules/events/stray_cargo.dm @@ -52,7 +52,7 @@ var/datum/supply_pack/SP = new pack_type var/obj/structure/closet/crate/crate = SP.generate(null) crate.locked = FALSE //Unlock secure crates - crate.update_icon() + crate.update_appearance(updates = ALL) var/obj/structure/closet/supplypod/pod = make_pod() new /obj/effect/DPtarget(LZ, pod, crate) diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index a89f8d6d2de1..c6784ffbcf96 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -115,7 +115,8 @@ GLOBAL_LIST_INIT(hallucination_list, list( if(target.client) target.client.images |= current_image -/obj/effect/hallucination/simple/update_icon(new_state,new_icon,new_px=0,new_py=0) +/obj/effect/hallucination/simple/update_appearance(updates = ALL, new_state,new_icon,new_px=0,new_py=0) + . = ..() image_state = new_state if(new_icon) image_icon = new_icon @@ -217,7 +218,7 @@ GLOBAL_LIST_INIT(hallucination_list, list( name = "alien hunter ([rand(1, 1000)])" /obj/effect/hallucination/simple/xeno/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) - update_icon("alienh_pounce") + update_appearance(UPDATE_ICON, "alienh_pounce") if(hit_atom == target && target.stat!=DEAD) target.Paralyze(100) target.visible_message(span_danger("[target] flails around wildly."),"[name] pounces on you!") @@ -239,10 +240,10 @@ GLOBAL_LIST_INIT(hallucination_list, list( feedback_details += "Vent Coords: [pump.x],[pump.y],[pump.z]" xeno = new(pump.loc,target) sleep(1 SECONDS) - xeno.update_icon("alienh_leap",'icons/mob/alienleap.dmi',-32,-32) + xeno.update_appearance(UPDATE_ICON,"alienh_leap",'icons/mob/alienleap.dmi',-32,-32) xeno.throw_at(target,7,1, xeno, FALSE, TRUE) sleep(1 SECONDS) - xeno.update_icon("alienh_leap",'icons/mob/alienleap.dmi',-32,-32) + xeno.update_appearance(UPDATE_ICON,"alienh_leap",'icons/mob/alienleap.dmi',-32,-32) xeno.throw_at(pump,7,1, xeno, FALSE, TRUE) sleep(1 SECONDS) var/xeno_name = xeno.name diff --git a/code/modules/food_and_drinks/drinks/drinks/bottle.dm b/code/modules/food_and_drinks/drinks/drinks/bottle.dm index 0a0d75ec7aaf..242fa5d284a7 100644 --- a/code/modules/food_and_drinks/drinks/drinks/bottle.dm +++ b/code/modules/food_and_drinks/drinks/drinks/bottle.dm @@ -23,9 +23,10 @@ age_restricted = TRUE /obj/item/reagent_containers/food/drinks/bottle/on_reagent_change(changetype) - update_icon() + update_appearance(updates = ALL) -/obj/item/reagent_containers/food/drinks/bottle/update_icon() +/obj/item/reagent_containers/food/drinks/bottle/update_appearance(updates = ALL) + . = ..() cut_overlays() if(reagents.total_volume) diff --git a/code/modules/food_and_drinks/food/customizables.dm b/code/modules/food_and_drinks/food/customizables.dm index 799324b0f0ca..67f98dd27d10 100644 --- a/code/modules/food_and_drinks/food/customizables.dm +++ b/code/modules/food_and_drinks/food/customizables.dm @@ -53,14 +53,14 @@ mix_filling_color(S) S.reagents.trans_to(src,min(S.reagents.total_volume, 15), transfered_by = user) //limit of 15, we don't want our custom food to be completely filled by just one ingredient with large reagent volume. foodtype |= S.foodtype - update_overlays(S) + update_food_overlays(S) to_chat(user, span_notice("You add the [I.name] to the [name].")) - update_name(S) + update_food_name(S) else . = ..() -/obj/item/reagent_containers/food/snacks/customizable/proc/update_name(obj/item/reagent_containers/food/snacks/S) +/obj/item/reagent_containers/food/snacks/customizable/proc/update_food_name(obj/item/reagent_containers/food/snacks/S) for(var/obj/item/I in ingredients) if(!istype(S, I.type)) customname = "custom" @@ -102,7 +102,7 @@ rgbcolor[4] = (customcolor[4]+ingcolor[4])/2 filling_color = rgb(rgbcolor[1], rgbcolor[2], rgbcolor[3], rgbcolor[4]) -/obj/item/reagent_containers/food/snacks/customizable/update_overlays(obj/item/reagent_containers/food/snacks/S) +/obj/item/reagent_containers/food/snacks/customizable/update_food_overlays(obj/item/reagent_containers/food/snacks/S) var/mutable_appearance/filling = mutable_appearance(icon, "[initial(icon_state)]_filling") if(S.filling_color == "#FFFFFF") filling.color = pick("#FF0000","#0000FF","#008000","#FFFF00") @@ -138,7 +138,7 @@ /obj/item/reagent_containers/food/snacks/customizable/initialize_slice(obj/item/reagent_containers/food/snacks/slice, reagents_per_slice) ..() slice.filling_color = filling_color - slice.update_overlays(src) + slice.update_food_overlays(src) /obj/item/reagent_containers/food/snacks/customizable/Destroy() @@ -347,9 +347,10 @@ /obj/item/reagent_containers/glass/bowl/on_reagent_change(changetype) ..() - update_icon() + update_appearance(updates = ALL) -/obj/item/reagent_containers/glass/bowl/update_icon() +/obj/item/reagent_containers/glass/bowl/update_appearance(updates = ALL) + . = ..() cut_overlays() if(reagents && reagents.total_volume) var/mutable_appearance/filling = mutable_appearance('icons/obj/food/soupsalad.dmi', "fullbowl") diff --git a/code/modules/food_and_drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm index 9cd1aa6ea9a3..6fc28abb7b81 100644 --- a/code/modules/food_and_drinks/food/snacks.dm +++ b/code/modules/food_and_drinks/food/snacks.dm @@ -255,7 +255,7 @@ All foods are distributed among various categories. Use common sense. trash = null return -/obj/item/reagent_containers/food/snacks/proc/update_overlays(obj/item/reagent_containers/food/snacks/S) +/obj/item/reagent_containers/food/snacks/proc/update_food_overlays(obj/item/reagent_containers/food/snacks/S) cut_overlays() var/mutable_appearance/filling = mutable_appearance(icon, "[initial(icon_state)]_filling") if(S.filling_color == "#FFFFFF") diff --git a/code/modules/food_and_drinks/food/snacks_pastry.dm b/code/modules/food_and_drinks/food/snacks_pastry.dm index 254025024908..723e4f039b89 100644 --- a/code/modules/food_and_drinks/food/snacks_pastry.dm +++ b/code/modules/food_and_drinks/food/snacks_pastry.dm @@ -672,9 +672,10 @@ /obj/item/reagent_containers/food/snacks/pancakes/Initialize(mapload) . = ..() - update_icon() + update_appearance(updates = ALL) -/obj/item/reagent_containers/food/snacks/pancakes/update_icon() +/obj/item/reagent_containers/food/snacks/pancakes/update_appearance(updates = ALL) + . = ..() if(contents.len) name = "stack of pancakes" else @@ -718,13 +719,13 @@ to_chat(user, span_notice("You add the [I] to the [name].")) P.name = initial(P.name) contents += P - update_overlays(P) + update_food_overlays(P) if (P.contents.len) for(var/V in P.contents) P = V P.name = initial(P.name) contents += P - update_overlays(P) + update_food_overlays(P) P = I LAZYCLEARLIST(P.contents) return @@ -733,18 +734,18 @@ return O.attackby(I, user, params) ..() -/obj/item/reagent_containers/food/snacks/pancakes/update_overlays(obj/item/reagent_containers/food/snacks/P) +/obj/item/reagent_containers/food/snacks/pancakes/update_food_overlays(obj/item/reagent_containers/food/snacks/P) var/mutable_appearance/pancake = mutable_appearance(icon, "[P.item_state]_[rand(1,3)]") pancake.pixel_x = rand(-1,1) pancake.pixel_y = 3 * contents.len - 1 add_overlay(pancake) - update_icon() + update_appearance(updates = ALL) /obj/item/reagent_containers/food/snacks/pancakes/attack(mob/M, mob/user, def_zone, stacked = TRUE) if(user.a_intent == INTENT_HARM || !contents.len || !stacked) return ..() var/obj/item/O = contents[contents.len] . = O.attack(M, user, def_zone, FALSE) - update_icon() + update_appearance(updates = ALL) #undef PANCAKE_MAX_STACK diff --git a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm index 756db185425b..8fd117153362 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm @@ -38,7 +38,8 @@ if(M.rating >= 2) . += "Gibber has been upgraded to process inorganic materials." -/obj/machinery/gibber/update_icon() +/obj/machinery/gibber/update_appearance(updates = ALL) + . = ..() cut_overlays() if (dirty) add_overlay("grbloody") @@ -99,7 +100,7 @@ user.visible_message(span_danger("[user] stuffs [C] into the gibber!")) C.forceMove(src) occupant = C - update_icon() + update_appearance(updates = ALL) else startgibbing(user) @@ -133,7 +134,7 @@ /obj/machinery/gibber/proc/go_out() dropContents() - update_icon() + update_appearance(updates = ALL) /obj/machinery/gibber/proc/startgibbing(mob/user) if(src.operating) @@ -145,7 +146,7 @@ visible_message(span_italics("You hear a loud squelchy grinding sound.")) playsound(src.loc, 'sound/machines/juicer.ogg', 50, 1) operating = TRUE - update_icon() + update_appearance(updates = ALL) var/offset = prob(50) ? -2 : 2 animate(src, pixel_x = pixel_x + offset, time = 0.02 SECONDS, loop = 200) //start shaking @@ -221,7 +222,7 @@ pixel_x = initial(pixel_x) //return to its spot after shaking operating = FALSE - update_icon() + update_appearance(updates = ALL) //auto-gibs anything that bumps into it /obj/machinery/gibber/autogibber diff --git a/code/modules/food_and_drinks/kitchen_machinery/griddle.dm b/code/modules/food_and_drinks/kitchen_machinery/griddle.dm index 56065b62c0c0..0da369667bb6 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/griddle.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/griddle.dm @@ -32,7 +32,7 @@ return if(!on && default_deconstruction_screwdriver(user, icon_state, icon_state, I)) - update_icon() + update_appearance(updates = ALL) return if(griddled_objects.len >= max_items) @@ -49,7 +49,7 @@ I.pixel_y = clamp(text2num(click_params["icon-y"]) - 16, -(world.icon_size/8), world.icon_size/4) to_chat(user, "You place [I] on [src].") AddToGrill(I, user) - update_icon() + update_appearance(updates = ALL) else return ..() @@ -62,7 +62,7 @@ begin_processing() else end_processing() - update_icon() + update_appearance(updates = ALL) update_grill_audio() @@ -106,7 +106,7 @@ if(prob(10)) visible_message("[griddled_item] doesn't seem to be doing too great on the [src]!") -/obj/machinery/griddle/update_icon() +/obj/machinery/griddle/update_appearance(updates = ALL) . = ..() if(panel_open) icon_state = "griddle[variant]_o" diff --git a/code/modules/food_and_drinks/kitchen_machinery/grill.dm b/code/modules/food_and_drinks/kitchen_machinery/grill.dm index ce0259a5c6c0..cb2f72737c12 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/grill.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/grill.dm @@ -20,7 +20,8 @@ . = ..() grill_loop = new(list(src), FALSE) -/obj/machinery/grill/update_icon() +/obj/machinery/grill/update_appearance(updates = ALL) + . = ..() if(grilled_item) icon_state = "grill" else if(grill_fuel > 0) @@ -38,7 +39,7 @@ else grill_fuel += (50 * stackamount) S.use(stackamount) - update_icon() + update_appearance(updates = ALL) return if(I.resistance_flags & INDESTRUCTIBLE) to_chat(user, span_warning("You don't feel it would be wise to grill [I]...")) @@ -59,7 +60,7 @@ RegisterSignal(grilled_item, COMSIG_GRILL_COMPLETED, PROC_REF(GrillCompleted)) grilled_item.foodtype |= GRILLED to_chat(user, span_notice("You put the [grilled_item] on [src].")) - update_icon() + update_appearance(updates = ALL) grill_loop.start() return else @@ -67,13 +68,13 @@ grill_fuel += (20 * (I.reagents.get_reagent_amount(/datum/reagent/consumable/monkey_energy))) to_chat(user, span_notice("You pour the Monkey Energy in [src].")) I.reagents.remove_reagent(/datum/reagent/consumable/monkey_energy, I.reagents.get_reagent_amount(/datum/reagent/consumable/monkey_energy)) - update_icon() + update_appearance(updates = ALL) return ..() /obj/machinery/grill/process(delta_time) ..() - update_icon() + update_appearance(updates = ALL) if(grill_fuel <= 0) return else @@ -124,7 +125,7 @@ if(grilled_item) to_chat(user, span_notice("You take out [grilled_item] from [src].")) grilled_item.forceMove(drop_location()) - update_icon() + update_appearance(updates = ALL) return return ..() diff --git a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm index c32488db9083..53ded31239d2 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm @@ -87,7 +87,8 @@ "- Capacity: [max_n_of_items] items.\n"+\ span_notice("- Cook time reduced by [(efficiency - 1) * 25]%.") -/obj/machinery/microwave/update_icon() +/obj/machinery/microwave/update_appearance(updates = ALL) + . = ..() if(broken) icon_state = "mwb" else if(dirty_anim_playing) @@ -109,7 +110,7 @@ if(dirty < 100) if(default_deconstruction_screwdriver(user, icon_state, icon_state, O) || default_unfasten_wrench(user, O)) - update_icon() + update_appearance(updates = ALL) return if(panel_open && is_wire_tool(O)) @@ -127,7 +128,7 @@ if(O.use_tool(src, user, 20)) user.visible_message("[user] fixes \the [src].", span_notice("You fix \the [src].")) broken = 0 - update_icon() + update_appearance(updates = ALL) return FALSE //to use some fuel else to_chat(user, span_warning("It's broken!")) @@ -141,7 +142,7 @@ playsound(loc, 'sound/effects/spray3.ogg', 50, 1, -6) user.visible_message("[user] has cleaned \the [src].", span_notice("You clean \the [src].")) dirty = 0 - update_icon() + update_appearance(updates = ALL) else to_chat(user, span_warning("You need more space cleaner!")) return TRUE @@ -152,7 +153,7 @@ if(do_after(user, P.cleanspeed, src)) user.visible_message("[user] has cleaned \the [src].", span_notice("You clean \the [src].")) dirty = 0 - update_icon() + update_appearance(updates = ALL) return TRUE if(dirty == 100) // The microwave is all dirty so can't be used! @@ -258,7 +259,7 @@ set_light(1.5) soundloop.start() - update_icon() + update_appearance(updates = ALL) /obj/machinery/microwave/proc/spark() visible_message(span_warning("Sparks fly around [src]!")) @@ -282,7 +283,7 @@ turn_on() playsound(src.loc, 'sound/effects/splat.ogg', 50, 1) dirty_anim_playing = TRUE - update_icon() + update_appearance(updates = ALL) loop(MICROWAVE_MUCK, 4) /obj/machinery/microwave/proc/loop(type, time, wait = max(12 - 2 * efficiency, 2)) // standard wait is 10 @@ -349,7 +350,7 @@ /obj/machinery/microwave/proc/after_finish_loop() set_light(0) soundloop.stop() - update_icon() + update_appearance(updates = ALL) #undef MICROWAVE_NORMAL #undef MICROWAVE_MUCK diff --git a/code/modules/food_and_drinks/kitchen_machinery/oven.dm b/code/modules/food_and_drinks/kitchen_machinery/oven.dm index 471abd866cc4..13a3a94ada0e 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/oven.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/oven.dm @@ -42,8 +42,7 @@ QDEL_NULL(particles) . = ..() -/obj/machinery/oven/update_icon() - update_overlays() +/obj/machinery/oven/update_icon_state() if(panel_open) icon_state = "oven_o" return ..() @@ -53,15 +52,15 @@ icon_state = "oven_off" return ..() -/obj/machinery/oven/proc/update_overlays() - cut_overlays() +/obj/machinery/oven/update_overlays() + . = ..() var/mutable_appearance/door_overlay if(open) door_overlay = mutable_appearance(icon, "oven_lid_open") door_overlay.pixel_y = OVEN_LID_Y_OFFSET else door_overlay = mutable_appearance(icon, "oven_lid_closed") - add_overlay(door_overlay); + . += door_overlay /obj/machinery/oven/process(delta_time) ..() @@ -87,7 +86,7 @@ if(prob(10)) visible_message(span_danger("You smell a burnt smell coming from [src]!")) set_smoke_state(worst_cooked_food_state) - update_icon() + update_appearance(updates = ALL) /obj/machinery/oven/attackby(obj/item/I, mob/user, params) @@ -110,7 +109,7 @@ RegisterSignal(used_tray, COMSIG_MOVABLE_MOVED, PROC_REF(ItemMoved)) update_baking_audio() - update_icon() + update_appearance(updates = ALL) ///Called when the tray is moved out of the oven in some way /obj/machinery/oven/proc/ItemMoved(obj/item/oven_tray, atom/OldLoc, Dir, Forced) @@ -144,7 +143,7 @@ if(used_tray) begin_processing() used_tray.vis_flags |= VIS_HIDE - update_icon() + update_appearance(updates = ALL) update_baking_audio() return TRUE @@ -178,7 +177,7 @@ to_chat(user,span_notice("The access panel won't budge with a tray inside!")) return TRUE panel_open = !panel_open - update_icon() + update_appearance(updates = ALL) return TRUE diff --git a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm index f85e1aff0663..415dbe9f32e0 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm @@ -146,10 +146,11 @@ /obj/machinery/smartfridge/obj_break(damage_flag) if(!(stat & BROKEN)) stat |= BROKEN - update_icon() + update_appearance(updates = ALL) ..(damage_flag) -/obj/machinery/smartfridge/update_icon() +/obj/machinery/smartfridge/update_appearance(updates = ALL) + . = ..() var/startstate = initial(icon_state) if(stat & BROKEN) icon_state = "[startstate]-broken" @@ -230,7 +231,7 @@ if(accept_check(O)) load(O) user.visible_message("[user] has added \the [O] to \the [src].", span_notice("You add \the [O] to \the [src].")) - update_icon() + update_appearance(updates = ALL) updateUsrDialog() if(contents.len >= max_n_of_items) indicate_full() @@ -245,7 +246,7 @@ if(accept_check(G)) load(G) loaded++ - update_icon() + update_appearance(updates = ALL) updateUsrDialog() if(loaded) @@ -272,7 +273,7 @@ load(organ) OS.clear_organ() user.visible_message("[user] has added \the [organ] to \the [src].", span_notice("You add \the [organ] to \the [src].")) - update_icon() + update_appearance(updates = ALL) updateUsrDialog() if(contents.len >= max_n_of_items) indicate_full() @@ -377,7 +378,7 @@ if(O.name == params["name"]) dispense(O, usr) break - update_icon() + update_appearance(updates = ALL) cut_overlay(full_indicator_state) animate_dispenser() return TRUE @@ -390,7 +391,7 @@ dispense(O, usr) desired-- - update_icon() + update_appearance(updates = ALL) cut_overlay(full_indicator_state) animate_dispenser() return TRUE @@ -454,7 +455,7 @@ /obj/machinery/smartfridge/drying_rack/ui_act(action, params) . = ..() if(.) - update_icon() // This is to handle a case where the last item is taken out manually instead of through drying pop-out + update_appearance(updates = ALL) // This is to handle a case where the last item is taken out manually instead of through drying pop-out return switch(action) if("Dry") @@ -474,10 +475,10 @@ /obj/machinery/smartfridge/drying_rack/load() //For updating the filled overlay ..() - update_icon() + update_appearance(updates = ALL) -/obj/machinery/smartfridge/drying_rack/update_icon() - ..() +/obj/machinery/smartfridge/drying_rack/update_appearance(updates = ALL) + . = ..() cut_overlays() if(drying) add_overlay("drying_rack_drying") @@ -489,7 +490,7 @@ if(drying) if(rack_dry())//no need to update unless something got dried SStgui.update_uis(src) - update_icon() + update_appearance(updates = ALL) /obj/machinery/smartfridge/drying_rack/accept_check(obj/item/O) if(istype(O, /obj/item/reagent_containers/food/snacks/)) @@ -507,7 +508,7 @@ else drying = TRUE use_power = ACTIVE_POWER_USE - update_icon() + update_appearance(updates = ALL) /obj/machinery/smartfridge/drying_rack/proc/rack_dry() for(var/obj/item/reagent_containers/food/snacks/S in src) diff --git a/code/modules/food_and_drinks/pizzabox.dm b/code/modules/food_and_drinks/pizzabox.dm index 15d995943de2..2b8419ca10e8 100644 --- a/code/modules/food_and_drinks/pizzabox.dm +++ b/code/modules/food_and_drinks/pizzabox.dm @@ -31,14 +31,15 @@ /obj/item/pizzabox/Initialize(mapload) . = ..() - update_icon() + update_appearance(updates = ALL) /obj/item/pizzabox/Destroy() unprocess() return ..() -/obj/item/pizzabox/update_icon() +/obj/item/pizzabox/update_appearance(updates = ALL) + . = ..() // Description desc = initial(desc) if(open) @@ -104,7 +105,7 @@ audible_message(span_warning("[icon2html(src, hearers(src))] *beep*")) bomb_active = TRUE START_PROCESSING(SSobj, src) - update_icon() + update_appearance(updates = ALL) //ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/pizzabox/attack_hand(mob/user) @@ -115,13 +116,13 @@ user.put_in_hands(pizza) to_chat(user, span_notice("You take [pizza] out of [src].")) pizza = null - update_icon() + update_appearance(updates = ALL) else if(bomb) if(wires.is_all_cut() && bomb_defused) user.put_in_hands(bomb) to_chat(user, span_notice("You carefully remove the [bomb] from [src].")) bomb = null - update_icon() + update_appearance(updates = ALL) return else bomb_timer = input(user, "Set the [bomb] timer from [BOMB_TIMER_MIN] to [BOMB_TIMER_MAX].", bomb, bomb_timer) as num|null @@ -136,14 +137,14 @@ bomb.adminlog = "The [bomb.name] in [src.name] that [key_name(user)] activated has detonated!" to_chat(user, span_warning("You trap [src] with [bomb].")) - update_icon() + update_appearance(updates = ALL) else if(boxes.len) var/obj/item/pizzabox/topbox = boxes[boxes.len] boxes -= topbox user.put_in_hands(topbox) to_chat(user, span_notice("You remove the topmost [name] from the stack.")) - topbox.update_icon() - update_icon() + topbox.update_appearance(updates = ALL) + update_appearance(updates = ALL) user.regenerate_icons() /obj/item/pizzabox/attackby(obj/item/I, mob/user, params) @@ -158,8 +159,8 @@ boxes += add newbox.boxes.Cut() to_chat(user, span_notice("You put [newbox] on top of [src]!")) - newbox.update_icon() - update_icon() + newbox.update_appearance(updates = ALL) + update_appearance(updates = ALL) user.regenerate_icons() if(boxes.len >= 5) if(prob(10 * boxes.len)) @@ -179,7 +180,7 @@ return pizza = I to_chat(user, span_notice("You put [I] in [src].")) - update_icon() + update_appearance(updates = ALL) return else if(istype(I, /obj/item/bombcore/miniature/pizza)) if(open && !bomb) @@ -188,7 +189,7 @@ wires = new /datum/wires/explosive/pizza(src) bomb = I to_chat(user, span_notice("You put [I] in [src]. Sneeki breeki...")) - update_icon() + update_appearance(updates = ALL) return else if(bomb) to_chat(user, span_notice("[src] already has a bomb in it!")) @@ -202,7 +203,7 @@ if(!user.canUseTopic(src, BE_CLOSE)) return to_chat(user, span_notice("You write with [I] on [src].")) - update_icon() + update_appearance(updates = ALL) return else if(is_wire_tool(I)) if(wires && bomb) @@ -252,9 +253,9 @@ fall_dir = pick(GLOB.alldirs) step(P.pizza, fall_dir) P.pizza = null - P.update_icon() + P.update_appearance(updates = ALL) boxes -= P - update_icon() + update_appearance(updates = ALL) if(isliving(loc)) var/mob/living/L = loc L.regenerate_icons() @@ -263,7 +264,7 @@ STOP_PROCESSING(SSobj, src) qdel(wires) wires = null - update_icon() + update_appearance(updates = ALL) /obj/item/pizzabox/bomb/Initialize(mapload) . = ..() diff --git a/code/modules/food_and_drinks/plate.dm b/code/modules/food_and_drinks/plate.dm index 5140cd543efb..f7050ff6e628 100644 --- a/code/modules/food_and_drinks/plate.dm +++ b/code/modules/food_and_drinks/plate.dm @@ -31,7 +31,7 @@ I.pixel_y = clamp(text2num(click_params["icon-y"]) - 16, -placement_offset, max_height_offset) to_chat(user, span_notice("You place [I] on [src].")) AddToPlate(I, user) - update_icon() + update_appearance(updates = ALL) else return ..() diff --git a/code/modules/games/cas.dm b/code/modules/games/cas.dm index 9c53e54cc252..b05285a18fdc 100644 --- a/code/modules/games/cas.dm +++ b/code/modules/games/cas.dm @@ -78,7 +78,7 @@ H.pickup(user) user.put_in_hands(H) user.visible_message("[user] draws a card from the deck.", span_notice("You draw a card from the deck.")) - update_icon() + update_appearance(updates = ALL) /obj/item/toy/cards/deck/cas/attackby(obj/item/I, mob/living/user, params) if(istype(I, /obj/item/toy/cards/singlecard/cas)) @@ -93,9 +93,10 @@ cards += RC user.visible_message("[user] adds a card to the bottom of the deck.",span_notice("You add the card to the bottom of the deck.")) qdel(SC) - update_icon() + update_appearance(updates = ALL) -/obj/item/toy/cards/deck/cas/update_icon() +/obj/item/toy/cards/deck/cas/update_appearance(updates = ALL) + . = ..() if(cards.len < 26) icon_state = "deck_[deckstyle]_low" @@ -129,14 +130,15 @@ else if(flipped) name = buffertext flipped = !flipped - update_icon() + update_appearance(updates = ALL) /obj/item/toy/cards/singlecard/cas/AltClick(mob/living/user) if(!ishuman(user) || !user.canUseTopic(src, BE_CLOSE)) return Flip() -/obj/item/toy/cards/singlecard/cas/update_icon() +/obj/item/toy/cards/singlecard/cas/update_appearance(updates = ALL) + . = ..() if(flipped) icon_state = "[card_face]_flipped" else diff --git a/code/modules/goals/station_goals/bsa.dm b/code/modules/goals/station_goals/bsa.dm index 11149fb38997..709eb8bd0e30 100644 --- a/code/modules/goals/station_goals/bsa.dm +++ b/code/modules/goals/station_goals/bsa.dm @@ -255,7 +255,7 @@ if("recalibrate") calibrate(usr) . = TRUE - update_icon() + update_appearance(updates = ALL) /obj/machinery/computer/bsa_control/proc/calibrate(mob/user) if(!GLOB.bsa_unlock) diff --git a/code/modules/goals/station_goals/shield.dm b/code/modules/goals/station_goals/shield.dm index f981ad6066a1..7c0cc745bebc 100644 --- a/code/modules/goals/station_goals/shield.dm +++ b/code/modules/goals/station_goals/shield.dm @@ -116,9 +116,10 @@ else animate(src, pixel_y = 0, time = 1 SECONDS) anchored = FALSE - update_icon() + update_appearance(updates = ALL) -/obj/machinery/satellite/update_icon() +/obj/machinery/satellite/update_appearance(updates = ALL) + . = ..() icon_state = active ? "sat_active" : "sat_inactive" /obj/machinery/satellite/multitool_act(mob/living/user, obj/item/I) diff --git a/code/modules/holodeck/area_copy.dm b/code/modules/holodeck/area_copy.dm index 87d2981dd78c..6140e35b78fd 100644 --- a/code/modules/holodeck/area_copy.dm +++ b/code/modules/holodeck/area_copy.dm @@ -37,7 +37,7 @@ GLOBAL_LIST_INIT(duplicate_forbidden_vars, list( var/obj/item/I = O I.damtype = STAMINA // thou shalt not - N.update_icon() + N.update_appearance(updates = ALL) if(ismachinery(O)) var/obj/machinery/M = O M.power_change() diff --git a/code/modules/holodeck/items.dm b/code/modules/holodeck/items.dm index 27220da6be7c..613037217dc3 100644 --- a/code/modules/holodeck/items.dm +++ b/code/modules/holodeck/items.dm @@ -187,7 +187,7 @@ ready = !ready - update_icon() + update_appearance(updates = ALL) var/numbuttons = 0 var/numready = 0 @@ -199,7 +199,8 @@ if(numbuttons == numready) begin_event() -/obj/machinery/readybutton/update_icon() +/obj/machinery/readybutton/update_appearance(updates = ALL) + . = ..() if(ready) icon_state = "auth_on" else diff --git a/code/modules/holodeck/turfs.dm b/code/modules/holodeck/turfs.dm index 94588436d409..3109e3bdde37 100644 --- a/code/modules/holodeck/turfs.dm +++ b/code/modules/holodeck/turfs.dm @@ -34,7 +34,7 @@ . = ..() if(src.type == /turf/open/floor/holofloor/grass) //don't want grass subtypes getting the icon state, icon_state = "grass[rand(1,4)]" - update_icon() + update_appearance(updates = ALL) /turf/open/floor/holofloor/beach gender = PLURAL @@ -117,9 +117,10 @@ /turf/open/floor/holofloor/carpet/Initialize(mapload) . = ..() - addtimer(CALLBACK(src, TYPE_PROC_REF(/atom/, update_icon)), 1) + addtimer(CALLBACK(src, TYPE_PROC_REF(/atom/, update_appearance)), 1) -/turf/open/floor/holofloor/carpet/update_icon() +/turf/open/floor/holofloor/carpet/update_appearance(updates = ALL) + . = ..() if(!..()) return 0 if(intact) diff --git a/code/modules/hydroponics/beekeeping/honeycomb.dm b/code/modules/hydroponics/beekeeping/honeycomb.dm index 1cf097c98ed6..6b40933d2bc0 100644 --- a/code/modules/hydroponics/beekeeping/honeycomb.dm +++ b/code/modules/hydroponics/beekeeping/honeycomb.dm @@ -17,10 +17,11 @@ . = ..() pixel_x = rand(8,-8) pixel_y = rand(8,-8) - update_icon() + update_appearance(updates = ALL) -/obj/item/reagent_containers/honeycomb/update_icon() +/obj/item/reagent_containers/honeycomb/update_appearance(updates = ALL) + . = ..() cut_overlays() var/mutable_appearance/honey_overlay = mutable_appearance(icon, /datum/reagent/consumable/honey) if(honey_color) @@ -37,4 +38,4 @@ reagents.add_reagent(R.type,5) else honey_color = "" - update_icon() \ No newline at end of file + update_appearance(updates = ALL) diff --git a/code/modules/hydroponics/biogenerator.dm b/code/modules/hydroponics/biogenerator.dm index eb2625ad9658..cd68db406ec7 100644 --- a/code/modules/hydroponics/biogenerator.dm +++ b/code/modules/hydroponics/biogenerator.dm @@ -31,7 +31,7 @@ ..() if(A == beaker) beaker = null - update_icon() + update_appearance(updates = ALL) /obj/machinery/biogenerator/contents_explosion(severity, target) ..() @@ -63,9 +63,10 @@ . += span_notice("The status display reads: Productivity at [productivity*100]%.
    Matter consumption reduced by [(efficiency*25)-25]%.
    Machine can hold up to [max_items] pieces of produce.") /obj/machinery/biogenerator/on_reagent_change(changetype) //When the reagents change, change the icon as well. - update_icon() + update_appearance(updates = ALL) -/obj/machinery/biogenerator/update_icon() +/obj/machinery/biogenerator/update_appearance(updates = ALL) + . = ..() if(panel_open) icon_state = "biogen-empty-o" else if(!src.beaker) @@ -88,7 +89,7 @@ var/obj/item/reagent_containers/glass/B = beaker B.forceMove(drop_location()) beaker = null - update_icon() + update_appearance(updates = ALL) return if(default_deconstruction_crowbar(O)) @@ -104,7 +105,7 @@ return beaker = O to_chat(user, span_notice("You add the container to the machine.")) - update_icon() + update_appearance(updates = ALL) else to_chat(user, span_warning("Close the maintenance panel first.")) return @@ -184,12 +185,12 @@ qdel(I) if(S) processing = TRUE - update_icon() + update_appearance(updates = ALL) playsound(loc, 'sound/machines/blender.ogg', 50, TRUE) use_power(S * 30) sleep(S + 15 / productivity) processing = FALSE - update_icon() + update_appearance(updates = ALL) /obj/machinery/biogenerator/proc/check_cost(list/materials, multiplier = 1, remove_points = TRUE) if(materials.len != 1 || materials[1] != getmaterialref(/datum/material/biomass)) @@ -199,7 +200,7 @@ else if(remove_points) points -= materials[getmaterialref(/datum/material/biomass)]*multiplier/efficiency - update_icon() + update_appearance(updates = ALL) return TRUE /obj/machinery/biogenerator/proc/check_container_volume(list/reagents, multiplier = 1) @@ -240,7 +241,7 @@ beaker.reagents.add_reagent(R, D.make_reagents[R]) . = 1 --i - update_icon() + update_appearance(updates = ALL) return . /obj/machinery/biogenerator/proc/detach(mob/living/user) @@ -250,7 +251,7 @@ else beaker.drop_location(get_turf(src)) beaker = null - update_icon() + update_appearance(updates = ALL) /obj/machinery/biogenerator/ui_status(mob/user) if(stat & BROKEN || panel_open) diff --git a/code/modules/hydroponics/fermenting_barrel.dm b/code/modules/hydroponics/fermenting_barrel.dm index efc99f269478..aab59cc4af07 100644 --- a/code/modules/hydroponics/fermenting_barrel.dm +++ b/code/modules/hydroponics/fermenting_barrel.dm @@ -63,9 +63,10 @@ ENABLE_BITFIELD(reagents.flags, DRAINABLE) DISABLE_BITFIELD(reagents.flags, REFILLABLE) to_chat(user, span_notice("You close [src], letting you draw from its tap.")) - update_icon() + update_appearance(updates = ALL) -/obj/structure/fermenting_barrel/update_icon() +/obj/structure/fermenting_barrel/update_appearance(updates = ALL) + . = ..() if(open) icon_state = "barrel_open" else diff --git a/code/modules/hydroponics/gene_modder.dm b/code/modules/hydroponics/gene_modder.dm index 14f4baaf914b..c770e919ceda 100644 --- a/code/modules/hydroponics/gene_modder.dm +++ b/code/modules/hydroponics/gene_modder.dm @@ -55,8 +55,8 @@ min_wchance = 0 min_wrate = 0 -/obj/machinery/plantgenes/update_icon() - ..() +/obj/machinery/plantgenes/update_appearance(updates = ALL) + . = ..() cut_overlays() if((stat & (BROKEN|NOPOWER))) icon_state = "dnamod-off" @@ -71,7 +71,7 @@ /obj/machinery/plantgenes/attackby(obj/item/I, mob/user, params) if(default_deconstruction_screwdriver(user, "dnamod", "dnamod", I)) - update_icon() + update_appearance(updates = ALL) return if(default_deconstruction_crowbar(I)) return @@ -261,7 +261,7 @@ seed.verb_pickup() seed = null update_genes() - update_icon() + update_appearance(updates = ALL) else var/obj/item/I = usr.get_active_held_item() if (istype(I, /obj/item/seeds)) @@ -269,7 +269,7 @@ return insert_seed(I) to_chat(usr, span_notice("You add [I] to the machine.")) - update_icon() + update_appearance(updates = ALL) else if(href_list["eject_disk"] && !operation) var/obj/item/I = usr.get_active_held_item() eject_disk() @@ -278,7 +278,7 @@ return disk = I to_chat(usr, span_notice("You add [I] to the machine.")) - update_icon() + update_appearance(updates = ALL) else if(href_list["op"] == "insert" && disk && disk.gene && seed) if(!operation) // Wait for confirmation operation = "insert" @@ -337,10 +337,10 @@ else if(istype(G, /datum/plant_gene/core/weed_chance)) gene.value = max(gene.value, min_wchance) disk.update_name() - disk.update_icon() + disk.update_appearance(updates = ALL) qdel(seed) seed = null - update_icon() + update_appearance(updates = ALL) if("replace") if(disk && disk.gene && istype(disk.gene, G.type) && istype(G, /datum/plant_gene/core)) seed.genes -= G @@ -372,7 +372,7 @@ S.forceMove(src) seed = S update_genes() - update_icon() + update_appearance(updates = ALL) /obj/machinery/plantgenes/proc/eject_disk() if (disk && !operation) @@ -383,7 +383,7 @@ disk.forceMove(drop_location()) disk = null update_genes() - update_icon() + update_appearance(updates = ALL) /obj/machinery/plantgenes/proc/update_genes() core_genes = list() @@ -436,20 +436,19 @@ /obj/item/disk/plantgene/Initialize(mapload) . = ..() - update_icon() + update_appearance(updates = ALL) src.pixel_x = rand(-5, 5) src.pixel_y = rand(-5, 5) -/obj/item/disk/plantgene/update_icon() +/obj/item/disk/plantgene/update_appearance(updates = ALL) + . = ..() cut_overlays() if(gene) add_overlay("datadisk_gene") -/obj/item/disk/plantgene/proc/update_name() - if(gene) - name = "[gene.get_name()] (plant data disk)" - else - name = "plant data disk" +/obj/item/disk/plantgene/update_name() + . = ..() + name = gene ? "[gene.get_name()] (plant data disk)" : "plant data disk" /obj/item/disk/plantgene/attack_self(mob/user) read_only = !read_only diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index aef012e31693..1adc5d9df247 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -215,7 +215,7 @@ weedinvasion() // Weed invasion into empty tray needs_update = 1 if (needs_update) - update_icon() + update_appearance(updates = ALL) return /obj/machinery/hydroponics/proc/nutrimentMutation() @@ -237,7 +237,8 @@ return return -/obj/machinery/hydroponics/update_icon() +/obj/machinery/hydroponics/update_appearance(updates = ALL) + . = ..() //Refreshes the icon and sets the luminosity cut_overlays() @@ -360,7 +361,7 @@ harvest = 0 weedlevel = 0 // Reset pestlevel = 0 // Reset - update_icon() + update_appearance(updates = ALL) visible_message(span_warning("The [oldPlantName] is overtaken by some [myseed.plantname]!")) update_name() @@ -394,7 +395,7 @@ weedlevel = 0 // Reset sleep(0.5 SECONDS) // Wait a while - update_icon() + update_appearance(updates = ALL) visible_message(span_warning("[oldPlantName] suddenly mutates into [myseed.plantname]!")) update_name() @@ -414,7 +415,7 @@ weedlevel = 0 // Reset sleep(0.5 SECONDS) // Wait a while - update_icon() + update_appearance(updates = ALL) visible_message(span_warning("The mutated weeds in [src] spawn some [myseed.plantname]!")) update_name() else @@ -426,7 +427,7 @@ pestlevel = 0 // Pests die lastproduce = 0 if(!dead) - update_icon() + update_appearance(updates = ALL) dead = 1 @@ -777,9 +778,9 @@ S.clear_reagents() qdel(S) - H.update_icon() + H.update_appearance(updates = ALL) if(reagent_source) // If the source wasn't composted and destroyed - reagent_source.update_icon() + reagent_source.update_appearance(updates = ALL) return 1 else if(istype(O, /obj/item/seeds) && !istype(O, /obj/item/seeds/sample)) @@ -795,7 +796,7 @@ age = 1 plant_health = myseed.endurance lastcycle = world.time - update_icon() + update_appearance(updates = ALL) else to_chat(user, span_warning("[src] already has seeds in it!")) @@ -823,7 +824,7 @@ if(weedlevel > 0) user.visible_message("[user] uproots the weeds.", span_notice("You remove the weeds from [src].")) weedlevel = 0 - update_icon() + update_appearance(updates = ALL) else to_chat(user, span_warning("This plot is completely devoid of weeds! It doesn't need uprooting.")) @@ -844,7 +845,7 @@ user.visible_message(span_notice("[user] [using_irrigation ? "" : "dis"]connects [src]'s irrigation hoses."), \ span_notice("You [using_irrigation ? "" : "dis"]connect [src]'s irrigation hoses.")) for(var/obj/machinery/hydroponics/h in range(1,src)) - h.update_icon() + h.update_appearance(updates = ALL) else if(istype(O, /obj/item/shovel/spade)) if(!myseed && !weedlevel) @@ -864,7 +865,7 @@ myseed = null update_name() weedlevel = 0 //Has a side effect of cleaning up those nasty weeds - update_icon() + update_appearance(updates = ALL) else return ..() @@ -895,7 +896,7 @@ qdel(myseed) myseed = null update_name() - update_icon() + update_appearance(updates = ALL) else if(user) examine(user) @@ -903,7 +904,7 @@ /obj/machinery/hydroponics/AltClick(mob/user) . = ..() if(!anchored) - update_icon() + update_appearance(updates = ALL) return FALSE var/warning = tgui_alert(user, "Are you sure you wish to empty the tray's nutrient beaker?","Empty Tray Nutrients?", list("Yes", "No")) if(warning == "Yes" && user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) @@ -931,7 +932,7 @@ myseed = null update_name() dead = 0 - update_icon() + update_appearance(updates = ALL) /// Tray Setters - The following procs adjust the tray or plants variables, and make sure that the stat doesn't go out of bounds./// /obj/machinery/hydroponics/proc/adjustNutri(adjustamt) @@ -965,13 +966,11 @@ /obj/machinery/hydroponics/proc/become_self_sufficient() // Ambrosia Gaia effect visible_message(span_boldnotice("[src] begins to glow with a beautiful light!")) self_sustaining = TRUE - update_icon() + update_appearance(updates = ALL) -/obj/machinery/hydroponics/proc/update_name() - if(myseed) - name = "[initial(name)] ([myseed.plantname])" - else - name = initial(name) +/obj/machinery/hydroponics/update_name() + . = ..() + name = myseed ? "[initial(name)] ([myseed.plantname])" : initial(name) /////////////////////////////////////////////////////////////////////////////// /obj/machinery/hydroponics/soil //Not actually hydroponics at all! Honk! diff --git a/code/modules/hydroponics/plant_genes.dm b/code/modules/hydroponics/plant_genes.dm index f0acd1979f1f..54d2f1a97407 100644 --- a/code/modules/hydroponics/plant_genes.dm +++ b/code/modules/hydroponics/plant_genes.dm @@ -239,8 +239,8 @@ C.charge = newcharge if(isobj(C.loc)) var/obj/O = C.loc - O.update_icon() //update power meters and such - C.update_icon() + O.update_appearance(updates = ALL) //update power meters and such + C.update_appearance(updates = ALL) batteries_recharged = 1 if(batteries_recharged) to_chat(target, span_notice("Your batteries are recharged!")) diff --git a/code/modules/instruments/items.dm b/code/modules/instruments/items.dm index 7394c38f8656..968edfb4fc29 100644 --- a/code/modules/instruments/items.dm +++ b/code/modules/instruments/items.dm @@ -94,14 +94,14 @@ */ /obj/item/instrument/piano_synth/headphones/proc/start_playing() icon_state = "[initial(icon_state)]_on" - update_icon() + update_appearance(updates = ALL) /** * Called by a component signal when our song stops playing. */ /obj/item/instrument/piano_synth/headphones/proc/stop_playing() icon_state = "[initial(icon_state)]" - update_icon() + update_appearance(updates = ALL) /obj/item/instrument/banjo name = "banjo" diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm index ffa127dfe698..b418cd94824b 100644 --- a/code/modules/jobs/job_types/_job.dm +++ b/code/modules/jobs/job_types/_job.dm @@ -329,7 +329,7 @@ H.equip_to_slot_if_possible(PDA, ITEM_SLOT_ID) PDA.update_label() - PDA.update_icon() + PDA.update_appearance(updates = ALL) PDA.update_filters() else diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm index e11fa80ceebc..3ac70bf3e644 100644 --- a/code/modules/library/lib_items.dm +++ b/code/modules/library/lib_items.dm @@ -48,7 +48,7 @@ for(var/obj/item/I in loc) if(istype(I, /obj/item/book)) I.forceMove(src) - update_icon() + update_appearance(updates = ALL) /obj/structure/bookcase/attackby(obj/item/I, mob/user, params) switch(state) @@ -82,13 +82,13 @@ if(is_type_in_list(I, allowed_books)) if(!user.transferItemToLoc(I, src)) return - update_icon() + update_appearance(updates = ALL) else if(STR) for(var/obj/item/T in I.contents) if(istype(T, /obj/item/book) || istype(T, /obj/item/spellbook)) STR.remove_from_storage(T, src) to_chat(user, span_notice("You empty \the [I] into \the [src].")) - update_icon() + update_appearance(updates = ALL) else if(istype(I, /obj/item/pen)) if(!user.is_literate()) to_chat(user, span_notice("You scribble illegibly on the side of [src]!")) @@ -129,7 +129,7 @@ user.put_in_hands(choice) else choice.forceMove(drop_location()) - update_icon() + update_appearance(updates = ALL) /obj/structure/bookcase/deconstruct(disassembled = TRUE) @@ -139,7 +139,8 @@ qdel(src) -/obj/structure/bookcase/update_icon() +/obj/structure/bookcase/update_appearance(updates = ALL) + . = ..() if(contents.len < 5) icon_state = "book-[contents.len]" else @@ -152,7 +153,7 @@ /obj/structure/bookcase/manuals/medical/Initialize(mapload) . = ..() new /obj/item/book/manual/wiki/medical_cloning(src) - update_icon() + update_appearance(updates = ALL) /obj/structure/bookcase/manuals/engineering @@ -165,7 +166,7 @@ new /obj/item/book/manual/wiki/engineering_guide(src) new /obj/item/book/manual/wiki/engineering_singulo_tesla(src) new /obj/item/book/manual/wiki/robotics_cyborgs(src) - update_icon() + update_appearance(updates = ALL) /obj/structure/bookcase/manuals/research_and_development @@ -174,7 +175,7 @@ /obj/structure/bookcase/manuals/research_and_development/Initialize(mapload) . = ..() new /obj/item/book/manual/wiki/research_and_development(src) - update_icon() + update_appearance(updates = ALL) /* diff --git a/code/modules/library/random_books.dm b/code/modules/library/random_books.dm index 97f9366e0732..eb5056f95edf 100644 --- a/code/modules/library/random_books.dm +++ b/code/modules/library/random_books.dm @@ -31,11 +31,11 @@ /obj/structure/bookcase/random/Initialize(mapload) . = ..() if(!book_count || !isnum(book_count)) - update_icon() + update_appearance(updates = ALL) return book_count += pick(-1,-1,0,1,1) create_random_books(book_count, src, FALSE, category) - update_icon() + update_appearance(updates = ALL) /proc/create_random_books(amount = 2, location, fail_loud = FALSE, category = null) . = list() @@ -45,7 +45,7 @@ if(fail_loud || prob(5)) var/obj/item/paper/P = new(location) P.info = "There once was a book from Nantucket
    But the database failed us, so f*$! it.
    I tried to be good to you
    Now this is an I.O.U
    If you're feeling entitled, well, stuff it!

    ~" - P.update_icon() + P.update_appearance(updates = ALL) return if(prob(25)) category = null diff --git a/code/modules/library/soapstone.dm b/code/modules/library/soapstone.dm index ee83c53b4e8b..22d64efe709b 100644 --- a/code/modules/library/soapstone.dm +++ b/code/modules/library/soapstone.dm @@ -145,10 +145,10 @@ creator_key = user.ckey realdate = world.realtime map = SSmapping.config.map_name - update_icon() + update_appearance(updates = ALL) -/obj/structure/chisel_message/update_icon() - ..() +/obj/structure/chisel_message/update_appearance(updates = ALL) + . = ..() var/hash = md5(hidden_message) var/newcolor = copytext_char(hash, 1, 7) add_atom_colour("#[newcolor]", FIXED_COLOUR_PRIORITY) @@ -188,7 +188,7 @@ var/turf/newloc = locate(x, y, z) if(isturf(newloc)) forceMove(newloc) - update_icon() + update_appearance(updates = ALL) /obj/structure/chisel_message/examine(mob/user) . = ..() diff --git a/code/modules/mapping/mapping_helpers.dm b/code/modules/mapping/mapping_helpers.dm index 4a8a2064af37..1e4d5ab011f1 100644 --- a/code/modules/mapping/mapping_helpers.dm +++ b/code/modules/mapping/mapping_helpers.dm @@ -247,7 +247,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/mapping_helpers/no_lava) else var/obj/item/organ/O = part O.organ_flags |= ORGAN_FROZEN - j.update_icon() + j.update_appearance(updates = ALL) qdel(src) /obj/effect/mapping_helpers/teleport_anchor diff --git a/code/modules/mapping/minimap.dm b/code/modules/mapping/minimap.dm index 084a8b3697cd..c2ed5ffbd93f 100644 --- a/code/modules/mapping/minimap.dm +++ b/code/modules/mapping/minimap.dm @@ -105,9 +105,10 @@ /obj/item/map/station/Initialize(mapload) ..() minimaps += SSmapping.station_minimaps - update_icon() + update_appearance(updates = ALL) -/obj/item/map/update_icon() +/obj/item/map/update_appearance(updates = ALL) + . = ..() cut_overlays() var/datum/minimap/map = minimaps[1] if(!map) return diff --git a/code/modules/mining/equipment/explorer_gear.dm b/code/modules/mining/equipment/explorer_gear.dm index aa1adf0be3d4..85c0447a6b0c 100644 --- a/code/modules/mining/equipment/explorer_gear.dm +++ b/code/modules/mining/equipment/explorer_gear.dm @@ -124,10 +124,10 @@ /obj/item/clothing/head/helmet/space/hostile_environment/Initialize(mapload) . = ..() AddComponent(/datum/component/spraycan_paintable) - update_icon() + update_appearance(updates = ALL) -/obj/item/clothing/head/helmet/space/hostile_environment/update_icon() - ..() +/obj/item/clothing/head/helmet/space/hostile_environment/update_appearance(updates = ALL) + . = ..() cut_overlays() var/mutable_appearance/glass_overlay = mutable_appearance(icon, "hostile_env_glass") glass_overlay.appearance_flags = RESET_COLOR diff --git a/code/modules/mining/equipment/kinetic_crusher.dm b/code/modules/mining/equipment/kinetic_crusher.dm index fad185b85682..cf5bb8fc6822 100644 --- a/code/modules/mining/equipment/kinetic_crusher.dm +++ b/code/modules/mining/equipment/kinetic_crusher.dm @@ -28,7 +28,8 @@ var/detonation_damage = 50 var/backstab_bonus = 30 -/obj/item/twohanded/kinetic_crusher/update_icon() //Updates the sprite for in-hand and on-mob. +/obj/item/twohanded/kinetic_crusher/update_appearance(updates = ALL) + . = ..() //Updates the sprite for in-hand and on-mob. icon_state = "mining_hammer[wielded]" return @@ -508,7 +509,8 @@ ..() -/obj/item/twohanded/kinetic_crusher/mega/update_icon() +/obj/item/twohanded/kinetic_crusher/mega/update_appearance(updates = ALL) + . = ..() icon_state = "magmite_crusher[wielded]" return diff --git a/code/modules/mining/equipment/marker_beacons.dm b/code/modules/mining/equipment/marker_beacons.dm index 864fdb0e26b2..34dca7a708e6 100644 --- a/code/modules/mining/equipment/marker_beacons.dm +++ b/code/modules/mining/equipment/marker_beacons.dm @@ -33,14 +33,15 @@ GLOBAL_LIST_INIT(marker_beacon_colors, list( /obj/item/stack/marker_beacon/Initialize(mapload) . = ..() - update_icon() + update_appearance(updates = ALL) /obj/item/stack/marker_beacon/examine(mob/user) . = ..() . += "Use in-hand to place a [singular_name].\n"+\ "Alt-click to select a color. Current color is [picked_color]." -/obj/item/stack/marker_beacon/update_icon() +/obj/item/stack/marker_beacon/update_appearance(updates = ALL) + . = ..() icon_state = "[initial(icon_state)][lowertext(picked_color)]" /obj/item/stack/marker_beacon/attack_self(mob/user) @@ -64,7 +65,7 @@ GLOBAL_LIST_INIT(marker_beacon_colors, list( return if(input_color) picked_color = input_color - update_icon() + update_appearance(updates = ALL) /obj/structure/marker_beacon name = "marker beacon" @@ -83,20 +84,21 @@ GLOBAL_LIST_INIT(marker_beacon_colors, list( /obj/structure/marker_beacon/Initialize(mapload, set_color) . = ..() picked_color = set_color - update_icon() + update_appearance(updates = ALL) /obj/structure/marker_beacon/deconstruct(disassembled = TRUE) if(!(flags_1 & NODECONSTRUCT_1)) var/obj/item/stack/marker_beacon/M = new(loc) M.picked_color = picked_color - M.update_icon() + M.update_appearance(updates = ALL) qdel(src) /obj/structure/marker_beacon/examine(mob/user) . = ..() . += span_notice("Alt-click to select a color. Current color is [picked_color].") -/obj/structure/marker_beacon/update_icon() +/obj/structure/marker_beacon/update_appearance(updates = ALL) + . = ..() while(!picked_color || !GLOB.marker_beacon_colors[picked_color]) picked_color = pick(GLOB.marker_beacon_colors) icon_state = "[initial(icon_state)][lowertext(picked_color)]-on" @@ -110,7 +112,7 @@ GLOBAL_LIST_INIT(marker_beacon_colors, list( if(do_after(user, remove_speed, src)) var/obj/item/stack/marker_beacon/M = new(loc) M.picked_color = picked_color - M.update_icon() + M.update_appearance(updates = ALL) transfer_fingerprints_to(M) if(user.put_in_hands(M, TRUE)) //delete the beacon if it fails playsound(src, 'sound/items/deconstruct.ogg', 50, 1) @@ -143,4 +145,4 @@ GLOBAL_LIST_INIT(marker_beacon_colors, list( return if(input_color) picked_color = input_color - update_icon() + update_appearance(updates = ALL) diff --git a/code/modules/mining/equipment/regenerative_core.dm b/code/modules/mining/equipment/regenerative_core.dm index 2a5a7e004690..5181990fd899 100644 --- a/code/modules/mining/equipment/regenerative_core.dm +++ b/code/modules/mining/equipment/regenerative_core.dm @@ -41,7 +41,7 @@ /obj/item/organ/regenerative_core/proc/preserved(implanted = 0) inert = FALSE preserved = TRUE - update_icon() + update_appearance(updates = ALL) name = "preserved regenerative core" desc = "All that remains of a hivelord. It is preserved, allowing you to use it to heal completely without danger of decay." if(implanted) @@ -54,7 +54,7 @@ name = "decayed regenerative core" desc = "All that remains of a hivelord. It has decayed, and is completely useless." SSblackbox.record_feedback("nested tally", "hivelord_core", 1, list("[type]", "inert")) - update_icon() + update_appearance(updates = ALL) /obj/item/organ/regenerative_core/ui_action_click() if(inert) @@ -134,9 +134,10 @@ /obj/item/organ/regenerative_core/legion/Initialize(mapload) . = ..() - update_icon() + update_appearance(updates = ALL) -/obj/item/organ/regenerative_core/update_icon() +/obj/item/organ/regenerative_core/update_appearance(updates = ALL) + . = ..() icon_state = inert ? "legion_soul_inert" : "legion_soul" cut_overlays() if(!inert && !preserved) diff --git a/code/modules/mining/equipment/survival_pod.dm b/code/modules/mining/equipment/survival_pod.dm index 8baa359fe742..106cbb6a0e06 100644 --- a/code/modules/mining/equipment/survival_pod.dm +++ b/code/modules/mining/equipment/survival_pod.dm @@ -138,7 +138,8 @@ icon = 'icons/obj/lavaland/survival_pod.dmi' icon_state = "sleeper" -/obj/machinery/sleeper/survival_pod/update_icon() +/obj/machinery/sleeper/survival_pod/update_appearance(updates = ALL) + . = ..() if(state_open) cut_overlays() else @@ -154,8 +155,9 @@ /obj/machinery/stasis/survival_pod/play_power_sound() return -/obj/machinery/stasis/survival_pod/update_icon() - return +/obj/machinery/stasis/survival_pod/Initialize(mapload) + AddElement(/datum/element/update_icon_blocker) + return ..() //Computer /obj/item/gps/computer @@ -206,8 +208,9 @@ pitches = FALSE var/empty = FALSE -/obj/machinery/smartfridge/survival_pod/update_icon() - return +/obj/machinery/smartfridge/survival_pod/Initialize(mapload) + AddElement(/datum/element/update_icon_blocker) + return ..() /obj/machinery/smartfridge/survival_pod/Initialize(mapload) . = ..() diff --git a/code/modules/mining/lavaland/ash_flora.dm b/code/modules/mining/lavaland/ash_flora.dm index 4d6908fa6f0b..e10c68c57082 100644 --- a/code/modules/mining/lavaland/ash_flora.dm +++ b/code/modules/mining/lavaland/ash_flora.dm @@ -300,7 +300,8 @@ icon = 'icons/obj/lavaland/ash_flora.dmi' icon_state = "mushroom_bowl" -/obj/item/reagent_containers/glass/bowl/mushroom_bowl/update_icon() +/obj/item/reagent_containers/glass/bowl/mushroom_bowl/update_appearance(updates = ALL) + . = ..() cut_overlays() if(reagents && reagents.total_volume) var/mutable_appearance/filling = mutable_appearance('icons/obj/lavaland/ash_flora.dmi', "fullbowl") diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index c9192aac2f50..8db367dafc34 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -683,7 +683,8 @@ GLOBAL_LIST_EMPTY(aide_list) desc = "A flask with an almost-holy aura emitting from it. The label on the bottle says: 'erqo'hyy tvi'rf lbh jv'atf'." list_reagents = list(/datum/reagent/flightpotion = 5) -/obj/item/reagent_containers/glass/bottle/potion/update_icon() +/obj/item/reagent_containers/glass/bottle/potion/update_appearance(updates = ALL) + . = ..() if(reagents.total_volume) icon_state = initial(icon_state) desc = initial(desc) @@ -1504,18 +1505,19 @@ GLOBAL_LIST_EMPTY(aide_list) chaser_speed = max(chaser_speed + health_percent, 0.5) //one tenth of a second faster for each missing 10% of health blast_range -= round(health_percent * 10) //one additional range for each missing 10% of health -/obj/item/hierophant_club/update_icon() +/obj/item/hierophant_club/update_appearance(updates = ALL) + . = ..() icon_state = "hierophant_club[timer <= world.time ? "_ready":""][(beacon && !QDELETED(beacon)) ? "":"_beacon"]" item_state = icon_state if(ismob(loc)) var/mob/M = loc - M.update_inv_hands() + M.update_held_items() M.update_inv_back() /obj/item/hierophant_club/proc/prepare_icon_update() - update_icon() + update_appearance(updates = ALL) sleep(timer - world.time) - update_icon() + update_appearance(updates = ALL) /obj/item/hierophant_club/ui_action_click(mob/user, action) if(istype(action, /datum/action/item_action/toggle_unfriendly_fire)) //toggle friendly fire... @@ -1743,7 +1745,7 @@ GLOBAL_LIST_EMPTY(aide_list) var/fauna_damage_type = BRUTE resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF -/obj/item/twohanded/bonespear/stalwartpike/update_icon() +/obj/item/twohanded/bonespear/stalwartpike/update_appearance(updates = ALL) . = ..() if(wielded) icon_state = "stalwart_spear1" diff --git a/code/modules/mining/lavaland/world_anvil.dm b/code/modules/mining/lavaland/world_anvil.dm index acf746ba7888..e0d31ddc29df 100644 --- a/code/modules/mining/lavaland/world_anvil.dm +++ b/code/modules/mining/lavaland/world_anvil.dm @@ -27,7 +27,8 @@ QDEL_NULL(internal) . = ..() -/obj/structure/world_anvil/update_icon() +/obj/structure/world_anvil/update_appearance(updates = ALL) + . = ..() icon_state = forge_charges > 0 ? "anvil_a" : "anvil" if(forge_charges > 0) set_light(4,1,LIGHT_COLOR_ORANGE) @@ -44,7 +45,7 @@ forge_charges = forge_charges + placed_ore.quality to_chat(user,"You place down the gibtonite on the World Anvil, and watch as the gibtonite melts into it. The World Anvil is now heated enough for [forge_charges] forge[forge_charges > 1 ? "s" : ""].") qdel(placed_ore) - update_icon() + update_appearance(updates = ALL) return if(forge_charges <= 0) to_chat(user,"The World Anvil is not hot enough to be usable!") @@ -70,7 +71,7 @@ forge_charges-- if(forge_charges <= 0) visible_message("The World Anvil cools down.") - update_icon() + update_appearance(updates = ALL) diff --git a/code/modules/mining/machine_redemption.dm b/code/modules/mining/machine_redemption.dm index 998142f53fc9..a44d5972d78a 100644 --- a/code/modules/mining/machine_redemption.dm +++ b/code/modules/mining/machine_redemption.dm @@ -345,7 +345,8 @@ do_sparks(5, TRUE, src) ..() -/obj/machinery/mineral/ore_redemption/update_icon() +/obj/machinery/mineral/ore_redemption/update_appearance(updates = ALL) + . = ..() if(powered()) icon_state = initial(icon_state) else diff --git a/code/modules/mining/machine_silo.dm b/code/modules/mining/machine_silo.dm index ddaa3629eca9..ef65ebe7688b 100644 --- a/code/modules/mining/machine_silo.dm +++ b/code/modules/mining/machine_silo.dm @@ -71,7 +71,7 @@ GLOBAL_LIST_EMPTY(silo_access_logs) if(user.a_intent == INTENT_HARM) //so we can hit the machine return ..() - if(default_deconstruction_screwdriver(user, "icon_state", "icon_state", W)) + if(default_deconstruction_screwdriver(user, "silo_open", "silo", W)) return TRUE if(default_deconstruction_crowbar(W)) diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm index 4727e1a51b3b..9156452293ac 100644 --- a/code/modules/mining/machine_vending.dm +++ b/code/modules/mining/machine_vending.dm @@ -105,7 +105,8 @@ var/datum/data/mining_equipment/M = p GLOB.vending_products[M.equipment_path] = 1 -/obj/machinery/mineral/equipment_vendor/update_icon() +/obj/machinery/mineral/equipment_vendor/update_appearance(updates = ALL) + . = ..() if(powered()) icon_state = initial(icon_state) else diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm index 1527ab7d8c16..ced57ad0d8ea 100644 --- a/code/modules/mining/ores_coins.dm +++ b/code/modules/mining/ores_coins.dm @@ -22,7 +22,8 @@ var/list/stack_overlays var/edible = FALSE //can a preternis eat it for some funny effect? -/obj/item/stack/ore/update_icon() +/obj/item/stack/ore/update_appearance(updates = ALL) + . = ..() var/difference = min(ORESTACK_OVERLAYS_MAX, amount) - (LAZYLEN(stack_overlays)+1) if(difference == 0) return @@ -620,7 +621,7 @@ GLOBAL_LIST_INIT(sand_recipes, list(\ /obj/item/coinstack/Initialize(mapload) . = ..() coins = list() - update_icon() + update_appearance(updates = ALL) /obj/item/coinstack/examine(mob/user) . = ..() @@ -634,7 +635,8 @@ GLOBAL_LIST_INIT(sand_recipes, list(\ if(antag > 1) . += span_info("But they told me I could only have one at a time...") -/obj/item/coinstack/update_icon() +/obj/item/coinstack/update_appearance(updates = ALL) + . = ..() cut_overlays() for(var/i in 1 to length(coins)) var/obj/item/coin/C = coins[i] @@ -663,7 +665,7 @@ GLOBAL_LIST_INIT(sand_recipes, list(\ C.pixel_y = 0 src.add_fingerprint(user) to_chat(user,span_notice("You add [C] to the stack of coins.")) - update_icon() + update_appearance(updates = ALL) return TRUE /obj/item/coinstack/proc/remove_from_stack(mob/living/user) //you can only remove the topmost coin from the stack @@ -671,7 +673,7 @@ GLOBAL_LIST_INIT(sand_recipes, list(\ if(top_coin) coins -= top_coin user.put_in_active_hand(top_coin) - update_icon() + update_appearance(updates = ALL) if(length(coins) <= 1) //one coin left, we're done here var/obj/item/coin/lastCoin = coins[1] coins -= coins[1] diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index ad6b3592ae60..463aa249a736 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -297,7 +297,7 @@ observer.real_name = observer.client.prefs.read_preference(/datum/preference/name/real_name) observer.name = observer.real_name observer.client.init_verbs() - observer.update_icon() + observer.update_appearance(updates = ALL) observer.stop_sound_channel(CHANNEL_LOBBYMUSIC) QDEL_NULL(mind) qdel(src) diff --git a/code/modules/mob/dead/observer/login.dm b/code/modules/mob/dead/observer/login.dm index e39207ffde59..a84f7467ae6a 100644 --- a/code/modules/mob/dead/observer/login.dm +++ b/code/modules/mob/dead/observer/login.dm @@ -16,5 +16,5 @@ if (isturf(T)) update_z(T.z) - update_icon(preferred_form) + update_appearance(UPDATE_ICON, preferred_form) updateghostimages() diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 640270573be5..f111f8559a8f 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -115,7 +115,7 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) facial_hair_style = body_human.facial_hair_style facial_hair_color = brighten_color(body_human.facial_hair_color) - update_icon() + update_appearance(updates = ALL) if(!T || is_secret_level(T.z)) var/list/turfs = get_area_turfs(/area/shuttle/arrival) @@ -188,12 +188,14 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) /* * This proc will update the icon of the ghost itself, with hair overlays, as well as the ghost image. - * Please call update_icon(icon_state) from now on when you want to update the icon_state of the ghost, + * Please call update_appearance(UPDATE_ICON, icon_state) from now on when you want to update the icon_state of the ghost, * or you might end up with hair on a sprite that's not supposed to get it. * Hair will always update its dir, so if your sprite has no dirs the haircut will go all over the place. * |- Ricotez */ -/mob/dead/observer/update_icon(new_form) +/mob/dead/observer/update_icon(updates=ALL, new_form) + . = ..() + if(client) //We update our preferences in case they changed right before update_icon was called. ghost_accs = client.prefs.read_preference(/datum/preference/choiced/ghost_accessories) ghost_others = client.prefs.read_preference(/datum/preference/choiced/ghost_others) @@ -818,7 +820,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp qdel(species) - update_icon() + update_appearance(updates = ALL) /mob/dead/observer/canUseTopic(atom/movable/M, be_close=FALSE, no_dextery=FALSE, no_tk=FALSE) return IsAdminGhost(usr) diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm index d2d45a4660d6..7fa172b75bcd 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -190,7 +190,7 @@ I.equipped(src, ITEM_SLOT_HANDS, no_sound) if(I.pulledby) I.pulledby.stop_pulling() - update_inv_hands() + update_held_items() I.pixel_x = initial(I.pixel_x) I.pixel_y = initial(I.pixel_y) I.transform = initial(I.transform) @@ -336,7 +336,7 @@ var/hand_index = get_held_index_of_item(I) if(hand_index) held_items[hand_index] = null - update_inv_hands() + update_held_items() if(I) if(client) client.screen -= I @@ -440,7 +440,7 @@ return FALSE if(M.equip_to_appropriate_slot(src)) - M.update_inv_hands() + M.update_held_items() return TRUE else if(equip_delay_self) diff --git a/code/modules/mob/living/brain/MMI.dm b/code/modules/mob/living/brain/MMI.dm index 57ed3dd01f24..f2e332062579 100644 --- a/code/modules/mob/living/brain/MMI.dm +++ b/code/modules/mob/living/brain/MMI.dm @@ -24,7 +24,8 @@ Unless you are slaved as a silicon, you retain crew/antagonist/etc status and should behave as such.\n\ Being placed in a mech does not slave you to any laws." -/obj/item/mmi/update_icon() +/obj/item/mmi/update_appearance(updates = ALL) + . = ..() if(!brain) icon_state = "mmi_off" return @@ -83,7 +84,7 @@ brain = newbrain name = "[initial(name)]: [brainmob.real_name]" - update_icon() + update_appearance(updates = ALL) SSblackbox.record_feedback("amount", "mmis_filled", 1) @@ -110,7 +111,7 @@ if(!brainmob) return to_chat(brainmob, span_userdanger("Due to the traumatic danger of your removal, all memories of the events leading to your brain being removed are lost[rebooting ? ", along with all memories of the events leading to your death as a cyborg" : ""]")) eject_brain(user) - update_icon() + update_appearance(updates = ALL) name = initial(name) user.visible_message(span_notice("[user] rips the brain out of [src]"), span_danger("You successfully remove the brain from the [src][rebooting ? ", interrupting the reboot process" : ""]")) if(rebooting) @@ -159,7 +160,7 @@ name = "[initial(name)]: [brainmob.real_name]" to_chat(brainmob, welcome_message) - update_icon() + update_appearance(updates = ALL) return /obj/item/mmi/proc/replacement_ai_name() diff --git a/code/modules/mob/living/brain/death.dm b/code/modules/mob/living/brain/death.dm index e90637f63ed8..9419a9ebe61a 100644 --- a/code/modules/mob/living/brain/death.dm +++ b/code/modules/mob/living/brain/death.dm @@ -7,7 +7,7 @@ var/obj/item/mmi = container mmi.visible_message(span_warning("[src]'s MMI flatlines!"), \ span_italics("You hear something flatline.")) - mmi.update_icon() + mmi.update_appearance(updates = ALL) return ..() diff --git a/code/modules/mob/living/brain/posibrain.dm b/code/modules/mob/living/brain/posibrain.dm index 5037d46eb4c6..2f09d55b9a1b 100644 --- a/code/modules/mob/living/brain/posibrain.dm +++ b/code/modules/mob/living/brain/posibrain.dm @@ -60,12 +60,12 @@ GLOBAL_VAR(posibrain_notify_cooldown) ping_ghosts("requested", FALSE) next_ask = world.time + askDelay searching = TRUE - update_icon() + update_appearance(updates = ALL) addtimer(CALLBACK(src, PROC_REF(check_success)), askDelay) /obj/item/mmi/posibrain/proc/check_success() searching = FALSE - update_icon() + update_appearance(updates = ALL) if(QDELETED(brainmob)) return if(brainmob.client) @@ -131,7 +131,7 @@ GLOBAL_VAR(posibrain_notify_cooldown) brainmob.mind.remove_all_antag() brainmob.mind.wipe_memory() - update_icon() + update_appearance(updates = ALL) return ..() /obj/item/mmi/posibrain/proc/transfer_personality(mob/candidate) @@ -210,7 +210,8 @@ GLOBAL_VAR(posibrain_notify_cooldown) return -/obj/item/mmi/posibrain/update_icon() +/obj/item/mmi/posibrain/update_appearance(updates = ALL) + . = ..() if(searching) icon_state = "[initial(icon_state)]-searching" return diff --git a/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm b/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm index 3e5fdaf31ef9..f7de3864883d 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm @@ -44,7 +44,7 @@ alt_icon = old_icon pixel_x = get_standard_pixel_x_offset(mobility_flags & MOBILITY_STAND) pixel_y = get_standard_pixel_y_offset(mobility_flags & MOBILITY_STAND) - update_inv_hands() + update_held_items() update_inv_handcuffed() /mob/living/carbon/alien/humanoid/regenerate_icons() @@ -75,7 +75,7 @@ overlays_standing[HANDCUFF_LAYER] = cuffs //Royals have bigger sprites, so inhand things must be handled differently. -/mob/living/carbon/alien/humanoid/royal/update_inv_hands() +/mob/living/carbon/alien/humanoid/royal/update_held_items() ..() remove_overlay(HANDS_LAYER) var/list/hands = list() diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 340f9918a803..a91fbb42e26b 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -45,10 +45,10 @@ var/atom/movable/screen/inventory/hand/H H = hud_used.hand_slots["[oindex]"] if(H) - H.update_icon() + H.update_appearance(updates = ALL) H = hud_used.hand_slots["[held_index]"] if(H) - H.update_icon() + H.update_appearance(updates = ALL) /mob/living/carbon/activate_hand(selhand) //l/r OR 1-held_items.len diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index dddace248ac9..97b3fc2f9b4b 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -67,7 +67,7 @@ I.attack_hand(src) if(get_active_held_item() == I) //if our attack_hand() picks up the item... visible_message(span_warning("[src] catches [I]!")) //catch that sucker! - update_inv_hands() + update_held_items() I.pixel_x = initial(I.pixel_x) I.pixel_y = initial(I.pixel_y) I.transform = initial(I.transform) @@ -619,7 +619,7 @@ name = "self-grasp" desc = "Sometimes all you can do is slow the bleeding." icon = 'icons/obj/toy.dmi' - icon_state = "latexballon" + icon_state = "latexballoon" item_state = "nothing" force = 0 throwforce = 0 diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index 2574a5250c22..f6a10476b4cf 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -80,7 +80,7 @@ FP.entered_dirs |= dir FP.bloodiness = S.bloody_shoes[S.blood_state] - BLOOD_LOSS_IN_SPREAD FP.add_blood_DNA(S.return_blood_DNA()) - FP.update_icon() + FP.update_appearance(updates = ALL) update_inv_shoes() //End bloody footprints if(istype(S)) diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index f87e39120139..b458519df514 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -343,7 +343,7 @@ to_chat(src, "You have no backpack to take something out of!") return if(equip_to_slot_if_possible(thing, ITEM_SLOT_BACK)) - update_inv_hands() + update_held_items() return if(!SEND_SIGNAL(equipped_back, COMSIG_CONTAINS_STORAGE)) // not a storage item if(!thing) @@ -374,7 +374,7 @@ to_chat(src, "You have no belt to take something out of!") return if(equip_to_slot_if_possible(thing, ITEM_SLOT_BELT)) - update_inv_hands() + update_held_items() return if(!SEND_SIGNAL(equipped_belt, COMSIG_CONTAINS_STORAGE)) // not a storage item if(!thing) @@ -403,7 +403,7 @@ to_chat(src, span_notice("You have no suit storage to take something out of.")) return if(equip_to_slot_if_possible(thing, ITEM_SLOT_SUITSTORE)) - update_inv_hands() + update_held_items() return if(!SEND_SIGNAL(equipped_suit, COMSIG_CONTAINS_STORAGE)) // not a storage item if(!thing) diff --git a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm index c5fdec856f51..dac08097aff6 100644 --- a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm @@ -147,6 +147,9 @@ var/obj/item/light_eater/blade decay_factor = 0 +/obj/item/organ/heart/nightmare/Initialize(mapload) + AddElement(/datum/element/update_icon_blocker) + return ..() /obj/item/organ/heart/nightmare/attack(mob/M, mob/living/carbon/user, obj/target) if(M != user) @@ -179,9 +182,6 @@ /obj/item/organ/heart/nightmare/Stop() return 0 -/obj/item/organ/heart/nightmare/update_icon() - return //always beating visually - /obj/item/organ/heart/nightmare/process() if(QDELETED(owner) || owner.stat != DEAD || !owner) respawn_progress = 0 @@ -261,7 +261,7 @@ var/obj/item/pda/PDA = O PDA.set_light_on(FALSE) PDA.set_light_range(0) //It won't be turning on again. - PDA.update_icon() + PDA.update_appearance(updates = ALL) visible_message(span_danger("The light in [PDA] shorts out!")) else visible_message(span_danger("[O] is disintegrated by [src]!")) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 11f673676385..29474653b298 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -102,7 +102,7 @@ There are several things that need to be remembered: if(client && hud_used) var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_ICLOTHING) + 1] - inv.update_icon() + inv.update_appearance(updates = ALL) if(istype(w_uniform, /obj/item/clothing/under)) var/obj/item/clothing/under/U = w_uniform @@ -148,7 +148,7 @@ There are several things that need to be remembered: if(client && hud_used) var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_ID) + 1] - inv.update_icon() + inv.update_appearance(updates = ALL) var/mutable_appearance/id_overlay = overlays_standing[ID_LAYER] @@ -173,7 +173,7 @@ There are several things that need to be remembered: if(client && hud_used && hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_GLOVES) + 1]) var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_GLOVES) + 1] - inv.update_icon() + inv.update_appearance(updates = ALL) if(!gloves && blood_in_hands) var/mutable_appearance/bloody_overlay = mutable_appearance('icons/effects/blood.dmi', "bloodyhands", -GLOVES_LAYER) @@ -209,7 +209,7 @@ There are several things that need to be remembered: if(client && hud_used) var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_EYES) + 1] - inv.update_icon() + inv.update_appearance(updates = ALL) if(glasses) glasses.screen_loc = ui_glasses //...draw the item in the inventory screen @@ -237,7 +237,7 @@ There are several things that need to be remembered: if(client && hud_used) var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_EARS) + 1] - inv.update_icon() + inv.update_appearance(updates = ALL) if(ears) ears.screen_loc = ui_ears //move the item to the appropriate screen loc @@ -258,7 +258,7 @@ There are several things that need to be remembered: if(client && hud_used && hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_NECK) + 1]) var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_NECK) + 1] - inv.update_icon() + inv.update_appearance(updates = ALL) if(wear_neck) wear_neck.screen_loc = ui_neck @@ -283,7 +283,7 @@ There are several things that need to be remembered: if(client && hud_used) var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_FEET) + 1] - inv.update_icon() + inv.update_appearance(updates = ALL) if(shoes) var/target_overlay = shoes.icon_state @@ -311,7 +311,7 @@ There are several things that need to be remembered: if(client && hud_used) var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_SUITSTORE) + 1] - inv.update_icon() + inv.update_appearance(updates = ALL) if(s_store) s_store.screen_loc = ui_sstore1 @@ -350,7 +350,7 @@ There are several things that need to be remembered: if(client && hud_used) var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_BELT) + 1] - inv.update_icon() + inv.update_appearance(updates = ALL) if(belt) belt.screen_loc = ui_belt @@ -373,7 +373,7 @@ There are several things that need to be remembered: if(client && hud_used) var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_OCLOTHING) + 1] - inv.update_icon() + inv.update_appearance(updates = ALL) if(istype(wear_suit, /obj/item)) wear_suit.screen_loc = ui_oclothing @@ -402,9 +402,9 @@ There are several things that need to be remembered: var/atom/movable/screen/inventory/inv inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_LPOCKET) + 1] - inv.update_icon() + inv.update_appearance(updates = ALL) inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_RPOCKET) + 1] - inv.update_icon() + inv.update_appearance(updates = ALL) if(l_store) l_store.screen_loc = ui_storage1 @@ -427,7 +427,7 @@ There are several things that need to be remembered: if(client && hud_used && hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_MASK) + 1]) var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_MASK) + 1] - inv.update_icon() + inv.update_appearance(updates = ALL) if(wear_mask) var/target_overlay = wear_mask.icon_state @@ -454,7 +454,7 @@ There are several things that need to be remembered: if(client && hud_used && hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_BACK) + 1]) var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_BACK) + 1] - inv.update_icon() + inv.update_appearance(updates = ALL) if(back) update_hud_back(back) diff --git a/code/modules/mob/living/carbon/inventory.dm b/code/modules/mob/living/carbon/inventory.dm index 385caa0c5e59..cc735de0896f 100644 --- a/code/modules/mob/living/carbon/inventory.dm +++ b/code/modules/mob/living/carbon/inventory.dm @@ -95,7 +95,7 @@ update_inv_legcuffed() if(ITEM_SLOT_HANDS) put_in_hands(I) - update_inv_hands() + update_held_items() if(ITEM_SLOT_BACKPACK) if(!back || !SEND_SIGNAL(back, COMSIG_TRY_STORAGE_INSERT, I, src, TRUE)) not_handled = TRUE diff --git a/code/modules/mob/living/carbon/update_icons.dm b/code/modules/mob/living/carbon/update_icons.dm index 7d51955714f9..58710c7a4121 100644 --- a/code/modules/mob/living/carbon/update_icons.dm +++ b/code/modules/mob/living/carbon/update_icons.dm @@ -41,13 +41,13 @@ /mob/living/carbon/regenerate_icons() if(notransform) return 1 - update_inv_hands() + update_held_items() update_inv_handcuffed() update_inv_legcuffed() update_fire() -/mob/living/carbon/update_inv_hands() +/mob/living/carbon/update_held_items() remove_overlay(HANDS_LAYER) if (handcuffed) drop_all_held_items() @@ -117,7 +117,7 @@ if(client && hud_used?.inv_slots[TOBITSHIFT(ITEM_SLOT_MASK) + 1]) var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_MASK) + 1] - inv.update_icon() + inv.update_appearance(updates = ALL) if(wear_mask) if(!(ITEM_SLOT_MASK in check_obscured_slots())) @@ -131,7 +131,7 @@ if(client && hud_used?.inv_slots[TOBITSHIFT(ITEM_SLOT_NECK) + 1]) var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_NECK) + 1] - inv.update_icon() + inv.update_appearance(updates = ALL) if(wear_neck) if(!(ITEM_SLOT_NECK in check_obscured_slots())) @@ -145,7 +145,7 @@ if(client && hud_used?.inv_slots[TOBITSHIFT(ITEM_SLOT_BACK) + 1]) var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_BACK) + 1] - inv.update_icon() + inv.update_appearance(updates = ALL) if(back) overlays_standing[BACK_LAYER] = back.build_worn_icon(default_layer = BACK_LAYER, default_icon_file = 'icons/mob/clothing/back.dmi') @@ -161,7 +161,7 @@ if(client && hud_used?.inv_slots[TOBITSHIFT(ITEM_SLOT_BACK) + 1]) var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_HEAD) + 1] - inv.update_icon() + inv.update_appearance(updates = ALL) if(head) overlays_standing[HEAD_LAYER] = head.build_worn_icon(default_layer = HEAD_LAYER, default_icon_file = 'icons/mob/clothing/head/head.dmi') @@ -198,7 +198,7 @@ for(var/hand in hud_used.hand_slots) var/atom/movable/screen/inventory/hand/H = hud_used.hand_slots[hand] if(H) - H.update_icon() + H.update_appearance(updates = ALL) //update whether our head item appears on our hud. /mob/living/carbon/proc/update_hud_head(obj/item/I) diff --git a/code/modules/mob/living/init_signals.dm b/code/modules/mob/living/init_signals.dm index 0c27ab1cb14d..cfcf7a395198 100644 --- a/code/modules/mob/living/init_signals.dm +++ b/code/modules/mob/living/init_signals.dm @@ -173,13 +173,13 @@ /mob/living/proc/on_incapacitated_trait_gain(datum/source) SIGNAL_HANDLER add_traits(list(TRAIT_UI_BLOCKED, TRAIT_PULL_BLOCKED), TRAIT_INCAPACITATED) -// update_appearance() + update_appearance() /// Called when [TRAIT_INCAPACITATED] is removed from the mob. /mob/living/proc/on_incapacitated_trait_loss(datum/source) SIGNAL_HANDLER remove_traits(list(TRAIT_UI_BLOCKED, TRAIT_PULL_BLOCKED), TRAIT_INCAPACITATED) -// update_appearance() + update_appearance() /// Called when [TRAIT_RESTRAINED] is added to the mob. diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index b41b16d05d35..97a7dbf988d9 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -1054,7 +1054,7 @@ playsound(get_turf(src), 'sound/machines/ding.ogg', 50, 1, ignore_walls = FALSE) to_chat(src, "Hack complete. \The [apc] is now under your exclusive control.") - apc.update_icon() + apc.update_appearance(updates = ALL) /mob/living/silicon/ai/verb/deploy_to_shell(mob/living/silicon/robot/target) set category = "AI Commands" diff --git a/code/modules/mob/living/silicon/ai/decentralized/ai_data_core.dm b/code/modules/mob/living/silicon/ai/decentralized/ai_data_core.dm index ebf7da491931..0e7654796770 100644 --- a/code/modules/mob/living/silicon/ai/decentralized/ai_data_core.dm +++ b/code/modules/mob/living/silicon/ai/decentralized/ai_data_core.dm @@ -40,7 +40,7 @@ GLOBAL_VAR_INIT(primary_data_core, null) GLOB.data_cores += src if(primary && !GLOB.primary_data_core) GLOB.primary_data_core = src - update_icon() + update_appearance(updates = ALL) RefreshParts() /obj/machinery/ai/data_core/RefreshParts() @@ -165,7 +165,7 @@ GLOBAL_VAR_INIT(primary_data_core, null) if(valid_holder()) valid_ticks++ if(valid_ticks == 1) - update_icon() + update_appearance(updates = ALL) use_power = ACTIVE_POWER_USE if((stat & NOPOWER)) integrated_battery.use(active_power_usage * CELL_POWERUSE_MULTIPLIER) @@ -174,7 +174,7 @@ GLOBAL_VAR_INIT(primary_data_core, null) valid_ticks-- if(valid_ticks <= 0) use_power = IDLE_POWER_USE - update_icon() + update_appearance(updates = ALL) for(var/mob/living/silicon/ai/AI in contents) if(!AI.is_dying) AI.relocate() @@ -214,7 +214,8 @@ GLOBAL_VAR_INIT(primary_data_core, null) if(AI.eyeobj) AI.eyeobj.forceMove(get_turf(src)) -/obj/machinery/ai/data_core/update_icon() +/obj/machinery/ai/data_core/update_appearance(updates = ALL) + . = ..() cut_overlays() if(!(stat & (BROKEN|EMPED)) && has_power()) diff --git a/code/modules/mob/living/silicon/ai/decentralized/management/ai_controlpanel.dm b/code/modules/mob/living/silicon/ai/decentralized/management/ai_controlpanel.dm index a47fbdc71046..7e4445d97c18 100644 --- a/code/modules/mob/living/silicon/ai/decentralized/management/ai_controlpanel.dm +++ b/code/modules/mob/living/silicon/ai/decentralized/management/ai_controlpanel.dm @@ -218,7 +218,7 @@ GLOBAL_VAR_INIT(ai_control_code, random_nukecode(6)) return downloading.transfer_ai(AI_TRANS_TO_CARD, user_downloading, null, intellicard) intellicard.forceMove(get_turf(src)) - intellicard.update_icon() + intellicard.update_appearance(updates = ALL) intellicard = null stop_download(TRUE) @@ -237,7 +237,7 @@ GLOBAL_VAR_INIT(ai_control_code, random_nukecode(6)) intellicard.AI.control_disabled = FALSE intellicard.AI.relocate(TRUE) intellicard.AI = null - intellicard.update_icon() + intellicard.update_appearance(updates = ALL) /obj/machinery/computer/ai_control_console/ui_act(action, params) if(..()) diff --git a/code/modules/mob/living/silicon/ai/decentralized/server_cabinet.dm b/code/modules/mob/living/silicon/ai/decentralized/server_cabinet.dm index 406632bf187a..07e36a74daca 100644 --- a/code/modules/mob/living/silicon/ai/decentralized/server_cabinet.dm +++ b/code/modules/mob/living/silicon/ai/decentralized/server_cabinet.dm @@ -39,7 +39,7 @@ GLOBAL_LIST_EMPTY(server_cabinets) roundstart = mapload installed_racks = list() GLOB.server_cabinets += src - update_icon() + update_appearance(updates = ALL) RefreshParts() /obj/machinery/ai/server_cabinet/Destroy() @@ -79,7 +79,7 @@ GLOBAL_LIST_EMPTY(server_cabinets) valid_ticks++ if(!was_valid_holder) - update_icon() + update_appearance(updates = ALL) was_valid_holder = TRUE if(!hardware_synced) @@ -96,7 +96,8 @@ GLOBAL_LIST_EMPTY(server_cabinets) GLOB.ai_os.update_hardware() -/obj/machinery/ai/server_cabinet/update_icon() +/obj/machinery/ai/server_cabinet/update_appearance(updates = ALL) + . = ..() cut_overlays() if(installed_racks.len > 0) @@ -131,7 +132,7 @@ GLOBAL_LIST_EMPTY(server_cabinets) cached_power_usage += rack.get_power_usage() GLOB.ai_os.update_hardware() use_power = ACTIVE_POWER_USE - update_icon() + update_appearance(updates = ALL) return FALSE if(W.tool_behaviour == TOOL_CROWBAR) if(installed_racks.len) @@ -145,7 +146,7 @@ GLOBAL_LIST_EMPTY(server_cabinets) GLOB.ai_os.update_hardware() to_chat(user, span_notice("You remove all the racks from [src]")) use_power = IDLE_POWER_USE - update_icon() + update_appearance(updates = ALL) return FALSE else if(default_deconstruction_crowbar(W)) diff --git a/code/modules/mob/living/silicon/ai/multicam.dm b/code/modules/mob/living/silicon/ai/multicam.dm index 2b5a31dacbcf..8e3d25a53cb7 100644 --- a/code/modules/mob/living/silicon/ai/multicam.dm +++ b/code/modules/mob/living/silicon/ai/multicam.dm @@ -171,14 +171,14 @@ GLOBAL_DATUM(ai_camera_room_landmark, /obj/effect/landmark/ai_multicam_room) continue cameras_telegraphed -= C C.in_use_lights-- - C.update_icon() + C.update_appearance(updates = ALL) for (var/V in add) var/obj/machinery/camera/C = V if(QDELETED(C)) continue cameras_telegraphed |= C C.in_use_lights++ - C.update_icon() + C.update_appearance(updates = ALL) /mob/camera/aiEye/pic_in_pic/proc/disable_camera_telegraphing() telegraph_cameras = FALSE @@ -187,7 +187,7 @@ GLOBAL_DATUM(ai_camera_room_landmark, /obj/effect/landmark/ai_multicam_room) if(QDELETED(C)) continue C.in_use_lights-- - C.update_icon() + C.update_appearance(updates = ALL) cameras_telegraphed.Cut() /mob/camera/aiEye/pic_in_pic/Destroy() diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index d4ec495f1296..3c61bddbc57a 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -170,7 +170,7 @@ mmi.brainmob.name = src.real_name mmi.brainmob.real_name = src.real_name mmi.brainmob.container = mmi - mmi.update_icon() + mmi.update_appearance(updates = ALL) updatename() @@ -195,7 +195,7 @@ mmi.brainmob.remove_from_dead_mob_list() mmi.brainmob.add_to_alive_mob_list() mind.transfer_to(mmi.brainmob) - mmi.update_icon() + mmi.update_appearance(updates = ALL) if(istype(mmi, /obj/item/mmi/posibrain)) ADD_TRAIT(mmi.brainmob, TRAIT_PACIFISM, POSIBRAIN_TRAIT) else @@ -803,14 +803,14 @@ set_light_range(1) //Again, like above, this only takes effect when the light is forced on by doomsday mode. set_light_on(FALSE) lamp_enabled = FALSE - lampButton?.update_icon() + lampButton?.update_appearance(updates = ALL) update_icons() return set_light_range(lamp_intensity) set_light_color(lamp_color) set_light_on(TRUE) lamp_enabled = TRUE - lampButton?.update_icon() + lampButton?.update_appearance(updates = ALL) update_icons() /mob/living/silicon/robot/proc/deconstruct() diff --git a/code/modules/mob/living/silicon/robot/robot_defense.dm b/code/modules/mob/living/silicon/robot/robot_defense.dm index df5ed87c4484..8d65146aaa92 100644 --- a/code/modules/mob/living/silicon/robot/robot_defense.dm +++ b/code/modules/mob/living/silicon/robot/robot_defense.dm @@ -54,7 +54,7 @@ add_fingerprint(user) if(opened && !wiresexposed && !issilicon(user)) if(cell) - cell.update_icon() + cell.update_appearance(updates = ALL) cell.add_fingerprint(user) user.put_in_active_hand(cell) to_chat(user, span_notice("You remove \the [cell].")) diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index bd710740f7c7..849c0718e1dc 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -153,7 +153,7 @@ var/obj/item/assembly/flash/F = I F.times_used = 0 F.burnt_out = FALSE - F.update_icon() + F.update_appearance(updates = ALL) else if(istype(I, /obj/item/melee/baton)) var/obj/item/melee/baton/B = I if(B.cell) @@ -389,7 +389,7 @@ if(T.cell.charge < T.cell.maxcharge) var/obj/item/ammo_casing/energy/S = T.ammo_type[T.select] T.cell.give(S.e_cost * coeff) - T.update_icon() + T.update_appearance(updates = ALL) else T.charge_timer = 0 diff --git a/code/modules/mob/living/simple_animal/bot/SuperBeepsky.dm b/code/modules/mob/living/simple_animal/bot/SuperBeepsky.dm index 435c369d4016..444382019e13 100644 --- a/code/modules/mob/living/simple_animal/bot/SuperBeepsky.dm +++ b/code/modules/mob/living/simple_animal/bot/SuperBeepsky.dm @@ -51,7 +51,7 @@ weapon.attack(C, src) playsound(src, 'sound/weapons/blade1.ogg', 50, TRUE, -1) if(C.stat == DEAD) - addtimer(CALLBACK(src, TYPE_PROC_REF(/atom/, update_icon)), 2) + addtimer(CALLBACK(src, TYPE_PROC_REF(/atom/, update_appearance)), 2) back_to_idle() @@ -60,13 +60,13 @@ return switch(mode) if(BOT_IDLE) // idle - update_icon() + update_appearance(updates = ALL) walk_to(src,0) look_for_perp() // see if any criminals are in range if(!mode && auto_patrol) // still idle, and set to patrol mode = BOT_START_PATROL // switch to patrol mode if(BOT_HUNT) // hunting for perp - update_icon() + update_appearance(updates = ALL) playsound(src,'sound/effects/beepskyspinsabre.ogg',100,TRUE,-1) // general beepsky doesn't give up so easily, jedi scum if(frustration >= 20) diff --git a/code/modules/mob/living/simple_animal/bot/atmosbot.dm b/code/modules/mob/living/simple_animal/bot/atmosbot.dm index cff40711067f..a86dc055bc42 100644 --- a/code/modules/mob/living/simple_animal/bot/atmosbot.dm +++ b/code/modules/mob/living/simple_animal/bot/atmosbot.dm @@ -15,6 +15,7 @@ desc = "Or the A.S.S. Bot for short." icon = 'icons/mob/aibots.dmi' icon_state = "atmosbot0" + base_icon_state = "atmosbot" density = FALSE anchored = FALSE health = 25 @@ -51,11 +52,11 @@ /mob/living/simple_animal/bot/atmosbot/turn_on() . = ..() - update_icon() + update_appearance(updates = ALL) /mob/living/simple_animal/bot/atmosbot/turn_off() . = ..() - update_icon() + update_appearance(updates = ALL) /mob/living/simple_animal/bot/atmosbot/set_custom_texts() text_hack = "You corrupt [name]'s safety protocols." @@ -82,7 +83,7 @@ if(last_barrier_tick + ATMOSBOT_HOLOBARRIER_COOLDOWN < world.time) target = return_nearest_breach() action = ATMOSBOT_DEPLOY_FOAM - update_icon() + update_appearance(updates = ALL) if(!target) if(auto_patrol) @@ -122,10 +123,9 @@ /mob/living/simple_animal/bot/atmosbot/proc/deploy_smartmetal() if(emagged == 2) explosion(src.loc,1,2,4,flame_range = 2) - qdel(src) else deployed_smartmetal = WEAKREF(new /obj/effect/particle_effect/fluid/foam/metal/smart(get_turf(src))) - qdel(src) + qdel(src) return //Analyse the atmosphere to see if there is a potential breach nearby @@ -194,10 +194,11 @@ return breached_pressure = new_breach_pressure update_controls() - update_icon() + update_appearance(UPDATE_ICON) -/mob/living/simple_animal/bot/atmosbot/update_icon() - icon_state = "atmosbot[on][on?"_[action]":""]" +/mob/living/simple_animal/bot/atmosbot/update_icon_state() + . = ..() + icon_state = "[base_icon_state][on][on ? "_[action]" : ""]" /mob/living/simple_animal/bot/atmosbot/UnarmedAttack(atom/A, proximity) if(isturf(A) && A == get_turf(src)) diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index b69bf925fc76..7d8e1f22e3b0 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -130,7 +130,7 @@ on = TRUE update_mobility() set_light_on(on) - update_icon() + update_appearance(UPDATE_ICON) diag_hud_set_botstat() return TRUE @@ -139,7 +139,7 @@ update_mobility() set_light_on(on) bot_reset() //Resets an AI's call, should it exist. - update_icon() + update_appearance(UPDATE_ICON) /mob/living/simple_animal/bot/Initialize(mapload) . = ..() @@ -400,7 +400,7 @@ if(istype(dropped_item, /obj/item/stock_parts/cell)) var/obj/item/stock_parts/cell/dropped_cell = dropped_item dropped_cell.charge = 0 - dropped_cell.update_icon() + dropped_cell.update_appearance(UPDATE_ICON) else if(istype(dropped_item, /obj/item/storage)) var/obj/item/storage/S = dropped_item @@ -409,7 +409,7 @@ else if(istype(dropped_item, /obj/item/gun/energy)) var/obj/item/gun/energy/dropped_gun = dropped_item dropped_gun.cell.charge = 0 - dropped_gun.update_icon() + dropped_gun.update_appearance(UPDATE_ICON) //Generalized behavior code, override where needed! @@ -855,8 +855,9 @@ Pass a positive integer as an argument to override a bot's default speed. ejectpai(usr) update_controls() -/mob/living/simple_animal/bot/update_icon() - icon_state = "[initial(icon_state)][on]" +/mob/living/simple_animal/bot/update_icon_state() + icon_state = "[isnull(base_icon_state) ? initial(icon_state) : base_icon_state][on]" + return ..() // Machinery to simplify topic and access calls /obj/machinery/bot_core @@ -968,7 +969,7 @@ Pass a positive integer as an argument to override a bot's default speed. /mob/living/simple_animal/bot/revive(full_heal = 0, admin_revive = 0) if(..()) - update_icon() + update_appearance(updates = ALL) . = 1 /mob/living/simple_animal/bot/ghost() diff --git a/code/modules/mob/living/simple_animal/bot/construction.dm b/code/modules/mob/living/simple_animal/bot/construction.dm index 52a44ad84592..f7c3c7a8d498 100644 --- a/code/modules/mob/living/simple_animal/bot/construction.dm +++ b/code/modules/mob/living/simple_animal/bot/construction.dm @@ -212,19 +212,30 @@ /obj/item/bot_assembly/floorbot/Initialize(mapload) . = ..() - update_icon() + update_appearance(updates = ALL) -/obj/item/bot_assembly/floorbot/update_icon() - ..() +/obj/item/bot_assembly/floorbot/update_name() + . = ..() switch(build_step) - if(ASSEMBLY_FIRST_STEP) - desc = initial(desc) + if(ASSEMBLY_SECOND_STEP) + name = "incomplete floorbot assembly" + else name = initial(name) - icon_state = "[toolbox_color]toolbox_tiles" +/obj/item/bot_assembly/floorbot/update_desc() + . = ..() + switch(build_step) if(ASSEMBLY_SECOND_STEP) desc = "It's a toolbox with tiles sticking out the top and a sensor attached." - name = "incomplete floorbot assembly" + else + desc = initial(desc) + +/obj/item/bot_assembly/floorbot/update_icon_state() + . = ..() + switch(build_step) + if(ASSEMBLY_FIRST_STEP) + icon_state = "[toolbox_color]toolbox_tiles" + if(ASSEMBLY_SECOND_STEP) icon_state = "[toolbox_color]toolbox_tiles_sensor" /obj/item/bot_assembly/floorbot/attackby(obj/item/W, mob/user, params) @@ -237,7 +248,7 @@ to_chat(user, span_notice("You add [W] to [src].")) qdel(W) build_step++ - update_icon() + update_appearance(updates = ALL) if(ASSEMBLY_SECOND_STEP) if(istype(W, /obj/item/bodypart/l_arm/robot) || istype(W, /obj/item/bodypart/r_arm/robot)) diff --git a/code/modules/mob/living/simple_animal/bot/ed209bot.dm b/code/modules/mob/living/simple_animal/bot/ed209bot.dm index 2e01b58cd734..e7325995e9f0 100644 --- a/code/modules/mob/living/simple_animal/bot/ed209bot.dm +++ b/code/modules/mob/living/simple_animal/bot/ed209bot.dm @@ -388,15 +388,15 @@ Auto Patrol[]"}, if(!lasercolor) var/obj/item/gun/energy/e_gun/dragnet/G = new (Tsec) G.cell.charge = 0 - G.update_icon() + G.update_appearance(updates = ALL) else if(lasercolor == "b") var/obj/item/gun/energy/laser/bluetag/G = new (Tsec) G.cell.charge = 0 - G.update_icon() + G.update_appearance(updates = ALL) else if(lasercolor == "r") var/obj/item/gun/energy/laser/redtag/G = new (Tsec) G.cell.charge = 0 - G.update_icon() + G.update_appearance(updates = ALL) if(prob(50)) new /obj/item/bodypart/l_leg/robot(Tsec) diff --git a/code/modules/mob/living/simple_animal/bot/firebot.dm b/code/modules/mob/living/simple_animal/bot/firebot.dm index cdc1f2e12d42..9d7347f35e07 100644 --- a/code/modules/mob/living/simple_animal/bot/firebot.dm +++ b/code/modules/mob/living/simple_animal/bot/firebot.dm @@ -41,7 +41,7 @@ /mob/living/simple_animal/bot/firebot/Initialize(mapload) . = ..() - update_icon() + update_appearance(updates = ALL) var/datum/job/engineer/J = new/datum/job/engineer access_card.access += J.get_access() prev_access = access_card.access @@ -76,11 +76,11 @@ /mob/living/simple_animal/bot/firebot/turn_on() . = ..() - update_icon() + update_appearance(updates = ALL) /mob/living/simple_animal/bot/firebot/turn_off() ..() - update_icon() + update_appearance(updates = ALL) /mob/living/simple_animal/bot/firebot/bot_reset() ..() @@ -88,14 +88,14 @@ old_target_fire = null ignore_list = list() anchored = FALSE - update_icon() + update_appearance(updates = ALL) /mob/living/simple_animal/bot/firebot/proc/soft_reset() path = list() target_fire = null mode = BOT_IDLE last_found = world.time - update_icon() + update_appearance(updates = ALL) /mob/living/simple_animal/bot/firebot/set_custom_texts() text_hack = "You corrupt [name]'s safety protocols." @@ -152,7 +152,7 @@ stationary_mode = !stationary_mode update_controls() - update_icon() + update_appearance(updates = ALL) /mob/living/simple_animal/bot/firebot/proc/is_burning(atom/target) if(ismob(target)) @@ -286,16 +286,15 @@ flick("firebot1_use", user) internal_ext.afterattack(target, user, null) -/mob/living/simple_animal/bot/firebot/update_icon() +mob/living/simple_animal/bot/firebot/update_icon_state() + . = ..() if(!on) icon_state = "firebot0" return - if(IsStun() || IsParalyzed()) - icon_state = "firebots1" - else if(stationary_mode) //Bot has yellow light to indicate stationary mode. + if(IsStun() || IsParalyzed() || stationary_mode) //Bot has yellow light to indicate stationary mode. icon_state = "firebots1" - else - icon_state = "firebot1" + return + icon_state = "firebot1" /mob/living/simple_animal/bot/firebot/explode() diff --git a/code/modules/mob/living/simple_animal/bot/floorbot.dm b/code/modules/mob/living/simple_animal/bot/floorbot.dm index a4ad78b124a5..998fcf5fa9e9 100644 --- a/code/modules/mob/living/simple_animal/bot/floorbot.dm +++ b/code/modules/mob/living/simple_animal/bot/floorbot.dm @@ -45,7 +45,7 @@ /mob/living/simple_animal/bot/floorbot/Initialize(mapload, new_toolbox_color) . = ..() toolbox_color = new_toolbox_color - update_icon() + update_appearance(updates = ALL) var/datum/job/engineer/J = new/datum/job/engineer access_card.access += J.get_access() prev_access = access_card.access @@ -55,11 +55,11 @@ /mob/living/simple_animal/bot/floorbot/turn_on() . = ..() - update_icon() + update_appearance(updates = ALL) /mob/living/simple_animal/bot/floorbot/turn_off() ..() - update_icon() + update_appearance(updates = ALL) /mob/living/simple_animal/bot/floorbot/bot_reset() ..() @@ -67,7 +67,7 @@ oldloc = null ignore_list = list() anchored = FALSE - update_icon() + update_appearance(updates = ALL) /mob/living/simple_animal/bot/floorbot/set_custom_texts() text_hack = "You corrupt [name]'s construction protocols." @@ -355,11 +355,12 @@ if(specialtiles == 0) speak("Requesting refill of custom floortiles to continue replacing.") mode = BOT_IDLE - update_icon() + update_appearance(updates = ALL) anchored = FALSE target = null -/mob/living/simple_animal/bot/floorbot/update_icon() +/mob/living/simple_animal/bot/floorbot/update_icon_state() + . = ..() icon_state = "[toolbox_color]floorbot[on]" diff --git a/code/modules/mob/living/simple_animal/bot/honkbot.dm b/code/modules/mob/living/simple_animal/bot/honkbot.dm index 2965832f658d..21ba0e1acf76 100644 --- a/code/modules/mob/living/simple_animal/bot/honkbot.dm +++ b/code/modules/mob/living/simple_animal/bot/honkbot.dm @@ -39,7 +39,7 @@ /mob/living/simple_animal/bot/honkbot/Initialize(mapload) . = ..() - update_icon() + update_appearance(updates = ALL) auto_patrol = TRUE var/datum/job/clown/J = new/datum/job/clown access_card.access += J.get_access() @@ -50,7 +50,7 @@ /mob/living/simple_animal/bot/honkbot/proc/sensor_blink() icon_state = "honkbot-c" - addtimer(CALLBACK(src, TYPE_PROC_REF(/atom/, update_icon)), 5, TIMER_OVERRIDE|TIMER_UNIQUE) + addtimer(CALLBACK(src, TYPE_PROC_REF(/atom/, update_appearance)), 5, TIMER_OVERRIDE|TIMER_UNIQUE) //honkbots react with sounds. /mob/living/simple_animal/bot/honkbot/proc/react_ping() @@ -133,7 +133,7 @@ Maintenance panel panel is [open ? "opened" : "closed"]"}, oldtarget_name = user.name audible_message(span_danger("[src] gives out an evil laugh!")) playsound(src, 'sound/machines/honkbot_evil_laugh.ogg', 75, 1, -1) // evil laughter - update_icon() + update_appearance(updates = ALL) /mob/living/simple_animal/bot/honkbot/bullet_act(obj/item/projectile/Proj) if((istype(Proj,/obj/item/projectile/beam)) || (istype(Proj,/obj/item/projectile/bullet) && (Proj.damage_type == BURN))||(Proj.damage_type == BRUTE) && (!Proj.nodamage && Proj.damage < health && ishuman(Proj.firer))) @@ -176,7 +176,7 @@ Maintenance panel panel is [open ? "opened" : "closed"]"}, playsound(src, "honkbot_e", 50, 0) spam_flag = TRUE // prevent spam icon_state = "honkbot-e" - addtimer(CALLBACK(src, TYPE_PROC_REF(/atom/, update_icon)), 30, TIMER_OVERRIDE|TIMER_UNIQUE) + addtimer(CALLBACK(src, TYPE_PROC_REF(/atom/, update_appearance)), 30, TIMER_OVERRIDE|TIMER_UNIQUE) addtimer(CALLBACK(src, PROC_REF(spam_flag_false)), cooldowntimehorn) /mob/living/simple_animal/bot/honkbot/proc/honk_attack(mob/living/carbon/C) // horn attack diff --git a/code/modules/mob/living/simple_animal/bot/medbot.dm b/code/modules/mob/living/simple_animal/bot/medbot.dm index 3cf8e99d2eb6..12b89731e3cd 100644 --- a/code/modules/mob/living/simple_animal/bot/medbot.dm +++ b/code/modules/mob/living/simple_animal/bot/medbot.dm @@ -15,6 +15,7 @@ desc = "A little medical robot. He looks somewhat underwhelmed." icon = 'icons/mob/aibots.dmi' icon_state = "medibot0" + base_icon_state = "medibot" density = FALSE anchored = FALSE health = 20 @@ -91,23 +92,23 @@ treatment_tox_avoid = null treatment_tox = /datum/reagent/toxin/sodium_thiopental -/mob/living/simple_animal/bot/medbot/update_icon() - cut_overlays() - if(skin) - add_overlay("medskin_[skin]") +/mob/living/simple_animal/bot/medbot/update_icon_state() + . = ..() if(!on) - icon_state = "medibot0" + icon_state = "[base_icon_state]0" return if(IsStun() || IsParalyzed()) - icon_state = "medibota" + icon_state = "[base_icon_state]a" return if(mode == BOT_HEALING) - icon_state = "medibots[stationary_mode]" + icon_state = "[base_icon_state]s[stationary_mode]" return - else if(stationary_mode) //Bot has yellow light to indicate stationary mode. - icon_state = "medibot2" - else - icon_state = "medibot1" + icon_state = "[base_icon_state][stationary_mode ? 2 : 1]" //Bot has yellow light to indicate stationary mode. + +/mob/living/simple_animal/bot/medbot/update_overlays() + . = ..() + if(skin) + . += "medskin_[skin]" /mob/living/simple_animal/bot/medbot/Initialize(mapload, new_skin) . = ..() @@ -116,11 +117,11 @@ prev_access = access_card.access qdel(J) skin = new_skin - update_icon() + update_appearance(updates = ALL) /mob/living/simple_animal/bot/medbot/update_mobility() . = ..() - update_icon() + update_appearance(updates = ALL) /mob/living/simple_animal/bot/medbot/bot_reset() ..() @@ -129,14 +130,14 @@ oldloc = null last_found = world.time declare_cooldown = 0 - update_icon() + update_appearance(updates = ALL) /mob/living/simple_animal/bot/medbot/proc/soft_reset() //Allows the medibot to still actively perform its medical duties without being completely halted as a hard reset does. path = list() patient = null mode = BOT_IDLE last_found = world.time - update_icon() + update_appearance(updates = ALL) /mob/living/simple_animal/bot/medbot/set_custom_texts() @@ -222,7 +223,7 @@ else if(href_list["stationary"]) stationary_mode = !stationary_mode path = list() - update_icon() + update_appearance(updates = ALL) else if(href_list["virus"]) treat_virus = !treat_virus @@ -413,7 +414,7 @@ if(patient && (get_dist(src,patient) <= 1)) //Patient is next to us, begin treatment! if(mode != BOT_HEALING) mode = BOT_HEALING - update_icon() + update_appearance(updates = ALL) frustration = 0 medicate_patient(patient) return @@ -554,9 +555,9 @@ var/mob/living/carbon/C = A patient = C mode = BOT_HEALING - update_icon() + update_appearance(updates = ALL) medicate_patient(C) - update_icon() + update_appearance(updates = ALL) else ..() @@ -664,7 +665,7 @@ if(failed) visible_message("[src] retracts its syringe.") - update_icon() + update_appearance(updates = ALL) soft_reset() return diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm index 361ffc9c733b..ea75ba067372 100644 --- a/code/modules/mob/living/simple_animal/bot/mulebot.dm +++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm @@ -12,6 +12,7 @@ name = "\improper MULEbot" desc = "A Multiple Utility Load Effector bot." icon_state = "mulebot0" + base_icon_state = "mulebot" density = TRUE move_resist = MOVE_FORCE_STRONG animate_movement = 1 @@ -112,7 +113,7 @@ ..() else ..() - update_icon() + update_appearance(updates = ALL) return /mob/living/simple_animal/bot/mulebot/emag_act(mob/user) @@ -121,21 +122,20 @@ if(!open) locked = !locked to_chat(user, span_notice("You [locked ? "lock" : "unlock"] [src]'s controls!")) - flick("mulebot-emagged", src) + flick("[base_icon_state]-emagged", src) playsound(src, "sparks", 100, 0) -/mob/living/simple_animal/bot/mulebot/update_icon() - if(open) - icon_state="mulebot-hatch" - else - icon_state = "mulebot[wires.is_cut(WIRE_AVOIDANCE)]" - cut_overlays() - if(load && !ismob(load))//buckling handles the mob offsets - load.pixel_y = initial(load.pixel_y) + 9 - if(load.layer < layer) - load.layer = layer + 0.01 - add_overlay(load) - return +/mob/living/simple_animal/bot/mulebot/update_icon_state() //if you change the icon_state names, please make sure to update /datum/wires/mulebot/on_pulse() as well. <3 + . = ..() + icon_state = "[base_icon_state][open ? "-hatch" : wires.is_cut(WIRE_AVOIDANCE)]" + +/mob/living/simple_animal/bot/mulebot/update_overlays() + . = ..() + if(!load || ismob(load)) //mob offsets and such are handled by the riding component / buckling + return + var/mutable_appearance/load_overlay = mutable_appearance(load.icon, load.icon_state, layer + 0.01) + load_overlay.pixel_y = initial(load.pixel_y) + 9 + . += load_overlay /mob/living/simple_animal/bot/mulebot/ex_act(severity) unload(0) @@ -338,6 +338,7 @@ if(DELIGHT) audible_message("[src] makes a delighted ping!", span_italics("You hear a ping.")) playsound(loc, 'sound/machines/ping.ogg', 50, 0) + flick("[base_icon_state]1", src) // mousedrop a crate to load the bot @@ -386,7 +387,7 @@ load = AM mode = BOT_IDLE - update_icon() + update_appearance(updates = ALL) /mob/living/simple_animal/bot/mulebot/proc/load_mob(mob/living/M) can_buckle = TRUE @@ -460,7 +461,7 @@ num_steps-- if(!on || client) return - update_icon() + update_appearance(updates = ALL) switch(mode) if(BOT_IDLE) // idle @@ -569,7 +570,7 @@ mode = BOT_GO_HOME else mode = BOT_DELIVER - update_icon() + update_appearance(updates = ALL) get_nav() // starts bot moving to home @@ -580,7 +581,7 @@ spawn(0) set_destination(home_destination) mode = BOT_BLOCKED - update_icon() + update_appearance(updates = ALL) // called when bot reaches current target /mob/living/simple_animal/bot/mulebot/proc/at_target() @@ -688,7 +689,7 @@ loaddir = text2num(direction) else loaddir = 0 - update_icon() + update_appearance(updates = ALL) if(destination) // No need to calculate a path if you do not have a destination set! calc_path() @@ -710,7 +711,7 @@ new /obj/item/stack/cable_coil/cut(Tsec) if(cell) cell.forceMove(Tsec) - cell.update_icon() + cell.update_appearance(updates = ALL) cell = null do_sparks(3, TRUE, src) diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm index ef3b15ef59d5..6a45ac38fd83 100644 --- a/code/modules/mob/living/simple_animal/bot/secbot.dm +++ b/code/modules/mob/living/simple_animal/bot/secbot.dm @@ -71,7 +71,7 @@ /mob/living/simple_animal/bot/secbot/Initialize(mapload) . = ..() - update_icon() + update_appearance(updates = ALL) var/datum/job/detective/J = new/datum/job/detective access_card.access += J.get_access() prev_access = access_card.access @@ -83,7 +83,8 @@ if(prob(5)) russian = TRUE // imported from Russia -/mob/living/simple_animal/bot/secbot/update_icon() +/mob/living/simple_animal/bot/secbot/update_appearance(updates = ALL) + . = ..() if(mode == BOT_HUNT) icon_state = "[initial(icon_state)]-c" return @@ -209,7 +210,7 @@ Auto Patrol: []"}, oldtarget_name = user.name audible_message(span_danger("[src] buzzes oddly!")) declare_arrests = FALSE - update_icon() + update_appearance(updates = ALL) /mob/living/simple_animal/bot/secbot/bullet_act(obj/item/projectile/Proj) if(istype(Proj , /obj/item/projectile/beam)||istype(Proj, /obj/item/projectile/bullet)) @@ -264,7 +265,7 @@ Auto Patrol: []"}, var/judgement_criteria = judgement_criteria() playsound(src, 'sound/weapons/egloves.ogg', 50, TRUE, -1) icon_state = "secbot-c" - addtimer(CALLBACK(src, TYPE_PROC_REF(/atom/, update_icon)), 2) + addtimer(CALLBACK(src, TYPE_PROC_REF(/atom/, update_appearance)), 2) var/threat = 5 if(ishuman(C)) var/mob/living/carbon/human/H = C diff --git a/code/modules/mob/living/simple_animal/eldritch_demons.dm b/code/modules/mob/living/simple_animal/eldritch_demons.dm index 1991868eb855..12813a6e9459 100644 --- a/code/modules/mob/living/simple_animal/eldritch_demons.dm +++ b/code/modules/mob/living/simple_animal/eldritch_demons.dm @@ -317,12 +317,12 @@ ) /mob/living/simple_animal/hostile/eldritch/rust_spirit/setDir(newdir) - . = ..() - if(newdir == NORTH) - icon_state = "rust_walker_n" - else if(newdir == SOUTH) - icon_state = "rust_walker_s" - //update_icon() + . = ..() + if(newdir == NORTH) + icon_state = "rust_walker_n" + else if(newdir == SOUTH) + icon_state = "rust_walker_s" + //update_appearance(updates = ALL) /mob/living/simple_animal/hostile/eldritch/rust_spirit/Moved() . = ..() diff --git a/code/modules/mob/living/simple_animal/friendly/drone/inventory.dm b/code/modules/mob/living/simple_animal/friendly/drone/inventory.dm index 1124de738d39..344b73e178f9 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/inventory.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/inventory.dm @@ -8,7 +8,7 @@ /mob/living/simple_animal/drone/doUnEquip(obj/item/I, force, newloc, no_move, invdrop = TRUE, silent = FALSE) if(..()) - update_inv_hands() + update_held_items() if(I == head) head = null update_inv_head() @@ -59,7 +59,7 @@ var/index = get_held_index_of_item(I) if(index) held_items[index] = null - update_inv_hands() + update_held_items() if(I.pulledby) I.pulledby.stop_pulling() diff --git a/code/modules/mob/living/simple_animal/friendly/drone/visuals_icons.dm b/code/modules/mob/living/simple_animal/friendly/drone/visuals_icons.dm index b6fe86efe0db..1e861b57b88c 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/visuals_icons.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/visuals_icons.dm @@ -18,7 +18,7 @@ drone_overlays[cache_index] = null -/mob/living/simple_animal/drone/update_inv_hands() +/mob/living/simple_animal/drone/update_held_items() remove_overlay(DRONE_HANDS_LAYER) var/list/hands_overlays = list() @@ -85,7 +85,7 @@ /mob/living/simple_animal/drone/regenerate_icons() // Drones only have 4 slots, which in this specific instance // is a small blessing. - update_inv_hands() + update_held_items() update_inv_head() update_inv_internal_storage() diff --git a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm index 64b0860dc4a7..cfd0b1a219a9 100644 --- a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm +++ b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm @@ -65,7 +65,7 @@ to_chat(user, span_notice("You install [M] in [src]!")) mmi = M transfer_personality(M) - update_icon() + update_appearance(updates = ALL) return 1 else if(O.tool_behaviour == TOOL_WELDER && (user.a_intent != INTENT_HARM || user == src)) ///Removed needless self repair part @@ -131,7 +131,8 @@ if(!QDELETED(src) && stat != DEAD) death() -/mob/living/simple_animal/spiderbot/update_icon() +/mob/living/simple_animal/spiderbot/update_appearance(updates = ALL) + . = ..() if(mmi) if(istype(mmi, /obj/item/mmi/posibrain)) icon_state = "spiderbot-chassis-posi" @@ -150,10 +151,10 @@ else if(key) mmi.brainmob.key = key mmi.forceMove(loc) - mmi.update_icon() + mmi.update_appearance(updates = ALL) mmi = null name = initial(name) - update_icon() + update_appearance(updates = ALL) /mob/living/simple_animal/spiderbot/gib() eject_brain() diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm index d95270a0120e..278c7f27bb63 100644 --- a/code/modules/mob/living/simple_animal/guardian/guardian.dm +++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm @@ -256,7 +256,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians var/index = get_held_index_of_item(I) if(index) held_items[index] = null - update_inv_hands() + update_held_items() if(I.pulledby) I.pulledby.stop_pulling() @@ -277,7 +277,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians cut_overlay(I) guardian_overlays[cache_index] = null -/mob/living/simple_animal/hostile/guardian/update_inv_hands() +/mob/living/simple_animal/hostile/guardian/update_held_items() remove_overlay(GUARDIAN_HANDS_LAYER) var/list/hands_overlays = list() var/obj/item/l_hand = get_item_for_held_index(1) @@ -314,7 +314,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians apply_overlay(GUARDIAN_HANDS_LAYER) /mob/living/simple_animal/hostile/guardian/regenerate_icons() - update_inv_hands() + update_held_items() //MANIFEST, RECALL, TOGGLE MODE/LIGHT, SHOW TYPE @@ -636,8 +636,9 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
    "} -/obj/item/paper/guides/antag/guardian/update_icon() - return +/obj/item/paper/guides/antag/guardian/Initialize(mapload) + AddElement(/datum/element/update_icon_blocker) + return ..() /obj/item/paper/guides/antag/guardian/wizard name = "Guardian Guide" diff --git a/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm b/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm index d4b977fba945..9138ea064230 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm @@ -42,7 +42,7 @@ //SLOT HANDLING BULLSHIT FOR INTERNAL STORAGE /mob/living/simple_animal/hostile/guardian/dextrous/doUnEquip(obj/item/I, force, newloc, no_move, invdrop = TRUE, silent = FALSE) if(..()) - update_inv_hands() + update_held_items() if(I == internal_storage) internal_storage = null update_inv_internal_storage() diff --git a/code/modules/mob/living/simple_animal/hostile/gorilla/visuals_icons.dm b/code/modules/mob/living/simple_animal/hostile/gorilla/visuals_icons.dm index 9d451748b059..3d8f90840624 100644 --- a/code/modules/mob/living/simple_animal/hostile/gorilla/visuals_icons.dm +++ b/code/modules/mob/living/simple_animal/hostile/gorilla/visuals_icons.dm @@ -9,7 +9,7 @@ cut_overlay(I) gorilla_overlays[cache_index] = null -/mob/living/simple_animal/hostile/gorilla/update_inv_hands() +/mob/living/simple_animal/hostile/gorilla/update_held_items() cut_overlays("standing_overlay") remove_overlay(GORILLA_HANDS_LAYER) @@ -49,5 +49,5 @@ return ..() /mob/living/simple_animal/hostile/gorilla/regenerate_icons() - update_inv_hands() + update_held_items() 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 f7946560440d..ee61bd2b8520 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm @@ -300,8 +300,9 @@ Difficulty: Very Hard var/list/stored_items = list() var/list/blacklist = list() -/obj/machinery/smartfridge/black_box/update_icon() - return +/obj/machinery/smartfridge/black_box/Initialize(mapload) + AddElement(/datum/element/update_icon_blocker) + return ..() /obj/machinery/smartfridge/black_box/accept_check(obj/item/O) if(!istype(O)) diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm index 684a7d66b59c..1624c6a00bd1 100644 --- a/code/modules/mob/living/simple_animal/hostile/mimic.dm +++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm @@ -239,19 +239,19 @@ GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/ca var/obj/item/ammo_casing/energy/shot = Zapgun.ammo_type[Zapgun.select] if(Zapgun.cell.charge >= shot.e_cost) Zapgun.cell.use(shot.e_cost) - Zapgun.update_icon() + Zapgun.update_appearance(updates = ALL) ..() else if(Zapstick) if(Zapstick.charges) Zapstick.charges-- - Zapstick.update_icon() + Zapstick.update_appearance(updates = ALL) ..() else if(Pewgun) if(Pewgun.chambered) if(Pewgun.chambered.BB) qdel(Pewgun.chambered.BB) Pewgun.chambered.BB = null //because qdel takes too long, ensures icon update - Pewgun.chambered.update_icon() + Pewgun.chambered.update_appearance(updates = ALL) ..() else visible_message(span_danger("The [src] clears a jam!")) @@ -260,7 +260,7 @@ GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/ca if(Pewgun.magazine && Pewgun.magazine.stored_ammo.len) Pewgun.chambered = Pewgun.magazine.get_round(0) Pewgun.chambered.forceMove(Pewgun) - Pewgun.update_icon() + Pewgun.update_appearance(updates = ALL) else if(Pewgun.magazine && Pewgun.magazine.stored_ammo.len) //only true for pumpguns i think Pewgun.chambered = Pewgun.magazine.get_round(0) Pewgun.chambered.forceMove(Pewgun) diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 7e56049b2801..847f21dcb6ba 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -536,16 +536,16 @@ var/atom/movable/screen/inventory/hand/H H = hud_used.hand_slots["[hand_index]"] if(H) - H.update_icon() + H.update_appearance(updates = ALL) H = hud_used.hand_slots["[oindex]"] if(H) - H.update_icon() + H.update_appearance(updates = ALL) /mob/living/simple_animal/put_in_hands(obj/item/I, del_on_fail = FALSE, merge_stacks = TRUE) . = ..(I, del_on_fail, merge_stacks) - update_inv_hands() + update_held_items() -/mob/living/simple_animal/update_inv_hands() +/mob/living/simple_animal/update_held_items() if(client && hud_used && hud_used.hud_version != HUD_STYLE_NOHUD) var/obj/item/l_hand = get_item_for_held_index(1) var/obj/item/r_hand = get_item_for_held_index(2) diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm index 60f16e558944..723c986fac36 100644 --- a/code/modules/mob/living/simple_animal/slime/slime.dm +++ b/code/modules/mob/living/simple_animal/slime/slime.dm @@ -143,13 +143,14 @@ /mob/living/simple_animal/slime/proc/set_colour(new_colour) colour = new_colour - update_name() + update_appearance(UPDATE_NAME) slime_mutation = mutation_table(colour) var/sanitizedcolour = replacetext(colour, " ", "") coretype = text2path("/obj/item/slime_extract/[sanitizedcolour]") regenerate_icons() -/mob/living/simple_animal/slime/proc/update_name() +/mob/living/simple_animal/slime/update_name() + . = ..() if(slime_name_regex.Find(name)) number = rand(1, 1000) name = "[colour] [is_adult ? "adult" : "baby"] slime ([number])" diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 12c2fda13881..931c1ce7594f 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -674,15 +674,11 @@ ///Update the pulling hud icon /mob/proc/update_pull_hud_icon() - if(hud_used) - if(hud_used.pull_icon) - hud_used.pull_icon.update_icon(src) + hud_used?.pull_icon?.update_appearance() ///Update the resting hud icon /mob/proc/update_rest_hud_icon() - if(hud_used) - if(hud_used.rest_icon) - hud_used.rest_icon.update_icon(src) + hud_used?.rest_icon?.update_appearance() /** * Verb to activate the object in your held hand @@ -707,7 +703,7 @@ var/obj/item/I = get_active_held_item() if(I) I.attack_self(src) - update_inv_hands() + update_held_items() /** * Get the notes of this mob diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index b2368a0ba2a1..23358ad4cdc8 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -495,7 +495,7 @@ m_intent = MOVE_INTENT_RUN if(hud_used && hud_used.static_inventory) for(var/atom/movable/screen/mov_intent/selector in hud_used.static_inventory) - selector.update_icon(src) + selector.update_appearance(UPDATE_ICON,src) ///Moves a mob upwards in z level /mob/verb/up() diff --git a/code/modules/mob/update_icons.dm b/code/modules/mob/update_icons.dm index 581584912df0..a9d59456a44c 100644 --- a/code/modules/mob/update_icons.dm +++ b/code/modules/mob/update_icons.dm @@ -1,6 +1,7 @@ //Most of these are defined at this level to reduce on checks elsewhere in the code. //Having them here also makes for a nice reference list of the various overlay-updating procs available +///Redraws the entire mob. For carbons, this is rather expensive, please use the individual update_X procs. /mob/proc/regenerate_icons() //TODO: phase this out completely if possible return @@ -19,7 +20,7 @@ /mob/proc/update_inv_back() return -/mob/proc/update_inv_hands() +/mob/proc/update_held_items() return /mob/proc/update_inv_wear_mask() @@ -68,4 +69,4 @@ return /mob/proc/update_inv_ears() - return \ No newline at end of file + return diff --git a/code/modules/modular_computers/computers/item/computer.dm b/code/modules/modular_computers/computers/item/computer.dm index 8f30343f0aaf..bfa8c73c46b9 100644 --- a/code/modules/modular_computers/computers/item/computer.dm +++ b/code/modules/modular_computers/computers/item/computer.dm @@ -99,7 +99,7 @@ idle_threads = list() install_starting_components() install_starting_files() - update_icon() + update_appearance(updates = ALL) /obj/item/modular_computer/Destroy() kill_program(forced = TRUE) @@ -262,7 +262,8 @@ . += get_modular_computer_parts_examine(user) -/obj/item/modular_computer/update_icon() +/obj/item/modular_computer/update_appearance(updates = ALL) + . = ..() if(!physical) return @@ -293,11 +294,11 @@ /obj/item/modular_computer/equipped() . = ..() - update_icon() + update_appearance(updates = ALL) /obj/item/modular_computer/dropped() . = ..() - update_icon() + update_appearance(updates = ALL) /obj/item/modular_computer/proc/update_label() @@ -338,7 +339,7 @@ else to_chat(user, span_notice("You press the power button and start up \the [src].")) enabled = TRUE - update_icon() + update_appearance(updates = ALL) play_computer_sound(startup_sound, get_clamped_volume(), FALSE) ui_interact(user) else // Unpowered @@ -480,7 +481,7 @@ var/mob/user = usr if(user && istype(user)) ui_interact(user) // Re-open the UI on this computer. It should show the main screen now. - update_icon() + update_appearance(updates = ALL) // Returns 0 for No Signal, 1 for Low Signal and 2 for Good Signal. 3 is for wired connection (always-on) /obj/item/modular_computer/proc/get_ntnet_status(specific_action = 0) @@ -504,7 +505,7 @@ if(loud) physical.visible_message(span_notice("\The [src] shuts down.")) enabled = FALSE - update_icon() + update_appearance(updates = ALL) play_computer_sound(shutdown_sound, get_clamped_volume(), FALSE) /** @@ -517,7 +518,7 @@ if(!has_light) return FALSE set_light_on(!light_on) - update_icon() + update_appearance(updates = ALL) return TRUE /** diff --git a/code/modules/modular_computers/computers/item/computer_components.dm b/code/modules/modular_computers/computers/item/computer_components.dm index 8020167959a6..ade43953655f 100644 --- a/code/modules/modular_computers/computers/item/computer_components.dm +++ b/code/modules/modular_computers/computers/item/computer_components.dm @@ -50,7 +50,7 @@ yeet.on_remove(src, user) if(enabled && !use_power()) shutdown_computer() - update_icon() + update_appearance(updates = ALL) return TRUE /// This isn't the "uninstall fully" proc, it just makes the computer lose all its references to the component diff --git a/code/modules/modular_computers/computers/item/computer_ui.dm b/code/modules/modular_computers/computers/item/computer_ui.dm index cb6f3f7aa702..c64246b3c65b 100644 --- a/code/modules/modular_computers/computers/item/computer_ui.dm +++ b/code/modules/modular_computers/computers/item/computer_ui.dm @@ -116,7 +116,7 @@ active_program.program_state = PROGRAM_STATE_BACKGROUND // Should close any existing UIs active_program = null - update_icon() + update_appearance(updates = ALL) if(user && istype(user)) ui_interact(user) // Re-open the UI on this computer. It should show the main screen now. @@ -156,7 +156,7 @@ active_program = P P.alert_pending = FALSE idle_threads.Remove(P) - update_icon() + update_appearance(updates = ALL) return var/obj/item/computer_hardware/processor_unit/PU = all_components[MC_CPU] @@ -171,7 +171,7 @@ if(P.run_program(user)) active_program = P P.alert_pending = FALSE - update_icon() + update_appearance(updates = ALL) return TRUE if("PC_toggle_light") diff --git a/code/modules/modular_computers/computers/item/laptop/laptop.dm b/code/modules/modular_computers/computers/item/laptop/laptop.dm index bbdcdb815ae1..49a9af2f4b7b 100644 --- a/code/modules/modular_computers/computers/item/laptop/laptop.dm +++ b/code/modules/modular_computers/computers/item/laptop/laptop.dm @@ -33,7 +33,8 @@ if(start_open && !screen_on) toggle_open() -/obj/item/modular_computer/laptop/update_icon() +/obj/item/modular_computer/laptop/update_appearance(updates = ALL) + . = ..() if(screen_on) ..() else @@ -106,7 +107,7 @@ icon_state = icon_state_unpowered screen_on = !screen_on - update_icon() + update_appearance(updates = ALL) diff --git a/code/modules/modular_computers/computers/item/processor.dm b/code/modules/modular_computers/computers/item/processor.dm index dd636708bd2f..f71793922d38 100644 --- a/code/modules/modular_computers/computers/item/processor.dm +++ b/code/modules/modular_computers/computers/item/processor.dm @@ -62,7 +62,7 @@ if(!machinery_computer) return ..() - machinery_computer.update_icon() + machinery_computer.update_appearance(updates = ALL) return /obj/item/modular_computer/processor/attack_ghost(mob/user) diff --git a/code/modules/modular_computers/computers/item/tablet/tablet.dm b/code/modules/modular_computers/computers/item/tablet/tablet.dm index 81e483c3dc95..184ddf1af02b 100644 --- a/code/modules/modular_computers/computers/item/tablet/tablet.dm +++ b/code/modules/modular_computers/computers/item/tablet/tablet.dm @@ -56,12 +56,12 @@ return to_chat(user, span_notice("You slide \the [C] into \the [src].")) inserted_item = C - update_icon() + update_appearance(updates = ALL) else return ..() -/obj/item/modular_computer/tablet/update_icon() - ..() +/obj/item/modular_computer/tablet/update_appearance(updates = ALL) + . = ..() if (!isnull(variants)) if(!finish_color) finish_color = pick(variants) diff --git a/code/modules/modular_computers/computers/machinery/console/modular_console.dm b/code/modules/modular_computers/computers/machinery/console/modular_console.dm index 29275d051998..e92973d77ef2 100644 --- a/code/modules/modular_computers/computers/machinery/console/modular_console.dm +++ b/code/modules/modular_computers/computers/machinery/console/modular_console.dm @@ -42,9 +42,9 @@ network_card.identification_string = "Unknown Console" if(cpu) cpu.screen_on = 1 - update_icon() + update_appearance(updates = ALL) -/obj/machinery/modular_computer/console/update_icon() +/obj/machinery/modular_computer/console/update_appearance(updates = ALL) . = ..() // this bit of code makes the computer hug the wall its next to diff --git a/code/modules/modular_computers/computers/machinery/modular_computer.dm b/code/modules/modular_computers/computers/machinery/modular_computer.dm index 02e8b67c8cc1..802d0b887418 100644 --- a/code/modules/modular_computers/computers/machinery/modular_computer.dm +++ b/code/modules/modular_computers/computers/machinery/modular_computer.dm @@ -75,8 +75,9 @@ return FALSE return (cpu.emag_act(user)) -/obj/machinery/modular_computer/update_icon() - cpu.update_icon() +/obj/machinery/modular_computer/update_appearance(updates = ALL) + . = ..() + cpu.update_appearance(updates = ALL) /obj/machinery/modular_computer/AltClick(mob/user) if(cpu) @@ -105,13 +106,13 @@ if(cpu) cpu.shutdown_computer(0) stat |= NOPOWER - update_icon() + update_appearance(updates = ALL) // Modular computers can have battery in them, we handle power in previous proc, so prevent this from messing it up for us. /obj/machinery/modular_computer/power_change() if(cpu && cpu.use_power()) // If MC_CPU still has a power source, PC wouldn't go offline. stat &= ~NOPOWER - update_icon() + update_appearance(updates = ALL) return . = ..() diff --git a/code/modules/modular_computers/file_system/program.dm b/code/modules/modular_computers/file_system/program.dm index b7d3163581b3..443cdb917358 100644 --- a/code/modules/modular_computers/file_system/program.dm +++ b/code/modules/modular_computers/file_system/program.dm @@ -68,7 +68,7 @@ // Relays icon update to the computer. /datum/computer_file/program/proc/update_computer_icon() if(computer) - computer.update_icon() + computer.update_appearance(updates = ALL) // Attempts to create a log in global ntnet datum. Returns 1 on success, 0 on fail. /datum/computer_file/program/proc/generate_network_log(text) @@ -237,7 +237,7 @@ program_state = PROGRAM_STATE_BACKGROUND // Should close any existing UIs computer.active_program = null - computer.update_icon() + computer.update_appearance(updates = ALL) ui.close() if(user && istype(user)) diff --git a/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm b/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm index 28aa6d769e9c..bec5349c9eb9 100644 --- a/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm +++ b/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm @@ -28,7 +28,7 @@ computer.visible_message(span_notice("\The [computer]'s screen brightly flashes and loud electrical buzzing is heard.")) computer.enabled = FALSE - computer.update_icon() + computer.update_appearance(updates = ALL) var/obj/item/computer_hardware/hard_drive/hard_drive = computer.all_components[MC_HDD] var/obj/item/computer_hardware/battery/battery_module = computer.all_components[MC_CELL] var/obj/item/computer_hardware/recharger/recharger = computer.all_components[MC_CHARGE] diff --git a/code/modules/modular_computers/file_system/programs/arcade.dm b/code/modules/modular_computers/file_system/programs/arcade.dm index 3f2fd4639e87..40f436ea6c22 100644 --- a/code/modules/modular_computers/file_system/programs/arcade.dm +++ b/code/modules/modular_computers/file_system/programs/arcade.dm @@ -28,7 +28,7 @@ game_active = FALSE program_icon_state = "arcade_off" if(istype(computer)) - computer.update_icon() + computer.update_appearance(updates = ALL) ticket_count += 1 sleep(1 SECONDS) return @@ -38,7 +38,7 @@ game_active = FALSE program_icon_state = "arcade_off" if(istype(computer)) - computer.update_icon() + computer.update_appearance(updates = ALL) sleep(1 SECONDS) return return @@ -168,4 +168,4 @@ boss_id = rand(1,6) pause_state = FALSE if(istype(computer)) - computer.update_icon() + computer.update_appearance(updates = ALL) diff --git a/code/modules/modular_computers/file_system/programs/engineering/sm_monitor.dm b/code/modules/modular_computers/file_system/programs/engineering/sm_monitor.dm index f0d06dc70970..ca3918331c3d 100644 --- a/code/modules/modular_computers/file_system/programs/engineering/sm_monitor.dm +++ b/code/modules/modular_computers/file_system/programs/engineering/sm_monitor.dm @@ -31,7 +31,7 @@ ui_header = "smmon_[last_status].gif" program_icon_state = "smmon_[last_status]" if(istype(computer)) - computer.update_icon() + computer.update_appearance(updates = ALL) /datum/computer_file/program/supermatter_monitor/run_program(mob/living/user) . = ..(user) diff --git a/code/modules/modular_computers/file_system/programs/medical/crew_monitor.dm b/code/modules/modular_computers/file_system/programs/medical/crew_monitor.dm index 2f64d0d938ce..28ef95d324aa 100644 --- a/code/modules/modular_computers/file_system/programs/medical/crew_monitor.dm +++ b/code/modules/modular_computers/file_system/programs/medical/crew_monitor.dm @@ -56,7 +56,7 @@ ui_header = "health_green.gif" if(istype(computer)) - computer.update_icon() + computer.update_appearance(updates = ALL) /datum/computer_file/program/crew_monitor/ui_data(mob/user) var/list/data = get_header_data() diff --git a/code/modules/modular_computers/file_system/programs/portrait_printer.dm b/code/modules/modular_computers/file_system/programs/portrait_printer.dm index 912bf4030dcd..625c6f29f7f8 100644 --- a/code/modules/modular_computers/file_system/programs/portrait_printer.dm +++ b/code/modules/modular_computers/file_system/programs/portrait_printer.dm @@ -73,7 +73,7 @@ printed_canvas.name = "painting - [title]" ///this is a copy of something that is already in the database- it should not be able to be saved. printed_canvas.no_save = TRUE - printed_canvas.update_icon() + printed_canvas.update_appearance(updates = ALL) to_chat(usr, span_notice("You have printed [title] onto a new canvas.")) playsound(computer.physical, 'sound/items/poster_being_created.ogg', 100, TRUE) diff --git a/code/modules/modular_computers/file_system/programs/radar.dm b/code/modules/modular_computers/file_system/programs/radar.dm index 97f64584ed06..0d3a44030145 100644 --- a/code/modules/modular_computers/file_system/programs/radar.dm +++ b/code/modules/modular_computers/file_system/programs/radar.dm @@ -17,7 +17,7 @@ var/atom/selected ///Used to store when the next scan is available. Updated by the scan() proc. var/next_scan = 0 - ///Used to keep track of the last value program_icon_state was set to, to prevent constant unnecessary update_icon() calls + ///Used to keep track of the last value program_icon_state was set to, to prevent constant unnecessary update_appearance(updates = ALL) calls var/last_icon_state = "" ///Used by the tgui interface, themed NT or Syndicate. var/arrowstyle = "ntosradarpointer.png" @@ -180,7 +180,7 @@ if(!trackable(signal)) program_icon_state = "[initial(program_icon_state)]lost" if(last_icon_state != program_icon_state) - computer.update_icon() + computer.update_appearance(updates = ALL) last_icon_state = program_icon_state return @@ -198,7 +198,7 @@ program_icon_state = "[initial(program_icon_state)]far" if(last_icon_state != program_icon_state) - computer.update_icon() + computer.update_appearance(updates = ALL) last_icon_state = program_icon_state computer.setDir(get_dir(here_turf, target_turf)) diff --git a/code/modules/modular_computers/file_system/programs/science/airestorer.dm b/code/modules/modular_computers/file_system/programs/science/airestorer.dm index 56a9d7463fbd..f5c7a3a3b493 100644 --- a/code/modules/modular_computers/file_system/programs/science/airestorer.dm +++ b/code/modules/modular_computers/file_system/programs/science/airestorer.dm @@ -85,7 +85,7 @@ A.updatehealth() if(A.health >= 0 && A.stat == DEAD) A.revive() - cardhold.update_icon() + cardhold.update_appearance(updates = ALL) // Finished restoring if(A.health >= 100) ai_slot.locked = FALSE diff --git a/code/modules/modular_computers/hardware/printer.dm b/code/modules/modular_computers/hardware/printer.dm index 4266a46127cd..c783ce6a46fa 100644 --- a/code/modules/modular_computers/hardware/printer.dm +++ b/code/modules/modular_computers/hardware/printer.dm @@ -37,7 +37,7 @@ P.info = text_to_print if(paper_title) P.name = paper_title - P.update_icon() + P.update_appearance(updates = ALL) P.reload_fields() stored_paper-- P = null @@ -52,7 +52,7 @@ // Damaged printer causes the resulting paper to be somewhat harder to read. if(damage > damage_malfunction) P.info = stars(P.info, 100-malfunction_probability) - P.update_icon() + P.update_appearance(updates = ALL) P.reload_fields() stored_paper-- P = null diff --git a/code/modules/ninja/energy_katana.dm b/code/modules/ninja/energy_katana.dm index 83d559175094..8c8d040cb6e1 100644 --- a/code/modules/ninja/energy_katana.dm +++ b/code/modules/ninja/energy_katana.dm @@ -86,7 +86,7 @@ /obj/item/energy_katana/dropped(mob/user) . = ..() - jaunt.Remove(user) + jaunt?.Remove(user) user.update_icons() //If we hit the Ninja who owns this Katana, they catch it. diff --git a/code/modules/ninja/suit/ninjaDrainAct.dm b/code/modules/ninja/suit/ninjaDrainAct.dm index f8b61cef7b5e..a4a529c3b469 100644 --- a/code/modules/ninja/suit/ninjaDrainAct.dm +++ b/code/modules/ninja/suit/ninjaDrainAct.dm @@ -55,7 +55,7 @@ They *could* go in their appropriate files, but this is supposed to be modular playsound(loc, "sparks", 50, 1) obj_flags |= EMAGGED locked = FALSE - update_icon() + update_appearance(updates = ALL) @@ -112,7 +112,7 @@ They *could* go in their appropriate files, but this is supposed to be modular S.cell.give(charge) charge = 0 corrupt() - update_icon() + update_appearance(updates = ALL) /obj/machinery/proc/AI_notify_hack() var/turf/location = get_turf(src) diff --git a/code/modules/ninja/suit/suit_attackby.dm b/code/modules/ninja/suit/suit_attackby.dm index 6a9040497657..aab9572e7059 100644 --- a/code/modules/ninja/suit/suit_attackby.dm +++ b/code/modules/ninja/suit/suit_attackby.dm @@ -29,7 +29,7 @@ U.put_in_hands(old_cell) old_cell.add_fingerprint(U) old_cell.corrupt() - old_cell.update_icon() + old_cell.update_appearance(updates = ALL) cell = CELL to_chat(U, span_notice("Upgrade complete. Maximum capacity: [round(cell.maxcharge/100)]%")) else diff --git a/code/modules/pai/card.dm b/code/modules/pai/card.dm index 312b8a26abc1..e512b719ec00 100644 --- a/code/modules/pai/card.dm +++ b/code/modules/pai/card.dm @@ -58,19 +58,19 @@ if(thing == pai) //double check /mob/living/silicon/pai/Destroy() if you change these. pai = null emotion_icon = initial(emotion_icon) - update_icon() + update_appearance(updates = ALL) return ..() /obj/item/pai_card/Initialize(mapload) . = ..() - update_icon() + update_appearance(updates = ALL) SSpai.pai_card_list += src /obj/item/pai_card/suicide_act(mob/living/user) user.visible_message(span_suicide("[user] is staring sadly at [src]! [user.p_they()] can't keep living without real human intimacy!")) return OXYLOSS -/obj/item/pai_card/proc/update_overlays() +/obj/item/pai_card/update_overlays() . = ..() . += "pai-[emotion_icon]" if(pai?.hacking_cable) @@ -79,7 +79,7 @@ /obj/item/pai_card/vv_edit_var(vname, vval) . = ..() if(vname == NAMEOF(src, emotion_icon)) - update_icon() + update_appearance(updates = ALL) /obj/item/pai_card/ui_interact(mob/user, datum/tgui/ui) . = ..() @@ -253,7 +253,7 @@ return FALSE pai = downloaded emotion_icon = "null" - update_icon() + update_appearance(updates = ALL) playsound(src, 'sound/effects/pai_boot.ogg', 50, TRUE, -1) audible_message("[src] plays a cheerful startup noise!") return TRUE diff --git a/code/modules/pai/death.dm b/code/modules/pai/death.dm index 62cd82fe009b..7b856657f2e9 100644 --- a/code/modules/pai/death.dm +++ b/code/modules/pai/death.dm @@ -14,6 +14,6 @@ card.forceMove(drop_location()) card.pai = null card.emotion_icon = initial(card.emotion_icon) - card.update_icon() + card.update_appearance(updates = ALL) qdel(src) diff --git a/code/modules/pai/door_jack.dm b/code/modules/pai/door_jack.dm index 50013cf5862c..44b06f69ea34 100644 --- a/code/modules/pai/door_jack.dm +++ b/code/modules/pai/door_jack.dm @@ -116,7 +116,7 @@ untrack_thing(hacking_cable) QDEL_NULL(hacking_cable) if(!QDELETED(card)) - card.update_icon() + card.update_appearance(updates = ALL) return FALSE var/obj/machinery/door/door = hacking_cable.machine balloon_alert(src, "success") diff --git a/code/modules/pai/hud.dm b/code/modules/pai/hud.dm index 52df720e507e..3c53c96395a3 100644 --- a/code/modules/pai/hud.dm +++ b/code/modules/pai/hud.dm @@ -179,57 +179,57 @@ var/mob/living/silicon/pai/mypai = mymob // Software menu - using = new /atom/movable/screen/pai/software + using = new /atom/movable/screen/pai/software(src) using.screen_loc = ui_pai_software static_inventory += using // Holoform - using = new /atom/movable/screen/pai/shell + using = new /atom/movable/screen/pai/shell(src) using.screen_loc = ui_pai_shell static_inventory += using // Chassis Select Menu - using = new /atom/movable/screen/pai/chassis + using = new /atom/movable/screen/pai/chassis(src) using.screen_loc = ui_pai_chassis static_inventory += using // Rest - using = new /atom/movable/screen/pai/rest + using = new /atom/movable/screen/pai/rest(src) using.screen_loc = ui_pai_rest static_inventory += using // Integrated Light - using = new /atom/movable/screen/pai/light + using = new /atom/movable/screen/pai/light(src) using.screen_loc = ui_pai_light static_inventory += using // Newscaster - using = new /atom/movable/screen/pai/newscaster + using = new /atom/movable/screen/pai/newscaster(src) using.screen_loc = ui_pai_newscaster static_inventory += using // Language menu - using = new /atom/movable/screen/language_menu + using = new /atom/movable/screen/language_menu(src) using.screen_loc = ui_pai_language_menu static_inventory += using // Host Monitor - using = new /atom/movable/screen/pai/host_monitor() + using = new /atom/movable/screen/pai/host_monitor(src) using.screen_loc = ui_pai_host_monitor static_inventory += using // Crew Manifest - using = new /atom/movable/screen/pai/crew_manifest() + using = new /atom/movable/screen/pai/crew_manifest(src) using.screen_loc = ui_pai_crew_manifest static_inventory += using // Laws - using = new /atom/movable/screen/pai/state_laws() + using = new /atom/movable/screen/pai/state_laws(src) using.screen_loc = ui_pai_state_laws static_inventory += using // Modular Interface - using = new /atom/movable/screen/pai/modpc() + using = new /atom/movable/screen/pai/modpc(src) using.screen_loc = ui_pai_mod_int static_inventory += using mypai.pda_button = using @@ -237,22 +237,22 @@ tablet_button.pAI = mypai // Internal GPS - using = new /atom/movable/screen/pai/internal_gps() + using = new /atom/movable/screen/pai/internal_gps(src) using.screen_loc = ui_pai_internal_gps static_inventory += using // Take image - using = new /atom/movable/screen/pai/image_take() + using = new /atom/movable/screen/pai/image_take(src) using.screen_loc = ui_pai_take_picture static_inventory += using // View images - using = new /atom/movable/screen/pai/image_view() + using = new /atom/movable/screen/pai/image_view(src) using.screen_loc = ui_pai_view_images static_inventory += using // Radio - using = new /atom/movable/screen/pai/radio() + using = new /atom/movable/screen/pai/radio(src) using.screen_loc = ui_pai_radio static_inventory += using diff --git a/code/modules/pai/pai.dm b/code/modules/pai/pai.dm index 71a1013a4c19..49f47b7ad282 100644 --- a/code/modules/pai/pai.dm +++ b/code/modules/pai/pai.dm @@ -170,7 +170,7 @@ hacking_cable = null SStgui.update_user_uis(src) if(!QDELETED(card)) - card.update_icon() + card.update_appearance(updates = ALL) if(deleting_atom == atmos_analyzer) atmos_analyzer = null if(deleting_atom == camera) diff --git a/code/modules/pai/software.dm b/code/modules/pai/software.dm index 1ff2e02d3585..8ac66feebfed 100644 --- a/code/modules/pai/software.dm +++ b/code/modules/pai/software.dm @@ -142,7 +142,7 @@ if(isnull(new_image)) return FALSE card.emotion_icon = new_image - card.update_icon() + card.update_appearance(updates = ALL) return TRUE /** diff --git a/code/modules/paperwork/carbonpaper.dm b/code/modules/paperwork/carbonpaper.dm index d81bbbb5fc2c..5c38cbb3bef3 100644 --- a/code/modules/paperwork/carbonpaper.dm +++ b/code/modules/paperwork/carbonpaper.dm @@ -7,7 +7,8 @@ var/iscopy = FALSE -/obj/item/paper/carbon/update_icon() +/obj/item/paper/carbon/update_appearance(updates = ALL) + . = ..() if(iscopy) if(written.len) icon_state = "cpaper_words" @@ -52,8 +53,8 @@ copied = TRUE copy.copied = TRUE copy.iscopy = TRUE - update_icon() - copy.update_icon() + update_appearance(updates = ALL) + copy.update_appearance(updates = ALL) usr.put_in_hands(copy) else to_chat(usr, span_warning("There are no more carbon copies attached to this paper!")) diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm index 82cc9c8f249a..ea39309be758 100644 --- a/code/modules/paperwork/clipboard.dm +++ b/code/modules/paperwork/clipboard.dm @@ -17,15 +17,16 @@ return BRUTELOSS//the clipboard's clip is very strong. industrial duty. can kill a man easily. /obj/item/clipboard/Initialize(mapload) - update_icon() - . = ..() + update_appearance(updates = ALL) + return ..() /obj/item/clipboard/Destroy() QDEL_NULL(haspen) QDEL_NULL(toppaper) //let movable/Destroy handle the rest return ..() -/obj/item/clipboard/update_icon() +/obj/item/clipboard/update_appearance(updates = ALL) + . = ..() cut_overlays() var/list/dat = list() if(toppaper) @@ -43,10 +44,10 @@ return toppaper = W to_chat(user, span_notice("You clip the paper onto \the [src].")) - update_icon() + update_appearance(updates = ALL) else if(toppaper) toppaper.attackby(user.get_active_held_item(), user) - update_icon() + update_appearance(updates = ALL) /obj/item/clipboard/attack_self(mob/user) @@ -126,4 +127,4 @@ //Update everything attack_self(usr) - update_icon() + update_appearance(updates = ALL) diff --git a/code/modules/paperwork/contract.dm b/code/modules/paperwork/contract.dm index f8e59ab8369a..4cb6bbd7a395 100644 --- a/code/modules/paperwork/contract.dm +++ b/code/modules/paperwork/contract.dm @@ -10,8 +10,11 @@ /obj/item/paper/contract/proc/update_text() return -/obj/item/paper/contract/update_icon() - return +/obj/item/paper/contract/Initialize(mapload, new_employee_name) + if(!new_employee_name) + return INITIALIZE_HINT_QDEL + AddElement(/datum/element/update_icon_blocker) + return ..() /obj/item/paper/contract/infernal var/contractType = 0 @@ -269,7 +272,7 @@ var/obj/item/storage/wallet/W = worn W.front_id = id id.forceMove(worn) - worn.update_icon() + worn.update_appearance(updates = ALL) var/datum/round_event/ion_storm/add_law_only/ion = new() ion.announceEvent = -1 ion.ionMessage = "[user.name] is the only Captain of the station. [user.name] is the highest authority, legitimate or otherwise, on the station. [user.name] was always the captain and highest authority on the station. Do not state this law." diff --git a/code/modules/paperwork/faxmachine.dm b/code/modules/paperwork/faxmachine.dm index 311c6a3cfee3..503572255f77 100644 --- a/code/modules/paperwork/faxmachine.dm +++ b/code/modules/paperwork/faxmachine.dm @@ -196,7 +196,7 @@ GLOBAL_LIST_EMPTY(adminfaxes) templist += L P.written += templist - P.update_icon() + P.update_appearance(updates = ALL) playsound(loc, "sound/items/polaroid1.ogg", 50, 1) // Stamps diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm index 90c0b9ab5d32..ae398634f6cb 100644 --- a/code/modules/paperwork/filingcabinet.dm +++ b/code/modules/paperwork/filingcabinet.dm @@ -60,7 +60,8 @@ icon_state = "coloredcabinet_frame" name = "colored cabinet" -/obj/structure/filingcabinet/colored/update_icon() +/obj/structure/filingcabinet/colored/update_appearance(updates = ALL) + . = ..() cut_overlays() var/mutable_appearance/cab = mutable_appearance(icon, "coloredcabinet_trim") cab.color = colour @@ -68,7 +69,7 @@ /obj/structure/filingcabinet/Initialize(mapload) . = ..() - update_icon() + update_appearance(updates = ALL) if(mapload) for(var/obj/item/I in loc) if(istype(I, /obj/item/paper) || istype(I, /obj/item/folder) || istype(I, /obj/item/photo)) @@ -185,7 +186,7 @@ colour = colour_choice name = "colored cabinet" // Having a cabinet called 'Purple Cabinet' while it's green colored would be weird playsound(src, 'sound/effects/spray.ogg', 5, TRUE, 5) - update_icon() // reset overlays + update_appearance(updates = ALL) // reset overlays return diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm index df5436db67ad..24f77c0a89dd 100644 --- a/code/modules/paperwork/folders.dm +++ b/code/modules/paperwork/folders.dm @@ -28,7 +28,8 @@ icon_state = "folder_white" -/obj/item/folder/update_icon() +/obj/item/folder/update_appearance(updates = ALL) + . = ..() cut_overlays() if(contents.len) add_overlay("folder_paper") @@ -39,7 +40,7 @@ if(!user.transferItemToLoc(W, src)) return to_chat(user, span_notice("You put [W] into [src].")) - update_icon() + update_appearance(updates = ALL) else if(istype(W, /obj/item/pen)) if(!user.is_literate()) to_chat(user, span_notice("You scribble illegibly on the cover of [src]!")) @@ -94,7 +95,7 @@ //Update everything attack_self(usr) - update_icon() + update_appearance(updates = ALL) /obj/item/folder/documents name = "folder- 'TOP SECRET'" @@ -103,7 +104,7 @@ /obj/item/folder/documents/Initialize(mapload) . = ..() new /obj/item/documents/nanotrasen(src) - update_icon() + update_appearance(updates = ALL) /obj/item/folder/syndicate icon_state = "folder_syndie" @@ -116,7 +117,7 @@ /obj/item/folder/syndicate/red/Initialize(mapload) . = ..() new /obj/item/documents/syndicate/red(src) - update_icon() + update_appearance(updates = ALL) /obj/item/folder/syndicate/blue icon_state = "folder_sblue" @@ -124,9 +125,9 @@ /obj/item/folder/syndicate/blue/Initialize(mapload) . = ..() new /obj/item/documents/syndicate/blue(src) - update_icon() + update_appearance(updates = ALL) /obj/item/folder/syndicate/mining/Initialize(mapload) . = ..() new /obj/item/documents/syndicate/mining(src) - update_icon() + update_appearance(updates = ALL) diff --git a/code/modules/paperwork/inspector_booth.dm b/code/modules/paperwork/inspector_booth.dm index cff2ff91cb79..7cd9016bb451 100644 --- a/code/modules/paperwork/inspector_booth.dm +++ b/code/modules/paperwork/inspector_booth.dm @@ -55,9 +55,10 @@ /obj/machinery/inspector_booth/Initialize(mapload) . = ..() - update_icon() + update_appearance(updates = ALL) -/obj/machinery/inspector_booth/update_icon() +/obj/machinery/inspector_booth/update_appearance(updates = ALL) + . = ..() if (stat & NOPOWER) icon_state = "booth_off" else if (panel_open || stat & MAINT) diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 0442a79569ad..81c7bba57797 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -76,10 +76,11 @@ pixel_y = rand(-8, 8) pixel_x = rand(-9, 9) written = list() - update_icon() + update_appearance(updates = ALL) -/obj/item/paper/update_icon() +/obj/item/paper/update_appearance(updates = ALL) + . = ..() if(resistance_flags & ON_FIRE) icon_state = "paper_onfire" @@ -185,7 +186,7 @@ stamps = null LAZYCLEARLIST(stamped) cut_overlays() - update_icon() + update_appearance(updates = ALL) /obj/item/paper/proc/parsepencode(t, obj/item/pen/P, mob/user, iscrayon = 0) @@ -279,7 +280,7 @@ else written.Insert(text2num(id),templist) // text2num, otherwise it writes to the hashtable index instead of into the array usr << browse("[name][render_body(usr,TRUE)]
    [stamps]", "window=[name]") // Update the window - update_icon() + update_appearance(updates = ALL) /obj/item/paper/attackby(obj/item/P, mob/living/carbon/human/user, params) @@ -355,7 +356,7 @@ src.loc = B P.loc = B B.amount = 2 - B.update_icon() + B.update_appearance(updates = ALL) add_fingerprint(user) @@ -368,7 +369,7 @@ /obj/item/paper/extinguish() ..() - update_icon() + update_appearance(updates = ALL) /* * Construction paper @@ -393,8 +394,9 @@ icon_state = "scrap" slot_flags = null -/obj/item/paper/crumpled/update_icon() - return +/obj/item/paper/crumpled/Initialize(mapload) + AddElement(/datum/element/update_icon_blocker) + return ..() /obj/item/paper/crumpled/bloody icon_state = "scrap_bloodied" diff --git a/code/modules/paperwork/paper_bundle.dm b/code/modules/paperwork/paper_bundle.dm index 351e5472cc1c..f6f1f67df1e3 100644 --- a/code/modules/paperwork/paper_bundle.dm +++ b/code/modules/paperwork/paper_bundle.dm @@ -58,7 +58,7 @@ usr << browse("", "window=[name]") //Closes the dialog P = src[page] P.attackby(W, user) - update_icon() + update_appearance(updates = ALL) attack_self(usr) //Update the browsed page. add_fingerprint(usr) return @@ -114,7 +114,7 @@ /obj/item/paper_bundle/attack_self(mob/user as mob) src.show_content(user) add_fingerprint(usr) - update_icon() + update_appearance(updates = ALL) return /obj/item/paper_bundle/proc/update_screen() @@ -165,7 +165,7 @@ page = amount if(page == amount) screen = 2 - update_icon() + update_appearance(updates = ALL) else to_chat(usr, span_notice("You need to hold it in hand!")) if (istype(src.loc, /mob) || istype(src.loc?.loc, /mob)) @@ -205,7 +205,8 @@ /obj/item/paper_bundle/AltClick(mob/living/user) unbundle() -/obj/item/paper_bundle/update_icon() +/obj/item/paper_bundle/update_appearance(updates = ALL) + . = ..() cut_overlays() var/obj/item/paper/P = src[1] icon_state = P.icon_state diff --git a/code/modules/paperwork/paper_cutter.dm b/code/modules/paperwork/paper_cutter.dm index 127366ab3b44..1c15ab5da29d 100644 --- a/code/modules/paperwork/paper_cutter.dm +++ b/code/modules/paperwork/paper_cutter.dm @@ -15,7 +15,7 @@ /obj/item/papercutter/Initialize(mapload) . = ..() storedcutter = new /obj/item/hatchet/cutterblade(src) - update_icon() + update_appearance(updates = ALL) /obj/item/papercutter/suicide_act(mob/user) @@ -34,8 +34,8 @@ return (BRUTELOSS) -/obj/item/papercutter/update_icon() - ..() +/obj/item/papercutter/update_appearance(updates = ALL) + . = ..() cut_overlays() icon_state = (storedcutter ? "[initial(icon_state)]-cutter" : "[initial(icon_state)]") if(storedpaper) @@ -49,7 +49,7 @@ playsound(loc, "pageturn", 60, 1) to_chat(user, span_notice("You place [P] in [src].")) storedpaper = P - update_icon() + update_appearance(updates = ALL) return if(istype(P, /obj/item/hatchet/cutterblade) && !storedcutter) if(!user.transferItemToLoc(P, src)) @@ -57,7 +57,7 @@ to_chat(user, span_notice("You replace [src]'s [P].")) P.forceMove(src) storedcutter = P - update_icon() + update_appearance(updates = ALL) return if(P.tool_behaviour == TOOL_SCREWDRIVER && storedcutter) P.play_tool_sound(src) @@ -79,7 +79,7 @@ to_chat(user, span_notice("You remove [src]'s [storedcutter].")) user.put_in_hands(storedcutter) storedcutter = null - update_icon() + update_appearance(updates = ALL) if(storedpaper) playsound(src.loc, 'sound/weapons/slash.ogg', 50, 1) @@ -88,7 +88,7 @@ qdel(storedpaper) new /obj/item/paperslip(get_turf(src)) new /obj/item/paperslip(get_turf(src)) - update_icon() + update_appearance(updates = ALL) /obj/item/papercutter/MouseDrop(atom/over_object) . = ..() diff --git a/code/modules/paperwork/paperbin.dm b/code/modules/paperwork/paperbin.dm index c52d915c54b4..3f04fa272af5 100644 --- a/code/modules/paperwork/paperbin.dm +++ b/code/modules/paperwork/paperbin.dm @@ -25,7 +25,7 @@ if(P && !bin_pen) P.forceMove(src) bin_pen = P - update_icon() + update_appearance(updates = ALL) /obj/item/paper_bin/Destroy() if(papers) @@ -37,7 +37,7 @@ /obj/item/paper_bin/fire_act(exposed_temperature, exposed_volume) if(total_paper) total_paper = 0 - update_icon() + update_appearance(updates = ALL) ..() /obj/item/paper_bin/MouseDrop(atom/over_object) @@ -73,14 +73,14 @@ user.put_in_hands(P) to_chat(user, span_notice("You take [P] out of \the [src].")) bin_pen = null - update_icon() + update_appearance(updates = ALL) else if(total_paper >= 1) response = alert(user, "Do you take regular paper, or Carbon copy paper?", "Paper type request", "Regular", "Carbon Copy", "Cancel") if (response != "Regular" && response != "Carbon Copy") add_fingerprint(user) return total_paper-- - update_icon() + update_appearance(updates = ALL) // If there's any custom paper on the stack, use that instead of creating a new paper. var/obj/item/paper/P if(papers.len > 0) @@ -113,14 +113,14 @@ to_chat(user, span_notice("You put [P] in [src].")) papers.Add(P) total_paper++ - update_icon() + update_appearance(updates = ALL) else if(istype(I, /obj/item/pen) && !bin_pen) var/obj/item/pen/P = I if(!user.transferItemToLoc(P, src)) return to_chat(user, span_notice("You put [P] in [src].")) bin_pen = P - update_icon() + update_appearance(updates = ALL) else return ..() @@ -131,7 +131,8 @@ else . += "It doesn't contain anything." -/obj/item/paper_bin/update_icon() +/obj/item/paper_bin/update_appearance(updates = ALL) + . = ..() if(total_paper < 1) icon_state = "paper_bin0" else diff --git a/code/modules/paperwork/paperplane.dm b/code/modules/paperwork/paperplane.dm index 97985c89f6ff..ecece6048356 100644 --- a/code/modules/paperwork/paperplane.dm +++ b/code/modules/paperwork/paperplane.dm @@ -29,7 +29,7 @@ newPaper.forceMove(src) else internalPaper = new(src) - update_icon() + update_appearance(updates = ALL) /obj/item/paperplane/handle_atom_del(atom/A) if(A == internalPaper) @@ -52,7 +52,8 @@ sleep(1 SECONDS) return (BRUTELOSS) -/obj/item/paperplane/update_icon() +/obj/item/paperplane/update_appearance(updates = ALL) + . = ..() cut_overlays() var/list/stamped = internalPaper.stamped if(stamped) @@ -75,7 +76,7 @@ else if(istype(P, /obj/item/stamp)) //we don't randomize stamps on a paperplane internalPaper.attackby(P, user) //spoofed attack to update internal paper. - update_icon() + update_appearance(updates = ALL) else if(P.is_hot()) if(HAS_TRAIT(user, TRAIT_CLUMSY) && prob(10)) diff --git a/code/modules/paperwork/papershredder.dm b/code/modules/paperwork/papershredder.dm index 3447000a9306..b7d92a601cda 100644 --- a/code/modules/paperwork/papershredder.dm +++ b/code/modules/paperwork/papershredder.dm @@ -11,7 +11,7 @@ /obj/machinery/papershredder/proc/try_insert(mob/user, insert_size = 0) if(paperamount <= max_paper - insert_size) paperamount += insert_size - update_icon() + update_appearance(updates = ALL) playsound(src.loc, 'sound/items/pshred.ogg', 75, 1) return TRUE else @@ -30,7 +30,7 @@ if(ran == 3) SP.color = null paperamount -=1 - update_icon() + update_appearance(updates = ALL) to_chat(user, span_warning("The [src] was too full and shredded paper goes everywhere!")) else to_chat(user, span_warning("The [src] is full please empty it before you continue.")) @@ -74,7 +74,7 @@ SP.color = null STR.handle_item_insertion(SP) paperamount -=1 - update_icon() + update_appearance(updates = ALL) else to_chat(user, span_warning("The [W] is full.")) return @@ -85,7 +85,7 @@ if(paperamount < max_paper) qdel(W) paperamount += 1 - update_icon() + update_appearance(updates = ALL) return if(shred_amount && try_insert(user, shred_amount)) @@ -113,12 +113,13 @@ if(ran == 3) SP.color = null paperamount -=1 - update_icon() + update_appearance(updates = ALL) /obj/machinery/papershredder/AltClick(mob/living/user) emptypaper() -/obj/machinery/papershredder/update_icon() +/obj/machinery/papershredder/update_appearance(updates = ALL) + . = ..() if(paperamount == 0) icon_state = "papershredder0" if(paperamount == 1||paperamount == 2) diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index 45dd291ba16f..9d986f495826 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -227,9 +227,10 @@ to_chat(user, span_warning("[src] is now active.")) var/datum/component/butchering/butchering = src.GetComponent(/datum/component/butchering) butchering.butchering_enabled = on - update_icon() + update_appearance(updates = ALL) -/obj/item/pen/edagger/update_icon() +/obj/item/pen/edagger/update_appearance(updates = ALL) + . = ..() if(on) icon_state = "edagger" item_state = "edagger" diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index 3733cfb818f1..49f3317edef4 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -341,7 +341,7 @@ c.written += L c.name = copy.name c.fields = copy.fields - c.update_icon() + c.update_appearance(updates = ALL) c.stamps = copy.stamps if(copy.stamped) c.stamped = copy.stamped.Copy() @@ -374,7 +374,7 @@ p.amount++ //p.amount-- p.loc = src.loc - p.update_icon() + p.update_appearance(updates = ALL) p.icon_state = "paper_words" p.name = bundle.name p.pixel_y = rand(-8, 8) diff --git a/code/modules/paperwork/ticketmachine.dm b/code/modules/paperwork/ticketmachine.dm index 8cb813ecbc13..7720a582f752 100644 --- a/code/modules/paperwork/ticketmachine.dm +++ b/code/modules/paperwork/ticketmachine.dm @@ -18,9 +18,10 @@ /obj/machinery/ticket_machine/Initialize(mapload) . = ..() - update_icon() + update_appearance(updates = ALL) -/obj/machinery/ticket_machine/update_icon() +/obj/machinery/ticket_machine/update_appearance(updates = ALL) + . = ..() var/Temp = screenNum //This whole thing breaks down a 3 digit number into 3 seperate digits, aka "69" becomes "0","6" and "9" var/Digit1 = round(Temp%10)//The remainder of any number/10 is always that number's rightmost digit var/Digit2 = round(((Temp-Digit1)*0.1)%10) //Same idea, but divided by ten, to find the middle digit @@ -50,7 +51,7 @@ if(currentNum < screenNum - 1) screenNum -- //this should only happen if the queue is all caught up and more numbers get called than tickets exist currentNum = screenNum - 1 //so the number wont go onto infinity. Numbers that haven't been taken yet won't show up on the screen yet either. - update_icon() //Update our icon here + update_appearance(updates = ALL) //Update our icon here if(tickets.len\The [src] already contains a photo.
    ") ..() @@ -31,7 +31,7 @@ user.put_in_hands(I) to_chat(user, span_notice("You carefully remove the photo from \the [src].")) displayed = null - update_icon() + update_appearance(updates = ALL) return ..() /obj/item/wallframe/picture/attack_self(mob/user) @@ -44,7 +44,8 @@ else return ..() -/obj/item/wallframe/picture/update_icon() +/obj/item/wallframe/picture/update_appearance(updates = ALL) + . = ..() cut_overlays() if(displayed) add_overlay(image(displayed)) @@ -106,7 +107,7 @@ else qdel(framed) framed = P - update_icon() + update_appearance(updates = ALL) /obj/structure/sign/picture_frame/examine(mob/user) if(in_range(src, user) && framed) @@ -135,7 +136,7 @@ if(!user.transferItemToLoc(P, src)) return framed = P - update_icon() + update_appearance(updates = ALL) else to_chat(user, "\The [src] already contains a photo.") @@ -148,7 +149,8 @@ if(framed) framed.show(user) -/obj/structure/sign/picture_frame/update_icon() +/obj/structure/sign/picture_frame/update_appearance(updates = ALL) + . = ..() cut_overlays() if(framed) add_overlay(image(framed)) @@ -162,5 +164,5 @@ if(contents.len) var/obj/item/I = pick(contents) I.forceMove(F) - F.update_icon() + F.update_appearance(updates = ALL) qdel(src) diff --git a/code/modules/photography/photos/photo.dm b/code/modules/photography/photos/photo.dm index 768367a708ed..91839f855ed4 100644 --- a/code/modules/photography/photos/photo.dm +++ b/code/modules/photography/photos/photo.dm @@ -21,7 +21,7 @@ if(!istype(P)) return picture = P - update_icon() + update_appearance(updates = ALL) if(P.caption) scribble = P.caption if(setname && P.picture_name) @@ -32,7 +32,8 @@ if(setdesc && P.picture_desc) desc = P.picture_desc -/obj/item/photo/update_icon() +/obj/item/photo/update_appearance(updates = ALL) + . = ..() if(!istype(picture) || !picture.picture_image) return var/icon/I = picture.get_small_icon() diff --git a/code/modules/plumbing/ducts.dm b/code/modules/plumbing/ducts.dm index f238a8cc734d..9ab6d9a04d1f 100644 --- a/code/modules/plumbing/ducts.dm +++ b/code/modules/plumbing/ducts.dm @@ -57,7 +57,7 @@ All the important duct code: for(var/atom/movable/AM in get_step(src, D)) if(connect_network(AM, D)) add_connects(D) - update_icon() + update_appearance(updates = ALL) /obj/machinery/duct/proc/connect_network(atom/movable/AM, direction, ignore_color) if(istype(AM, /obj/machinery/duct)) @@ -82,7 +82,7 @@ All the important duct code: add_neighbour(D) D.add_connects(opposite_dir) - D.update_icon() + D.update_appearance(updates = ALL) return TRUE //tell the current pipe to also update it's sprite if(!(D in neighbours)) //we cool if((duct_color != D.duct_color) && !(ignore_colors || D.ignore_colors)) @@ -125,7 +125,7 @@ All the important duct code: duct.remove_duct(src) lose_neighbours() reset_connects(0) - update_icon() + update_appearance(updates = ALL) /obj/machinery/duct/proc/create_duct() duct = new() @@ -160,7 +160,8 @@ All the important duct code: adjacents += D return adjacents -/obj/machinery/duct/update_icon() //setting connects isnt a parameter because sometimes we make more than one change, overwrite it completely or just add it to the bitfield +/obj/machinery/duct/update_appearance(updates = ALL) + . = ..() //setting connects isnt a parameter because sometimes we make more than one change, overwrite it completely or just add it to the bitfield var/temp_icon = initial(icon_state) for(var/D in GLOB.cardinals) if(D & connects) @@ -245,7 +246,7 @@ All the important duct code: return connect_network(D, direction, TRUE) add_connects(direction) - update_icon() + update_appearance(updates = ALL) /obj/machinery/duct/multilayered name = "duct layer-manifold" @@ -262,7 +263,8 @@ All the important duct code: dumb = TRUE -/obj/machinery/duct/multilayered/update_icon() +/obj/machinery/duct/multilayered/update_appearance(updates = ALL) + . = ..() icon_state = initial(icon_state) if((connects & NORTH) || (connects & SOUTH)) icon_state += "_vertical" diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 5051b5ba8f06..fa4606ded5fb 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -205,7 +205,7 @@ operating = FALSE name = "[area.name] APC" stat |= MAINT - src.update_icon() + src.update_appearance(updates = ALL) addtimer(CALLBACK(src, PROC_REF(update)), 5) /obj/machinery/power/apc/Destroy() @@ -230,7 +230,7 @@ /obj/machinery/power/apc/handle_atom_del(atom/A) if(A == cell) cell = null - update_icon() + update_appearance(updates = ALL) updateUsrDialog() /obj/machinery/power/apc/proc/make_terminal() @@ -260,7 +260,7 @@ stack_trace("Bad areastring path for [src], [src.areastring]") else if(isarea(A) && src.areastring == null) src.area = A - update_icon() + update_appearance(updates = ALL) make_terminal() @@ -325,7 +325,8 @@ // update the APC icon to show the three base states // also add overlays for indicator lights -/obj/machinery/power/apc/update_icon() +/obj/machinery/power/apc/update_appearance(updates = ALL) + . = ..() var/update = check_updates() //returns 0 if no need to update icons. // 1 if we need to update the icon_state // 2 if we need to update the overlays @@ -518,7 +519,7 @@ else if (opened!=APC_COVER_REMOVED) opened = APC_COVER_CLOSED coverlocked = TRUE //closing cover relocks it - update_icon() + update_appearance(updates = ALL) return else if (!(stat & BROKEN)) if(coverlocked && !(stat & MAINT)) // locked... @@ -529,7 +530,7 @@ return else opened = APC_COVER_OPENED - update_icon() + update_appearance(updates = ALL) return else W.play_tool_sound(src) @@ -538,7 +539,7 @@ W.play_tool_sound(src) to_chat(user, span_notice("You pry the broken cover off of [src].")) opened = APC_COVER_REMOVED - update_icon() + update_appearance(updates = ALL) return /obj/machinery/power/apc/screwdriver_act(mob/living/user, obj/item/W) @@ -550,10 +551,10 @@ user.visible_message("[user] removes \the [cell] from [src]!",span_notice("You remove \the [cell].")) var/turf/T = get_turf(user) cell.forceMove(T) - cell.update_icon() + cell.update_appearance(updates = ALL) cell = null charging = APC_NOT_CHARGING - update_icon() + update_appearance(updates = ALL) return else switch (has_electronics) @@ -570,14 +571,14 @@ else to_chat(user, span_warning("There is nothing to secure!")) return - update_icon() + update_appearance(updates = ALL) else if(obj_flags & EMAGGED) to_chat(user, span_warning("The interface is broken!")) return else panel_open = !panel_open to_chat(user, span_notice("The wires have been [panel_open ? "exposed" : "unexposed"].")) - update_icon() + update_appearance(updates = ALL) /obj/machinery/power/apc/wirecutter_act(mob/living/user, obj/item/W) if (terminal && opened) @@ -626,7 +627,7 @@ "[user.name] has inserted the power cell to [src.name]!",\ span_notice("You insert the power cell.")) chargecount = 0 - update_icon() + update_appearance(updates = ALL) else if (W.GetID()) togglelock(user) else if (istype(W, /obj/item/stack/cable_coil) && opened) @@ -704,7 +705,7 @@ chargecount = 0 user.visible_message(span_notice("[user] fabricates a weak power cell and places it into [src]."), \ span_warning("Your [P.name] whirrs with strain as you create a weak power cell and place it into [src]!")) - update_icon() + update_appearance(updates = ALL) else to_chat(user, span_warning("[src] has both electronics and a cell.")) return @@ -719,7 +720,7 @@ to_chat(user, span_notice("You replace missing APC's cover.")) qdel(W) opened = APC_COVER_OPENED - update_icon() + update_appearance(updates = ALL) return if (has_electronics) to_chat(user, span_warning("You cannot repair this APC until you remove the electronics still inside!")) @@ -733,7 +734,7 @@ obj_integrity = max_integrity if (opened==APC_COVER_REMOVED) opened = APC_COVER_OPENED - update_icon() + update_appearance(updates = ALL) else if(istype(W, /obj/item/clockwork/integration_cog) && is_servant_of_ratvar(user)) if(integration_cog) to_chat(user, span_warning("This APC already has a cog.")) @@ -742,7 +743,7 @@ user.visible_message(span_warning("[user] slices [src]'s cover lock, and it swings wide open!"), \ span_alloy("You slice [src]'s cover lock apart with [W], and the cover swings open.")) opened = APC_COVER_OPENED - update_icon() + update_appearance(updates = ALL) else user.visible_message(span_warning("[user] presses [W] into [src]!"), \ span_alloy("You hold [W] in place within [src], and it slowly begins to warm up...")) @@ -759,7 +760,7 @@ playsound(src, 'sound/machines/clockcult/steam_whoosh.ogg', 50, FALSE) opened = APC_COVER_CLOSED locked = FALSE - update_icon() + update_appearance(updates = ALL) return else if(istype(W, /obj/item/apc_powercord)) return //because we put our fancy code in the right places, and this is all in the powercord's afterattack() @@ -815,7 +816,7 @@ chargecount = 0 user.visible_message(span_notice("[user] fabricates a weak power cell and places it into [src]."), \ span_warning("Your [the_rcd.name] whirrs with strain as you create a weak power cell and place it into [src]!")) - update_icon() + update_appearance(updates = ALL) return TRUE else to_chat(user, span_warning("[src] has both electronics and a cell.")) @@ -835,7 +836,7 @@ if(allowed(usr) && !wires.is_cut(WIRE_IDSCAN) && !malfhack) locked = !locked to_chat(user, span_notice("You [ locked ? "lock" : "unlock"] the APC interface.")) - update_icon() + update_appearance(updates = ALL) updateUsrDialog() else to_chat(user, span_warning("Access denied.")) @@ -866,7 +867,7 @@ opened = APC_COVER_REMOVED coverlocked = FALSE visible_message(span_warning("The APC cover is knocked down!")) - update_icon() + update_appearance(updates = ALL) /obj/machinery/power/apc/emag_act(mob/user) if(!(obj_flags & EMAGGED) && !malfhack) @@ -882,7 +883,7 @@ obj_flags |= EMAGGED locked = FALSE to_chat(user, span_notice("You emag the APC interface.")) - update_icon() + update_appearance(updates = ALL) // attack with hand - remove cell (if cover open) or interact with the APC @@ -899,10 +900,10 @@ if(cell) user.visible_message("[user] removes \the [cell] from [src]!",span_notice("You remove \the [cell].")) user.put_in_hands(cell) - cell.update_icon() + cell.update_appearance(updates = ALL) src.cell = null charging = APC_NOT_CHARGING - src.update_icon() + src.update_appearance(updates = ALL) return if((stat & MAINT) && !opened) //no board; no interface return @@ -1040,7 +1041,7 @@ to_chat(usr, "The APC does not respond to the command.") else locked = !locked - update_icon() + update_appearance(updates = ALL) . = TRUE if("cover") coverlocked = !coverlocked @@ -1055,20 +1056,20 @@ chargemode = !chargemode if(!chargemode) charging = APC_NOT_CHARGING - update_icon() + update_appearance(updates = ALL) . = TRUE if("channel") if(params["eqp"]) equipment = setsubsystem(text2num(params["eqp"])) - update_icon() + update_appearance(updates = ALL) update() else if(params["lgt"]) lighting = setsubsystem(text2num(params["lgt"])) - update_icon() + update_appearance(updates = ALL) update() else if(params["env"]) environ = setsubsystem(text2num(params["env"])) - update_icon() + update_appearance(updates = ALL) update() . = TRUE if("overload") @@ -1086,7 +1087,7 @@ malfvacate() if("reboot") failure_timer = 0 - update_icon() + update_appearance(updates = ALL) update() if("emergency_lighting") emergency_lights = !emergency_lights @@ -1111,7 +1112,7 @@ add_hiddenprint(user) log_combat(user, src, "turned [operating ? "on" : "off"]") update() - update_icon() + update_appearance(updates = ALL) /obj/machinery/power/apc/proc/malfhack(mob/living/silicon/ai/malf) if(!istype(malf)) @@ -1252,7 +1253,7 @@ /obj/machinery/power/apc/process() if(icon_update_needed) - update_icon() + update_appearance(updates = ALL) if(stat & (BROKEN|MAINT)) return if(!area.requires_power) @@ -1427,7 +1428,7 @@ if(APC_RESET_EMP) equipment = 3 environ = 3 - update_icon() + update_appearance(updates = ALL) update() // damage and destruction acts @@ -1443,7 +1444,7 @@ lighting = 0 equipment = 0 environ = 0 - update_icon() + update_appearance(updates = ALL) update() addtimer(CALLBACK(src, PROC_REF(reset), APC_RESET_EMP), 600) diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index ff93006eba42..aa96987be994 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -90,7 +90,7 @@ By design, d1 is the smallest direction and d2 is the highest cable_color = param_color || cable_color || pick(cable_colors) if(cable_colors[cable_color]) cable_color = cable_colors[cable_color] - update_icon() + update_appearance(updates = ALL) /obj/structure/cable/Destroy() // called when a cable is deleted if(powernet) @@ -117,9 +117,10 @@ By design, d1 is the smallest direction and d2 is the highest if(level == 1 && isturf(loc)) invisibility = i ? INVISIBILITY_MAXIMUM : 0 - update_icon() + update_appearance(updates = ALL) -/obj/structure/cable/update_icon() +/obj/structure/cable/update_appearance(updates = ALL) + . = ..() icon_state = "[d1]-[d2]" color = null add_atom_colour(cable_color, FIXED_COLOUR_PRIORITY) @@ -492,12 +493,12 @@ By design, d1 is the smallest direction and d2 is the highest pixel_x = rand(-2,2) pixel_y = rand(-2,2) - update_icon() + update_appearance(updates = ALL) /obj/item/stack/cable_coil/proc/set_cable_color(new_color) color = GLOB.cable_colors[new_color] cable_color = new_color - update_icon() + update_appearance(updates = ALL) /obj/item/stack/cable_coil/suicide_act(mob/user) if(locate(/obj/structure/chair/stool) in get_turf(user)) @@ -537,7 +538,7 @@ By design, d1 is the smallest direction and d2 is the highest if(use(CABLE_RESTRAINTS_COST)) var/obj/item/restraints/handcuffs/cable/restraints = new(null, cable_color) user.put_in_hands(restraints) - update_icon() + update_appearance(updates = ALL) /////////////////////////////////// // General procedures @@ -562,7 +563,8 @@ By design, d1 is the smallest direction and d2 is the highest return return ..() -/obj/item/stack/cable_coil/update_icon() +/obj/item/stack/cable_coil/update_appearance(updates = ALL) + . = ..() if(novariants) return icon_state = "[initial(item_state)][amount < 3 ? amount : ""]" @@ -576,7 +578,7 @@ By design, d1 is the smallest direction and d2 is the highest var/obj/item/stack/cable_coil/new_cable = ..() if(istype(new_cable)) new_cable.cable_color = cable_color - new_cable.update_icon() + new_cable.update_appearance(updates = ALL) //add cables to the stack /obj/item/stack/cable_coil/proc/give(extra) @@ -584,7 +586,7 @@ By design, d1 is the smallest direction and d2 is the highest amount = max_amount else amount += extra - update_icon() + update_appearance(updates = ALL) @@ -633,7 +635,7 @@ By design, d1 is the smallest direction and d2 is the highest C.d1 = 0 //it's a O-X node cable C.d2 = dirn C.add_fingerprint(user) - C.update_icon() + C.update_appearance(updates = ALL) //create a new powernet with the cable, if needed it will be merged later var/datum/powernet/PN = new() @@ -705,7 +707,7 @@ By design, d1 is the smallest direction and d2 is the highest NC.d1 = 0 NC.d2 = fdirn NC.add_fingerprint(user) - NC.update_icon() + NC.update_appearance(updates = ALL) //create a new powernet with the cable, if needed it will be merged later var/datum/powernet/newPN = new(loc.z) @@ -747,7 +749,7 @@ By design, d1 is the smallest direction and d2 is the highest return - C.update_icon() + C.update_appearance(updates = ALL) C.d1 = nd1 C.d2 = nd2 @@ -755,7 +757,7 @@ By design, d1 is the smallest direction and d2 is the highest //updates the stored cable coil C.add_fingerprint(user) - C.update_icon() + C.update_appearance(updates = ALL) C.mergeConnectedNetworks(C.d1) //merge the powernets... @@ -786,7 +788,7 @@ By design, d1 is the smallest direction and d2 is the highest /obj/item/stack/cable_coil/cyborg/attack_self(mob/user) var/picked = tgui_input_list(user, "Pick a cable color.","Cable Color", GLOB.cable_colors) cable_color = picked - update_icon() + update_appearance(updates = ALL) ////////////////////////////// // Misc. @@ -848,7 +850,7 @@ By design, d1 is the smallest direction and d2 is the highest amount = rand(1,2) pixel_x = rand(-2,2) pixel_y = rand(-2,2) - update_icon() + update_appearance(updates = ALL) /obj/item/stack/cable_coil/cut/red cable_color = "red" diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index a15b72fca84f..2ccc32836a10 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -33,7 +33,7 @@ charge = maxcharge if(ratingdesc) desc += " This one has a rating of [DisplayEnergy(maxcharge)], and you should not swallow it." - update_icon() + update_appearance(updates = ALL) RegisterSignal(src, COMSIG_ITEM_MAGICALLY_CHARGED, PROC_REF(on_magic_charge)) var/static/list/loc_connections = list( @@ -77,7 +77,7 @@ . |= COMPONENT_ITEM_BURNT_OUT charge = maxcharge - update_icon() + update_appearance() // Guns need to process their chamber when we've been charged if(isgun(loc)) @@ -86,7 +86,7 @@ // The thing we're in might have overlays or icon states for whether the cell is charged if(!ismob(loc)) - loc.update_icon() + loc.update_appearance() return . @@ -96,7 +96,8 @@ else return PROCESS_KILL -/obj/item/stock_parts/cell/update_icon() +/obj/item/stock_parts/cell/update_appearance(updates = ALL) + . = ..() cut_overlays() if(grown_battery) add_overlay(image('icons/obj/power.dmi',"grown_wires")) @@ -220,7 +221,7 @@ /obj/item/stock_parts/cell/crap/empty/Initialize(mapload) . = ..() charge = 0 - update_icon() + update_appearance(updates = ALL) /obj/item/stock_parts/cell/upgraded name = "upgraded power cell" @@ -242,7 +243,7 @@ /obj/item/stock_parts/cell/secborg/empty/Initialize(mapload) . = ..() charge = 0 - update_icon() + update_appearance(updates = ALL) /obj/item/stock_parts/cell/mini_egun name = "miniature energy gun power cell" @@ -278,7 +279,7 @@ /obj/item/stock_parts/cell/high/empty/Initialize(mapload) . = ..() charge = 0 - update_icon() + update_appearance(updates = ALL) /obj/item/stock_parts/cell/super name = "super-capacity power cell" @@ -290,7 +291,7 @@ /obj/item/stock_parts/cell/super/empty/Initialize(mapload) . = ..() charge = 0 - update_icon() + update_appearance(updates = ALL) /obj/item/stock_parts/cell/hyper name = "hyper-capacity power cell" @@ -302,7 +303,7 @@ /obj/item/stock_parts/cell/hyper/empty/Initialize(mapload) . = ..() charge = 0 - update_icon() + update_appearance(updates = ALL) /obj/item/stock_parts/cell/bluespace name = "bluespace power cell" @@ -315,7 +316,7 @@ /obj/item/stock_parts/cell/bluespace/empty/Initialize(mapload) . = ..() charge = 0 - update_icon() + update_appearance(updates = ALL) /obj/item/stock_parts/cell/infinite name = "infinite-capacity power cell!" @@ -336,8 +337,9 @@ maxcharge = 50000 ratingdesc = FALSE -/obj/item/stock_parts/cell/infinite/abductor/update_icon() - return +/obj/item/stock_parts/cell/infinite/abductor/Initialize(mapload) + AddElement(/datum/element/update_icon_blocker) + return ..() /obj/item/stock_parts/cell/potato @@ -372,7 +374,7 @@ /obj/item/stock_parts/cell/emproof/empty/Initialize(mapload) . = ..() charge = 0 - update_icon() + update_appearance(updates = ALL) /obj/item/stock_parts/cell/emproof/corrupt() return diff --git a/code/modules/power/generator.dm b/code/modules/power/generator.dm index 6a61c3bbf381..f322e5b460b1 100644 --- a/code/modules/power/generator.dm +++ b/code/modules/power/generator.dm @@ -22,7 +22,7 @@ find_circs() connect_to_network() SSair.atmos_machinery += src - update_icon() + update_appearance(updates = ALL) component_parts = list(new /obj/item/circuitboard/machine/generator) AddComponent(/datum/component/simple_rotation,ROTATION_ALTCLICK | ROTATION_CLOCKWISE | ROTATION_COUNTERCLOCKWISE | ROTATION_VERBS ) @@ -31,7 +31,8 @@ SSair.atmos_machinery -= src return ..() -/obj/machinery/power/generator/update_icon() +/obj/machinery/power/generator/update_appearance(updates = ALL) + . = ..() cut_overlays() SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays) @@ -106,7 +107,7 @@ var/datum/gas_mixture/cold_circ_air1 = cold_circ.airs[1] cold_circ_air1.merge(cold_air) - update_icon() + update_appearance(updates = ALL) src.updateDialog() @@ -219,7 +220,7 @@ to_chat(user, span_notice("You start removing the circulators...")) if(I.use_tool(src, user, 30, volume=50)) kill_circs() - update_icon() + update_appearance(updates = ALL) to_chat(user, span_notice("You disconnect [src]'s circulator links.")) playsound(src, 'sound/misc/box_deploy.ogg', 50) return TRUE @@ -245,7 +246,7 @@ kill_circs() connect_to_network() to_chat(user, span_notice("You [anchored?"secure":"unsecure"] [src].")) - update_icon() + update_appearance(updates = ALL) return TRUE /obj/machinery/power/generator/screwdriver_act(mob/user, obj/item/I) @@ -260,7 +261,7 @@ panel_open = !panel_open I.play_tool_sound(src) to_chat(user, span_notice("You [panel_open?"open":"close"] the panel on [src].")) - update_icon() + update_appearance(updates = ALL) return TRUE /obj/machinery/power/generator/crowbar_act(mob/user, obj/item/I) @@ -283,11 +284,11 @@ /obj/machinery/power/generator/proc/kill_circs() if(hot_circ) hot_circ.generator = null - hot_circ.update_icon() + hot_circ.update_appearance(updates = ALL) hot_circ = null if(cold_circ) cold_circ.generator = null - cold_circ.update_icon() + cold_circ.update_appearance(updates = ALL) cold_circ = null /obj/machinery/power/generator/obj_break(damage_flag) diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm index 5e6593c35804..eff6ed564ede 100644 --- a/code/modules/power/gravitygenerator.dm +++ b/code/modules/power/gravitygenerator.dm @@ -43,8 +43,8 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne if(tesla_flags & TESLA_MACHINE_EXPLOSIVE) qdel(src)//like the singulo, tesla deletes it. stops it from exploding over and over -/obj/machinery/gravity_generator/update_icon() - ..() +/obj/machinery/gravity_generator/update_appearance(updates = ALL) + . = ..() icon_state = "[get_status()]_[sprite_number]" /obj/machinery/gravity_generator/proc/get_status() @@ -154,7 +154,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne part.sprite_number = count part.main_part = src parts += part - part.update_icon() + part.update_appearance(updates = ALL) /obj/machinery/gravity_generator/main/proc/connected_parts() return parts.len == 8 @@ -177,7 +177,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne if(M.stat & BROKEN) M.set_fix() broken_state = 0 - update_icon() + update_appearance(updates = ALL) set_power() // Interaction @@ -190,14 +190,14 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne to_chat(user, span_notice("You secure the screws of the framework.")) I.play_tool_sound(src) broken_state++ - update_icon() + update_appearance(updates = ALL) return if(GRAV_NEEDS_WELDING) if(I.tool_behaviour == TOOL_WELDER) if(I.use_tool(src, user, 0, volume=50, amount=1)) to_chat(user, span_notice("You mend the damaged framework.")) broken_state++ - update_icon() + update_appearance(updates = ALL) return if(GRAV_NEEDS_PLASTEEL) if(istype(I, /obj/item/stack/sheet/plasteel)) @@ -207,7 +207,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne to_chat(user, span_notice("You add the plating to the framework.")) playsound(src.loc, 'sound/machines/click.ogg', 75, 1) broken_state++ - update_icon() + update_appearance(updates = ALL) else to_chat(user, span_warning("You need 10 sheets of plasteel!")) return @@ -259,10 +259,10 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne return "fix[min(broken_state, 3)]" return on || charging_state != POWER_IDLE ? "on" : "off" -/obj/machinery/gravity_generator/main/update_icon() - ..() +/obj/machinery/gravity_generator/main/update_appearance(updates = ALL) + . = ..() for(var/obj/O in parts) - O.update_icon() + O.update_appearance(updates = ALL) // Set the charging state based on power/breaker. /obj/machinery/gravity_generator/main/proc/set_power() @@ -274,7 +274,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne charging_state = new_state ? POWER_UP : POWER_DOWN // Startup sequence animation. investigate_log("is now [charging_state == POWER_UP ? "charging" : "discharging"].", INVESTIGATE_GRAVITY) - update_icon() + update_appearance(updates = ALL) // Set the state of the gravity. /obj/machinery/gravity_generator/main/proc/set_state(new_state) @@ -295,7 +295,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne investigate_log("was brought offline and there is now no gravity for this level.", INVESTIGATE_GRAVITY) message_admins("The gravity generator was brought offline with no backup generator. [ADMIN_VERBOSEJMP(src)]") - update_icon() + update_appearance(updates = ALL) update_list() src.updateUsrDialog() if(alert) diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index f8ca79194b24..946185c240ed 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -87,7 +87,7 @@ if(cell) user.visible_message("[user] removes [cell] from [src]!",span_notice("You remove [cell].")) user.put_in_hands(cell) - cell.update_icon() + cell.update_appearance(updates = ALL) cell = null add_fingerprint(user) @@ -339,7 +339,8 @@ QDEL_NULL(cell) return ..() -/obj/machinery/light/update_icon() +/obj/machinery/light/update_appearance(updates = ALL) + . = ..() cut_overlays() switch(status) // set icon_states if(LIGHT_OK) @@ -413,7 +414,7 @@ else use_power = IDLE_POWER_USE set_light(0) - update_icon() + update_appearance(updates = ALL) active_power_usage = (brightness * 10) if(on != on_gs) @@ -542,7 +543,7 @@ set_light(0) forced_off = !forced_off on = !on - update_icon() + update_appearance(updates = ALL) update() else return ..() diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm index afe65f073e13..4529a18fbc11 100644 --- a/code/modules/power/port_gen.dm +++ b/code/modules/power/port_gen.dm @@ -45,15 +45,16 @@ /obj/machinery/power/port_gen/proc/TogglePower() if(active) active = FALSE - update_icon() + update_appearance(updates = ALL) soundloop.stop() else if(HasFuel()) active = TRUE START_PROCESSING(SSmachines, src) - update_icon() + update_appearance(updates = ALL) soundloop.start() -/obj/machinery/power/port_gen/update_icon() +/obj/machinery/power/port_gen/update_appearance(updates = ALL) + . = ..() icon_state = "[base_icon]_[active]" /obj/machinery/power/port_gen/process() diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm index b23d8adb3cec..b3a1cb559b6d 100644 --- a/code/modules/power/power.dm +++ b/code/modules/power/power.dm @@ -124,7 +124,7 @@ SEND_SIGNAL(src, COMSIG_MACHINERY_POWER_LOST) . = TRUE stat |= NOPOWER - update_icon() + update_appearance(updates = ALL) // connect the machine to a powernet if a node cable is present on the turf /obj/machinery/power/proc/connect_to_network() diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm index 7a8d8c5da898..6b3b959b4502 100644 --- a/code/modules/power/singularity/collector.dm +++ b/code/modules/power/singularity/collector.dm @@ -159,7 +159,7 @@ if(!user.transferItemToLoc(W, src)) return loaded_tank = W - update_icon() + update_appearance(updates = ALL) else if(W.GetID()) if(togglelock(user)) return TRUE @@ -294,14 +294,15 @@ if(active) toggle_power() else - update_icon() + update_appearance(updates = ALL) /obj/machinery/power/rad_collector/rad_act(pulse_strength, collectable_radiation) . = ..() if(loaded_tank && active && collectable_radiation && pulse_strength > RAD_COLLECTOR_EFFICIENCY) stored_power += (pulse_strength-RAD_COLLECTOR_EFFICIENCY)*RAD_COLLECTOR_COEFFICIENT*(machine_tier+power_bonus) -/obj/machinery/power/rad_collector/update_icon() +/obj/machinery/power/rad_collector/update_appearance(updates = ALL) + . = ..() cut_overlays() if(loaded_tank) add_overlay("ptank") @@ -327,7 +328,7 @@ else icon_state = "ca" flick("ca_deactive", src) - update_icon() + update_appearance(updates = ALL) /obj/machinery/power/rad_collector/bullet_act(obj/item/projectile/P) if(istype(P, /obj/item/projectile/energy/nuclear_particle)) diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index 78e4e045a113..aa80e9051e3f 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -120,7 +120,8 @@ QDEL_NULL(sparks) return ..() -/obj/machinery/power/emitter/update_icon() +/obj/machinery/power/emitter/update_appearance(updates = ALL) + . = ..() if(active && powernet) icon_state = avail(active_power_usage) ? icon_state_on : icon_state_underpowered else @@ -146,7 +147,7 @@ log_game("Emitter turned [active ? "ON" : "OFF"] by [key_name(user)] in [AREACOORD(src)]") investigate_log("turned [active ? "ON" : "OFF"] by [key_name(user)] at [AREACOORD(src)]", INVESTIGATE_SINGULO) investigate_log("turned [active ? "ON" : "OFF"] by [key_name(user)] at [AREACOORD(src)]", INVESTIGATE_SUPERMATTER) // yogs - so supermatter investigate is useful - update_icon() + update_appearance(updates = ALL) else to_chat(user, span_warning("The controls are locked!")) @@ -169,20 +170,20 @@ return if(state != EMITTER_WELDED || (!powernet && active_power_usage)) active = FALSE - update_icon() + update_appearance(updates = ALL) return if(active == TRUE) if(!active_power_usage || surplus() >= active_power_usage) add_load(active_power_usage) if(!powered) powered = TRUE - update_icon() + update_appearance(updates = ALL) investigate_log("regained power and turned ON at [AREACOORD(src)]", INVESTIGATE_SINGULO) investigate_log("regained power and turned ON at [AREACOORD(src)]", INVESTIGATE_SUPERMATTER) // yogs - so supermatter investigate is useful else if(powered) powered = FALSE - update_icon() + update_appearance(updates = ALL) investigate_log("lost power and turned OFF at [AREACOORD(src)]", INVESTIGATE_SINGULO) investigate_log("lost power and turned OFF at [AREACOORD(src)]", INVESTIGATE_SUPERMATTER) // yogs - so supermatter investigate is useful log_game("Emitter lost power in [AREACOORD(src)]") diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm index 45b2ddb3acca..fdb83a680963 100644 --- a/code/modules/power/singularity/field_generator.dm +++ b/code/modules/power/singularity/field_generator.dm @@ -44,7 +44,8 @@ field_generator power level display var/list/obj/machinery/field/generator/connected_gens var/clean_up = 0 -/obj/machinery/field/generator/update_icon() +/obj/machinery/field/generator/update_appearance(updates = ALL) + . = ..() cut_overlays() if(warming_up) add_overlay("+a[warming_up]") @@ -170,7 +171,7 @@ field_generator power level display var/new_level = round(num_power_levels * power / field_generator_max_power) if(new_level != power_level) power_level = new_level - update_icon() + update_appearance(updates = ALL) /obj/machinery/field/generator/proc/turn_off() active = FG_OFFLINE @@ -179,7 +180,7 @@ field_generator power level display while (warming_up>0 && !active) sleep(5 SECONDS) warming_up-- - update_icon() + update_appearance(updates = ALL) /obj/machinery/field/generator/proc/turn_on() active = FG_CHARGING @@ -187,7 +188,7 @@ field_generator power level display while (warming_up<3 && active) sleep(5 SECONDS) warming_up++ - update_icon() + update_appearance(updates = ALL) if(warming_up >= 3) start_fields() @@ -303,7 +304,7 @@ field_generator power level display connected_gens |= G G.connected_gens |= src - update_icon() + update_appearance(updates = ALL) /obj/machinery/field/generator/proc/cleanup() @@ -318,7 +319,7 @@ field_generator power level display FG.cleanup() connected_gens -= FG clean_up = 0 - update_icon() + update_appearance(updates = ALL) //This is here to help fight the "hurr durr, release singulo cos nobody will notice before the //singulo eats the evidence". It's not fool-proof but better than nothing. diff --git a/code/modules/power/singularity/generator.dm b/code/modules/power/singularity/generator.dm index f451e9b3128b..637fb8e052b8 100644 --- a/code/modules/power/singularity/generator.dm +++ b/code/modules/power/singularity/generator.dm @@ -22,7 +22,9 @@ default_unfasten_wrench(user, W, 0) else return ..() -/obj/machinery/the_singularitygen/update_icon(power) + +/obj/machinery/the_singularitygen/update_appearance(updates = ALL, power) + . = ..() if(power) if(power>150) animate(src, icon_state = "[initial(icon_state)]_3", 10) @@ -43,4 +45,4 @@ qdel(src) else energy -= delta_time * 0.5 - update_icon(energy) + update_appearance(UPDATE_ICON, energy) diff --git a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm index 6bc4f7dc0d8c..f14b47742b75 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm @@ -106,7 +106,7 @@ construction_state = PA_CONSTRUCTION_PANEL_OPEN update_state() - update_icon() + update_appearance(updates = ALL) /obj/structure/particle_accelerator/deconstruct(disassembled = TRUE) @@ -121,7 +121,8 @@ investigate_log("was moved whilst active; it powered down.", INVESTIGATE_SINGULO) -/obj/structure/particle_accelerator/update_icon() +/obj/structure/particle_accelerator/update_appearance(updates = ALL) + . = ..() switch(construction_state) if(PA_CONSTRUCTION_UNSECURED,PA_CONSTRUCTION_UNWIRED) icon_state="[reference]" diff --git a/code/modules/power/singularity/particle_accelerator/particle_control.dm b/code/modules/power/singularity/particle_accelerator/particle_control.dm index a6bc79e0402d..44fdab118abd 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_control.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_control.dm @@ -54,7 +54,7 @@ var/obj/structure/particle_accelerator/part = CP part.strength = null part.powered = FALSE - part.update_icon() + part.update_appearance(updates = ALL) connected_parts.Cut() return if(!part_scan()) @@ -62,7 +62,8 @@ active = FALSE connected_parts.Cut() -/obj/machinery/particle_accelerator/control_box/update_icon() +/obj/machinery/particle_accelerator/control_box/update_appearance(updates = ALL) + . = ..() if(active) icon_state = "control_boxp[strength]" //yogs- fix sprite not updating (note that /tg/ PA power 2 sprite is incomplete) else @@ -84,7 +85,7 @@ for(var/CP in connected_parts) var/obj/structure/particle_accelerator/part = CP part.strength = strength - part.update_icon() + part.update_appearance(updates = ALL) /obj/machinery/particle_accelerator/control_box/proc/add_strength(s) if(assembled && (strength < strength_upper_limit)) @@ -120,12 +121,12 @@ if(connected_parts.len < 6) investigate_log("lost a connected part; It powered down.", INVESTIGATE_SINGULO) toggle_power() - update_icon() + update_appearance(updates = ALL) return if(area_restricted && !istype(get_area(src),/area/engine)) investigate_log("had its area restriction turned on while in an invalid area; It powered down.", INVESTIGATE_SINGULO) toggle_power() - update_icon() + update_appearance(updates = ALL) return //emit some particles for(var/obj/structure/particle_accelerator/particle_emitter/PE in connected_parts) @@ -198,14 +199,14 @@ var/obj/structure/particle_accelerator/part = CP part.strength = strength part.powered = TRUE - part.update_icon() + part.update_appearance(updates = ALL) else use_power = IDLE_POWER_USE for(var/CP in connected_parts) var/obj/structure/particle_accelerator/part = CP part.strength = null part.powered = FALSE - part.update_icon() + part.update_appearance(updates = ALL) return TRUE @@ -269,7 +270,7 @@ if(did_something) user.changeNext_move(CLICK_CD_MELEE) update_state() - update_icon() + update_appearance(updates = ALL) return ..() @@ -365,7 +366,7 @@ to_chat(operator, "You [locked ? "enable" : "disable"] the area restriction."); . = TRUE - update_icon() + update_appearance(updates = ALL) /obj/machinery/particle_accelerator/control_box/charlie //for charlie station locked = FALSE diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index 19d5552a8a4c..12eb8bceec42 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -61,7 +61,7 @@ obj_break() return terminal.master = src - update_icon() + update_appearance(updates = ALL) /obj/machinery/power/smes/RefreshParts() var/IO = 0 @@ -81,7 +81,7 @@ /obj/machinery/power/smes/attackby(obj/item/I, mob/user, params) //opening using screwdriver if(default_deconstruction_screwdriver(user, "[initial(icon_state)]-o", initial(icon_state), I)) - update_icon() + update_appearance(updates = ALL) return //changing direction using wrench @@ -98,7 +98,7 @@ to_chat(user, span_alert("No power terminal found.")) return stat &= ~BROKEN - update_icon() + update_appearance(updates = ALL) return //building and linking a terminal @@ -205,7 +205,8 @@ obj_break() -/obj/machinery/power/smes/update_icon() +/obj/machinery/power/smes/update_appearance(updates = ALL) + . = ..() cut_overlays() if(stat & BROKEN) return @@ -286,7 +287,7 @@ // only update icon if state changed if(last_disp != chargedisplay() || last_chrg != inputting || last_onln != outputting) - update_icon() + update_appearance(updates = ALL) @@ -316,7 +317,7 @@ output_used -= excess if(clev != chargedisplay() ) //if needed updates the icons overlay - update_icon() + update_appearance(updates = ALL) return @@ -353,12 +354,12 @@ if("tryinput") input_attempt = !input_attempt log_smes(usr) - update_icon() + update_appearance(updates = ALL) . = TRUE if("tryoutput") output_attempt = !output_attempt log_smes(usr) - update_icon() + update_appearance(updates = ALL) . = TRUE if("input") var/target = params["target"] @@ -420,7 +421,7 @@ output_level = rand(0, output_level_max) input_level = rand(0, input_level_max) charge = max(charge - 1e6/severity, 0) - update_icon() + update_appearance(updates = ALL) log_smes() /obj/machinery/power/smes/engineering @@ -446,7 +447,7 @@ return output_attempt = !output_attempt log_smes(user) - update_icon() + update_appearance(updates = ALL) #undef SMES_OUTPUTTING #undef SMES_NOT_OUTPUTTING diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index bb9e9457076e..d9f678356683 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -34,7 +34,7 @@ panelstructure = mutable_appearance(icon, "solar_panel", FLY_LAYER) paneloverlay = mutable_appearance(icon, "solar_panel-o", FLY_LAYER) paneloverlay.color = panelcolor - update_icon() + update_appearance(updates = ALL) /obj/machinery/power/solar/Destroy() unset_control() //remove from control computer @@ -113,8 +113,8 @@ new /obj/item/shard(src.loc) qdel(src) -/obj/machinery/power/solar/update_icon() - ..() +/obj/machinery/power/solar/update_appearance(updates = ALL) + . = ..() cut_overlays() var/matrix/turner = matrix() turner.Turn(azimuth_current) @@ -134,7 +134,7 @@ if(azimuth_current != azimuth_target) azimuth_current = azimuth_target occlusion_setup() - update_icon() + update_appearance(updates = ALL) needs_to_update_solar_exposure = TRUE ///trace towards sun to see if we're in shadow @@ -349,7 +349,7 @@ if(connected_tracker && length(connected_panels)) track = SOLAR_TRACK_AUTO connected_tracker.sun_update(SSsun, SSsun.azimuth) - update_icon() + update_appearance(updates = ALL) /obj/machinery/power/solar_control/Destroy() for(var/obj/machinery/power/solar/M in connected_panels) @@ -372,7 +372,8 @@ if(!T.control) //i.e unconnected T.set_control(src) -/obj/machinery/power/solar_control/update_icon() +/obj/machinery/power/solar_control/update_appearance(updates = ALL) + . = ..() cut_overlays() if(stat & NOPOWER) add_overlay("[icon_keyboard]_off") diff --git a/code/modules/projectiles/ammunition/_ammunition.dm b/code/modules/projectiles/ammunition/_ammunition.dm index 5ae45fcc4890..dfb5891e82fc 100644 --- a/code/modules/projectiles/ammunition/_ammunition.dm +++ b/code/modules/projectiles/ammunition/_ammunition.dm @@ -33,10 +33,10 @@ pixel_x = rand(-10, 10) pixel_y = rand(-10, 10) setDir(pick(GLOB.alldirs)) - update_icon() + update_appearance(updates = ALL) -/obj/item/ammo_casing/update_icon() - ..() +/obj/item/ammo_casing/update_appearance(updates = ALL) + . = ..() icon_state = "[initial(icon_state)][BB && !CHECK_BITFIELD(casing_flags, CASINGFLAG_NO_LIVE_SPRITE) ? "-live" : ""]" desc = "[initial(desc)][!BB && !CHECK_BITFIELD(casing_flags, CASINGFLAG_NO_LIVE_SPRITE) ? " This one is spent." : ""]" @@ -59,7 +59,7 @@ else continue if (boolets > 0) - box.update_icon() + box.update_appearance(updates = ALL) to_chat(user, span_notice("You collect [boolets] shell\s. [box] now contains [box.stored_ammo.len] shell\s.")) else to_chat(user, span_warning("You fail to collect anything!")) @@ -72,7 +72,7 @@ . = ..() /obj/item/ammo_casing/proc/bounce_away(still_warm = FALSE, bounce_delay = 3) - update_icon() + update_appearance(updates = ALL) SpinAnimation(10, 1) var/matrix/M = matrix(transform) M.Turn(rand(-170,170)) diff --git a/code/modules/projectiles/ammunition/_firing.dm b/code/modules/projectiles/ammunition/_firing.dm index 846c96a80fb0..e5c3a04b72fb 100644 --- a/code/modules/projectiles/ammunition/_firing.dm +++ b/code/modules/projectiles/ammunition/_firing.dm @@ -19,7 +19,7 @@ else user.changeNext_move(CLICK_CD_RANGE) user.newtonian_move(get_dir(target, user)) - update_icon() + update_appearance(updates = ALL) return TRUE /obj/item/ammo_casing/proc/ready_proj(atom/target, mob/living/user, quiet, zone_override = "", atom/fired_from) diff --git a/code/modules/projectiles/ammunition/reusable/_reusable.dm b/code/modules/projectiles/ammunition/reusable/_reusable.dm index f34ed497f52a..8a2e9da72dd8 100644 --- a/code/modules/projectiles/ammunition/reusable/_reusable.dm +++ b/code/modules/projectiles/ammunition/reusable/_reusable.dm @@ -31,4 +31,4 @@ if(!BB) newshot() in_air = FALSE - update_icon() + update_appearance(updates = ALL) diff --git a/code/modules/projectiles/ammunition/reusable/arrow.dm b/code/modules/projectiles/ammunition/reusable/arrow.dm index 124516d06256..c20184471aeb 100644 --- a/code/modules/projectiles/ammunition/reusable/arrow.dm +++ b/code/modules/projectiles/ammunition/reusable/arrow.dm @@ -40,7 +40,7 @@ if(LAZYLEN(new_parts)) CheckParts(new_parts) -/obj/item/ammo_casing/reusable/arrow/update_icon(force_update) +/obj/item/ammo_casing/reusable/arrow/update_appearance(updates = ALL, force_update) ..() cut_overlays() if(istype(explosive)) @@ -76,7 +76,7 @@ if(iscarbon(user)) var/mob/living/carbon/C = user C.throw_mode_off() - update_icon() + update_appearance(updates = ALL) return ..() /obj/item/ammo_casing/reusable/arrow/wirecutter_act(mob/living/user, obj/item/I) @@ -131,23 +131,23 @@ if(istype(new_explosive)) explosive = new_explosive LAZYADD(attached_parts, new_explosive) - update_icon() + update_appearance(updates = ALL) /obj/item/ammo_casing/reusable/arrow/proc/add_bola(obj/item/restraints/legcuffs/bola/new_bola) if(istype(new_bola)) bola = new_bola LAZYADD(attached_parts, new_bola) - update_icon() + update_appearance(updates = ALL) /obj/item/ammo_casing/reusable/arrow/proc/add_syringe(obj/item/reagent_containers/syringe/new_syringe) if(istype(new_syringe)) syringe = new_syringe LAZYADD(attached_parts, new_syringe) - update_icon() + update_appearance(updates = ALL) /obj/item/ammo_casing/reusable/arrow/proc/add_flame() flaming = TRUE - update_icon() + update_appearance(updates = ALL) /obj/item/ammo_casing/reusable/arrow/proc/on_embed(target, mob/living/carbon/embedde) if(syringe) @@ -439,10 +439,10 @@ // Otherwise, move it to the arrow and make it the new shard new_shard.forceMove(src) shard = new_shard - update_icon() + update_appearance(updates = ALL) ..() -/obj/item/ammo_casing/reusable/arrow/singulo/update_icon(force_update) +/obj/item/ammo_casing/reusable/arrow/singulo/update_appearance(updates = ALL,force_update) ..() if(istype(shard)) add_overlay(mutable_appearance(icon, "[icon_state]_[shard.icon_state]"), TRUE) diff --git a/code/modules/projectiles/ammunition/reusable/foam.dm b/code/modules/projectiles/ammunition/reusable/foam.dm index 90ebfb71bdf5..6aa656a4de31 100644 --- a/code/modules/projectiles/ammunition/reusable/foam.dm +++ b/code/modules/projectiles/ammunition/reusable/foam.dm @@ -10,8 +10,8 @@ var/modified = FALSE var/obj/item/pen/pen -/obj/item/ammo_casing/reusable/foam_dart/update_icon() - ..() +/obj/item/ammo_casing/reusable/foam_dart/update_appearance(updates = ALL) + . = ..() if (modified) icon_state = "foamdart_empty" else @@ -26,7 +26,7 @@ if (A.tool_behaviour == TOOL_SCREWDRIVER && !modified) modified = TRUE to_chat(user, span_notice("You pop the safety cap off [src].")) - update_icon() + update_appearance(updates = ALL) else if (istype(A, /obj/item/pen)) if(modified) if(!pen) diff --git a/code/modules/projectiles/attachments/_attachment.dm b/code/modules/projectiles/attachments/_attachment.dm index a7b59c5a9f93..38d6743c5388 100644 --- a/code/modules/projectiles/attachments/_attachment.dm +++ b/code/modules/projectiles/attachments/_attachment.dm @@ -35,7 +35,8 @@ /// See code/modules/projectiles/attachments/laser_sight.dm for example. var/list/actions_list = list() -/obj/item/attachment/update_icon() +/obj/item/attachment/update_appearance(updates = ALL) + . = ..() icon_state = "[initial(icon_state)][is_on ? "_on" : ""]" . = ..() attached_gun?.update_attachments() diff --git a/code/modules/projectiles/attachments/laser_sight.dm b/code/modules/projectiles/attachments/laser_sight.dm index 23569ceadf88..df86cab5f7b9 100644 --- a/code/modules/projectiles/attachments/laser_sight.dm +++ b/code/modules/projectiles/attachments/laser_sight.dm @@ -48,7 +48,7 @@ else attached_gun.spread += 6 QDEL_LIST(attached_gun.current_tracers) - update_icon() + update_appearance(updates = ALL) /obj/item/attachment/laser_sight/process() return aiming_beam(TRUE) diff --git a/code/modules/projectiles/attachments/scopes.dm b/code/modules/projectiles/attachments/scopes.dm index 4a340175c638..d9aff9a03111 100644 --- a/code/modules/projectiles/attachments/scopes.dm +++ b/code/modules/projectiles/attachments/scopes.dm @@ -47,7 +47,7 @@ else attached_gun.spread += accuracy drop_user(current_user) - update_icon() + update_appearance(updates = ALL) /obj/item/attachment/scope/infrared/pickup_user(mob/user) . = ..() diff --git a/code/modules/projectiles/boxes_magazines/_box_magazine.dm b/code/modules/projectiles/boxes_magazines/_box_magazine.dm index b68ca45f49ab..7366de34d678 100644 --- a/code/modules/projectiles/boxes_magazines/_box_magazine.dm +++ b/code/modules/projectiles/boxes_magazines/_box_magazine.dm @@ -39,7 +39,7 @@ calc_mats() if(!start_empty) top_off(starting=TRUE) - update_icon() + update_appearance(updates = ALL) /** * top_off is used to refill the magazine to max, in case you want to increase the size of a magazine with VV then refill it at once @@ -59,7 +59,7 @@ for(var/i = max(1, stored_ammo.len), i <= max_ammo, i++) stored_ammo += new round_check(src) - update_icon() + update_appearance(updates = ALL) /obj/item/ammo_box/proc/calc_mats(force = FALSE) if (force || !bullet_cost) @@ -138,8 +138,8 @@ if(!silent) to_chat(user, span_notice("You load [num_loaded] round\s into \the [src]!")) playsound(src, 'sound/weapons/bulletinsert.ogg', 60, TRUE) - A.update_icon() - update_icon() + A.update_appearance(updates = ALL) + update_appearance(updates = ALL) return num_loaded /obj/item/ammo_box/attack_self(mob/user) @@ -150,7 +150,7 @@ A.bounce_away(FALSE, NONE) playsound(src, 'sound/weapons/bulletinsert.ogg', 60, TRUE) to_chat(user, span_notice("You remove a round from [src]!")) - update_icon() + update_appearance(updates = ALL) /obj/item/ammo_box/AltClick(mob/user) . = ..() @@ -167,9 +167,10 @@ A.bounce_away(FALSE, NONE) playsound(src, 'sound/weapons/bulletinsert.ogg', 60, TRUE) to_chat(user, span_notice("You remove a round from [src]!")) - update_icon() + update_appearance(updates = ALL) -/obj/item/ammo_box/update_icon() +/obj/item/ammo_box/update_appearance(updates = ALL) + . = ..() var/rounds_left = stored_ammo.len switch(multiple_sprites) if(AMMO_BOX_PER_BULLET) @@ -206,4 +207,4 @@ /obj/item/ammo_box/magazine/handle_atom_del(atom/A) stored_ammo -= A - update_icon() + update_appearance(updates = ALL) diff --git a/code/modules/projectiles/boxes_magazines/external/grenade.dm b/code/modules/projectiles/boxes_magazines/external/grenade.dm index 690c880c15a1..3488ed3b1228 100644 --- a/code/modules/projectiles/boxes_magazines/external/grenade.dm +++ b/code/modules/projectiles/boxes_magazines/external/grenade.dm @@ -5,8 +5,8 @@ caliber = "75" max_ammo = 8 -/obj/item/ammo_box/magazine/m75/update_icon() - ..() +/obj/item/ammo_box/magazine/m75/update_appearance(updates = ALL) + . = ..() if(ammo_count()) icon_state = "75-8" else diff --git a/code/modules/projectiles/boxes_magazines/external/lmg.dm b/code/modules/projectiles/boxes_magazines/external/lmg.dm index 8132339a8e3d..da029f992be0 100644 --- a/code/modules/projectiles/boxes_magazines/external/lmg.dm +++ b/code/modules/projectiles/boxes_magazines/external/lmg.dm @@ -32,6 +32,6 @@ ammo_type = /obj/item/ammo_casing/mm712x82/inc sprite_designation = "I" -/obj/item/ammo_box/magazine/mm712x82/update_icon() - ..() +/obj/item/ammo_box/magazine/mm712x82/update_appearance(updates = ALL) + . = ..() icon_state = "a762[sprite_designation]-[round(ammo_count(),10)]" diff --git a/code/modules/projectiles/boxes_magazines/external/pistol.dm b/code/modules/projectiles/boxes_magazines/external/pistol.dm index 951b1411d8ef..e698594b5525 100644 --- a/code/modules/projectiles/boxes_magazines/external/pistol.dm +++ b/code/modules/projectiles/boxes_magazines/external/pistol.dm @@ -64,8 +64,8 @@ caliber = ".45" max_ammo = 8 -/obj/item/ammo_box/magazine/m45/update_icon() - ..() +/obj/item/ammo_box/magazine/m45/update_appearance(updates = ALL) + . = ..() if (ammo_count() >= 8) icon_state = "45-8" else @@ -81,8 +81,8 @@ caliber = "9mm" max_ammo = 15 -/obj/item/ammo_box/magazine/pistolm9mm/update_icon() - ..() +/obj/item/ammo_box/magazine/pistolm9mm/update_appearance(updates = ALL) + . = ..() icon_state = "9x19p-[ammo_count() ? "10" : "0"]" //Desert Eagle @@ -95,7 +95,7 @@ caliber = ".50ae" max_ammo = 7 -/obj/item/ammo_box/magazine/m50/update_icon() +/obj/item/ammo_box/magazine/m50/update_appearance(updates = ALL) . = ..() if (ammo_count() >= 7) icon_state = "50ae-7" @@ -112,8 +112,8 @@ caliber = "38" max_ammo = 8 -/obj/item/ammo_box/magazine/v38/update_icon() - ..() +/obj/item/ammo_box/magazine/v38/update_appearance(updates = ALL) + . = ..() if (ammo_count() >= 8) icon_state = "v38[sprite_designation]-8" else diff --git a/code/modules/projectiles/boxes_magazines/external/rechargable.dm b/code/modules/projectiles/boxes_magazines/external/rechargable.dm index e98aff2bbc60..810b02435a2e 100644 --- a/code/modules/projectiles/boxes_magazines/external/rechargable.dm +++ b/code/modules/projectiles/boxes_magazines/external/rechargable.dm @@ -8,8 +8,8 @@ caliber = LASER max_ammo = 20 -/obj/item/ammo_box/magazine/recharge/update_icon() - ..() +/obj/item/ammo_box/magazine/recharge/update_appearance(updates = ALL) + . = ..() desc = "[initial(desc)] It has [stored_ammo.len] shot\s left." cut_overlays() var/cur_ammo = ammo_count() @@ -29,8 +29,8 @@ icon_state = "lasgunmag" desc = "A rechargeable, detachable battery that serves as a magazine for las weaponry." -/obj/item/ammo_box/magazine/recharge/lasgun/update_icon() - ..() +/obj/item/ammo_box/magazine/recharge/lasgun/update_appearance(updates = ALL) + . = ..() desc = "[initial(desc)] It has [stored_ammo.len] shot\s left." if(ammo_count()) icon_state = "[initial(icon_state)]" @@ -74,7 +74,8 @@ "fire" = 2 ) -/obj/item/gun/ballistic/automatic/pistol/ntusp/update_icon() +/obj/item/gun/ballistic/automatic/pistol/ntusp/update_appearance(updates = ALL) + . = ..() icon_state = initial(icon_state) if(istype(magazine, /obj/item/ammo_box/magazine/recharge/ntusp/laser)) // Tricks the parent proc into thinking we have a skin so it uses the laser-variant icon_state @@ -104,7 +105,7 @@ var/bullets_to_remove = round(bullet_count / (severity*2)) for(var/i = 0; i < bullets_to_remove, i++) qdel(get_round()) - update_icon() + update_appearance(updates = ALL) if(isgun(loc)) var/obj/item/gun/ballistic/G = loc if(!G.magazine == src) @@ -135,8 +136,8 @@ icon_state = "powerpack_small-l" max_ammo = 8 -/obj/item/ammo_box/magazine/recharge/ntusp/laser/update_icon() - ..() +/obj/item/ammo_box/magazine/recharge/ntusp/laser/update_appearance(updates = ALL) + . = ..() cut_overlays() var/cur_ammo = ammo_count() if(cur_ammo) diff --git a/code/modules/projectiles/boxes_magazines/external/rifle.dm b/code/modules/projectiles/boxes_magazines/external/rifle.dm index f33ba8a15753..13cc090a55ba 100644 --- a/code/modules/projectiles/boxes_magazines/external/rifle.dm +++ b/code/modules/projectiles/boxes_magazines/external/rifle.dm @@ -8,8 +8,8 @@ caliber = ".45" max_ammo = 10 -/obj/item/ammo_box/magazine/m10mm/rifle/update_icon() - ..() +/obj/item/ammo_box/magazine/m10mm/rifle/update_appearance(updates = ALL) + . = ..() if(ammo_count()) icon_state = "75-8" else @@ -25,8 +25,8 @@ caliber = "a556" max_ammo = 30 -/obj/item/ammo_box/magazine/m556/update_icon() - ..() +/obj/item/ammo_box/magazine/m556/update_appearance(updates = ALL) + . = ..() icon_state = "5.56m[sprite_designation]-[round(ammo_count(),5)]" /obj/item/ammo_box/magazine/m556/ap @@ -55,8 +55,8 @@ caliber = "a556" max_ammo = 30 -/obj/item/ammo_box/magazine/r556/update_icon() - ..() +/obj/item/ammo_box/magazine/r556/update_appearance(updates = ALL) + . = ..() if(ammo_count()) icon_state = "arg556[sprite_designation]" else @@ -96,8 +96,8 @@ caliber = "m308" max_ammo = 15 -/obj/item/ammo_box/magazine/m308/update_icon() - ..() +/obj/item/ammo_box/magazine/m308/update_appearance(updates = ALL) + . = ..() if(ammo_count()) icon_state = "m308[sprite_designation]" else @@ -130,8 +130,8 @@ caliber = "a762" max_ammo = 11 -/obj/item/ammo_box/magazine/ks762/update_icon() - ..() +/obj/item/ammo_box/magazine/ks762/update_appearance(updates = ALL) + . = ..() if(ammo_count()) icon_state = "ks762[sprite_designation]" else diff --git a/code/modules/projectiles/boxes_magazines/external/shotgun.dm b/code/modules/projectiles/boxes_magazines/external/shotgun.dm index 46eaf75985f4..3eef509e94cc 100644 --- a/code/modules/projectiles/boxes_magazines/external/shotgun.dm +++ b/code/modules/projectiles/boxes_magazines/external/shotgun.dm @@ -10,8 +10,8 @@ max_ammo = 8 sprite_designation = "b" -/obj/item/ammo_box/magazine/m12g/update_icon() - ..() +/obj/item/ammo_box/magazine/m12g/update_appearance(updates = ALL) + . = ..() if(ammo_count()) icon_state = "m12g[sprite_designation]-8" else diff --git a/code/modules/projectiles/boxes_magazines/external/smg.dm b/code/modules/projectiles/boxes_magazines/external/smg.dm index c05c7332e51a..e6231a9b8cb0 100644 --- a/code/modules/projectiles/boxes_magazines/external/smg.dm +++ b/code/modules/projectiles/boxes_magazines/external/smg.dm @@ -8,8 +8,8 @@ caliber = "4.6x30mm" max_ammo = 20 -/obj/item/ammo_box/magazine/wt550m9/update_icon() - ..() +/obj/item/ammo_box/magazine/wt550m9/update_appearance(updates = ALL) + . = ..() switch(ammo_count()) if(17 to 21) //Considers the extra bullet in the chamber icon_state = "46x30mmt[sprite_designation]-20" @@ -75,7 +75,8 @@ sprite_designation = "B" max_ammo = 10 -/obj/item/ammo_box/magazine/wt550m9/wt_airburst/update_icon() // Snowflake code snowflake code +/obj/item/ammo_box/magazine/wt550m9/wt_airburst/update_appearance(updates = ALL) + . = ..() // Snowflake code snowflake code ..() switch(ammo_count()) if(9 to 11) //Considers the extra bullet in the chamber @@ -101,8 +102,8 @@ caliber = "9mm" max_ammo = 32 -/obj/item/ammo_box/magazine/uzim9mm/update_icon() - ..() +/obj/item/ammo_box/magazine/uzim9mm/update_appearance(updates = ALL) + . = ..() icon_state = "uzi9mm-[round(ammo_count(),4)]" //NT Saber SMG @@ -115,8 +116,8 @@ caliber = "9mm" max_ammo = 21 -/obj/item/ammo_box/magazine/smgm9mm/update_icon() - ..() +/obj/item/ammo_box/magazine/smgm9mm/update_appearance(updates = ALL) + . = ..() icon_state = "smg9mm[sprite_designation]-[ammo_count() ? "42" : "0"]" /obj/item/ammo_box/magazine/smgm9mm/ap @@ -145,8 +146,8 @@ caliber = ".45" max_ammo = 24 -/obj/item/ammo_box/magazine/smgm45/update_icon() - ..() +/obj/item/ammo_box/magazine/smgm45/update_appearance(updates = ALL) + . = ..() icon_state = "c20r45[sprite_designation]-[round(ammo_count(),2)]" /obj/item/ammo_box/magazine/smgm45/ap diff --git a/code/modules/projectiles/boxes_magazines/external/sniper.dm b/code/modules/projectiles/boxes_magazines/external/sniper.dm index 6da8640160d9..6ebdb7c66402 100644 --- a/code/modules/projectiles/boxes_magazines/external/sniper.dm +++ b/code/modules/projectiles/boxes_magazines/external/sniper.dm @@ -9,8 +9,8 @@ max_ammo = 6 caliber = ".50bmg" -/obj/item/ammo_box/magazine/sniper_rounds/update_icon() - ..() +/obj/item/ammo_box/magazine/sniper_rounds/update_appearance(updates = ALL) + . = ..() if(ammo_count()) icon_state = "[initial(icon_state)]-ammo" else diff --git a/code/modules/projectiles/boxes_magazines/external/toy.dm b/code/modules/projectiles/boxes_magazines/external/toy.dm index 82c97ea054ff..fdf850d9e34a 100644 --- a/code/modules/projectiles/boxes_magazines/external/toy.dm +++ b/code/modules/projectiles/boxes_magazines/external/toy.dm @@ -9,8 +9,8 @@ ammo_type = /obj/item/ammo_casing/reusable/foam_dart max_ammo = 20 -/obj/item/ammo_box/magazine/toy/smg/update_icon() - ..() +/obj/item/ammo_box/magazine/toy/smg/update_appearance(updates = ALL) + . = ..() if(ammo_count()) icon_state = "smg9mm-42" else @@ -35,8 +35,8 @@ ammo_type = /obj/item/ammo_casing/reusable/foam_dart max_ammo = 20 -/obj/item/ammo_box/magazine/toy/smgm45/update_icon() - ..() +/obj/item/ammo_box/magazine/toy/smgm45/update_appearance(updates = ALL) + . = ..() icon_state = "c20r45-[round(ammo_count(),2)]" /obj/item/ammo_box/magazine/toy/smgm45/riot @@ -50,8 +50,8 @@ ammo_type = /obj/item/ammo_casing/reusable/foam_dart max_ammo = 50 -/obj/item/ammo_box/magazine/toy/m762/update_icon() - ..() +/obj/item/ammo_box/magazine/toy/m762/update_appearance(updates = ALL) + . = ..() icon_state = "a762-[round(ammo_count(),10)]" /obj/item/ammo_box/magazine/toy/m762/riot diff --git a/code/modules/projectiles/boxes_magazines/internal/_cylinder.dm b/code/modules/projectiles/boxes_magazines/internal/_cylinder.dm index a1d16826ccfe..d276f25636b7 100644 --- a/code/modules/projectiles/boxes_magazines/internal/_cylinder.dm +++ b/code/modules/projectiles/boxes_magazines/internal/_cylinder.dm @@ -58,4 +58,4 @@ for(var/i = 1, i <= max_ammo, i++) if(!give_round(new load_type(src))) break - update_icon() \ No newline at end of file + update_appearance(updates = ALL) diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index d6128dfa15bf..c47b62ff1571 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -121,7 +121,7 @@ pin = null if(A == chambered) chambered = null - update_icon() + update_appearance(updates = ALL) if(A == bayonet) clear_bayonet() if(A == gun_light) @@ -206,7 +206,7 @@ w_class -= suppressed.w_class qdel(suppressed) suppressed = null - update_icon() + update_appearance(updates = ALL) else if(enloudened && enloudened.enloudened_sound) playsound(user, enloudened.enloudened_sound, fire_sound_volume, vary_fire_sound) @@ -355,7 +355,7 @@ firing_burst = FALSE return FALSE process_chamber() - update_icon() + update_appearance(updates = ALL) return TRUE /// cd_override is FALSE or 0 by default (no override), if you want to make a gun have no click cooldown then just make it something small like 0.001 @@ -409,18 +409,18 @@ shoot_with_empty_chamber(user) return process_chamber() - update_icon() + update_appearance(updates = ALL) semicd = TRUE addtimer(CALLBACK(src, PROC_REF(reset_semicd)), fire_delay) if(user) - user.update_inv_hands() + user.update_held_items() SSblackbox.record_feedback("tally", "gun_fired", 1, type) recent_shoot = world.time return TRUE -/obj/item/gun/update_icon() - ..() +/obj/item/gun/update_appearance(updates = ALL) + . = ..() /obj/item/gun/proc/reset_semicd() @@ -629,7 +629,7 @@ else cut_overlay(flashlight_overlay, TRUE) flashlight_overlay = null - update_icon() + update_appearance(updates = ALL) for(var/X in actions) var/datum/action/A = X A.build_all_button_icons() @@ -647,7 +647,7 @@ attachment_overlays += M att_position += 1 - update_icon(TRUE) + update_appearance(UPDATE_ICON, TRUE) for(var/datum/action/A as anything in actions) A.build_all_button_icons() diff --git a/code/modules/projectiles/guns/ballistic.dm b/code/modules/projectiles/guns/ballistic.dm index 703e8dfe6a9d..bf57cfc9a886 100644 --- a/code/modules/projectiles/guns/ballistic.dm +++ b/code/modules/projectiles/guns/ballistic.dm @@ -156,7 +156,7 @@ feedback_fire_slide ? add_overlay(feedback_firing_icon) : add_overlay(feedback_original_icon) DabAnimation(speed = feedback_recoil_speed, angle = ((rand(25,50)) * feedback_recoil_amount), direction = (feedback_recoil_reverse ? 2 : 3), hold_seconds = feedback_recoil_hold) sleep(frames) - update_icon() + update_appearance(updates = ALL) return if (bolt_type == BOLT_TYPE_LOCKING) if(type != "slide*") @@ -165,7 +165,7 @@ DabAnimation(speed = feedback_recoil_speed, angle = ((rand(20,25)) * feedback_recoil_amount), direction = 2) add_overlay("[feedback_original_icon_base]_[type]") // actual animation sleep(frames) - update_icon() + update_appearance(updates = ALL) /obj/item/gun/ballistic/Initialize(mapload) . = ..() @@ -177,7 +177,7 @@ feedback_firing_icon = feedback_original_icon_base if (!spawnwithmagazine) bolt_locked = TRUE - update_icon() + update_appearance(updates = ALL) return if (!magazine) if (!starting_mag_type) @@ -185,10 +185,11 @@ else magazine = new starting_mag_type(src) chamber_round() - update_icon() + update_appearance(updates = ALL) -/obj/item/gun/ballistic/update_icon() +/obj/item/gun/ballistic/update_appearance(updates = ALL) + . = ..() if (QDELETED(src)) return ..() @@ -281,7 +282,7 @@ else playsound(src, rack_sound, rack_sound_volume, rack_sound_vary) feedback("slide_close") - update_icon() + update_appearance(updates = ALL) ///Drops the bolt from a locked position /obj/item/gun/ballistic/proc/drop_bolt(mob/user = null) @@ -291,7 +292,7 @@ bolt_locked = FALSE feedback("slide_close") chamber_round() - update_icon() + update_appearance(updates = ALL) ///Handles all the logic needed for magazine insertion /obj/item/gun/ballistic/proc/insert_magazine(mob/user, obj/item/ammo_box/magazine/AM, display_message = TRUE) @@ -308,7 +309,7 @@ feedback("mag_in") if (bolt_type == BOLT_TYPE_OPEN && !bolt_locked) chamber_round(TRUE) - update_icon() + update_appearance(updates = ALL) return TRUE else to_chat(user, span_warning("You cannot seem to get \the [src] out of your hands!")) @@ -340,10 +341,10 @@ else magazine = null user.put_in_hands(old_mag) - old_mag.update_icon() + old_mag.update_appearance(updates = ALL) if (display_message) to_chat(user, span_notice("You pull the [magazine_wording] out of \the [src].")) - update_icon() + update_appearance(updates = ALL) /obj/item/gun/ballistic/can_shoot() return chambered @@ -376,8 +377,8 @@ user.say(reload_say, forced = "reloading") if (chambered == null && bolt_type == BOLT_TYPE_NO_BOLT) chamber_round() - A.update_icon() - update_icon() + A.update_appearance(updates = ALL) + update_appearance(updates = ALL) return if(istype(A, /obj/item/suppressor)) var/obj/item/suppressor/S = A @@ -420,11 +421,11 @@ /obj/item/gun/ballistic/proc/install_suppressor(obj/item/suppressor/S) suppressed = S w_class += S.w_class //so pistols do not fit in pockets when suppressed - update_icon() + update_appearance(updates = ALL) /obj/item/gun/ballistic/proc/install_enloudener(obj/item/enloudener/E) enloudened = E - update_icon() + update_appearance(updates = ALL) /obj/item/gun/ballistic/AltClick(mob/user) if (unique_reskin && !current_skin && user.canUseTopic(src, BE_CLOSE, NO_DEXTERY)) @@ -438,7 +439,7 @@ user.put_in_hands(suppressed) w_class -= suppressed.w_class suppressed = null - update_icon() + update_appearance(updates = ALL) return if(enloudened && can_unsuppress) if(!user.is_holding(src)) @@ -447,7 +448,7 @@ user.put_in_hands(enloudened) w_class -= enloudened.w_class enloudened = null - update_icon() + update_appearance(updates = ALL) return ///Prefire empty checks for the bolt drop @@ -456,7 +457,7 @@ if (bolt_type == BOLT_TYPE_OPEN && !bolt_locked) bolt_locked = TRUE playsound(src, bolt_drop_sound, bolt_drop_sound_volume) - update_icon() + update_appearance(updates = ALL) ///postfire empty checks for bolt locking and sound alarms /obj/item/gun/ballistic/proc/postfire_empty_checks() @@ -464,12 +465,12 @@ if (!alarmed && empty_alarm) playsound(src, empty_alarm_sound, empty_alarm_volume, empty_alarm_vary) alarmed = TRUE - update_icon() + update_appearance(updates = ALL) if (bolt_type == BOLT_TYPE_LOCKING) if(!bolt_locked) feedback("slide_open") bolt_locked = TRUE - update_icon() + update_appearance(updates = ALL) /obj/item/gun/ballistic/afterattack() prefire_empty_checks() @@ -500,7 +501,7 @@ if (num_unloaded) to_chat(user, span_notice("You unload [num_unloaded] [cartridge_wording]\s from [src].")) playsound(user, eject_sound, eject_sound_volume, eject_sound_vary) - update_icon() + update_appearance(updates = ALL) else to_chat(user, span_warning("[src] is empty!")) return @@ -630,7 +631,7 @@ GLOBAL_LIST_INIT(gun_saw_types, typecacheof(list( slot_flags |= ITEM_SLOT_BELT //but you can wear it on your belt (poorly concealed under a trenchcoat, ideally) recoil = SAWN_OFF_RECOIL sawn_off = TRUE - update_icon() + update_appearance(updates = ALL) return TRUE ///used for sawing guns, causes the gun to fire without the input of the user diff --git a/code/modules/projectiles/guns/ballistic/automatic.dm b/code/modules/projectiles/guns/ballistic/automatic.dm index ec4fd862e563..2d4cc0390a79 100644 --- a/code/modules/projectiles/guns/ballistic/automatic.dm +++ b/code/modules/projectiles/guns/ballistic/automatic.dm @@ -27,8 +27,8 @@ /obj/item/gun/ballistic/automatic/proto/unrestricted pin = /obj/item/firing_pin -/obj/item/gun/ballistic/automatic/update_icon() - ..() +/obj/item/gun/ballistic/automatic/update_appearance(updates = ALL) + . = ..() if(!select) add_overlay("[initial(icon_state)]_semi") if(select == 1) @@ -56,7 +56,7 @@ to_chat(user, span_notice("You switch to [burst_size]-rnd burst.")) playsound(user, 'sound/weapons/empty.ogg', 100, 1) - update_icon() + update_appearance(updates = ALL) for(var/X in actions) var/datum/action/A = X A.build_all_button_icons() @@ -82,7 +82,7 @@ /obj/item/gun/ballistic/automatic/c20r/Initialize(mapload) . = ..() - update_icon() + update_appearance(updates = ALL) /obj/item/gun/ballistic/automatic/wt550 name = "\improper security auto carbine" @@ -133,7 +133,7 @@ /obj/item/gun/ballistic/automatic/m90/Initialize(mapload) . = ..() underbarrel = new /obj/item/gun/ballistic/revolver/grenadelauncher(src) - update_icon() + update_appearance(updates = ALL) /obj/item/gun/ballistic/automatic/m90/unrestricted pin = /obj/item/firing_pin @@ -141,7 +141,7 @@ /obj/item/gun/ballistic/automatic/m90/unrestricted/Initialize(mapload) . = ..() underbarrel = new /obj/item/gun/ballistic/revolver/grenadelauncher/unrestricted(src) - update_icon() + update_appearance(updates = ALL) /obj/item/gun/ballistic/automatic/m90/afterattack(atom/target, mob/living/user, flag, params) if(select == 2) @@ -157,8 +157,8 @@ else ..() -/obj/item/gun/ballistic/automatic/m90/update_icon() - ..() +/obj/item/gun/ballistic/automatic/m90/update_appearance(updates = ALL) + . = ..() switch(select) if(0) add_overlay("[initial(icon_state)]_semi") @@ -188,7 +188,7 @@ spread -= spread_difference to_chat(user, span_notice("You switch to semi-auto.")) playsound(user, 'sound/weapons/empty.ogg', 100, 1) - update_icon() + update_appearance(updates = ALL) return /obj/item/gun/ballistic/automatic/tommygun @@ -262,10 +262,10 @@ playsound(user, 'sound/weapons/sawopen.ogg', 60, 1) else playsound(user, 'sound/weapons/sawopen.ogg', 60, 1) - update_icon() + update_appearance(updates = ALL) -/obj/item/gun/ballistic/automatic/l6_saw/update_icon() +/obj/item/gun/ballistic/automatic/l6_saw/update_appearance(updates = ALL) . = ..() add_overlay("l6_door_[cover_open ? "open" : "closed"]") @@ -276,7 +276,7 @@ return else . = ..() - update_icon() + update_appearance(updates = ALL) //ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/gun/ballistic/automatic/l6_saw/attack_hand(mob/user) diff --git a/code/modules/projectiles/guns/ballistic/bow.dm b/code/modules/projectiles/guns/ballistic/bow.dm index 39598331ba6c..45eed69f4d4b 100644 --- a/code/modules/projectiles/guns/ballistic/bow.dm +++ b/code/modules/projectiles/guns/ballistic/bow.dm @@ -43,7 +43,7 @@ /obj/item/gun/ballistic/bow/chamber_round() chambered = magazine.get_round(1) update_slowdown() - update_icon() + update_appearance(updates = ALL) /obj/item/gun/ballistic/bow/dropped() . = ..() @@ -61,7 +61,7 @@ chambered = null magazine.give_round(old_chambered) update_slowdown() - update_icon() + update_appearance(updates = ALL) /obj/item/gun/ballistic/bow/equipped(mob/user, slot) ..() @@ -71,7 +71,7 @@ chambered = null magazine.get_round(FALSE) update_slowdown() - update_icon() + update_appearance(updates = ALL) /obj/item/gun/ballistic/bow/attack_self(mob/living/user) if(drawing) @@ -121,7 +121,7 @@ user.put_in_hands(AC) to_chat(user, span_notice("You remove [AC].")) update_slowdown() - update_icon() + update_appearance(updates = ALL) /obj/item/gun/ballistic/bow/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/ammo_casing)) @@ -131,9 +131,10 @@ to_chat(user, span_notice("You notch [I].")) nerfed = istype(I, /obj/item/ammo_casing/reusable/arrow/toy) update_slowdown() - update_icon() + update_appearance(updates = ALL) -/obj/item/gun/ballistic/bow/update_icon() +/obj/item/gun/ballistic/bow/update_appearance(updates = ALL) + . = ..() cut_overlay(arrow_overlay, TRUE) icon_state = "[initial(icon_state)][chambered ? "_firing" : ""]" if(get_ammo()) @@ -451,7 +452,8 @@ if(TIMER_COOLDOWN_CHECK(src, "arrow_recharge")) . += span_warning("It is currently recharging!") -/obj/item/gun/ballistic/bow/energy/update_icon() +/obj/item/gun/ballistic/bow/energy/update_appearance(updates = ALL) + . = ..() cut_overlay(arrow_overlay, TRUE) if(folded) @@ -469,7 +471,7 @@ if(ismob(loc)) var/mob/M = loc - M.update_inv_hands() + M.update_held_items() /obj/item/gun/ballistic/bow/energy/shoot_live_shot(mob/living/user, pointblank, atom/pbtarget, message) if(folded) @@ -492,7 +494,7 @@ to_chat(user, span_notice("You fabricate an arrow.")) recharge_arrow() update_slowdown() - update_icon() + update_appearance(updates = ALL) /obj/item/gun/ballistic/bow/energy/proc/recharge_arrow() if(folded || magazine.get_round(TRUE)) @@ -500,7 +502,7 @@ var/ammo_type = magazine.ammo_type magazine.give_round(new ammo_type()) update_slowdown() - update_icon() + update_appearance(updates = ALL) /obj/item/gun/ballistic/bow/energy/attackby(obj/item/I, mob/user, params) return @@ -512,7 +514,7 @@ QDEL_NULL(current_round) if(!TIMER_COOLDOWN_CHECK(src, "arrow_recharge")) recharge_arrow() - update_icon() + update_appearance(updates = ALL) /obj/item/gun/ballistic/bow/energy/proc/select_projectile(mob/living/user) var/obj/item/ammo_box/magazine/internal/bow/energy/M = magazine @@ -550,7 +552,7 @@ to_chat(user, span_notice("You switch \the [src]'s firing mode to \"[initial(choice.name)]\".")) QDEL_NULL(choice_list) QDEL_NULL(radial_list) - update_icon() + update_appearance(updates = ALL) /obj/item/gun/ballistic/bow/energy/CtrlClick(mob/living/user) if(!can_fold || !user.is_holding(src)) @@ -580,7 +582,7 @@ //magazine.stored_ammo = stored_ammo if(user) to_chat(user, span_notice("You extend [src], allowing it to be fired.")) - update_icon() + update_appearance(updates = ALL) /obj/item/gun/ballistic/bow/energy/advanced name = "advanced hardlight bow" diff --git a/code/modules/projectiles/guns/ballistic/laser_gatling.dm b/code/modules/projectiles/guns/ballistic/laser_gatling.dm index 9bca7518e0cc..ff4419eeca37 100644 --- a/code/modules/projectiles/guns/ballistic/laser_gatling.dm +++ b/code/modules/projectiles/guns/ballistic/laser_gatling.dm @@ -42,7 +42,7 @@ armed = 0 to_chat(user, span_warning("You need a free hand to hold the gun!")) return - update_icon() + update_appearance(updates = ALL) user.update_inv_back() else to_chat(user, span_warning("You are already holding the gun!")) @@ -81,7 +81,8 @@ M.putItemFromInventoryInHandIfPossible(src, H.held_index) -/obj/item/minigunpack/update_icon() +/obj/item/minigunpack/update_appearance(updates = ALL) + . = ..() if(armed) icon_state = "notholstered" else @@ -96,7 +97,7 @@ to_chat(user, span_notice("You attach the [gun.name] to the [name].")) else src.visible_message(span_warning("The [gun.name] snaps back onto the [name]!")) - update_icon() + update_appearance(updates = ALL) user.update_inv_back() diff --git a/code/modules/projectiles/guns/ballistic/minigun.dm b/code/modules/projectiles/guns/ballistic/minigun.dm index a7c5e9da5701..f0b4beb2becb 100644 --- a/code/modules/projectiles/guns/ballistic/minigun.dm +++ b/code/modules/projectiles/guns/ballistic/minigun.dm @@ -42,7 +42,7 @@ armed = FALSE to_chat(user, span_warning("You need a free hand to hold the gun!")) return - update_icon() + update_appearance(updates = ALL) user.update_inv_back() else to_chat(user, span_warning("You are already holding the gun!")) @@ -81,7 +81,8 @@ M.putItemFromInventoryInHandIfPossible(src, H.held_index) -/obj/item/minigunbackpack/update_icon() +/obj/item/minigunbackpack/update_appearance(updates = ALL) + . = ..() if(armed) icon_state = "notholstered" else @@ -96,7 +97,7 @@ to_chat(user, span_notice("You attach the [gun.name] to the [name].")) else visible_message(span_warning("The [gun.name] snaps back onto the [name]!")) - update_icon() + update_appearance(updates = ALL) user.update_inv_back() diff --git a/code/modules/projectiles/guns/ballistic/revolver.dm b/code/modules/projectiles/guns/ballistic/revolver.dm index 002f16d91691..b5c16a66652e 100644 --- a/code/modules/projectiles/guns/ballistic/revolver.dm +++ b/code/modules/projectiles/guns/ballistic/revolver.dm @@ -181,8 +181,8 @@ ..() if(get_ammo(FALSE) > 0) spin() - update_icon() - A.update_icon() + update_appearance(updates = ALL) + A.update_appearance(updates = ALL) return /obj/item/gun/ballistic/revolver/russian/attack_self(mob/user) diff --git a/code/modules/projectiles/guns/ballistic/rifle.dm b/code/modules/projectiles/guns/ballistic/rifle.dm index 356e9c069f4b..8ac34aaaa930 100644 --- a/code/modules/projectiles/guns/ballistic/rifle.dm +++ b/code/modules/projectiles/guns/ballistic/rifle.dm @@ -15,8 +15,8 @@ bolt_drop_sound = "sound/weapons/mosinboltin.ogg" tac_reloads = FALSE -obj/item/gun/ballistic/rifle/update_icon() - ..() +obj/item/gun/ballistic/rifle/update_appearance(updates = ALL) + . = ..() add_overlay("[icon_state]_bolt[bolt_locked ? "_locked" : ""]") obj/item/gun/ballistic/rifle/rack(mob/user = null) @@ -25,7 +25,7 @@ obj/item/gun/ballistic/rifle/rack(mob/user = null) playsound(src, rack_sound, rack_sound_volume, rack_sound_vary) process_chamber(FALSE, FALSE, FALSE) bolt_locked = TRUE - update_icon() + update_appearance(updates = ALL) return drop_bolt(user) diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm index e5626fb46520..41a0cf2f21bb 100644 --- a/code/modules/projectiles/guns/ballistic/shotgun.dm +++ b/code/modules/projectiles/guns/ballistic/shotgun.dm @@ -228,12 +228,12 @@ slot_flags = ITEM_SLOT_BACK to_chat(user, span_notice("You tie the lengths of cable to the shotgun, making a sling.")) slung = TRUE - update_icon() + update_appearance(updates = ALL) else to_chat(user, span_warning("You need at least ten lengths of cable if you want to make a sling!")) -/obj/item/gun/ballistic/shotgun/doublebarrel/improvised/update_icon() - ..() +/obj/item/gun/ballistic/shotgun/doublebarrel/improvised/update_appearance(updates = ALL) + . = ..() if(slung) icon_state = "ishotgunsling" @@ -243,7 +243,7 @@ if(. && slung) //sawing off the gun removes the sling new /obj/item/stack/cable_coil(get_turf(src), 10) slung = 0 - update_icon() + update_appearance(updates = ALL) /obj/item/gun/ballistic/shotgun/doublebarrel/improvised/sawn name = "sawn-off improvised shotgun" diff --git a/code/modules/projectiles/guns/ballistic/toy.dm b/code/modules/projectiles/guns/ballistic/toy.dm index c65adaa8a00f..5c387e683a95 100644 --- a/code/modules/projectiles/guns/ballistic/toy.dm +++ b/code/modules/projectiles/guns/ballistic/toy.dm @@ -13,7 +13,7 @@ item_flags = NONE casing_ejector = FALSE -/obj/item/gun/ballistic/automatic/toy/update_icon() +/obj/item/gun/ballistic/automatic/toy/update_appearance(updates = ALL) . = ..() add_overlay("[icon_state]_toy") @@ -56,7 +56,7 @@ casing_ejector = FALSE can_suppress = FALSE -/obj/item/gun/ballistic/shotgun/toy/update_icon() +/obj/item/gun/ballistic/shotgun/toy/update_appearance(updates = ALL) . = ..() add_overlay("[icon_state]_toy") @@ -90,7 +90,7 @@ /obj/item/gun/ballistic/automatic/c20r/toy/unrestricted/riot mag_type = /obj/item/ammo_box/magazine/toy/smgm45/riot -/obj/item/gun/ballistic/automatic/c20r/toy/update_icon() +/obj/item/gun/ballistic/automatic/c20r/toy/update_appearance(updates = ALL) . = ..() add_overlay("[icon_state]_toy") @@ -110,6 +110,6 @@ /obj/item/gun/ballistic/automatic/l6_saw/toy/unrestricted/riot mag_type = /obj/item/ammo_box/magazine/toy/m762/riot -/obj/item/gun/ballistic/automatic/l6_saw/toy/update_icon() +/obj/item/gun/ballistic/automatic/l6_saw/toy/update_appearance(updates = ALL) . = ..() add_overlay("[icon_state]_toy") diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index cf7810067b49..f02e3b0195e8 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -10,7 +10,7 @@ var/list/ammo_type = list(/obj/item/ammo_casing/energy) var/select = 1 //The state of the select fire switch. Determines from the ammo_type list what kind of shot is fired next. var/can_charge = TRUE //Can it be charged in a recharger? - var/automatic_charge_overlays = TRUE //Do we handle overlays with base update_icon()? + var/automatic_charge_overlays = TRUE //Do we handle overlays with base update_appearance(updates = ALL)? var/charge_sections = 4 ammo_x_offset = 2 var/shaded_charge = FALSE //if this gun uses a stateful charge bar for more detail @@ -45,7 +45,7 @@ emp_jam_timer = addtimer(CALLBACK(src, PROC_REF(emp_unjam)), unjam_time, TIMER_STOPPABLE) chambered = null //we empty the chamber recharge_newshot() //and try to charge a new shot - update_icon() + update_appearance(updates = ALL) /obj/item/gun/energy/shoot_with_empty_chamber(mob/living/user as mob|obj) if(emp_jammed) @@ -73,7 +73,7 @@ recharge_newshot(TRUE) if(selfcharge) START_PROCESSING(SSobj, src) - update_icon() + update_appearance(updates = ALL) /obj/item/gun/energy/proc/update_ammo_types() var/obj/item/ammo_casing/energy/shot @@ -100,12 +100,12 @@ cell.give(100*charge_amount) if(!chambered) //if empty chamber we try to charge a new shot recharge_newshot(TRUE) - update_icon() + update_appearance(updates = ALL) /obj/item/gun/energy/attack_self(mob/living/user as mob) if(ammo_type.len > 1) select_fire(user) - update_icon() + update_appearance(updates = ALL) /obj/item/gun/energy/can_shoot() var/obj/item/ammo_casing/energy/shot = ammo_type[select] @@ -156,10 +156,10 @@ to_chat(user, span_notice("[src] is now set to [shot.select_name].")) chambered = null recharge_newshot(TRUE) - update_icon(TRUE) + update_appearance(UPDATE_ICON, TRUE) return -/obj/item/gun/energy/update_icon(force_update) +/obj/item/gun/energy/update_appearance(updates = ALL, force_update) if(QDELETED(src)) return ..() @@ -204,7 +204,7 @@ playsound(loc, fire_sound, 50, 1, -1) var/obj/item/ammo_casing/energy/shot = ammo_type[select] cell.use(shot.e_cost) - update_icon() + update_appearance(updates = ALL) return(FIRELOSS) else user.visible_message(span_suicide("[user] panics and starts choking to death!")) diff --git a/code/modules/projectiles/guns/energy/dueling.dm b/code/modules/projectiles/guns/energy/dueling.dm index d7ede30bf273..d3454f3ebade 100644 --- a/code/modules/projectiles/guns/energy/dueling.dm +++ b/code/modules/projectiles/guns/energy/dueling.dm @@ -173,9 +173,9 @@ if(DUEL_SETTING_C) setting = DUEL_SETTING_A to_chat(user,span_notice("You switch [src] setting to [setting] mode.")) - update_icon() + update_appearance(updates = ALL) -/obj/item/gun/energy/dueling/update_icon(force_update) +/obj/item/gun/energy/dueling/update_appearance(updates = ALL, force_update) . = ..() if(setting_overlay) cut_overlay(setting_overlay) @@ -230,7 +230,7 @@ duration = 30 var/setting -/obj/effect/temp_visual/dueling_chaff/update_icon() +/obj/effect/temp_visual/dueling_chaff/update_appearance(updates = ALL) . = ..() switch(setting) if(DUEL_SETTING_A) @@ -251,13 +251,13 @@ . = ..() var/obj/item/projectile/energy/duel/D = BB D.setting = setting - D.update_icon() + D.update_appearance(updates = ALL) /obj/item/ammo_casing/energy/duel/fire_casing(atom/target, mob/living/user, params, distro, quiet, zone_override, spread, atom/fired_from) . = ..() var/obj/effect/temp_visual/dueling_chaff/C = new(get_turf(user)) C.setting = setting - C.update_icon() + C.update_appearance(updates = ALL) //Projectile @@ -268,7 +268,7 @@ homing = TRUE var/setting -/obj/item/projectile/energy/duel/update_icon() +/obj/item/projectile/energy/duel/update_appearance(updates = ALL) . = ..() switch(setting) if(DUEL_SETTING_A) @@ -323,7 +323,8 @@ STR.max_items = 2 STR.set_holdable(list(/obj/item/gun/energy/dueling)) -/obj/item/storage/lockbox/dueling/update_icon() +/obj/item/storage/lockbox/dueling/update_appearance(updates = ALL) + . = ..() cut_overlays() var/locked = SEND_SIGNAL(src, COMSIG_IS_STORAGE_LOCKED) if(locked) diff --git a/code/modules/projectiles/guns/energy/energy_gun.dm b/code/modules/projectiles/guns/energy/energy_gun.dm index f35aff17fee8..e130e67e277f 100644 --- a/code/modules/projectiles/guns/energy/energy_gun.dm +++ b/code/modules/projectiles/guns/energy/energy_gun.dm @@ -30,8 +30,8 @@ set_gun_light(new /obj/item/flashlight/seclite(src)) return ..() -/obj/item/gun/energy/e_gun/mini/update_icon() - ..() +/obj/item/gun/energy/e_gun/mini/update_appearance(updates = ALL) + . = ..() if(gun_light && gun_light.on) add_overlay("mini-light") @@ -163,7 +163,7 @@ I.use(1) cell.give(250*charge_multiplier) user.radiation += (75*charge_multiplier) //You are putting you hand into a nuclear reactor to put more uranium in it - update_icon(TRUE) + update_appearance(UPDATE_ICON, TRUE) else if(!(previous_loc == user.loc)) to_chat(user, span_boldwarning("You move, bumping your hand on [src]'s nulear reactor's core!")) //when I said devoid of ANY safety measures I meant it diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index 563a01fc4b3c..35a68a4397a6 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -108,7 +108,7 @@ /obj/item/gun/energy/kinetic_accelerator/proc/empty() if(cell) cell.use(cell.charge) - update_icon() + update_appearance(updates = ALL) /obj/item/gun/energy/kinetic_accelerator/proc/attempt_reload(recharge_time) if(!cell) @@ -142,11 +142,11 @@ playsound(src.loc, 'sound/weapons/kenetic_reload.ogg', 60, 1) else to_chat(loc, span_warning("[src] silently charges up.")) - update_icon() + update_appearance(updates = ALL) overheat = FALSE -/obj/item/gun/energy/kinetic_accelerator/update_icon() - ..() +/obj/item/gun/energy/kinetic_accelerator/update_appearance(updates = ALL) + . = ..() if(!can_shoot()) add_overlay("[icon_state]_empty") else diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index 6ac021300bab..4219410763e6 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -34,8 +34,8 @@ pin = null ammo_x_offset = 1 -/obj/item/gun/energy/decloner/update_icon() - ..() +/obj/item/gun/energy/decloner/update_appearance(updates = ALL) + . = ..() var/obj/item/ammo_casing/energy/shot = ammo_type[select] if(!QDELETED(cell) && (cell.charge > shot.e_cost)) add_overlay("decloner_spin") @@ -138,6 +138,7 @@ toolspeed = 2 /obj/item/gun/energy/plasmacutter/Initialize(mapload) + AddElement(/datum/element/update_icon_blocker) . = ..() AddComponent(/datum/component/butchering, 25, 105, 0, 'sound/weapons/plasma_cutter.ogg') @@ -207,10 +208,6 @@ else . = ..(amount=1) - -/obj/item/gun/energy/plasmacutter/update_icon() - return - /obj/item/gun/energy/plasmacutter/adv name = "advanced plasma cutter" icon_state = "adv_plasmacutter" @@ -306,7 +303,8 @@ desc = "A projector that emits high density quantum-coupled bluespace beams. This one seems to be modified to go through glass." ammo_type = list(/obj/item/ammo_casing/energy/wormhole/upgraded, /obj/item/ammo_casing/energy/wormhole/orange/upgraded) -/obj/item/gun/energy/wormhole_projector/update_icon() +/obj/item/gun/energy/wormhole_projector/update_appearance(updates = ALL) + . = ..() icon_state = "[initial(icon_state)][select]" item_state = icon_state @@ -384,8 +382,9 @@ can_charge = FALSE use_cyborg_cell = TRUE -/obj/item/gun/energy/printer/update_icon() - return +/obj/item/gun/energy/printer/Initialize(mapload) + AddElement(/datum/element/update_icon_blocker) + . = ..() /obj/item/gun/energy/printer/emp_act() return diff --git a/code/modules/projectiles/guns/magic.dm b/code/modules/projectiles/guns/magic.dm index 7b08f3da3ab4..a38c172de01f 100644 --- a/code/modules/projectiles/guns/magic.dm +++ b/code/modules/projectiles/guns/magic.dm @@ -49,7 +49,7 @@ . |= COMPONENT_ITEM_BURNT_OUT charges = max_charges - update_icon() + update_appearance() recharge_newshot() return . @@ -108,8 +108,9 @@ recharge_newshot() return 1 -/obj/item/gun/magic/update_icon() - return +/obj/item/gun/magic/Initialize(mapload) + AddElement(/datum/element/update_icon_blocker) + return ..() /obj/item/gun/magic/shoot_with_empty_chamber(mob/living/user as mob|obj) to_chat(user, span_warning("The [name] whizzles quietly.")) diff --git a/code/modules/projectiles/guns/magic/wand.dm b/code/modules/projectiles/guns/magic/wand.dm index 383cb47830c5..e854503dd31a 100644 --- a/code/modules/projectiles/guns/magic/wand.dm +++ b/code/modules/projectiles/guns/magic/wand.dm @@ -21,7 +21,8 @@ . = ..() . += "Has [charges] charge\s remaining." -/obj/item/gun/magic/wand/update_icon() +/obj/item/gun/magic/wand/update_appearance(updates = ALL) + . = ..() icon_state = "[initial(icon_state)][charges ? "" : "-drained"]" /obj/item/gun/magic/wand/attack(atom/target, mob/living/user) @@ -44,7 +45,7 @@ zap_self(user) else . = ..() - update_icon() + update_appearance(updates = ALL) /obj/item/gun/magic/wand/proc/zap_self(mob/living/user) diff --git a/code/modules/projectiles/guns/misc/beam_rifle.dm b/code/modules/projectiles/guns/misc/beam_rifle.dm index ab196eda9af9..b34ae4ce3d6b 100644 --- a/code/modules/projectiles/guns/misc/beam_rifle.dm +++ b/code/modules/projectiles/guns/misc/beam_rifle.dm @@ -148,7 +148,8 @@ current_zoom_x = 0 current_zoom_y = 0 -/obj/item/gun/energy/beam_rifle/update_icon() +/obj/item/gun/energy/beam_rifle/update_appearance(updates = ALL) + . = ..() cut_overlays() var/obj/item/ammo_casing/energy/primary_ammo = ammo_type[1] if(!QDELETED(cell) && (cell.charge >= primary_ammo.e_cost)) diff --git a/code/modules/projectiles/guns/misc/blastcannon.dm b/code/modules/projectiles/guns/misc/blastcannon.dm index ae5f27377a2b..32ed87ae43f2 100644 --- a/code/modules/projectiles/guns/misc/blastcannon.dm +++ b/code/modules/projectiles/guns/misc/blastcannon.dm @@ -41,10 +41,11 @@ user.put_in_hands(bomb) user.visible_message(span_warning("[user] detaches [bomb] from [src].")) bomb = null - update_icon() + update_appearance(updates = ALL) return ..() -/obj/item/gun/blastcannon/update_icon() +/obj/item/gun/blastcannon/update_appearance(updates = ALL) + . = ..() if(bomb) icon_state = icon_state_loaded name = "blast cannon" @@ -65,7 +66,7 @@ return FALSE user.visible_message(span_warning("[user] attaches [T] to [src]!")) bomb = T - update_icon() + update_appearance(updates = ALL) return TRUE return ..() @@ -94,7 +95,7 @@ var/power = bomb? calculate_bomb() : debug_power power = min(power, max_power) QDEL_NULL(bomb) - update_icon() + update_appearance(updates = ALL) var/heavy = power * 0.25 var/medium = power * 0.5 var/light = power diff --git a/code/modules/projectiles/guns/misc/syringe_gun.dm b/code/modules/projectiles/guns/misc/syringe_gun.dm index 9798c722b26a..c55c43d48052 100644 --- a/code/modules/projectiles/guns/misc/syringe_gun.dm +++ b/code/modules/projectiles/guns/misc/syringe_gun.dm @@ -18,7 +18,7 @@ /obj/item/gun/syringe/Initialize(mapload) . = ..() - update_icon() + update_appearance(updates = ALL) chambered = new /obj/item/ammo_casing/syringegun(src) /obj/item/gun/syringe/handle_atom_del(atom/A) @@ -37,7 +37,7 @@ /obj/item/gun/syringe/process_chamber() if(chambered && !chambered.BB) //we just fired recharge_newshot() - update_icon() + update_appearance(updates = ALL) /obj/item/gun/syringe/examine(mob/user) . = ..() @@ -71,14 +71,14 @@ to_chat(user, span_notice("You load [A] into \the [src].")) syringes += A recharge_newshot() - update_icon() + update_appearance(updates = ALL) playsound(loc, load_sound, 40) return TRUE else to_chat(user, span_warning("[src] cannot hold more syringes!")) return FALSE -/obj/item/gun/syringe/update_icon() +/obj/item/gun/syringe/update_appearance(updates = ALL) . = ..() if(!has_syringe_overlay) return @@ -124,7 +124,7 @@ to_chat(user, span_notice("You load \the [D] into \the [src].")) syringes += D recharge_newshot() - update_icon() + update_appearance(updates = ALL) playsound(loc, load_sound, 40) return TRUE else diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm index 175a73c951ce..ec78cf991cc5 100644 --- a/code/modules/projectiles/projectile/magic.dm +++ b/code/modules/projectiles/projectile/magic.dm @@ -450,7 +450,7 @@ for(var/atom/movable/AM in contents) C.insert(AM) C.welded = weld - C.update_icon() + C.update_appearance(updates = ALL) created = TRUE return ..() @@ -477,7 +477,7 @@ if(!welded) return icon_state = magic_icon - update_icon() + update_appearance(updates = ALL) /obj/structure/closet/decay/after_weld(weld_state) if(weld_state) @@ -497,7 +497,7 @@ /obj/structure/closet/decay/proc/unmagify() icon_state = weakened_icon - update_icon() + update_appearance(updates = ALL) addtimer(CALLBACK(src, PROC_REF(decay)), 15 SECONDS) icon_welded = "welded" diff --git a/code/modules/projectiles/projectile/reusable/arrow.dm b/code/modules/projectiles/projectile/reusable/arrow.dm index 30058fb07342..477c1bfde08b 100644 --- a/code/modules/projectiles/projectile/reusable/arrow.dm +++ b/code/modules/projectiles/projectile/reusable/arrow.dm @@ -37,7 +37,7 @@ L.ignite_mob() arrow.flaming = FALSE - arrow.update_icon() + arrow.update_appearance(updates = ALL) /obj/item/projectile/bullet/reusable/arrow/handle_drop(atom/target) if(dropped || !ammo_type) diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index d5d0914bde36..08cf4368fe55 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -107,7 +107,7 @@ t4_upgrade_reagents = sortList(t4_upgrade_reagents, /proc/cmp_reagents_asc) display_reagents |= t4_upgrade_reagents //we don't sort display_reagents again after adding these because they will fuck up the order - update_icon() + update_appearance(updates = ALL) /obj/machinery/chem_dispenser/Destroy() QDEL_NULL(beaker) @@ -145,7 +145,8 @@ if(working_state) flick(working_state,src) -/obj/machinery/chem_dispenser/update_icon() +/obj/machinery/chem_dispenser/update_appearance(updates = ALL) + . = ..() cut_overlays() icon_state = "[(nopower_state && !powered()) ? nopower_state : initial(icon_state)]" if(has_panel_overlay && panel_open) @@ -347,7 +348,7 @@ if(default_unfasten_wrench(user, I)) return if(default_deconstruction_screwdriver(user, icon_state, icon_state, I)) - update_icon() + update_appearance(updates = ALL) return if(default_deconstruction_crowbar(I)) return @@ -375,7 +376,7 @@ replace_beaker(user, B) to_chat(user, span_notice("You add [B] to [src].")) updateUsrDialog() - update_icon() + update_appearance(updates = ALL) else if(user.a_intent != INTENT_HARM && !istype(I, /obj/item/card/emag)) to_chat(user, span_warning("You can't load [I] into [src]!")) return ..() @@ -434,7 +435,7 @@ beaker = new_beaker else beaker = null - update_icon() + update_appearance(updates = ALL) return TRUE /obj/machinery/chem_dispenser/on_deconstruction() @@ -479,7 +480,7 @@ var/old = dir . = ..() if(dir != old) - update_icon() // the beaker needs to be re-positioned if we rotate + update_appearance(updates = ALL) // the beaker needs to be re-positioned if we rotate /obj/machinery/chem_dispenser/drinks/display_beaker() var/mutable_appearance/b_o = beaker_overlay || mutable_appearance(icon, "disp_beaker") diff --git a/code/modules/reagents/chemistry/machinery/chem_heater.dm b/code/modules/reagents/chemistry/machinery/chem_heater.dm index b7d6268b8347..06dc4a322e50 100644 --- a/code/modules/reagents/chemistry/machinery/chem_heater.dm +++ b/code/modules/reagents/chemistry/machinery/chem_heater.dm @@ -21,16 +21,17 @@ . = ..() if(A == beaker) beaker = null - update_icon() + update_appearance(updates = ALL) -/obj/machinery/chem_heater/update_icon() +/obj/machinery/chem_heater/update_appearance(updates = ALL) + . = ..() icon_state = "mixer[beaker ? 1 : 0][on ? "a" : "b"]" /obj/machinery/chem_heater/CtrlClick(mob/user) if(!user.canUseTopic(src, !issilicon(user))) return on = !on - update_icon() + update_appearance(updates = ALL) /obj/machinery/chem_heater/AltClick(mob/living/user) if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) @@ -47,7 +48,7 @@ beaker = new_beaker else beaker = null - update_icon() + update_appearance(updates = ALL) return TRUE /obj/machinery/chem_heater/RefreshParts() @@ -91,7 +92,7 @@ replace_beaker(user, B) to_chat(user, span_notice("You add [B] to [src].")) updateUsrDialog() - update_icon() + update_appearance(updates = ALL) return return ..() @@ -129,7 +130,7 @@ if("power") on = !on . = TRUE - update_icon() + update_appearance(updates = ALL) if("temperature") var/target = params["target"] var/adjust = text2num(params["adjust"]) diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm index 177d08bc2404..3ef4dff44827 100644 --- a/code/modules/reagents/chemistry/machinery/chem_master.dm +++ b/code/modules/reagents/chemistry/machinery/chem_master.dm @@ -65,11 +65,12 @@ if(A == beaker) beaker = null reagents.clear_reagents() - update_icon() + update_appearance(updates = ALL) else if(A == bottle) bottle = null -/obj/machinery/chem_master/update_icon() +/obj/machinery/chem_master/update_appearance(updates = ALL) + . = ..() cut_overlays() if (stat & BROKEN) add_overlay("waitlight") @@ -103,7 +104,7 @@ replace_beaker(user, B) to_chat(user, span_notice("You add [B] to [src].")) updateUsrDialog() - update_icon() + update_appearance(updates = ALL) else if(!condi && istype(I, /obj/item/storage/pill_bottle)) if(bottle) to_chat(user, span_warning("A pill bottle is already loaded into [src]!")) @@ -131,7 +132,7 @@ beaker = new_beaker else beaker = null - update_icon() + update_appearance(updates = ALL) return TRUE /obj/machinery/chem_master/on_deconstruction() diff --git a/code/modules/reagents/chemistry/machinery/chem_synthesizer.dm b/code/modules/reagents/chemistry/machinery/chem_synthesizer.dm index 4bc6fd486e40..c05d533c1816 100644 --- a/code/modules/reagents/chemistry/machinery/chem_synthesizer.dm +++ b/code/modules/reagents/chemistry/machinery/chem_synthesizer.dm @@ -53,7 +53,7 @@ var/input = text2num(params["amount"]) if(input) amount = input - update_icon() + update_appearance(updates = ALL) /obj/machinery/chem_dispenser/chem_synthesizer/proc/find_reagent(input) . = FALSE diff --git a/code/modules/reagents/chemistry/machinery/pandemic.dm b/code/modules/reagents/chemistry/machinery/pandemic.dm index 59b9f2a427f9..7e37deac3a93 100644 --- a/code/modules/reagents/chemistry/machinery/pandemic.dm +++ b/code/modules/reagents/chemistry/machinery/pandemic.dm @@ -17,7 +17,7 @@ /obj/machinery/computer/pandemic/Initialize(mapload) . = ..() - update_icon() + update_appearance(updates = ALL) /obj/machinery/computer/pandemic/Destroy() QDEL_NULL(beaker) @@ -42,7 +42,7 @@ /obj/machinery/computer/pandemic/handle_atom_del(atom/A) if(A == beaker) beaker = null - update_icon() + update_appearance(updates = ALL) return ..() /obj/machinery/computer/pandemic/proc/get_by_index(thing, index) @@ -122,10 +122,11 @@ /obj/machinery/computer/pandemic/proc/reset_replicator_cooldown() wait = FALSE - update_icon() + update_appearance(updates = ALL) playsound(src, 'sound/machines/ping.ogg', 30, TRUE) -/obj/machinery/computer/pandemic/update_icon() +/obj/machinery/computer/pandemic/update_appearance(updates = ALL) + . = ..() if(stat & BROKEN) icon_state = (beaker ? "mixer1_b" : "mixer0_b") return @@ -140,7 +141,7 @@ if(beaker) beaker.forceMove(drop_location()) beaker = null - update_icon() + update_appearance(updates = ALL) /obj/machinery/computer/pandemic/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) @@ -215,7 +216,7 @@ B.desc = "A small bottle. Contains [A.agent] culture in synthblood medium." B.reagents.add_reagent(/datum/reagent/blood, 20, data) wait = TRUE - update_icon() + update_appearance(updates = ALL) var/turf/source_turf = get_turf(src) log_virus("A culture bottle was printed for the virus [A.admin_details()] at [loc_name(source_turf)] by [key_name(usr)]") addtimer(CALLBACK(src, PROC_REF(reset_replicator_cooldown)), 50) @@ -229,7 +230,7 @@ B.name = "[D.name] vaccine bottle" B.reagents.add_reagent(/datum/reagent/vaccine, 15, list(id)) wait = TRUE - update_icon() + update_appearance(updates = ALL) addtimer(CALLBACK(src, PROC_REF(reset_replicator_cooldown)), 200) . = TRUE @@ -247,7 +248,7 @@ beaker = I to_chat(user, span_notice("You insert [I] into [src].")) - update_icon() + update_appearance(updates = ALL) else return ..() diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm index 8be38a4680d0..cd0a134b2923 100644 --- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm +++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm @@ -37,7 +37,7 @@ . = ..() holdingitems = list() QDEL_NULL(container) - update_icon() + update_appearance(updates = ALL) /obj/machinery/reagentgrinder/Destroy() if(container) @@ -89,7 +89,7 @@ . = ..() if(A == container) container = null - update_icon() + update_appearance(updates = ALL) if(holdingitems[A]) holdingitems -= A @@ -99,7 +99,8 @@ AM.forceMove(drop_location()) holdingitems = list() -/obj/machinery/reagentgrinder/update_icon() +/obj/machinery/reagentgrinder/update_appearance(updates = ALL) + . = ..() if(!container) icon_state = "juicer" return @@ -118,7 +119,7 @@ container = new_container else container = null - update_icon() + update_appearance(updates = ALL) return TRUE /obj/machinery/reagentgrinder/attackby(obj/item/I, mob/user, params) @@ -142,7 +143,7 @@ return replace_container(user, B) to_chat(user, span_notice("You add [B] to [src].")) - update_icon() + update_appearance(updates = ALL) return TRUE //no afterattack if(holdingitems.len >= limit) diff --git a/code/modules/reagents/chemistry/machinery/smoke_machine.dm b/code/modules/reagents/chemistry/machinery/smoke_machine.dm index b883fedc1ed1..ebde6133275e 100644 --- a/code/modules/reagents/chemistry/machinery/smoke_machine.dm +++ b/code/modules/reagents/chemistry/machinery/smoke_machine.dm @@ -36,7 +36,8 @@ for(var/obj/item/stock_parts/matter_bin/B in component_parts) reagents.maximum_volume += REAGENTS_BASE_VOLUME * B.rating -/obj/machinery/smoke_machine/update_icon() +/obj/machinery/smoke_machine/update_appearance(updates = ALL) + . = ..() if((!is_operational()) || (!on) || (reagents.total_volume == 0)) if (panel_open) icon_state = "smoke0-o" @@ -70,12 +71,12 @@ return if(reagents.total_volume == 0) on = FALSE - update_icon() + update_appearance(updates = ALL) return var/turf/location = get_turf(src) var/smoke_test = locate(/obj/effect/particle_effect/fluid/smoke) in location if(on && !smoke_test) - update_icon() + update_appearance(updates = ALL) var/datum/effect_system/fluid_spread/smoke/chem/smoke_machine/smoke = new() smoke.set_up(setting * 3, location = location, carry = reagents, efficiency = efficiency) smoke.start() @@ -131,7 +132,7 @@ switch(action) if("purge") reagents.clear_reagents() - update_icon() + update_appearance(updates = ALL) . = TRUE if("setting") var/amount = text2num(params["amount"]) @@ -140,7 +141,7 @@ . = TRUE if("power") on = !on - update_icon() + update_appearance(updates = ALL) if(on) message_admins("[ADMIN_LOOKUPFLW(usr)] activated a smoke machine that contains [english_list(reagents.reagent_list)] at [ADMIN_VERBOSEJMP(src)].") log_game("[key_name(usr)] activated a smoke machine that contains [english_list(reagents.reagent_list)] at [AREACOORD(src)].") diff --git a/code/modules/reagents/chemistry/recipes/special.dm b/code/modules/reagents/chemistry/recipes/special.dm index 96054f949928..ab72eb610a9a 100644 --- a/code/modules/reagents/chemistry/recipes/special.dm +++ b/code/modules/reagents/chemistry/recipes/special.dm @@ -208,4 +208,4 @@ GLOBAL_LIST_INIT(food_reagents, build_reagents_to_food()) //reagentid = related dat += " above [recipe.required_temp] degrees" dat += "." info = dat.Join("") - update_icon() + update_appearance(updates = ALL) diff --git a/code/modules/reagents/reagent_containers/blood_pack.dm b/code/modules/reagents/reagent_containers/blood_pack.dm index 633b94a1001b..9772b346649f 100644 --- a/code/modules/reagents/reagent_containers/blood_pack.dm +++ b/code/modules/reagents/reagent_containers/blood_pack.dm @@ -57,7 +57,7 @@ . = ..() if(blood_type != null) reagents.add_reagent(unique_blood ? unique_blood : /datum/reagent/blood, 200, list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=blood_type,"resistances"=null,"trace_chem"=null)) - update_icon() + update_appearance(updates = ALL) /obj/item/reagent_containers/blood/on_reagent_change(changetype) if(reagents) @@ -69,7 +69,7 @@ else blood_type = null update_pack_name() - update_icon() + update_appearance(updates = ALL) /obj/item/reagent_containers/blood/proc/update_pack_name() if(!labelled) @@ -78,7 +78,8 @@ else name = "blood pack" -/obj/item/reagent_containers/blood/update_icon() +/obj/item/reagent_containers/blood/update_appearance(updates = ALL) + . = ..() cut_overlays() var/v = min(round(reagents.total_volume / volume * 10), 10) @@ -141,4 +142,4 @@ labelled = 0 update_pack_name() else - return ..() \ No newline at end of file + return ..() diff --git a/code/modules/reagents/reagent_containers/borghypo.dm b/code/modules/reagents/reagent_containers/borghypo.dm index 31ef33730ecc..a9e6f33cd25d 100644 --- a/code/modules/reagents/reagent_containers/borghypo.dm +++ b/code/modules/reagents/reagent_containers/borghypo.dm @@ -55,7 +55,8 @@ Borg Hypospray regenerate_reagents() charge_timer = 0 - //update_icon() + //update_appearance(updates = ALL) + . = ..() return 1 // Use this to add more chemicals for the borghypo to produce. diff --git a/code/modules/reagents/reagent_containers/bottle.dm b/code/modules/reagents/reagent_containers/bottle.dm index 916c955288e0..61a12f6d5d99 100644 --- a/code/modules/reagents/reagent_containers/bottle.dm +++ b/code/modules/reagents/reagent_containers/bottle.dm @@ -15,12 +15,13 @@ . = ..() if(!icon_state) icon_state = "bottle" - update_icon() + update_appearance(updates = ALL) /obj/item/reagent_containers/glass/bottle/on_reagent_change(changetype) - update_icon() + update_appearance(updates = ALL) -/obj/item/reagent_containers/glass/bottle/update_icon() +/obj/item/reagent_containers/glass/bottle/update_appearance(updates = ALL) + . = ..() cut_overlays() if(!filling_icon_state) filling_icon_state = icon_state @@ -468,7 +469,7 @@ disease_amount = 15 /// Name that used as the base for pen renaming, so subtypes can have different names without having to worry about messing with it var/base_name = "vial" - var/base_icon_state = "vial" + base_icon_state = "vial" /// List of icon_states that require the stripe overlay to look good. Not a very good way of doing it, but its the best I can come up with right now. var/list/striped_vial_skins = list("vial_white", "vial_red", "vial_blue", "vial_green", "vial_orange", "vial_purple", "vial_black", "viallarge_white", "viallarge_red", "viallarge_blue", "viallarge_green", "viallarge_orange", "viallarge_purple", "viallarge_black") diff --git a/code/modules/reagents/reagent_containers/dropper.dm b/code/modules/reagents/reagent_containers/dropper.dm index 640716e6e1b8..479640f689ea 100644 --- a/code/modules/reagents/reagent_containers/dropper.dm +++ b/code/modules/reagents/reagent_containers/dropper.dm @@ -44,7 +44,7 @@ span_userdanger("[user] tries to squirt something into [target]'s eyes, but fails!")) to_chat(user, span_notice("You transfer [trans] unit\s of the solution.")) - update_icon() + update_appearance(updates = ALL) return else if(isalien(target)) //hiss-hiss has no eyes! to_chat(target, span_danger("[target] does not seem to have any eyes!")) @@ -82,7 +82,7 @@ trans = src.reagents.trans_to(target, amount_per_transfer_from_this, transfered_by = user) to_chat(user, span_notice("You transfer [trans] unit\s of the solution.")) - update_icon() + update_appearance(updates = ALL) else @@ -98,9 +98,10 @@ to_chat(user, span_notice("You fill [src] with [trans] unit\s of the solution.")) - update_icon() + update_appearance(updates = ALL) -/obj/item/reagent_containers/dropper/update_icon() +/obj/item/reagent_containers/dropper/update_appearance(updates = ALL) + . = ..() cut_overlays() if(reagents.total_volume) var/mutable_appearance/filling = mutable_appearance('icons/obj/reagentfillings.dmi', "dropper") diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index 0d4d5a14eeae..048b7f6a3e2b 100755 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -119,15 +119,16 @@ /obj/item/reagent_containers/glass/beaker/Initialize(mapload) . = ..() - update_icon() + update_appearance(updates = ALL) /obj/item/reagent_containers/glass/beaker/get_part_rating() return reagents.maximum_volume /obj/item/reagent_containers/glass/beaker/on_reagent_change(changetype) - update_icon() + update_appearance(updates = ALL) -/obj/item/reagent_containers/glass/beaker/update_icon() +/obj/item/reagent_containers/glass/beaker/update_appearance(updates = ALL) + . = ..() cut_overlays() if(reagents.total_volume) @@ -177,7 +178,8 @@ amount_per_transfer_from_this = 10 possible_transfer_amounts = list(5,10,15,20,25,30,60,120) -/obj/item/reagent_containers/glass/beaker/plastic/update_icon() +/obj/item/reagent_containers/glass/beaker/plastic/update_appearance(updates = ALL) + . = ..() icon_state = "beakerlarge" // hack to lets us reuse the large beaker reagent fill states ..() icon_state = "beakerwhite" @@ -422,9 +424,10 @@ /obj/item/reagent_containers/glass/mixbowl/on_reagent_change(changetype) ..() - update_icon() + update_appearance(updates = ALL) -/obj/item/reagent_containers/glass/mixbowl/update_icon() +/obj/item/reagent_containers/glass/mixbowl/update_appearance(updates = ALL) + . = ..() cut_overlays() if(reagents.total_volume) diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm index 685083f3619f..f40b080a711a 100644 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ b/code/modules/reagents/reagent_containers/hypospray.dm @@ -126,7 +126,7 @@ if(!iscyborg(user)) reagents.maximum_volume = 0 //Makes them useless afterwards reagents.flags = NONE - update_icon() + update_appearance(updates = ALL) addtimer(CALLBACK(src, PROC_REF(cyborg_recharge), user), 80) /obj/item/reagent_containers/autoinjector/medipen/proc/cyborg_recharge(mob/living/silicon/robot/user) @@ -134,9 +134,10 @@ var/mob/living/silicon/robot/R = user if(R.cell.use(100)) reagents.add_reagent_list(list_reagents) - update_icon() + update_appearance(updates = ALL) -/obj/item/reagent_containers/autoinjector/medipen/update_icon() +/obj/item/reagent_containers/autoinjector/medipen/update_appearance(updates = ALL) + . = ..() if(reagents.total_volume > 0) icon_state = initial(icon_state) else @@ -304,14 +305,14 @@ if(ispath(container)) container = new container antispam = FALSE - update_icon() + update_appearance(updates = ALL) -/obj/item/hypospray/update_icon() - ..() +/obj/item/hypospray/update_appearance(updates = ALL) + . = ..() cut_overlays() if(ismob(loc)) var/mob/M = loc - M.update_inv_hands() + M.update_held_items() if(container?.reagents?.total_volume) var/mutable_appearance/filling = mutable_appearance('icons/obj/reagentfillings.dmi', "[icon_state]-10") @@ -352,7 +353,7 @@ user.put_in_hands(container) to_chat(user, span_notice("You remove [container] from [src].")) container = null - update_icon() + update_appearance(updates = ALL) playsound(loc, pick(eject_sound), 50, 1) else to_chat(user, span_notice("This hypo isn't loaded!")) @@ -373,7 +374,7 @@ unload_hypo(user) container = V user.visible_message(span_notice("[user] has loaded [container] into [src]."),span_notice("You have loaded [container] into [src].")) - update_icon() + update_appearance(updates = ALL) playsound(loc, pick(load_sound), 35, 1) return TRUE else @@ -430,7 +431,7 @@ if(HYPO_DRAW) draw(target, user) antispam = FALSE - update_icon() + update_appearance(updates = ALL) /obj/item/hypospray/proc/inject(mob/living/carbon/target, mob/user) //Initial Checks/Logging diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index d338a4a87afb..88b59434ce9a 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -21,28 +21,28 @@ . = ..() if(list_reagents) //syringe starts in inject mode if its already got something inside mode = SYRINGE_INJECT - update_icon() + update_appearance(updates = ALL) RegisterSignal(src, COMSIG_ITEM_EMBED_TICK, PROC_REF(embed_inject)) /obj/item/reagent_containers/syringe/on_reagent_change(changetype) - update_icon() + update_appearance(updates = ALL) /obj/item/reagent_containers/syringe/pickup(mob/user) ..() - update_icon() + update_appearance(updates = ALL) /obj/item/reagent_containers/syringe/dropped(mob/user) ..() - update_icon() + update_appearance(updates = ALL) /obj/item/reagent_containers/syringe/attack_self(mob/user) mode = !mode - update_icon() + update_appearance(updates = ALL) //ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/reagent_containers/syringe/attack_hand() . = ..() - update_icon() + update_appearance(updates = ALL) /obj/item/reagent_containers/syringe/attack_paw(mob/user) return attack_hand(user) @@ -103,7 +103,7 @@ to_chat(user, span_notice("You fill [src] with [trans] units of the solution. It now contains [reagents.total_volume] units.")) if (reagents.total_volume >= reagents.maximum_volume) mode=!mode - update_icon() + update_appearance(updates = ALL) if(SYRINGE_INJECT) // Always log attemped injections for admins @@ -165,10 +165,11 @@ to_chat(user, span_notice("You inject [amount_per_transfer_from_this] units of the solution. The syringe now contains [reagents.total_volume] units.")) if (reagents.total_volume <= 0 && mode==SYRINGE_INJECT) mode = SYRINGE_DRAW - update_icon() + update_appearance(updates = ALL) -/obj/item/reagent_containers/syringe/update_icon() +/obj/item/reagent_containers/syringe/update_appearance(updates = ALL) + . = ..() cut_overlays() var/rounded_vol if(reagents && reagents.total_volume) @@ -189,8 +190,8 @@ if (SYRINGE_INJECT) injoverlay = "inject" add_overlay(injoverlay) - M.update_inv_hands() - + M.update_held_items() + /obj/item/reagent_containers/syringe/proc/embed_inject(target, mob/living/carbon/human/embedde, obj/item/bodypart/part) if(!reagents.total_volume) return diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index 1dcc4bde816d..bb529a319e6d 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -101,7 +101,7 @@ reagents.trans_to(W, W.max_fuel, transfered_by = user) user.visible_message(span_notice("[user] refills [user.p_their()] [W.name]."), span_notice("You refill [W].")) playsound(src, 'sound/effects/refill.ogg', 50, 1) - W.update_icon() + W.update_appearance(updates = ALL) else user.visible_message(span_warning("[user] catastrophically fails at refilling [user.p_their()] [W.name]!"), span_userdanger("That was stupid of you.")) diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm index f7b15f1ba49c..a89b7666249d 100644 --- a/code/modules/recycling/conveyor2.dm +++ b/code/modules/recycling/conveyor2.dm @@ -121,7 +121,8 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) movedir = backwards update() -/obj/machinery/conveyor/update_icon() +/obj/machinery/conveyor/update_appearance(updates = ALL) + . = ..() if(!operating) icon_state = "conveyor[inverted ? "-0" : "0"]" else @@ -132,7 +133,7 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) if(stat & NOPOWER) operating = FALSE . = FALSE - update_icon() + update_appearance(updates = ALL) // machine process // move items to the target location @@ -197,7 +198,7 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) inverted = !inverted update_move_direction() to_chat(user, span_notice("You set [src]'s direction [inverted ? "backwards" : "back to default"].")) - update_icon() + update_appearance(updates = ALL) else if(I.tool_behaviour == TOOL_MULTITOOL) switch(conveytime) @@ -253,7 +254,7 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) . = ..() if (newid) id = newid - update_icon() + update_appearance(updates = ALL) LAZYADD(GLOB.conveyors_by_id[id], src) /obj/machinery/conveyor_switch/Destroy() @@ -271,7 +272,8 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) // update the icon depending on the position -/obj/machinery/conveyor_switch/update_icon() +/obj/machinery/conveyor_switch/update_appearance(updates = ALL) + . = ..() if(position<0) if(invert_icon) icon_state = "switch-fwd" @@ -297,7 +299,7 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) for(var/obj/machinery/conveyor/C in GLOB.conveyors_by_id[id]) C.operating = position C.update_move_direction() - C.update_icon() + C.update_appearance(updates = ALL) CHECK_TICK // attack with hand, switch position @@ -318,13 +320,13 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) position = 0 operated = 1 - update_icon() + update_appearance(updates = ALL) // find any switches with same id as this one, and set their positions to match us for(var/obj/machinery/conveyor_switch/S in GLOB.conveyors_by_id[id]) S.invert_icon = invert_icon S.position = position - S.update_icon() + S.update_appearance(updates = ALL) CHECK_TICK /obj/machinery/conveyor_switch/attackby(obj/item/I, mob/user, params) diff --git a/code/modules/recycling/disposal/bin.dm b/code/modules/recycling/disposal/bin.dm index bab1c389c7b8..5f75094c080d 100644 --- a/code/modules/recycling/disposal/bin.dm +++ b/code/modules/recycling/disposal/bin.dm @@ -39,7 +39,7 @@ air_contents = new /datum/gas_mixture() //gas.volume = 1.05 * CELLSTANDARD - update_icon() + update_appearance(updates = ALL) return INITIALIZE_HINT_LATELOAD //we need turfs to have air @@ -96,7 +96,7 @@ if((I.item_flags & ABSTRACT) || !user.temporarilyRemoveItemFromInventory(I)) return place_item_in_disposal(I, user) - update_icon() + update_appearance(updates = ALL) return 1 //no afterattack else return ..() @@ -140,7 +140,7 @@ target.visible_message(span_danger("[user] has placed [target] in [src]."), span_userdanger("[user] has placed [target] in [src].")) log_combat(user, target, "stuffed", addition="into [src]") target.LAssailant = WEAKREF(user) - update_icon() + update_appearance(updates = ALL) /obj/machinery/disposal/relaymove(mob/user) attempt_escape(user) @@ -157,14 +157,14 @@ // leave the disposal /obj/machinery/disposal/proc/go_out(mob/user) user.forceMove(loc) - update_icon() + update_appearance(updates = ALL) // monkeys and xenos can only pull the flush lever /obj/machinery/disposal/attack_paw(mob/user) if(stat & BROKEN) return flush = !flush - update_icon() + update_appearance(updates = ALL) // eject the contents of the disposal unit @@ -173,11 +173,12 @@ for(var/atom/movable/AM in src) AM.forceMove(T) AM.pipe_eject(0) - update_icon() + update_appearance(updates = ALL) // update the icon & overlays to reflect mode & status -/obj/machinery/disposal/update_icon() - return +/obj/machinery/disposal/Initialize(mapload) + AddElement(/datum/element/update_icon_blocker) + return ..() /obj/machinery/disposal/proc/flush() flushing = TRUE @@ -233,7 +234,7 @@ src.transfer_fingerprints_to(stored) stored.anchored = FALSE stored.density = TRUE - stored.update_icon() + stored.update_appearance(updates = ALL) for(var/atom/movable/AM in src) //out, out, darned crowbar! AM.forceMove(T) ..() @@ -273,8 +274,8 @@ to_chat(user, span_warning("You empty the bag.")) for(var/obj/item/O in T.contents) STR.remove_from_storage(O,src) - T.update_icon() - update_icon() + T.update_appearance(updates = ALL) + update_appearance(updates = ALL) else return ..() @@ -285,7 +286,7 @@ if(!user.canUseTopic(src, TRUE)) return flush = !flush - update_icon() + update_appearance(updates = ALL) /obj/machinery/disposal/bin/ui_state(mob/user) return GLOB.notcontained_state @@ -315,22 +316,22 @@ switch(action) if("handle-0") flush = FALSE - update_icon() + update_appearance(updates = ALL) . = TRUE if("handle-1") if(!panel_open) flush = TRUE - update_icon() + update_appearance(updates = ALL) . = TRUE if("pump-0") if(pressure_charging) pressure_charging = FALSE - update_icon() + update_appearance(updates = ALL) . = TRUE if("pump-1") if(!pressure_charging) pressure_charging = TRUE - update_icon() + update_appearance(updates = ALL) . = TRUE if("eject") eject() @@ -346,7 +347,7 @@ visible_message(span_notice("[AM] lands in [src] and triggers the flush system!.")) else visible_message(span_notice("[AM] lands in [src].")) - update_icon() + update_appearance(updates = ALL) else visible_message(span_notice("[AM] bounces off of [src]'s rim!")) return ..() @@ -357,9 +358,10 @@ ..() full_pressure = FALSE pressure_charging = TRUE - update_icon() + update_appearance(updates = ALL) -/obj/machinery/disposal/bin/update_icon() +/obj/machinery/disposal/bin/update_appearance(updates = ALL) + . = ..() cut_overlays() if(stat & BROKEN) pressure_charging = FALSE @@ -435,7 +437,7 @@ if(air_contents.return_pressure() >= SEND_PRESSURE) full_pressure = TRUE pressure_charging = FALSE - update_icon() + update_appearance(updates = ALL) return /obj/machinery/disposal/bin/get_remote_view_fullscreens(mob/user) diff --git a/code/modules/recycling/disposal/construction.dm b/code/modules/recycling/disposal/construction.dm index 7697a7036590..e59e609ccf68 100644 --- a/code/modules/recycling/disposal/construction.dm +++ b/code/modules/recycling/disposal/construction.dm @@ -32,7 +32,7 @@ if(flip) rotcomp.BaseRot(null,ROTATION_FLIP) - update_icon() + update_appearance(updates = ALL) /obj/structure/disposalconstruct/Move() var/old_dir = dir @@ -40,7 +40,8 @@ setDir(old_dir) //pipes changing direction when moved is just annoying and buggy // update iconstate and dpdir due to dir and type -/obj/structure/disposalconstruct/update_icon() +/obj/structure/disposalconstruct/update_appearance(updates = ALL) + . = ..() icon_state = initial(pipe_type.icon_state) if(is_pipe()) icon_state = "con[icon_state]" @@ -63,7 +64,7 @@ // change visibility status and force update of icon /obj/structure/disposalconstruct/hide(intact) invisibility = (intact && level==1) ? INVISIBILITY_MAXIMUM: 0 // hide if floor is intact - update_icon() + update_appearance(updates = ALL) /obj/structure/disposalconstruct/proc/get_disposal_dir() if(!is_pipe()) @@ -94,7 +95,7 @@ if(dir in GLOB.diagonals) // Fix RPD-induced diagonal turning setDir(turn(dir, 45)) pipe_type = initial(temp.flip_type) - update_icon() + update_appearance(updates = ALL) /obj/structure/disposalconstruct/proc/can_be_rotated(mob/user,rotation_type) if(anchored) @@ -147,7 +148,7 @@ density = initial(pipe_type.density) to_chat(user, span_notice("You attach the [pipename] to the underfloor.")) I.play_tool_sound(src, 100) - update_icon() + update_appearance(updates = ALL) return TRUE /obj/structure/disposalconstruct/welder_act(mob/living/user, obj/item/I) diff --git a/code/modules/religion/religion_structures.dm b/code/modules/religion/religion_structures.dm index c69675312af7..e9ababcaef9d 100644 --- a/code/modules/religion/religion_structures.dm +++ b/code/modules/religion/religion_structures.dm @@ -64,11 +64,12 @@ to_chat(user, span_notice("The liquid feels warm and soothing as you touch it. The fountain immediately dries up shortly afterwards.")) user.reagents.add_reagent(/datum/reagent/medicine/omnizine/godblood,10) //Hurts your brain and makes you go insane user.reagents.add_reagent(/datum/reagent/toxin/mindbreaker,10) //However, it gives rather potent healing. - update_icon() - addtimer(CALLBACK(src, TYPE_PROC_REF(/atom/, update_icon)), time_between_uses) + update_appearance(updates = ALL) + addtimer(CALLBACK(src, TYPE_PROC_REF(/atom/, update_appearance)), time_between_uses) -/obj/structure/holyfountain/update_icon() +/obj/structure/holyfountain/update_appearance(updates = ALL) + . = ..() if(last_process + time_between_uses > world.time) icon_state = "fountain" else diff --git a/code/modules/research/destructive_analyzer.dm b/code/modules/research/destructive_analyzer.dm index 45f8e8afc293..637d742ba362 100644 --- a/code/modules/research/destructive_analyzer.dm +++ b/code/modules/research/destructive_analyzer.dm @@ -48,10 +48,11 @@ Note: Must be placed within 3 tiles of the R&D Console linked_console.updateUsrDialog() /obj/machinery/rnd/destructive_analyzer/proc/finish_loading() - update_icon() + update_appearance(updates = ALL) reset_busy() -/obj/machinery/rnd/destructive_analyzer/update_icon() +/obj/machinery/rnd/destructive_analyzer/update_appearance(updates = ALL) + . = ..() if(loaded_item) icon_state = "d_analyzer_l" else @@ -94,7 +95,7 @@ Note: Must be placed within 3 tiles of the R&D Console else qdel(thing) if (!innermode) - update_icon() + update_appearance(updates = ALL) return TRUE /obj/machinery/rnd/destructive_analyzer/proc/user_try_decon_id(id, mob/user) @@ -150,5 +151,5 @@ Note: Must be placed within 3 tiles of the R&D Console return FALSE loaded_item.forceMove(get_turf(src)) loaded_item = null - update_icon() + update_appearance(updates = ALL) return TRUE diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm index 7d6c2fc83e70..accc00d87afd 100644 --- a/code/modules/research/experimentor.dm +++ b/code/modules/research/experimentor.dm @@ -563,12 +563,13 @@ addtimer(CALLBACK(src, PROC_REF(reset_exp)), resetTime) /obj/machinery/rnd/experimentor/proc/reset_exp() - update_icon() + update_appearance(updates = ALL) recentlyExperimented = FALSE if(autoexperiment) do_experiment() -/obj/machinery/rnd/experimentor/update_icon() +/obj/machinery/rnd/experimentor/update_appearance(updates = ALL) + . = ..() icon_state = "h_lathe" /obj/machinery/rnd/experimentor/proc/warn_admins(user, ReactionName) diff --git a/code/modules/research/nanites/nanite_chamber.dm b/code/modules/research/nanites/nanite_chamber.dm index 305f9711f963..69c69d154f9b 100644 --- a/code/modules/research/nanites/nanite_chamber.dm +++ b/code/modules/research/nanites/nanite_chamber.dm @@ -38,7 +38,7 @@ busy = status busy_message = message busy_icon_state = working_icon - update_icon() + update_appearance(updates = ALL) /obj/machinery/nanite_chamber/proc/set_safety(threshold) if(!occupant) @@ -104,7 +104,8 @@ return SEND_SIGNAL(occupant, COMSIG_NANITE_DELETE) -/obj/machinery/nanite_chamber/update_icon() +/obj/machinery/nanite_chamber/update_appearance(updates = ALL) + . = ..() cut_overlays() if((stat & MAINT) || panel_open) @@ -188,7 +189,7 @@ /obj/machinery/nanite_chamber/attackby(obj/item/I, mob/user, params) if(!occupant && default_deconstruction_screwdriver(user, icon_state, icon_state, I))//sent icon_state is irrelevant... - update_icon()//..since we're updating the icon here, since the scanner can be unpowered when opened/closed + update_appearance(updates = ALL)//..since we're updating the icon here, since the scanner can be unpowered when opened/closed return if(default_pry_open(I)) diff --git a/code/modules/research/nanites/nanite_chamber_computer.dm b/code/modules/research/nanites/nanite_chamber_computer.dm index f244b96d6aee..a73ef3e4fd53 100644 --- a/code/modules/research/nanites/nanite_chamber_computer.dm +++ b/code/modules/research/nanites/nanite_chamber_computer.dm @@ -122,7 +122,7 @@ switch(action) if("toggle_lock") chamber.locked = !chamber.locked - chamber.update_icon() + chamber.update_appearance(updates = ALL) . = TRUE if("eject") eject(usr) diff --git a/code/modules/research/nanites/nanite_remote.dm b/code/modules/research/nanites/nanite_remote.dm index ad787af0069f..45f2ce12115a 100644 --- a/code/modules/research/nanites/nanite_remote.dm +++ b/code/modules/research/nanites/nanite_remote.dm @@ -33,7 +33,7 @@ if(allowed(user)) to_chat(user, span_notice("You unlock [src].")) locked = FALSE - update_icon() + update_appearance(updates = ALL) else to_chat(user, span_warning("Access denied.")) @@ -44,9 +44,9 @@ obj_flags |= EMAGGED if(locked) locked = FALSE - update_icon() + update_appearance(updates = ALL) -/obj/item/nanite_remote/update_icon() +/obj/item/nanite_remote/update_appearance(updates = ALL) . = ..() cut_overlays() if(obj_flags & EMAGGED) @@ -166,7 +166,7 @@ if("lock") if(!(obj_flags & EMAGGED)) locked = TRUE - update_icon() + update_appearance(updates = ALL) . = TRUE diff --git a/code/modules/research/nanites/public_chamber.dm b/code/modules/research/nanites/public_chamber.dm index 5451fdd8e952..aac29f13cc32 100644 --- a/code/modules/research/nanites/public_chamber.dm +++ b/code/modules/research/nanites/public_chamber.dm @@ -30,7 +30,7 @@ /obj/machinery/public_nanite_chamber/proc/set_busy(status, working_icon) busy = status busy_icon_state = working_icon - update_icon() + update_appearance(updates = ALL) /obj/machinery/public_nanite_chamber/proc/inject_nanites(mob/living/attacker) if(stat & (NOPOWER|BROKEN)) @@ -60,7 +60,8 @@ log_combat(attacker, occupant, "injected", null, "with nanites via [src]") occupant.AddComponent(/datum/component/nanites, 75, cloud_id) -/obj/machinery/public_nanite_chamber/update_icon() +/obj/machinery/public_nanite_chamber/update_appearance(updates = ALL) + . = ..() cut_overlays() if((stat & MAINT) || panel_open) @@ -161,7 +162,7 @@ /obj/machinery/public_nanite_chamber/attackby(obj/item/I, mob/user, params) if(!occupant && default_deconstruction_screwdriver(user, icon_state, icon_state, I))//sent icon_state is irrelevant... - update_icon()//..since we're updating the icon here, since the scanner can be unpowered when opened/closed + update_appearance(updates = ALL)//..since we're updating the icon here, since the scanner can be unpowered when opened/closed return if(default_pry_open(I)) diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm index f304969ebc76..588e5ab947d2 100644 --- a/code/modules/research/server.dm +++ b/code/modules/research/server.dm @@ -27,7 +27,7 @@ var/obj/item/circuitboard/machine/B = new /obj/item/circuitboard/machine/rdserver(null) B.apply_default_parts(src) current_temp = get_env_temp() - update_icon() + update_appearance(updates = ALL) /obj/machinery/rnd/server/Destroy() SSresearch.servers -= src @@ -39,7 +39,8 @@ tot_rating += SP.rating heat_gen /= max(1, tot_rating) -/obj/machinery/rnd/server/update_icon() +/obj/machinery/rnd/server/update_appearance(updates = ALL) + . = ..() if(panel_open) icon_state = "server_t" return @@ -52,8 +53,8 @@ icon_state = "RD-server-on" /obj/machinery/rnd/server/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/I) - .=..() - update_icon() + . = ..() + update_appearance(updates = ALL) /obj/machinery/rnd/server/power_change() . = ..() @@ -65,7 +66,7 @@ working = FALSE else working = TRUE - update_icon() + update_appearance(UPDATE_ICON_STATE) /obj/machinery/rnd/server/emp_act() . = ..() diff --git a/code/modules/security_levels/keycard_authentication.dm b/code/modules/security_levels/keycard_authentication.dm index 0db2e85e71bd..2a678b699666 100644 --- a/code/modules/security_levels/keycard_authentication.dm +++ b/code/modules/security_levels/keycard_authentication.dm @@ -137,7 +137,7 @@ GLOBAL_VAR_INIT(emergency_access, FALSE) for(var/turf/in_area as anything in A.get_contained_turfs()) for(var/obj/machinery/door/airlock/D in in_area) D.emergency = TRUE - D.update_icon(ALL, 0) + D.update_appearance(ALL, 0) minor_announce("Access restrictions on maintenance and external airlocks have been lifted.", "Attention! Station-wide emergency declared!",1) GLOB.emergency_access = TRUE SSblackbox.record_feedback("nested tally", "keycard_auths", 1, list("emergency maintenance access", "enabled")) @@ -147,7 +147,7 @@ GLOBAL_VAR_INIT(emergency_access, FALSE) for(var/turf/in_area as anything in A.get_contained_turfs()) for(var/obj/machinery/door/airlock/D in in_area) D.emergency = FALSE - D.update_icon(ALL, 0) + D.update_appearance(ALL, 0) minor_announce("Access restrictions in maintenance areas have been restored.", "Attention! Station-wide emergency rescinded:") GLOB.emergency_access = FALSE SSblackbox.record_feedback("nested tally", "keycard_auths", 1, list("emergency maintenance access", "disabled")) diff --git a/code/modules/security_levels/level_interface.dm b/code/modules/security_levels/level_interface.dm index 11fff53c633e..d7bdd68aac03 100644 --- a/code/modules/security_levels/level_interface.dm +++ b/code/modules/security_levels/level_interface.dm @@ -28,27 +28,26 @@ radio.independent = TRUE radio.recalculateChannels() -/obj/machinery/level_interface/update_icon() - cut_overlays() +/obj/machinery/level_interface/update_overlays() + . = ..() if(!is_operational()) set_light_on(FALSE) - return else set_light_on(TRUE) switch(GLOB.security_level) if(SEC_LEVEL_GREEN) - add_overlay("alert-level-green") + . += "alert-level-green" if(SEC_LEVEL_BLUE) - add_overlay("alert-level-blue") + . += "alert-level-blue" if(SEC_LEVEL_RED) - add_overlay("alert-level-red") + . += "alert-level-red" if(SEC_LEVEL_GAMMA) - add_overlay("alert-level-gamma") + . += "alert-level-gamma" if(SEC_LEVEL_EPSILON) - add_overlay("alert-level-epsilon") + . += "alert-level-epsilon" if(SEC_LEVEL_DELTA) - add_overlay("alert-level-delta") + . += "alert-level-delta" /obj/machinery/level_interface/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) diff --git a/code/modules/security_levels/security_levels.dm b/code/modules/security_levels/security_levels.dm index e83b789c568b..d75b10dfbe31 100644 --- a/code/modules/security_levels/security_levels.dm +++ b/code/modules/security_levels/security_levels.dm @@ -82,7 +82,7 @@ GLOBAL_VAR_INIT(security_level, SEC_LEVEL_GREEN) GLOB.security_level = level for(var/obj/machinery/firealarm/FA in GLOB.machines) if(is_station_level(FA.z)) - FA.update_icon() + FA.update_appearance(updates = ALL) for(var/obj/machinery/level_interface/LI in GLOB.machines) LI.update_icon() diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm index 5d5f8eac070c..d63378507154 100644 --- a/code/modules/shuttle/emergency.dm +++ b/code/modules/shuttle/emergency.dm @@ -498,8 +498,9 @@ density = FALSE clockwork = TRUE //it'd look weird -/obj/machinery/computer/shuttle/pod/update_icon() - return +/obj/machinery/computer/shuttle/pod/Initialize(mapload) + AddElement(/datum/element/update_icon_blocker) + return ..() /obj/machinery/computer/shuttle/pod/emag_act(mob/user) if(obj_flags & EMAGGED) diff --git a/code/modules/shuttle/manipulator.dm b/code/modules/shuttle/manipulator.dm index c82232e217a5..82a3fcdffd47 100644 --- a/code/modules/shuttle/manipulator.dm +++ b/code/modules/shuttle/manipulator.dm @@ -12,11 +12,12 @@ density = TRUE -/obj/machinery/shuttle_manipulator/update_icon() +/obj/machinery/shuttle_manipulator/update_appearance(updates = ALL) + . = ..() cut_overlays() var/mutable_appearance/hologram_projection = mutable_appearance(icon, "hologram_on") hologram_projection.pixel_y = 22 var/mutable_appearance/hologram_ship = mutable_appearance(icon, "hologram_whiteship") hologram_ship.pixel_y = 27 add_overlay(hologram_projection) - add_overlay(hologram_ship) \ No newline at end of file + add_overlay(hologram_ship) diff --git a/code/modules/shuttle/on_move.dm b/code/modules/shuttle/on_move.dm index 2faa462705f4..cda0542a9000 100644 --- a/code/modules/shuttle/on_move.dm +++ b/code/modules/shuttle/on_move.dm @@ -258,8 +258,8 @@ All ShuttleMove procs go here A.addMember(src) SSair.add_to_rebuild_queue(src) else - // atmosinit() calls update_icon(), so we don't need to call it - update_icon() + // atmosinit() calls update_appearance(updates = ALL), so we don't need to call it + update_appearance(updates = ALL) /obj/machinery/atmospherics/pipe/afterShuttleMove(turf/oldT, list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir, rotation) . = ..() diff --git a/code/modules/shuttle/shuttle_rotate.dm b/code/modules/shuttle/shuttle_rotate.dm index 61e43d69fb8c..1b2efe414a84 100644 --- a/code/modules/shuttle/shuttle_rotate.dm +++ b/code/modules/shuttle/shuttle_rotate.dm @@ -42,7 +42,7 @@ If ever any of these procs are useful for non-shuttles, rename it to proc/rotate /mob/dead/observer/shuttleRotate(rotation, params) . = ..() - update_icon() + update_appearance(updates = ALL) /************************************Structure rotate procs************************************/ @@ -59,7 +59,7 @@ If ever any of these procs are useful for non-shuttles, rename it to proc/rotate var/temp = d1 d1 = d2 d2 = temp - update_icon() + update_appearance(updates = ALL) //Fixes dpdir on shuttle rotation /obj/structure/disposalpipe/shuttleRotate(rotation, params) diff --git a/code/modules/shuttle/spaceship_navigation_beacon.dm b/code/modules/shuttle/spaceship_navigation_beacon.dm index 8b128e9f886f..d8944c1c28d5 100644 --- a/code/modules/shuttle/spaceship_navigation_beacon.dm +++ b/code/modules/shuttle/spaceship_navigation_beacon.dm @@ -29,7 +29,8 @@ obj/machinery/spaceship_navigation_beacon/emp_act() return ..() // update the icon_state -/obj/machinery/spaceship_navigation_beacon/update_icon() +/obj/machinery/spaceship_navigation_beacon/update_appearance(updates = ALL) + . = ..() if(powered()) icon_state = "core" else @@ -37,7 +38,7 @@ obj/machinery/spaceship_navigation_beacon/emp_act() /obj/machinery/spaceship_navigation_beacon/power_change() . = ..() - update_icon() + update_appearance(updates = ALL) /obj/machinery/spaceship_navigation_beacon/multitool_act(mob/living/user, obj/item/multitool/I) if(panel_open) diff --git a/code/modules/shuttle/special.dm b/code/modules/shuttle/special.dm index d4564362a1e9..3a22ffbf99cf 100644 --- a/code/modules/shuttle/special.dm +++ b/code/modules/shuttle/special.dm @@ -19,9 +19,10 @@ . = ..() if(prob(50)) desc = "Oh no, not again." - update_icon() + update_appearance(updates = ALL) -/obj/machinery/power/emitter/energycannon/magical/update_icon() +/obj/machinery/power/emitter/energycannon/magical/update_appearance(updates = ALL) + . = ..() if(active) icon_state = icon_state_on else @@ -39,7 +40,7 @@ visible_message("\ [src] closes its eyes.") active = FALSE - update_icon() + update_appearance(updates = ALL) /obj/machinery/power/emitter/energycannon/magical/attackby(obj/item/W, mob/user, params) return diff --git a/code/modules/spells/spell_types/self/disguise.dm b/code/modules/spells/spell_types/self/disguise.dm index ee058be5eda4..aea08aac0d87 100644 --- a/code/modules/spells/spell_types/self/disguise.dm +++ b/code/modules/spells/spell_types/self/disguise.dm @@ -53,7 +53,7 @@ C.icon_state = target.icon_state C.cut_overlays() C.add_overlay(target.get_overlays_copy(list(HANDS_LAYER))) - C.update_inv_hands() + C.update_held_items() log_game("[C.name] has disguised as [target.name]!") is_disguised = TRUE addtimer(CALLBACK(src, PROC_REF(undocloak), C), (40 SECONDS + (spell_level * 3))) //Sets it up so this is unchanged on default level, and goes up per level invested. diff --git a/code/modules/spells/spell_types/self/summonitem.dm b/code/modules/spells/spell_types/self/summonitem.dm index 26d960eb4038..cb2b255c9e40 100644 --- a/code/modules/spells/spell_types/self/summonitem.dm +++ b/code/modules/spells/spell_types/self/summonitem.dm @@ -125,7 +125,7 @@ if(istype(retrieved_item, /obj/machinery/portable_atmospherics)) var/obj/machinery/portable_atmospherics/atmos_item = retrieved_item atmos_item.disconnect() - atmos_item.update_icon() + atmos_item.update_appearance(updates = ALL) // Otherwise bring the whole thing with us item_to_retrieve = retrieved_item diff --git a/code/modules/spells/spell_types/touch/_touch.dm b/code/modules/spells/spell_types/touch/_touch.dm index 7f37068be5ac..05f56d952c15 100644 --- a/code/modules/spells/spell_types/touch/_touch.dm +++ b/code/modules/spells/spell_types/touch/_touch.dm @@ -322,7 +322,7 @@ icon = 'icons/obj/wizard.dmi' lefthand_file = 'icons/mob/inhands/misc/touchspell_lefthand.dmi' righthand_file = 'icons/mob/inhands/misc/touchspell_righthand.dmi' - icon_state = "latexballon" + icon_state = "latexballoon" item_state = null item_flags = NEEDS_PERMIT | ABSTRACT | HAND_ITEM w_class = WEIGHT_CLASS_HUGE diff --git a/code/modules/surgery/anesthesia_machine.dm b/code/modules/surgery/anesthesia_machine.dm index 8fb1b92fac3b..bd8ea6a475a7 100644 --- a/code/modules/surgery/anesthesia_machine.dm +++ b/code/modules/surgery/anesthesia_machine.dm @@ -20,9 +20,10 @@ if(is_roundstart) var/obj/item/tank/T = new /obj/item/tank/internals/anesthetic(src) attached_tank = T - update_icon() + update_appearance(updates = ALL) -/obj/machinery/anesthetic_machine/update_icon() +/obj/machinery/anesthetic_machine/update_appearance(updates = ALL) + . = ..() cut_overlays() if(mask_out) add_overlay("mask_off") @@ -44,7 +45,7 @@ I.forceMove(src) // Put new tank in, set it as attached tank visible_message("[user] inserts [I] into [src].") attached_tank = I - update_icon() + update_appearance(updates = ALL) return . = ..() @@ -54,7 +55,7 @@ attached_tank.forceMove(loc) to_chat(user, "You remove the [attached_tank].") attached_tank = null - update_icon() + update_appearance(updates = ALL) if(mask_out) retract_mask() @@ -67,7 +68,7 @@ else attached_mask.forceMove(src) mask_out = FALSE - update_icon() + update_appearance(updates = ALL) return TRUE return FALSE @@ -87,7 +88,7 @@ target.open_internals(attached_tank, TRUE) mask_out = TRUE START_PROCESSING(SSmachines, src) - update_icon() + update_appearance(updates = ALL) else to_chat(usr, "[mask_out ? "The machine is already in use!" : "The machine has no attached tank!"]") diff --git a/code/modules/surgery/bodyparts/dismemberment.dm b/code/modules/surgery/bodyparts/dismemberment.dm index c591bf219261..46849132c55e 100644 --- a/code/modules/surgery/bodyparts/dismemberment.dm +++ b/code/modules/surgery/bodyparts/dismemberment.dm @@ -231,7 +231,7 @@ if(C.hud_used) var/atom/movable/screen/inventory/hand/R = C.hud_used.hand_slots["[held_index]"] if(R) - R.update_icon() + R.update_appearance(updates = ALL) if(C.gloves) C.dropItemToGround(C.gloves, TRUE) C.update_inv_gloves() //to remove the bloody hands overlay @@ -249,7 +249,7 @@ if(C.hud_used) var/atom/movable/screen/inventory/hand/L = C.hud_used.hand_slots["[held_index]"] if(L) - L.update_icon() + L.update_appearance(updates = ALL) if(C.gloves) C.dropItemToGround(C.gloves, TRUE) C.update_inv_gloves() //to remove the bloody hands overlay @@ -334,7 +334,7 @@ if(C.hud_used) var/atom/movable/screen/inventory/hand/hand = C.hud_used.hand_slots["[held_index]"] if(hand) - hand.update_icon() + hand.update_appearance(updates = ALL) C.update_inv_gloves() if(special) //non conventional limb attachment diff --git a/code/modules/surgery/bodyparts/parts.dm b/code/modules/surgery/bodyparts/parts.dm index 199aeffaae44..dd3c9e99a433 100644 --- a/code/modules/surgery/bodyparts/parts.dm +++ b/code/modules/surgery/bodyparts/parts.dm @@ -124,7 +124,7 @@ if(owner.hud_used) var/atom/movable/screen/inventory/hand/L = owner.hud_used.hand_slots["[held_index]"] if(L) - L.update_icon() + L.update_appearance(updates = ALL) /obj/item/bodypart/l_arm/monkey icon = 'icons/mob/animal_parts.dmi' @@ -219,7 +219,7 @@ if(owner.hud_used) var/atom/movable/screen/inventory/hand/R = owner.hud_used.hand_slots["[held_index]"] if(R) - R.update_icon() + R.update_appearance(updates = ALL) /obj/item/bodypart/r_arm/monkey icon = 'icons/mob/animal_parts.dmi' diff --git a/code/modules/surgery/implant_removal.dm b/code/modules/surgery/implant_removal.dm index 502e94bb786b..402f01ffc6b1 100644 --- a/code/modules/surgery/implant_removal.dm +++ b/code/modules/surgery/implant_removal.dm @@ -68,7 +68,7 @@ return TRUE case.imp.implant(target, user) case.imp = null - case.update_icon() + case.update_appearance(updates = ALL) display_results(user, target, span_notice("You implant \the [I] into [target]'s [parse_zone(target_zone)]."), "[user] implants \the [I] into [target]'s [parse_zone(target_zone)]!", "[user] inserts something into [target]'s [parse_zone(target_zone)]!") @@ -92,7 +92,7 @@ if(case && !case.imp) case.imp = I I.forceMove(case) - case.update_icon() + case.update_appearance(updates = ALL) display_results(user, target, span_notice("You place [I] into [case]."), "[user] places [I] into [case]!", "[user] places it into [case]!") diff --git a/code/modules/surgery/organs/appendix.dm b/code/modules/surgery/organs/appendix.dm index dad5d62f72ca..e0ca3414422a 100644 --- a/code/modules/surgery/organs/appendix.dm +++ b/code/modules/surgery/organs/appendix.dm @@ -10,7 +10,8 @@ now_fixed = span_info("The pain in your abdomen has subsided.") var/inflamed -/obj/item/organ/appendix/update_icon() +/obj/item/organ/appendix/update_appearance(updates = ALL) + . = ..() if(inflamed) icon_state = "appendixinflamed" name = "inflamed appendix" @@ -30,7 +31,7 @@ for(var/datum/disease/appendicitis/A in M.diseases) A.cure() inflamed = TRUE - update_icon() + update_appearance(updates = ALL) ..() /obj/item/organ/appendix/Insert(mob/living/carbon/M, special = 0) @@ -64,7 +65,8 @@ inflamed = FALSE M.emote("chuckle") //you really think that will stop me? -/obj/item/organ/appendix/cybernetic/update_icon() +/obj/item/organ/appendix/cybernetic/update_appearance(updates = ALL) + . = ..() icon_state = "implant-filter" name = "cybernetic appendix" diff --git a/code/modules/surgery/organs/augment_legs.dm b/code/modules/surgery/organs/augment_legs.dm index 5fa0ea931ed0..b394e4909dd5 100644 --- a/code/modules/surgery/organs/augment_legs.dm +++ b/code/modules/surgery/organs/augment_legs.dm @@ -11,7 +11,7 @@ /obj/item/organ/cyberimp/leg/Initialize(mapload) . = ..() - update_icon() + update_appearance(updates = ALL) SetSlotFromZone() /obj/item/organ/cyberimp/leg/emp_act(severity) @@ -59,7 +59,8 @@ else CRASH("Invalid zone for [type]") -/obj/item/organ/cyberimp/leg/update_icon() +/obj/item/organ/cyberimp/leg/update_appearance(updates = ALL) + . = ..() if(zone == BODY_ZONE_R_LEG) transform = null else // Mirroring the icon @@ -81,7 +82,7 @@ zone = BODY_ZONE_R_LEG SetSlotFromZone() to_chat(user, span_notice("You modify [src] to be installed on the [zone == BODY_ZONE_R_LEG ? "right" : "left"] leg.")) - update_icon() + update_appearance(updates = ALL) /obj/item/organ/cyberimp/leg/emp_act(severity) . = ..() diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm index c45e71e971ed..2be146204fa6 100644 --- a/code/modules/surgery/organs/augments_arms.dm +++ b/code/modules/surgery/organs/augments_arms.dm @@ -18,7 +18,7 @@ if(ispath(holder)) holder = new holder(src) - update_icon() + update_appearance(updates = ALL) SetSlotFromZone() items_list = contents.Copy() @@ -33,7 +33,8 @@ return FALSE return TRUE -/obj/item/organ/cyberimp/arm/update_icon() +/obj/item/organ/cyberimp/arm/update_appearance(updates = ALL) + . = ..() if(zone == BODY_ZONE_R_ARM) transform = null else // Mirroring the icon @@ -53,7 +54,7 @@ zone = BODY_ZONE_R_ARM if(SetSlotFromZone()) I.play_tool_sound(src) - update_icon() + update_appearance(UPDATE_ICON) to_chat(user, span_notice("You modify [src] to be installed on the [zone == BODY_ZONE_R_ARM ? "right" : "left"] arm.")) else to_chat(user, span_warning("[src] cannot be modified!")) @@ -327,7 +328,7 @@ tool_behaviour = active_tool.tool_behaviour lefthand_file = active_tool.lefthand_file righthand_file = active_tool.righthand_file - linkedarm.owner.update_inv_hands() + linkedarm.owner.update_held_items() plane = 22 /obj/item/toolset_handler/attack_self(mob/user) diff --git a/code/modules/surgery/organs/augments_chest.dm b/code/modules/surgery/organs/augments_chest.dm index 8e8318edfab1..15153dbfb727 100644 --- a/code/modules/surgery/organs/augments_chest.dm +++ b/code/modules/surgery/organs/augments_chest.dm @@ -169,9 +169,10 @@ if(!silent) to_chat(owner, span_notice("You turn your thrusters set off.")) on = FALSE - update_icon() + update_appearance(updates = ALL) -/obj/item/organ/cyberimp/chest/thrusters/update_icon() +/obj/item/organ/cyberimp/chest/thrusters/update_appearance(updates = ALL) + . = ..() if(on) icon_state = "imp_jetpack-on" else @@ -275,9 +276,10 @@ on = !on if(!silent) to_chat(owner, span_notice("You turn your spinal implant [on? "on" : "off"].")) - update_icon() + update_appearance(updates = ALL) -/obj/item/organ/cyberimp/chest/spinalspeed/update_icon() +/obj/item/organ/cyberimp/chest/spinalspeed/update_appearance(updates = ALL) + . = ..() if(on) icon_state = "imp_spinal-on" else diff --git a/code/modules/surgery/organs/autosurgeon.dm b/code/modules/surgery/organs/autosurgeon.dm index ef4d029470ef..eef26953fdfb 100644 --- a/code/modules/surgery/organs/autosurgeon.dm +++ b/code/modules/surgery/organs/autosurgeon.dm @@ -41,7 +41,7 @@ if(user.getorganslot(bastard.slot)) //NEVERMIND WE ARE NOT BALLING bastard.zone = original_zone //MISSION ABORT bastard.SetSlotFromZone() - bastard.update_icon() + bastard.update_appearance(updates = ALL) storedorgan.Insert(user)//insert stored organ into the user user.visible_message(span_notice("[user] presses a button on [src], and you hear a short mechanical noise."), span_notice("You feel a sharp sting as [src] plunges into your body.")) playsound(get_turf(user), 'sound/weapons/circsawhit.ogg', 50, 1) @@ -148,7 +148,7 @@ implant.zone = BODY_ZONE_R_ARM to_chat(user, span_notice("You change the autosurgeon to target the right arm.")) implant.SetSlotFromZone() - implant.update_icon() //If for whatever reason, the implant is removed from the autosurgeon after it's switched + implant.update_appearance(updates = ALL) //If for whatever reason, the implant is removed from the autosurgeon after it's switched /obj/item/autosurgeon/arm/syndicate/syndie_mantis uses = 1 @@ -325,7 +325,7 @@ if(user.getorganslot(bastard.slot)) //NEVERMIND WE ARE NOT BALLING bastard.zone = original_zone //MISSION ABORT bastard.SetSlotFromZone() - bastard.update_icon() + bastard.update_appearance(updates = ALL) toimplant.Insert(user)//insert stored organ into the user user.visible_message(span_notice("[user] presses a button on [src], and you hear a short mechanical noise."), span_notice("You feel a sharp sting as [src] plunges into your body.")) playsound(get_turf(user), 'sound/weapons/circsawhit.ogg', 50, 1) diff --git a/code/modules/surgery/organs/heart.dm b/code/modules/surgery/organs/heart.dm index 434931c55e1b..02c807094db4 100644 --- a/code/modules/surgery/organs/heart.dm +++ b/code/modules/surgery/organs/heart.dm @@ -24,9 +24,10 @@ /obj/item/organ/heart/Initialize(mapload) . = ..() icon_base = icon_state - update_icon() + update_appearance(updates = ALL) -/obj/item/organ/heart/update_icon() +/obj/item/organ/heart/update_appearance(updates = ALL) + . = ..() if(beating) icon_state = "[icon_base]-on" else @@ -51,12 +52,12 @@ /obj/item/organ/heart/proc/Stop() beating = 0 - update_icon() + update_appearance(updates = ALL) return TRUE /obj/item/organ/heart/proc/Restart() beating = 1 - update_icon() + update_appearance(updates = ALL) return TRUE /obj/item/organ/heart/prepare_eat() diff --git a/code/modules/surgery/organs/tongue.dm b/code/modules/surgery/organs/tongue.dm index 4805c86b9360..c4d1a6a16f67 100644 --- a/code/modules/surgery/organs/tongue.dm +++ b/code/modules/surgery/organs/tongue.dm @@ -39,7 +39,7 @@ . = ..() languages_possible = languages_possible_base -/obj/item/organ/tongue/update_icon() +/obj/item/organ/tongue/update_appearance(updates = ALL) . = ..() if(honked) // This tongue has a bike horn inside of it. Let's draw it add_overlay("honked") @@ -75,7 +75,7 @@ /obj/item/organ/tongue/Initialize(mapload) // this only exists to make sure the spawned tongue has a horn inside of it visually . = ..() - update_icon() + update_appearance(updates = ALL) /obj/item/organ/tongue/examine(mob/user) . = ..() diff --git a/code/modules/vehicles/motorized_wheelchair.dm b/code/modules/vehicles/motorized_wheelchair.dm index ee690b5b5806..7c2c86a77aa6 100644 --- a/code/modules/vehicles/motorized_wheelchair.dm +++ b/code/modules/vehicles/motorized_wheelchair.dm @@ -33,7 +33,7 @@ var/mob/living/L = A L.update_mobility() if(power_cell) - power_cell.update_icon() + power_cell.update_appearance(updates = ALL) refresh_parts() /obj/vehicle/ridden/wheelchair/motorized/obj_destruction(damage_flag) @@ -75,7 +75,7 @@ /obj/vehicle/ridden/wheelchair/motorized/attack_hand(mob/living/user) if(power_cell && panel_open) - power_cell.update_icon() + power_cell.update_appearance(updates = ALL) user.put_in_hands(power_cell) to_chat(user, span_notice("You remove the [power_cell] from [src].")) power_cell = null diff --git a/code/modules/vehicles/pimpin_ride.dm b/code/modules/vehicles/pimpin_ride.dm index e174ffc33cb4..876edecd4b59 100644 --- a/code/modules/vehicles/pimpin_ride.dm +++ b/code/modules/vehicles/pimpin_ride.dm @@ -9,7 +9,7 @@ /obj/vehicle/ridden/janicart/Initialize(mapload) . = ..() - update_icon() + update_appearance(updates = ALL) var/datum/component/riding/D = LoadComponent(/datum/component/riding) D.set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0, 4), TEXT_SOUTH = list(0, 7), TEXT_EAST = list(-12, 7), TEXT_WEST = list( 12, 7))) @@ -42,7 +42,7 @@ return to_chat(user, span_notice("You hook the trashbag onto [src].")) mybag = I - update_icon() + update_appearance(updates = ALL) else if(istype(I, /obj/item/janiupgrade)) if(floorbuffer) to_chat(user, span_warning("[src] already has a floor buffer!")) @@ -51,11 +51,12 @@ qdel(I) to_chat(user, span_notice("You upgrade [src] with the floor buffer.")) AddElement(/datum/element/cleaning) - update_icon() + update_appearance(updates = ALL) else return ..() -/obj/vehicle/ridden/janicart/update_icon() +/obj/vehicle/ridden/janicart/update_appearance(updates = ALL) + . = ..() cut_overlays() if(mybag) add_overlay("cart_garbage") @@ -70,7 +71,7 @@ mybag.forceMove(get_turf(user)) user.put_in_hands(mybag) mybag = null - update_icon() + update_appearance(updates = ALL) /obj/vehicle/ridden/janicart/upgraded floorbuffer = TRUE diff --git a/code/modules/vending/_vending.dm b/code/modules/vending/_vending.dm index ae1970316efb..22268c0930df 100644 --- a/code/modules/vending/_vending.dm +++ b/code/modules/vending/_vending.dm @@ -265,7 +265,8 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C else ..() -/obj/machinery/vending/update_icon() +/obj/machinery/vending/update_appearance(updates = ALL) + . = ..() if(stat & BROKEN) icon_state = "[initial(icon_state)]-broken" else @@ -973,7 +974,7 @@ GLOBAL_LIST_EMPTY(vending_products) else stat |= NOPOWER - update_icon() + update_appearance(updates = ALL) //Somebody cut an important wire and now we're following a new definition of "pitch." /** diff --git a/code/modules/vending/security_armaments.dm b/code/modules/vending/security_armaments.dm index 4c7d2ceb86a1..5c8bda2a8a07 100644 --- a/code/modules/vending/security_armaments.dm +++ b/code/modules/vending/security_armaments.dm @@ -82,7 +82,7 @@ var/list/items = list() for(var/obj/item/wep in inventory) var/obj/item/gun/weapon = wep - weapon.update_icon(TRUE) + weapon.update_appearance(UPDATE_ICON, TRUE) var/icon/gun_icon = getFlatIcon(wep) var/list/details = list() diff --git a/icons/obj/doors/doorfire.dmi b/icons/obj/doors/doorfire.dmi index 3b9f05cfa321..34c19dbb56ed 100644 Binary files a/icons/obj/doors/doorfire.dmi and b/icons/obj/doors/doorfire.dmi differ diff --git a/icons/obj/mining.dmi b/icons/obj/mining.dmi index f5c8325c1721..7f817d663dd5 100644 Binary files a/icons/obj/mining.dmi and b/icons/obj/mining.dmi differ diff --git a/icons/obj/toy.dmi b/icons/obj/toy.dmi index 2c488ee01b26..14fcc758d611 100644 Binary files a/icons/obj/toy.dmi and b/icons/obj/toy.dmi differ diff --git a/tgui/docs/tutorial-and-examples.md b/tgui/docs/tutorial-and-examples.md index 3dba803c959a..b88c157cf84a 100644 --- a/tgui/docs/tutorial-and-examples.md +++ b/tgui/docs/tutorial-and-examples.md @@ -84,7 +84,7 @@ input. The input's `action` and `params` are passed to the proc. return FALSE color = new_color . = TRUE - update_icon() + update_appearance(updates = ALL) ``` The `..()` (parent call) is very important here, as it is how we check that the @@ -312,7 +312,7 @@ upon code review): // A demo of proper input sanitation. var = CLAMP(newvar, min_val, max_val) . = TRUE - update_icon() // Not applicable to all objects. + update_appearance(updates = ALL) // Not applicable to all objects. ``` And the template: diff --git a/yogstation.dme b/yogstation.dme index d6ca39b8e2e2..2df7c7cd33eb 100644 --- a/yogstation.dme +++ b/yogstation.dme @@ -641,6 +641,7 @@ #include "code\datums\elements\earhealing.dm" #include "code\datums\elements\firestacker.dm" #include "code\datums\elements\squish.dm" +#include "code\datums\elements\update_icon_blocker.dm" #include "code\datums\helper_datums\events.dm" #include "code\datums\helper_datums\getrev.dm" #include "code\datums\helper_datums\icon_snapshot.dm" diff --git a/yogstation/code/_globalvars/lists/maintenance_loot.dm b/yogstation/code/_globalvars/lists/maintenance_loot.dm index 571dbb257649..7df68e34ee9c 100644 --- a/yogstation/code/_globalvars/lists/maintenance_loot.dm +++ b/yogstation/code/_globalvars/lists/maintenance_loot.dm @@ -317,7 +317,7 @@ GLOBAL_LIST_INIT(maintenance_loot_traditional,list( /obj/item/instrument/violin = W_RARE, /obj/item/kitchen/fork = W_UNCOMMON, /obj/item/laser_pointer = W_UNCOMMON, - /obj/item/latexballon = W_UNCOMMON, + /obj/item/latexballoon = W_UNCOMMON, /obj/item/lighter = W_RARE, /obj/item/lighter/greyscale = W_UNCOMMON, /obj/item/lipstick/random = W_UNCOMMON, diff --git a/yogstation/code/controllers/subsystem/bluespace_locker.dm b/yogstation/code/controllers/subsystem/bluespace_locker.dm index e54b407ef0c0..66b8f89d3920 100644 --- a/yogstation/code/controllers/subsystem/bluespace_locker.dm +++ b/yogstation/code/controllers/subsystem/bluespace_locker.dm @@ -65,8 +65,8 @@ SUBSYSTEM_DEF(bluespace_locker) internal_locker.contents += external_locker.contents internal_locker.open() internal_locker.dump_contents() - internal_locker.update_icon() - external_locker.update_icon() + internal_locker.update_appearance(updates = ALL) + external_locker.update_appearance(updates = ALL) /datum/controller/subsystem/bluespace_locker/proc/redistribute_locker() if(!internal_locker) diff --git a/yogstation/code/controllers/subsystem/yogs.dm b/yogstation/code/controllers/subsystem/yogs.dm index 2c2903a81988..f9efc250d1ec 100644 --- a/yogstation/code/controllers/subsystem/yogs.dm +++ b/yogstation/code/controllers/subsystem/yogs.dm @@ -125,7 +125,7 @@ SUBSYSTEM_DEF(Yogs) for(var/datum/department_goal/d in listOfGoals[account]) P.info += d.get_name() P.info += "
    " - P.update_icon() + P.update_appearance(updates = ALL) else var/obj/item/paper/P = new /obj/item/paper(C.loc) @@ -135,7 +135,7 @@ SUBSYSTEM_DEF(Yogs) if(d.account == account) P.info += d.get_name() P.info += "" - P.update_icon() + P.update_appearance(updates = ALL) for(var/path in subtypesof(/datum/corporation)) diff --git a/yogstation/code/game/gamemodes/darkspawn/darkspawn_hud.dm b/yogstation/code/game/gamemodes/darkspawn/darkspawn_hud.dm index 13890fcc370e..553f99906dd7 100644 --- a/yogstation/code/game/gamemodes/darkspawn/darkspawn_hud.dm +++ b/yogstation/code/game/gamemodes/darkspawn/darkspawn_hud.dm @@ -3,13 +3,13 @@ /datum/hud/New(mob/owner, ui_style = 'icons/mob/screen_midnight.dmi') . = ..() - psi_counter = new /atom/movable/screen/darkspawn_psi + psi_counter = new /atom/movable/screen/darkspawn_psi(src) /datum/hud/human/New(mob/living/carbon/human/owner, ui_style = 'icons/mob/screen_midnight.dmi') . = ..() - psi_counter = new /atom/movable/screen/darkspawn_psi + psi_counter = new /atom/movable/screen/darkspawn_psi(src) infodisplay += psi_counter /datum/hud/Destroy() . = ..() - psi_counter = null \ No newline at end of file + psi_counter = null diff --git a/yogstation/code/game/gamemodes/gangs/dominator.dm b/yogstation/code/game/gamemodes/gangs/dominator.dm index 142aba7a87d0..133ba8ad08c0 100644 --- a/yogstation/code/game/gamemodes/gangs/dominator.dm +++ b/yogstation/code/game/gamemodes/gangs/dominator.dm @@ -28,7 +28,7 @@ spark_system = new spark_system.set_up(5, TRUE, src) countdown = new(src) - update_icon() + update_appearance(updates = ALL) .=..() /obj/machinery/dominator/Destroy() @@ -54,7 +54,8 @@ /obj/machinery/dominator/tesla_act() qdel(src) -/obj/machinery/dominator/update_icon() +/obj/machinery/dominator/update_appearance(updates = ALL) + . = ..() cut_overlays() if(!(stat & BROKEN)) icon_state = "dominator-active" @@ -137,7 +138,7 @@ spark_system.start() else if(!(stat & BROKEN)) spark_system.start() - update_icon() + update_appearance(updates = ALL) /obj/machinery/dominator/obj_break(damage_flag) @@ -196,7 +197,7 @@ SSshuttle.registerHostileEnvironment(src) name = "[gang.name] Gang [name]" operating = TRUE - update_icon() + update_appearance(updates = ALL) countdown.color = gang.color countdown.start() @@ -244,7 +245,7 @@ set_light(0) operating = FALSE stat |= BROKEN - update_icon() + update_appearance(updates = ALL) STOP_PROCESSING(SSmachines, src) if(nukedisk) nukedisk.forceMove(drop_location()) diff --git a/yogstation/code/game/gamemodes/gangs/gangtool.dm b/yogstation/code/game/gamemodes/gangs/gangtool.dm index f26843e72475..3bf7e5b41780 100644 --- a/yogstation/code/game/gamemodes/gangs/gangtool.dm +++ b/yogstation/code/game/gamemodes/gangs/gangtool.dm @@ -21,7 +21,7 @@ var/list/tags = list() /obj/item/gangtool/Initialize(mapload) - update_icon() + update_appearance(updates = ALL) if(buyable_items.len) return ..() for(var/i in subtypesof(/datum/gang_item)) @@ -138,7 +138,8 @@ recall(usr) attack_self(usr) -/obj/item/gangtool/update_icon() +/obj/item/gangtool/update_appearance(updates = ALL) + . = ..() overlays.Cut() var/image/I = new(icon, "[icon_state]-overlay") if(gang) @@ -174,7 +175,7 @@ if(G) gang = G.gang gang.gangtools += src - update_icon() + update_appearance(updates = ALL) if(!(user.mind in gang.leaders) && promotable) G.promote() free_pen = TRUE diff --git a/yogstation/code/game/gamemodes/vampire/vampire_hud.dm b/yogstation/code/game/gamemodes/vampire/vampire_hud.dm index c1bbbefae04c..f43b025c1d78 100644 --- a/yogstation/code/game/gamemodes/vampire/vampire_hud.dm +++ b/yogstation/code/game/gamemodes/vampire/vampire_hud.dm @@ -3,13 +3,13 @@ /datum/hud/New(mob/owner, ui_style = 'icons/mob/screen_midnight.dmi') . = ..() - vamp_blood_display = new /atom/movable/screen/vampire() + vamp_blood_display = new /atom/movable/screen/vampire(src) /datum/hud/human/New(mob/living/carbon/human/owner, ui_style = 'icons/mob/screen_midnight.dmi') . = ..() - vamp_blood_display = new /atom/movable/screen/vampire() + vamp_blood_display = new /atom/movable/screen/vampire(src) infodisplay += vamp_blood_display /datum/hud/Destroy() . = ..() - vamp_blood_display = null \ No newline at end of file + vamp_blood_display = null diff --git a/yogstation/code/game/mecha/makeshift/lockermech.dm b/yogstation/code/game/mecha/makeshift/lockermech.dm index 2bd3abe045a4..0c16252b0e45 100644 --- a/yogstation/code/game/mecha/makeshift/lockermech.dm +++ b/yogstation/code/game/mecha/makeshift/lockermech.dm @@ -26,11 +26,11 @@ /obj/mecha/working/makeshift/go_out() ..() - update_icon() + update_appearance(updates = ALL) /obj/mecha/working/makeshift/moved_inside(mob/living/carbon/human/H) ..() - update_icon() + update_appearance(updates = ALL) /obj/mecha/working/makeshift/Exit(atom/movable/O) diff --git a/yogstation/code/game/objects/items/brace.dm b/yogstation/code/game/objects/items/brace.dm index b8ec8cbadaa4..3e94576a18fe 100644 --- a/yogstation/code/game/objects/items/brace.dm +++ b/yogstation/code/game/objects/items/brace.dm @@ -23,8 +23,8 @@ var/obj/machinery/door/airlock/placed_on var/cover_open = FALSE -/obj/structure/deployed_brace/update_icon() - ..() +/obj/structure/deployed_brace/update_appearance(updates = ALL) + . = ..() cut_overlays() if(cover_open) add_overlay("cover_open") @@ -53,7 +53,7 @@ cover_open = !cover_open tool.play_tool_sound(src) to_chat(user, span_notice("You [cover_open ? "open" : "close"] the cover.")) - update_icon() + update_appearance(updates = ALL) /obj/structure/deployed_brace/wrench_act(mob/user, obj/item/tool) if(get_dist(user, placed_on) > 1) diff --git a/yogstation/code/game/objects/items/crayons.dm b/yogstation/code/game/objects/items/crayons.dm index ddee748e0504..b134c20a4a65 100644 --- a/yogstation/code/game/objects/items/crayons.dm +++ b/yogstation/code/game/objects/items/crayons.dm @@ -88,7 +88,7 @@ if(G) gang = G paint_color = G.color - update_icon() + update_appearance(updates = ALL) /obj/item/toy/crayon/spraycan/gang/examine(mob/user) . = ..() diff --git a/yogstation/code/game/objects/items/fishing/rods.dm b/yogstation/code/game/objects/items/fishing/rods.dm index d007f0eab550..618f50acae0c 100644 --- a/yogstation/code/game/objects/items/fishing/rods.dm +++ b/yogstation/code/game/objects/items/fishing/rods.dm @@ -206,10 +206,11 @@ opened = !opened w_class = opened ? WEIGHT_CLASS_BULKY : WEIGHT_CLASS_SMALL playsound(src.loc, 'sound/machines/click.ogg', 50, TRUE) - update_icon() + update_appearance(updates = ALL) user.regenerate_icons() -/obj/item/twohanded/fishingrod/collapsible/update_icon() +/obj/item/twohanded/fishingrod/collapsible/update_appearance(updates = ALL) + . = ..() item_state = opened ? "fishing_rod" : "" icon_state = "[rod_icon_state][opened ? "" : "_c"]" diff --git a/yogstation/code/game/objects/items/holotool/holotool.dm b/yogstation/code/game/objects/items/holotool/holotool.dm index f85969bcfaf0..2516744b52bb 100644 --- a/yogstation/code/game/objects/items/holotool/holotool.dm +++ b/yogstation/code/game/objects/items/holotool/holotool.dm @@ -68,7 +68,7 @@ if(!C || QDELETED(src)) return current_color = C - update_icon() + update_appearance(updates = ALL) action.build_all_button_icons() user.regenerate_icons() @@ -80,7 +80,7 @@ current_tool = mode current_tool.on_set(src) playsound(loc, 'yogstation/sound/items/holotool.ogg', get_clamped_volume(), 1, -1) - update_icon() + update_appearance(updates = ALL) user.regenerate_icons() @@ -101,7 +101,8 @@ else qdel(M) -/obj/item/holotool/update_icon() +/obj/item/holotool/update_appearance(updates = ALL) + . = ..() cut_overlays() if(current_tool) var/mutable_appearance/holo_item = mutable_appearance(icon, current_tool.name) diff --git a/yogstation/code/game/objects/items/melee/energy.dm b/yogstation/code/game/objects/items/melee/energy.dm index 43adcdf8c2bb..89643257f457 100644 --- a/yogstation/code/game/objects/items/melee/energy.dm +++ b/yogstation/code/game/objects/items/melee/energy.dm @@ -7,7 +7,7 @@ if(active) icon_state = "sword[color]" - user.update_inv_hands() + user.update_held_items() else ..() diff --git a/yogstation/code/game/objects/items/premadepapers.dm b/yogstation/code/game/objects/items/premadepapers.dm index a8add201328f..8659cc91b426 100644 --- a/yogstation/code/game/objects/items/premadepapers.dm +++ b/yogstation/code/game/objects/items/premadepapers.dm @@ -24,7 +24,7 @@ written += new/datum/langtext("

    Reason: ",/datum/language/common) written += "" written += new/datum/langtext("

    Stamp Below if Approved",/datum/language/common) - update_icon() + update_appearance(updates = ALL) /** @@ -57,7 +57,7 @@ written += new/datum/langtext("

    Administrator Notes: ",/datum/language/common) written += "" written += new/datum/langtext("

    Stamp Below if Accepted:",/datum/language/common) - update_icon() + update_appearance(updates = ALL) /** * @@ -106,7 +106,7 @@ written += new/datum/langtext("
    ",/datum/language/common) written += new/datum/langtext("
    ",/datum/language/common) written += new/datum/langtext("Signed: ",/datum/language/common) - update_icon() + update_appearance(updates = ALL) /** * @@ -173,7 +173,7 @@ written += "" written += new/datum/langtext("

    ",/datum/language/common) written += new/datum/langtext("Reporting Officer's Signature:",/datum/language/common) - update_icon() + update_appearance(updates = ALL) /** * @@ -207,7 +207,7 @@ written += "" written += new/datum/langtext("
    ",/datum/language/common) written += new/datum/langtext("Stamp Below if Approved",/datum/language/common) - update_icon() + update_appearance(updates = ALL) /** @@ -243,7 +243,7 @@ written += new/datum/langtext("Signed, ",/datum/language/common) written += "" written += new/datum/langtext("
    Roboticist Notes:",/datum/language/common) - update_icon() + update_appearance(updates = ALL) /** * @@ -274,7 +274,7 @@ written += "" written += new/datum/langtext("
    ",/datum/language/common) written += new/datum/langtext("Stamp Below if Approved",/datum/language/common) - update_icon() + update_appearance(updates = ALL) /** * @@ -312,7 +312,7 @@ written += "" written += new/datum/langtext("
    ",/datum/language/common) written += new/datum/langtext("Stamp Below if Approved",/datum/language/common) - update_icon() + update_appearance(updates = ALL) /** * @@ -340,7 +340,7 @@ written += "" written += new/datum/langtext("


    ",/datum/language/common) written += new/datum/langtext("Stamp Below if Approved",/datum/language/common) - update_icon() + update_appearance(updates = ALL) //RD upgrade form not included because from personal experience if you don't upgrade stuff you will be lynched @@ -372,7 +372,7 @@ written += new/datum/langtext("

    Signed, ",/datum/language/common) written += "" written += new/datum/langtext("


    Stamp Below if Approved",/datum/language/common) - update_icon() + update_appearance(updates = ALL) /** * @@ -403,7 +403,7 @@ written += "" written += new/datum/langtext("
    Stamp:",/datum/language/common) written += new/datum/langtext("",/datum/language/common) - update_icon() + update_appearance(updates = ALL) /** * @@ -476,7 +476,7 @@ written += "" written += new/datum/langtext(", hereby acknowledge that I have answered this test's questions to the best of my ability, and acknowledge that if I fail this test, a penalty to be determined may be applied to me.
    ",/datum/language/common) written += new/datum/langtext("Test Administrator: ",/datum/language/common) - update_icon() + update_appearance(updates = ALL) /** * @@ -501,7 +501,7 @@ written += new/datum/langtext("4. Who is the CEO of Nanotrasen? Answer below. Theo Deimi
    ",/datum/language/common) written += new/datum/langtext("5. From the following letters, Z V B D M K T P H S Y C, which 2, in order, come last in the alphabet? YZ
    ",/datum/language/common) written += new/datum/langtext("
    TOP SECRET - Command Eyes Only
    ",/datum/language/common) - update_icon() + update_appearance(updates = ALL) // How to perform autopsy @@ -514,7 +514,7 @@ written += new/datum/langtext("Step 1: Apply drapes to the chest and select Autopsy.
    ",/datum/language/common) written += new/datum/langtext("Step 2: Incise the chest with a scalpel.
    ",/datum/language/common) written += new/datum/langtext("Step 3: While holding a forensic scanner in your off-hand, perform the autopsy using the scalpel again.
    ",/datum/language/common) - update_icon() + update_appearance(updates = ALL) //academy ruin papers @@ -551,7 +551,7 @@ written += new/datum/langtext("To: Recruiter Billy the Lame
    ",/datum/language/common) written += new/datum/langtext("Bill, where the heck did you find this guy? Are you sure he's wizard material..? He st--te-s a-lot. He's a -tink-ng l-zard--
    ",/datum/language/common) written += new/datum/langtext("The rest of the paper is charred...",/datum/language/common) - update_icon() + update_appearance(updates = ALL) @@ -606,7 +606,7 @@ new /obj/item/paper/paperwork/incident_report(src) new /obj/item/paper/paperwork/literacytest(src) toppaper = contents[contents.len] - update_icon() + update_appearance(updates = ALL) /** * Initializes the Head of Security's clipboard. @@ -633,7 +633,7 @@ for (var/i in 1 to 10) new /obj/item/paper/paperwork/sec_incident_report(src) toppaper = contents[contents.len] - update_icon() + update_appearance(updates = ALL) /** * Initializes the Captain's clipboard. @@ -658,7 +658,7 @@ new /obj/item/paper/paperwork/literacytest(src) new /obj/item/paper/paperwork/literacytest/answers(src) toppaper = contents[contents.len] - update_icon() + update_appearance(updates = ALL) /** * Initializes the Head of Personnels clipboard. @@ -685,7 +685,7 @@ new /obj/item/paper/paperwork/literacytest(src) new /obj/item/paper/paperwork/literacytest/answers(src) toppaper = contents[contents.len] - update_icon() + update_appearance(updates = ALL) /** * Initializes the Warden's clipboard. @@ -709,7 +709,7 @@ for (var/i in 1 to 10) new /obj/item/paper/paperwork/sec_incident_report(src) toppaper = contents[contents.len] - update_icon() + update_appearance(updates = ALL) /** * Initializes the Chief Engineer's clipboard. @@ -732,7 +732,7 @@ new /obj/item/paper/paperwork/hopaccessrequestform(src) new /obj/item/paper/paperwork/incident_report(src) toppaper = contents[contents.len] - update_icon() + update_appearance(updates = ALL) /** * Initializes the Chief Medical Officer's clipboard. @@ -755,7 +755,7 @@ new /obj/item/paper/paperwork/hopaccessrequestform(src) new /obj/item/paper/paperwork/incident_report(src) toppaper = contents[contents.len] - update_icon() + update_appearance(updates = ALL) /** * Initializes security officer clipboards. @@ -771,7 +771,7 @@ for (var/i in 1 to 10) new /obj/item/paper/paperwork/incident_report(src) toppaper = contents[contents.len] - update_icon() + update_appearance(updates = ALL) /** * Initializes the admin variant clipboard. @@ -808,5 +808,5 @@ new /obj/item/paper/paperwork/literacytest(src) new /obj/item/paper/paperwork/literacytest/answers(src) toppaper = contents[contents.len] - update_icon() + update_appearance(updates = ALL) //turdis bad diff --git a/yogstation/code/game/objects/items/sharpener.dm b/yogstation/code/game/objects/items/sharpener.dm index e30c0094ec3b..3b05c683ea47 100644 --- a/yogstation/code/game/objects/items/sharpener.dm +++ b/yogstation/code/game/objects/items/sharpener.dm @@ -1,2 +1,3 @@ -/obj/item/sharpener/update_icon() - icon_state = "[initial(icon_state)]_used" +/obj/item/sharpener/update_appearance(updates = ALL) + . = ..() + icon_state = "[initial(icon_state)]_used" diff --git a/yogstation/code/game/objects/items/tool_switcher.dm b/yogstation/code/game/objects/items/tool_switcher.dm index 119575a3914d..029336dcd2b6 100644 --- a/yogstation/code/game/objects/items/tool_switcher.dm +++ b/yogstation/code/game/objects/items/tool_switcher.dm @@ -113,7 +113,7 @@ current_tool = T if(istype(loc, /mob)) var/mob/M = loc - M.update_inv_hands() + M.update_held_items() /obj/item/storage/belt/tool_switcher/proc/switch_tool_index(I) if(!current_program || I > current_program.tools_list.len || I < 1) diff --git a/yogstation/code/game/objects/items/tools.dm b/yogstation/code/game/objects/items/tools.dm index cde82f097b5b..03236cdea87f 100644 --- a/yogstation/code/game/objects/items/tools.dm +++ b/yogstation/code/game/objects/items/tools.dm @@ -66,7 +66,7 @@ to_chat(user,span_notice("Your servos whirr as the cutting head reconfigures into a prying head.")) else to_chat(user, span_notice("You attach the pry jaws to [src].")) - update_icon() + update_appearance(updates = ALL) /obj/item/jawsoflife/proc/transform_cutters(mob/user) attack_verb = list("pinched", "nipped") @@ -80,7 +80,7 @@ to_chat(user,span_notice("Your servos whirr as the prying head reconfigures into a cutting head.")) else to_chat(user, span_notice("You attach the cutting jaws to [src].")) - update_icon() + update_appearance(updates = ALL) //better handdrill /obj/item/handdrill @@ -138,7 +138,7 @@ to_chat(user,span_notice("Your servos whirr as the drill reconfigures into bolt mode.")) else to_chat(user, span_notice("You attach the bolt driver bit to [src].")) - update_icon() + update_appearance(updates = ALL) /obj/item/handdrill/proc/transform_screwdriver(mob/user) desc = "A simple powered hand drill. It's fitted with a screw bit." @@ -150,7 +150,7 @@ to_chat(user,span_notice("Your servos whirr as the drill reconfigures into screw mode.")) else to_chat(user, span_notice("You attach the screw driver bit to [src].")) - update_icon() + update_appearance(updates = ALL) /obj/item/jawsoflife/jimmy name = "airlock jimmy" diff --git a/yogstation/code/game/objects/items/weaponry.dm b/yogstation/code/game/objects/items/weaponry.dm index 44169c7604fd..18fb522737a7 100644 --- a/yogstation/code/game/objects/items/weaponry.dm +++ b/yogstation/code/game/objects/items/weaponry.dm @@ -2,7 +2,7 @@ name = "raised hand" desc = "Slap my hand." icon = 'icons/obj/toy.dmi' - icon_state = "latexballon" + icon_state = "latexballoon" item_state = "nothing" hitsound = 'sound/weapons/punchmiss.ogg' force = 0 @@ -29,7 +29,7 @@ name = "hand for holding" desc = "You rapscallion, how scandalous!" icon = 'icons/obj/toy.dmi' - icon_state = "latexballon" + icon_state = "latexballoon" item_state = "nothing" hitsound = 'sound/weapons/punchmiss.ogg' force = 0 diff --git a/yogstation/code/game/objects/structures/fireaxe.dm b/yogstation/code/game/objects/structures/fireaxe.dm index 2ceb921d75bf..5d1d8c15033b 100644 --- a/yogstation/code/game/objects/structures/fireaxe.dm +++ b/yogstation/code/game/objects/structures/fireaxe.dm @@ -9,7 +9,7 @@ /obj/structure/fireaxecabinet/Initialize(mapload)//<-- mirrored/overwritten proc . = ..() fireaxe = new - update_icon() + update_appearance(updates = ALL) //Sets up a spark system spark_system = new /datum/effect_system/spark_spread spark_system.set_up(2, 1, src) @@ -86,7 +86,7 @@ audible_message("You hear an audible clunk as the [name]'s bolt [locked ? "retracts" : "locks into place"].") playsound(loc, "sound/machines/locktoggle.ogg", 30, 1, -3) locked = !locked - update_icon() + update_appearance(updates = ALL) /obj/structure/fireaxecabinet/emag_act(mob/user) //this allows you to emag the fireaxe cabinet, unlocking it immediately. @@ -105,5 +105,5 @@ playsound(loc, "sound/machines/locktoggle.ogg", 30, 1, -3) locked = 0 audible_message("You hear an audible clunk as the [name]'s bolt retracts.") - update_icon() + update_appearance(updates = ALL) //Fireaxe Cabinet is now permanently unlocked. diff --git a/yogstation/code/game/objects/structures/toilet_bong.dm b/yogstation/code/game/objects/structures/toilet_bong.dm index 6236ddc89caf..5db6beaca9fb 100644 --- a/yogstation/code/game/objects/structures/toilet_bong.dm +++ b/yogstation/code/game/objects/structures/toilet_bong.dm @@ -15,16 +15,15 @@ STR.max_w_class = WEIGHT_CLASS_SMALL STR.max_combined_w_class = WEIGHT_CLASS_SMALL * 24 STR.max_items = 24 - RegisterSignal(STR, COMSIG_STORAGE_INSERTED, TYPE_PROC_REF(/atom/, update_icon)) - RegisterSignal(STR, COMSIG_STORAGE_REMOVED, TYPE_PROC_REF(/atom/, update_icon)) - weed_overlay = mutable_appearance('yogstation/icons/obj/watercloset.dmi', "weed") + RegisterSignal(STR, COMSIG_STORAGE_INSERTED, TYPE_PROC_REF(/atom/, update_appearance)) + RegisterSignal(STR, COMSIG_STORAGE_REMOVED, TYPE_PROC_REF(/atom/, update_appearance)) START_PROCESSING(SSobj, src) -/obj/structure/toilet_bong/update_icon() +/obj/structure/toilet_bong/update_overlays() . = ..() - cut_overlays() - if (LAZYLEN(contents)) - add_overlay(weed_overlay) + if(LAZYLEN(contents)) + weed_overlay = mutable_appearance('yogstation/icons/obj/watercloset.dmi', "weed") + . += weed_overlay /obj/structure/toilet_bong/attack_hand(mob/user) . = ..() @@ -44,7 +43,7 @@ smoke.set_up(smoke_spread, location = location, carry = boof.reagents, silent = TRUE) smoke.start() qdel(boof) - update_icon() + update_appearance(updates = ALL) // It's a bong powered by a **flamethrower**, it's definitely an open flame!! /obj/structure/toilet_bong/process() diff --git a/yogstation/code/modules/antagonists/darkspawn/darkspawn_objects/umbral_tendrils.dm b/yogstation/code/modules/antagonists/darkspawn/darkspawn_objects/umbral_tendrils.dm index 1c55ec101a61..64286afa1606 100644 --- a/yogstation/code/modules/antagonists/darkspawn/darkspawn_objects/umbral_tendrils.dm +++ b/yogstation/code/modules/antagonists/darkspawn/darkspawn_objects/umbral_tendrils.dm @@ -82,7 +82,7 @@ if(istype(O, /obj/item/pda)) var/obj/item/pda/PDA = O PDA.set_light_on(FALSE) - PDA.update_icon() + PDA.update_appearance(updates = ALL) visible_message(span_danger("The light in [PDA] shorts out!")) else visible_message(span_danger("[O] is disintegrated by [src]!")) diff --git a/yogstation/code/modules/antagonists/shadowling/shadowling_abilities.dm b/yogstation/code/modules/antagonists/shadowling/shadowling_abilities.dm index bd7bf2d88a81..60a0c1879c0d 100644 --- a/yogstation/code/modules/antagonists/shadowling/shadowling_abilities.dm +++ b/yogstation/code/modules/antagonists/shadowling/shadowling_abilities.dm @@ -521,7 +521,7 @@ target_apc.cell?.charge = 0 //Sent to the shadow realm target_apc.chargemode = 0 //Won't recharge either until an engineer hits the button target_apc.charging = 0 - target_apc.update_icon() + target_apc.update_appearance(updates = ALL) return TRUE diff --git a/yogstation/code/modules/antagonists/slaughter/slaughter.dm b/yogstation/code/modules/antagonists/slaughter/slaughter.dm index 561a30f50e9d..692466f0b5e2 100644 --- a/yogstation/code/modules/antagonists/slaughter/slaughter.dm +++ b/yogstation/code/modules/antagonists/slaughter/slaughter.dm @@ -133,9 +133,6 @@ icon_state = "demon_heart-on" decay_factor = 0 -/obj/item/organ/heart/demon/update_icon() - return //always beating visually - /obj/item/organ/heart/demon/attack(mob/M, mob/living/carbon/user, obj/target) if(M != user) return ..() diff --git a/yogstation/code/modules/assembly/signaler.dm b/yogstation/code/modules/assembly/signaler.dm index 951b9fbb2e83..889c0eac2cbd 100644 --- a/yogstation/code/modules/assembly/signaler.dm +++ b/yogstation/code/modules/assembly/signaler.dm @@ -5,9 +5,10 @@ /obj/item/assembly/signaler/Initialize(mapload) . = ..() - update_icon() + update_appearance(updates = ALL) -/obj/item/assembly/signaler/update_icon() +/obj/item/assembly/signaler/update_appearance(updates = ALL) + . = ..() if(label_color) cut_overlays() attached_overlays = list() diff --git a/yogstation/code/modules/atmospherics/machinery/pipes/bluespace.dm b/yogstation/code/modules/atmospherics/machinery/pipes/bluespace.dm index 7e9daa9c63f1..b362ea5c6abb 100644 --- a/yogstation/code/modules/atmospherics/machinery/pipes/bluespace.dm +++ b/yogstation/code/modules/atmospherics/machinery/pipes/bluespace.dm @@ -47,9 +47,10 @@ GLOBAL_LIST_EMPTY(bluespace_pipe_networks) return ..() + GLOB.bluespace_pipe_networks[bluespace_network_name] - src /obj/machinery/atmospherics/pipe/bluespace/hide() - update_icon() + update_appearance(updates = ALL) -/obj/machinery/atmospherics/pipe/bluespace/update_icon(showpipe) +/obj/machinery/atmospherics/pipe/bluespace/update_appearance(updates = ALL, showpipe) + . = ..() underlays.Cut() var/turf/T = loc @@ -83,4 +84,4 @@ GLOBAL_LIST_EMPTY(bluespace_pipe_networks) if(color) . = getpipeimage('icons/obj/atmospherics/components/binary_devices.dmi', state, dir, color) else - . = getpipeimage('icons/obj/atmospherics/components/binary_devices.dmi', state, dir) \ No newline at end of file + . = getpipeimage('icons/obj/atmospherics/components/binary_devices.dmi', state, dir) diff --git a/yogstation/code/modules/clothing/head/helmet.dm b/yogstation/code/modules/clothing/head/helmet.dm index ffd7174204d6..071e0ba69fe0 100644 --- a/yogstation/code/modules/clothing/head/helmet.dm +++ b/yogstation/code/modules/clothing/head/helmet.dm @@ -5,7 +5,8 @@ . = ..() initial_state = "[initial(icon_state)]" -/obj/item/clothing/head/helmet/update_icon() +/obj/item/clothing/head/helmet/update_appearance(updates = ALL) + . = ..() var/state = "[initial_state]" if(attached_light) if(attached_light.on) diff --git a/yogstation/code/modules/clothing/suits/nerd.dm b/yogstation/code/modules/clothing/suits/nerd.dm index 94abc9883b90..4132349827ed 100644 --- a/yogstation/code/modules/clothing/suits/nerd.dm +++ b/yogstation/code/modules/clothing/suits/nerd.dm @@ -57,7 +57,7 @@ . = ..() GC = new(src) GC.scanning = TRUE - update_icon() + update_appearance(updates = ALL) /obj/item/clothing/suit/armor/nerd/Destroy() QDEL_NULL(GC) diff --git a/yogstation/code/modules/donor/unique_donator_items.dm b/yogstation/code/modules/donor/unique_donator_items.dm index dbcd8769d879..c19a4129f300 100644 --- a/yogstation/code/modules/donor/unique_donator_items.dm +++ b/yogstation/code/modules/donor/unique_donator_items.dm @@ -553,9 +553,9 @@ Uncomment this and use atomproccall as necessary, then copypaste the output into /datum/donator_gear/saxophone name = "saxophone" unlock_path = /obj/item/instrument/saxophone -/datum/donator_gear/latexballon +/datum/donator_gear/latexballoon name = "latex glove" - unlock_path = /obj/item/latexballon + unlock_path = /obj/item/latexballoon /datum/donator_gear/zippo name = "Zippo lighter" unlock_path = /obj/item/lighter diff --git a/yogstation/code/modules/guardian/abilities/major/healing.dm b/yogstation/code/modules/guardian/abilities/major/healing.dm index d471a2b1fe89..326b742eeb71 100644 --- a/yogstation/code/modules/guardian/abilities/major/healing.dm +++ b/yogstation/code/modules/guardian/abilities/major/healing.dm @@ -45,7 +45,7 @@ guardian.do_attack_animation(O) O.obj_integrity = min(O.obj_integrity + (O.max_integrity * 0.1), O.max_integrity) var/obj/effect/temp_visual/heal/H = new /obj/effect/temp_visual/heal(get_turf(O)) - O.update_icon() + O.update_appearance(updates = ALL) if (guardian.namedatum) H.color = guardian.namedatum.color guardian.changeNext_move(CLICK_CD_MELEE) diff --git a/yogstation/code/modules/jobs/job_types/_job.dm b/yogstation/code/modules/jobs/job_types/_job.dm index 6f74b51930a9..d7c78f2d4ec1 100644 --- a/yogstation/code/modules/jobs/job_types/_job.dm +++ b/yogstation/code/modules/jobs/job_types/_job.dm @@ -49,18 +49,18 @@ var/obj/item/modular_computer/tablet/pda/PDA = locate(/obj/item/modular_computer/tablet/pda) in H.get_all_contents() if(PDA) PDA.finish_color = "glass" - PDA.update_icon() + PDA.update_appearance(updates = ALL) if(PDA_COLOR_PIPBOY) var/obj/item/modular_computer/tablet/pda/PDA = locate(/obj/item/modular_computer/tablet/pda) in H.get_all_contents() if(PDA) PDA.finish_color = "pipboy" PDA.slot_flags |= ITEM_SLOT_GLOVES - PDA.update_icon() + PDA.update_appearance(updates = ALL) if(PDA_COLOR_RAINBOW) var/obj/item/modular_computer/tablet/pda/PDA = locate(/obj/item/modular_computer/tablet/pda) in H.get_all_contents() if(PDA) PDA.finish_color = "rainbow" - PDA.update_icon() + PDA.update_appearance(updates = ALL) /datum/job/proc/give_cape(mob/living/H, mob/M) var/client/C = M.client diff --git a/yogstation/code/modules/mob/living/brain/MMI.dm b/yogstation/code/modules/mob/living/brain/MMI.dm index 938d33afd02c..de1634975f93 100644 --- a/yogstation/code/modules/mob/living/brain/MMI.dm +++ b/yogstation/code/modules/mob/living/brain/MMI.dm @@ -7,7 +7,7 @@ brain = newbrain name = "[initial(name)]: [brain.real_name]" to_chat(brainmob, "(If your brain was removed after your death you don't remember how you died, or who killed you. See rule 1.6.") //yogs - update_icon() + update_appearance(updates = ALL) return .=..() diff --git a/yogstation/code/modules/mob/living/simple_animal/friendly/chocobo.dm b/yogstation/code/modules/mob/living/simple_animal/friendly/chocobo.dm index c99a33a04e1d..29662f0bdf65 100644 --- a/yogstation/code/modules/mob/living/simple_animal/friendly/chocobo.dm +++ b/yogstation/code/modules/mob/living/simple_animal/friendly/chocobo.dm @@ -14,9 +14,9 @@ speak_chance = 2 turns_per_move = 5 butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 2) - response_help = "pets" + response_help = "pets" response_disarm = "gently pushes aside" - response_harm = "kicks" + response_harm = "kicks" attacktext = "kicks" health = 60 maxHealth = 60 @@ -33,7 +33,7 @@ if(random_color) var/newcolor = rgb(rand(0, 255), rand(0, 255), rand(0, 255)) add_atom_colour(newcolor, FIXED_COLOUR_PRIORITY) - update_icon() + update_appearance(UPDATE_ICON) var/datum/component/riding/D = LoadComponent(/datum/component/riding) D.set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0, 8, MOB_LAYER), TEXT_SOUTH = list(0, 8, MOB_LAYER), TEXT_EAST = list(0, 8, MOB_LAYER), TEXT_WEST = list( 0, 8, MOB_LAYER))) D.set_vehicle_dir_layer(SOUTH, ABOVE_MOB_LAYER) @@ -44,7 +44,7 @@ /mob/living/simple_animal/chocobo/death(gibbed) . = ..() - update_icon() + update_appearance(UPDATE_ICON) for(var/mob/living/N in buckled_mobs) unbuckle_mob(N) can_buckle = FALSE @@ -53,17 +53,12 @@ . = ..() if(.) can_buckle = initial(can_buckle) - update_icon() + update_appearance(UPDATE_ICON) -/mob/living/simple_animal/chocobo/update_icon() +/mob/living/simple_animal/chocobo/update_overlays() + . = ..() if(!random_color) //icon override return - cut_overlays() - if(stat == DEAD) - var/mutable_appearance/base_overlay = mutable_appearance(icon, "chocobo_limbs_dead") - base_overlay.appearance_flags = RESET_COLOR - add_overlay(base_overlay) - else - var/mutable_appearance/base_overlay = mutable_appearance(icon, "chocobo_limbs") - base_overlay.appearance_flags = RESET_COLOR - add_overlay(base_overlay) + var/mutable_appearance/base_overlay = mutable_appearance(icon, "chocobo_limbs[(stat == DEAD) ? "_dead" : ""]") + base_overlay.appearance_flags = RESET_COLOR + . += base_overlay diff --git a/yogstation/code/modules/mob/living/simple_animal/hostile/retaliate/king_of_goats.dm b/yogstation/code/modules/mob/living/simple_animal/hostile/retaliate/king_of_goats.dm index 8957c9d389fe..9d2ebd5f8596 100644 --- a/yogstation/code/modules/mob/living/simple_animal/hostile/retaliate/king_of_goats.dm +++ b/yogstation/code/modules/mob/living/simple_animal/hostile/retaliate/king_of_goats.dm @@ -105,7 +105,7 @@ Difficulty: Insanely Hard /mob/living/simple_animal/hostile/retaliate/goat/king/phase2/Initialize(mapload) . = ..() - update_icon() + update_appearance(updates = ALL) /mob/living/simple_animal/hostile/retaliate/goat/king/Found(atom/A) if(isliving(A)) @@ -251,11 +251,10 @@ Difficulty: Insanely Hard player.music_path = /datum/music/sourced/battle/king_goat_2 player.do_range_check(0) stun_chance = 10 - update_icon() + update_appearance(UPDATE_ICON) visible_message(span_cult("\The [src]' wounds close with a flash, and when he emerges, he's even larger than before!")) - -/mob/living/simple_animal/hostile/retaliate/goat/king/phase2/update_icon() +/mob/living/simple_animal/hostile/retaliate/goat/king/phase2/update_icon_state() var/matrix/M = new if(phase3) icon_state = "king_goat3" @@ -265,6 +264,7 @@ Difficulty: Insanely Hard M.Scale(1.25) transform = M pixel_y = 10 + return ..() /mob/living/simple_animal/hostile/retaliate/goat/king/phase2/Life(seconds_per_tick = SSMOBS_DT, times_fired) . = ..() diff --git a/yogstation/code/modules/power/singularity/particle_accelerator/particle_control.dm b/yogstation/code/modules/power/singularity/particle_accelerator/particle_control.dm index 0e252afdaf75..f0ae8bf53e30 100644 --- a/yogstation/code/modules/power/singularity/particle_accelerator/particle_control.dm +++ b/yogstation/code/modules/power/singularity/particle_accelerator/particle_control.dm @@ -16,4 +16,4 @@ if(!active) toggle_power() - update_icon() + update_appearance(updates = ALL) diff --git a/yogstation/code/modules/power/validhunter.dm b/yogstation/code/modules/power/validhunter.dm index 63262bd57139..ca33a87da00d 100644 --- a/yogstation/code/modules/power/validhunter.dm +++ b/yogstation/code/modules/power/validhunter.dm @@ -15,7 +15,8 @@ connect_to_network() return ..() -/obj/machinery/power/validhunter_engine/update_icon() +/obj/machinery/power/validhunter_engine/update_appearance(updates = ALL) + . = ..() if(operating) icon_state = "throw_me_in_the_trash_and_feed_my_remains_to_the_devil_operating" else @@ -74,7 +75,7 @@ /obj/machinery/power/validhunter_engine/proc/process_mob(mob/living/L, mob/user) operating = TRUE - update_icon() + update_appearance(updates = ALL) playsound(src.loc, 'sound/machines/terminal_on.ogg', 50, 1) L.forceMove(src) @@ -159,7 +160,7 @@ pixel_x = initial(pixel_x) //return to its spot after shaking operating = FALSE - update_icon() + update_appearance(updates = ALL) /obj/machinery/power/validhunter_engine/proc/fake_gib(mob/living/L) playsound(src.loc, 'sound/machines/terminal_off.ogg', 50, 1) @@ -167,5 +168,5 @@ dropContents() operating = FALSE - update_icon() + update_appearance(updates = ALL) diff --git a/yogstation/code/modules/projectiles/guns/ballistic/launchers.dm b/yogstation/code/modules/projectiles/guns/ballistic/launchers.dm index 9aaa8b623031..060b47aee275 100644 --- a/yogstation/code/modules/projectiles/guns/ballistic/launchers.dm +++ b/yogstation/code/modules/projectiles/guns/ballistic/launchers.dm @@ -13,8 +13,9 @@ casing_ejector = FALSE internal_magazine = TRUE -/obj/item/gun/ballistic/speargun/update_icon() - return +/obj/item/gun/ballistic/speargun/Initialize(mapload) + AddElement(/datum/element/update_icon_blocker) + return ..() /obj/item/gun/ballistic/speargun/attack_self() return diff --git a/yogstation/code/modules/reagents/reagent_containers/hypospray.dm b/yogstation/code/modules/reagents/reagent_containers/hypospray.dm index 64698a74717a..82126b794a7f 100644 --- a/yogstation/code/modules/reagents/reagent_containers/hypospray.dm +++ b/yogstation/code/modules/reagents/reagent_containers/hypospray.dm @@ -23,7 +23,8 @@ amount_per_transfer_from_this = 25 list_reagents = list(/datum/reagent/medicine/stimulants = 75) -/obj/item/reagent_containers/autoinjector/medipen/stimpack/large/update_icon() +/obj/item/reagent_containers/autoinjector/medipen/stimpack/large/update_appearance(updates = ALL) + . = ..() if(reagents.total_volume > 25) icon_state = initial(icon_state) else if(reagents.total_volume) @@ -45,7 +46,8 @@ var/enlightenment = pick(strings(REDPILL_FILE, "redpill_questions")) to_chat(M, span_notice("[enlightenment]")) -/obj/item/reagent_containers/autoinjector/medipen/stimpack/large/redpill/update_icon() +/obj/item/reagent_containers/autoinjector/medipen/stimpack/large/redpill/update_appearance(updates = ALL) + . = ..() if(reagents.total_volume > 25) icon_state = initial(icon_state) else if(reagents.total_volume) diff --git a/yogstation/code/modules/recycling/disposal/pipe_sorting.dm b/yogstation/code/modules/recycling/disposal/pipe_sorting.dm index f62799bbc453..9c18917f9436 100644 --- a/yogstation/code/modules/recycling/disposal/pipe_sorting.dm +++ b/yogstation/code/modules/recycling/disposal/pipe_sorting.dm @@ -27,7 +27,8 @@ if(!wires.is_cut(WIRE_SORT_SCAN)) sort_scan = TRUE -/obj/structure/disposalpipe/sorting/update_icon() +/obj/structure/disposalpipe/sorting/update_appearance(updates = ALL) + . = ..() cut_overlays() . = ..() if(panel_open) @@ -37,7 +38,7 @@ panel_open = !panel_open I.play_tool_sound(src) to_chat(user, span_notice("You [panel_open ? "open" : "close"] the wire panel.")) - update_icon() + update_appearance(updates = ALL) return TRUE /obj/structure/disposalpipe/sorting/attackby(obj/item/I, mob/user) diff --git a/yogstation/code/modules/spacepods/construction.dm b/yogstation/code/modules/spacepods/construction.dm index 52b704d195ca..6edc64d42c99 100644 --- a/yogstation/code/modules/spacepods/construction.dm +++ b/yogstation/code/modules/spacepods/construction.dm @@ -200,4 +200,4 @@ user.visible_message("[user] welds [src]'s armor.", "You weld [src]'s armor.") // finally this took too fucking long // somehow this takes up 40 lines less code than the original, code-less version. And it actually works - update_icon() + update_appearance(updates = ALL) diff --git a/yogstation/code/modules/spacepods/equipment.dm b/yogstation/code/modules/spacepods/equipment.dm index aec8c6517d61..f0162224c55c 100644 --- a/yogstation/code/modules/spacepods/equipment.dm +++ b/yogstation/code/modules/spacepods/equipment.dm @@ -38,7 +38,7 @@ /obj/item/spacepod_equipment/weaponry/on_install(obj/spacepod/SP) . = ..() SP.weapon = src - SP.update_icon() + SP.update_appearance(updates = ALL) /obj/item/spacepod_equipment/weaponry/on_uninstall() . = ..() diff --git a/yogstation/code/modules/spacepods/physics.dm b/yogstation/code/modules/spacepods/physics.dm index 4eb92c5b40c5..26fa44f3bb96 100644 --- a/yogstation/code/modules/spacepods/physics.dm +++ b/yogstation/code/modules/spacepods/physics.dm @@ -207,7 +207,7 @@ C.pixel_y = last_offset_y*32 animate(C, pixel_x = offset_x*32, pixel_y = offset_y*32, time = time SECONDS, flags=ANIMATION_END_NOW) user_thrust_dir = 0 - update_icon() + update_appearance(updates = ALL) /obj/spacepod/Bumped(atom/movable/A) if(A.dir & NORTH) diff --git a/yogstation/code/modules/spacepods/spacepod.dm b/yogstation/code/modules/spacepods/spacepod.dm index 769a4112cc45..429ee471e3ce 100644 --- a/yogstation/code/modules/spacepods/spacepod.dm +++ b/yogstation/code/modules/spacepods/spacepod.dm @@ -168,12 +168,12 @@ GLOBAL_LIST_INIT(spacepods_list, list()) if(W.use_tool(src, user, 50, amount=3, volume = 50)) if(repairing) obj_integrity = min(max_integrity, obj_integrity + 10) - update_icon() + update_appearance(updates = ALL) to_chat(user, span_notice("You mend some [pick("dents","bumps","damage")] with [W]")) else if(!cell && !internal_tank && !equipment.len && !pilot && !passengers.len && construction_state == SPACEPOD_ARMOR_WELDED) user.visible_message("[user] slices off [src]'s armor.", span_notice("You slice off [src]'s armor.")) construction_state = SPACEPOD_ARMOR_SECURED - update_icon() + update_appearance(updates = ALL) return TRUE return ..() @@ -235,7 +235,7 @@ GLOBAL_LIST_INIT(spacepods_list, list()) max_integrity = armor.pod_integrity obj_integrity = max_integrity - integrity_failure + obj_integrity pod_armor = armor - update_icon() + update_appearance(updates = ALL) /obj/spacepod/proc/remove_armor() if(!pod_armor) @@ -243,7 +243,7 @@ GLOBAL_LIST_INIT(spacepods_list, list()) max_integrity = integrity_failure desc = initial(desc) pod_armor = null - update_icon() + update_appearance(updates = ALL) /obj/spacepod/proc/InterceptClickOn(mob/user, params, atom/target) @@ -256,7 +256,7 @@ GLOBAL_LIST_INIT(spacepods_list, list()) /obj/spacepod/take_damage() ..() - update_icon() + update_appearance(updates = ALL) /obj/spacepod/return_air() return cabin_air @@ -396,7 +396,8 @@ GLOBAL_LIST_INIT(spacepods_list, list()) // there here's your frame pieces back, happy? qdel(src) -/obj/spacepod/update_icon() +/obj/spacepod/update_appearance(updates = ALL) + . = ..() cut_overlays() if(construction_state != SPACEPOD_ARMOR_WELDED) icon = 'goon/icons/obj/spacepods/construction_2x2.dmi' diff --git a/yogstation/code/modules/xenoarch/loot/gigadrill.dm b/yogstation/code/modules/xenoarch/loot/gigadrill.dm index 32c252da6d48..635d8fa736ee 100644 --- a/yogstation/code/modules/xenoarch/loot/gigadrill.dm +++ b/yogstation/code/modules/xenoarch/loot/gigadrill.dm @@ -13,13 +13,13 @@ /obj/vehicle/ridden/gigadrill/after_add_occupant(mob/M) . = ..() - update_icon() + update_appearance(updates = ALL) /obj/vehicle/ridden/gigadrill/after_remove_occupant(mob/M) . = ..() - update_icon() + update_appearance(updates = ALL) -/obj/vehicle/ridden/gigadrill/update_icon() +/obj/vehicle/ridden/gigadrill/update_appearance(updates = ALL) . = ..() if(occupant_amount()) icon_state = "gigadrill_mov" diff --git a/yogstation/code/modules/xenoarch/loot/guns.dm b/yogstation/code/modules/xenoarch/loot/guns.dm index 5c59228e29a1..b9b43fefcbe0 100644 --- a/yogstation/code/modules/xenoarch/loot/guns.dm +++ b/yogstation/code/modules/xenoarch/loot/guns.dm @@ -17,7 +17,8 @@ . = ..() playsound(src, 'yogstation/sound/weapons/spur_spawn.ogg') -/obj/item/gun/energy/polarstar/update_icon(force_update) +/obj/item/gun/energy/polarstar/update_appearance(updates = ALL, force_update) + . = ..() var/maxcharge = cell.maxcharge var/charge = cell.charge