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

View File

@@ -25,8 +25,9 @@
default_apply_parts() default_apply_parts()
/obj/machinery/power/thermoregulator/examine(mob/user) /obj/machinery/power/thermoregulator/examine(mob/user)
if(..(user,2)) . = ..()
to_chat(user, "There is a small display that reads \"[convert_k2c(target_temp)]C\".") if(get_dist(user, src) <= 2)
. += "There is a small display that reads \"[convert_k2c(target_temp)]C\"."
/obj/machinery/power/thermoregulator/attackby(obj/item/I, mob/user) /obj/machinery/power/thermoregulator/attackby(obj/item/I, mob/user)
if(I.is_screwdriver()) if(I.is_screwdriver())

View File

@@ -66,8 +66,8 @@
/obj/structure/barricade/cutout/examine(var/mob/user) /obj/structure/barricade/cutout/examine(var/mob/user)
. = ..() . = ..()
if(Adjacent(user, src)) if(Adjacent(user))
to_chat(user, "<br><span class='notice'>... from this distance, they seem to be made of [material.name] ...</span>") . += "<span class='notice'>... from this distance, they seem to be made of [material.name] ...</span>"
/obj/structure/barricade/cutout/attackby(var/obj/I, var/mob/user) /obj/structure/barricade/cutout/attackby(var/obj/I, var/mob/user)
if(is_type_in_list(I, painters)) if(is_type_in_list(I, painters))

View File

@@ -158,9 +158,9 @@ GLOBAL_LIST_BOILERPLATE(pointdefense_turrets, /obj/machinery/power/pointdefense)
underlays += I underlays += I
/obj/machinery/power/pointdefense/examine(mob/user) /obj/machinery/power/pointdefense/examine(mob/user)
..() . = ..()
if(powernet) if(powernet)
to_chat(user, "It is connected to a power cable below.") . += "It is connected to a power cable below."
/obj/machinery/power/pointdefense/get_description_interaction() /obj/machinery/power/pointdefense/get_description_interaction()
. = ..() . = ..()

View File

@@ -56,8 +56,9 @@
return 1 return 1
/obj/item/device/nifrepairer/examine(mob/user) /obj/item/device/nifrepairer/examine(mob/user)
if(..(user, 1)) . = ..()
if(Adjacent(user))
if(supply.total_volume) if(supply.total_volume)
to_chat(user, "<span class='notice'>\The [src] contains [supply.total_volume] units of programmed nanites, ready for dispensing.</span>") . += "<span class='notice'>\The [src] contains [supply.total_volume] units of programmed nanites, ready for dispensing.</span>"
else else
to_chat(user, "<span class='notice'>\The [src] is empty and ready to accept nanopaste.</span>") . += "<span class='notice'>\The [src] is empty and ready to accept nanopaste.</span>"

View File

