diff --git a/code/game/atoms.dm b/code/game/atoms.dm index bfdcf82024..4a24416e3c 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -1262,22 +1262,3 @@ */ /atom/proc/setClosed() return - -///Passes Stat Browser Panel clicks to the game and calls client click on an atom -/atom/Topic(href, list/href_list) - . = ..() - if(!usr?.client) - return - var/client/usr_client = usr.client - var/list/paramslist = list() - if(href_list["statpanel_item_shiftclick"]) - paramslist["shift"] = "1" - if(href_list["statpanel_item_ctrlclick"]) - paramslist["ctrl"] = "1" - if(href_list["statpanel_item_altclick"]) - paramslist["alt"] = "1" - if(href_list["statpanel_item_click"]) - // first of all make sure we valid - var/mouseparams = list2params(paramslist) - usr_client.Click(src, loc, null, mouseparams) - return TRUE diff --git a/code/game/objects/items/tools/weldingtool.dm b/code/game/objects/items/tools/weldingtool.dm index c8eb96005c..92b222aed7 100644 --- a/code/game/objects/items/tools/weldingtool.dm +++ b/code/game/objects/items/tools/weldingtool.dm @@ -23,14 +23,15 @@ resistance_flags = FIRE_PROOF var/self_fueling = FALSE //Do we refill ourselves or not - var/nextrefueltick = 0 // How long it takes before we get a new fuel unit + var/nextrefueltick = 0 //When is the next tick we refuel? + var/refueling_interval = 10 //Every how many processing ticks does this refuel? (1 = every processing tick) custom_materials = list(/datum/material/iron=70, /datum/material/glass=30) var/welding = 0 //Whether or not the welding tool is off(0), on(1) or currently welding(2) var/status = TRUE //Whether the welder is secured or unsecured (able to attach rods to it to make a flamethrower) var/max_fuel = 20 //The max amount of fuel the welder can hold var/change_icons = 1 - var/can_off_process = 0 + var/can_off_process = FALSE var/light_intensity = 2 //how powerful the emitted light is when used. var/progress_flash_divisor = 10 var/burned_fuel_for = 0 //when fuel was last removed @@ -66,6 +67,14 @@ . += "[initial(icon_state)]-on" /obj/item/weldingtool/process() + //This handles refueling. Its looking at how much fuel the tool has and comparing that to how much it holds + //This then looks if the refuel tick has come based on world time. + //Then looks if we refuel ourselves or not. + + if(self_fueling && get_fuel() < max_fuel && nextrefueltick <= world.time) + nextrefueltick = world.time + refueling_interval + reagents.add_reagent(/datum/reagent/fuel, 1) + switch(welding) if(0) force = 3 @@ -86,14 +95,6 @@ //This is to start fires. process() is only called if the welder is on. open_flame() - //This handles refueling. Its looking at how much fuel the tool has and comparing that to how much it holds - //This then looks if the refuel tick has come based on world time. - //Then looks if we refuel ourselves or not. - - if(get_fuel() < max_fuel && nextrefueltick < world.time && self_fueling) - nextrefueltick = world.time + 10 - reagents.add_reagent(/datum/reagent/fuel, 1) - /obj/item/weldingtool/suicide_act(mob/user) user.visible_message("[user] welds [user.p_their()] every orifice closed! It looks like [user.p_theyre()] trying to commit suicide!") return (FIRELOSS) @@ -367,7 +368,7 @@ custom_materials = list(/datum/material/iron=70, /datum/material/glass=120) change_icons = 0 self_fueling = TRUE - can_off_process = 1 + can_off_process = TRUE light_intensity = 1 toolspeed = 0.5 @@ -375,6 +376,7 @@ name = "brass welding tool" desc = "A brass welder that seems to constantly refuel itself. It is faintly warm to the touch." resistance_flags = FIRE_PROOF | ACID_PROOF + refueling_interval = 5 icon_state = "clockwelder" item_state = "brasswelder" @@ -384,16 +386,20 @@ icon = 'icons/obj/abductor.dmi' icon_state = "welder" self_fueling = TRUE + can_off_process = TRUE + refueling_interval = 1 toolspeed = 0.1 light_intensity = 0 change_icons = 0 /obj/item/weldingtool/advanced name = "advanced welding tool" - desc = "A modern welding tool combined with an alien welding tool, it never runs out of fuel and works almost as fast." + desc = "A modern welding tool combined with an alien welding tool, it almost never runs out of fuel and works nearly as fast." icon = 'icons/obj/advancedtools.dmi' icon_state = "welder" self_fueling = TRUE + can_off_process = TRUE + refueling_interval = 2 toolspeed = 0.2 light_intensity = 0 change_icons = 0 diff --git a/code/game/say.dm b/code/game/say.dm index 61dd9c0879..3bc14ed245 100644 --- a/code/game/say.dm +++ b/code/game/say.dm @@ -98,11 +98,11 @@ GLOBAL_LIST_INIT(freqtospan, list( /// Converts specific characters, like +, |, and _ to formatted output. /atom/movable/proc/say_emphasis(input) - var/static/regex/italics = regex(@"\|(\S[\w\W]*?\S)\|", "g") + var/static/regex/italics = regex(@"\|((?=\S)[\w\W]*?(?<=\S))\|", "g") input = italics.Replace_char(input, "$1") - var/static/regex/bold = regex(@"\+(\S[\w\W]*?\S)\+", "g") + var/static/regex/bold = regex(@"\+((?=\S)[\w\W]*?(?<=\S))\+", "g") input = bold.Replace_char(input, "$1") - var/static/regex/underline = regex(@"_(\S[\w\W]*?\S)_", "g") + var/static/regex/underline = regex(@"_((?=\S)[\w\W]*?(?<=\S))_", "g") input = underline.Replace_char(input, "$1") return input diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index fd2ad6d3e0..f51ab7d3e3 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -101,6 +101,10 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( keyUp(keycode) return + if(href_list["statpanel_item_target"]) + handle_statpanel_click(href_list) + return + // Tgui Topic middleware if(tgui_Topic(href_list)) return @@ -141,6 +145,10 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( ..() //redirect to hsrc.Topic() +/client/proc/handle_statpanel_click(list/href_list) + var/atom/target = locate(href_list["statpanel_item_target"]) + Click(target, target.loc, null, "[href_list["statpanel_item_shiftclick"]?"shift=1;":null][href_list["statpanel_item_ctrlclick"]?"ctrl=1;":null]&alt=[href_list["statpanel_item_altclick"]?"alt=1;":null]", FALSE, "statpanel") + /client/proc/is_content_unlocked() if(!prefs.unlock_content) to_chat(src, "Become a BYOND member to access member-perks and features, as well as support the engine that makes this game possible. Only 10 bucks for 3 months! Click Here to find out more.") @@ -798,7 +806,7 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( message_admins("Proxy Detection: [key_name_admin(src)] IP intel rated [res.intel*100]% likely to be a Proxy/VPN.") ip_intel = res.intel -/client/Click(atom/object, atom/location, control, params, ignore_spam = FALSE) +/client/Click(atom/object, atom/location, control, params, ignore_spam = FALSE, extra_info) if(last_click > world.time - world.tick_lag) return last_click = world.time @@ -851,7 +859,7 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( return if(prefs.log_clicks) - log_click(object, location, control, params, src) + log_click(object, location, control, params, src, extra_info? "clicked ([extra_info])" : null) if (prefs.hotkeys) // If hotkey mode is enabled, then clicking the map will automatically diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index f9f587ae5b..af55c6b9d7 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -20,6 +20,7 @@ body_parts_covered = ARMS cold_protection = ARMS strip_delay = 300 //you can't just yank them off + obj_flags = UNIQUE_RENAME /// did you ever get around to wearing these or no var/wornonce = FALSE ///Extra damage through the punch. diff --git a/code/modules/mob/living/carbon/human/species_types/arachnid.dm b/code/modules/mob/living/carbon/human/species_types/arachnid.dm index 4a8c872400..a44177ced1 100644 --- a/code/modules/mob/living/carbon/human/species_types/arachnid.dm +++ b/code/modules/mob/living/carbon/human/species_types/arachnid.dm @@ -139,6 +139,18 @@ if(E.web_ready == FALSE) to_chat(H, "You need to wait awhile to regenerate web fluid.") return + if(!H.Adjacent(A)) //No. + return + if(!isliving(A) && A.anchored) + to_chat(H, "[A] is bolted to the floor!") + return + if(istype(A, /obj/structure/arachnid)) + to_chat(H, "No double wrapping.") + return + if(istype(A, /obj/effect)) + to_chat(H, "You cannot wrap this.") + return + H.visible_message("[H] starts to wrap [A] into a cocoon!","You start to wrap [A] into a cocoon.") if(!do_after(H, 10 SECONDS, 1, A)) to_chat(H, "Your web spinning was interrupted!") return diff --git a/code/modules/mob/living/carbon/human/species_types/dullahan.dm b/code/modules/mob/living/carbon/human/species_types/dullahan.dm index 7faa08b52c..0418292fea 100644 --- a/code/modules/mob/living/carbon/human/species_types/dullahan.dm +++ b/code/modules/mob/living/carbon/human/species_types/dullahan.dm @@ -27,7 +27,7 @@ /datum/species/dullahan/check_roundstart_eligible() if(SSevents.holidays && SSevents.holidays[HALLOWEEN]) return TRUE - return FALSE + return ..() /datum/species/dullahan/on_species_gain(mob/living/carbon/human/H, datum/species/old_species) . = ..() diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index ca2c259bb5..762e9fe39c 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -1082,11 +1082,12 @@ if("lockdown") var/celluse = rand(20,35) celluse = celluse /100 + if(!cell.use(cell.maxcharge*celluse)) + return for (var/obj/machinery/door/D in GLOB.airlocks) if (get_area(D) == area) INVOKE_ASYNC(D,/obj/machinery/door.proc/hostile_lockdown,usr, FALSE) addtimer(CALLBACK(D,/obj/machinery/door.proc/disable_lockdown, FALSE), 30 SECONDS) - cell.charge -= cell.maxcharge*celluse var/obj/item/implant/hijack/H = usr.getImplant(/obj/item/implant/hijack) H.stealthcooldown = world.time + 3 MINUTES if("occupy") diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index a4daeb6a33..a0509fbd41 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -86,6 +86,8 @@ // recharge the cell /obj/item/stock_parts/cell/proc/give(amount) + if(amount < 0) + return if(rigged && amount > 0) explode() return 0 diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index fd442bb7a6..fb9e6ff6c6 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -100,6 +100,10 @@ var/impact_light_intensity = 3 var/impact_light_range = 2 var/impact_light_color_override + // Normal lighting effects + var/fired_light_intensity = 1 + var/fired_light_range = 0 + var/fired_light_color = rgb(255, 255, 255) //Homing var/homing = FALSE @@ -506,6 +510,7 @@ transform = M trajectory_ignore_forcemove = TRUE forceMove(starting) + set_light(fired_light_range, fired_light_intensity, fired_light_color) trajectory_ignore_forcemove = FALSE if(isnull(pixel_increment_amount)) pixel_increment_amount = SSprojectiles.global_pixel_increment_amount diff --git a/code/modules/projectiles/projectile/bullets/ferromagnetic.dm b/code/modules/projectiles/projectile/bullets/ferromagnetic.dm index 78deff601f..03482e2a9d 100644 --- a/code/modules/projectiles/projectile/bullets/ferromagnetic.dm +++ b/code/modules/projectiles/projectile/bullets/ferromagnetic.dm @@ -2,22 +2,22 @@ icon_state = "magjectile" damage = 20 armour_penetration = 20 - light_range = 3 + fired_light_range = 3 pixels_per_second = TILES_TO_PIXELS(16.667) range = 35 - light_color = LIGHT_COLOR_RED + fired_light_color = LIGHT_COLOR_RED /obj/item/projectile/bullet/magnetic/disabler icon_state = "magjectile-nl" //nl stands for non-lethal damage = 2 armour_penetration = 10 stamina = 20 - light_color = LIGHT_COLOR_BLUE + fired_light_color = LIGHT_COLOR_BLUE /obj/item/projectile/bullet/magnetic/weak damage = 15 armour_penetration = 10 - light_range = 2 + fired_light_range = 2 range = 25 /obj/item/projectile/bullet/magnetic/weak/disabler @@ -30,8 +30,8 @@ stamina = 10 movement_type = FLYING | UNSTOPPABLE range = 6 - light_range = 1 - light_color = LIGHT_COLOR_RED + fired_light_range = 1 + fired_light_color = LIGHT_COLOR_RED /obj/item/projectile/bullet/incendiary/mag_inferno icon_state = "magjectile-large" @@ -40,8 +40,8 @@ movement_type = FLYING | UNSTOPPABLE range = 20 pixels_per_second = TILES_TO_PIXELS(12.5) - light_range = 4 - light_color = LIGHT_COLOR_RED + fired_light_range = 4 + fired_light_color = LIGHT_COLOR_RED /obj/item/projectile/bullet/incendiary/mag_inferno/on_hit(atom/target, blocked = FALSE) ..() diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm index f706dd10d9..cd0ac28daf 100644 --- a/code/modules/surgery/bodyparts/_bodyparts.dm +++ b/code/modules/surgery/bodyparts/_bodyparts.dm @@ -699,6 +699,8 @@ else if(species_id in GLOB.greyscale_limb_types) //should they have greyscales? base_bp_icon = DEFAULT_BODYPART_ICON_ORGANIC + else + base_bp_icon = DEFAULT_BODYPART_ICON if(base_bp_icon != DEFAULT_BODYPART_ICON) color_src = mut_colors ? MUTCOLORS : ((H.dna.skin_tone_override && S.use_skintones == USE_SKINTONES_GRAYSCALE_CUSTOM) ? CUSTOM_SKINTONE : SKINTONE) diff --git a/html/changelogs/AutoChangeLog-pr-13830.yml b/html/changelogs/AutoChangeLog-pr-13830.yml new file mode 100644 index 0000000000..c126670246 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13830.yml @@ -0,0 +1,4 @@ +author: "timothyteakettle" +delete-after: True +changes: + - bugfix: "apids render now" diff --git a/html/changelogs/AutoChangeLog-pr-13845.yml b/html/changelogs/AutoChangeLog-pr-13845.yml new file mode 100644 index 0000000000..d10485ae9f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13845.yml @@ -0,0 +1,4 @@ +author: "silicons" +delete-after: True +changes: + - bugfix: "dullahans enabled" diff --git a/html/changelogs/AutoChangeLog-pr-13850.yml b/html/changelogs/AutoChangeLog-pr-13850.yml new file mode 100644 index 0000000000..64c47ade40 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13850.yml @@ -0,0 +1,5 @@ +author: "DeltaFire15" +delete-after: True +changes: + - bugfix: "Self-fueling weldingtools recharge fuel properly again." + - bugfix: "Brass welders now actually recharge faster than experimental ones." diff --git a/html/changelogs/AutoChangeLog-pr-13870.yml b/html/changelogs/AutoChangeLog-pr-13870.yml new file mode 100644 index 0000000000..820c524224 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13870.yml @@ -0,0 +1,4 @@ +author: "silicons" +delete-after: True +changes: + - bugfix: "Magrifle ammo no longer glows." diff --git a/html/statbrowser.html b/html/statbrowser.html index 346a198746..e7d49ceebc 100644 --- a/html/statbrowser.html +++ b/html/statbrowser.html @@ -875,7 +875,7 @@ function draw_listedturf() { // rather than every onmousedown getting the "part" of the last entry. return function(e) { e.preventDefault(); - clickcatcher = "?src=" + part[1] + ";statpanel_item_click=1"; + clickcatcher = "?src=_statpanel_;statpanel_item_target=" + part[1] + ";statpanel_item_click=1"; if(e.shiftKey){ clickcatcher += ";statpanel_item_shiftclick=1"; }