Merge remote-tracking branch 'origin/master' into semi-sync

This commit is contained in:
Letter N
2020-12-26 10:58:12 +08:00
17 changed files with 82 additions and 47 deletions

View File

@@ -1262,22 +1262,3 @@
*/ */
/atom/proc/setClosed() /atom/proc/setClosed()
return 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

View File

@@ -23,14 +23,15 @@
resistance_flags = FIRE_PROOF resistance_flags = FIRE_PROOF
var/self_fueling = FALSE //Do we refill ourselves or not 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) 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/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/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/max_fuel = 20 //The max amount of fuel the welder can hold
var/change_icons = 1 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/light_intensity = 2 //how powerful the emitted light is when used.
var/progress_flash_divisor = 10 var/progress_flash_divisor = 10
var/burned_fuel_for = 0 //when fuel was last removed var/burned_fuel_for = 0 //when fuel was last removed
@@ -66,6 +67,14 @@
. += "[initial(icon_state)]-on" . += "[initial(icon_state)]-on"
/obj/item/weldingtool/process() /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) switch(welding)
if(0) if(0)
force = 3 force = 3
@@ -86,14 +95,6 @@
//This is to start fires. process() is only called if the welder is on. //This is to start fires. process() is only called if the welder is on.
open_flame() 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) /obj/item/weldingtool/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] welds [user.p_their()] every orifice closed! It looks like [user.p_theyre()] trying to commit suicide!</span>") user.visible_message("<span class='suicide'>[user] welds [user.p_their()] every orifice closed! It looks like [user.p_theyre()] trying to commit suicide!</span>")
return (FIRELOSS) return (FIRELOSS)
@@ -367,7 +368,7 @@
custom_materials = list(/datum/material/iron=70, /datum/material/glass=120) custom_materials = list(/datum/material/iron=70, /datum/material/glass=120)
change_icons = 0 change_icons = 0
self_fueling = TRUE self_fueling = TRUE
can_off_process = 1 can_off_process = TRUE
light_intensity = 1 light_intensity = 1
toolspeed = 0.5 toolspeed = 0.5
@@ -375,6 +376,7 @@
name = "brass welding tool" name = "brass welding tool"
desc = "A brass welder that seems to constantly refuel itself. It is faintly warm to the touch." desc = "A brass welder that seems to constantly refuel itself. It is faintly warm to the touch."
resistance_flags = FIRE_PROOF | ACID_PROOF resistance_flags = FIRE_PROOF | ACID_PROOF
refueling_interval = 5
icon_state = "clockwelder" icon_state = "clockwelder"
item_state = "brasswelder" item_state = "brasswelder"
@@ -384,16 +386,20 @@
icon = 'icons/obj/abductor.dmi' icon = 'icons/obj/abductor.dmi'
icon_state = "welder" icon_state = "welder"
self_fueling = TRUE self_fueling = TRUE
can_off_process = TRUE
refueling_interval = 1
toolspeed = 0.1 toolspeed = 0.1
light_intensity = 0 light_intensity = 0
change_icons = 0 change_icons = 0
/obj/item/weldingtool/advanced /obj/item/weldingtool/advanced
name = "advanced welding tool" 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 = 'icons/obj/advancedtools.dmi'
icon_state = "welder" icon_state = "welder"
self_fueling = TRUE self_fueling = TRUE
can_off_process = TRUE
refueling_interval = 2
toolspeed = 0.2 toolspeed = 0.2
light_intensity = 0 light_intensity = 0
change_icons = 0 change_icons = 0

View File

@@ -98,11 +98,11 @@ GLOBAL_LIST_INIT(freqtospan, list(
/// Converts specific characters, like +, |, and _ to formatted output. /// Converts specific characters, like +, |, and _ to formatted output.
/atom/movable/proc/say_emphasis(input) /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, "<i>$1</i>") input = italics.Replace_char(input, "<i>$1</i>")
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, "<b>$1</b>") input = bold.Replace_char(input, "<b>$1</b>")
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, "<u>$1</u>") input = underline.Replace_char(input, "<u>$1</u>")
return input return input

View File