@@ -581,16 +581,10 @@ var/global/list/default_medbay_channels = list(
/obj/item/device/radio/examine(mob/user) /obj/item/device/radio/examine(mob/user)
. = ..() . = ..()
<<<<<<< HEAD
if ((in_range(src, user) || loc == user))
if (b_stat)
user.show_message("<span class='notice'>\The [src] can be attached and modified!</span>")
=======
if((in_range(src, user) || loc == user)) if((in_range(src, user) || loc == user))
if(b_stat) if(b_stat)
. += "<span class='notice'>\The [src] can be attached and modified!</span>" . += "<span class='notice'>\The [src] can be attached and modified!</span>"
>>>>>>> 6c6644f... Rewrite examine() to pass a list around (#7038)
else else
. += "<span class='notice'>\The [src] can not be modified or attached!</span>" . += "<span class='notice'>\The [src] can not be modified or attached!</span>"

View File

@@ -58,6 +58,18 @@
STOP_PROCESSING(SSobj, src) STOP_PROCESSING(SSobj, src)
return ..() return ..()
/obj/item/device/uav/examine(mob/user)
. = ..()
if(Adjacent(user))
. += "It has <i>'[nickname]'</i> scribbled on the side."
if(!cell)
. += "<span class='warning'>It appears to be missing a power cell.</span>"
if(health <= (initial(health)/4))
. += "<span class='warning'>It looks like it might break at any second!</span>"
else if(health <= (initial(health)/2))
. += "<span class='warning'>It looks pretty beaten up...</span>"
/obj/item/device/uav/attack_hand(var/mob/user) /obj/item/device/uav/attack_hand(var/mob/user)
//Has to be on the ground to work with it properly //Has to be on the ground to work with it properly
if(!isturf(loc)) if(!isturf(loc))

View File

@@ -167,8 +167,8 @@
////////////////// //////////////////
/obj/item/weapon/rcd_ammo/examine(mob/user) /obj/item/weapon/rcd_ammo/examine(mob/user)
..() . = ..()
to_chat(user, display_resources()) . += display_resources()
// Used to show how much stuff (matter units, cell charge, etc) is left inside. // Used to show how much stuff (matter units, cell charge, etc) is left inside.
/obj/item/weapon/rcd_ammo/proc/display_resources() /obj/item/weapon/rcd_ammo/proc/display_resources()

View File

@@ -40,14 +40,9 @@
. = ..() . = ..()
/obj/item/weapon/extinguisher/examine(mob/user) /obj/item/weapon/extinguisher/examine(mob/user)
<<<<<<< HEAD
if(..(user, 0))
to_chat(user, "[bicon(src)] [src.name] contains [src.reagents.total_volume] units of foam left!") //VOREStation Edit
=======
. = ..() . = ..()
if(get_dist(user, src) == 0) if(get_dist(user, src) == 0)
. += "[src] has [src.reagents.total_volume] units of water left!" . += "[src] has [src.reagents.total_volume] units of foam left!" //VOREStation Edit - Foam not water
>>>>>>> 6c6644f... Rewrite examine() to pass a list around (#7038)
/obj/item/weapon/extinguisher/attack_self(mob/user as mob) /obj/item/weapon/extinguisher/attack_self(mob/user as mob)
safety = !safety safety = !safety

View File

@@ -197,14 +197,12 @@
/obj/item/weapon/inducer/examine(mob/living/M) /obj/item/weapon/inducer/examine(mob/living/M)
. = ..() . = ..()
var/dat = ""
if(cell) if(cell)
dat += "<br><span class='notice'>Its display shows: [round(cell.charge)] / [cell.maxcharge].</span>" . += "<span class='notice'>Its display shows: [round(cell.charge)] / [cell.maxcharge].</span>"
else else
dat += "<br><span class='notice'>Its display is dark.</span>" . += "<span class='notice'>Its display is dark.</span>"
if(opened) if(opened)
dat += "<br><span class='notice'>Its battery compartment is open.</span>" . += "<span class='notice'>Its battery compartment is open.</span>"
to_chat(M, dat)
/obj/item/weapon/inducer/update_icon() /obj/item/weapon/inducer/update_icon()
..() ..()

View File

@@ -1,4 +1,3 @@
<<<<<<< HEAD
//Chain link fences //Chain link fences
//Sprites ported from /VG/ //Sprites ported from /VG/
@@ -33,9 +32,9 @@
switch(hole_size) switch(hole_size)
if(MEDIUM_HOLE) if(MEDIUM_HOLE)
user.show_message("There is a large hole in \the [src].") . += "There is a large hole in it."
if(LARGE_HOLE) if(LARGE_HOLE)
user.show_message("\The [src] has been completely cut through.") . += "It has been completely cut through."
/obj/structure/fence/get_description_interaction() /obj/structure/fence/get_description_interaction()
var/list/results = list() var/list/results = list()
@@ -177,184 +176,4 @@
#undef NO_HOLE #undef NO_HOLE
#undef MEDIUM_HOLE #undef MEDIUM_HOLE
#undef LARGE_HOLE #undef LARGE_HOLE
=======
//Chain link fences
//Sprites ported from /VG/
#define CUT_TIME 10 SECONDS
#define CLIMB_TIME 5 SECONDS
#define NO_HOLE 0 //section is intact
#define MEDIUM_HOLE 1 //medium hole in the section - can climb through
#define LARGE_HOLE 2 //large hole in the section - can walk through
#define MAX_HOLE_SIZE LARGE_HOLE
/obj/structure/fence
name = "fence"
desc = "A chain link fence. Not as effective as a wall, but generally it keeps people out."
description_info = "Projectiles can freely pass fences."
density = TRUE
anchored = TRUE
icon = 'icons/obj/fence.dmi'
icon_state = "straight"
var/cuttable = TRUE
var/hole_size= NO_HOLE
var/invulnerable = FALSE
/obj/structure/fence/Initialize()
update_cut_status()
return ..()
/obj/structure/fence/examine(mob/user)
. = ..()
switch(hole_size)
if(MEDIUM_HOLE)
. += "There is a large hole in it."
if(LARGE_HOLE)
. += "It has been completely cut through."
/obj/structure/fence/get_description_interaction()
var/list/results = list()
if(cuttable && !invulnerable && hole_size < MAX_HOLE_SIZE)
results += "[desc_panel_image("wirecutters")]to [hole_size > NO_HOLE ? "expand the":"cut a"] hole into the fence, allowing passage."
return results
/obj/structure/fence/end
icon_state = "end"
cuttable = FALSE
/obj/structure/fence/corner
icon_state = "corner"
cuttable = FALSE
/obj/structure/fence/post
icon_state = "post"
cuttable = FALSE
/obj/structure/fence/cut/medium
icon_state = "straight_cut2"
hole_size = MEDIUM_HOLE
/obj/structure/fence/cut/large
icon_state = "straight_cut3"
hole_size = LARGE_HOLE
// Projectiles can pass through fences.
/obj/structure/fence/CanPass(atom/movable/mover, turf/target)
if(istype(mover, /obj/item/projectile))
return TRUE
return ..()
/obj/structure/fence/attackby(obj/item/W, mob/user)
if(W.is_wirecutter())
if(!cuttable)
to_chat(user, span("warning", "This section of the fence can't be cut."))
return
if(invulnerable)
to_chat(user, span("warning", "This fence is too strong to cut through."))
return
var/current_stage = hole_size
if(current_stage >= MAX_HOLE_SIZE)
to_chat(user, span("notice", "This fence has too much cut out of it already."))
return
user.visible_message(span("danger", "\The [user] starts cutting through \the [src] with \the [W]."),\
span("danger", "You start cutting through \the [src] with \the [W]."))
playsound(src, W.usesound, 50, 1)
if(do_after(user, CUT_TIME * W.toolspeed, target = src))
if(current_stage == hole_size)
switch(++hole_size)
if(MEDIUM_HOLE)
visible_message(span("notice", "\The [user] cuts into \the [src] some more."))
to_chat(user, span("notice", "You could probably fit yourself through that hole now. Although climbing through would be much faster if you made it even bigger."))
climbable = TRUE
if(LARGE_HOLE)
visible_message(span("notice", "\The [user] completely cuts through \the [src]."))
to_chat(user, span("notice", "The hole in \the [src] is now big enough to walk through."))
climbable = FALSE
update_cut_status()
return TRUE
/obj/structure/fence/proc/update_cut_status()
if(!cuttable)
return
density = TRUE
switch(hole_size)
if(NO_HOLE)
icon_state = initial(icon_state)
if(MEDIUM_HOLE)
icon_state = "straight_cut2"
if(LARGE_HOLE)
icon_state = "straight_cut3"
density = FALSE
//FENCE DOORS
/obj/structure/fence/door
name = "fence door"
desc = "Not very useful without a real lock."
icon_state = "door_closed"
cuttable = FALSE
var/open = FALSE
var/locked = FALSE
/obj/structure/fence/door/Initialize()
update_door_status()
return ..()
/obj/structure/fence/door/opened
icon_state = "door_opened"
open = TRUE
density = TRUE
/obj/structure/fence/door/locked
desc = "It looks like it has a strong padlock attached."
locked = TRUE
/obj/structure/fence/door/attack_hand(mob/user)
if(can_open(user))
toggle(user)
else
to_chat(user, span("warning", "\The [src] is [!open ? "locked" : "stuck open"]."))
return TRUE
/obj/structure/fence/door/proc/toggle(mob/user)
switch(open)
if(FALSE)
visible_message(span("notice", "\The [user] opens \the [src]."))
open = TRUE
if(TRUE)
visible_message(span("notice", "\The [user] closes \the [src]."))
open = FALSE
update_door_status()
playsound(src, 'sound/machines/click.ogg', 100, 1)
/obj/structure/fence/door/proc/update_door_status()
switch(open)
if(FALSE)
density = TRUE
icon_state = "door_closed"
if(TRUE)
density = FALSE
icon_state = "door_opened"
/obj/structure/fence/door/proc/can_open(mob/user)
if(locked)
return FALSE
return TRUE
#undef CUT_TIME
#undef CLIMB_TIME
#undef NO_HOLE
#undef MEDIUM_HOLE
#undef LARGE_HOLE
>>>>>>> 6c6644f... Rewrite examine() to pass a list around (#7038)
#undef MAX_HOLE_SIZE #undef MAX_HOLE_SIZE

View File

@@ -342,24 +342,24 @@
return return
if(beaker) if(beaker)
to_chat(user, "The IV drip is [mode ? "injecting" : "taking blood"].") . += "The IV drip is [mode ? "injecting" : "taking blood"]."
to_chat(user, "It is set to transfer [transfer_amount]u of chemicals per cycle.") . += "It is set to transfer [transfer_amount]u of chemicals per cycle."
if(beaker.reagents && beaker.reagents.total_volume) if(beaker.reagents && beaker.reagents.total_volume)
to_chat(user, "<span class='notice'>Attached is \a [beaker] with [beaker.reagents.total_volume] units of liquid.</span>") . += "<span class='notice'>Attached is \a [beaker] with [beaker.reagents.total_volume] units of liquid.</span>"
else else
to_chat(user, "<span class='notice'>Attached is an empty [beaker].</span>") . += "<span class='notice'>Attached is an empty [beaker].</span>"
to_chat(user, "<span class='notice'>[attached ? attached : "No one"] is hooked up to it.</span>") . += "<span class='notice'>[attached ? attached : "No one"] is hooked up to it.</span>"
else else
to_chat(user, "<span class='notice'>There is no vessel.</span>") . += "<span class='notice'>There is no vessel.</span>"
if(tank) if(tank)
if (!is_loosen) if (!is_loosen)
to_chat(user, "\The [tank] connected.") . += "\The [tank] connected."
to_chat(user, "The meter shows [round(tank.air_contents.return_pressure())]. The valve is [valve_opened == TRUE ? "open" : "closed"].") . += "The meter shows [round(tank.air_contents.return_pressure())]. The valve is [valve_opened == TRUE ? "open" : "closed"]."
if (tank.distribute_pressure == 0) if (tank.distribute_pressure == 0)
to_chat(user, "Use wrench to replace tank.") . += "Use wrench to replace tank."
else else
to_chat(user, "<span class='notice'>There is no tank.</span>") . += "<span class='notice'>There is no tank.</span>"
/obj/structure/medical_stand/process() /obj/structure/medical_stand/process()
//Gas Stuff //Gas Stuff

View File

@@ -1,11 +1,7 @@
/obj/machinery/portable_atmospherics/hydroponics /obj/machinery/portable_atmospherics/hydroponics
name = "hydroponics tray" name = "hydroponics tray"
<<<<<<< HEAD
icon = 'icons/obj/hydroponics_machines_vr.dmi' //VOREStation Edit
=======
desc = "A tray usually full of fluid for growing plants." desc = "A tray usually full of fluid for growing plants."
icon = 'icons/obj/hydroponics_machines.dmi' icon = 'icons/obj/hydroponics_machines_vr.dmi' //VOREStation Edit
>>>>>>> 6c6644f... Rewrite examine() to pass a list around (#7038)
icon_state = "hydrotray3" icon_state = "hydrotray3"
density = 1 density = 1
anchored = 1 anchored = 1

View File

@@ -34,9 +34,13 @@ GLOBAL_LIST_EMPTY(unique_deployable)
/obj/item/device/survivalcapsule/examine(mob/user) /obj/item/device/survivalcapsule/examine(mob/user)
. = ..() . = ..()
get_template() if(!template)
to_chat(user, "This capsule has the [template.name] stored.") get_template()
to_chat(user, template.description) 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() /obj/item/device/survivalcapsule/attack_self()
//Can't grab when capsule is New() because templates aren't loaded then //Can't grab when capsule is New() because templates aren't loaded then

View File

@@ -97,7 +97,7 @@
if(!((skip_gear & EXAMINE_SKIPJUMPSUIT) && (skip_body & EXAMINE_SKIPFACE))) if(!((skip_gear & EXAMINE_SKIPJUMPSUIT) && (skip_body & EXAMINE_SKIPFACE)))
//VOREStation Add Start //VOREStation Add Start
if(custom_species) if(custom_species)
msg += ", a <b>[src.custom_species]</b>" name_ender = ", a <b>[src.custom_species]</b>"
else if(looks_synth) else if(looks_synth)
//VOREStation Add End //VOREStation Add End
var/use_gender = "a synthetic" var/use_gender = "a synthetic"
@@ -280,13 +280,20 @@
if(suiciding) if(suiciding)
msg += "<span class='warning'>[T.He] appears to have commited suicide... there is no hope of recovery.</span>" 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 //VOREStation Add
msg += attempt_vr(src,"examine_nutrition",args) //VOREStation Code var/list/vorestrings = list()
msg += attempt_vr(src,"examine_bellies",args) //VOREStation Code vorestrings += examine_weight()
msg += attempt_vr(src,"examine_pickup_size",args) //VOREStation Code vorestrings += examine_nutrition()
msg += attempt_vr(src,"examine_step_size",args) //VOREStation Code vorestrings += examine_bellies()
msg += attempt_vr(src,"examine_nif",args) //VOREStation Code vorestrings += examine_pickup_size()
msg += attempt_vr(src,"examine_chimera",args) //VOREStation Code 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) if(mSmallsize in mutations)
msg += "[T.He] [T.is] very short!" msg += "[T.He] [T.is] very short!"
@@ -314,17 +321,13 @@
if(!key) 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>" 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) else if(!client)
<<<<<<< HEAD msg += "<span class='deadsay'>[T.He] [T.is] [ssd_msg].</span>"
msg += "<span class='deadsay'>[T.He] [T.is] [ssd_msg].</span><br>"
//VOREStation Add Start //VOREStation Add Start
if(client && ((client.inactivity / 10) / 60 > 10)) //10 Minutes 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) 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 //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/wound_flavor_text = list()
var/list/is_bleeding = list() var/list/is_bleeding = list()
@@ -437,21 +440,14 @@
if(flavor_text) if(flavor_text)
msg += "[flavor_text]" msg += "[flavor_text]"
<<<<<<< HEAD
// VOREStation Start // VOREStation Start
if(ooc_notes) 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'>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>"
msg += "<span class='deptradio'><a href='?src=\ref[src];vore_prefs=1'>\[Mechanical Vore Preferences\]</a></span>\n"
// VOREStation End // VOREStation End
msg += "*---------*</span><br>"
msg += applying_pressure
=======
msg += "*---------*</span>" msg += "*---------*</span>"
if(applying_pressure) if(applying_pressure)
msg += applying_pressure msg += applying_pressure
>>>>>>> 6c6644f... Rewrite examine() to pass a list around (#7038)
var/show_descs = show_descriptors_to(user) var/show_descs = show_descriptors_to(user)
if(show_descs) if(show_descs)

View File

@@ -44,25 +44,25 @@
switch(weight_examine) switch(weight_examine)
if(0 to 74) 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) 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) 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) 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) 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) 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) 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) 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) 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 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! return message //Credit to Aronai for helping me actually get this working!
/mob/living/carbon/human/proc/examine_nutrition() /mob/living/carbon/human/proc/examine_nutrition()
@@ -100,23 +100,23 @@
t_His = "Hir" t_His = "Hir"
switch(nutrition_examine) switch(nutrition_examine)
if(0 to 49) 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) 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) if(100 to 499)
return message //Well that's pretty normal, really. return message //Well that's pretty normal, really.
if(500 to 999) // Fat. 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) 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. 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. 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. 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. 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 return message
//For OmniHUD records access for appropriate models //For OmniHUD records access for appropriate models
@@ -145,18 +145,18 @@
/mob/living/carbon/human/proc/examine_pickup_size(mob/living/H) /mob/living/carbon/human/proc/examine_pickup_size(mob/living/H)
var/message = "" var/message = ""
if(istype(H) && (H.get_effective_size() - src.get_effective_size()) >= 0.50) 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 return message
/mob/living/carbon/human/proc/examine_step_size(mob/living/H) /mob/living/carbon/human/proc/examine_step_size(mob/living/H)
var/message = "" var/message = ""
if(istype(H) && (H.get_effective_size() - src.get_effective_size()) >= 0.75) 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 return message
/mob/living/carbon/human/proc/examine_nif(mob/living/carbon/human/H) /mob/living/carbon/human/proc/examine_nif(mob/living/carbon/human/H)
if(nif && nif.examine_msg) //If you have one set, anyway. 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) /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. var/t_He = "It" //capitalised for use at the start of each line.
@@ -189,8 +189,8 @@
t_his = "hir" t_his = "hir"
if(revive_ready == REVIVING_NOW || revive_ready == REVIVING_DONE) if(revive_ready == REVIVING_NOW || revive_ready == REVIVING_DONE)
if(stat == DEAD) 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 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) 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>"

