Merge examine refactor for vorestation

This commit is contained in:
Aronai Sieyes
2020-04-29 17:49:54 -04:00
parent 6ebd249748
commit 874baa1d2d
34 changed files with 179 additions and 932 deletions
+1 -5
View File
@@ -1,11 +1,7 @@
/obj/machinery/portable_atmospherics/hydroponics
name = "hydroponics tray"
<<<<<<< HEAD
icon = 'icons/obj/hydroponics_machines_vr.dmi' //VOREStation Edit
=======
desc = "A tray usually full of fluid for growing plants."
icon = 'icons/obj/hydroponics_machines.dmi'
>>>>>>> 6c6644f... Rewrite examine() to pass a list around (#7038)
icon = 'icons/obj/hydroponics_machines_vr.dmi' //VOREStation Edit
icon_state = "hydrotray3"
density = 1
anchored = 1
+7 -3
View File
@@ -34,9 +34,13 @@ GLOBAL_LIST_EMPTY(unique_deployable)
/obj/item/device/survivalcapsule/examine(mob/user)
. = ..()
get_template()
to_chat(user, "This capsule has the [template.name] stored.")
to_chat(user, template.description)
if(!template)
get_template()
if(template)
. += "This capsule has the [template.name] stored:"
. += template.description
else
. += "This capsule has an unknown template stored."
/obj/item/device/survivalcapsule/attack_self()
//Can't grab when capsule is New() because templates aren't loaded then
+20 -24
View File
@@ -97,7 +97,7 @@
if(!((skip_gear & EXAMINE_SKIPJUMPSUIT) && (skip_body & EXAMINE_SKIPFACE)))
//VOREStation Add Start
if(custom_species)
msg += ", a <b>[src.custom_species]</b>"
name_ender = ", a <b>[src.custom_species]</b>"
else if(looks_synth)
//VOREStation Add End
var/use_gender = "a synthetic"
@@ -280,13 +280,20 @@
if(suiciding)
msg += "<span class='warning'>[T.He] appears to have commited suicide... there is no hope of recovery.</span>"
msg += attempt_vr(src,"examine_weight",args) //VOREStation Code
msg += attempt_vr(src,"examine_nutrition",args) //VOREStation Code
msg += attempt_vr(src,"examine_bellies",args) //VOREStation Code
msg += attempt_vr(src,"examine_pickup_size",args) //VOREStation Code
msg += attempt_vr(src,"examine_step_size",args) //VOREStation Code
msg += attempt_vr(src,"examine_nif",args) //VOREStation Code
msg += attempt_vr(src,"examine_chimera",args) //VOREStation Code
//VOREStation Add
var/list/vorestrings = list()
vorestrings += examine_weight()
vorestrings += examine_nutrition()
vorestrings += examine_bellies()
vorestrings += examine_pickup_size()
vorestrings += examine_step_size()
vorestrings += examine_nif()
vorestrings += examine_chimera()
for(var/entry in vorestrings)
if(entry == "" || entry == null)
vorestrings -= entry
msg += vorestrings
//VOREStation Add End
if(mSmallsize in mutations)
msg += "[T.He] [T.is] very short!"
@@ -314,17 +321,13 @@
if(!key)
msg += "<span class='deadsay'>[T.He] [T.is] [ssd_msg]. It doesn't look like [T.he] [T.is] waking up anytime soon.</span>"
else if(!client)
<<<<<<< HEAD
msg += "<span class='deadsay'>[T.He] [T.is] [ssd_msg].</span><br>"
msg += "<span class='deadsay'>[T.He] [T.is] [ssd_msg].</span>"
//VOREStation Add Start
if(client && ((client.inactivity / 10) / 60 > 10)) //10 Minutes
msg += "\[Inactive for [round((client.inactivity/10)/60)] minutes\]\n"
msg += "\[Inactive for [round((client.inactivity/10)/60)] minutes\]"
else if(disconnect_time)
msg += "\[Disconnected/ghosted [round(((world.realtime - disconnect_time)/10)/60)] minutes ago\]\n"
msg += "\[Disconnected/ghosted [round(((world.realtime - disconnect_time)/10)/60)] minutes ago\]"
//VOREStation Add End
=======
msg += "<span class='deadsay'>[T.He] [T.is] [ssd_msg].</span>"
>>>>>>> 6c6644f... Rewrite examine() to pass a list around (#7038)
var/list/wound_flavor_text = list()
var/list/is_bleeding = list()
@@ -437,21 +440,14 @@
if(flavor_text)
msg += "[flavor_text]"
<<<<<<< HEAD
// VOREStation Start
if(ooc_notes)
msg += "<span class = 'deptradio'>OOC Notes:</span> <a href='?src=\ref[src];ooc_notes=1'>\[View\]</a>\n"
msg += "<span class='deptradio'><a href='?src=\ref[src];vore_prefs=1'>\[Mechanical Vore Preferences\]</a></span>\n"
msg += "<span class = 'deptradio'>OOC Notes:</span> <a href='?src=\ref[src];ooc_notes=1'>\[View\]</a>"
msg += "<span class='deptradio'><a href='?src=\ref[src];vore_prefs=1'>\[Mechanical Vore Preferences\]</a></span>"
// VOREStation End
msg += "*---------*</span><br>"
msg += applying_pressure
=======
msg += "*---------*</span>"
if(applying_pressure)
msg += applying_pressure
>>>>>>> 6c6644f... Rewrite examine() to pass a list around (#7038)
var/show_descs = show_descriptors_to(user)
if(show_descs)
@@ -44,25 +44,25 @@
switch(weight_examine)
if(0 to 74)
message = "<span class='warning'>[t_He] [t_is] terribly lithe and frail!</span>\n"
message = "<span class='warning'>[t_He] [t_is] terribly lithe and frail!</span>"
if(75 to 99)
message = "[t_He] [t_has] a very slender frame.\n"
message = "[t_He] [t_has] a very slender frame."
if(100 to 124)
message = "[t_He] [t_has] a lightweight, athletic build.\n"
message = "[t_He] [t_has] a lightweight, athletic build."
if(125 to 174)
message = "[t_He] [t_has] a healthy, average body.\n"
message = "[t_He] [t_has] a healthy, average body."
if(175 to 224)
message = "[t_He] [t_has] a thick, [t_heavy] physique.\n"
message = "[t_He] [t_has] a thick, [t_heavy] physique."
if(225 to 274)
message = "[t_He] [t_has] a plush, chubby figure.\n"
message = "[t_He] [t_has] a plush, chubby figure."
if(275 to 325)
message = "[t_He] [t_has] an especially plump body with a round potbelly and large hips.\n"
message = "[t_He] [t_has] an especially plump body with a round potbelly and large hips."
if(325 to 374)
message = "[t_He] [t_has] a very fat frame with a bulging potbelly, squishy rolls of pudge, very wide hips, and plump set of jiggling thighs.\n"
message = "[t_He] [t_has] a very fat frame with a bulging potbelly, squishy rolls of pudge, very wide hips, and plump set of jiggling thighs."
if(375 to 474)
message = "<span class='warning'>[t_He] [t_is] incredibly obese. [t_His] massive potbelly sags over [t_his] waistline while [t_his] fat ass would probably require two chairs to sit down comfortably!</span>\n"
message = "<span class='warning'>[t_He] [t_is] incredibly obese. [t_His] massive potbelly sags over [t_his] waistline while [t_his] fat ass would probably require two chairs to sit down comfortably!</span>"
else
message += "<span class='warning'>[t_He] [t_is] so morbidly obese, you wonder how [t_he] can even stand, let alone waddle around the station. [t_He] can't get any fatter without being immobilized.</span>\n"
message += "<span class='warning'>[t_He] [t_is] so morbidly obese, you wonder how [t_he] can even stand, let alone waddle around the station. [t_He] can't get any fatter without being immobilized.</span>"
return message //Credit to Aronai for helping me actually get this working!
/mob/living/carbon/human/proc/examine_nutrition()
@@ -100,23 +100,23 @@
t_His = "Hir"
switch(nutrition_examine)
if(0 to 49)
message = "<span class='warning'>[t_He] [t_is] starving! You can hear [t_his] stomach snarling from across the room!</span>\n"
message = "<span class='warning'>[t_He] [t_is] starving! You can hear [t_his] stomach snarling from across the room!</span>"
if(50 to 99)
message = "<span class='warning'>[t_He] [t_is] extremely hungry. A deep growl occasionally rumbles from [t_his] empty stomach.</span>\n"
message = "<span class='warning'>[t_He] [t_is] extremely hungry. A deep growl occasionally rumbles from [t_his] empty stomach.</span>"
if(100 to 499)
return message //Well that's pretty normal, really.
if(500 to 999) // Fat.
message = "[t_He] [t_has] a stuffed belly, bloated fat and round from eating too much.\n"
message = "[t_He] [t_has] a stuffed belly, bloated fat and round from eating too much."
if(1000 to 1399)
message = "[t_He] [t_has] a rotund, thick gut. It bulges from their body obscenely, close to sagging under its own weight.\n"
message = "[t_He] [t_has] a rotund, thick gut. It bulges from their body obscenely, close to sagging under its own weight."
if(1400 to 1934) // One person fully digested.
message = "<span class='warning'>[t_He] [t_is] sporting a large, round, sagging stomach. It's contains at least their body weight worth of glorping slush.</span>\n"
message = "<span class='warning'>[t_He] [t_is] sporting a large, round, sagging stomach. It's contains at least their body weight worth of glorping slush.</span>"
if(1935 to 3004) // Two people.
message = "<span class='warning'>[t_He] [t_is] engorged with a huge stomach that sags and wobbles as they move. [t_He] must have consumed at least twice their body weight. It looks incredibly soft.</span>\n"
message = "<span class='warning'>[t_He] [t_is] engorged with a huge stomach that sags and wobbles as they move. [t_He] must have consumed at least twice their body weight. It looks incredibly soft.</span>"
if(3005 to 4074) // Three people.
message = "<span class='warning'>[t_His] stomach is firmly packed with digesting slop. [t_He] must have eaten at least a few times worth their body weight! It looks hard for them to stand, and [t_his] gut jiggles when they move.</span>\n"
message = "<span class='warning'>[t_His] stomach is firmly packed with digesting slop. [t_He] must have eaten at least a few times worth their body weight! It looks hard for them to stand, and [t_his] gut jiggles when they move.</span>"
if(4075 to INFINITY) // Four or more people.
message = "<span class='warning'>[t_He] [t_is] so absolutely stuffed that you aren't sure how it's possible to move. [t_He] can't seem to swell any bigger. The surface of [t_his] belly looks sorely strained!</span>\n"
message = "<span class='warning'>[t_He] [t_is] so absolutely stuffed that you aren't sure how it's possible to move. [t_He] can't seem to swell any bigger. The surface of [t_his] belly looks sorely strained!</span>"
return message
//For OmniHUD records access for appropriate models
@@ -145,18 +145,18 @@
/mob/living/carbon/human/proc/examine_pickup_size(mob/living/H)
var/message = ""
if(istype(H) && (H.get_effective_size() - src.get_effective_size()) >= 0.50)
message = "<font color='blue'>They are small enough that you could easily pick them up!</font>\n"
message = "<font color='blue'>They are small enough that you could easily pick them up!</font>"
return message
/mob/living/carbon/human/proc/examine_step_size(mob/living/H)
var/message = ""
if(istype(H) && (H.get_effective_size() - src.get_effective_size()) >= 0.75)
message = "<font color='red'>They are small enough that you could easily trample them!</font>\n"
message = "<font color='red'>They are small enough that you could easily trample them!</font>"
return message
/mob/living/carbon/human/proc/examine_nif(mob/living/carbon/human/H)
if(nif && nif.examine_msg) //If you have one set, anyway.
return "<span class='notice'>[nif.examine_msg]</span>\n"
return "<span class='notice'>[nif.examine_msg]</span>"
/mob/living/carbon/human/proc/examine_chimera(mob/living/carbon/human/H)
var/t_He = "It" //capitalised for use at the start of each line.
@@ -189,8 +189,8 @@
t_his = "hir"
if(revive_ready == REVIVING_NOW || revive_ready == REVIVING_DONE)
if(stat == DEAD)
return "<span class='warning'>[t_His] body is twitching subtly.</span>\n"
return "<span class='warning'>[t_His] body is twitching subtly.</span>"
else
return "<span class='notice'>[t_He] [t_appear] to be in some sort of torpor.</span>\n"
return "<span class='notice'>[t_He] [t_appear] to be in some sort of torpor.</span>"
if(feral)
return "<span class='warning'>[t_He] [t_has] a crazed, wild look in [t_his] eyes!</span>\n"
return "<span class='warning'>[t_He] [t_has] a crazed, wild look in [t_his] eyes!</span>"
+7 -14
View File
@@ -3,24 +3,17 @@
switch(src.stat)
if(CONSCIOUS)
<<<<<<< HEAD
if(!src.client) msg += "\nIt appears to be in stand-by mode.\n" //afk
if(UNCONSCIOUS) msg += "\n<span class='warning'>It doesn't seem to be responding.</span>\n"
if(DEAD) msg += "\n<span class='deadsay'>It looks completely unsalvageable.</span>\n"
msg += attempt_vr(src,"examine_bellies",args) //VOREStation Edit
// VOREStation Edit: Start
if(ooc_notes)
msg += "<span class = 'deptradio'>OOC Notes:</span> <a href='?src=\ref[src];ooc_notes=1'>\[View\]</a>\n"
// VOREStation Edit: End
msg += "\n*---------*"
=======
if(!src.client) . += "It appears to be in stand-by mode." //afk
if(UNCONSCIOUS) . += "<span class='warning'>It doesn't seem to be responding.</span>"
if(DEAD) . += "<span class='deadsay'>It looks completely unsalvageable.</span>"
// VOREStation Edit: Start
. += attempt_vr(src,"examine_bellies",args) //VOREStation Edit
if(ooc_notes)
. += "<span class = 'deptradio'>OOC Notes:</span> <a href='?src=\ref[src];ooc_notes=1'>\[View\]</a>"
// VOREStation Edit: End
. += "*---------*"
>>>>>>> 6c6644f... Rewrite examine() to pass a list around (#7038)
if(print_flavor_text()) . += "\n[print_flavor_text()]\n"
@@ -179,12 +179,12 @@
flags |= NOBLUDGEON //No more attack messages
/obj/item/device/dogborg/tongue/examine(user)
if(!..(user, 1))
return
if(water.energy)
to_chat(user, "<span class='notice'>[src] is wet. Just like it should be.</span>")
if(water.energy < 5)
to_chat(user, "<span class='notice'>[src] is dry.</span>")
. = ..()
if(Adjacent(user))
if(water.energy)
. += "<span class='notice'>[src] is wet. Just like it should be.</span>"
if(water.energy < 5)
. += "<span class='notice'>[src] is dry.</span>"
/obj/item/device/dogborg/tongue/attack_self(mob/user)
var/mob/living/silicon/robot.R = user
@@ -26,24 +26,17 @@
if(shell)
. += "It appears to be an [deployed ? "active" : "empty"] AI shell."
else if(!src.client)
<<<<<<< HEAD
msg += "It appears to be in stand-by mode.\n" //afk
if(UNCONSCIOUS) msg += "<span class='warning'>It doesn't seem to be responding.</span>\n"
if(DEAD) msg += "<span class='deadsay'>It looks completely unsalvageable.</span>\n"
msg += attempt_vr(src,"examine_bellies_borg",args) //VOREStation Edit
// VOREStation Edit: Start
if(ooc_notes)
msg += "<span class = 'deptradio'>OOC Notes:</span> <a href='?src=\ref[src];ooc_notes=1'>\[View\]</a>\n"
// VOREStation Edit: End
msg += "*---------*"
=======
. += "It appears to be in stand-by mode." //afk
if(UNCONSCIOUS) . += "<span class='warning'>It doesn't seem to be responding.</span>"
if(DEAD) . += "<span class='deadsay'>It looks completely unsalvageable.</span>"
// VOREStation Edit: Start
. += attempt_vr(src,"examine_bellies_borg",args) //VOREStation Edit
if(ooc_notes)
. += "<span class = 'deptradio'>OOC Notes:</span> <a href='?src=\ref[src];ooc_notes=1'>\[View\]</a>"
// VOREStation Edit: End
. += "*---------*"
>>>>>>> 6c6644f... Rewrite examine() to pass a list around (#7038)
if(print_flavor_text()) . += "<br>[print_flavor_text()]"
@@ -1,4 +1,3 @@
<<<<<<< HEAD
// Parrots can talk, and may repeat things it hears.
/mob/living/simple_mob/animal/passive/bird/parrot
name = "parrot"
@@ -42,11 +41,11 @@
return say(message)
// Ugly saycode so parrots can use their headsets.
/mob/living/simple_mob/animal/passive/bird/parrot/handle_message_mode(message_mode, message, verb, used_radios)
/mob/living/simple_mob/animal/passive/bird/parrot/handle_message_mode(message_mode, message, verb, speaking, used_radios)
..()
if(message_mode)
if(my_headset && istype(my_headset, /obj/item/device/radio))
my_headset.talk_into(src, message, message_mode, verb)
my_headset.talk_into(src, message, message_mode, verb, speaking)
used_radios += my_headset
// Clicked on while holding an object.
@@ -91,9 +90,9 @@
my_headset = null
/mob/living/simple_mob/animal/passive/bird/parrot/examine(mob/user)
..()
. = ..()
if(my_headset)
to_chat(user, "It is wearing \a [my_headset].")
. += "It is wearing \a [my_headset]."
/mob/living/simple_mob/animal/passive/bird/parrot/Initialize()
if(my_headset)
@@ -110,7 +109,7 @@
icon_rest = "poly-held"
icon_dead = "poly-dead"
tt_desc = "E Ara macao"
//my_headset = /obj/item/device/radio/headset/headset_eng //VOREStation Removal: shut up
//my_headset = /obj/item/device/radio/headset/headset_eng //VOREStation Removal
say_list_type = /datum/say_list/bird/poly
// Best Bird with best headset.
@@ -250,257 +249,4 @@
if(holder.stat || !holder.say_list || !message || speaker == holder)
return
var/datum/say_list/S = holder.say_list
=======
// Parrots can talk, and may repeat things it hears.
/mob/living/simple_mob/animal/passive/bird/parrot
name = "parrot"
description_info = "You can give it a headset by clicking on it with a headset. \
To remove it, click the bird while on grab intent."
has_langs = list("Galactic Common", "Bird")
ai_holder_type = /datum/ai_holder/simple_mob/passive/parrot
// A headset, so that talking parrots can yell at the crew over comms.
// If set to a type, on initialize it will be instantiated into that type.
var/obj/item/device/radio/headset/my_headset = null
// Say list
/datum/say_list/bird/poly
speak = list(
"Poly wanna cracker!",
"Check the singulo, you chucklefucks!",
"Wire the solars, you lazy bums!",
"WHO TOOK THE DAMN HARDSUITS?",
"OH GOD ITS FREE CALL THE SHUTTLE",
"Danger! Crystal hyperstructure instability!",
"CRYSTAL DELAMINATION IMMINENT.",
"Tweet tweet, I'm a Teshari.",
"Chitters.",
"Meteors have been detected on a collision course with the station!"
)
// Lets the AI use headsets.
// Player-controlled parrots will need to do it manually.
/mob/living/simple_mob/animal/passive/bird/parrot/ISay(message)
if(my_headset && prob(50))
var/list/keys = list()
for(var/channel in my_headset.channels)
var/key = get_radio_key_from_channel(channel)
if(key)
keys += key
if(keys.len)
var/key_used = pick(keys)
return say("[key_used] [message]")
return say(message)
// Ugly saycode so parrots can use their headsets.
/mob/living/simple_mob/animal/passive/bird/parrot/handle_message_mode(message_mode, message, verb, speaking, used_radios)
..()
if(message_mode)
if(my_headset && istype(my_headset, /obj/item/device/radio))
my_headset.talk_into(src, message, message_mode, verb, speaking)
used_radios += my_headset
// Clicked on while holding an object.
/mob/living/simple_mob/animal/passive/bird/parrot/attackby(obj/item/I, mob/user)
if(istype(I, /obj/item/device/radio/headset))
give_headset(I, user)
return
return ..()
// Clicked on by empty hand.
/mob/living/simple_mob/animal/passive/bird/parrot/attack_hand(mob/living/L)
if(L.a_intent == I_GRAB && my_headset)
remove_headset(L)
else
..()
/mob/living/simple_mob/animal/passive/bird/parrot/proc/give_headset(obj/item/device/radio/headset/new_headset, mob/living/user)
if(!istype(new_headset))
to_chat(user, span("warning", "\The [new_headset] isn't a headset."))
return
if(my_headset)
to_chat(user, span("warning", "\The [src] is already wearing \a [my_headset]."))
return
else
user.drop_item(new_headset)
my_headset = new_headset
new_headset.forceMove(src)
to_chat(user, span("warning", "You place \a [new_headset] on \the [src]. You monster."))
to_chat(src, span("notice", "\The [user] gives you \a [new_headset]. You should put it to good use immediately."))
return
/mob/living/simple_mob/animal/passive/bird/parrot/proc/remove_headset(mob/living/user)
if(!my_headset)
to_chat(user, "<span class='warning'>\The [src] doesn't have a headset to remove, thankfully.</span>")
else
ISay("BAWWWWWK LEAVE THE HEADSET BAWKKKKK!")
my_headset.forceMove(get_turf(src))
user.put_in_hands(my_headset)
to_chat(user, span("notice", "You take away \the [src]'s [my_headset.name]. Finally."))
to_chat(src, span("warning", "\The [user] takes your [my_headset.name] away! How cruel!"))
my_headset = null
/mob/living/simple_mob/animal/passive/bird/parrot/examine(mob/user)
. = ..()
if(my_headset)
. += "It is wearing \a [my_headset]."
/mob/living/simple_mob/animal/passive/bird/parrot/Initialize()
if(my_headset)
my_headset = new my_headset(src)
return ..()
// Subtypes.
// Best Bird
/mob/living/simple_mob/animal/passive/bird/parrot/poly
name = "Poly"
desc = "It's a parrot. An expert on quantum cracker theory."
icon_state = "poly"
icon_rest = "poly-held"
icon_dead = "poly-dead"
tt_desc = "E Ara macao"
my_headset = /obj/item/device/radio/headset/headset_eng
say_list_type = /datum/say_list/bird/poly
// Best Bird with best headset.
/mob/living/simple_mob/animal/passive/bird/parrot/poly/ultimate
my_headset = /obj/item/device/radio/headset/omni
/mob/living/simple_mob/animal/passive/bird/parrot/kea
name = "kea"
desc = "A species of parrot. On Earth, they are unique among other parrots for residing in alpine climates. \
They are known to be intelligent and curious, which has made some consider them a pest."
icon_state = "kea"
icon_rest = "kea-held"
icon_dead = "kea-dead"
tt_desc = "E Nestor notabilis"
/mob/living/simple_mob/animal/passive/bird/parrot/eclectus
name = "eclectus"
desc = "A species of parrot, this species features extreme sexual dimorphism in their plumage's colors. \
A male eclectus has emerald green plumage, where as a female eclectus has red and purple plumage."
icon_state = "eclectus"
icon_rest = "eclectus-held"
icon_dead = "eclectus-dead"
tt_desc = "E Eclectus roratus"
/mob/living/simple_mob/animal/passive/bird/parrot/eclectus/Initialize()
gender = pick(MALE, FEMALE)
if(gender == FEMALE)
icon_state = "eclectusf"
icon_rest = "eclectusf-held"
icon_dead = "eclectusf-dead"
return ..()
/mob/living/simple_mob/animal/passive/bird/parrot/grey_parrot
name = "grey parrot"
desc = "A species of parrot. This one is predominantly grey, but has red tail feathers."
icon_state = "agrey"
icon_rest = "agrey-held"
icon_dead = "agrey-dead"
tt_desc = "E Psittacus erithacus"
/mob/living/simple_mob/animal/passive/bird/parrot/black_headed_caique
name = "black-headed caique"
desc = "A species of parrot, these birds have a distinct black color on their heads, distinguishing them from their relative Caiques."
icon_state = "bcaique"
icon_rest = "bcaique-held"
icon_dead = "bcaique-dead"
tt_desc = "E Pionites melanocephalus"
/mob/living/simple_mob/animal/passive/bird/parrot/white_caique
name = "white-bellied caique"
desc = "A species of parrot, they are also known as the Green-Thighed Parrot."
icon_state = "wcaique"
icon_rest = "wcaique-held"
icon_dead = "wcaique-dead"
tt_desc = "E Pionites leucogaster"
/mob/living/simple_mob/animal/passive/bird/parrot/budgerigar
name = "budgerigar"
desc = "A species of parrot, they are also known as the common parakeet, or in some circles, the budgie. \
This one is has its natural colors of green and yellow."
icon_state = "gbudge"
icon_rest = "gbudge-held"
icon_dead = "gbudge-dead"
tt_desc = "E Melopsittacus undulatus"
/mob/living/simple_mob/animal/passive/bird/parrot/budgerigar/blue
icon_state = "bbudge"
icon_rest = "bbudge-held"
icon_dead = "bbudge-dead"
desc = "A species of parrot, they are also known as the common parakeet, or in some circles, the budgie. \
This one has a mutation which altered its color to be blue instead of green and yellow."
/mob/living/simple_mob/animal/passive/bird/parrot/budgerigar/bluegreen
icon_state = "bgbudge"
icon_rest = "bgbudge-held"
icon_dead = "bgbudge-dead"
desc = "A species of parrot, they are also known as the common parakeet, or in some circles, the budgie. \
This one has a mutation which altered its color to be a mix of blue and green."
/mob/living/simple_mob/animal/passive/bird/parrot/cockatiel
name = "cockatiel"
desc = "A species of parrot. This one has a highly visible crest."
icon_state = "tiel"
icon_rest = "tiel-held"
icon_dead = "tiel-dead"
tt_desc = "E Nymphicus hollandicus"
/mob/living/simple_mob/animal/passive/bird/parrot/cockatiel/white
icon_state = "wtiel"
icon_rest = "wtiel-held"
icon_dead = "wtiel-dead"
/mob/living/simple_mob/animal/passive/bird/parrot/cockatiel/yellowish
icon_state = "luttiel"
icon_rest = "luttiel-held"
icon_dead = "luttiel-dead"
/mob/living/simple_mob/animal/passive/bird/parrot/cockatiel/grey
icon_state = "blutiel" // idk why this is blu.
icon_rest = "blutiel-held"
icon_dead = "blutiel-dead"
// This actually might be the yellow-crested cockatoo but idk.
/mob/living/simple_mob/animal/passive/bird/parrot/sulphur_cockatoo
name = "sulphur-crested cockatoo"
desc = "A species of parrot. This one has an expressive yellow crest. Their underwing and tail feathers are also yellow."
icon_state = "too"
icon_rest = "too-held"
icon_dead = "too-dead"
tt_desc = "E Cacatua galerita"
// This was originally called 'hooded_too', which might not mean the unbrella cockatoo but idk.
/mob/living/simple_mob/animal/passive/bird/parrot/white_cockatoo
name = "white cockatoo"
desc = "A species of parrot. This one is also known as the Umbrella Cockatoo, due to the semicircular shape of its crest."
icon_state = "utoo"
icon_rest = "utoo-held"
icon_dead = "utoo-dead"
tt_desc = "E Cacatua alba"
/mob/living/simple_mob/animal/passive/bird/parrot/pink_cockatoo
name = "pink cockatoo"
desc = "A species of parrot. This one is also known as Major Mitchell's cockatoo, \
in honor of a human surveyor and explorer who existed before humans fully explored their home planet."
icon_state = "mtoo"
icon_rest = "mtoo-held"
icon_dead = "mtoo-dead"
tt_desc = "E Lophochroa leadbeateri"
// AI
/datum/ai_holder/simple_mob/passive/parrot
speak_chance = 2
base_wander_delay = 8
/datum/ai_holder/simple_mob/passive/parrot/on_hear_say(mob/living/speaker, message)
if(holder.stat || !holder.say_list || !message || speaker == holder)
return
var/datum/say_list/S = holder.say_list
>>>>>>> 6c6644f... Rewrite examine() to pass a list around (#7038)
S.speak |= message
@@ -1,4 +1,3 @@
<<<<<<< HEAD
// These slimes have the mechanics xenobiologists care about, such as reproduction, mutating into new colors, and being able to submit through fear.
/mob/living/simple_mob/slime/xenobio
@@ -74,25 +73,25 @@
..()
/mob/living/simple_mob/slime/xenobio/examine(mob/user)
..()
. = ..()
if(hat)
to_chat(user, "It is wearing \a [hat].")
. += "It is wearing \a [hat]."
if(stat == DEAD)
to_chat(user, "It appears to be dead.")
. += "It appears to be dead."
else if(incapacitated(INCAPACITATION_DISABLED))
to_chat(user, "It appears to be incapacitated.")
. += "It appears to be incapacitated."
else if(harmless)
to_chat(user, "It appears to have been pacified.")
. += "It appears to have been pacified."
else
if(has_AI())
var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder
if(AI.rabid)
to_chat(user, "It seems very, very angry and upset.")
. += "It seems very, very angry and upset."
else if(AI.obedience >= 5)
to_chat(user, "It looks rather obedient.")
. += "It looks rather obedient."
else if(AI.discipline)
to_chat(user, "It has been subjugated by force, at least for now.")
. += "It has been subjugated by force, at least for now."
/mob/living/simple_mob/slime/xenobio/proc/make_adult()
if(is_adult)
@@ -277,283 +276,3 @@
lines.Add(description_info)
return lines.Join("\n")
=======
// These slimes have the mechanics xenobiologists care about, such as reproduction, mutating into new colors, and being able to submit through fear.
/mob/living/simple_mob/slime/xenobio
desc = "The most basic of slimes. The grey slime has no remarkable qualities, however it remains one of the most useful colors for scientists."
layer = MOB_LAYER + 1 // Need them on top of other mobs or it looks weird when consuming something.
ai_holder_type = /datum/ai_holder/simple_mob/xenobio_slime // This should never be changed for xenobio slimes.
var/is_adult = FALSE // Slimes turn into adults when fed enough. Adult slimes are somewhat stronger, and can reproduce if fed enough.
var/maxHealth_adult = 200
var/power_charge = 0 // Disarm attacks can shock someone if high/lucky enough.
var/mob/living/victim = null // the person the slime is currently feeding on
var/rainbow_core_candidate = TRUE // If false, rainbow cores cannot make this type randomly.
var/mutation_chance = 25 // Odds of spawning as a new color when reproducing. Can be modified by certain xenobio products. Carried across generations of slimes.
var/list/slime_mutation = list(
/mob/living/simple_mob/slime/xenobio/orange,
/mob/living/simple_mob/slime/xenobio/metal,
/mob/living/simple_mob/slime/xenobio/blue,
/mob/living/simple_mob/slime/xenobio/purple
)
var/amount_grown = 0 // controls how long the slime has been overfed, if 10, grows or reproduces
var/number = 0 // This is used to make the slime semi-unique for indentification.
var/harmless = FALSE // Set to true when pacified. Makes the slime harmless, not get hungry, and not be able to grow/reproduce.
/mob/living/simple_mob/slime/xenobio/Initialize(mapload, var/mob/living/simple_mob/slime/xenobio/my_predecessor)
ASSERT(ispath(ai_holder_type, /datum/ai_holder/simple_mob/xenobio_slime))
number = rand(1, 1000)
update_name()
. = ..() // This will make the AI and do the other mob constructor things. It will also return the default hint at the end.
if(my_predecessor)
inherit_information(my_predecessor)
/mob/living/simple_mob/slime/xenobio/Destroy()
if(victim)
stop_consumption() // Unbuckle us from our victim.
return ..()
// Called when a slime makes another slime by splitting. The predecessor slime will be deleted shortly afterwards.
/mob/living/simple_mob/slime/xenobio/proc/inherit_information(var/mob/living/simple_mob/slime/xenobio/predecessor)
if(!predecessor)
return
var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder
var/datum/ai_holder/simple_mob/xenobio_slime/previous_AI = predecessor.ai_holder
ASSERT(istype(AI))
ASSERT(istype(previous_AI))
// Now to transfer the information.
// Newly made slimes are bit more rebellious than their predecessors, but they also somewhat forget the atrocities the xenobiologist may have done.
AI.discipline = max(previous_AI.discipline - 1, 0)
AI.obedience = max(previous_AI.obedience - 1, 0)
AI.resentment = max(previous_AI.resentment - 1, 0)
AI.rabid = previous_AI.rabid
/mob/living/simple_mob/slime/xenobio/update_icon()
icon_living = "[icon_state_override ? "[icon_state_override] slime" : "slime"] [is_adult ? "adult" : "baby"][victim ? " eating" : ""]"
icon_dead = "[icon_state_override ? "[icon_state_override] slime" : "slime"] [is_adult ? "adult" : "baby"] dead"
icon_rest = icon_dead
..() // This will apply the correct icon_state and do the other overlay-related things.
/mob/living/simple_mob/slime/xenobio/handle_special()
if(stat != DEAD)
handle_nutrition()
if(victim)
handle_consumption()
handle_stuttering() // ??
..()
/mob/living/simple_mob/slime/xenobio/examine(mob/user)
. = ..()
if(hat)
. += "It is wearing \a [hat]."
if(stat == DEAD)
. += "It appears to be dead."
else if(incapacitated(INCAPACITATION_DISABLED))
. += "It appears to be incapacitated."
else if(harmless)
. += "It appears to have been pacified."
else
if(has_AI())
var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder
if(AI.rabid)
. += "It seems very, very angry and upset."
else if(AI.obedience >= 5)
. += "It looks rather obedient."
else if(AI.discipline)
. += "It has been subjugated by force, at least for now."
/mob/living/simple_mob/slime/xenobio/proc/make_adult()
if(is_adult)
return
is_adult = TRUE
melee_damage_lower = round(melee_damage_lower * 2) // 20
melee_damage_upper = round(melee_damage_upper * 2) // 30
maxHealth = maxHealth_adult
amount_grown = 0
update_icon()
update_name()
/mob/living/simple_mob/slime/xenobio/proc/update_name()
if(harmless) // Docile slimes are generally named, so we shouldn't mess with it.
return
name = "[slime_color] [is_adult ? "adult" : "baby"] [initial(name)] ([number])"
real_name = name
/mob/living/simple_mob/slime/xenobio/update_mood()
var/old_mood = mood
if(incapacitated(INCAPACITATION_DISABLED))
mood = "sad"
else if(harmless)
mood = ":33"
else if(has_AI())
var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder
if(AI.rabid)
mood = "angry"
else if(AI.target)
mood = "mischevous"
else if(AI.discipline)
mood = "pout"
else
mood = ":3"
else
mood = ":3"
if(old_mood != mood)
update_icon()
/mob/living/simple_mob/slime/xenobio/proc/enrage()
if(harmless)
return
if(has_AI())
var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder
AI.enrage()
/mob/living/simple_mob/slime/xenobio/proc/pacify()
harmless = TRUE
if(has_AI())
var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder
AI.pacify()
faction = "neutral"
// If for whatever reason the mob AI (or player) decides to try to attack something anyways.
melee_damage_upper = 0
melee_damage_lower = 0
update_mood()
// These are verbs so that player slimes can evolve/split.
/mob/living/simple_mob/slime/xenobio/verb/evolve()
set category = "Slime"
set desc = "This will let you evolve from baby to adult slime."
if(stat)
to_chat(src, span("warning", "I must be conscious to do this..."))
return
if(harmless)
to_chat(src, span("warning", "I have been pacified. I cannot evolve..."))
return
if(!is_adult)
if(amount_grown >= 10)
make_adult()
else
to_chat(src, span("warning", "I am not ready to evolve yet..."))
else
to_chat(src, span("warning", "I have already evolved..."))
/mob/living/simple_mob/slime/xenobio/verb/reproduce()
set category = "Slime"
set desc = "This will make you split into four new slimes."
if(stat)
to_chat(src, span("warning", "I must be conscious to do this..."))
return
if(harmless)
to_chat(src, span("warning", "I have been pacified. I cannot reproduce..."))
return
if(is_adult)
if(amount_grown >= 10)
// Check if there's enough 'room' to split.
var/list/nearby_things = orange(1, src)
var/free_tiles = 0
for(var/turf/T in nearby_things)
var/free = TRUE
if(T.density) // No walls.
continue
for(var/atom/movable/AM in T)
if(AM.density)
free = FALSE
break
if(free)
free_tiles++
if(free_tiles < 3) // Three free tiles are needed, as four slimes are made and the 4th tile is from the center tile that the current slime occupies.
to_chat(src, span("warning", "It is too cramped here to reproduce..."))
return
var/list/babies = list()
for(var/i = 1 to 4)
babies.Add(make_new_slime())
var/mob/living/simple_mob/slime/new_slime = pick(babies)
new_slime.universal_speak = universal_speak
if(src.mind)
src.mind.transfer_to(new_slime)
else
new_slime.key = src.key
qdel(src)
else
to_chat(src, span("warning", "I am not ready to reproduce yet..."))
else
to_chat(src, span("warning", "I have not evolved enough to reproduce yet..."))
// Used when reproducing or dying.
/mob/living/simple_mob/slime/xenobio/proc/make_new_slime(var/desired_type)
var/t = src.type
if(desired_type)
t = desired_type
if(prob(mutation_chance / 10))
t = /mob/living/simple_mob/slime/xenobio/rainbow
else if(prob(mutation_chance) && slime_mutation.len)
t = slime_mutation[rand(1, slime_mutation.len)]
var/mob/living/simple_mob/slime/xenobio/baby = new t(loc, src)
// Handle 'inheriting' from parent slime.
baby.mutation_chance = mutation_chance
baby.power_charge = round(power_charge / 4)
if(!istype(baby, /mob/living/simple_mob/slime/xenobio/rainbow))
baby.unity = unity
baby.faction = faction
baby.friends = friends.Copy()
step_away(baby, src)
return baby
/mob/living/simple_mob/slime/xenobio/get_description_interaction()
var/list/results = list()
if(!stat)
results += "[desc_panel_image("slimebaton")]to stun the slime, if it's being bad."
results += ..()
return results
/mob/living/simple_mob/slime/xenobio/get_description_info()
var/list/lines = list()
var/intro_line = "Slimes are generally the test subjects of Xenobiology, with different colors having different properties. \
They can be extremely dangerous if not handled properly."
lines.Add(intro_line)
lines.Add(null) // To pad the line breaks.
var/list/rewards = list()
for(var/potential_color in slime_mutation)
var/mob/living/simple_mob/slime/S = potential_color
rewards.Add(initial(S.slime_color))
var/reward_line = "This color of slime can mutate into [english_list(rewards)] colors, when it reproduces. It will do so when it has eatten enough."
lines.Add(reward_line)
lines.Add(null)
lines.Add(description_info)
return lines.Join("\n")
>>>>>>> 6c6644f... Rewrite examine() to pass a list around (#7038)
@@ -69,12 +69,11 @@
/mob/living/simple_mob/vore/hostile/morph/examine(mob/user)
if(morphed)
form.examine(user)
if(get_dist(user,src)<=3)
to_chat(user, "<span class='warning'>It doesn't look quite right...</span>")
. = form.examine(user)
if(get_dist(user, src) <= 3)
. += "<span class='warning'>[form] doesn't look quite right...</span>"
else
..()
return
. = ..()
/mob/living/simple_mob/vore/hostile/morph/ShiftClickOn(atom/movable/A)
if(Adjacent(A))
+9 -9
View File
@@ -68,15 +68,15 @@
pixel_y = (dir & 3) ? (dir == NORTH ? -y_offset : y_offset) : 0
/obj/structure/construction/examine(mob/user)
if(!..(user, 2))
return
switch(stage)
if(FRAME_UNFASTENED)
to_chat(user, "It's an empty frame.")
if(FRAME_FASTENED)
to_chat(user, "It's fixed to the wall.")
if(FRAME_WIRED)
to_chat(user, "It's wired.")
. = ..()
if(get_dist(user, src) <= 2)
switch(stage)
if(FRAME_UNFASTENED)
. += "It's an empty frame."
if(FRAME_FASTENED)
. += "It's fixed to the wall."
if(FRAME_WIRED)
. += "It's wired."
/obj/structure/construction/update_icon()
icon_state = "[base_icon][stage]"
+1 -1
View File
@@ -89,7 +89,7 @@
/obj/machinery/power/rtg/examine(mob/user)
. = ..()
if(Adjacent(user, src) || isobserver(user))
to_chat(user, "<span class='notice'>The status display reads: Power generation now at <b>[power_gen*0.001]</b>kW.</span>")
. += "<span class='notice'>The status display reads: Power generation now at <b>[power_gen*0.001]</b>kW.</span>"
/obj/machinery/power/rtg/attackby(obj/item/I, mob/user, params)
if(default_deconstruction_screwdriver(user, I))
@@ -22,12 +22,12 @@
var/empty_state = "kineticgun_empty"
/obj/item/weapon/gun/energy/kinetic_accelerator/examine(mob/user)
if(..(user, 1))
if(max_mod_capacity)
to_chat(user, "<b>[get_remaining_mod_capacity()]%</b> mod capacity remaining.")
for(var/A in get_modkits())
var/obj/item/borg/upgrade/modkit/M = A
to_chat(user, "<span class='notice'>There is a [M.name] mod installed, using <b>[M.cost]%</b> capacity.</span>")
. = ..()
if(Adjacent(user) && max_mod_capacity)
. += "<b>[get_remaining_mod_capacity()]%</b> mod capacity remaining."
for(var/A in get_modkits())
var/obj/item/borg/upgrade/modkit/M = A
. += "<span class='notice'>There is a [M.name] mod installed, using <b>[M.cost]%</b> capacity.</span>"
/obj/item/weapon/gun/energy/kinetic_accelerator/attackby(obj/item/A, mob/user)
if(istype(A, /obj/item/weapon/tool/crowbar))
@@ -164,8 +164,9 @@
var/modifier = 1 //For use in any mod kit that has numerical modifiers
/obj/item/borg/upgrade/modkit/examine(mob/user)
if(..(user, 1))
to_chat(user, "<span class='notice'>Occupies <b>[cost]%</b> of mod capacity.</span>")
. = ..()
if(Adjacent(user))
. += "<span class='notice'>Occupies <b>[cost]%</b> of mod capacity.</span>"
/obj/item/borg/upgrade/modkit/attackby(obj/item/A, mob/user)
if(istype(A, /obj/item/weapon/gun/energy/kinetic_accelerator) && !issilicon(user))
+8 -10
View File
@@ -550,24 +550,22 @@ var/global/list/default_infomorph_software = list()
return 1
/mob/living/silicon/infomorph/examine(mob/user)
..(user, infix = ", personal AI")
. = ..(user, infix = ", personal AI")
var/msg = ""
switch(src.stat)
if(CONSCIOUS)
if(!src.client) msg += "\nIt appears to be in stand-by mode." //afk
if(UNCONSCIOUS) msg += "\n<span class='warning'>It doesn't seem to be responding.</span>"
if(DEAD) msg += "\n<span class='deadsay'>It looks completely unsalvageable.</span>"
msg += "\n*---------*"
if(!src.client) . += "It appears to be in stand-by mode." //afk
if(UNCONSCIOUS) . += "<span class='warning'>It doesn't seem to be responding.</span>"
if(DEAD) . += "<span class='deadsay'>It looks completely unsalvageable.</span>"
. += "*---------*"
if(print_flavor_text()) msg += "\n[print_flavor_text()]\n"
if(print_flavor_text())
. += "[print_flavor_text()]"
if (pose)
if( findtext(pose,".",length(pose)) == 0 && findtext(pose,"!",length(pose)) == 0 && findtext(pose,"?",length(pose)) == 0 )
pose = addtext(pose,".") //Makes sure all emotes end with a period.
msg += "\nIt is [pose]"
to_chat(user,msg)
. += "It is [pose]"
/mob/living/silicon/infomorph/Life()
//We're dead or EMP'd or something.
@@ -54,10 +54,5 @@
/obj/item/weapon/shield_diffuser/examine(mob/user)
. = ..()
<<<<<<< HEAD
to_chat(user, "The charge meter reads [cell ? cell.percent() : 0]%")
to_chat(user, "It is [enabled ? "enabled" : "disabled"].")
=======
. += "The charge meter reads [cell ? cell.percent() : 0]%"
. += "It is [enabled ? "enabled" : "disabled"]."
>>>>>>> 6c6644f... Rewrite examine() to pass a list around (#7038)
@@ -91,8 +91,4 @@
. = ..()
. += "It is [enabled ? "enabled" : "disabled"]."
if(alarm)
<<<<<<< HEAD
to_chat(user, "A red LED labeled \"Proximity Alarm\" is blinking on the control panel.")
=======
. += "A red LED labeled \"Proximity Alarm\" is blinking on the control panel."
>>>>>>> 6c6644f... Rewrite examine() to pass a list around (#7038)
+3 -2
View File
@@ -38,8 +38,9 @@
return ..()
/obj/machinery/computer/telescience/examine(mob/user)
..()
to_chat(user, "There are [crystals.len ? crystals.len : "no"] bluespace crystal\s in the crystal slots.")
. = ..()
if(Adjacent(user))
. += "There are [crystals.len ? crystals.len : "no"] bluespace crystal\s in the crystal slots."
/obj/machinery/computer/telescience/Initialize()
. = ..()
+5 -8
View File
@@ -207,14 +207,11 @@
return ..()
/obj/vehicle/train/security/engine/examine(mob/user)
if(!..(user, 1))
return
if(!istype(usr, /mob/living/carbon/human))
return
to_chat(user, "The power light is [on ? "on" : "off"].\nThere are[key ? "" : " no"] keys in the ignition.")
to_chat(user, "The charge meter reads [cell? round(cell.percent(), 0.01) : 0]%")
. = ..()
if(Adjacent(user))
. += "The power light is [on ? "on" : "off"]."
. += "There are[key ? "" : " no"] keys in the ignition."
. += "The charge meter reads [cell? round(cell.percent(), 0.01) : 0]%"
/obj/vehicle/train/security/engine/verb/start_engine()
set name = "Start engine"
+5 -8
View File
@@ -205,14 +205,11 @@
return ..()
/obj/vehicle/train/rover/engine/examine(mob/user)
if(!..(user, 1))
return
if(!istype(usr, /mob/living/carbon/human))
return
to_chat(user, "The power light is [on ? "on" : "off"].\nThere are[key ? "" : " no"] keys in the ignition.")
to_chat(user, "The charge meter reads [cell? round(cell.percent(), 0.01) : 0]%")
. = ..()
if(Adjacent(user))
. += "The power light is [on ? "on" : "off"]."
. += "There are[key ? "" : " no"] keys in the ignition."
. += "The charge meter reads [cell? round(cell.percent(), 0.01) : 0]%"
/obj/vehicle/train/rover/engine/verb/start_engine()
set name = "Start engine"
+3 -3
View File
@@ -764,10 +764,10 @@
set desc = "Switch sharp/fuzzy scaling for current mob."
appearance_flags ^= PIXEL_SCALE
/mob/living/examine(mob/user, distance, infix, suffix)
. = ..(user, distance, infix, suffix)
/mob/living/examine(mob/user, infix, suffix)
. = ..()
if(showvoreprefs)
to_chat(user, "<span class='deptradio'><a href='?src=\ref[src];vore_prefs=1'>\[Mechanical Vore Preferences\]</a></span>")
. += "<span class='deptradio'><a href='?src=\ref[src];vore_prefs=1'>\[Mechanical Vore Preferences\]</a></span>"
/mob/living/Topic(href, href_list) //Can't find any instances of Topic() being overridden by /mob/living in polaris' base code, even though /mob/living/carbon/human's Topic() has a ..() call
if(href_list["vore_prefs"])
+2 -6
View File
@@ -98,13 +98,9 @@
//This can go here with all the references.
/obj/effect/overlay/aiholo/examine(mob/user)
. = ..(user)
var/msg = "\n"
. = ..()
//If you need an ooc_notes copy paste, this is NOT the one to use.
var/ooc_notes = master.ooc_notes
if(ooc_notes)
msg += "<span class = 'deptradio'>OOC Notes:</span> <a href='?src=\ref[master];ooc_notes=1'>\[View\]</a>\n"
to_chat(user,msg)
. += "<span class = 'deptradio'>OOC Notes:</span> <a href='?src=\ref[master];ooc_notes=1'>\[View\]</a>"
@@ -11,8 +11,9 @@
pixel_y = 0 // Override value from parent.
/obj/item/weapon/holder/micro/examine(mob/user)
. = list()
for(var/mob/living/M in contents)
M.examine(user)
. += M.examine(user)
/obj/item/weapon/holder/MouseDrop(mob/M)
..()
+2 -3
View File
@@ -49,9 +49,8 @@
to_chat(usr, "<span class='notice'>You set the size to [size_select]%</span>")
/obj/item/weapon/gun/energy/sizegun/examine(mob/user)
..()
var/size_examine = (size_set_to*100)
to_chat(user, "<span class='info'>It is currently set at [size_examine]%</span>")
. = ..()
. += "<span class='info'>It is currently set at [size_set_to*100]%</span>"
//
// Beams for size gun