@@ -101,6 +101,10 @@ GLOBAL_LIST_INIT(blacklisted_builds, list(
keyUp(keycode) keyUp(keycode)
return return
if(href_list["statpanel_item_target"])
handle_statpanel_click(href_list)
return
// Tgui Topic middleware // Tgui Topic middleware
if(tgui_Topic(href_list)) if(tgui_Topic(href_list))
return return
@@ -141,6 +145,10 @@ GLOBAL_LIST_INIT(blacklisted_builds, list(
..() //redirect to hsrc.Topic() ..() //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() /client/proc/is_content_unlocked()
if(!prefs.unlock_content) 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! <a href=\"https://secure.byond.com/membership\">Click Here to find out more</a>.") 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! <a href=\"https://secure.byond.com/membership\">Click Here to find out more</a>.")
@@ -798,7 +806,7 @@ GLOBAL_LIST_INIT(blacklisted_builds, list(
message_admins("<span class='adminnotice'>Proxy Detection: [key_name_admin(src)] IP intel rated [res.intel*100]% likely to be a Proxy/VPN.</span>") message_admins("<span class='adminnotice'>Proxy Detection: [key_name_admin(src)] IP intel rated [res.intel*100]% likely to be a Proxy/VPN.</span>")
ip_intel = res.intel 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) if(last_click > world.time - world.tick_lag)
return return
last_click = world.time last_click = world.time
@@ -851,7 +859,7 @@ GLOBAL_LIST_INIT(blacklisted_builds, list(
return return
if(prefs.log_clicks) 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 (prefs.hotkeys)
// If hotkey mode is enabled, then clicking the map will automatically // If hotkey mode is enabled, then clicking the map will automatically

View File

@@ -20,6 +20,7 @@
body_parts_covered = ARMS body_parts_covered = ARMS
cold_protection = ARMS cold_protection = ARMS
strip_delay = 300 //you can't just yank them off strip_delay = 300 //you can't just yank them off
obj_flags = UNIQUE_RENAME
/// did you ever get around to wearing these or no /// did you ever get around to wearing these or no
var/wornonce = FALSE var/wornonce = FALSE
///Extra damage through the punch. ///Extra damage through the punch.

View File

@@ -139,6 +139,18 @@
if(E.web_ready == FALSE) if(E.web_ready == FALSE)
to_chat(H, "<span class='warning'>You need to wait awhile to regenerate web fluid.</span>") to_chat(H, "<span class='warning'>You need to wait awhile to regenerate web fluid.</span>")
return return
if(!H.Adjacent(A)) //No.
return
if(!isliving(A) && A.anchored)
to_chat(H, "<span class='warning'>[A] is bolted to the floor!</span>")
return
if(istype(A, /obj/structure/arachnid))
to_chat(H, "<span class='warning'>No double wrapping.</span>")
return
if(istype(A, /obj/effect))
to_chat(H, "<span class='warning'>You cannot wrap this.</span>")
return
H.visible_message("<span class='danger'>[H] starts to wrap [A] into a cocoon!</span>","<span class='warning'>You start to wrap [A] into a cocoon.</span>")
if(!do_after(H, 10 SECONDS, 1, A)) if(!do_after(H, 10 SECONDS, 1, A))
to_chat(H, "<span class='warning'>Your web spinning was interrupted!</span>") to_chat(H, "<span class='warning'>Your web spinning was interrupted!</span>")
return return

View File

@@ -27,7 +27,7 @@
/datum/species/dullahan/check_roundstart_eligible() /datum/species/dullahan/check_roundstart_eligible()
if(SSevents.holidays && SSevents.holidays[HALLOWEEN]) if(SSevents.holidays && SSevents.holidays[HALLOWEEN])
return TRUE return TRUE
return FALSE return ..()
/datum/species/dullahan/on_species_gain(mob/living/carbon/human/H, datum/species/old_species) /datum/species/dullahan/on_species_gain(mob/living/carbon/human/H, datum/species/old_species)
. = ..() . = ..()

View File

@@ -1082,11 +1082,12 @@
if("lockdown") if("lockdown")
var/celluse = rand(20,35) var/celluse = rand(20,35)
celluse = celluse /100 celluse = celluse /100
if(!cell.use(cell.maxcharge*celluse))
return
for (var/obj/machinery/door/D in GLOB.airlocks) for (var/obj/machinery/door/D in GLOB.airlocks)
if (get_area(D) == area) if (get_area(D) == area)
INVOKE_ASYNC(D,/obj/machinery/door.proc/hostile_lockdown,usr, FALSE) INVOKE_ASYNC(D,/obj/machinery/door.proc/hostile_lockdown,usr, FALSE)
addtimer(CALLBACK(D,/obj/machinery/door.proc/disable_lockdown, FALSE), 30 SECONDS) 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) var/obj/item/implant/hijack/H = usr.getImplant(/obj/item/implant/hijack)
H.stealthcooldown = world.time + 3 MINUTES H.stealthcooldown = world.time + 3 MINUTES
if("occupy") if("occupy")

View File

@@ -86,6 +86,8 @@
// recharge the cell // recharge the cell
/obj/item/stock_parts/cell/proc/give(amount) /obj/item/stock_parts/cell/proc/give(amount)
if(amount < 0)
return
if(rigged && amount > 0) if(rigged && amount > 0)
explode() explode()
return 0 return 0

View File

@@ -100,6 +100,10 @@
var/impact_light_intensity = 3 var/impact_light_intensity = 3
var/impact_light_range = 2 var/impact_light_range = 2
var/impact_light_color_override 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 //Homing
var/homing = FALSE var/homing = FALSE
@@ -506,6 +510,7 @@
transform = M transform = M
trajectory_ignore_forcemove = TRUE trajectory_ignore_forcemove = TRUE
forceMove(starting) forceMove(starting)
set_light(fired_light_range, fired_light_intensity, fired_light_color)
trajectory_ignore_forcemove = FALSE trajectory_ignore_forcemove = FALSE
if(isnull(pixel_increment_amount)) if(isnull(pixel_increment_amount))
pixel_increment_amount = SSprojectiles.global_pixel_increment_amount pixel_increment_amount = SSprojectiles.global_pixel_increment_amount

View File

@@ -2,22 +2,22 @@
icon_state = "magjectile" icon_state = "magjectile"
damage = 20 damage = 20
armour_penetration = 20 armour_penetration = 20
light_range = 3 fired_light_range = 3
pixels_per_second = TILES_TO_PIXELS(16.667) pixels_per_second = TILES_TO_PIXELS(16.667)
range = 35 range = 35
light_color = LIGHT_COLOR_RED fired_light_color = LIGHT_COLOR_RED
/obj/item/projectile/bullet/magnetic/disabler /obj/item/projectile/bullet/magnetic/disabler
icon_state = "magjectile-nl" //nl stands for non-lethal icon_state = "magjectile-nl" //nl stands for non-lethal
damage = 2 damage = 2
armour_penetration = 10 armour_penetration = 10
stamina = 20 stamina = 20
light_color = LIGHT_COLOR_BLUE fired_light_color = LIGHT_COLOR_BLUE
/obj/item/projectile/bullet/magnetic/weak /obj/item/projectile/bullet/magnetic/weak
damage = 15 damage = 15
armour_penetration = 10 armour_penetration = 10
light_range = 2 fired_light_range = 2
range = 25 range = 25
/obj/item/projectile/bullet/magnetic/weak/disabler /obj/item/projectile/bullet/magnetic/weak/disabler
@@ -30,8 +30,8 @@
stamina = 10 stamina = 10
movement_type = FLYING | UNSTOPPABLE movement_type = FLYING | UNSTOPPABLE
range = 6 range = 6
light_range = 1 fired_light_range = 1
light_color = LIGHT_COLOR_RED fired_light_color = LIGHT_COLOR_RED
/obj/item/projectile/bullet/incendiary/mag_inferno /obj/item/projectile/bullet/incendiary/mag_inferno
icon_state = "magjectile-large" icon_state = "magjectile-large"
@@ -40,8 +40,8 @@
movement_type = FLYING | UNSTOPPABLE movement_type = FLYING | UNSTOPPABLE
range = 20 range = 20
pixels_per_second = TILES_TO_PIXELS(12.5) pixels_per_second = TILES_TO_PIXELS(12.5)
light_range = 4 fired_light_range = 4
light_color = LIGHT_COLOR_RED fired_light_color = LIGHT_COLOR_RED
/obj/item/projectile/bullet/incendiary/mag_inferno/on_hit(atom/target, blocked = FALSE) /obj/item/projectile/bullet/incendiary/mag_inferno/on_hit(atom/target, blocked = FALSE)
..() ..()

View File

@@ -699,6 +699,8 @@
else else
if(species_id in GLOB.greyscale_limb_types) //should they have greyscales? if(species_id in GLOB.greyscale_limb_types) //should they have greyscales?
base_bp_icon = DEFAULT_BODYPART_ICON_ORGANIC base_bp_icon = DEFAULT_BODYPART_ICON_ORGANIC
else
base_bp_icon = DEFAULT_BODYPART_ICON
if(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) color_src = mut_colors ? MUTCOLORS : ((H.dna.skin_tone_override && S.use_skintones == USE_SKINTONES_GRAYSCALE_CUSTOM) ? CUSTOM_SKINTONE : SKINTONE)

View File

@@ -0,0 +1,4 @@
author: "timothyteakettle"
delete-after: True
changes:
- bugfix: "apids render now"

View File

@@ -0,0 +1,4 @@
author: "silicons"
delete-after: True
changes:
- bugfix: "dullahans enabled"

View File

@@ -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."

View File

@@ -0,0 +1,4 @@
author: "silicons"
delete-after: True
changes:
- bugfix: "Magrifle ammo no longer glows."

View File

@@ -875,7 +875,7 @@ function draw_listedturf() {
// rather than every onmousedown getting the "part" of the last entry. // rather than every onmousedown getting the "part" of the last entry.
return function(e) { return function(e) {
e.preventDefault(); 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){ if(e.shiftKey){
clickcatcher += ";statpanel_item_shiftclick=1"; clickcatcher += ";statpanel_item_shiftclick=1";
} }