View File

@@ -3,24 +3,17 @@
switch(src.stat) switch(src.stat)
if(CONSCIOUS) 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(!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(UNCONSCIOUS) . += "<span class='warning'>It doesn't seem to be responding.</span>"
if(DEAD) . += "<span class='deadsay'>It looks completely unsalvageable.</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" if(print_flavor_text()) . += "\n[print_flavor_text()]\n"

View File

@@ -179,12 +179,12 @@
flags |= NOBLUDGEON //No more attack messages flags |= NOBLUDGEON //No more attack messages
/obj/item/device/dogborg/tongue/examine(user) /obj/item/device/dogborg/tongue/examine(user)
if(!..(user, 1)) . = ..()
return if(Adjacent(user))
if(water.energy) if(water.energy)
to_chat(user, "<span class='notice'>[src] is wet. Just like it should be.</span>") . += "<span class='notice'>[src] is wet. Just like it should be.</span>"
if(water.energy < 5) if(water.energy < 5)
to_chat(user, "<span class='notice'>[src] is dry.</span>") . += "<span class='notice'>[src] is dry.</span>"
/obj/item/device/dogborg/tongue/attack_self(mob/user) /obj/item/device/dogborg/tongue/attack_self(mob/user)
var/mob/living/silicon/robot.R = user var/mob/living/silicon/robot.R = user

View File

@@ -26,24 +26,17 @@
if(shell) if(shell)
. += "It appears to be an [deployed ? "active" : "empty"] AI shell." . += "It appears to be an [deployed ? "active" : "empty"] AI shell."
else if(!src.client) 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 . += "It appears to be in stand-by mode." //afk
if(UNCONSCIOUS) . += "<span class='warning'>It doesn't seem to be responding.</span>" if(UNCONSCIOUS) . += "<span class='warning'>It doesn't seem to be responding.</span>"
if(DEAD) . += "<span class='deadsay'>It looks completely unsalvageable.</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()]" if(print_flavor_text()) . += "<br>[print_flavor_text()]"

View File

@@ -1,4 +1,3 @@
<<<<<<< HEAD
// Parrots can talk, and may repeat things it hears. // Parrots can talk, and may repeat things it hears.
/mob/living/simple_mob/animal/passive/bird/parrot /mob/living/simple_mob/animal/passive/bird/parrot
name = "parrot" name = "parrot"
@@ -42,11 +41,11 @@
return say(message) return say(message)
// Ugly saycode so parrots can use their headsets. // 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(message_mode)
if(my_headset && istype(my_headset, /obj/item/device/radio)) 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 used_radios += my_headset
// Clicked on while holding an object. // Clicked on while holding an object.
@@ -91,9 +90,9 @@
my_headset = null my_headset = null
/mob/living/simple_mob/animal/passive/bird/parrot/examine(mob/user) /mob/living/simple_mob/animal/passive/bird/parrot/examine(mob/user)
..() . = ..()
if(my_headset) 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() /mob/living/simple_mob/animal/passive/bird/parrot/Initialize()
if(my_headset) if(my_headset)
@@ -110,7 +109,7 @@
icon_rest = "poly-held" icon_rest = "poly-held"
icon_dead = "poly-dead" icon_dead = "poly-dead"
tt_desc = "E Ara macao" 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 say_list_type = /datum/say_list/bird/poly
// Best Bird with best headset. // Best Bird with best headset.
@@ -250,257 +249,4 @@
if(holder.stat || !holder.say_list || !message || speaker == holder) if(holder.stat || !holder.say_list || !message || speaker == holder)
return return
var/datum/say_list/S = holder.say_list 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 S.speak |= message

View File

@@ -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. // 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 /mob/living/simple_mob/slime/xenobio
@@ -74,25 +73,25 @@
..() ..()
/mob/living/simple_mob/slime/xenobio/examine(mob/user) /mob/living/simple_mob/slime/xenobio/examine(mob/user)
..() . = ..()
if(hat) if(hat)
to_chat(user, "It is wearing \a [hat].") . += "It is wearing \a [hat]."
if(stat == DEAD) if(stat == DEAD)
to_chat(user, "It appears to be dead.") . += "It appears to be dead."
else if(incapacitated(INCAPACITATION_DISABLED)) else if(incapacitated(INCAPACITATION_DISABLED))
to_chat(user, "It appears to be incapacitated.") . += "It appears to be incapacitated."
else if(harmless) else if(harmless)
to_chat(user, "It appears to have been pacified.") . += "It appears to have been pacified."
else else
if(has_AI()) if(has_AI())
var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder
if(AI.rabid) 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) else if(AI.obedience >= 5)
to_chat(user, "It looks rather obedient.") . += "It looks rather obedient."
else if(AI.discipline) 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() /mob/living/simple_mob/slime/xenobio/proc/make_adult()
if(is_adult) if(is_adult)
@@ -277,283 +276,3 @@
lines.Add(description_info) lines.Add(description_info)
return lines.Join("\n") 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)

