Removes goonchat, adds TGChat and TG Stat Panels (#16514)

* tgui the beginning

* binaries and the like

* Bring in the last of it

* Example radio UI

* delete example

* NTOS Main Menu, start on manifest, tgui states

* tasks.json

* gunnery ui pt 1

* okay

* fix everything

* scss update

* oops

* manifest gigablast

* downloader part 1

* download prt 2

* NTOSDownloader final

* mfw committing to_worlds

* gunnery console pt2

* i cooked

* targeting (finished)

* one vueui down

* voting ui almost done

* MY MIND FEELS LIKE AN ARCH ENEMYYYY

* voting ui down

* photocopier

* ntos config + download fixes

* photocopier 2

* refactor define

* NTOS client manager + fixes

* fax machine final (it also uses toner now)

* marching forwards... left behind...

* ntnrc part 1

* canister

* add quotes

* portable pumps pt1 + more backgrounds

* oops

* finish the portable pump

* freezers

so I'll keep on pushing forward... you haven't seen the last of me... oooooooh...

* doors ui pt1

* finish doors UI (forgive me wildkins it's a bit of shitcode)

* vitals monitor, make things use labeled lists, new backgrounds

* mais j'envoyé aucun mayday...

* maglock pt1

* pour ça je me suis perdu...

* infrared

* fix that

* prox sensor pt1

* prox sensor

* signaler (this was actually pretty hard)

* atmos control pt1

* atmos control pt1.1

* atmos pt 2

* fuel injector

* multitool UI

* jammer

* list viewer

* APC

* portgen

* targeting console updates + SMES ui

* new themes, shield generator

* supermatter

* Add ore detector and (shitty) NTNet Relay

* orderterminal pt1

* orderterminal pt2

* smartfridge

* Add (air-)tank GUI update ore detector size

* Adds Transfer Valves

* Add AtmoScrubber

* analyzer pt1

* weapons analyzer pt2

* bodyscanner pt1

* bodyscanner pt2

* fix this shitcode

* seed storage

* appearance changer

* appearance changer final

* sleeper pt1

* sleeper

* gps

* vehicles

* chem dispenser

* lily request

* holopad

* tgui modules pt1

* ppanel

* damage menu

* fixes

* im here too now

* follow menu, search bars

* quikpay

* quikpay fixes

* circuit printer

* ppanel

* ppanel updates

* pai

* turret controls (i want to kill myself)

* tweak

* remove the boardgame

* guntracker

* implant tracker

* penal mechs

come close to me, come close to me

* chem codex

* pai radio

* doorjack

* pai directives

* signaler removal, sensors

* ghost spawner

* spawnpoint

* fixes

* teleporter

* one more to the chopping block

* account database

* remove divider

* scanner, atmos

* latejoin ui pt1

* latejoin

* records pt1

* RECORDS UI DONE

* delete interpreter & records

* CHAT FUCKING CLIENT

* data updates

* fix some things

* final UI, log

* basic nanoui fix

* antag panel

* remove vueui

* atm update

* vending update

* warrants, cameras

* ntmonitor

* time comes for all

* preserve this legacy

* bring that back (oops)

* rcon, ui auto update for computer UIs, remove rcon computers

* alarm monitoring (a bit broke and also todo: add custom alarm monitoring programs to a few consoles)

* A LIKE SUPREME

* a

* power monitor

* lights on

* fuck this code, fuck nanoui modules, and fuck nanoui

* LEAVE IT OH SO FAR BEHIND

* fix alarm monitoring for synths

* I SAW IN YOU WHAT LIFE WAS MISSING

* comms console

* idcard and record updates

* turn the light on

* arcade

* pt2

* news browser

* static

* crusher

* f

* COULD I JUST SLEIGH THE GOLD FROM THE BALLS? I'M SO FRUSTRATED OH COULD YOU TELL? IF I HEAR ONE MORE VUEUI OR ONE NANOUI I'M GONNA LOSE IT SO LET ME GOOOOOOOOOOOOOOOOO

* codeowners & suit sensors

* html ui style removal

* make lint happy

* tgchat

* tgpanels pt1

* THE SOUL LONGS FOR OBLIVION!!!!!!!!!!!!!!!!!

* figure out why stat isnt working

* goodbye ping

* shhh

* stat updates

* An oath sworn in scors! Omni vortex lies!

* final almost edits

* fix that

* last skin adjustments

* resist and disorder

* i slowly get up and turn off the noise, already fed up...

* pleaseeeeeeeeeeeeeee

* THE CREDIT LARP IS NECESSARY

* i hold the keys

* RISE UP

* fix that?

* harry's suggestions xoxo

* runtime fix pt2

* You are the only thing that I still care about

* fix runtimes and cl

* whoops

* misc fixes

* fix that too

* adds build workflow

* f

* Update update_tgui.yml

* adds some needed steps

* ATM

* misc fixes and tweaks

* fixes 2

* make newscasters usable and fix use power on freezers

* turret control is clearer

* remove duplicate

* makes some verb tabs work properly

* makes verbs work properly for real

* sans moi

* fixes pt2

* fix the chat unnecessarily reloading

* fixes

* epic

* fixes

* fix missing consoles

---------

Co-authored-by: John Wildkins <john.wildkins@gmail.com>
Co-authored-by: Matt Atlas <liermattia@gmail.com>
Co-authored-by: harryob <55142896+harryob@users.noreply.github.com>
Co-authored-by: Werner <Arrow768@users.noreply.github.com>
Co-authored-by: Geeves <ggrobler447@gmail.com>
Co-authored-by: harryob <me@harryob.live>
This commit is contained in:
Matt Atlas
2023-06-26 02:00:14 +02:00
committed by GitHub
co-authored by John Wildkins Matt Atlas harryob Werner Geeves harryob
parent 3cc846c1fe
commit 659752e2ea
266 changed files with 4277 additions and 5936 deletions
+1 -1
View File
@@ -327,7 +327,7 @@
observer.real_name = client.prefs.real_name
observer.name = observer.real_name
if(!client.holder && !config.antag_hud_allowed)
observer.verbs -= /mob/abstract/observer/verb/toggle_antagHUD
remove_verb(observer, /mob/abstract/observer/verb/toggle_antagHUD)
observer.ckey = ckey
observer.initialise_postkey()
qdel(src)
@@ -27,31 +27,28 @@ INITIALIZE_IMMEDIATE(/mob/abstract/new_player)
QDEL_NULL(late_choices_ui)
return ..()
/mob/abstract/new_player/Stat()
..()
/mob/abstract/new_player/get_status_tab_items()
. = ..()
if(statpanel("Lobby"))
stat("Game ID:", game_id)
if(!istype(SSticker))
return
if(!istype(SSticker))
return
if(SSticker.hide_mode == ROUNDTYPE_SECRET)
. += "Game Mode: Secret"
else if (SSticker.hide_mode == ROUNDTYPE_MIXED_SECRET)
. += "Game Mode: Mixed Secret"
else
. += "Game Mode: [master_mode]" // Old setting for showing the game mode
if(SSticker.hide_mode == ROUNDTYPE_SECRET)
stat("Game Mode:", "Secret")
else if (SSticker.hide_mode == ROUNDTYPE_MIXED_SECRET)
stat("Game Mode:", "Mixed Secret")
else
stat("Game Mode:", "[master_mode]") // Old setting for showing the game mode
if(SSticker.current_state == GAME_STATE_PREGAME)
stat("Time To Start:", "[SSticker.pregame_timeleft][round_progressing ? "" : " (DELAYED)"]")
stat("Players: [length(player_list)]", "Players Ready: [SSticker.total_players_ready]")
if(LAZYLEN(SSticker.ready_player_jobs))
for(var/dept in SSticker.ready_player_jobs)
if(LAZYLEN(SSticker.ready_player_jobs[dept]))
stat(uppertext(dept), null)
for(var/char in SSticker.ready_player_jobs[dept])
stat("[copytext_char(char, 1, 18)]", "[SSticker.ready_player_jobs[dept][char]]")
if(SSticker.current_state == GAME_STATE_PREGAME)
. += "Time To Start: [SSticker.pregame_timeleft][round_progressing ? "" : " (DELAYED)"]"
. += "Players: [length(player_list)] Players Ready: [SSticker.total_players_ready]"
if(LAZYLEN(SSticker.ready_player_jobs))
for(var/dept in SSticker.ready_player_jobs)
if(LAZYLEN(SSticker.ready_player_jobs[dept]))
. += "[uppertext(dept)]"
for(var/char in SSticker.ready_player_jobs[dept])
. += "[copytext_char(char, 1, 18)]: [SSticker.ready_player_jobs[dept][char]]"
/mob/abstract/new_player/Topic(href, href_list[])
if(!client) return 0
+7 -15
View File
@@ -43,7 +43,7 @@
sight |= SEE_TURFS | SEE_MOBS | SEE_OBJS | SEE_SELF
see_invisible = SEE_INVISIBLE_OBSERVER
see_in_dark = 100
verbs += /mob/abstract/observer/proc/dead_tele
add_verb(src, /mob/abstract/observer/proc/dead_tele)
set_stat(DEAD)
@@ -234,11 +234,11 @@ Works together with spawning an observer, noted above.
ghost.timeofdeath = src.stat == DEAD ? src.timeofdeath : world.time
ghost.ckey = ckey
ghost.client = client
ghost.initialise_postkey(should_set_timer)
ghost.client?.init_verbs()
if(ghost.client)
if(!ghost.client.holder && !config.antag_hud_allowed) // For new ghosts we remove the verb from even showing up if it's not allowed.
ghost.verbs -= /mob/abstract/observer/verb/toggle_antagHUD // Poor guys, don't know what they are missing!
remove_verb(ghost, /mob/abstract/observer/verb/toggle_antagHUD) // Poor guys, don't know what they are missing!
return ghost
/*
@@ -280,14 +280,6 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
/mob/abstract/observer/set_stat()
stat = DEAD // They are also always dead
/mob/abstract/observer/Stat()
..()
if(statpanel("Status"))
if(evacuation_controller)
var/eta_status = evacuation_controller.get_status_panel_eta()
if(eta_status)
stat(null, eta_status)
/mob/abstract/observer/verb/reenter_corpse()
set category = "Ghost"
set name = "Re-enter Corpse"
@@ -379,7 +371,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
if(!istype(usr, /mob/abstract/observer))
to_chat(usr, "Not when you're not dead!")
return
usr.verbs -= /mob/abstract/observer/proc/dead_tele
remove_verb(usr, /mob/abstract/observer/proc/dead_tele)
ADD_VERB_IN(usr, 30, /mob/abstract/observer/proc/dead_tele)
var/area/thearea = ghostteleportlocs[A]
if(!thearea) return
@@ -729,9 +721,9 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
is_manifest = 0
if(!is_manifest)
is_manifest = 1
verbs += /mob/abstract/observer/proc/toggle_visibility_verb
verbs += /mob/abstract/observer/proc/ghost_whisper
verbs += /mob/abstract/observer/proc/move_item
add_verb(src, /mob/abstract/observer/proc/toggle_visibility_verb)
add_verb(src, /mob/abstract/observer/proc/ghost_whisper)
add_verb(src, /mob/abstract/observer/proc/move_item)
if(src.invisibility != 0)
user.visible_message( \
+3 -3
View File
@@ -6,7 +6,7 @@
var/timeout_timer
/mob/abstract/unauthed/New()
verbs -= typesof(/mob/verb)
remove_verb(src, typesof(/mob/verb))
/mob/abstract/unauthed/LateLogin()
SHOULD_CALL_PARENT(FALSE)
@@ -15,7 +15,7 @@
to_chat(src, "<span class='danger'><b>You need to authenticate before you can continue.</b></span>")
token = md5("[client.ckey][client.computer_id][world.time][rand()]")
unauthed[token] = src
client.verbs -= typesof(/client/verb)
remove_verb(client, typesof(/client/verb))
var/uihtml = "<html><head><style>body * {display: block;text-align:center;margin: 14px 0;font-size:24px;text-decoration:none;font-family:Segoe UI,Frutiger,Frutiger Linotype,Dejavu Sans,Helvetica Neue,Arial,sans-serif;}</style></head><body><p>Please select:</p>"
if(config.guests_allowed)
uihtml += "<a href='?src=\ref[src];authaction=guest'>Login as guest</a>"
@@ -39,7 +39,7 @@
var/client/c = client // so we don't lose the client in the current mob.
show_browser(src, null, "window=externalauth")
c.verbs += typesof(/client/verb) // Let's return regular client verbs
add_verb(c, typesof(/client/verb)) // Let's return regular client verbs
c.authed = TRUE // We declare client as authed now
c.prefs = null //Null them so we can load them from the db again for the correct ckey
// Check for bans
+2 -1
View File
@@ -117,6 +117,7 @@ var/list/holder_mob_icon_cache = list()
M.attackby(W,user)
/obj/item/holder/dropped(mob/user)
. = ..()
///When an object is put into a container, drop fires twice.
//once with it on the floor, and then once in the container
@@ -204,7 +205,7 @@ var/list/holder_mob_icon_cache = list()
to_chat(grabber, "<span class='warning'>Your hand is full!</span>")
return
src.verbs += /mob/living/proc/get_holder_location//This has to be before we move the mob into the holder
add_verb(src, /mob/living/proc/get_holder_location) //This has to be before we move the mob into the holder
spawn(2)
var/obj/item/holder/H = new holder_type(loc)
+1 -1
View File
@@ -323,7 +323,7 @@
key = "4"
flags = WHITELISTED | TCOMSSIM
syllables = list("af", "if", "ba", "ta", "tha", "id", "jem", "ha", "kha", "dal", "dhl", "ra", "zay", "sen", "um", "shn", "sid", "ad", "ta", "za", "ayn", "gha", "zir", "yn", "fa", "qaf", "iam", "mim", "al", "ja", "non", "ha", "waw", "ya",
"hem", "zah", "hml", "ks", "ini", "da", "ks", "iga", "ih", "la", "ulf", "xe", "ayw", "sit", "ah", "aarah", "jalaa", "sirt", "kurt", "turhk", "ust", "irk", "kir", "mir", "ach", "oglu", "bolu", "shek", "she", "ghoz", "miya", "ejdan",
"hem", "zah", "hml", "ks", "ini", "da", "ks", "iga", "ih", "la", "ulf", "xe", "ayw", "sit", "ah", "aarah", "jalaa", "sirt", "kurt", "turhk", "ust", "irk", "kir", "mir", "ach", "oglu", "bolu", "shek", "she", "ghoz", "miya", "ejdan",
"haaz", "quq", "taab", "shanha", "an", "saa", "seh", "an'", "e'", "a'", "em'")
allow_accents = TRUE
@@ -25,8 +25,8 @@
time_of_birth = world.time
verbs += /mob/living/proc/ventcrawl
verbs += /mob/living/proc/hide
add_verb(src, /mob/living/proc/ventcrawl)
add_verb(src, /mob/living/proc/hide)
name = "[initial(name)] ([rand(1, 1000)])"
real_name = name
@@ -40,9 +40,9 @@
/mob/living/carbon/alien/u_equip(obj/item/W as obj)
return
/mob/living/carbon/alien/Stat()
..()
stat(null, "Progress: [amount_grown]/[max_grown]")
/mob/living/carbon/alien/get_status_tab_items()
. = ..()
. += "Progress: [amount_grown]/[max_grown]"
/mob/living/carbon/alien/restrained()
return 0
@@ -51,4 +51,4 @@
return // Consider adding cuffs and hats to this, for the sake of fun.
/mob/living/carbon/alien/cannot_use_vents()
return
return
@@ -232,37 +232,36 @@
//This function makes sure the nymph has the correct split/merge verbs, depending on whether or not its part of a gestalt
/mob/living/carbon/alien/diona/proc/update_verbs()
if(gestalt && !detached)
verbs |= /mob/living/carbon/alien/diona/proc/split
verbs -= /mob/living/proc/ventcrawl
verbs -= /mob/living/proc/hide
verbs -= /mob/living/carbon/alien/diona/proc/grow
verbs -= /mob/living/carbon/alien/diona/proc/merge
verbs -= /mob/living/carbon/proc/absorb_nymph
verbs -= /mob/living/carbon/proc/sample
verbs -= /mob/living/carbon/alien/diona/proc/remove_hat
verbs -= /mob/living/carbon/alien/diona/proc/attach_nymph_limb
verbs -= /mob/living/carbon/alien/diona/proc/detach_nymph_limb
add_verb(src, /mob/living/carbon/alien/diona/proc/split)
remove_verb(src, /mob/living/proc/ventcrawl)
remove_verb(src, /mob/living/proc/hide)
remove_verb(src, /mob/living/carbon/alien/diona/proc/grow)
remove_verb(src, /mob/living/carbon/alien/diona/proc/merge)
remove_verb(src, /mob/living/carbon/proc/absorb_nymph)
remove_verb(src, /mob/living/carbon/proc/sample)
remove_verb(src, /mob/living/carbon/alien/diona/proc/remove_hat)
remove_verb(src, /mob/living/carbon/alien/diona/proc/attach_nymph_limb)
remove_verb(src, /mob/living/carbon/alien/diona/proc/detach_nymph_limb)
else
verbs |= /mob/living/carbon/alien/diona/proc/merge
verbs |= /mob/living/carbon/proc/absorb_nymph
verbs |= /mob/living/carbon/alien/diona/proc/grow
verbs |= /mob/living/proc/ventcrawl
verbs |= /mob/living/proc/hide
verbs |= /mob/living/carbon/proc/sample
verbs |= /mob/living/carbon/alien/diona/proc/remove_hat
verbs |= /mob/living/carbon/alien/diona/proc/attach_nymph_limb
verbs |= /mob/living/carbon/alien/diona/proc/detach_nymph_limb
verbs -= /mob/living/carbon/alien/diona/proc/split // we want to remove this one
add_verb(src, /mob/living/carbon/alien/diona/proc/merge)
add_verb(src, /mob/living/carbon/proc/absorb_nymph)
add_verb(src, /mob/living/carbon/alien/diona/proc/grow)
add_verb(src, /mob/living/proc/ventcrawl)
add_verb(src, /mob/living/proc/hide)
add_verb(src, /mob/living/carbon/proc/sample)
add_verb(src, /mob/living/carbon/alien/diona/proc/remove_hat)
add_verb(src, /mob/living/carbon/alien/diona/proc/attach_nymph_limb)
add_verb(src, /mob/living/carbon/alien/diona/proc/detach_nymph_limb)
remove_verb(src, /mob/living/carbon/alien/diona/proc/split) // we want to remove this one
verbs -= /mob/living/carbon/alien/verb/evolve //We don't want the old alien evolve verb
remove_verb(src, /mob/living/carbon/alien/verb/evolve) //We don't want the old alien evolve verb
/mob/living/carbon/alien/diona/Stat()
..()
if(statpanel("Status"))
stat(null, text("Biomass: [nutrition]/[evolve_nutrition]"))
if(nutrition > evolve_nutrition)
stat(null, text("You have enough biomass to grow!"))
/mob/living/carbon/alien/diona/get_status_tab_items()
. = ..()
. += "Biomass: [nutrition]/[evolve_nutrition]"
if(nutrition > evolve_nutrition)
. += "You have enough biomass to grow!"
//Overriding this function from /mob/living/carbon/alien/life.dm
/mob/living/carbon/alien/diona/handle_regular_status_updates()
@@ -147,7 +147,7 @@
return
if(!iscarbon(loc))
verbs -= /mob/living/carbon/alien/diona/proc/split
remove_verb(src, /mob/living/carbon/alien/diona/proc/split)
return
var/r = alert(src, "Splitting will remove you from your gestalt and deposit you on the ground, allowing you continue alone. If you had any stored biomass before you joined the gestalt, you will not get it back. Are you sure you wish to split?", "Confirm Split", "I am ready to leave.", "I'll stick around.")
@@ -8,7 +8,7 @@
return
if(!adult_form)
verbs -= /mob/living/carbon/alien/verb/evolve
remove_verb(src, /mob/living/carbon/alien/verb/evolve)
return
if(handcuffed || legcuffed)
@@ -50,4 +50,4 @@
return
/mob/living/carbon/alien/proc/show_evolution_blurb()
return
return
+2 -2
View File
@@ -566,8 +566,8 @@ var/list/diona_banned_languages = list(
C.diona_handle_regeneration(C.DS, TRUE)
to_chat(C, SPAN_NOTICE("Your lost nymph merged back."))
C.add_nymph()
verbs -= /mob/living/carbon/alien/diona/proc/switch_to_gestalt
C.verbs -= /mob/living/carbon/human/proc/switch_to_nymph
remove_verb(src, /mob/living/carbon/alien/diona/proc/switch_to_gestalt)
remove_verb(C, /mob/living/carbon/human/proc/switch_to_nymph)
C.DS.nym = null
detached = FALSE
src.forceMove(C)
@@ -58,7 +58,7 @@
B.host_brain.name = "host brain"
B.host_brain.real_name = "host brain"
verbs -= /mob/living/carbon/proc/release_control
remove_verb(src, /mob/living/carbon/proc/release_control)
callHook("death", list(src, gibbed))
@@ -14,10 +14,10 @@
/mob/living/carbon/human/proc/setup_gestalt()
composition_reagent = /singleton/reagent/nutriment //Dionae are plants, so eating them doesn't give animal protein
setup_dionastats()
verbs += /mob/living/carbon/human/proc/check_light
verbs += /mob/living/carbon/human/proc/diona_split_nymph
verbs += /mob/living/carbon/human/proc/diona_detach_nymph
verbs += /mob/living/carbon/human/proc/pause_regen_process
add_verb(src, /mob/living/carbon/human/proc/check_light)
add_verb(src, /mob/living/carbon/human/proc/diona_split_nymph)
add_verb(src, /mob/living/carbon/human/proc/diona_detach_nymph)
add_verb(src, /mob/living/carbon/human/proc/pause_regen_process)
spawn(10)
//This is delayed after a gestalt is spawned, to allow nymphs to be added to it before extras are created
@@ -25,7 +25,7 @@
//There are no initial nymphs for a newly spawned diona player
if (mind?.name && mind.name != real_name)
verbs += /mob/living/carbon/human/proc/gestalt_set_name
add_verb(src, /mob/living/carbon/human/proc/gestalt_set_name)
var/datum/language/L = locate(/datum/language/diona) in languages
var/newname
if (L)
@@ -251,9 +251,9 @@
src.ajourn = 0
DS.nym = WEAKREF(M)
M.gestalt = src
M.verbs += /mob/living/carbon/alien/diona/proc/merge_back_to_gestalt
M.verbs += /mob/living/carbon/alien/diona/proc/switch_to_gestalt
verbs += /mob/living/carbon/human/proc/switch_to_nymph
add_verb(M, /mob/living/carbon/alien/diona/proc/merge_back_to_gestalt)
add_verb(M, /mob/living/carbon/alien/diona/proc/switch_to_gestalt)
add_verb(src, /mob/living/carbon/human/proc/switch_to_nymph)
M.detached = TRUE
M.update_verbs(TRUE)
M.languages = languages.Copy()
+34 -45
View File
@@ -34,7 +34,7 @@
if(mind)
mind.name = real_name
if(get_hearing_sensitivity())
verbs += /mob/living/carbon/human/proc/listening_close
add_verb(src, /mob/living/carbon/human/proc/listening_close)
if(!height)
height = species.species_height
@@ -191,47 +191,36 @@
return nutrition + stomach.ingested.total_volume
return 0
/mob/living/carbon/human/Stat()
..()
if(statpanel("Status"))
stat("Intent:", "[a_intent]")
stat("Move Mode:", "[m_intent]")
if(evacuation_controller)
var/eta_status = evacuation_controller.get_status_panel_eta()
if(eta_status)
stat(null, eta_status)
if(is_diona() && DS)
stat("Biomass:", "[round(nutrition)] / [max_nutrition]")
stat("Energy:", "[round(DS.stored_energy)] / [round(DS.max_energy)]")
if(DS.regen_limb)
stat("Regeneration Progress:", " [round(DS.regen_limb_progress)] / [LIMB_REGROW_REQUIREMENT]")
if (internal)
if (!internal.air_contents)
qdel(internal)
else
stat("Internal Atmosphere Info", internal.name)
stat("Tank Pressure", internal.air_contents.return_pressure())
stat("Distribution Pressure", internal.distribute_pressure)
/mob/living/carbon/human/get_status_tab_items()
. = ..()
. += "Intent: [a_intent]"
. += "Move Mode: [m_intent]"
if(is_diona() && DS)
. += "Biomass: [round(nutrition)] / [max_nutrition]"
. += "Energy: [round(DS.stored_energy)] / [round(DS.max_energy)]"
if(DS.regen_limb)
. += "Regeneration Progress: [round(DS.regen_limb_progress)] / [LIMB_REGROW_REQUIREMENT]"
if (internal)
if (!internal.air_contents)
qdel(internal)
else
. += "Internal Atmosphere Info: [internal.name]"
. += "Tank Pressure: [internal.air_contents.return_pressure()]"
. += "Distribution Pressure: [internal.distribute_pressure]"
var/obj/item/organ/internal/cell/IC = internal_organs_by_name[BP_CELL]
if(IC && IC.cell)
stat("Battery charge:", "[IC.get_charge()]/[IC.cell.maxcharge]")
var/obj/item/organ/internal/cell/IC = internal_organs_by_name[BP_CELL]
if(IC && IC.cell)
. += "Battery charge: [IC.get_charge()]/[IC.cell.maxcharge]"
if(back && istype(back,/obj/item/rig))
var/obj/item/rig/suit = back
var/cell_status = "ERROR"
if(suit.cell) cell_status = "[suit.cell.charge]/[suit.cell.maxcharge]"
stat(null, "Suit charge: [cell_status]")
if(mind)
var/datum/vampire/vampire = mind.antag_datums[MODE_VAMPIRE]
if(vampire)
stat("Usable Blood", vampire.blood_usable)
stat("Total Blood", vampire.blood_total)
var/datum/changeling/changeling = mind.antag_datums[MODE_CHANGELING]
if(changeling)
stat("Chemical Storage", changeling.chem_charges)
stat("Genetic Damage Time", changeling.geneticdamage)
if(mind)
var/datum/vampire/vampire = mind.antag_datums[MODE_VAMPIRE]
if(vampire)
. += "Usable Blood [vampire.blood_usable]"
. += "Total Blood [vampire.blood_total]"
var/datum/changeling/changeling = mind.antag_datums[MODE_CHANGELING]
if(changeling)
. += "Chemical Storage: [changeling.chem_charges]"
. += "Genetic Damage Time: [changeling.geneticdamage]"
/mob/living/carbon/human/ex_act(severity)
if(!blinded)
@@ -1040,7 +1029,7 @@
return
if(NOT_FLAG(mutations, mMorph))
src.verbs -= /mob/living/carbon/human/proc/morph
remove_verb(src, /mob/living/carbon/human/proc/morph)
return
var/new_facial = input("Please select facial hair color.", "Character Generation",rgb(r_facial,g_facial,b_facial)) as color
@@ -1121,7 +1110,7 @@
return
if(NOT_FLAG(mutations, mRemotetalk))
src.verbs -= /mob/living/carbon/human/proc/remotesay
remove_verb(src, /mob/living/carbon/human/proc/remotesay)
return
var/list/creatures = list()
for(var/hh in human_mob_list)
@@ -1155,7 +1144,7 @@
if(NOT_FLAG(mutations, mRemote))
remoteview_target = null
reset_view(0)
src.verbs -= /mob/living/carbon/human/proc/remoteobserve
remove_verb(src, /mob/living/carbon/human/proc/remoteobserve)
return
if(client.eye != client.mob)
@@ -1295,7 +1284,7 @@
blood_DNA[H.dna.unique_enzymes] = H.dna.b_type
hand_blood_color = H.species?.blood_color
src.update_inv_gloves() //handles bloody hands overlays and updating
verbs += /mob/living/carbon/human/proc/bloody_doodle
add_verb(src, /mob/living/carbon/human/proc/bloody_doodle)
return TRUE //we applied blood to the item
/mob/living/carbon/human/proc/get_full_print()
@@ -1520,7 +1509,7 @@
return 0 //something is terribly wrong
if (!bloody_hands)
verbs -= /mob/living/carbon/human/proc/bloody_doodle
remove_verb(src, /mob/living/carbon/human/proc/bloody_doodle)
if (src.gloves)
to_chat(src, SPAN_WARNING("Your [src.gloves] are getting in the way."))
@@ -412,9 +412,9 @@
/mob/living/carbon/human/proc/set_tail_style(var/new_style)
tail_style = new_style
if(tail_style)
verbs |= /mob/living/carbon/human/proc/open_tail_storage
add_verb(src, /mob/living/carbon/human/proc/open_tail_storage)
else
verbs -= /mob/living/carbon/human/proc/open_tail_storage
remove_verb(src, /mob/living/carbon/human/proc/open_tail_storage)
/mob/living/carbon/human/proc/get_tail_accessory()
var/obj/item/organ/external/groin/G = organs_by_name[BP_GROIN]
@@ -434,7 +434,7 @@
/datum/species/proc/remove_inherent_verbs(var/mob/living/carbon/human/H)
if(inherent_verbs)
for(var/verb_path in inherent_verbs)
H.verbs -= verb_path
remove_verb(H, verb_path)
if(inherent_spells)
for(var/spell_path in inherent_spells)
@@ -446,7 +446,7 @@
/datum/species/proc/add_inherent_verbs(var/mob/living/carbon/human/H)
if(inherent_verbs)
for(var/verb_path in inherent_verbs)
H.verbs |= verb_path
add_verb(H, verb_path)
if(inherent_spells)
for(var/spell_path in inherent_spells)
+9 -10
View File
@@ -72,7 +72,7 @@
/mob/living/carbon/slime/Initialize(mapload, colour = "grey")
. = ..()
verbs += /mob/living/proc/ventcrawl
add_verb(src, /mob/living/proc/ventcrawl)
add_language(LANGUAGE_TCB)
set_default_language(all_languages[LANGUAGE_TCB])
@@ -226,22 +226,21 @@
/mob/living/carbon/slime/Allow_Spacemove()
return TRUE
/mob/living/carbon/slime/Stat()
..()
/mob/living/carbon/slime/get_status_tab_items()
. = ..()
statpanel("Status")
stat(null, "Health: [round((health / maxHealth) * 100)]%")
stat(null, "Intent: [a_intent]")
. += "Health: [round((health / maxHealth) * 100)]%"
. += "Intent: [a_intent]"
if(client.statpanel == "Status")
stat(null, "Nutrition: [nutrition]/[get_max_nutrition()]")
. += "Nutrition: [nutrition]/[get_max_nutrition()]"
if(amount_grown >= 5)
if(is_adult)
stat(null, "You can reproduce!")
. += "You can reproduce!"
else
stat(null, "You can evolve!")
. += "You can evolve!"
stat(null,"Power Level: [powerlevel]")
. += "Power Level: [powerlevel]"
/mob/living/carbon/slime/adjustFireLoss(amount)
..(-abs(amount)) // Heals them
+1 -1
View File
@@ -224,7 +224,7 @@
/mob/living/proc/embed(var/obj/O, var/def_zone=null)
O.forceMove(src)
src.embedded += O
src.verbs += /mob/proc/yank_out_object
add_verb(src, /mob/proc/yank_out_object)
/mob/living/proc/turf_collision(var/atom/T, var/speed = THROWFORCE_SPEED_DIVISOR, var/sound_to_play = 'sound/effects/bangtaper.ogg')
visible_message("<span class='danger'>[src] slams into \the [T]!</span>")
+4 -4
View File
@@ -107,12 +107,12 @@ var/list/ai_verbs_default = list(
var/custom_sprite = FALSE // Whether the selected icon is custom
/mob/living/silicon/ai/proc/add_ai_verbs()
src.verbs |= ai_verbs_default
src.verbs |= silicon_subsystems
add_verb(src, ai_verbs_default)
add_verb(src, silicon_subsystems)
/mob/living/silicon/ai/proc/remove_ai_verbs()
src.verbs -= ai_verbs_default
src.verbs -= silicon_subsystems
remove_verb(src, ai_verbs_default)
remove_verb(src, silicon_subsystems)
/mob/living/silicon/ai/Initialize(mapload, datum/ai_laws/L, obj/item/device/mmi/B, safety = 0)
shouldnt_see = typecacheof(/obj/effect/rune)
+3 -11
View File
@@ -10,9 +10,9 @@
hacked_apcs = list()
recalc_cpu()
verbs += new/datum/game_mode/malfunction/verb/ai_select_hardware()
verbs += new/datum/game_mode/malfunction/verb/ai_select_research()
verbs += new/datum/game_mode/malfunction/verb/ai_help()
add_verb(src, new/datum/game_mode/malfunction/verb/ai_select_hardware())
add_verb(src, new/datum/game_mode/malfunction/verb/ai_select_research())
add_verb(src, new/datum/game_mode/malfunction/verb/ai_help())
// And greet user with some OOC info.
to_chat(user, "You are malfunctioning, you do not have to follow any laws.")
@@ -108,14 +108,6 @@
/mob/living/silicon/ai/proc/hardware_integrity()
return (health / maxHealth) * 100
// Shows capacitor charge and hardware integrity information to the AI in Status tab.
/mob/living/silicon/ai/show_system_integrity()
if(!src.stat)
stat("Hardware integrity", "[hardware_integrity()]%")
stat("Internal capacitor", "[backup_capacitor()]%")
else
stat("Systems nonfunctional")
// Shows AI Malfunction related information to the AI.
/mob/living/silicon/ai/show_malf_ai()
if(src.is_malf())
+7 -7
View File
@@ -36,14 +36,14 @@
else
health = maxHealth - getBruteLoss() - getFireLoss()
/mob/living/silicon/pai/Stat()
..()
/mob/living/silicon/pai/get_status_tab_items()
. = ..()
if(istype(card.loc, /mob/living/bot))
var/mob/living/bot/B = card.loc
stat(null, "Piloting: [B.name]")
stat(null, "Bot Status: [B.on ? "Active" : "Inactive"]")
stat(null, "Maintenance Hatch: [B.open ? "Open" : "Closed"]")
stat(null, "Maintenance Lock: [B.locked ? "Locked" : "Unlocked"]")
. += "Piloting: [B.name]"
. += "Bot Status: [B.on ? "Active" : "Inactive"]"
. += "Maintenance Hatch: [B.open ? "Open" : "Closed"]"
. += "Maintenance Lock: [B.locked ? "Locked" : "Unlocked"]"
if(B.emagged)
stat(null, "Bot M#$FUN90: MALFUNC--")
. += "Bot M#$FUN90: MALFUNC--"
+12 -19
View File
@@ -183,11 +183,11 @@
add_language(LANGUAGE_SIGN, 0)
set_custom_sprite()
verbs += /mob/living/silicon/pai/proc/choose_chassis
verbs += /mob/living/silicon/pai/proc/choose_verbs
verbs += /mob/living/silicon/proc/computer_interact
verbs += /mob/living/silicon/pai/proc/personal_computer_interact
verbs += /mob/living/silicon/proc/silicon_mimic_accent
add_verb(src, /mob/living/silicon/pai/proc/choose_chassis)
add_verb(src, /mob/living/silicon/pai/proc/choose_verbs)
add_verb(src, /mob/living/silicon/proc/computer_interact)
add_verb(src, /mob/living/silicon/pai/proc/personal_computer_interact)
add_verb(src, /mob/living/silicon/proc/silicon_mimic_accent)
. = ..()
@@ -214,18 +214,11 @@
greeted = 1
..()
// this function shows the information about being silenced as a pAI in the Status panel
/mob/living/silicon/pai/proc/show_silenced()
if(src.silence_time)
/mob/living/silicon/pai/get_status_tab_items()
. = ..()
if(silence_time)
var/timeleft = round((silence_time - world.timeofday)/10 ,1)
stat(null, "Communications system reboot in -[(timeleft / 60) % 60]:[add_zero(num2text(timeleft % 60), 2)]")
/mob/living/silicon/pai/Stat()
..()
statpanel("Status")
if (src.client.statpanel == "Status")
show_silenced()
. += "Communications system reboot in -[(timeleft / 60) % 60]:[add_zero(num2text(timeleft % 60), 2)]"
/mob/living/silicon/pai/check_eye(var/mob/user as mob)
if (!src.current)
@@ -386,8 +379,8 @@
holder_type = pai_holder_types[choice]
chassis = icon_state
verbs -= /mob/living/silicon/pai/proc/choose_chassis
verbs += /mob/living/proc/hide
remove_verb(src, /mob/living/silicon/pai/proc/choose_chassis)
add_verb(src, /mob/living/proc/hide)
/mob/living/silicon/pai/verb/get_onmob_location()
set category = "pAI Commands"
@@ -412,7 +405,7 @@
speak_exclamation = sayverbs[(sayverbs.len>1 ? 2 : sayverbs.len)]
speak_query = sayverbs[(sayverbs.len>2 ? 3 : sayverbs.len)]
verbs -= /mob/living/silicon/pai/proc/choose_verbs
remove_verb(src, /mob/living/silicon/pai/proc/choose_verbs)
/mob/living/silicon/pai/lay_down()
set name = "Rest"
@@ -120,5 +120,6 @@
user.drop_from_inventory(src)
/obj/item/device/robotanalyzer/augment/dropped()
. = ..()
loc = null
qdel(src)
@@ -31,7 +31,7 @@
/mob/living/silicon/robot/combat/Initialize()
. = ..()
verbs += /mob/living/silicon/robot/proc/choose_icon
add_verb(src, /mob/living/silicon/robot/proc/choose_icon)
var/datum/robot_component/C = components["surge"]
C.installed = TRUE
C.wrapped = new C.external_type
@@ -119,4 +119,4 @@
if(R.cell)
R.cell.use(350)
return TRUE
return FALSE
return FALSE
@@ -254,7 +254,7 @@
/mob/living/silicon/robot/drone/Initialize()
. = ..()
verbs |= /mob/living/proc/hide
add_verb(src, /mob/living/proc/hide)
remove_language(LANGUAGE_ROBOT)
add_language(LANGUAGE_ROBOT, FALSE)
add_language(LANGUAGE_DRONE, TRUE)
@@ -273,7 +273,7 @@
var/datum/robot_component/C = components[V]
C.max_damage = 10
verbs -= /mob/living/silicon/robot/verb/Namepick
remove_verb(src, /mob/living/silicon/robot/verb/Namepick)
density = FALSE
/mob/living/silicon/robot/drone/init()
@@ -567,10 +567,10 @@
..()
/mob/living/silicon/robot/drone/add_robot_verbs()
src.verbs |= silicon_subsystems
add_verb(src, silicon_subsystems)
/mob/living/silicon/robot/drone/remove_robot_verbs()
src.verbs -= silicon_subsystems
remove_verb(src, silicon_subsystems)
/mob/living/silicon/robot/drone/self_destruct()
gib()
+27 -36
View File
@@ -555,39 +555,30 @@
set_light(0)
setup_eye_cache() //update eyes
// this function displays jetpack pressure in the stat panel
/mob/living/silicon/robot/proc/show_jetpack_pressure()
// if you have a jetpack, show the internal tank pressure
if(jetpack)
stat(null, "Internal Atmosphere Info: [jetpack.name]")
stat(null, "Tank Pressure: [jetpack.air_contents.return_pressure()]")
// this function displays the cyborgs current cell charge in the stat panel
/mob/living/silicon/robot/proc/show_cell_power()
if(cell)
stat(null, text("Charge Left: [round(cell.percent())]%"))
stat(null, text("Cell Rating: [round(cell.maxcharge)]")) // Round just in case we somehow get crazy values
stat(null, text("Power Cell Load: [round(used_power_this_tick)]W"))
else
stat(null, text("No Cell Inserted!"))
/mob/living/silicon/robot/proc/show_access()
if(!module)
stat(null, text("Access type: assistant level access"))
. = "Access Type: Assistant Level"
else
stat(null, text("Access type: [module.all_access ? "all access" : "role specific"]"))
. = "Access Type: [module.all_access ? "All Access" : "Role Specific"]"
// update the status screen display
/mob/living/silicon/robot/Stat()
..()
if(statpanel("Status"))
show_cell_power()
show_access()
show_jetpack_pressure()
stat(null, text("Lights: [lights_on ? "ON" : "OFF"]"))
if(module)
for(var/datum/matter_synth/ms in module.synths)
stat("[ms.name]: [ms.energy]/[ms.max_energy_multiplied]")
/mob/living/silicon/robot/get_status_tab_items()
. = ..()
if(cell)
. += "Charge Left: [round(cell.percent())]%"
. += "Cell Rating: [round(cell.maxcharge)]" // Round just in case we somehow get crazy values
. += "Power Cell Load: [round(used_power_this_tick)]W"
else
. += "No Cell Inserted!"
. += show_access()
if(jetpack)
. += "Internal Atmosphere Info: [jetpack.name]"
. += "Tank Pressure: [jetpack.air_contents.return_pressure()]"
. += "Lights: [lights_on ? "ON" : "OFF"]"
if(module)
for(var/datum/matter_synth/ms in module.synths)
. += "[ms.name]: [ms.energy]/[ms.max_energy_multiplied]"
/mob/living/silicon/robot/restrained()
return FALSE
@@ -1092,7 +1083,7 @@
if(R)
R.UnlinkSelf()
to_chat(R, SPAN_NOTICE("Buffers flushed and reset. Camera system shutdown. All systems operational."))
src.verbs -= /mob/living/silicon/robot/proc/ResetSecurityCodes
remove_verb(src, /mob/living/silicon/robot/proc/ResetSecurityCodes)
/mob/living/silicon/robot/proc/SetLockdown(var/state = TRUE)
// They stay locked down if their wire is cut.
@@ -1121,7 +1112,7 @@
return
if(icon_selected)
verbs -= /mob/living/silicon/robot/proc/choose_icon
remove_verb(src, /mob/living/silicon/robot/proc/choose_icon)
return
if(length(module_sprites) == 1 || !client)
@@ -1151,7 +1142,7 @@
setup_icon_cache()
playsound(get_turf(src), 'sound/effects/pop.ogg', 10, TRUE)
spark(get_turf(src), 5, alldirs)
verbs -= /mob/living/silicon/robot/proc/choose_icon
remove_verb(src, /mob/living/silicon/robot/proc/choose_icon)
to_chat(src, SPAN_NOTICE("Your icon has been set. You now require a module reset to change it."))
@@ -1168,12 +1159,12 @@
return sensor_mode == MED_HUD
/mob/living/silicon/robot/proc/add_robot_verbs()
src.verbs |= robot_verbs_default
src.verbs |= silicon_subsystems
add_verb(src, robot_verbs_default)
add_verb(src, silicon_subsystems)
/mob/living/silicon/robot/proc/remove_robot_verbs()
src.verbs -= robot_verbs_default
src.verbs -= silicon_subsystems
remove_verb(src, robot_verbs_default)
remove_verb(src, silicon_subsystems)
// Uses power from cyborg's cell. Returns 1 on success or 0 on failure.
// Properly converts using CELLRATE now! Amount is in Joules.
@@ -174,10 +174,10 @@ var/global/list/robot_modules = list(
added_networks.Cut()
/obj/item/robot_module/proc/add_subsystems(var/mob/living/silicon/robot/R)
R.verbs |= subsystems
add_verb(R, subsystems)
/obj/item/robot_module/proc/remove_subsystems(var/mob/living/silicon/robot/R)
R.verbs -= subsystems
remove_verb(R, subsystems)
/obj/item/robot_module/proc/apply_status_flags(var/mob/living/silicon/robot/R)
if(!can_be_pushed)
+6 -13
View File
@@ -156,14 +156,6 @@
if(bot.connected_ai == ai)
return TRUE
return FALSE
// this function shows the health of the AI in the Status panel
/mob/living/silicon/proc/show_system_integrity()
if(!stat)
stat(null, text("System Integrity: [round((health/maxHealth)*100)]%"))
else
stat(null, text("Systems Non-functional"))
// This is a pure virtual function, it should be overwritten by all subclasses
/mob/living/silicon/proc/show_malf_ai()
return FALSE
@@ -176,12 +168,13 @@
stat(null, eta_status)
// This adds the basic clock, shuttle recall timer, and malf_ai info to all silicon lifeforms
/mob/living/silicon/Stat()
if(statpanel("Status"))
show_emergency_shuttle_eta()
show_system_integrity()
/mob/living/silicon/get_status_tab_items()
. = ..()
if(!stat)
. += "System Integrity: [round((health/maxHealth)*100)]%"
else
. += "System Integrity: NON-FUNCTIONAL"
show_malf_ai()
..()
//can't inject synths
/mob/living/silicon/can_inject(mob/user, error_msg)
@@ -55,8 +55,8 @@
add_language(LANGUAGE_BORER)
add_language(LANGUAGE_BORER_HIVEMIND)
verbs += /mob/living/proc/ventcrawl
verbs += /mob/living/proc/hide
add_verb(src, /mob/living/proc/ventcrawl)
add_verb(src, /mob/living/proc/hide)
var/number = rand(1000,9999)
truename = "[pick("Primary","Secondary","Tertiary","Quaternary")]-[number]"
if(request_player && !ckey && !client)
@@ -100,17 +100,9 @@
if(chem_hud)
chem_hud.maptext = SMALL_FONTS(7, chemicals)
/mob/living/simple_animal/borer/Stat()
..()
statpanel("Status")
if(evacuation_controller)
var/eta_status = evacuation_controller.get_status_panel_eta()
if(eta_status)
stat(null, eta_status)
if(client.statpanel == "Status")
stat("Chemicals", chemicals)
/mob/living/simple_animal/borer/get_status_tab_items()
. = ..()
. += "Chemicals: [chemicals]"
/mob/living/simple_animal/borer/proc/detach()
if(!host || !controlling)
@@ -129,9 +121,9 @@
host.remove_language(LANGUAGE_BORER)
host.remove_language(LANGUAGE_BORER_HIVEMIND)
host.verbs -= /mob/living/carbon/proc/release_control
host.verbs -= /mob/living/carbon/proc/punish_host
host.verbs -= /mob/living/carbon/proc/spawn_larvae
remove_verb(host, /mob/living/carbon/proc/release_control)
remove_verb(host, /mob/living/carbon/proc/punish_host)
remove_verb(host, /mob/living/carbon/proc/spawn_larvae)
if(host_brain)
to_chat(host_brain, FONT_LARGE(SPAN_NOTICE("You feel your nerves again as your control over your own body is restored.")))
@@ -211,4 +203,4 @@
var/mob/living/carbon/C = A
do_paralyze(C)
return
return ..()
return ..()
@@ -65,6 +65,6 @@
to_chat(host, SPAN_DANGER("With an immense exertion of will, you regain control of your body!"))
to_chat(borer.host, SPAN_DANGER("You feel control of the host brain ripped from your grasp, and retract your probosci before the wild neural impulses can damage you."))
borer.detach()
verbs -= /mob/living/carbon/proc/release_control
verbs -= /mob/living/carbon/proc/punish_host
verbs -= /mob/living/carbon/proc/spawn_larvae
remove_verb(src, /mob/living/carbon/proc/release_control)
remove_verb(src, /mob/living/carbon/proc/punish_host)
remove_verb(src, /mob/living/carbon/proc/spawn_larvae)
@@ -175,11 +175,11 @@
H.add_language(LANGUAGE_BORER_HIVEMIND)
if(host.stat == DEAD)
H.verbs |= /mob/living/carbon/human/proc/jumpstart
add_verb(H, /mob/living/carbon/human/proc/jumpstart)
H.verbs |= /mob/living/carbon/human/proc/psychic_whisper
H.verbs |= /mob/living/carbon/human/proc/tackle
H.verbs |= /mob/living/carbon/proc/spawn_larvae
add_verb(H, /mob/living/carbon/human/proc/psychic_whisper)
add_verb(H, /mob/living/carbon/human/proc/tackle)
add_verb(H, /mob/living/carbon/proc/spawn_larvae)
if(H.client)
H.ghostize(FALSE)
@@ -355,9 +355,9 @@
controlling = TRUE
host.verbs += /mob/living/carbon/proc/release_control
host.verbs += /mob/living/carbon/proc/punish_host
host.verbs += /mob/living/carbon/proc/spawn_larvae
add_verb(host, /mob/living/carbon/proc/release_control)
add_verb(host, /mob/living/carbon/proc/punish_host)
add_verb(host, /mob/living/carbon/proc/spawn_larvae)
/mob/living/carbon/human/proc/jumpstart()
set category = "Abilities"
@@ -368,7 +368,7 @@
to_chat(usr, SPAN_WARNING("Your host is already alive."))
return
verbs -= /mob/living/carbon/human/proc/jumpstart
remove_verb(src, /mob/living/carbon/human/proc/jumpstart)
visible_message(SPAN_WARNING("With a hideous, rattling moan, [src] shudders back to life!"))
rejuvenate()
@@ -388,9 +388,9 @@
B.detach()
verbs -= /mob/living/carbon/proc/release_control
verbs -= /mob/living/carbon/proc/punish_host
verbs -= /mob/living/carbon/proc/spawn_larvae
remove_verb(src, /mob/living/carbon/proc/release_control)
remove_verb(src, /mob/living/carbon/proc/punish_host)
remove_verb(src, /mob/living/carbon/proc/spawn_larvae)
else
to_chat(src, SPAN_DANGER("Something has gone terribly wrong, as your host's brain does not seem to contain you. Make a GitHub report and ahelp to get out."))
@@ -91,8 +91,8 @@
. = ..()
nutrition = rand(max_nutrition*0.25, max_nutrition*0.75)
verbs += /mob/living/proc/ventcrawl
verbs += /mob/living/proc/hide
add_verb(src, /mob/living/proc/ventcrawl)
add_verb(src, /mob/living/proc/hide)
if(name == initial(name))
name = "[name] ([rand(1, 1000)])"
@@ -57,9 +57,9 @@
add_language(LANGUAGE_TCB)
default_language = all_languages[LANGUAGE_TCB]
internal_id = new /obj/item/card/id(src)
verbs |= /mob/living/proc/ventcrawl
verbs |= /mob/living/proc/hide
verbs |= /mob/living/simple_animal/spiderbot/proc/control_integrated_radio
add_verb(src, /mob/living/proc/ventcrawl)
add_verb(src, /mob/living/proc/hide)
add_verb(src, /mob/living/simple_animal/spiderbot/proc/control_integrated_radio)
voice_name = name
/mob/living/simple_animal/spiderbot/can_name(var/mob/living/M)
@@ -186,7 +186,7 @@
/mob/living/simple_animal/hostile/lesser_changeling/Initialize()
. = ..()
verbs += /mob/living/proc/ventcrawl
add_verb(src, /mob/living/proc/ventcrawl)
/mob/living/simple_animal/hostile/lesser_changeling/mind_initialize()
..()
@@ -57,8 +57,8 @@
/mob/living/simple_animal/hostile/morph/Initialize()
. = ..()
verbs += /mob/living/proc/ventcrawl
verbs -= /mob/living/simple_animal/verb/change_name
add_verb(src, /mob/living/proc/ventcrawl)
add_verb(src, /mob/living/simple_animal/verb/change_name)
var/list/morph_spells = list(/spell/aoe_turf/conjure/node, /spell/aoe_turf/conjure/nest)
for(var/spell in morph_spells)
@@ -13,7 +13,7 @@
desc = "Hop in, the gastrointestinal juices are just fine."
icon = 'icons/mob/npc/cavern.dmi'
icon_state = null
mouse_opacity = 0
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
throwforce = 0
anchored = 1
deployed = 1
@@ -118,9 +118,9 @@
walk(src,0)
..()
/mob/living/simple_animal/parrot/Stat()
..()
stat("Held Item", held_item)
/mob/living/simple_animal/parrot/get_status_tab_items()
. = ..()
. += "Held Item: [held_item]"
/*
* Inventory
@@ -135,11 +135,9 @@
. = ..()
set_light(3, 1, l_color = LIGHT_COLOR_CYAN)
/mob/living/simple_animal/shade/bluespace/Stat()
..()
if(statpanel("Status"))
stat(null, "Strength of Echoes: [message_countdown]")
/mob/living/simple_animal/shade/bluespace/get_status_tab_items()
. = ..()
. += "Strength of Echoes: [message_countdown]"
/mob/living/simple_animal/shade/bluespace/updatehealth()
if(!possessive)
@@ -161,7 +161,7 @@
seek_move_delay = (1 / seek_speed) * 10 //number of ds between moves
turns_since_scan = rand(min_scan_interval, max_scan_interval)//Randomise this at the start so animals don't sync up
health = maxHealth
verbs -= /mob/verb/observe
remove_verb(src, /mob/verb/observe)
health = maxHealth
if (mob_size)
update_nutrition_stats()
@@ -682,12 +682,12 @@
stop_automated_movement = 1
walk_to(src, movement_target, 0, DS2TICKS(seek_move_delay))
/mob/living/simple_animal/Stat()
..()
/mob/living/simple_animal/get_status_tab_items()
. = ..()
if(statpanel("Status") && show_stat_health)
stat(null, "Health: [round((health / maxHealth) * 100)]%")
stat(null, "Nutrition: [nutrition]/[max_nutrition]")
if(show_stat_health)
. += "Health: [round((health / maxHealth) * 100)]%"
. += "Nutrition: [nutrition]/[max_nutrition]"
/mob/living/simple_animal/updatehealth()
..()
+2 -1
View File
@@ -55,6 +55,7 @@
*/
/mob/proc/LateLogin()
SHOULD_CALL_PARENT(TRUE)
SEND_SIGNAL(src, COMSIG_MOB_LOGIN)
player_list |= src
update_Login_details()
@@ -102,4 +103,4 @@
// Check code/modules/admin/verbs/antag-ooc.dm for definition
client.add_aooc_if_necessary()
client.chatOutput.start()
addtimer(CALLBACK(client, TYPE_PROC_REF(/client, check_panel_loaded)), 30 SECONDS)
+1
View File
@@ -1,5 +1,6 @@
/mob/Logout()
SHOULD_CALL_PARENT(TRUE)
SEND_SIGNAL(src, COMSIG_MOB_LOGOUT)
SSnanoui.user_logout(src) // this is used to clean up (remove) this user's Nano UIs
player_list -= src
+14 -141
View File
@@ -20,6 +20,7 @@
qdel(cc)
client_colors = null
viruses.Cut()
item_verbs = null
//Added this to prevent nonliving mobs from ghostising
//The only non 'living' mobs are:
@@ -544,78 +545,6 @@
M.mind.reset()
return
/client/verb/fix_chat()
set name = "Fix Chat"
set category = "OOC"
if (!chatOutput || !istype(chatOutput))
var/action = alert(src, "Invalid Chat Output data found!\nRecreate data?", "Wot?", "Recreate Chat Output data", "Cancel")
if (action != "Recreate Chat Output data")
return
chatOutput = new /datum/chatOutput(src)
chatOutput.start()
action = alert(src, "Goon chat reloading, wait a bit and tell me if it's fixed", "", "Fixed", "Nope")
if (action == "Fixed")
log_game("GOONCHAT: [key_name(src)] Had to fix their goonchat by re-creating the chatOutput datum")
else
chatOutput.load()
action = alert(src, "How about now? (give it a moment (it may also try to load twice))", "", "Yes", "No")
if (action == "Yes")
log_game("GOONCHAT: [key_name(src)] Had to fix their goonchat by re-creating the chatOutput datum and forcing a load()")
else
action = alert(src, "Welp, I'm all out of ideas. Try closing byond and reconnecting.\nWe could also disable fancy chat and re-enable oldchat", "", "Thanks anyways", "Switch to old chat")
if (action == "Switch to old chat")
winset(src, "output", "is-visible=true;is-disabled=false")
winset(src, "browseroutput", "is-visible=false")
log_game("GOONCHAT: [key_name(src)] Failed to fix their goonchat window after recreating the chatOutput and forcing a load()")
else if (chatOutput.loaded)
var/action = alert(src, "ChatOutput seems to be loaded\nDo you want me to force a reload, wiping the chat log or just refresh the chat window because it broke/went away?", "Hmmm", "Force Reload", "Refresh", "Cancel")
switch (action)
if ("Force Reload")
chatOutput.loaded = FALSE
chatOutput.start() //this is likely to fail since it asks , but we should try it anyways so we know.
action = alert(src, "Goon chat reloading, wait a bit and tell me if it's fixed", "", "Fixed", "Nope")
if (action == "Fixed")
log_game("GOONCHAT: [key_name(src)] Had to fix their goonchat by forcing a start()")
else
chatOutput.load()
action = alert(src, "How about now? (give it a moment (it may also try to load twice))", "", "Yes", "No")
if (action == "Yes")
log_game("GOONCHAT: [key_name(src)] Had to fix their goonchat by forcing a load()")
else
action = alert(src, "Welp, I'm all out of ideas. Try closing byond and reconnecting.", "", "Thanks anyways",)
log_game("GOONCHAT: [key_name(src)] Failed to fix their goonchat window forcing a start() and forcing a load()")
if ("Refresh")
chatOutput.showChat()
action = alert(src, "Goon chat refreshing, wait a bit and tell me if it's fixed", "", "Fixed", "Nope, force a reload")
if (action == "Fixed")
log_game("GOONCHAT: [key_name(src)] Had to fix their goonchat by forcing a show()")
else
chatOutput.loaded = FALSE
chatOutput.load()
action = alert(src, "How about now? (give it a moment)", "", "Yes", "No")
if (action == "Yes")
log_game("GOONCHAT: [key_name(src)] Had to fix their goonchat by forcing a load()")
else
action = alert(src, "Welp, I'm all out of ideas. Try closing byond and reconnecting.", "", "Thanks anyways")
log_game("GOONCHAT: [key_name(src)] Failed to fix their goonchat window forcing a show() and forcing a load()")
return
else
chatOutput.start()
var/action = alert(src, "Manually loading Chat, wait a bit and tell me if it's fixed", "", "Fixed", "Nope")
if (action == "Fixed")
log_game("GOONCHAT: [key_name(src)] Had to fix their goonchat by manually calling start()")
else
chatOutput.load()
alert(src, "How about now? (give it a moment (it may also try to load twice))", "", "Yes", "No")
if (action == "Yes")
log_game("GOONCHAT: [key_name(src)] Had to fix their goonchat by manually calling start() and forcing a load()")
else
action = alert(src, "Welp, I'm all out of ideas. Try closing byond and reconnecting.", "", "Thanks anyways")
log_game("GOONCHAT: [key_name(src)] Failed to fix their goonchat window after manually calling start() and forcing a load()")
/client/verb/changes()
set name = "Changelog"
set category = "OOC"
@@ -733,7 +662,7 @@
if(accent && istype(accent))
var/datum/browser/accent_win = new(usr, accent.name, capitalize_first_letters(accent.name), 500, 250)
var/html = "[accent.description]<br>"
var/datum/asset/spritesheet/S = get_asset_datum(/datum/asset/spritesheet/goonchat)
var/datum/asset/spritesheet/S = get_asset_datum(/datum/asset/spritesheet/chat)
html += "[S.css_tag()]<br>"
html += {"[S.icon_tag(accent.tag_icon)]<br>"}
html += "([accent.text_tag])<br>"
@@ -885,73 +814,6 @@
for(var/mob/M in viewers())
M.see(message)
/mob/Stat()
..()
. = (is_client_active(10 MINUTES))
if(.)
if(statpanel("Status") && SSticker.current_state != GAME_STATE_PREGAME)
stat("Game ID", game_id)
stat("Map", current_map.full_name)
stat("Current Space Sector", SSatlas.current_sector.name)
var/current_month = text2num(time2text(world.realtime, "MM"))
var/current_day = text2num(time2text(world.realtime, "DD"))
stat("Current Date", "[game_year]-[current_month]-[current_day]")
stat("Station Time", worldtime2text())
stat("Round Duration", get_round_duration_formatted())
stat("Last Transfer Vote", SSvote.last_transfer_vote ? time2text(SSvote.last_transfer_vote, "hh:mm") : "Never")
if(client.holder)
if(statpanel("Status"))
stat("Location:", "([x], [y], [z]) [loc]")
if (LAZYLEN(client.holder.watched_processes))
for (var/datum/controller/ctrl in client.holder.watched_processes)
if (!ctrl)
LAZYREMOVE(client.holder.watched_processes, ctrl)
else
ctrl.stat_entry()
if(statpanel("MC"))
stat("CPU:", world.cpu)
stat("Tick Usage:", world.tick_usage)
stat("Instances:", num2text(world.contents.len, 7))
if (config.fastboot)
stat(null, "FASTBOOT ENABLED")
if(Master)
Master.stat_entry()
else
stat("Master Controller:", "ERROR")
if(Failsafe)
Failsafe.stat_entry()
else
stat("Failsafe Controller:", "ERROR")
if (Master)
stat(null, "- Subsystems -")
var/amt = 0
for(var/datum/controller/subsystem/SS in Master.subsystems)
if (!Master.initializing && SS.flags & SS_NO_DISPLAY)
continue
if(amt >= 70)
break
amt++
SS.stat_entry()
if(listed_turf && client)
if(!TurfAdjacent(listed_turf))
listed_turf = null
else
if(statpanel("Turf"))
stat("Turf:", listed_turf)
for(var/atom/A in listed_turf)
if(!A.mouse_opacity)
continue
if(A.invisibility > see_invisible)
continue
if(is_type_in_typecache(A, shouldnt_see))
continue
stat(A)
// facing verbs
/mob/proc/canface()
if(!canmove) return 0
@@ -1178,7 +1040,7 @@
/mob/proc/remove_implant(var/obj/item/implant, var/surgical_removal = FALSE)
if(!LAZYLEN(get_visible_implants(0))) //Yanking out last object - removing verb.
verbs -= /mob/proc/yank_out_object
remove_verb(src, /mob/proc/yank_out_object)
for(var/obj/item/O in pinned)
if(O == implant)
pinned -= O
@@ -1557,3 +1419,14 @@
/mob/proc/get_speech_bubble_state_modifier()
return "normal"
/// Adds this list to the output to the stat browser
/mob/proc/get_status_tab_items()
. = list("") //we want to offset unique stuff from standard stuff
SEND_SIGNAL(src, COMSIG_MOB_GET_STATUS_TAB_ITEMS, .)
/// This proc differs slightly from normal TG usage with actions due to how it is repurposed here for hardsuit modules.
/// Take a look at /mob/living/carbon/human/get_actions_for_statpanel().
/mob/proc/get_actions_for_statpanel()
var/list/data = list()
return data
+2 -1
View File
@@ -230,6 +230,7 @@
var/mob/teleop = null
var/turf/listed_turf = null //the current turf being examined in the stat panel
var/list/item_verbs = list()
var/list/shouldnt_see = list() //typecache of objects that this mob shouldn't see in the stat panel. this silliness is needed because of AI alt+click and cult blood runes
var/list/active_genes=list()
@@ -250,4 +251,4 @@
/// If this mob is or was piloted by a player with typing indicators enabled, an instance of one.
var/atom/movable/typing_indicator/typing_indicator
/// Whether this mob is currently typing, if piloted by a player.
var/is_typing
var/is_typing
+1
View File
@@ -398,6 +398,7 @@
devour(affecting, assailant)
/obj/item/grab/dropped()
. = ..()
loc = null
if(!destroying)
qdel(src)
+2 -3
View File
@@ -1209,9 +1209,8 @@ var/list/intents = list(I_HELP,I_DISARM,I_GRAB,I_HURT)
if(hearer && hearer.client && hearer.client.prefs?.toggles_secondary & ACCENT_TAG_TEXT)
return {"<a href='byond://?src=\ref[src];accent_tag=[url_encode(a)]'>([a.text_tag])</a>"}
else
var/final_icon = a.tag_icon
var/datum/asset/spritesheet/S = get_asset_datum(/datum/asset/spritesheet/goonchat)
return {"<span onclick="window.location.href='byond://?src=\ref[src];accent_tag=[url_encode(a)]'">[S.icon_tag(final_icon)]</span>"}
var/datum/asset/spritesheet/S = get_asset_datum(/datum/asset/spritesheet/chat)
return S.icon_tag("accent-[a.tag_icon]")
/mob/assign_player(var/mob/user)
ckey = user.ckey