Have you bingled that (#17407)

* Initial wiki system

* wiki organization and spoilers

* hide belly chems

* move ads to tgui

* add search

* .

* load screen

* error screen

* 8

* center

* .

* .

* make this more realistic

* tgui errro col

* move search to top

* .

* non NT theme

* logo to common

* base custom theme

* .

* wip refactor

* almost halfway

* reworked wiki data

* easy fix

* get data fix

* Material Page in tgui

* catch null supply points

* .

* forward crash

* reset pages

* .

* canvas prep

* fix icon stacking

* .

* colored outlined images

* fix sm datum

* fix material names

* subType prep

* only on crash

* fix null crash

* .

* fix solgov

* clean hiding

* .

* implement catalog page

* .

* particle smasher page

* I'm lazy

* unfuck some sins

* ore page

* botany page

* allergen list

* allergen returns null too

* slime injection var

* slime core data

* fixed warning

* wip

* proper data list for chems

* pass is_slime as null

* chems

* split that

* .

* .

* .

* .

* donation for bingle, some cleanup

* return types

* partially colord icons for chemistry

* .

* more sillies

* donation page

* thaler

* needs some variation

* .

* this will crash until implemented

* handle it

* fix that

* dismiss donation banner button

* .

* fix that

* donating procs

* donation stuff for comp

* -

* drink glass for drinks

* illegal iconstate pass

* fixes

* .

* nuke drink fix

* .

* .

* .

* Drink reagent fix

* more cleanup

* adjust

* .

* simple food

* .

* food list

* sending nulls, removed flavor from recipes

* .

* .

* get_donation_current added

* .

* missing key

* .

* duped recipes fixed

* .

* .

* wiki food reagent recipes

* double list add

* properly forbid remaining bad reagent

* hide this too

* stacky

* enable eslint const

* fix typing

* update that

* use proper donation proc

* printing fixes

* grinding

* .

* beaker fill volume

* plant ore and mat grinding results

* duped recipes fixed, unit test tweak

* yes this is terrible

* .

* .

* .

* chem analyzer tgui mode, some subsystem changes to support it

* redoce

* .

* ,

* .

* small fixes, missing reagent volume

* push

* sort

* catalog entries unlocked by explo

* new chem stuff

* .

* fix byond code

* fix scroll tracking

* comment

* alphabetical

* also this

* .

* fallback icon

* .

* ...

* rel path

* that too

* to defines

* organ to define

* .

* .

* .

---------

Co-authored-by: Willburd <7099514+Willburd@users.noreply.github.com>
Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
This commit is contained in:
Cameron Lennox
2025-03-28 19:00:50 +01:00
committed by GitHub
co-authored by Willburd Kashargul
parent 0d340a761b
commit c42610c5ae
361 changed files with 5588 additions and 1128 deletions
+3 -3
View File
@@ -56,9 +56,9 @@
if(!istype(M, /mob/living/carbon)) return
if (ishuman(M))
var/mob/living/carbon/human/H = M
var/obj/item/organ/external/temp = H.organs_by_name["r_hand"]
var/obj/item/organ/external/temp = H.organs_by_name[BP_R_HAND]
if (H.hand)
temp = H.organs_by_name["l_hand"]
temp = H.organs_by_name[BP_L_HAND]
if(temp && !temp.is_usable())
to_chat(H, span_warning("You can't use your [temp.name]"))
return
@@ -121,7 +121,7 @@
/mob/living/carbon/electrocute_act(var/shock_damage, var/obj/source, var/siemens_coeff = 1.0, var/def_zone = null, var/stun = 1)
if(status_flags & GODMODE) return 0 //godmode
if(def_zone == "l_hand" || def_zone == "r_hand") //Diona (And any other potential plant people) hands don't get shocked.
if(def_zone == BP_L_HAND || def_zone == BP_R_HAND) //Diona (And any other potential plant people) hands don't get shocked.
if(species.flags & IS_PLANT)
return 0
shock_damage *= siemens_coeff
@@ -109,7 +109,7 @@
user.visible_message(span_danger("\The [user] plunges \the [W] into \the [src]!"))
var/damage = shank_armor_helper(W, G, user)
apply_damage(damage, W.damtype, "torso", 0, sharp=W.sharp, edge=W.edge)
apply_damage(damage, W.damtype, BP_TORSO, 0, sharp=W.sharp, edge=W.edge)
if(W.hitsound)
playsound(src, W.hitsound, 50, 1, -1)
@@ -312,7 +312,7 @@
msg += span_warning("[T.He] [T.is] on fire!.")
var/ssd_msg = species.get_ssd(src)
if(ssd_msg && (!should_have_organ("brain") || has_brain()) && stat != DEAD)
if(ssd_msg && (!should_have_organ(O_BRAIN) || has_brain()) && stat != DEAD)
if(!key)
msg += span_deadsay("[T.He] [T.is] [ssd_msg]. It doesn't look like [T.he] [T.is] waking up anytime soon.")
else if(!client)
@@ -138,7 +138,7 @@
L[++L.len] = list("Suit charge: [cell_status]", null, null, null, null)
for(var/obj/item/rig_module/module in R.installed_modules)
{
for(var/stat_rig_module/SRM in module.stat_modules)
for(var/atom/movable/stat_rig_module/SRM in module.stat_modules)
if(SRM.CanUse())
L[++L.len] = list(SRM.module.interface_name,null,null,SRM.name,REF(SRM))
}
@@ -376,7 +376,7 @@
if(status_flags & GODMODE) return 0 //godmode
if (!def_zone)
def_zone = pick("l_hand", "r_hand")
def_zone = pick(BP_L_HAND, BP_R_HAND)
if(species.siemens_coefficient == -1)
if(stored_shock_by_ref["\ref[src]"])
@@ -812,7 +812,7 @@
//Used by various things that knock people out by applying blunt trauma to the head.
//Checks that the species has a "head" (brain containing organ) and that hit_zone refers to it.
/mob/living/carbon/human/proc/headcheck(var/target_zone, var/brain_tag = "brain")
/mob/living/carbon/human/proc/headcheck(var/target_zone, var/brain_tag = O_BRAIN)
var/obj/item/organ/affecting = internal_organs_by_name[brain_tag]
@@ -1634,7 +1634,7 @@
/mob/living/carbon/human/can_stand_overridden()
if(wearing_rig && wearing_rig.ai_can_move_suit(check_for_ai = 1))
// Actually missing a leg will screw you up. Everything else can be compensated for.
for(var/limbcheck in list("l_leg","r_leg"))
for(var/limbcheck in list(BP_L_LEG,BP_R_LEG))
var/obj/item/organ/affecting = get_organ(limbcheck)
if(!affecting)
return 0
@@ -41,9 +41,9 @@
var/has_hands = TRUE
if(istype(H))
var/obj/item/organ/external/temp = H.organs_by_name["r_hand"]
var/obj/item/organ/external/temp = H.organs_by_name[BP_R_HAND]
if(H.hand)
temp = H.organs_by_name["l_hand"]
temp = H.organs_by_name[BP_L_HAND]
if(!temp || !temp.is_usable())
has_hands = FALSE
for(var/thing in GetViruses()) //This is intentionally not having a has_hands check. If you are clicking on someone next to them, you're close enough to sneeze/cough on them!
@@ -26,8 +26,8 @@
if(status_flags & GODMODE) return 0 //godmode
if(should_have_organ("brain"))
var/obj/item/organ/internal/brain/sponge = internal_organs_by_name["brain"]
if(should_have_organ(O_BRAIN))
var/obj/item/organ/internal/brain/sponge = internal_organs_by_name[O_BRAIN]
if(sponge)
sponge.take_damage(amount)
brainloss = sponge.damage
@@ -40,8 +40,8 @@
if(status_flags & GODMODE) return 0 //godmode
if(should_have_organ("brain"))
var/obj/item/organ/internal/brain/sponge = internal_organs_by_name["brain"]
if(should_have_organ(O_BRAIN))
var/obj/item/organ/internal/brain/sponge = internal_organs_by_name[O_BRAIN]
if(sponge)
sponge.damage = min(max(amount, 0),(getMaxHealth()*2))
brainloss = sponge.damage
@@ -54,8 +54,8 @@
if(status_flags & GODMODE) return 0 //godmode
if(should_have_organ("brain"))
var/obj/item/organ/internal/brain/sponge = internal_organs_by_name["brain"]
if(should_have_organ(O_BRAIN))
var/obj/item/organ/internal/brain/sponge = internal_organs_by_name[O_BRAIN]
if(sponge)
brainloss = min(sponge.damage,getMaxHealth()*2)
else
@@ -541,9 +541,9 @@ emp_act
// This does a prob check to catch the thing flying at you, with a minimum of 1%
/mob/living/carbon/human/proc/can_catch(var/obj/O)
if(!get_active_hand()) // If active hand is empty
var/obj/item/organ/external/temp = organs_by_name["r_hand"]
var/obj/item/organ/external/temp = organs_by_name[BP_R_HAND]
if (hand)
temp = organs_by_name["l_hand"]
temp = organs_by_name[BP_L_HAND]
if(temp && !temp.is_usable())
return FALSE // The hand isn't working in the first place
@@ -74,7 +74,7 @@
return
var/limb_pain = FALSE
for(var/limb_tag in list("l_leg","r_leg","l_foot","r_foot"))
for(var/limb_tag in list(BP_L_LEG,BP_R_LEG,BP_L_FOOT,BP_R_FOOT))
var/obj/item/organ/external/E = organs_by_name[limb_tag]
if(!E || !E.is_usable())
stance_damage += 2 // let it fail even if just foot&leg
@@ -47,8 +47,8 @@
if(stat)
return
var/obj/item/organ/external/l_hand = get_organ("l_hand")
var/obj/item/organ/external/r_hand = get_organ("r_hand")
var/obj/item/organ/external/l_hand = get_organ(BP_L_HAND)
var/obj/item/organ/external/r_hand = get_organ(BP_R_HAND)
if((!l_hand || l_hand.is_stump()) && (!r_hand || r_hand.is_stump()))
to_chat(src, span_warning("You have no hands to play games with!"))
return
@@ -59,8 +59,8 @@
continue
if(H == src)
continue
var/obj/item/organ/external/l_hand2 = H.get_organ("l_hand")
var/obj/item/organ/external/r_hand2 = H.get_organ("r_hand")
var/obj/item/organ/external/l_hand2 = H.get_organ(BP_L_HAND)
var/obj/item/organ/external/r_hand2 = H.get_organ(BP_R_HAND)
if((!l_hand2 || l_hand2.is_stump()) && (!r_hand2 || r_hand2.is_stump()))
continue
nearby |= H
@@ -70,8 +70,8 @@
continue
if(H == src)
continue
var/obj/item/organ/external/l_hand2 = H.get_organ("l_hand")
var/obj/item/organ/external/r_hand2 = H.get_organ("r_hand")
var/obj/item/organ/external/l_hand2 = H.get_organ(BP_L_HAND)
var/obj/item/organ/external/r_hand2 = H.get_organ(BP_R_HAND)
if((!l_hand2 || l_hand2.is_stump()) && (!r_hand2 || r_hand2.is_stump()))
continue
nearby |= H
+2 -2
View File
@@ -1282,7 +1282,7 @@
else //ALIVE. LIGHTS ARE ON
updatehealth() //TODO
if(health <= CONFIG_GET(number/health_threshold_dead) || (should_have_organ("brain") && !has_brain()))
if(health <= CONFIG_GET(number/health_threshold_dead) || (should_have_organ(O_BRAIN) && !has_brain()))
death()
blinded = 1
silent = 0
@@ -1310,7 +1310,7 @@
qdel(a)
//Brain damage from Oxyloss
if(should_have_organ("brain"))
if(should_have_organ(O_BRAIN))
var/brainOxPercent = 0.015 //Default 1.5% of your current oxyloss is applied as brain damage, 50 oxyloss is 1 brain damage
if(CE_STABLE in chem_effects)
brainOxPercent = 0.008 //Halved in effect
@@ -57,6 +57,7 @@
reagent_state = LIQUID
color = "#ffffff"
scannable = 1
wiki_flag = WIKI_SPOILER
/datum/reagent/glamour_scaling/affect_blood(var/mob/living/carbon/target, var/removed)
if(!(/mob/living/proc/set_size in target.verbs))
@@ -528,7 +528,7 @@
return
//VOREStation Edit Start - Headpats and Handshakes.
if(H.zone_sel.selecting == "head")
if(H.zone_sel.selecting == BP_HEAD)
if(target.touch_reaction_flags & SPECIES_TRAIT_PATTING_DEFENCE)
H.visible_message( \
span_warning("[target] reflexively bites the hand of [H] to prevent head patting!"), \
@@ -541,7 +541,7 @@
H.visible_message( \
span_notice("[H] pats [target] on the head."), \
span_notice("You pat [target] on the head."), )
else if(H.zone_sel.selecting == "r_hand" || H.zone_sel.selecting == "l_hand")
else if(H.zone_sel.selecting == BP_R_HAND || H.zone_sel.selecting == BP_L_HAND)
H.visible_message( \
span_notice("[H] shakes [target]'s hand."), \
span_notice("You shake [target]'s hand."), )
@@ -22,7 +22,7 @@
virus_immune = 1
has_organ = list(
"brain" = /obj/item/organ/internal/brain/golem
O_BRAIN = /obj/item/organ/internal/brain/golem
)
death_message = "becomes completely motionless..."
@@ -30,11 +30,11 @@ var/global/list/sparring_attack_cache = list()
return FALSE
// Check if they have a functioning hand.
var/obj/item/organ/external/E = user.organs_by_name["l_hand"]
var/obj/item/organ/external/E = user.organs_by_name[BP_L_HAND]
if(E && !E.is_stump())
return TRUE
E = user.organs_by_name["r_hand"]
E = user.organs_by_name[BP_R_HAND]
if(E && !E.is_stump())
return TRUE
@@ -79,7 +79,7 @@ var/global/list/sparring_attack_cache = list()
if(BP_GROIN)
target.visible_message(span_warning("[target] looks like [TT.he] [TT.is] in pain!"), span_warning("[(target.gender=="female") ? "Oh god that hurt!" : "Oh no, not your[pick("testicles", "crown jewels", "clockweights", "family jewels", "marbles", "bean bags", "teabags", "sweetmeats", "goolies")]!"]")) // I see no easy way to fix this for non-organic or neuter characters.
target.apply_effects(stutter = attack_damage * 2, agony = attack_damage* 3, blocked = armour)
if("l_leg", "l_foot", "r_leg", "r_foot")
if(BP_L_LEG, BP_L_FOOT, BP_R_LEG, BP_R_FOOT)
if(!target.lying)
target.visible_message(span_warning("[target] gives way slightly."))
target.apply_effect(attack_damage*3, AGONY, armour)
@@ -199,14 +199,14 @@ var/global/list/sparring_attack_cache = list()
if(user.legcuffed || user.buckled)
return FALSE
if(!(zone in list("l_leg", "r_leg", "l_foot", "r_foot", BP_GROIN)))
if(!(zone in list(BP_L_LEG, BP_R_LEG, BP_L_FOOT, BP_R_FOOT, BP_GROIN)))
return FALSE
var/obj/item/organ/external/E = user.organs_by_name["l_foot"]
var/obj/item/organ/external/E = user.organs_by_name[BP_L_FOOT]
if(E && !E.is_stump())
return TRUE
E = user.organs_by_name["r_foot"]
E = user.organs_by_name[BP_R_FOOT]
if(E && !E.is_stump())
return TRUE
@@ -247,14 +247,14 @@ var/global/list/sparring_attack_cache = list()
if(!istype(target))
return FALSE
if (!user.lying && (target.lying || (zone in list("l_foot", "r_foot"))))
if (!user.lying && (target.lying || (zone in list(BP_L_FOOT, BP_R_FOOT))))
if(target.grabbed_by == user && target.lying)
return FALSE
var/obj/item/organ/external/E = user.organs_by_name["l_foot"]
var/obj/item/organ/external/E = user.organs_by_name[BP_L_FOOT]
if(E && !E.is_stump())
return TRUE
E = user.organs_by_name["r_foot"]
E = user.organs_by_name[BP_R_FOOT]
if(E && !E.is_stump())
return TRUE
+1 -1
View File
@@ -943,7 +943,7 @@
if(ishuman(src))
var/mob/living/carbon/human/H = src
if(!H.isSynthetic())
var/obj/item/organ/internal/liver/L = H.internal_organs_by_name["liver"]
var/obj/item/organ/internal/liver/L = H.internal_organs_by_name[O_LIVER]
if(!L || L.is_broken())
blood_vomit = 1
@@ -336,11 +336,11 @@
else
t_him = "them"
if(H.zone_sel.selecting == "head")
if(H.zone_sel.selecting == BP_HEAD)
H.visible_message( \
span_notice("[H] pats [target] on the head."), \
span_notice("You pat [target] on the head."), )
else if(H.zone_sel.selecting == "r_hand" || H.zone_sel.selecting == "l_hand")
else if(H.zone_sel.selecting == BP_R_HAND || H.zone_sel.selecting == BP_L_HAND)
H.visible_message( \
span_notice("[H] shakes [target]'s hand."), \
span_notice("You shake [target]'s hand."), )
@@ -77,7 +77,7 @@
if(!E || E.is_stump())
to_chat(src, span_warning("\The [H] does not have a head!"))
if(!H.should_have_organ("brain"))
if(!H.should_have_organ(O_BRAIN))
to_chat(src, span_warning("\The [H] does not seem to have an ear canal to breach."))
return
@@ -112,7 +112,7 @@
if(ishuman(M))
var/mob/living/carbon/human/H = M
var/obj/item/organ/I = H.internal_organs_by_name["brain"]
var/obj/item/organ/I = H.internal_organs_by_name[O_BRAIN]
if(!I) // No brain organ, so the borer moves in and replaces it permanently.
replace_brain()
else
@@ -182,7 +182,7 @@
H.ChangeToHusk()
var/obj/item/organ/internal/borer/B = new(H)
H.internal_organs_by_name["brain"] = B
H.internal_organs_by_name[O_BRAIN] = B
H.internal_organs |= B
var/obj/item/organ/external/affecting = H.get_organ(BP_HEAD)
+2 -2
View File
@@ -267,8 +267,8 @@
else if(istype(my_mob.buckled, /obj/structure/bed/chair/wheelchair))
if(ishuman(my_mob))
var/mob/living/carbon/human/driver = my_mob
var/obj/item/organ/external/l_hand = driver.get_organ("l_hand")
var/obj/item/organ/external/r_hand = driver.get_organ("r_hand")
var/obj/item/organ/external/l_hand = driver.get_organ(BP_L_HAND)
var/obj/item/organ/external/r_hand = driver.get_organ(BP_R_HAND)
if((!l_hand || l_hand.is_stump()) && (!r_hand || r_hand.is_stump()))
return // No hands to drive your chair? Tough luck!
//drunk wheelchair driving
+8 -6
View File
@@ -50,12 +50,14 @@ var/obj/effect/lobby_image = new /obj/effect/lobby_image
created_for = ckey
new_player_panel()
client.init_verbs()
spawn(40)
if(client)
handle_privacy_poll()
client.playtitlemusic()
version_warnings()
addtimer(CALLBACK(src, PROC_REF(do_after_login)), 4 SECONDS, TIMER_DELETE_ME)
/mob/new_player/proc/do_after_login()
PRIVATE_PROC(TRUE)
if(client)
handle_privacy_poll()
client.playtitlemusic()
version_warnings()
/mob/new_player/proc/version_warnings()
var/problems // string to store message to present to player as a problem
@@ -190,7 +190,6 @@
client.prefs.dress_preview_mob(mannequin)
var/mob/observer/dead/observer = new(mannequin)
observer.moveToNullspace() //Let's not stay in our doomed mannequin
qdel(mannequin) //We're not used anymore, so goodbye!
spawning = 1
if(client.media)