View File

@@ -69,12 +69,11 @@
/mob/living/simple_mob/vore/hostile/morph/examine(mob/user) /mob/living/simple_mob/vore/hostile/morph/examine(mob/user)
if(morphed) if(morphed)
form.examine(user) . = form.examine(user)
if(get_dist(user,src)<=3) if(get_dist(user, src) <= 3)
to_chat(user, "<span class='warning'>It doesn't look quite right...</span>") . += "<span class='warning'>[form] doesn't look quite right...</span>"
else else
..() . = ..()
return
/mob/living/simple_mob/vore/hostile/morph/ShiftClickOn(atom/movable/A) /mob/living/simple_mob/vore/hostile/morph/ShiftClickOn(atom/movable/A)
if(Adjacent(A)) if(Adjacent(A))

View File

@@ -68,15 +68,15 @@
pixel_y = (dir & 3) ? (dir == NORTH ? -y_offset : y_offset) : 0 pixel_y = (dir & 3) ? (dir == NORTH ? -y_offset : y_offset) : 0
/obj/structure/construction/examine(mob/user) /obj/structure/construction/examine(mob/user)
if(!..(user, 2)) . = ..()
return if(get_dist(user, src) <= 2)
switch(stage) switch(stage)
if(FRAME_UNFASTENED) if(FRAME_UNFASTENED)
to_chat(user, "It's an empty frame.") . += "It's an empty frame."
if(FRAME_FASTENED) if(FRAME_FASTENED)
to_chat(user, "It's fixed to the wall.") . += "It's fixed to the wall."
if(FRAME_WIRED) if(FRAME_WIRED)
to_chat(user, "It's wired.") . += "It's wired."
/obj/structure/construction/update_icon() /obj/structure/construction/update_icon()
icon_state = "[base_icon][stage]" icon_state = "[base_icon][stage]"

