[MIRROR] Fix a bunch of issues and runtimes (#11145)

Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
This commit is contained in:
CHOMPStation2StaffMirrorBot
2025-07-05 12:47:08 -07:00
committed by GitHub
parent 199e857d15
commit 46c940fbdf
68 changed files with 205 additions and 234 deletions

View File

@@ -45,6 +45,7 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204
#define FLEXIBLEMATERIAL (1<<4) // At the moment, masks with this flag will not prevent eating even if they are covering your face.
#define ALLOW_SURVIVALFOOD (1<<5) // Allows special survival food items to be eaten through it
#define INFINITE_AIR (1<<6) // Provides an infinite air supply.
#define NOSTRIP (1<<7) // Items that should never get stripped
// Flags for pass_flags. - Used in /atom/var/pass_flags
#define PASSTABLE (1<<0)

View File

@@ -1,12 +1,12 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
/proc/dopage(src,target)
/proc/dopage(source, target)
var/href_list
var/href
href_list = params2list("src=\ref[src]&[target]=1")
href = "src=\ref[src];[target]=1"
src:temphtml = null
src:Topic(href, href_list)
href_list = params2list("src=\ref[source]&[target]=1")
href = "src=\ref[source];[target]=1"
source:temphtml = null
source:Topic(href, href_list)
return null
/proc/is_on_same_plane_or_station(var/z1, var/z2)

View File

@@ -91,7 +91,7 @@ GLOBAL_LIST_INIT(legacy_tg_space_type_cache, typecacheof(/turf/space))
* Note that this can only be used inside the [datum/tg_jps_pathfind][pathfind datum] since it uses variables from said datum.
* If you really want to optimize things, optimize this, cuz this gets called a lot.
*/
#define CAN_STEP(cur_turf, next) (next && !next.density && !(simulated_only && GLOB.legacy_tg_space_type_cache[next.type]) && !cur_turf.LinkBlockedWithAccess(next,caller, id) && (next != avoid))
#define CAN_STEP(cur_turf, next) (next && !next.density && !(simulated_only && GLOB.legacy_tg_space_type_cache[next.type]) && !cur_turf.LinkBlockedWithAccess(next,proc_caller, id) && (next != avoid))
/// Another helper macro for JPS, for telling when a node has forced neighbors that need expanding
#define STEP_NOT_HERE_BUT_THERE(cur_turf, dirA, dirB) ((!CAN_STEP(cur_turf, get_step(cur_turf, dirA)) && CAN_STEP(cur_turf, get_step(cur_turf, dirB))))
@@ -146,7 +146,7 @@ GLOBAL_LIST_INIT(legacy_tg_space_type_cache, typecacheof(/turf/space))
*/
/datum/tg_jps_pathfind
/// The thing that we're actually trying to path for
var/atom/movable/caller
var/atom/movable/proc_caller
/// The turf where we started at
var/turf/start
/// The turf we're trying to path to (note that this won't track a moving target)
@@ -170,8 +170,8 @@ GLOBAL_LIST_INIT(legacy_tg_space_type_cache, typecacheof(/turf/space))
/// A specific turf we're avoiding, like if a mulebot is being blocked by someone t-posing in a doorway we're trying to get through
var/turf/avoid
/datum/tg_jps_pathfind/New(atom/movable/caller, atom/goal, id, max_distance, mintargetdist, simulated_only, avoid)
src.caller = caller
/datum/tg_jps_pathfind/New(atom/movable/proc_caller, atom/goal, id, max_distance, mintargetdist, simulated_only, avoid)
src.proc_caller = proc_caller
end = get_turf(goal)
open = new /datum/tg_heap(GLOBAL_PROC_REF(TGHeapPathWeightCompare))
sources = new()
@@ -188,7 +188,7 @@ GLOBAL_LIST_INIT(legacy_tg_space_type_cache, typecacheof(/turf/space))
* return null, which [/proc/get_path_to] translates to an empty list (notable for simple bots, who need empty lists)
*/
/datum/tg_jps_pathfind/proc/search()
start = get_turf(caller)
start = get_turf(proc_caller)
if(!start || !end)
stack_trace("Invalid A* start or destination")
return
@@ -204,7 +204,7 @@ GLOBAL_LIST_INIT(legacy_tg_space_type_cache, typecacheof(/turf/space))
//then run the main loop
while(!open.is_empty() && !path)
if(!caller)
if(!proc_caller)
return
current_processed_node = open.pop() //get the lower f_value turf in the open list
if(max_distance && (current_processed_node.number_tiles > max_distance))//if too many steps, don't process that path
@@ -382,14 +382,14 @@ GLOBAL_LIST_INIT(legacy_tg_space_type_cache, typecacheof(/turf/space))
return
/**
* For seeing if we can actually move between 2 given turfs while accounting for our access and the caller's pass_flags
* For seeing if we can actually move between 2 given turfs while accounting for our access and the proc_caller's pass_flags
*
* Arguments:
* * caller: The movable, if one exists, being used for mobility checks to see what tiles it can reach
* * proc_caller: The movable, if one exists, being used for mobility checks to see what tiles it can reach
* * ID: An ID card that decides if we can gain access to doors that would otherwise block a turf
* * simulated_only: Do we only worry about turfs with simulated atmos, most notably things that aren't space?
*/
/turf/proc/LinkBlockedWithAccess(turf/destination_turf, caller, ID)
/turf/proc/LinkBlockedWithAccess(turf/destination_turf, proc_caller, ID)
var/static/datum/pathfinding/whatever = new
return !global.default_pathfinding_adjacency(src, destination_turf, GLOB.generic_pathfinding_actor, whatever)

View File

@@ -423,9 +423,9 @@ GLOBAL_LIST_EMPTY(text_tag_cache)
t = replacetext(t, "\[/grid\]", "</td></tr></table>")
t = replacetext(t, "\[row\]", "</td><tr>")
t = replacetext(t, "\[cell\]", "<td>")
t = replacetext(t, "\[logo\]", "<img src = https://raw.githubusercontent.com/CHOMPStation2/CHOMPStation2/master/html/images/ntlogo.png>") //CHOMPEdit
t = replacetext(t, "\[redlogo\]", "<img src = https://raw.githubusercontent.com/CHOMPStation2/CHOMPStation2/master/html/images/redntlogo.png>") //CHOMPEdit
t = replacetext(t, "\[sglogo\]", "<img src = https://raw.githubusercontent.com/CHOMPStation2/CHOMPStation2/master/html/images/sglogo.png>") //CHOMPEdit
t = replacetext(t, "\[logo\]", "<img src=\ref['html/images/ntlogo.png']")
t = replacetext(t, "\[redlogo\]", "<img src=\ref['html/images/redntlogo.png']>")
t = replacetext(t, "\[sglogo\]", "<img src=\ref['html/images/sglogo.png']")
t = replacetext(t, "\[editorbr\]", "")
return t
@@ -473,9 +473,9 @@ GLOBAL_LIST_EMPTY(text_tag_cache)
t = replacetext(t, "</table>", "\[/grid\]")
t = replacetext(t, "<tr>", "\[row\]")
t = replacetext(t, "<td>", "\[cell\]")
t = replacetext(t, "<img src = ntlogo.png>", "\[logo\]")
t = replacetext(t, "<img src = redntlogo.png>", "\[redlogo\]")
t = replacetext(t, "<img src = sglogo.png>", "\[sglogo\]")
t = replacetext(t, "<img src=\ref['html/images/ntlogo.png']>", "\[logo\]")
t = replacetext(t, "<img src=\ref['html/images/redntlogo.png']>", "\[redlogo\]")
t = replacetext(t, "<img src=\ref['html/images/sglogo.png']>", "\[sglogo\]")
t = replacetext(t, "<span class=\"paper_field\"></span>", "\[field\]")
t = replacetext(t, "<span class=\"redacted\">R E D A C T E D</span>", "\[redacted\]")
t = strip_html_properly(t)

View File

@@ -23,7 +23,7 @@
* @param hook Identifier of the hook to call.
* @returns 1 if all hooked code runs successfully, 0 otherwise.
*/
/proc/callHook(hook, list/args=null)
/proc/callHook(hook, list/arguments=null)
var/hook_path = text2path("/hook/[hook]")
if(!hook_path)
error("Invalid hook '/hook/[hook]' called.")
@@ -32,7 +32,7 @@
var/requester = new hook_path
var/status = 1
for(var/P in typesof("[hook_path]/proc"))
if(!call(requester, P)(arglist(args)))
if(!call(requester, P)(arglist(arguments)))
error("Hook '[P]' failed or runtimed.")
status = 0

View File

@@ -118,13 +118,13 @@ SUBSYSTEM_DEF(xenoarch)
artifact_turf.artifact_find = new()
/// This is the proc that is used when a Z level runs out of artifacts. This means you have 'completed' your job and now you get bonus goodies to keep you occupied.
/datum/controller/subsystem/xenoarch/proc/continual_generation(var/mob/living/caller)
/datum/controller/subsystem/xenoarch/proc/continual_generation(var/mob/living/user)
/// So, to preface this, I had to do a lot of testing with this to ensure it wouldn't cause mass lag and that it properly functioned.
/// At first, I tried to make it scan mineral in the user's Z. There's not really any preexisting functionality for this that I could find, so that was a negative.
/// Next, I saw what would happen if it did 'in world' and then went 'if M.z != caller.z continue' and that caused...A lot of lag. For a long time.
/// Next, I saw what would happen if it did 'in world' and then went 'if M.z != user.z continue' and that caused...A lot of lag. For a long time.
/// This range(100) was for me was completely lagless. It gives a good amount of artifacts to keep digging and keep archeo working so they don't 'run out' of things to do.
for(var/turf/simulated/mineral/M in range(100, caller))
for(var/turf/simulated/mineral/M in range(100, user))
if(!M.density)
continue

View File

@@ -24,9 +24,9 @@
return
return list("title" = title, "message" = message)
/datum/uplink_item/abstract/announcements/fake_centcom/get_goods(var/obj/item/uplink/U, var/loc, var/mob/user, var/list/args)
post_comm_message(args["title"], replacetext(args["message"], "\n", "<br/>"))
command_announcement.Announce(args["message"], args["title"])
/datum/uplink_item/abstract/announcements/fake_centcom/get_goods(var/obj/item/uplink/U, var/location, var/mob/user, var/list/arguments)
post_comm_message(arguments["title"], replacetext(arguments["message"], "\n", "<br/>"))
command_announcement.Announce(arguments["message"], arguments["title"])
return 1
/datum/uplink_item/abstract/announcements/fake_crew_arrival
@@ -34,7 +34,7 @@
desc = "Creates a fake crew arrival announcement as well as fake crew records, using your current appearance (including held items!) and worn id card. Trigger with care!"
item_cost = 15
/datum/uplink_item/abstract/announcements/fake_crew_arrival/get_goods(var/obj/item/uplink/U, var/loc, var/mob/user, var/list/args)
/datum/uplink_item/abstract/announcements/fake_crew_arrival/get_goods(var/obj/item/uplink/U, var/location, var/mob/user, var/list/arguments)
if(!user)
return 0
@@ -93,7 +93,7 @@
desc = "Interferes with the station's ion sensors. Triggers immediately upon investment."
item_cost = 10
/datum/uplink_item/abstract/announcements/fake_ion_storm/get_goods(var/obj/item/uplink/U, var/loc)
/datum/uplink_item/abstract/announcements/fake_ion_storm/get_goods(var/obj/item/uplink/U, var/location)
ion_storm_announcement()
return 1
@@ -102,7 +102,7 @@
desc = "Interferes with the station's radiation sensors. Triggers immediately upon investment."
item_cost = 15
/datum/uplink_item/abstract/announcements/fake_radiation/get_goods(var/obj/item/uplink/U, var/loc)
/datum/uplink_item/abstract/announcements/fake_radiation/get_goods(var/obj/item/uplink/U, var/location)
var/datum/event_meta/EM = new(EVENT_LEVEL_MUNDANE, "Fake Radiation Storm", add_to_queue = 0)
new/datum/event/radiation_storm/syndicate(EM)
return 1

View File

@@ -35,11 +35,11 @@
/datum/uplink_item/item/badassery/random_many/cost(obj/item/uplink/U, telecrystals)
return max(1, telecrystals)
/datum/uplink_item/item/badassery/random_many/get_goods(var/obj/item/uplink/U, var/loc, var/mob/M)
/datum/uplink_item/item/badassery/random_many/get_goods(var/obj/item/uplink/U, var/location, var/mob/M)
var/list/bought_items = list()
for(var/datum/uplink_item/UI in get_random_uplink_items(U, M.mind.tcrystals, loc))
for(var/datum/uplink_item/UI in get_random_uplink_items(U, M.mind.tcrystals, location))
UI.purchase_log(U)
var/obj/item/I = UI.get_goods(U, loc)
var/obj/item/I = UI.get_goods(U, location)
if(istype(I))
bought_items += I
@@ -77,8 +77,8 @@
..()
desc = "A crate containing [item_worth] telecrystal\s worth of surplus leftovers."
/datum/uplink_item/item/badassery/surplus/get_goods(var/obj/item/uplink/U, var/loc)
var/obj/structure/largecrate/C = new(loc)
/datum/uplink_item/item/badassery/surplus/get_goods(var/obj/item/uplink/U, var/location)
var/obj/structure/largecrate/C = new(location)
var/random_items = get_surplus_items(null, item_worth, C)
for(var/datum/uplink_item/I in random_items)
I.purchase_log(U)

View File

@@ -5,8 +5,8 @@
category = /datum/uplink_category/telecrystals
blacklisted = 1
/datum/uplink_item/item/telecrystal/get_goods(obj/item/uplink/U, loc, mob/M)
return new /obj/item/stack/telecrystal(loc, cost(U, M.mind.tcrystals))
/datum/uplink_item/item/telecrystal/get_goods(obj/item/uplink/U, location, mob/M)
return new /obj/item/stack/telecrystal(location, cost(U, M.mind.tcrystals))
/datum/uplink_item/item/telecrystal/one
name = "Telecrystal - 01"

View File

@@ -84,7 +84,7 @@ var/datum/uplink/uplink = new()
return desc
// get_goods does not necessarily return physical objects, it is simply a way to acquire the uplink item without paying
/datum/uplink_item/proc/get_goods(var/obj/item/uplink/U, var/loc, var/mob/user)
/datum/uplink_item/proc/get_goods(var/obj/item/uplink/U, var/location, var/mob/user)
return FALSE
/datum/uplink_item/proc/log_icon()
@@ -117,8 +117,8 @@ var/datum/uplink/uplink = new()
A.put_in_any_hand_if_possible(I)
return I
/datum/uplink_item/item/get_goods(obj/item/uplink/U, loc, mob/user)
var/obj/item/I = new path(loc)
/datum/uplink_item/item/get_goods(obj/item/uplink/U, location, mob/user)
var/obj/item/I = new path(location)
return I
/datum/uplink_item/item/description()
@@ -154,8 +154,8 @@ var/datum/uplink/uplink = new()
var/crate_path = /obj/structure/largecrate
var/list/paths = list() // List of paths to be spawned into the crate.
/datum/uplink_item/crated/get_goods(obj/item/uplink/U, loc, mob/user)
var/obj/L = new crate_path(get_turf(loc))
/datum/uplink_item/crated/get_goods(obj/item/uplink/U, location, mob/user)
var/obj/L = new crate_path(get_turf(location))
L.adjust_scale(rand(9, 12) / 10, rand(9, 12) / 10) // Some variation in the crate / locker size.
@@ -179,7 +179,7 @@ var/datum/uplink/uplink = new()
/****************
* Support procs *
****************/
/proc/get_random_uplink_items(var/obj/item/uplink/U, var/remaining_TC, var/loc)
/proc/get_random_uplink_items(var/obj/item/uplink/U, var/remaining_TC, var/location)
var/list/bought_items = list()
while(remaining_TC)
var/datum/uplink_item/I = default_uplink_selection.get_random_item(remaining_TC, U, bought_items)
@@ -190,7 +190,7 @@ var/datum/uplink/uplink = new()
return bought_items
/proc/get_surplus_items(var/obj/item/uplink/U, var/remaining_TC, var/loc)
/proc/get_surplus_items(var/obj/item/uplink/U, var/remaining_TC, var/location)
var/list/bought_items = list()
var/override = TRUE
while(remaining_TC)

View File

@@ -20,7 +20,7 @@
C.toggle_power()
if(WIRE_PARTICLE_STRENGTH)
C.add_strength()
C.add_strength(usr)
if(WIRE_PARTICLE_INTERFACE)
C.interface_control = !C.interface_control

View File

@@ -57,7 +57,7 @@
//Copypasta
valid_turfs:
for(var/turf/simulated/T in A.contents)
if(T.density || istype(T, /turf/simulated/mineral)) //Don't blink to vacuum or a wall
if(T.density || ismineralturf(T)) //Don't blink to vacuum or a wall
continue
for(var/atom/movable/stuff in T.contents)
if(stuff.density)

View File

@@ -28,7 +28,7 @@
valid_turfs:
for(var/turf/simulated/T in range(AM, range))
if(T.density || T.block_tele || istype(T, /turf/simulated/mineral)) //Don't blink to vacuum or a wall
if(T.density || T.block_tele || ismineralturf(T)) //Don't blink to vacuum or a wall
continue
for(var/atom/movable/stuff in T.contents)
if(stuff.density)

View File

@@ -289,8 +289,7 @@
return ..()
/obj/machinery/porta_turret/Destroy()
qdel(spark_system)
spark_system = null
QDEL_NULL(spark_system)
return ..()
/obj/machinery/porta_turret/update_icon()
@@ -588,7 +587,7 @@
health -= force
if(force > 5 && prob(45))
spark_system.start()
spark_system?.start()
if(health <= 0)
die() //the death process :(

View File

@@ -34,7 +34,7 @@
log_message("Drilled through [target]")
target.ex_act(2)
else if(istype(target, /turf/simulated/mineral))
else if(ismineralturf(target))
if(enable_special)
for(var/turf/simulated/mineral/M in range(chassis,1))
if(get_dir(chassis,M)&chassis.dir)
@@ -116,7 +116,7 @@
else
log_message("Bored through [target]")
target.ex_act(2)
else if(istype(target, /turf/simulated/mineral))
else if(ismineralturf(target))
var/turf/simulated/mineral/M = target
if(enable_special && !M.density)
M.ex_act(2)

View File

@@ -132,7 +132,7 @@
else
log_message("Drilled through [target]")
target.ex_act(2)
else if(istype(target, /turf/simulated/mineral))
else if(ismineralturf(target))
for(var/turf/simulated/mineral/M in range(chassis,1))
if(get_dir(chassis,M)&chassis.dir)
M.GetDrilled()

View File

@@ -1024,6 +1024,8 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
/obj/item/MouseEntered(location,control,params)
. = ..()
if(QDELETED(src))
return
if(usr?.read_preference(/datum/preference/toggle/inv_tooltips) && ((src in usr) || isstorage(loc))) // If in inventory or in storage we're looking at
var/user = usr
tip_timer = addtimer(CALLBACK(src, PROC_REF(openTip), location, control, params, user), 5, TIMER_STOPPABLE)

View File

@@ -34,7 +34,7 @@
var/turf/our_turf = get_turf(user)
var/final = "<head><style>body {font-family: Verdana; background-color: #C1BDA3;}</style></head><center><h3>Nanotrasen Security Citation</h3><hr>This security citation has been issued to <br><big>[capitalize(ticket_name)]</big></center><b>Reason</b>:<br><i>[details]</i><hr><center><small>See your local representative at Central Command after the shift is over to resolve this issue.</small><br><img src = ntlogo.png></center>"
var/final = "<head><style>body {font-family: Verdana; background-color: #C1BDA3;}</style></head><center><h3>Nanotrasen Security Citation</h3><hr>This security citation has been issued to <br><big>[capitalize(ticket_name)]</big></center><b>Reason</b>:<br><i>[details]</i><hr><center><small>See your local representative at Central Command after the shift is over to resolve this issue.</small><br><img src=\ref['html/images/ntlogo.png']></center>"
var/obj/item/paper/sec_ticket/p = new /obj/item/paper/sec_ticket(our_turf)

View File

@@ -367,12 +367,14 @@
configured = 1
to_chat(user, span_notice("Card settings set."))
/obj/item/card/id/event/attackby(obj/item/I as obj, var/mob/user)
/obj/item/card/id/event/attackby(obj/item/I, var/mob/user)
if(istype(I, /obj/item/card/id) && !accessset)
var/obj/item/card/id/O = I
access |= O.GetAccess()
desc = I.desc
rank = O.rank
mining_points = O.mining_points
survey_points = O.survey_points
to_chat(user, span_notice("You copy the access from \the [I] to \the [src]."))
user.drop_from_inventory(I)
qdel(I)

View File

@@ -253,7 +253,7 @@
for(var/lang in new_character.client.prefs.alternate_languages)
var/datum/language/chosen_language = GLOB.all_languages[lang]
if(chosen_language)
if(is_lang_whitelisted(src,chosen_language) || (new_character.species && (chosen_language.name in new_character.species.secondary_langs)))
if(is_lang_whitelisted(M, chosen_language) || (new_character.species && (chosen_language.name in new_character.species.secondary_langs)))
new_character.add_language(lang)
SEND_SIGNAL(new_character, COMSIG_HUMAN_DNA_FINALIZED)

View File

@@ -11,7 +11,7 @@
/obj/structure/lattice/Initialize(mapload)
. = ..()
if(!(isopenturf(src.loc) || istype(src.loc, /turf/simulated/mineral) || istype(src.loc, /turf/simulated/shuttle/plating/airless/carry)))
if(!(isopenturf(src.loc) || ismineralturf(src.loc) || istype(src.loc, /turf/simulated/shuttle/plating/airless/carry)))
return INITIALIZE_HINT_QDEL
for(var/obj/structure/lattice/LAT in src.loc)

View File

@@ -596,7 +596,7 @@ GLOBAL_VAR_INIT(floorIsLava, 0)
<A href='byond://?src=\ref[src];[HrefToken()];vsc=default'>Choose a default ZAS setting</A><br>
"}
var/datum/browser/popup = new(owner, "admin2", "Game Panel", 210, 280)
var/datum/browser/popup = new(owner, "admin2", "Game Panel", 220, 295)
popup.set_content(dat)
popup.open()

View File

@@ -376,15 +376,15 @@ ADMIN_VERB(game_panel, R_ADMIN|R_SERVER|R_FUN, "Game Panel", "Look at the state
ADMIN_VERB(deadmin, R_NONE, "DeAdmin", "Shed your admin powers.", ADMIN_CATEGORY_MAIN)
user.holder.deactivate()
to_chat(src, span_interface("You are now a normal player."))
log_admin("[key_name(src)] deadminned themselves.")
message_admins("[key_name_admin(src)] deadminned themselves.")
to_chat(user, span_interface("You are now a normal player."))
log_admin("[key_name(user)] deadminned themselves.")
message_admins("[key_name_admin(user)] deadminned themselves.")
//BLACKBOX_LOG_ADMIN_VERB("Deadmin")
feedback_add_details("admin_verb","DAS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
if(isobserver(user.mob))
var/mob/observer/dead/our_mob = user.mob
our_mob.visualnet?.removeVisibility(our_mob, src)
our_mob.visualnet?.removeVisibility(our_mob, user)
/client/proc/toggle_log_hrefs()
set name = "Toggle href logging"

View File

@@ -87,8 +87,8 @@
text = replacetext(text, "\[/grid\]", "</td></tr></table>")
text = replacetext(text, "\[row\]", "</td><tr>")
text = replacetext(text, "\[cell\]", "<td>")
text = replacetext(text, "\[logo\]", "<img src = ntlogo.png>") // Not sure if these would get used but why not
text = replacetext(text, "\[sglogo\]", "<img src = sglogo.png>")
text = replacetext(text, "\[logo\]", "<img src=\ref['html/images/ntlogo.png']>") // Not sure if these would get used but why not
text = replacetext(text, "\[sglogo\]", "<img src=\ref['html/images/sglogo.png']>")
return text
// This is used when reading text that went through paper_markup2html(), to reverse it so that edits don't need to replace everything once more to avoid sanitization.
@@ -124,8 +124,8 @@
text = replacetext(text, "</td></tr></table>", "\[/grid\]")
text = replacetext(text, "</td><tr>", "\[row\]")
text = replacetext(text, "<td>", "\[cell\]")
text = replacetext(text, "<img src = ntlogo.png>", "\[logo\]") // Not sure if these would get used but why not
text = replacetext(text, "<img src = sglogo.png>", "\[sglogo\]")
text = replacetext(text, "<img src=\ref['html/images/ntlogo.png']>", "\[logo\]") // Not sure if these would get used but why not
text = replacetext(text, "<img src=\ref['html/images/sglogo.png']>", "\[sglogo\]")
return text
#undef NEWSFILE

View File

@@ -83,7 +83,7 @@
irc = 1
else
recipient = GLOB.directory[whom]
else if(istype(whom,/client))
else if(isclient(whom))
recipient = whom
@@ -104,6 +104,7 @@
if(!recipient)
if(holder)
to_chat(src, span_admin_pm_warning("Error: Admin-PM: Client not found."))
if(msg)
to_chat(src, msg)
else
current_ticket.MessageNoRecipient(msg)
@@ -127,11 +128,11 @@
current_ticket.MessageNoRecipient(msg)
return
if (src.handle_spam_prevention(msg,MUTE_ADMINHELP))
if (src.handle_spam_prevention(MUTE_ADMINHELP))
return
//clean the message if it's not sent by a high-rank admin
if(!check_rights(R_SERVER|R_DEBUG,0)||irc)//no sending html to the poor bots
if(!check_rights(R_SERVER|R_DEBUG, FALSE)||irc)//no sending html to the poor bots
msg = trim(sanitize(copytext(msg,1,MAX_MESSAGE_LEN)))
if(!msg)
return
@@ -141,27 +142,27 @@
var/keywordparsedmsg = keywords_lookup(msg)
if(irc)
to_chat(src, span_admin_pm_notice("PM to-<b>Admins</b>: [rawmsg]"))
admin_ticket_log(src, span_admin_pm_warning("Reply PM from-<b>[key_name(src, TRUE, TRUE)]</b> to <i>IRC</i>: [keywordparsedmsg]"))
to_chat(src, span_admin_pm_notice("PM to-" + span_bold("Admins") + ": [rawmsg]"))
admin_ticket_log(src, span_admin_pm_warning("Reply PM from-" + span_bold("[key_name(src, TRUE, TRUE)]") + " to " + span_italics("IRC") + ": [keywordparsedmsg]"))
ircreplyamount--
send2irc("Reply: [ckey]",rawmsg)
else
if(recipient.holder)
if(holder) //both are admins
to_chat(recipient, span_admin_pm_warning("Admin PM from-<b>[key_name(src, recipient, 1)]</b>: [keywordparsedmsg]"))
to_chat(src, span_admin_pm_notice("Admin PM to-<b>[key_name(recipient, src, 1)]</b>: [keywordparsedmsg]"))
to_chat(recipient, span_admin_pm_warning("Admin PM from-" + span_bold("[key_name(src, recipient, 1)]") + ": [keywordparsedmsg]"))
to_chat(src, span_admin_pm_notice("Admin PM to-" + span_bold("[key_name(recipient, src, 1)]") + ": [keywordparsedmsg]"))
//omg this is dumb, just fill in both their tickets
var/interaction_message = span_admin_pm_notice("PM from-<b>[key_name(src, recipient, 1)]</b> to-<b>[key_name(recipient, src, 1)]</b>: [keywordparsedmsg]")
var/interaction_message = span_admin_pm_notice("PM from-" + span_bold("[key_name(src, recipient, 1)]") + " to-" + span_bold("[key_name(recipient, src, 1)]") + ": [keywordparsedmsg]")
admin_ticket_log(src, interaction_message)
if(recipient != src) //reeee
admin_ticket_log(recipient, interaction_message)
else //recipient is an admin but sender is not
var/replymsg = span_admin_pm_warning("Reply PM from-<b>[key_name(src, recipient, 1)]</b>: [keywordparsedmsg]")
var/replymsg = span_admin_pm_warning("Reply PM from-" + span_bold("[key_name(src, recipient, 1)]") + ": [keywordparsedmsg]")
admin_ticket_log(src, replymsg)
to_chat(recipient, replymsg)
to_chat(src, span_admin_pm_notice("PM to-<b>Admins</b>: [msg]"))
to_chat(src, span_admin_pm_notice("PM to-" + span_bold("Admins") + ": [msg]"))
//play the recieving admin the adminhelp sound (if they have them enabled)
if(recipient.prefs?.read_preference(/datum/preference/toggle/holder/play_adminhelp_ping))
@@ -173,9 +174,9 @@
new /datum/ticket(msg, recipient, TRUE, 1)
to_chat(recipient, span_admin_pm_warning(span_huge(span_bold("-- Administrator private message --"))))
to_chat(recipient, span_admin_pm_warning("Admin PM from-<b>[key_name(src, recipient, 0)]</b>: [msg]"))
to_chat(recipient, span_admin_pm_warning("Admin PM from-" + span_bold("[key_name(src, recipient, 0)]") + ": [msg]"))
to_chat(recipient, span_admin_pm_warning(span_italics("Click on the administrator's name to reply.")))
to_chat(src, span_admin_pm_notice("Admin PM to-<b>[key_name(recipient, src, 1)]</b>: [msg]"))
to_chat(src, span_admin_pm_notice("Admin PM to-" + span_bold("[key_name(recipient, src, 1)]") + ": [msg]"))
admin_ticket_log(recipient, span_admin_pm_notice("PM From [key_name_admin(src)]: [keywordparsedmsg]"))
@@ -262,7 +263,7 @@
log_admin("IRC PM: [sender] -> [key_name(C)] : [msg]")
to_chat(C, span_admin_pm_warning(span_huge(span_bold("-- Administrator private message --"))))
to_chat(C, span_admin_pm_warning("Admin PM from-<b><a href='byond://?priv_msg=[stealthkey]'>[adminname]</A></b>: [msg]"))
to_chat(C, span_admin_pm_warning("Admin PM from-" + span_bold("<a href='byond://?priv_msg=[stealthkey]'>[adminname]</a>") + ": [msg]"))
to_chat(C, span_admin_pm_warning(span_italics("Click on the administrator's name to reply.")))
admin_ticket_log(C, span_admin_pm_notice("PM From [irc_tagged]: [msg]"))

View File

@@ -1,7 +1,7 @@
ADMIN_VERB(get_server_logs, R_ADMIN, "Get Server Logs", "View or retrieve logfiles.", ADMIN_CATEGORY_MAIN)
ADMIN_VERB(get_server_logs, (R_ADMIN | R_SERVER), "Get Server Logs", "View or retrieve logfiles.", ADMIN_CATEGORY_MAIN)
user.browseserverlogs()
ADMIN_VERB(get_current_logs, R_ADMIN, "Get Current Logs", "View or retrieve logfiles for the current round.", ADMIN_CATEGORY_MAIN)
ADMIN_VERB(get_current_logs, (R_ADMIN | R_SERVER), "Get Current Logs", "View or retrieve logfiles for the current round.", ADMIN_CATEGORY_MAIN)
user.browseserverlogs(current=TRUE)
/client/proc/browseserverlogs(current=FALSE)

View File

@@ -53,7 +53,7 @@
update_icon()
/obj/effect/blob/proc/expand(var/turf/T)
if(istype(T, /turf/unsimulated/) || istype(T, /turf/space) || (istype(T, /turf/simulated/mineral) && T.density))
if(istype(T, /turf/unsimulated/) || isopenturf(T) || (ismineralturf(T) && T.density))
return
if(istype(T, /turf/simulated/wall))
var/turf/simulated/wall/SW = T

View File

@@ -282,7 +282,7 @@
prefs.last_ip = address //these are gonna be used for banning
prefs.last_id = computer_id //these are gonna be used for banning
hook_vr("client_new",list(src)) //VOREStation Code. For now this only loads vore prefs, so better put before mob.Login() call but after normal prefs are loaded.
prefs_vr = new/datum/vore_preferences(src)
. = ..() //calls mob.Login()
prefs.sanitize_preferences()

View File

@@ -147,8 +147,8 @@ var/global/list/valid_ringtones = list(
data["pda_type"] = pdachoicelist[pref.pdachoice]
data["communicator_visibility"] = pref.communicator_visibility // boolean
data["ringtone"] = pref.ringtone
// data["shoes"] = pref.shoe_hater
data["jacket"] = pref.no_jacket
// data["shoes"] = !pref.shoe_hater // CHOMPRemove
data["jacket"] = !pref.no_jacket
return data

View File

@@ -235,7 +235,7 @@ var/list/gear_datums = list()
if(TG.display_name in active_gear_list)
active_gear_list -= TG.display_name
else if(get_total() + TG.cost <= MAX_GEAR_COST)
active_gear_list[TG.display_name] = list()
LAZYSET(active_gear_list, TG.display_name, list())
return TOPIC_REFRESH_UPDATE_PREVIEW
if("gear_tweak")

View File

@@ -35,7 +35,7 @@
GLOB.transaction_devices -= src
. = ..()
/obj/machinery/cash_register/examine(mob/user as mob)
/obj/machinery/cash_register/examine(mob/user)
. = ..(user)
if(transaction_amount)
. += "It has a purchase of [transaction_amount] pending[transaction_purpose ? " for [transaction_purpose]" : ""]."
@@ -46,7 +46,7 @@
. += "It's completely empty."
/obj/machinery/cash_register/attack_hand(mob/user as mob)
/obj/machinery/cash_register/attack_hand(mob/user)
// Don't be accessible from the wrong side of the machine
if(get_dir(src, user) & GLOB.reverse_dir[src.dir]) return
@@ -67,7 +67,7 @@
open_cash_box()
/obj/machinery/cash_register/interact(mob/user as mob)
/obj/machinery/cash_register/interact(mob/user)
var/dat = "<html><h2>Cash Register<hr></h2>"
if (locked)
dat += "<a href='byond://?src=\ref[src];choice=toggle_lock'>Unlock</a><br>"
@@ -172,7 +172,7 @@
/obj/machinery/cash_register/attackby(obj/item/O as obj, user as mob)
/obj/machinery/cash_register/attackby(obj/item/O, mob/user)
// Check for a method of paying (ID, PDA, e-wallet, cash, ect.)
var/obj/item/card/id/I = O.GetID()
if(I)
@@ -203,6 +203,8 @@
/obj/machinery/cash_register/MouseDrop_T(atom/dropping, mob/user)
if(!isobj(dropping))
return
if(Adjacent(dropping) && Adjacent(user) && !user.stat)
attackby(dropping, user)

View File

@@ -26,7 +26,7 @@ var/global/datum/ErrorViewer/ErrorCache/error_cache = null
/datum/ErrorViewer/proc/browseTo(var/user, var/html)
if(user)
var/datum/browser/popup = new(user, "error_viewer", "Runtime Viewer", 700, 500)
var/datum/browser/popup = new(user, "error_viewer", "Runtime Viewer", 900, 500)
popup.add_head_content({"<style>
.runtime{
background-color: #171717;
@@ -42,6 +42,7 @@ var/global/datum/ErrorViewer/ErrorCache/error_cache = null
padding: 0;
text-indent:-13ch;
margin-left:13ch;
white-space:nowrap;
}
</style>"})
popup.set_content(html)

View File

@@ -16,7 +16,7 @@
arg = "'[arg]'"
return arg
/proc/ext_python(var/script, var/args, var/scriptsprefix = 1)
/proc/ext_python(var/script, var/arguments, var/scriptsprefix = 1)
return // VOREStation Edit - Can't exploit shell if we never call shell!
/* Unreachable with above vorestation edit
if(scriptsprefix)
@@ -25,6 +25,6 @@
if(world.system_type == MS_WINDOWS)
script = replacetext(script, "/", "\\")
var/command = CONFIG_GET(string/python_path) + " " + script + " " + args // CHOMPEdit
var/command = CONFIG_GET(string/python_path) + " " + script + " " + arguments
return shell(command)
*/

View File

@@ -92,7 +92,9 @@
for (var/atom/movable/A in contents)
A.forceMove(get_turf(src))
food_items = 0
to_chat(user, span_notice("You remove all the solid items from the [src]."))
update_icon()
/obj/item/reagent_containers/cooking_container/proc/check_contents()
if (contents.len == 0)
@@ -105,8 +107,6 @@
/obj/item/reagent_containers/cooking_container/AltClick(var/mob/user)
do_empty(user)
food_items = 0
update_icon()
//Deletes contents of container.
//Used when food is burned, before replacing it with a burned mess

View File

@@ -152,7 +152,7 @@
return
//Drill through the flooring, if any.
if(istype(get_turf(src), /turf/simulated/mineral))
if(ismineralturf(get_turf(src)))
var/turf/simulated/mineral/M = get_turf(src)
M.GetDrilled()

View File

@@ -256,7 +256,7 @@
var/obj/item/stack/flag/F = locate() in get_turf(src)
var/turf/T = get_turf(src)
if(!T || !istype(T,/turf/simulated/mineral))
if(!T || !ismineralturf(T))
to_chat(user, "The flag won't stand up in this terrain.")
return

View File

@@ -276,7 +276,7 @@ var/list/mining_overlay_cache = list()
if(LAZYACCESS(ignore_list, T))
continue
if(istype(T, /turf/simulated/mineral))
if(ismineralturf(T))
T.update_icon()
if(istype(T, /turf/simulated/wall/solidrock))

View File

@@ -74,7 +74,7 @@
new /obj/effect/temp_visual/resonance_crush(T)
// Mineral turfs get drilled!
if(istype(T, /turf/simulated/mineral))
if(ismineralturf(T))
var/turf/simulated/mineral/M = T
M.GetDrilled()
qdel(src)

View File

@@ -138,7 +138,7 @@
new /obj/effect/temp_visual/resonance_crush(T)
// Mineral turfs get drilled!
if(istype(T, /turf/simulated/mineral))
if(ismineralturf(T))
var/turf/simulated/mineral/M = T
M.GetDrilled()
qdel(src)

View File

@@ -220,7 +220,7 @@
target = null
busy = 0
update_icons()
else if(istype(A, /turf/space) || istype(A, /turf/simulated/mineral/floor))
else if(isopenturf(A) || istype(A, /turf/simulated/mineral/floor))
var/building = 2
if(locate(/obj/structure/lattice, A))
building = 1

View File

@@ -221,7 +221,7 @@
H.lleill_display.icon_state = "lleill-4"
/datum/species/proc/update_lleill_hud(var/mob/living/carbon/human/H)
var/relative_energy = ((lleill_energy/lleill_energy_max)*100)
var/relative_energy = lleill_energy_max ? ((lleill_energy/lleill_energy_max)*100) : 0
if(H.lleill_display)
H.lleill_display.invisibility = INVISIBILITY_NONE
switch(relative_energy)

View File

@@ -669,7 +669,7 @@
return TRUE
// Used to find a special target for falling on, such as pouncing on someone from above.
/datum/species/proc/find_fall_target_special(src, landing)
/datum/species/proc/find_fall_target_special(source, landing)
return FALSE
// Used to override normal fall behaviour. Use only when the species does fall down a level.

View File

@@ -529,8 +529,8 @@
to_chat(src, span_warning("You must remain still to blobform!"))
//For some reason, there's no way to force drop all the mobs grabbed. This ought to fix that. And be moved elsewhere. Call with caution, doesn't handle cycles.
/proc/remove_micros(var/src, var/mob/root)
for(var/obj/item/I in src)
/proc/remove_micros(var/source, var/mob/root)
for(var/obj/item/I in source)
remove_micros(I, root) //Recursion. I'm honestly depending on there being no containment loop, but at the cost of performance that can be fixed too.
if(istype(I, /obj/item/holder))
root.remove_from_mob(I)

View File

@@ -16,6 +16,7 @@
seal_delay = 0
var/mob/living/myprotean
initial_modules = list(/obj/item/rig_module/protean/syphon, /obj/item/rig_module/protean/armor, /obj/item/rig_module/protean/healing)
item_flags = NOSTRIP
helm_type = /obj/item/clothing/head/helmet/space/rig/protean //These are important for sprite pointers
boot_type = /obj/item/clothing/shoes/magboots/rig/protean

View File

@@ -44,5 +44,6 @@
else
voice_sounds_list = DEFAULT_TALK_SOUNDS
resize(size_multiplier, animate = FALSE, uncapped = has_large_resize_bounds(), ignore_prefs = TRUE, aura_animation = FALSE)
init_vore()
return .

View File

@@ -1046,7 +1046,7 @@
for(var/belly_class in vore_fullness_ex)
reset_belly_lights(belly_class)
var/vs_fullness = vore_fullness_ex[belly_class]
if(belly_class == "sleeper")
if(belly_class == "sleeper" && vore_selected)
if(sleeper_state == 0 && vore_selected.silicon_belly_overlay_preference == "Sleeper") continue
if(sleeper_state != 0 && !(vs_fullness + 1 > vore_capacity_ex[belly_class]))
if(vore_selected.silicon_belly_overlay_preference == "Sleeper")

View File

@@ -688,7 +688,9 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have?
else if (not_hungy)
var/nutrition_cost = 500 + (nutrition / 2)
adjust_nutrition(-nutrition_cost)
new /mob/living/simple_mob/vore/alienanimals/teppi(loc, src)
new /mob/living/simple_mob/vore/alienanimals/teppi(loc, store_teppi_data(src))
qdel(src)
return
else
visible_message("\The [src] whines pathetically...", runemessage = "whines")
if(prob(50))
@@ -767,7 +769,6 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have?
GLOB.teppi_count ++
if(teppi1 && !teppi2)
inherit_from_baby(teppi1)
qdel(teppi1)
else if (teppi1 && teppi2)
inherit_from_parents(teppi1, teppi2)
. = ..()
@@ -921,26 +922,46 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have?
/mob/living/simple_mob/vore/alienanimals/teppi/baby/init_vore() //shouldn't need all the vore bidness if they aren't using it as babbies. They get their tummies when they grow up.
return
/mob/living/simple_mob/vore/alienanimals/teppi/proc/store_teppi_data(mob/living/simple_mob/vore/alienanimals/teppi/teppi)
var/list/teppi_data = list(
"dir" = teppi.dir,
"name" = teppi.name,
"real_name" = teppi.real_name,
"faction" = teppi.faction,
"affinity" = teppi.affinity,
"affection_factor" = teppi.affection_factor,
"nutrition" = teppi.nutrition,
"allergen_preference" = teppi.allergen_preference,
"allergen_unpreference" = teppi.allergen_unpreference,
"color" = teppi.color,
"marking_color" = teppi.marking_color,
"horn_color" = teppi.horn_color,
"eye_color" = teppi.eye_color,
"skin_color" = teppi.skin_color,
)
return teppi_data
//This sets all the things on adult teppi when they grow from a baby
/mob/living/simple_mob/vore/alienanimals/teppi/proc/inherit_from_baby(mob/living/simple_mob/vore/alienanimals/teppi/baby/baby)
/mob/living/simple_mob/vore/alienanimals/teppi/proc/inherit_from_baby(list/teppi_data)
inherit_colors = TRUE
inherit_allergen = TRUE
dir = baby.dir
name = baby.name
real_name = baby.real_name
faction = baby.faction
affinity = baby.affinity
affection_factor = baby.affection_factor
nutrition = baby.nutrition
allergen_preference = baby.allergen_preference
allergen_unpreference = baby.allergen_unpreference
color = baby.color
marking_color = baby.marking_color
horn_color = baby.horn_color
eye_color = baby.eye_color
skin_color = baby.skin_color
dir = teppi_data["dir"]
name = teppi_data["name"]
real_name = teppi_data["real_name"]
faction = teppi_data["faction"]
affinity = teppi_data["affinity"]
affection_factor = teppi_data["affection_factor"]
nutrition = teppi_data["nutrition"]
allergen_preference = teppi_data["allergen_preference"]
allergen_unpreference = teppi_data["allergen_unpreference"]
color = teppi_data["color"]
marking_color = teppi_data["marking_color"]
horn_color = teppi_data["horn_color"]
eye_color = teppi_data["eye_color"]
skin_color = teppi_data["skin_color"]
ghostjoin = 1
GLOB.active_ghost_pods |= src
GLOB.active_ghost_pods += src
update_icon()
//This sets all the things on baby teppi when they are bred from adult teppi

View File

@@ -147,7 +147,7 @@ GLOBAL_VAR_INIT(chicken_count, 0) // How mant chickens DO we have?
var/mob/living/simple_mob/animal/passive/chicken/C = new (src.loc)
C.ghostjoin = 1
C.ghostjoin_icon()
GLOB.active_ghost_pods |= C
GLOB.active_ghost_pods += C
qdel(src)
// Say Lists

View File

@@ -76,7 +76,6 @@
living_mob_list += src
lastarea = get_area(src)
set_focus(src) // VOREStation Add - Key Handling
hook_vr("mob_new",list(src)) //VOREStation Code
update_transform() // Some mobs may start bigger or smaller than normal.
. = ..()
//return QDEL_HINT_HARDDEL_NOW Just keep track of mob references. They delete SO much faster now.

View File

@@ -44,15 +44,15 @@
if(!logo)
return
if(logo == "SolGov")
logo = "sglogo.png"
logo = 'html/images/sglogo.png'
//VOREStation Edit/Add
else if(logo == "NanoTrasen")
logo = "ntlogo.png"
logo = 'html/images/ntlogo.png'
else
logo = "trader.png"
logo = 'html/images/trader.png'
//VOREStation Edit/Add End
//TODO change logo based on who you're contacting.
text = "<center><img src = [logo]></br>"
text = "<center><img src=\ref[logo]></br>"
text += span_bold("[origin] Quantum Uplink Signed Message") + "<br>"
text += span_small("Encryption key: [originhash]<br>Challenge: [timehash]") + "<br></center><hr>"

View File

@@ -357,15 +357,13 @@
t = replacetext(t, "\[grid\]", "<table>")
t = replacetext(t, "\[/grid\]", "</td></tr></table>")
t = replacetext(t, "\[row\]", "</td><tr>")
t = replacetext(t, "\[/row\]", "") //CHOMPEDIT: nuking closing statements for rows.
t = replacetext(t, "\[/row\]", "")
t = replacetext(t, "\[cell\]", "<td>")
t = replacetext(t, "\[/cell\]", "") //CHOMPEDIT: nuking closing statements for cells.
//CHOMPEdit Start
t = replacetext(t, "\[logo\]", "<img src = https://raw.githubusercontent.com/CHOMPStation2/CHOMPStation2/master/html/images/ntlogo.png>")
t = replacetext(t, "\[sglogo\]", "<img src = https://raw.githubusercontent.com/CHOMPStation2/CHOMPStation2/master/html/images/sglogo.png>")
t = replacetext(t, "\[trlogo\]", "<img src = https://raw.githubusercontent.com/CHOMPStation2/CHOMPStation2/master/html/images/trader.png>")
t = replacetext(t, "\[pclogo\]", "<img src = https://raw.githubusercontent.com/CHOMPStation2/CHOMPStation2/master/html/images/pclogo.png>")
//CHOMPEdit End
t = replacetext(t, "\[/cell\]", "")
t = replacetext(t, "\[logo\]", "<img src=\ref['html/images/ntlogo.png']>")
t = replacetext(t, "\[sglogo\]", "<img src=\ref['html/images/sglogo.png']>")
t = replacetext(t, "\[trlogo\]", "<img src=\ref['html/images/trader.png']>")
t = replacetext(t, "\[pclogo\]", "<img src=\ref['html/images/pclogo.png']>") // Not available on virgo // CHOMPEnable
t = "<font face=\"[deffont]\" color=[P ? P.colour : "black"]>[t]</font>"
else // If it is a crayon, and he still tries to use these, make them empty!
@@ -379,8 +377,8 @@
t = replacetext(t, "\[/table\]", "")
t = replacetext(t, "\[row\]", "")
t = replacetext(t, "\[cell\]", "")
t = replacetext(t, "\[/cell\]", "") //CHOMPEDIT: nuking closing statements for cells.
t = replacetext(t, "\[/row\]", "") //CHOMPEDIT: nuking closing statements for rows.
t = replacetext(t, "\[/cell\]", "")
t = replacetext(t, "\[/row\]", "")
t = replacetext(t, "\[logo\]", "")
t = replacetext(t, "\[sglogo\]", "")

View File

@@ -181,7 +181,7 @@
return damage * 3 //made for boring holes
/obj/item/projectile/bullet/magnetic/bore/Bump(atom/A, forced=0)
if(istype(A, /turf/simulated/mineral))
if(ismineralturf(A))
var/turf/simulated/mineral/MI = A
loc = get_turf(A) // Careful.
permutated.Add(A)

View File

@@ -372,7 +372,7 @@
..()
/obj/item/projectile/beam/tungsten/on_impact(var/atom/A)
if(istype(A,/turf/simulated/shuttle/wall) || istype(A,/turf/simulated/wall) || (istype(A,/turf/simulated/mineral) && A.density) || istype(A,/obj/mecha) || istype(A,/obj/machinery/door))
if(istype(A,/turf/simulated/shuttle/wall) || istype(A,/turf/simulated/wall) || (ismineralturf(A) && A.density) || istype(A,/obj/mecha) || istype(A,/obj/machinery/door))
var/blast_dir = src.dir
A.visible_message(span_danger("\The [A] begins to glow!"))
spawn(2 SECONDS)

View File

@@ -39,6 +39,6 @@
if(value>=178)
if(istype(T,/turf/simulated/floor/asteroid))
T.ChangeTurf(/turf/simulated/floor/airless/lava)
else if(istype(T,/turf/simulated/mineral))
else if(ismineralturf(T))
var/turf/simulated/mineral/M = T
M.mined_turf = /turf/simulated/floor/airless/lava

View File

@@ -204,7 +204,9 @@
OutputBeaker = null
if("adjust temp")
target_temp = tgui_input_number(user, "Choose a target temperature.", "Temperature.", T20C, max_temp, min_temp, round_value = FALSE)
var/new_temp = tgui_input_number(user, "Choose a target temperature.", "Temperature.", T20C, max_temp, min_temp, round_value = FALSE)
if(isnum(new_temp))
target_temp = new_temp
update_icon()

View File

@@ -10,7 +10,7 @@
if(prefs.muted & MUTE_ADMINHELP)
to_chat(src, span_danger("Error: Mentor-PM: You cannot send adminhelps (Muted)."))
return
if(handle_spam_prevention(msg,MUTE_ADMINHELP))
if(handle_spam_prevention(MUTE_ADMINHELP))
return
if(!msg)
@@ -91,7 +91,7 @@ ADMIN_VERB(cmd_mentor_ticket_panel, (R_ADMIN|R_SERVER|R_MOD|R_MENTOR), "Mentor T
if(prefs.muted & MUTE_ADMINHELP)
to_chat(src, span_danger("Error: Admin-PM: You cannot send adminhelps (Muted)."))
return
if(handle_spam_prevention(msg,MUTE_ADMINHELP))
if(handle_spam_prevention(MUTE_ADMINHELP))
return
if(!msg)
@@ -261,7 +261,7 @@ ADMIN_VERB(cmd_mentor_ticket_panel, (R_ADMIN|R_SERVER|R_MOD|R_MENTOR), "Mentor T
to_chat(src, span_mentor_notice("Message: [msg]"))
return
if (src.handle_spam_prevention(msg,MUTE_ADMINHELP))
if (src.handle_spam_prevention(MUTE_ADMINHELP))
return
msg = trim(sanitize(copytext(msg,1,MAX_MESSAGE_LEN)))

View File

@@ -662,7 +662,10 @@
var/obj/screen/fullscreen/F = L.overlay_fullscreen("belly", /obj/screen/fullscreen/belly, severity) // preserving save data
var/datum/belly_overlays/lookup_belly_path = text2path("/datum/belly_overlays/[lowertext(belly_fullscreen)]")
if(!lookup_belly_path)
CRASH("Icon datum was not defined for [belly_fullscreen]")
var/used_fullscreen = belly_fullscreen
to_chat(owner, span_warning("The belly overlay ([used_fullscreen]) you've selected for [src] no longer exists. Please reselect your overlay."))
belly_fullscreen = null
CRASH("Icon datum was not defined for [used_fullscreen]")
var/alpha = min(belly_fullscreen_alpha, L.max_voreoverlay_alpha)
F.icon = initial(lookup_belly_path.belly_icon)

View File

@@ -220,6 +220,8 @@
if((mode_flags & DM_FLAG_STRIPPING) && H.strip_pref) //Stripping pref check
for(var/slot in slots)
var/obj/item/I = H.get_equipped_item(slot = slot)
if(I.flags & NOSTRIP)
continue
if(I && H.unEquip(I, force = FALSE))
handle_digesting_item(I)
digestion_noise_chance = 25

View File

@@ -39,19 +39,6 @@
/mob/living/proc/handle_special_unlocks()
return
//
// Hook for generic creation of stuff on new creatures
//
/hook/living_new/proc/vore_setup(mob/living/M)
//Tries to load prefs if a client is present otherwise gives freebie stomach
spawn(2 SECONDS)
if(!QDELETED(M))
M.init_vore()
//return TRUE to hook-caller
return TRUE
/mob/proc/init_vore()
//Something else made organs, meanwhile.
if(!isnewplayer(src))
@@ -1436,7 +1423,10 @@
to_chat(user, span_vwarning("This person's prefs dont allow that!"))
return FALSE
var/obj/belly/RTB = tgui_input_list(user, "Choose which vore belly to transfer from", "Select Belly", vore_organs)
if(!LAZYLEN(TG.vore_organs))
return FALSE
var/obj/belly/RTB = tgui_input_list(user, "Choose which vore belly to transfer from", "Select Belly", TG.vore_organs)
if(!RTB)
return FALSE

View File

@@ -33,13 +33,6 @@
/client
var/datum/vore_preferences/prefs_vr
/hook/client_new/proc/add_prefs_vr(client/C)
C.prefs_vr = new/datum/vore_preferences(C)
if(C.prefs_vr)
return TRUE
return FALSE
/datum/vore_preferences
//Actual preferences
var/digestable = TRUE

View File

@@ -1,40 +1,2 @@
//The base hooks themselves
//New() hooks
/hook/client_new
/hook/mob_new
/hook/living_new
/hook/carbon_new
/hook/human_new
/hook/simple_mob_new
//Hooks for interactions
/hook/living_attackby
// Hook for when a mob de-spawns!
/hook/despawn
//
//Hook helpers to expand hooks to others
//
/hook/mob_new/proc/chain_hooks(mob/M)
var/result = 1
if(isliving(M))
if(!hook_vr("living_new",args))
result = 0
if(iscarbon(M))
if(!hook_vr("carbon_new",args))
result = 0
if(ishuman(M))
if(!hook_vr("human_new",args))
result = 0
//Return 1 to superhook
return result

View File

@@ -184,13 +184,6 @@
L.resize(new_size/100, uncapped = has_large_resize_bounds(), ignore_prefs = TRUE)
//CHOMPEDIT - I don't need to be informed every time a prommie changes sizes
/*
//Add the set_size() proc to usable verbs. By commenting this out, we can leave the proc and hand it to species that need it.
/hook/living_new/proc/resize_setup(mob/living/H)
add_verb(H, /mob/living/proc/set_size)
return 1
*/
/**
* Attempt to scoop up this mob up into M's hands, if the size difference is large enough.
* @return false if normal code should continue, 1 to prevent normal code.

View File

@@ -12,13 +12,13 @@ if(attempt_vr(object,proc to call,args)) return
The proc you're attemping should return nonzero values on success.
*/
/proc/attempt_vr(callon, procname, list/args=null)
/proc/attempt_vr(callon, procname, list/arguments=null)
try
if(!callon || !procname)
error("attempt_vr: Invalid obj/proc: [callon]/[procname]")
return 0
var/result = call(callon,procname)(arglist(args))
var/result = call(callon,procname)(arglist(arguments))
return result
@@ -42,7 +42,7 @@ if(hook_vr(proc,args)) return
The hooks you're calling should return nonzero values on success.
*/
/proc/hook_vr(hook, list/args=null)
/proc/hook_vr(hook, list/arguments=null)
try
var/hook_path = text2path("/hook/[hook]")
if(!hook_path)
@@ -52,7 +52,7 @@ The hooks you're calling should return nonzero values on success.
var/hook_instance = new hook_path
var/status = 1
for(var/P in typesof("[hook_path]/proc"))
if(!call(hook_instance, P)(arglist(args)))
if(!call(hook_instance, P)(arglist(arguments)))
error("hook_vr: Hook '[P]' failed or runtimed.")
status = 0

View File

@@ -21,7 +21,7 @@
/obj/machinery/giga_drill/Bump(atom/A)
if(active && !drilling_turf)
if(istype(A,/turf/simulated/mineral))
if(ismineralturf(A))
var/turf/simulated/mineral/M = A
drilling_turf = get_turf(src)
src.visible_message(span_bold("\The [src]") + " begins to drill into \the [M].")

View File

@@ -117,7 +117,7 @@
/obj/item/core_sampler/proc/sample_item(var/item_to_sample, var/mob/user)
var/datum/geosample/geo_data
if(istype(item_to_sample, /turf/simulated/mineral))
if(ismineralturf(item_to_sample))
var/turf/simulated/mineral/T = item_to_sample
T.geologic_data.UpdateNearbyArtifactInfo(T)
geo_data = T.geologic_data

View File

@@ -167,7 +167,7 @@
add_overlay("shield2")
visible_message(span_blue("[icon2html(suspension_field,viewers(src))] [suspension_field] gently absconds [collected > 1 ? "something" : "several things"]."))
else
if(istype(T,/turf/simulated/mineral) || istype(T,/turf/simulated/wall))
if(ismineralturf(T) || istype(T,/turf/simulated/wall))
suspension_field.icon_state = "shieldsparkles"
else
suspension_field.icon_state = "shield2"

View File

@@ -97,9 +97,7 @@ export const AtmosControlContent = (props) => {
</Tabs.Tab>
</Tabs>
</Stack.Item>
<Stack.Item grow m={2}>
{tab[tabIndex]}
</Stack.Item>
<Stack.Item grow>{tab[tabIndex]}</Stack.Item>
</Stack>
);
};