View File

@@ -89,7 +89,7 @@
/obj/machinery/power/rtg/examine(mob/user) /obj/machinery/power/rtg/examine(mob/user)
. = ..() . = ..()
if(Adjacent(user, src) || isobserver(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) /obj/machinery/power/rtg/attackby(obj/item/I, mob/user, params)
if(default_deconstruction_screwdriver(user, I)) if(default_deconstruction_screwdriver(user, I))

View File

@@ -22,12 +22,12 @@
var/empty_state = "kineticgun_empty" var/empty_state = "kineticgun_empty"
/obj/item/weapon/gun/energy/kinetic_accelerator/examine(mob/user) /obj/item/weapon/gun/energy/kinetic_accelerator/examine(mob/user)
if(..(user, 1)) . = ..()
if(max_mod_capacity) if(Adjacent(user) && max_mod_capacity)
to_chat(user, "<b>[get_remaining_mod_capacity()]%</b> mod capacity remaining.") . += "<b>[get_remaining_mod_capacity()]%</b> mod capacity remaining."
for(var/A in get_modkits()) for(var/A in get_modkits())
var/obj/item/borg/upgrade/modkit/M = A 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>") . += "<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) /obj/item/weapon/gun/energy/kinetic_accelerator/attackby(obj/item/A, mob/user)
if(istype(A, /obj/item/weapon/tool/crowbar)) 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 var/modifier = 1 //For use in any mod kit that has numerical modifiers
/obj/item/borg/upgrade/modkit/examine(mob/user) /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) /obj/item/borg/upgrade/modkit/attackby(obj/item/A, mob/user)
if(istype(A, /obj/item/weapon/gun/energy/kinetic_accelerator) && !issilicon(user)) if(istype(A, /obj/item/weapon/gun/energy/kinetic_accelerator) && !issilicon(user))

View File

@@ -550,24 +550,22 @@ var/global/list/default_infomorph_software = list()
return 1 return 1
/mob/living/silicon/infomorph/examine(mob/user) /mob/living/silicon/infomorph/examine(mob/user)
..(user, infix = ", personal AI") . = ..(user, infix = ", personal AI")
var/msg = ""
switch(src.stat) switch(src.stat)
if(CONSCIOUS) if(CONSCIOUS)
if(!src.client) msg += "\nIt appears to be in stand-by mode." //afk if(!src.client) . += "It appears to be in stand-by mode." //afk
if(UNCONSCIOUS) msg += "\n<span class='warning'>It doesn't seem to be responding.</span>" if(UNCONSCIOUS) . += "<span class='warning'>It doesn't seem to be responding.</span>"
if(DEAD) msg += "\n<span class='deadsay'>It looks completely unsalvageable.</span>" if(DEAD) . += "<span class='deadsay'>It looks completely unsalvageable.</span>"
msg += "\n*---------*" . += "*---------*"
if(print_flavor_text()) msg += "\n[print_flavor_text()]\n" if(print_flavor_text())
. += "[print_flavor_text()]"
if (pose) if (pose)
if( findtext(pose,".",length(pose)) == 0 && findtext(pose,"!",length(pose)) == 0 && findtext(pose,"?",length(pose)) == 0 ) 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. pose = addtext(pose,".") //Makes sure all emotes end with a period.
msg += "\nIt is [pose]" . += "It is [pose]"
to_chat(user,msg)
/mob/living/silicon/infomorph/Life() /mob/living/silicon/infomorph/Life()
//We're dead or EMP'd or something. //We're dead or EMP'd or something.

View File

@@ -54,10 +54,5 @@
/obj/item/weapon/shield_diffuser/examine(mob/user) /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]%" . += "The charge meter reads [cell ? cell.percent() : 0]%"
. += "It is [enabled ? "enabled" : "disabled"]." . += "It is [enabled ? "enabled" : "disabled"]."
>>>>>>> 6c6644f... Rewrite examine() to pass a list around (#7038)

View File

@@ -91,8 +91,4 @@
. = ..() . = ..()
. += "It is [enabled ? "enabled" : "disabled"]." . += "It is [enabled ? "enabled" : "disabled"]."
if(alarm) 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." . += "A red LED labeled \"Proximity Alarm\" is blinking on the control panel."
>>>>>>> 6c6644f... Rewrite examine() to pass a list around (#7038)

View File

@@ -38,8 +38,9 @@
return ..() return ..()
/obj/machinery/computer/telescience/examine(mob/user) /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() /obj/machinery/computer/telescience/Initialize()
. = ..() . = ..()

View File

@@ -207,14 +207,11 @@
return ..() return ..()
/obj/vehicle/train/security/engine/examine(mob/user) /obj/vehicle/train/security/engine/examine(mob/user)
if(!..(user, 1)) . = ..()
return if(Adjacent(user))
. += "The power light is [on ? "on" : "off"]."
if(!istype(usr, /mob/living/carbon/human)) . += "There are[key ? "" : " no"] keys in the ignition."
return . += "The charge meter reads [cell? round(cell.percent(), 0.01) : 0]%"
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]%")
/obj/vehicle/train/security/engine/verb/start_engine() /obj/vehicle/train/security/engine/verb/start_engine()
set name = "Start engine" set name = "Start engine"

View File

@@ -205,14 +205,11 @@
return ..() return ..()
/obj/vehicle/train/rover/engine/examine(mob/user) /obj/vehicle/train/rover/engine/examine(mob/user)
if(!..(user, 1)) . = ..()
return if(Adjacent(user))
. += "The power light is [on ? "on" : "off"]."
if(!istype(usr, /mob/living/carbon/human)) . += "There are[key ? "" : " no"] keys in the ignition."
return . += "The charge meter reads [cell? round(cell.percent(), 0.01) : 0]%"
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]%")
/obj/vehicle/train/rover/engine/verb/start_engine() /obj/vehicle/train/rover/engine/verb/start_engine()
set name = "Start engine" set name = "Start engine"

View File

@@ -764,10 +764,10 @@
set desc = "Switch sharp/fuzzy scaling for current mob." set desc = "Switch sharp/fuzzy scaling for current mob."
appearance_flags ^= PIXEL_SCALE appearance_flags ^= PIXEL_SCALE
/mob/living/examine(mob/user, distance, infix, suffix) /mob/living/examine(mob/user, infix, suffix)
. = ..(user, distance, infix, suffix) . = ..()
if(showvoreprefs) 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 /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"]) if(href_list["vore_prefs"])

View File

@@ -98,13 +98,9 @@
//This can go here with all the references. //This can go here with all the references.
/obj/effect/overlay/aiholo/examine(mob/user) /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. //If you need an ooc_notes copy paste, this is NOT the one to use.
var/ooc_notes = master.ooc_notes var/ooc_notes = master.ooc_notes
if(ooc_notes) if(ooc_notes)
msg += "<span class = 'deptradio'>OOC Notes:</span> <a href='?src=\ref[master];ooc_notes=1'>\[View\]</a>\n" . += "<span class = 'deptradio'>OOC Notes:</span> <a href='?src=\ref[master];ooc_notes=1'>\[View\]</a>"
to_chat(user,msg)

View File

@@ -11,8 +11,9 @@
pixel_y = 0 // Override value from parent. pixel_y = 0 // Override value from parent.
/obj/item/weapon/holder/micro/examine(mob/user) /obj/item/weapon/holder/micro/examine(mob/user)
. = list()
for(var/mob/living/M in contents) for(var/mob/living/M in contents)
M.examine(user) . += M.examine(user)
/obj/item/weapon/holder/MouseDrop(mob/M) /obj/item/weapon/holder/MouseDrop(mob/M)
..() ..()

View File

@@ -49,9 +49,8 @@
to_chat(usr, "<span class='notice'>You set the size to [size_select]%</span>") to_chat(usr, "<span class='notice'>You set the size to [size_select]%</span>")
/obj/item/weapon/gun/energy/sizegun/examine(mob/user) /obj/item/weapon/gun/energy/sizegun/examine(mob/user)
..() . = ..()
var/size_examine = (size_set_to*100) . += "<span class='info'>It is currently set at [size_set_to*100]%</span>"
to_chat(user, "<span class='info'>It is currently set at [size_examine]%</span>")
// //
// Beams for size gun // Beams for size gun