merge master into vore-sprites

This commit is contained in:
TheGreatKitsune
2022-05-08 19:21:09 -05:00
56 changed files with 954 additions and 100 deletions

View File

@@ -40,7 +40,7 @@
#define span_danger(str) ("<span class='danger'>" + str + "</span>") #define span_danger(str) ("<span class='danger'>" + str + "</span>")
#define span_warning(str) ("<span class='warning'>" + str + "</span>") #define span_warning(str) ("<span class='warning'>" + str + "</span>")
#define span_rose(str) ("<span class='rose'>" + str + "</span>") #define span_rose(str) ("<span class='rose'>" + str + "</span>")
#define span_info(str) ("<span class='info'>" + str + "</span>" #define span_info(str) ("<span class='info'>" + str + "</span>")
#define span_notice(str) ("<span class='notice'>" + str + "</span>") #define span_notice(str) ("<span class='notice'>" + str + "</span>")
#define span_alium(str) ("<span class='alium'>" + str + "</span>") #define span_alium(str) ("<span class='alium'>" + str + "</span>")
#define span_cult(str) ("<span class='cult'>" + str + "</span>") #define span_cult(str) ("<span class='cult'>" + str + "</span>")

View File

@@ -111,6 +111,7 @@
#define NO_TALK_MSG 128 // Do not show the "\The [speaker] talks into \the [radio]" message #define NO_TALK_MSG 128 // Do not show the "\The [speaker] talks into \the [radio]" message
#define NO_STUTTER 256 // No stuttering, slurring, or other speech problems #define NO_STUTTER 256 // No stuttering, slurring, or other speech problems
#define ALT_TRANSMIT 512 // Language is not based on vision or sound (Todo: add this into the say code and use it for the rootspeak languages) #define ALT_TRANSMIT 512 // Language is not based on vision or sound (Todo: add this into the say code and use it for the rootspeak languages)
#define INAUDIBLE 1024 // Language is not audible (similar to nonverbal) but is still using hearing-based recognition
#define SKIN_NORMAL 0 #define SKIN_NORMAL 0
#define SKIN_THREAT 1 #define SKIN_THREAT 1

View File

@@ -12,6 +12,7 @@
#define LANGUAGE_SPACER "Spacer" #define LANGUAGE_SPACER "Spacer"
#define LANGUAGE_CLOWNISH "Coulrian" #define LANGUAGE_CLOWNISH "Coulrian"
#define LANGUAGE_TAVAN "Tavan" #define LANGUAGE_TAVAN "Tavan"
#define LANGUAGE_ECHOSONG "Echo Song"
#define LANGUAGE_CHIMPANZEE "Chimpanzee" #define LANGUAGE_CHIMPANZEE "Chimpanzee"
#define LANGUAGE_NEAERA "Neaera" #define LANGUAGE_NEAERA "Neaera"

View File

@@ -24,14 +24,16 @@
/proc/randmutb(var/mob/living/M) /proc/randmutb(var/mob/living/M)
if(!M) return if(!M) return
M.dna.check_integrity() M.dna.check_integrity()
var/block = pick(GLASSESBLOCK,COUGHBLOCK,FAKEBLOCK,NERVOUSBLOCK,CLUMSYBLOCK,TWITCHBLOCK,HEADACHEBLOCK,BLINDBLOCK,DEAFBLOCK,HALLUCINATIONBLOCK) //var/block = pick(GLASSESBLOCK,COUGHBLOCK,FAKEBLOCK,NERVOUSBLOCK,CLUMSYBLOCK,TWITCHBLOCK,HEADACHEBLOCK,BLINDBLOCK,DEAFBLOCK,HALLUCINATIONBLOCK) // Most of these are disabled anyway.
var/block = pick(FAKEBLOCK,CLUMSYBLOCK,BLINDBLOCK,DEAFBLOCK)
M.dna.SetSEState(block, 1) M.dna.SetSEState(block, 1)
// Give Random Good Mutation to M // Give Random Good Mutation to M
/proc/randmutg(var/mob/living/M) /proc/randmutg(var/mob/living/M)
if(!M) return if(!M) return
M.dna.check_integrity() M.dna.check_integrity()
var/block = pick(HULKBLOCK,XRAYBLOCK,FIREBLOCK,TELEBLOCK,NOBREATHBLOCK,REMOTEVIEWBLOCK,REGENERATEBLOCK,INCREASERUNBLOCK,REMOTETALKBLOCK,MORPHBLOCK,BLENDBLOCK,NOPRINTSBLOCK,SHOCKIMMUNITYBLOCK,SMALLSIZEBLOCK) //var/block = pick(HULKBLOCK,XRAYBLOCK,FIREBLOCK,TELEBLOCK,NOBREATHBLOCK,REMOTEVIEWBLOCK,REGENERATEBLOCK,INCREASERUNBLOCK,REMOTETALKBLOCK,MORPHBLOCK,BLENDBLOCK,NOPRINTSBLOCK,SHOCKIMMUNITYBLOCK,SMALLSIZEBLOCK) // Much like above, most of these blocks are disabled in code.
var/block = pick(HULKBLOCK,XRAYBLOCK,FIREBLOCK,TELEBLOCK,REGENERATEBLOCK,REMOTETALKBLOCK)
M.dna.SetSEState(block, 1) M.dna.SetSEState(block, 1)
// Random Appearance Mutation // Random Appearance Mutation

View File

@@ -24,7 +24,7 @@
var/languages=null var/languages=null
var/list/flavor=null var/list/flavor=null
var/gender = null var/gender = null
var/list/body_descriptors = null var/list/body_descriptors = null // Guess we'll keep null.
var/list/genetic_modifiers = list() // Modifiers with the MODIFIER_GENETIC flag are saved. Note that only the type is saved, not an instance. var/list/genetic_modifiers = list() // Modifiers with the MODIFIER_GENETIC flag are saved. Note that only the type is saved, not an instance.
/datum/dna2/record/proc/GetData() /datum/dna2/record/proc/GetData()
@@ -54,7 +54,8 @@
newrecord.implant = implant newrecord.implant = implant
newrecord.flavor = flavor newrecord.flavor = flavor
newrecord.gender = gender newrecord.gender = gender
newrecord.body_descriptors = body_descriptors.Copy() if(body_descriptors)
newrecord.body_descriptors = body_descriptors.Copy()
newrecord.genetic_modifiers = genetic_modifiers.Copy() newrecord.genetic_modifiers = genetic_modifiers.Copy()
return newrecord return newrecord

View File

@@ -107,6 +107,9 @@
/obj/machinery/computer/guestpass/attackby(obj/I, mob/user) /obj/machinery/computer/guestpass/attackby(obj/I, mob/user)
if(istype(I, /obj/item/weapon/card/id/guest))
to_chat(user, "<span class='warning'>The guest pass terminal denies to accept the guest pass.</span>")
return
if(istype(I, /obj/item/weapon/card/id)) if(istype(I, /obj/item/weapon/card/id))
if(!giver && user.unEquip(I)) if(!giver && user.unEquip(I))
I.forceMove(src) I.forceMove(src)

View File

@@ -340,6 +340,11 @@
if("toggle_ringer") if("toggle_ringer")
ringer = !ringer ringer = !ringer
if("set_ringer_tone")
var/ringtone = tgui_input_text(usr, "Set Ringer Tone", "Ringer")
if(ringtone)
ttone = ringtone
if("selfie_mode") if("selfie_mode")
selfie_mode = !selfie_mode selfie_mode = !selfie_mode

View File

@@ -75,6 +75,20 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
// If you turn this on, it changes the way communicator video works. User configurable option. // If you turn this on, it changes the way communicator video works. User configurable option.
var/selfie_mode = FALSE var/selfie_mode = FALSE
// Ringtones! (Based on the PDA ones)
var/ttone = "beep" //The ringtone!
var/list/ttone_sound = list("beep" = 'sound/machines/twobeep.ogg',
"boom" = 'sound/effects/explosionfar.ogg',
"slip" = 'sound/misc/slip.ogg',
"honk" = 'sound/items/bikehorn.ogg',
"SKREE" = 'sound/voice/shriek1.ogg',
// "holy" = 'sound/items/PDA/ambicha4-short.ogg',
"xeno" = 'sound/voice/hiss1.ogg',
"dust" = 'sound/effects/supermatter.ogg',
"spark" = 'sound/effects/sparks4.ogg',
"rad" = 'sound/items/geiger/high1.ogg',
"servo" = 'sound/machines/rig/rigservo.ogg')
// Proc: New() // Proc: New()
// Parameters: None // Parameters: None
// Description: Adds the new communicator to the global list of all communicators, sorts the list, obtains a reference to the Exonet node, then tries to // Description: Adds the new communicator to the global list of all communicators, sorts the list, obtains a reference to the Exonet node, then tries to

View File

@@ -76,9 +76,15 @@
return return
if(ringer) if(ringer)
playsound(src, 'sound/machines/twobeep.ogg', 50, 1) var/S
if(ttone in ttone_sound)
S = ttone_sound[ttone]
else
S = 'sound/machines/twobeep.ogg'
playsound(src, S, 50, 1)
for (var/mob/O in hearers(2, loc)) for (var/mob/O in hearers(2, loc))
O.show_message(text("[bicon(src)] *beep*")) O.show_message(text("[bicon(src)] *[ttone]*"))
alert_called = 1 alert_called = 1
update_icon() update_icon()

View File

@@ -360,3 +360,40 @@ GLOBAL_LIST_BOILERPLATE(all_pai_cards, /obj/item/device/paicard)
var/rendered = "<span class='message'>[msg]</span>" var/rendered = "<span class='message'>[msg]</span>"
pai.show_message(rendered, type) pai.show_message(rendered, type)
..() ..()
// VoreEdit: Living Machine Stuff after this.
// This adds a var and proc for all machines to take a pAI. (The pAI can't control anything, it's just for RP.)
// You need to add usage of the proc to each machine to actually add support. For an example of this, see code\modules\food\kitchen\microwave.dm
/obj/machinery
var/obj/item/device/paicard/paicard = null
/obj/machinery/proc/insertpai(mob/user, obj/item/device/paicard/card)
//var/obj/item/paicard/card = I
var/mob/living/silicon/pai/AI = card.pai
if(paicard)
to_chat(user, span_notice("This bot is already under PAI Control!"))
return
if(!istype(card)) // TODO: Add sleevecard support.
return
if(!card.pai)
to_chat(user, span_notice("This card does not currently have a personality!"))
return
paicard = card
user.unEquip(card)
card.forceMove(src)
AI.client.eye = src
to_chat(AI, span_notice("Your location is [card.loc].")) // DEBUG. TODO: Make unfolding the chassis trigger an eject.
name = AI.name
to_chat(AI, span_notice("You feel a tingle in your circuits as your systems interface with \the [initial(src.name)]."))
/obj/machinery/proc/ejectpai(mob/user)
if(paicard)
var/mob/living/silicon/pai/AI = paicard.pai
paicard.forceMove(src.loc)
AI.client.eye = AI
paicard = null
name = initial(src.name)
to_chat(AI, span_notice("You feel a tad claustrophobic as your mind closes back into your card, ejecting from \the [initial(src.name)]."))
if(user)
to_chat(user, span_notice("You eject the card from \the [initial(src.name)]."))

View File

@@ -0,0 +1,48 @@
/obj/item/selectable_item
name = "selectable item"
desc = "If you find this, you should definitely report this..."
icon = 'icons/obj/items.dmi'
icon_state = "gift1"
var/preface_string = "You are about to select an item. Are you sure you want to use it and select one?"
var/preface_title = "selectable item"
var/selection_string = "Select an item:"
var/selection_title = "Item Selection"
var/list/item_options = list("Gift" = /obj/item/weapon/a_gift,
"Health Analyzer" = /obj/item/device/healthanalyzer)
/obj/item/selectable_item/attack_self(mob/user as mob)
tgui_alert(user, {"[preface_string]"}, preface_title)
var/chosen_item = tgui_input_list(usr, selection_string, selection_title, item_options)
chosen_item = item_options[chosen_item]
if(chosen_item)
user.drop_item()
var/obj/item/result = new chosen_item(get_turf(user))
user.put_in_active_hand(result)
result.add_fingerprint(user)
qdel(src)
return
/obj/item/selectable_item/chemistrykit
icon = 'icons/obj/chemical_vr.dmi'
icon_state = "chemkit"
selection_string = "Select a chemical:"
selection_title = "Chemical Selection"
/obj/item/selectable_item/chemistrykit/size
name = "size chemistry kit"
desc = "A pre-arranged home chemistry kit. This one is for rather specific set of size-altering chemicals."
preface_string = "This kit can be used to create a vial of a size-altering chemical, but there's only enough material for one."
preface_title = "Size Chemistry Kit"
item_options = list("Macrocillin" = /obj/item/weapon/reagent_containers/glass/beaker/vial/macrocillin,
"Microcillin" = /obj/item/weapon/reagent_containers/glass/beaker/vial/microcillin,
"Normalcillin" = /obj/item/weapon/reagent_containers/glass/beaker/vial/normalcillin)
/obj/item/selectable_item/chemistrykit/gender
name = "gender chemistry kit"
desc = "A pre-arranged home chemistry kit. This one is for rather specific set of gender-altering chemicals."
preface_string = "This kit can be used to create a vial of a gender-altering chemical, but there's only enough material for one."
preface_title = "Gender Chemistry Kit"
item_options = list("Androrovir" = /obj/item/weapon/reagent_containers/glass/beaker/vial/androrovir,
"Gynorovir" = /obj/item/weapon/reagent_containers/glass/beaker/vial/gynorovir,
"Androgynorovir" = /obj/item/weapon/reagent_containers/glass/beaker/vial/androgynorovir)

View File

@@ -14,7 +14,7 @@
max_storage_space = INVENTORY_POUCH_SPACE max_storage_space = INVENTORY_POUCH_SPACE
can_hold = null can_hold = null
pocketable = TRUE pocketable = TRUE
var/insert_delay = 0 SECONDS var/insert_delay = 0 SECONDS
var/remove_delay = 2 SECONDS var/remove_delay = 2 SECONDS
@@ -32,7 +32,7 @@
// No delay if you have the pouch in your hands // No delay if you have the pouch in your hands
if(user.get_active_hand() == src || user.get_inactive_hand() == src) if(user.get_active_hand() == src || user.get_inactive_hand() == src)
return TRUE // Skip delay return TRUE // Skip delay
if(remove_delay && !do_after(user, remove_delay, src, needhand = TRUE, exclusive = TASK_USER_EXCLUSIVE)) if(remove_delay && !do_after(user, remove_delay, src, needhand = TRUE, exclusive = TASK_USER_EXCLUSIVE))
return FALSE // Moved while there is a delay return FALSE // Moved while there is a delay
@@ -58,10 +58,10 @@
/obj/item/weapon/storage/pouch/ammo /obj/item/weapon/storage/pouch/ammo
name = "storage pouch (ammo)" name = "storage pouch (ammo)"
desc = "This storage pouch can be used to provide some additional storage for quick access. Can only hold ammunition and cells." desc = "This storage pouch can be used to provide some additional storage for quick access. Can only hold ammunition, cells, explosives, and grenades."
icon_state = "ammo" icon_state = "ammo"
max_storage_space = INVENTORY_POUCH_SPACE max_storage_space = INVENTORY_POUCH_SPACE
can_hold = list(/obj/item/ammo_magazine, /obj/item/ammo_casing, /obj/item/weapon/cell/device/weapon) can_hold = list(/obj/item/ammo_magazine, /obj/item/ammo_casing, /obj/item/weapon/cell/device/weapon, /obj/item/weapon/grenade, /obj/item/weapon/plastique) //Vorestation Add - make it more useful for non-sec/explo
/obj/item/weapon/storage/pouch/eng_tool /obj/item/weapon/storage/pouch/eng_tool
name = "storage pouch (tools)" name = "storage pouch (tools)"
@@ -69,15 +69,35 @@
icon_state = "engineering_tool" icon_state = "engineering_tool"
max_storage_space = INVENTORY_POUCH_SPACE max_storage_space = INVENTORY_POUCH_SPACE
can_hold = list( can_hold = list(
/obj/item/weapon/tool, /obj/item/weapon/tool/crowbar,
/obj/item/weapon/tool/screwdriver,
/obj/item/weapon/weldingtool, /obj/item/weapon/weldingtool,
/obj/item/weapon/tool/wirecutters,
/obj/item/weapon/tool/wrench,
/obj/item/device/multitool, /obj/item/device/multitool,
/obj/item/device/flashlight, /obj/item/device/flashlight,
/obj/item/weapon/cell/device,
/obj/item/stack/cable_coil,
/obj/item/device/t_scanner, /obj/item/device/t_scanner,
/obj/item/device/analyzer, /obj/item/device/analyzer,
/obj/item/clothing/glasses, /obj/item/clothing/glasses,
/obj/item/clothing/gloves, /obj/item/clothing/gloves,
) /obj/item/device/pda,
/obj/item/device/megaphone,
/obj/item/taperoll,
/obj/item/device/radio/headset,
/obj/item/device/robotanalyzer,
/obj/item/weapon/material/minihoe,
/obj/item/weapon/material/knife/machete/hatchet,
/obj/item/device/analyzer/plant_analyzer,
/obj/item/weapon/extinguisher/mini,
/obj/item/weapon/tape_roll,
/obj/item/device/integrated_electronics/wirer,
/obj/item/device/integrated_electronics/debugger,
/obj/item/weapon/shovel/spade,
/obj/item/stack/nanopaste,
/obj/item/device/geiger
) //Vorestation Add - make it the same as the tool-belt why was it not like this to start with wtf
/obj/item/weapon/storage/pouch/eng_supply /obj/item/weapon/storage/pouch/eng_supply
name = "storage pouch (supplies)" name = "storage pouch (supplies)"
@@ -88,15 +108,19 @@
/obj/item/weapon/cell/device, /obj/item/weapon/cell/device,
/obj/item/stack/cable_coil, /obj/item/stack/cable_coil,
/obj/item/taperoll, /obj/item/taperoll,
/obj/item/weapon/extinguisher/mini, /obj/item/weapon/extinguisher,
/obj/item/weapon/tape_roll /obj/item/weapon/tape_roll,
) /obj/item/stack/material/steel,
/obj/item/stack/material/glass,
/obj/item/device/lightreplacer,
/obj/item/weapon/cell
) //Vorestation Add - makes it actually useful lmao, adds sheets and cells as well as light replacers and lets you take any extinguisher that fits
/obj/item/weapon/storage/pouch/eng_parts /obj/item/weapon/storage/pouch/eng_parts
name = "storage pouch (parts)" name = "storage pouch (parts)"
desc = "This storage pouch can be used to provide some additional storage for quick access. Can only hold machinery components." desc = "This storage pouch can be used to provide some additional storage for quick access. Can only hold machinery components."
icon_state = "part_pouch" icon_state = "part_pouch"
max_storage_space = INVENTORY_POUCH_SPACE max_storage_space = INVENTORY_POUCH_SPACE*2 //Vorestation Add - yeah lemme give up my pocket to hold FOUR CAPACITORS or have an inferior box... now you can hold eight in your pocket so its at least a box
can_hold = list( can_hold = list(
/obj/item/weapon/stock_parts, /obj/item/weapon/stock_parts,
/obj/item/stack/cable_coil, /obj/item/stack/cable_coil,
@@ -120,8 +144,20 @@
/obj/item/weapon/storage/pill_bottle, /obj/item/weapon/storage/pill_bottle,
/obj/item/stack/medical, /obj/item/stack/medical,
/obj/item/weapon/reagent_containers/hypospray, /obj/item/weapon/reagent_containers/hypospray,
/obj/item/weapon/storage/quickdraw/syringe_case /obj/item/weapon/storage/quickdraw/syringe_case,
) /obj/item/weapon/syringe_cartridge,
/obj/item/clothing/gloves/sterile,
/obj/item/device/sleevemate,
/obj/item/bodybag,
/obj/item/clothing/mask/surgical,
/obj/item/weapon/soap,
/obj/item/stack/nanopaste,
/obj/item/taperoll/medical,
/obj/item/weapon/storage/box/freezer,
/obj/item/clothing/mask/chewable/candy/lolli,
) //Vorestation add - added a bunch of misc medical stuff
max_storage_space = ITEMSIZE_COST_SMALL*3 //Vorestation Add - makes it slightly smaller since its a lot of stuff with pocket access
remove_delay = 5 //Vorestation Add - .5 second delay, get the medical things faster because there is no reason to use this otherwise. still gotta stop moving to take things out.
/obj/item/weapon/storage/pouch/flares /obj/item/weapon/storage/pouch/flares
name = "storage pouch (flares)" name = "storage pouch (flares)"
@@ -145,7 +181,7 @@
desc = "This storage pouch can be used to provide some additional storage for quick access. Can hold one normal sized weapon." desc = "This storage pouch can be used to provide some additional storage for quick access. Can hold one normal sized weapon."
icon_state = "pistol_holster" icon_state = "pistol_holster"
storage_slots = 1 storage_slots = 1
can_hold = list(/obj/item/weapon/gun) can_hold = list(/obj/item/weapon/gun) //this covers basically everything I think so its fine
remove_delay = 0 remove_delay = 0
/obj/item/weapon/storage/pouch/holster/full_stunrevolver /obj/item/weapon/storage/pouch/holster/full_stunrevolver
starts_with = list(/obj/item/weapon/gun/energy/stunrevolver) starts_with = list(/obj/item/weapon/gun/energy/stunrevolver)
@@ -159,11 +195,11 @@
..() ..()
/obj/item/weapon/storage/pouch/baton /obj/item/weapon/storage/pouch/baton
name = "storage pouch (baton)" name = "storage pouch (melee)"
desc = "This storage pouch can be used to provide some additional storage for quick access. Can hold one standard baton." desc = "This storage pouch can be used to provide some additional storage for quick access. Can hold one normal size melee." //Vorestation add - make it a melee pouch literally why would you hold ONE BATON
icon_state = "baton_holster" icon_state = "baton_holster"
storage_slots = 1 storage_slots = 1
can_hold = list(/obj/item/weapon/melee/baton) can_hold = list(/obj/item/weapon/melee, /obj/item/weapon/material, /obj/item/weapon/tool/wrench) //should be like, every melee weapon I could think of that was normal size. Can make it more specific if needed. Also wrench because I thought it was funny.
remove_delay = 0 remove_delay = 0
/obj/item/weapon/storage/pouch/baton/full /obj/item/weapon/storage/pouch/baton/full
starts_with = list(/obj/item/weapon/melee/baton) starts_with = list(/obj/item/weapon/melee/baton)

View File

@@ -254,7 +254,8 @@
prob(2);/obj/item/weapon/storage/box/syndie_kit/spy, prob(2);/obj/item/weapon/storage/box/syndie_kit/spy,
prob(2);/obj/item/weapon/grenade/anti_photon, prob(2);/obj/item/weapon/grenade/anti_photon,
prob(2);/obj/item/clothing/under/hyperfiber/bluespace, prob(2);/obj/item/clothing/under/hyperfiber/bluespace,
prob(2);/obj/item/weapon/reagent_containers/glass/beaker/vial/amorphorovir, prob(2);/obj/item/selectable_item/chemistrykit/size,
prob(2);/obj/item/selectable_item/chemistrykit/gender,
prob(1);/obj/item/clothing/suit/storage/vest/heavy/merc, prob(1);/obj/item/clothing/suit/storage/vest/heavy/merc,
prob(1);/obj/item/device/nif/bad, prob(1);/obj/item/device/nif/bad,
prob(1);/obj/item/device/radio_jammer, prob(1);/obj/item/device/radio_jammer,

View File

@@ -38,7 +38,7 @@ GLOBAL_LIST_EMPTY(fancy_shuttles)
icon = 'icons/turf/fancy_shuttles/generic_preview.dmi' icon = 'icons/turf/fancy_shuttles/generic_preview.dmi'
icon_state = "floors" icon_state = "floors"
plane = PLATING_PLANE plane = PLATING_PLANE
layer = ABOVE_TURF_LAYER layer = DISPOSAL_LAYER
alpha = 90 alpha = 90
/obj/effect/fancy_shuttle_floor_preview/Initialize() /obj/effect/fancy_shuttle_floor_preview/Initialize()

View File

@@ -74,3 +74,8 @@
display_name = "bluespace bracelet" display_name = "bluespace bracelet"
path = /obj/item/clothing/gloves/bluespace path = /obj/item/clothing/gloves/bluespace
cost = 5 cost = 5
/datum/gear/utility/walkpod
display_name = "podzu music player"
path = /obj/item/device/walkpod
cost = 2

View File

@@ -22,7 +22,7 @@
var/global/list/acceptable_items // List of the items you can put in var/global/list/acceptable_items // List of the items you can put in
var/global/list/available_recipes // List of the recipes you can use var/global/list/available_recipes // List of the recipes you can use
var/global/list/acceptable_reagents // List of the reagents you can put in var/global/list/acceptable_reagents // List of the reagents you can put in
var/global/max_n_of_items = 20 var/global/max_n_of_items = 20
var/appliancetype = MICROWAVE var/appliancetype = MICROWAVE
var/datum/looping_sound/microwave/soundloop var/datum/looping_sound/microwave/soundloop
@@ -36,7 +36,7 @@
/obj/machinery/microwave/Initialize() /obj/machinery/microwave/Initialize()
. = ..() . = ..()
reagents = new/datum/reagents(100) reagents = new/datum/reagents(100)
reagents.my_atom = src reagents.my_atom = src
@@ -47,7 +47,7 @@
for(var/datum/recipe/typepath as anything in subtypesof(/datum/recipe)) for(var/datum/recipe/typepath as anything in subtypesof(/datum/recipe))
if((initial(typepath.appliance) & appliancetype)) if((initial(typepath.appliance) & appliancetype))
available_recipes += new typepath available_recipes += new typepath
acceptable_items = new acceptable_items = new
acceptable_reagents = new acceptable_reagents = new
for (var/datum/recipe/recipe in available_recipes) for (var/datum/recipe/recipe in available_recipes)
@@ -66,6 +66,8 @@
soundloop = new(list(src), FALSE) soundloop = new(list(src), FALSE)
/obj/machinery/microwave/Destroy() /obj/machinery/microwave/Destroy()
if(paicard)
ejectpai() // Lets not delete the pAI.
QDEL_NULL(soundloop) QDEL_NULL(soundloop)
return ..() return ..()
@@ -125,7 +127,8 @@
to_chat(user, "<span class='warning'>It's dirty!</span>") to_chat(user, "<span class='warning'>It's dirty!</span>")
return 1 return 1
else if(is_type_in_list(O,acceptable_items)) else if(is_type_in_list(O,acceptable_items))
if(contents.len>=(max_n_of_items + component_parts.len + circuit_item_capacity)) //Adds component_parts to the maximum number of items. changed 1 to actually just be the circuit item capacity var. var/list/workingList = cookingContents()
if(workingList.len>=(max_n_of_items + circuit_item_capacity)) //Adds component_parts to the maximum number of items. changed 1 to actually just be the circuit item capacity var.
to_chat(user, "<span class='warning'>This [src] is full of ingredients, you cannot put more.</span>") to_chat(user, "<span class='warning'>This [src] is full of ingredients, you cannot put more.</span>")
return 1 return 1
if(istype(O, /obj/item/stack) && O:get_amount() > 1) // This is bad, but I can't think of how to change it if(istype(O, /obj/item/stack) && O:get_amount() > 1) // This is bad, but I can't think of how to change it
@@ -180,6 +183,9 @@
to_chat(user, "<span class='notice'>You decide not to do that.</span>") to_chat(user, "<span class='notice'>You decide not to do that.</span>")
else if(default_part_replacement(user, O)) else if(default_part_replacement(user, O))
return return
else if(istype(O, /obj/item/device/paicard))
if(!paicard)
insertpai(user, O)
else else
to_chat(user, "<span class='warning'>You have no idea what you can cook with this [O].</span>") to_chat(user, "<span class='warning'>You have no idea what you can cook with this [O].</span>")
..() ..()
@@ -192,6 +198,10 @@
attack_hand(user) attack_hand(user)
/obj/machinery/microwave/attack_hand(mob/user as mob) /obj/machinery/microwave/attack_hand(mob/user as mob)
if(user.a_intent == I_GRAB)
if(paicard)
ejectpai(user)
return
user.set_machine(src) user.set_machine(src)
tgui_interact(user) tgui_interact(user)
@@ -211,7 +221,7 @@
data["operating"] = operating data["operating"] = operating
data["dirty"] = dirty == 100 data["dirty"] = dirty == 100
data["items"] = get_items_list() data["items"] = get_items_list()
return data return data
/obj/machinery/microwave/proc/get_items_list() /obj/machinery/microwave/proc/get_items_list()
@@ -220,7 +230,8 @@
var/list/items_counts = list() var/list/items_counts = list()
var/list/items_measures = list() var/list/items_measures = list()
var/list/items_measures_p = list() var/list/items_measures_p = list()
for(var/obj/O in ((contents - component_parts) - circuit)) //for(var/obj/O in ((contents - component_parts) - circuit))
for(var/obj/O in cookingContents())
var/display_name = O.name var/display_name = O.name
if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/egg)) if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/egg))
items_measures[display_name] = "egg" items_measures[display_name] = "egg"
@@ -283,7 +294,7 @@
if("dispose") if("dispose")
dispose() dispose()
return TRUE return TRUE
/* /*
/obj/machinery/microwave/interact(mob/user as mob) // The microwave Menu /obj/machinery/microwave/interact(mob/user as mob) // The microwave Menu
var/dat = "" var/dat = ""
if(src.broken > 0) if(src.broken > 0)
@@ -352,7 +363,7 @@
if(stat & (NOPOWER|BROKEN)) if(stat & (NOPOWER|BROKEN))
return return
start() start()
if(reagents.total_volume==0 && !(locate(/obj) in ((contents - component_parts) - circuit))) //dry run if(reagents.total_volume==0 && !(locate(/obj) in cookingContents())) //dry run
if(!wzhzhzh(16)) //VOREStation Edit - Quicker Microwaves (Undone during Auroraport, left note in case of reversion, was 5) if(!wzhzhzh(16)) //VOREStation Edit - Quicker Microwaves (Undone during Auroraport, left note in case of reversion, was 5)
abort() abort()
return return
@@ -387,7 +398,7 @@
cooked = fail() cooked = fail()
cooked.forceMove(src.loc) cooked.forceMove(src.loc)
return return
//Making multiple copies of a recipe //Making multiple copies of a recipe
var/halftime = round(recipe.time*4/10/2) // VOREStation Edit - Quicker Microwaves (Undone during Auroraport, left note in case of reversion, was round(recipe.time/20/2)) var/halftime = round(recipe.time*4/10/2) // VOREStation Edit - Quicker Microwaves (Undone during Auroraport, left note in case of reversion, was round(recipe.time/20/2))
if(!wzhzhzh(halftime)) if(!wzhzhzh(halftime))
@@ -448,7 +459,7 @@
/obj/machinery/microwave/proc/has_extra_item() //- coded to have different microwaves be able to handle different items /obj/machinery/microwave/proc/has_extra_item() //- coded to have different microwaves be able to handle different items
if(item_level == 0) if(item_level == 0)
for (var/obj/O in ((contents - component_parts) - circuit)) for (var/obj/O in cookingContents())
if ( \ if ( \
!istype(O,/obj/item/weapon/reagent_containers/food) && \ !istype(O,/obj/item/weapon/reagent_containers/food) && \
!istype(O, /obj/item/weapon/grown) \ !istype(O, /obj/item/weapon/grown) \
@@ -456,7 +467,7 @@
return 1 return 1
return 0 return 0
if(item_level == 1) if(item_level == 1)
for (var/obj/O in ((contents - component_parts) - circuit)) for (var/obj/O in cookingContents())
if ( \ if ( \
!istype(O, /obj/item/weapon/reagent_containers/food) && \ !istype(O, /obj/item/weapon/reagent_containers/food) && \
!istype(O, /obj/item/weapon/grown) && \ !istype(O, /obj/item/weapon/grown) && \
@@ -480,7 +491,7 @@
icon_state = "mw" icon_state = "mw"
SStgui.update_uis(src) SStgui.update_uis(src)
soundloop.stop() soundloop.stop()
/obj/machinery/microwave/proc/stop() /obj/machinery/microwave/proc/stop()
playsound(src.loc, 'sound/machines/ding.ogg', 50, 1) playsound(src.loc, 'sound/machines/ding.ogg', 50, 1)
operating = FALSE // Turn it off again aferwards operating = FALSE // Turn it off again aferwards
@@ -490,7 +501,7 @@
soundloop.stop() soundloop.stop()
/obj/machinery/microwave/proc/dispose(var/message = 1) /obj/machinery/microwave/proc/dispose(var/message = 1)
for (var/atom/movable/A in ((contents-component_parts)-circuit)) for (var/atom/movable/A in cookingContents())
A.forceMove(loc) A.forceMove(loc)
if (src.reagents.total_volume) if (src.reagents.total_volume)
src.dirty++ src.dirty++
@@ -524,11 +535,12 @@
src.operating = 0 // Turn it off again aferwards src.operating = 0 // Turn it off again aferwards
SStgui.update_uis(src) SStgui.update_uis(src)
soundloop.stop() soundloop.stop()
src.ejectpai() // If it broke, time to yeet the PAI.
/obj/machinery/microwave/proc/fail() /obj/machinery/microwave/proc/fail()
var/obj/item/weapon/reagent_containers/food/snacks/badrecipe/ffuu = new(src) var/obj/item/weapon/reagent_containers/food/snacks/badrecipe/ffuu = new(src)
var/amount = 0 var/amount = 0
for (var/obj/O in (((contents - ffuu) - component_parts) - circuit)) for (var/obj/O in cookingContents())
amount++ amount++
if(O.reagents) if(O.reagents)
var/id = O.reagents.get_master_reagent_id() var/id = O.reagents.get_master_reagent_id()
@@ -555,14 +567,14 @@
if(!do_after(usr, 1 SECONDS, target = src)) if(!do_after(usr, 1 SECONDS, target = src))
return return
if(operating) if(operating)
to_chat(usr, "<span class='warning'>You can't do that, [src] door is locked!</span>") to_chat(usr, "<span class='warning'>You can't do that, [src] door is locked!</span>")
return return
usr.visible_message( usr.visible_message(
"<span class='notice'>[usr] opened [src] and has taken out [english_list(((contents-component_parts)-circuit))].</span>" , "<span class='notice'>[usr] opened [src] and has taken out [english_list(cookingContents())].</span>" ,
"<span class='notice'>You have opened [src] and taken out [english_list(((contents-component_parts)-circuit))].</span>" "<span class='notice'>You have opened [src] and taken out [english_list(cookingContents())].</span>"
) )
dispose() dispose()
@@ -591,7 +603,7 @@
/obj/item/weapon/holder /obj/item/weapon/holder
) )
result = /obj/effect/decal/cleanable/blood/gibs result = /obj/effect/decal/cleanable/blood/gibs
/datum/recipe/splat/before_cook(obj/container) /datum/recipe/splat/before_cook(obj/container)
if(istype(container, /obj/machinery/microwave)) if(istype(container, /obj/machinery/microwave))
var/obj/machinery/microwave/M = container var/obj/machinery/microwave/M = container
@@ -614,3 +626,14 @@
var/obj/machinery/microwave/M = container var/obj/machinery/microwave/M = container
M.muck_finish() M.muck_finish()
. = ..() . = ..()
/obj/machinery/microwave/proc/cookingContents() //VOREEdit, this is a better way to deal with the contents of a microwave, since the previous method is stupid.
var/list/workingList = contents.Copy() // Using the copy proc because otherwise the two lists seem to become soul bonded.
workingList -= component_parts
workingList -= circuit
if(paicard)
workingList -= paicard
for(var/M in workingList)
if(istype(M, circuit)) // Yes, we remove circuit twice. Yes, it's necessary. Yes, it's stupid.
workingList -= M
return workingList

View File

@@ -263,15 +263,28 @@
/obj/item/integrated_circuit/output/video_camera /obj/item/integrated_circuit/output/video_camera
name = "video camera circuit" name = "video camera circuit"
desc = "This small camera allows a remote viewer to see what it sees." desc = "This small camera allows a remote viewer to see what it sees."
extended_desc = "The camera is linked to the Research camera network." var/list/networks = list(
"research" = NETWORK_CIRCUITS,
"engine" = NETWORK_ENGINE,
"engineering" = NETWORK_ENGINEERING,
"mining" = NETWORK_MINE,
"medical" = NETWORK_MEDICAL,
"entertainment" = NETWORK_THUNDER,
"security" = NETWORK_SECURITY,
"command" = NETWORK_COMMAND
)
icon_state = "video_camera" icon_state = "video_camera"
w_class = ITEMSIZE_SMALL w_class = ITEMSIZE_SMALL
complexity = 10 complexity = 10
inputs = list( inputs = list(
"camera name" = IC_PINTYPE_STRING, "camera name" = IC_PINTYPE_STRING,
"camera network" = IC_PINTYPE_STRING,
"camera active" = IC_PINTYPE_BOOLEAN "camera active" = IC_PINTYPE_BOOLEAN
) )
inputs_default = list("1" = "video camera circuit") inputs_default = list(
"1" = "video camera circuit",
"2" = "research"
)
outputs = list() outputs = list()
activators = list() activators = list()
spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH
@@ -280,6 +293,11 @@
/obj/item/integrated_circuit/output/video_camera/New() /obj/item/integrated_circuit/output/video_camera/New()
..() ..()
extended_desc = list()
extended_desc += "Network choices are; "
extended_desc += jointext(networks, ", ")
extended_desc += "."
extended_desc = jointext(extended_desc, null)
camera = new(src) camera = new(src)
on_data_written() on_data_written()
@@ -298,10 +316,20 @@
/obj/item/integrated_circuit/output/video_camera/on_data_written() /obj/item/integrated_circuit/output/video_camera/on_data_written()
if(camera) if(camera)
var/cam_name = get_pin_data(IC_INPUT, 1) var/cam_name = get_pin_data(IC_INPUT, 1)
var/cam_active = get_pin_data(IC_INPUT, 2) var/cam_network = get_pin_data(IC_INPUT, 2)
var/cam_active = get_pin_data(IC_INPUT, 3)
if(!isnull(cam_name)) if(!isnull(cam_name))
camera.c_tag = cam_name camera.c_tag = cam_name
camera.replace_networks(list(cam_network))
set_camera_status(cam_active) set_camera_status(cam_active)
if(isnull(cam_network))
camera.clear_all_networks()
return
var/selected_network = networks[cam_network]
if(!selected_network)
camera.clear_all_networks()
return
camera.replace_networks(list(selected_network))
/obj/item/integrated_circuit/output/video_camera/power_fail() /obj/item/integrated_circuit/output/video_camera/power_fail()
if(camera) if(camera)

View File

@@ -13,7 +13,7 @@
hardness = 5 hardness = 5
/datum/material/cloth/generate_recipes() /datum/material/cloth/generate_recipes() //Vorestation Add - adding some funny cool storage pouches to this so botany can do things other than food
recipes = list( recipes = list(
new /datum/stack_recipe("woven net", /obj/item/weapon/material/fishing_net, 10, time = 30 SECONDS, pass_stack_color = TRUE, supplied_material = "[name]"), new /datum/stack_recipe("woven net", /obj/item/weapon/material/fishing_net, 10, time = 30 SECONDS, pass_stack_color = TRUE, supplied_material = "[name]"),
new /datum/stack_recipe("bedsheet", /obj/item/weapon/bedsheet, 10, time = 30 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"), new /datum/stack_recipe("bedsheet", /obj/item/weapon/bedsheet, 10, time = 30 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
@@ -29,6 +29,13 @@
new /datum/stack_recipe("scarf", /obj/item/clothing/accessory/scarf/white, 4, time = 5 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"), new /datum/stack_recipe("scarf", /obj/item/clothing/accessory/scarf/white, 4, time = 5 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("baggy pants", /obj/item/clothing/under/pants/baggy/white, 8, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"), new /datum/stack_recipe("baggy pants", /obj/item/clothing/under/pants/baggy/white, 8, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("belt pouch", /obj/item/weapon/storage/belt/fannypack/white, 25, time = 1 MINUTE, pass_stack_color = TRUE, recycle_material = "[name]"), new /datum/stack_recipe("belt pouch", /obj/item/weapon/storage/belt/fannypack/white, 25, time = 1 MINUTE, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("pouch, small", /obj/item/weapon/storage/pouch/small, 10, time = 20 SECONDS, pass_stack_color = FALSE, recycle_material = "[name]"), //vorestation Add
new /datum/stack_recipe("pouch, ammo", /obj/item/weapon/storage/pouch/ammo, 10, time = 20 SECONDS, pass_stack_color = FALSE, recycle_material = "[name]"), //vorestation Add
new /datum/stack_recipe("pouch, tools", /obj/item/weapon/storage/pouch/eng_tool, 10, time = 20 SECONDS, pass_stack_color = FALSE, recycle_material = "[name]"), //vorestation Add
new /datum/stack_recipe("pouch, parts", /obj/item/weapon/storage/pouch/eng_parts, 10, time = 20 SECONDS, pass_stack_color = FALSE, recycle_material = "[name]"), //vorestation Add
new /datum/stack_recipe("pouch, supplies", /obj/item/weapon/storage/pouch/eng_supply, 10, time = 20 SECONDS, pass_stack_color = FALSE, recycle_material = "[name]"), //vorestation Add
new /datum/stack_recipe("pouch, medical", /obj/item/weapon/storage/pouch/medical, 10, time = 20 SECONDS, pass_stack_color = FALSE, recycle_material = "[name]"), //vorestation Add
new /datum/stack_recipe("pouch, flare", /obj/item/weapon/storage/pouch/flares, 10, time = 20 SECONDS, pass_stack_color = FALSE, recycle_material = "[name]"), //vorestation Add
new /datum/stack_recipe("crude bandage", /obj/item/stack/medical/crude_pack, 1, time = 2 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"), new /datum/stack_recipe("crude bandage", /obj/item/stack/medical/crude_pack, 1, time = 2 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("empty sandbag", /obj/item/stack/emptysandbag, 2, time = 2 SECONDS, pass_stack_color = TRUE, supplied_material = "[name]"), new /datum/stack_recipe("empty sandbag", /obj/item/stack/emptysandbag, 2, time = 2 SECONDS, pass_stack_color = TRUE, supplied_material = "[name]"),
new /datum/stack_recipe("painting canvas (11x11)", /obj/item/canvas, 2, time = 2 SECONDS, pass_stack_color = FALSE, supplied_material = "[name]"), new /datum/stack_recipe("painting canvas (11x11)", /obj/item/canvas, 2, time = 2 SECONDS, pass_stack_color = FALSE, supplied_material = "[name]"),

View File

@@ -27,6 +27,10 @@
new /datum/stack_recipe("scarf", /obj/item/clothing/accessory/scarf/white, 4, time = 5 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"), new /datum/stack_recipe("scarf", /obj/item/clothing/accessory/scarf/white, 4, time = 5 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("baggy pants", /obj/item/clothing/under/pants/baggy/white, 8, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"), new /datum/stack_recipe("baggy pants", /obj/item/clothing/under/pants/baggy/white, 8, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("belt pouch", /obj/item/weapon/storage/belt/fannypack/white, 25, time = 1 MINUTE, pass_stack_color = TRUE, recycle_material = "[name]"), new /datum/stack_recipe("belt pouch", /obj/item/weapon/storage/belt/fannypack/white, 25, time = 1 MINUTE, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("pouch, medium", /obj/item/weapon/storage/pouch, 10, time = 20 SECONDS, pass_stack_color = FALSE, recycle_material = "[name]"), //vorestation Add
new /datum/stack_recipe("pouch, large", /obj/item/weapon/storage/pouch/large, 15, time = 30 SECONDS, pass_stack_color = FALSE, recycle_material = "[name]"), //vorestation Add
new /datum/stack_recipe("pouch, holster", /obj/item/weapon/storage/pouch/holster, 10, time = 20 SECONDS, pass_stack_color = FALSE, recycle_material = "[name]"), //vorestation Add
new /datum/stack_recipe("pouch, melee", /obj/item/weapon/storage/pouch/baton, 10, time = 20 SECONDS, pass_stack_color = FALSE, recycle_material = "[name]"), //vorestation Add
new /datum/stack_recipe("crude [display_name] bandage", /obj/item/stack/medical/crude_pack, 1, time = 2 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"), new /datum/stack_recipe("crude [display_name] bandage", /obj/item/stack/medical/crude_pack, 1, time = 2 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("[display_name] net", /obj/item/weapon/material/fishing_net, 10, time = 5 SECONDS, supplied_material = "[name]", pass_stack_color = TRUE), new /datum/stack_recipe("[display_name] net", /obj/item/weapon/material/fishing_net, 10, time = 5 SECONDS, supplied_material = "[name]", pass_stack_color = TRUE),
new /datum/stack_recipe("[display_name] ring", /obj/item/clothing/gloves/ring/material, 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE), new /datum/stack_recipe("[display_name] ring", /obj/item/clothing/gloves/ring/material, 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE),

View File

@@ -73,6 +73,13 @@
new /datum/stack_recipe("scarf", /obj/item/clothing/accessory/scarf/white/craftable, 4, time = 5 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"), new /datum/stack_recipe("scarf", /obj/item/clothing/accessory/scarf/white/craftable, 4, time = 5 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("baggy pants", /obj/item/clothing/under/pants/baggy/white/craftable, 8, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"), new /datum/stack_recipe("baggy pants", /obj/item/clothing/under/pants/baggy/white/craftable, 8, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("belt pouch", /obj/item/weapon/storage/belt/fannypack/white/craftable, 25, time = 1 MINUTE, pass_stack_color = TRUE, recycle_material = "[name]"), new /datum/stack_recipe("belt pouch", /obj/item/weapon/storage/belt/fannypack/white/craftable, 25, time = 1 MINUTE, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("pouch, small", /obj/item/weapon/storage/pouch/small, 10, time = 20 SECONDS, pass_stack_color = FALSE, recycle_material = "[name]"), //vorestation Add
new /datum/stack_recipe("pouch, ammo", /obj/item/weapon/storage/pouch/ammo, 10, time = 20 SECONDS, pass_stack_color = FALSE, recycle_material = "[name]"), //vorestation Add
new /datum/stack_recipe("pouch, tools", /obj/item/weapon/storage/pouch/eng_tool, 10, time = 20 SECONDS, pass_stack_color = FALSE, recycle_material = "[name]"), //vorestation Add
new /datum/stack_recipe("pouch, parts", /obj/item/weapon/storage/pouch/eng_parts, 10, time = 20 SECONDS, pass_stack_color = FALSE, recycle_material = "[name]"), //vorestation Add
new /datum/stack_recipe("pouch, supplies", /obj/item/weapon/storage/pouch/eng_supply, 10, time = 20 SECONDS, pass_stack_color = FALSE, recycle_material = "[name]"), //vorestation Add
new /datum/stack_recipe("pouch, medical", /obj/item/weapon/storage/pouch/medical, 10, time = 20 SECONDS, pass_stack_color = FALSE, recycle_material = "[name]"), //vorestation Add
new /datum/stack_recipe("pouch, flare", /obj/item/weapon/storage/pouch/flares, 10, time = 20 SECONDS, pass_stack_color = FALSE, recycle_material = "[name]"), //vorestation Add
new /datum/stack_recipe("crude bandage", /obj/item/stack/medical/crude_pack, 1, time = 2 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"), new /datum/stack_recipe("crude bandage", /obj/item/stack/medical/crude_pack, 1, time = 2 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("empty sandbag", /obj/item/stack/emptysandbag, 2, time = 2 SECONDS, pass_stack_color = TRUE, supplied_material = "[name]"), new /datum/stack_recipe("empty sandbag", /obj/item/stack/emptysandbag, 2, time = 2 SECONDS, pass_stack_color = TRUE, supplied_material = "[name]"),
new /datum/stack_recipe("satchel", /obj/item/weapon/storage/backpack/satchel/craftable, 30, time = 1 MINUTE, pass_stack_color = TRUE, recycle_material = "[name]"), new /datum/stack_recipe("satchel", /obj/item/weapon/storage/backpack/satchel/craftable, 30, time = 1 MINUTE, pass_stack_color = TRUE, recycle_material = "[name]"),

View File

@@ -230,7 +230,7 @@
desc = "A modified design of a proto-kinetic crusher, it is still little more of a combination of various mining tools cobbled together \ desc = "A modified design of a proto-kinetic crusher, it is still little more of a combination of various mining tools cobbled together \
and kit-bashed into a high-tech cleaver on a stick - with a handguard and a goliath hide grip. While it is still of little use to any \ and kit-bashed into a high-tech cleaver on a stick - with a handguard and a goliath hide grip. While it is still of little use to any \
but the most skilled and/or suicidal miners against local fauna, it's an elegant weapon for a more civilized hunter." but the most skilled and/or suicidal miners against local fauna, it's an elegant weapon for a more civilized hunter."
look gary there i am look gary there i am
- hatterhat - hatterhat
*/ */
@@ -256,6 +256,9 @@
backstab_bonus = 40 // 100 backstab_bonus = 40 // 100
thrown_bonus = 20 // 120 thrown_bonus = 20 // 120
update_item_state = FALSE update_item_state = FALSE
slot_flags = SLOT_BELT
/obj/item/weapon/kinetic_crusher/machete/gauntlets /obj/item/weapon/kinetic_crusher/machete/gauntlets
@@ -275,6 +278,7 @@
detonation_damage = 37 // 75 detonation_damage = 37 // 75
backstab_bonus = 55 // 130 backstab_bonus = 55 // 130
var/obj/item/offhand/crushergauntlets/offhand var/obj/item/offhand/crushergauntlets/offhand
slot_flags = null
/obj/item/weapon/kinetic_crusher/machete/gauntlets/equipped() /obj/item/weapon/kinetic_crusher/machete/gauntlets/equipped()
. = ..() . = ..()
@@ -381,6 +385,7 @@
thrown_bonus = 50 // 135 but you drop your knife because you threw it thrown_bonus = 50 // 135 but you drop your knife because you threw it
//destablizing force //destablizing force
/obj/item/projectile/destabilizer /obj/item/projectile/destabilizer
name = "destabilizing force" name = "destabilizing force"

View File

@@ -27,11 +27,14 @@
if(always_stars) if(always_stars)
piece = stars(piece) piece = stars(piece)
else if(!say_understands(speaker, SP.speaking)) else if(!say_understands(speaker, SP.speaking))
piece = saypiece_scramble(SP) if(SP.speaking.flags & INAUDIBLE)
if(isliving(speaker)) piece = ""
var/mob/living/S = speaker else
if(istype(S.say_list) && length(S.say_list.speak)) piece = saypiece_scramble(SP)
piece = pick(S.say_list.speak) if(isliving(speaker))
var/mob/living/S = speaker
if(istype(S.say_list) && length(S.say_list.speak))
piece = pick(S.say_list.speak)
raw_msg += (piece + " ") raw_msg += (piece + " ")
@@ -226,13 +229,13 @@
final_message = "[time][final_message]" final_message = "[time][final_message]"
to_chat(src, final_message) to_chat(src, final_message)
/mob/proc/hear_signlang(var/message, var/verb = "gestures", var/datum/language/language, var/mob/speaker = null) /mob/proc/hear_signlang(var/message, var/verb = "gestures", var/verb_understood = "gestures", var/datum/language/language, var/mob/speaker = null, var/speech_type = 1)
if(!client) if(!client)
return return
if(say_understands(speaker, language)) if(say_understands(speaker, language))
message = "<B>[speaker]</B> [verb], \"[message]\"" message = "<B>[speaker]</B> [verb_understood], \"[message]\""
else else if(!(language.ignore_adverb))
var/adverb var/adverb
var/length = length(message) * pick(0.8, 0.9, 1.0, 1.1, 1.2) //Adds a little bit of fuzziness var/length = length(message) * pick(0.8, 0.9, 1.0, 1.1, 1.2) //Adds a little bit of fuzziness
switch(length) switch(length)
@@ -242,8 +245,10 @@
if(48 to 90) adverb = " a lengthy message" if(48 to 90) adverb = " a lengthy message"
else adverb = " a very lengthy message" else adverb = " a very lengthy message"
message = "<B>[speaker]</B> [verb][adverb]." message = "<B>[speaker]</B> [verb][adverb]."
else
message = "<B>[speaker]</B> [verb]."
show_message(message, type = 1) // Type 1 is visual message show_message(message, type = speech_type) // Type 1 is visual message
/mob/proc/hear_sleep(var/message) /mob/proc/hear_sleep(var/message)
var/heard = "" var/heard = ""

View File

@@ -145,8 +145,9 @@
// which is exactly what sign language does. // which is exactly what sign language does.
/datum/language/sign/broadcast(var/mob/living/speaker, var/message, var/speaker_mask) /datum/language/sign/broadcast(var/mob/living/speaker, var/message, var/speaker_mask)
log_say("(SIGN) [message]", speaker) log_say("(SIGN) [message]", speaker)
speaker.say_signlang(message, pick(signlang_verb), src) var/verb_to_use = pick(signlang_verb)
speaker.say_signlang(message, verb_to_use, verb_to_use, src)
// Silly language for those times when you try to talk a languague you normally can't // Silly language for those times when you try to talk a languague you normally can't
/datum/language/gibberish /datum/language/gibberish

View File

@@ -12,6 +12,7 @@
var/exclaim_verb = "exclaims" // Used when sentence ends in a ! var/exclaim_verb = "exclaims" // Used when sentence ends in a !
var/whisper_verb // Optional. When not specified speech_verb + quietly/softly is used instead. var/whisper_verb // Optional. When not specified speech_verb + quietly/softly is used instead.
var/signlang_verb = list("signs", "gestures") // list of emotes that might be displayed if this language has NONVERBAL or SIGNLANG flags var/signlang_verb = list("signs", "gestures") // list of emotes that might be displayed if this language has NONVERBAL or SIGNLANG flags
var/signlang_verb_understood = list("signs") // snowflake bs, used only for echo
var/colour = "body" // CSS style to use for strings in this language. var/colour = "body" // CSS style to use for strings in this language.
var/key = "x" // Character used to speak in language eg. :o for Unathi. var/key = "x" // Character used to speak in language eg. :o for Unathi.
var/flags = 0 // Various language flags. var/flags = 0 // Various language flags.
@@ -20,6 +21,7 @@
var/list/space_chance = 55 // Likelihood of getting a space in the random scramble string var/list/space_chance = 55 // Likelihood of getting a space in the random scramble string
var/machine_understands = 1 // Whether machines can parse and understand this language var/machine_understands = 1 // Whether machines can parse and understand this language
var/list/partial_understanding // List of languages that can /somehwat/ understand it, format is: name = chance of understanding a word var/list/partial_understanding // List of languages that can /somehwat/ understand it, format is: name = chance of understanding a word
var/ignore_adverb = FALSE // For inaudible languages that we dont want adverb for
/datum/language/proc/get_random_name(var/gender, name_count=2, syllable_count=4, syllable_divisor=2) /datum/language/proc/get_random_name(var/gender, name_count=2, syllable_count=4, syllable_divisor=2)
if(!syllables || !syllables.len) if(!syllables || !syllables.len)
@@ -235,7 +237,7 @@
//TBD //TBD
/mob/proc/check_lang_data() /mob/proc/check_lang_data()
. = "" . = ""
for(var/datum/language/L in languages) for(var/datum/language/L in languages)
if(!(L.flags & NONGLOBAL)) if(!(L.flags & NONGLOBAL))
. += "<b>[L.name] ([get_language_prefix()][L.key])</b><br/>[L.desc]<br/><br/>" . += "<b>[L.name] ([get_language_prefix()][L.key])</b><br/>[L.desc]<br/><br/>"

View File

@@ -96,7 +96,8 @@
/datum/language/tajsign/broadcast(var/mob/living/speaker, var/message, var/speaker_mask) /datum/language/tajsign/broadcast(var/mob/living/speaker, var/message, var/speaker_mask)
log_say("(SIGN) [message]", speaker) log_say("(SIGN) [message]", speaker)
speaker.say_signlang(message, pick(signlang_verb), src) var/verb_to_use = pick(signlang_verb)
speaker.say_signlang(message, verb_to_use, verb_to_use, src)
/datum/language/tajsign/can_speak_special(var/mob/speaker) // TODO: If ever we make external organs assist languages, convert this over to the new format /datum/language/tajsign/can_speak_special(var/mob/speaker) // TODO: If ever we make external organs assist languages, convert this over to the new format
var/list/allowed_species = list(SPECIES_TAJ, SPECIES_TESHARI) // Need a tail and ears and such to use this. var/list/allowed_species = list(SPECIES_TAJ, SPECIES_TESHARI) // Need a tail and ears and such to use this.

View File

@@ -167,7 +167,24 @@
exclaim_verb = "squeaks loudly" exclaim_verb = "squeaks loudly"
syllables = list ("sque", "uik", "squeak", "squee", "eak", "eek", "uek", "squik", syllables = list ("sque", "uik", "squeak", "squee", "eak", "eek", "uek", "squik",
"squeek", "sq", "squee", "ee", "ek", "ak", "ueak", "squea") "squeek", "sq", "squee", "ee", "ek", "ak", "ueak", "squea")
colour = "tavan" colour = "tavan"
/datum/language/echosong
name = LANGUAGE_ECHOSONG
desc = "An ultrasound-based language, inaudible to those unable to understand it."
key = "U"
signlang_verb = list("opens their mouth soundlessly", "mouthes something silently")
signlang_verb_understood = list("squeaks")
colour = "echosong"
flags = INAUDIBLE
ignore_adverb = TRUE
/datum/language/echosong/scramble(var/input, var/list/known_languages)
return stars(input)
/datum/language/echosong/broadcast(var/mob/living/speaker, var/message, var/speaker_mask)
log_say("(INAUDIBLE) [message]", speaker)
speaker.say_signlang(format_message(message), pick(signlang_verb), pick(signlang_verb_understood), src, 2)
/datum/language/unathi /datum/language/unathi
flags = 0 flags = 0

View File

@@ -17,7 +17,7 @@
var/emagged = 0 var/emagged = 0
var/light_strength = 3 var/light_strength = 3
var/busy = 0 var/busy = 0
var/obj/item/device/paicard/paicard = null
var/obj/access_scanner = null var/obj/access_scanner = null
var/list/req_access = list() var/list/req_access = list()
var/list/req_one_access = list() var/list/req_one_access = list()
@@ -73,10 +73,27 @@
SetStunned(0) SetStunned(0)
SetParalysis(0) SetParalysis(0)
if(on && !client && !busy) if(on && !client && !busy && !paicard)
spawn(0) spawn(0)
handleAI() handleAI()
/*
/mob/living/bot/examine(mob/user)
. = ..()
if(health < maxHealth)
if(health > maxHealth/3)
. += "[src]'s parts look loose."
else
. += "[src]'s parts look very loose!"
else
. += "[src] is in pristine condition."
. += span_notice("Its maintenance panel is [open ? "open" : "closed"].")
. += span_info("You can use a <b>screwdriver</b> to [open ? "close" : "open"] it.")
. += span_notice("Its control panel is [locked ? "locked" : "unlocked"].")
if(paicard)
. += span_notice("It has a pAI device installed.")
if(open)
. += span_info("You can use a <b>crowbar</b> to remove it.")
*/
/mob/living/bot/updatehealth() /mob/living/bot/updatehealth()
if(status_flags & GODMODE) if(status_flags & GODMODE)
health = getMaxHealth() health = getMaxHealth()
@@ -139,6 +156,17 @@
qdel(O) qdel(O)
else else
to_chat(user, "<span class='notice'>Unable to repair with the maintenance panel closed.</span>") to_chat(user, "<span class='notice'>Unable to repair with the maintenance panel closed.</span>")
else if(istype(O, /obj/item/device/paicard))
if(open)
insertpai(user, O)
to_chat(user, span_notice("You slot the card into \the [initial(src.name)]."))
else
to_chat(user, span_notice("You must open the panel first!"))
else if(O.is_crowbar())
if(open && paicard)
to_chat(user, span_notice("You are attempting to remove the pAI.."))
if(do_after(user,10 * O.toolspeed))
ejectpai(user)
else else
..() ..()
@@ -212,6 +240,13 @@
if(LAZYLEN(can_go)) if(LAZYLEN(can_go))
if(step_towards(src, pick(can_go))) if(step_towards(src, pick(can_go)))
return return
for(var/mob in loc)
if(istype(mob, /mob/living/bot) && mob != src) // Same as above, but we also don't want to have bots ontop of bots. Cleanbots shouldn't stack >:(
var/turf/my_turf = get_turf(src)
var/list/can_go = my_turf.CardinalTurfsWithAccess(botcard)
if(LAZYLEN(can_go))
if(step_towards(src, pick(can_go)))
return
handleIdle() handleIdle()
/mob/living/bot/proc/handleRegular() /mob/living/bot/proc/handleRegular()
@@ -367,9 +402,14 @@
update_icons() update_icons()
/mob/living/bot/proc/explode() /mob/living/bot/proc/explode()
if(paicard)
ejectpai()
release_vore_contents()
qdel(src) qdel(src)
/mob/living/bot/is_sentient() /mob/living/bot/is_sentient()
if(paicard)
return TRUE
return FALSE return FALSE
/******************************************************************/ /******************************************************************/
@@ -458,3 +498,68 @@
/mob/living/bot/isSynthetic() //Robots are synthetic, no? /mob/living/bot/isSynthetic() //Robots are synthetic, no?
return 1 return 1
/mob/living/bot/proc/insertpai(mob/user, obj/item/device/paicard/card)
//var/obj/item/paicard/card = I
var/mob/living/silicon/pai/AI = card.pai
if(paicard)
to_chat(user, span_notice("This bot is already under PAI Control!"))
return
if(!istype(card)) // TODO: Add sleevecard support.
return
if(client)
to_chat(user, span_notice("Higher levels of processing are already present!"))
return
if(!card.pai)
to_chat(user, span_notice("This card does not currently have a personality!"))
return
paicard = card
user.unEquip(card)
card.forceMove(src)
src.ckey = AI.ckey
name = AI.name
ooc_notes = AI.ooc_notes
to_chat(src, span_notice("You feel a tingle in your circuits as your systems interface with \the [initial(src.name)]."))
if(AI.idcard.access)
botcard.access |= AI.idcard.access
/mob/living/bot/proc/ejectpai(mob/user)
if(paicard)
var/mob/living/silicon/pai/AI = paicard.pai
AI.ckey = src.ckey
AI.ooc_notes = ooc_notes
paicard.forceMove(src.loc)
paicard = null
name = initial(name)
botcard.access = botcard_access.Copy()
to_chat(AI, span_notice("You feel a tad claustrophobic as your mind closes back into your card, ejecting from \the [initial(src.name)]."))
if(user)
to_chat(user, span_notice("You eject the card from \the [initial(src.name)]."))
/mob/living/bot/verb/bot_nom(var/mob/living/T in oview(1))
set name = "Bot Nom"
set category = "Bot Commands"
set desc = "Allows you to eat someone. Yum."
if (stat != CONSCIOUS)
return
return feed_grabbed_to_self(src,T)
/mob/living/bot/verb/ejectself()
set name = "Eject pAI"
set category = "Bot Commands"
set desc = "Eject your card, return to smole."
return ejectpai()
/mob/living/bot/Login()
no_vore = FALSE // ROBOT VORE
init_vore() // ROBOT VORE
verbs |= /mob/living/proc/insidePanel
/mob/living/bot/Logout()
no_vore = TRUE // ROBOT VORE
release_vore_contents()
init_vore() // ROBOT VORE
verbs -= /mob/living/proc/insidePanel

View File

@@ -141,8 +141,8 @@
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(3, 1, src) s.set_up(3, 1, src)
s.start() s.start()
qdel(src) //qdel(src)
return return ..()
/mob/living/bot/cleanbot/update_icons() /mob/living/bot/cleanbot/update_icons()
if(busy) if(busy)

View File

@@ -49,7 +49,7 @@
s.start() s.start()
new /obj/effect/decal/cleanable/blood/oil(Tsec) new /obj/effect/decal/cleanable/blood/oil(Tsec)
qdel(src) return ..()
/mob/living/bot/secbot/ed209/handleRangedTarget() /mob/living/bot/secbot/ed209/handleRangedTarget()
RangedAttack(target) RangedAttack(target)

View File

@@ -68,8 +68,8 @@
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(3, 1, src) s.set_up(3, 1, src)
s.start() s.start()
qdel(src) //qdel(src)
return return ..()
/mob/living/bot/cleanbot/edCLN/tgui_data(mob/user) /mob/living/bot/cleanbot/edCLN/tgui_data(mob/user)
var/list/data = ..() var/list/data = ..()

View File

@@ -286,8 +286,8 @@
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(3, 1, src) s.set_up(3, 1, src)
s.start() s.start()
qdel(src) //qdel(src)
return return ..()
/mob/living/bot/farmbot/confirmTarget(var/atom/targ) /mob/living/bot/farmbot/confirmTarget(var/atom/targ)

View File

@@ -42,7 +42,7 @@
data["on"] = on data["on"] = on
data["open"] = open data["open"] = open
data["locked"] = locked data["locked"] = locked
data["vocal"] = vocal data["vocal"] = vocal
data["amount"] = amount data["amount"] = amount
@@ -75,7 +75,7 @@
/mob/living/bot/floorbot/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state) /mob/living/bot/floorbot/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state)
if(..()) if(..())
return TRUE return TRUE
add_fingerprint(src) add_fingerprint(src)
switch(action) switch(action)
@@ -85,7 +85,7 @@
else else
turn_on() turn_on()
. = TRUE . = TRUE
if(locked && !issilicon(usr)) if(locked && !issilicon(usr))
return return
@@ -302,7 +302,8 @@
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(3, 1, src) s.set_up(3, 1, src)
s.start() s.start()
qdel(src) //qdel(src)
return ..()
/mob/living/bot/floorbot/proc/addTiles(var/am) /mob/living/bot/floorbot/proc/addTiles(var/am)
amount += am amount += am

View File

@@ -269,10 +269,10 @@
/mob/living/bot/medbot/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state) /mob/living/bot/medbot/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state)
if(..()) if(..())
return TRUE return TRUE
usr.set_machine(src) usr.set_machine(src)
add_fingerprint(usr) add_fingerprint(usr)
. = TRUE . = TRUE
switch(action) switch(action)
if("power") if("power")
@@ -349,8 +349,8 @@
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(3, 1, src) s.set_up(3, 1, src)
s.start() s.start()
qdel(src) //qdel(src)
return return ..()
/mob/living/bot/medbot/handleRegular() /mob/living/bot/medbot/handleRegular()
. = ..() . = ..()

View File

@@ -129,7 +129,7 @@
/mob/living/bot/secbot/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state) /mob/living/bot/secbot/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state)
if(..()) if(..())
return return
add_fingerprint(usr) add_fingerprint(usr)
switch(action) switch(action)
@@ -380,7 +380,8 @@
s.start() s.start()
new /obj/effect/decal/cleanable/blood/oil(Tsec) new /obj/effect/decal/cleanable/blood/oil(Tsec)
qdel(src) //qdel(src)
return ..()
/mob/living/bot/secbot/proc/target_name(mob/living/T) /mob/living/bot/secbot/proc/target_name(mob/living/T)
if(ishuman(T)) if(ishuman(T))

View File

@@ -532,3 +532,13 @@
/datum/trait/neutral/submit_to_prey/apply(var/datum/species/S,var/mob/living/carbon/human/H) /datum/trait/neutral/submit_to_prey/apply(var/datum/species/S,var/mob/living/carbon/human/H)
..(S,H) ..(S,H)
H.verbs |= /mob/living/proc/lend_prey_control H.verbs |= /mob/living/proc/lend_prey_control
/datum/trait/neutral/vertical_nom
name = "Vertical Nom"
desc = "Allows you to consume people from up above."
cost = 0
custom_only = FALSE
/datum/trait/neutral/vertical_nom/apply(var/datum/species/S,var/mob/living/carbon/human/H)
..(S,H)
H.verbs |= /mob/living/proc/vertical_nom

View File

@@ -79,14 +79,21 @@
return 1 return 1
/mob/living/verb/succumb() /mob/living/verb/succumb()
set hidden = 1 set name = "Succumb to death"
// if ((src.health < 0 && src.health > (5-src.getMaxHealth()))) // Health below Zero but above 5-away-from-death, as before, but variable set category = "IC"
if (src.health < 0 && stat != DEAD) set desc = "Press this button if you are in crit and wish to die. Use this sparingly (ending a scene, no medical, etc.)"
var/confirm1 = tgui_alert(usr, "Pressing this button will kill you instantenously! Are you sure you wish to proceed?", "Confirm wish to succumb", list("No","Yes"))
var/confirm2 = "No"
if(confirm1 == "Yes")
confirm2 = tgui_alert(usr, "Pressing this buttom will really kill you, no going back", "Are you sure?", list("Yes", "No")) //Swapped answers to protect from accidental double clicks.
if (src.health < 0 && stat != DEAD && confirm1 == "Yes" && confirm2 == "Yes") // Checking both confirm1 and confirm2 for good measure. I don't trust TGUI.
src.death() src.death()
to_chat(src, "<font color='blue'>You have given up life and succumbed to death.</font>") to_chat(src, "<font color='blue'>You have given up life and succumbed to death.</font>")
else else
if(stat == DEAD) if(stat == DEAD)
to_chat(src, "<font color='blue'>As much as you'd like, you can't die when already dead</font>") to_chat(src, "<font color='blue'>As much as you'd like, you can't die when already dead</font>")
else if(confirm1 == "No" || confirm2 == "No")
to_chat(src, "<font color='blue'>You chose to live another day.</font>")
else else
to_chat(src, "<font color='blue'>You are not injured enough to succumb to death!</font>") to_chat(src, "<font color='blue'>You are not injured enough to succumb to death!</font>")

View File

@@ -300,7 +300,7 @@ var/list/channel_to_radio_key = new
//Handle nonverbal languages here //Handle nonverbal languages here
for(var/datum/multilingual_say_piece/S in message_pieces) for(var/datum/multilingual_say_piece/S in message_pieces)
if(S.speaking.flags & NONVERBAL) if((S.speaking.flags & NONVERBAL) || (S.speaking.flags & INAUDIBLE))
custom_emote(1, "[pick(S.speaking.signlang_verb)].") custom_emote(1, "[pick(S.speaking.signlang_verb)].")
//These will contain the main receivers of the message //These will contain the main receivers of the message
@@ -407,21 +407,33 @@ var/list/channel_to_radio_key = new
log_say(message, src) log_say(message, src)
return 1 return 1
/mob/living/proc/say_signlang(var/message, var/verb="gestures", var/datum/language/language) /mob/living/proc/say_signlang(var/message, var/verb="gestures", var/verb_understood="gestures", var/datum/language/language, var/type = 1)
var/turf/T = get_turf(src) var/turf/T = get_turf(src)
//We're in something, gesture to people inside the same thing //We're in something, gesture to people inside the same thing
if(loc != T) if(loc != T)
for(var/mob/M in loc) for(var/mob/M in loc)
M.hear_signlang(message, verb, language, src) M.hear_signlang(message, verb, verb_understood, language, src, type)
//We're on a turf, gesture to visible as if we were a normal language //We're on a turf, gesture to visible as if we were a normal language
else else
var/low_range = FALSE
if(T && type == 2) // type 2 is audible signlang. yes. sue me.
//Air is too thin to carry sound at all, contact speech only
var/datum/gas_mixture/environment = T.return_air()
var/pressure = environment ? environment.return_pressure() : 0
if(pressure < SOUND_MINIMUM_PRESSURE)
low_range = TRUE
var/list/potentials = get_mobs_and_objs_in_view_fast(T, world.view) var/list/potentials = get_mobs_and_objs_in_view_fast(T, world.view)
var/list/mobs = potentials["mobs"] var/list/mobs = potentials["mobs"]
for(var/mob/M as anything in mobs) for(var/mob/M as anything in mobs)
M.hear_signlang(message, verb, language, src) if(low_range && !(M in range(1, src)))
continue
M.hear_signlang(message, verb, verb_understood, language, src, type)
var/list/objs = potentials["objs"] var/list/objs = potentials["objs"]
for(var/obj/O as anything in objs) for(var/obj/O as anything in objs)
if(low_range && !(O in range(1, src)))
continue
O.hear_signlang(message, verb, language, src) O.hear_signlang(message, verb, language, src)
return 1 return 1

View File

@@ -247,6 +247,9 @@
last_special = world.time + 100 last_special = world.time + 100
if(istype(card.loc, /obj/machinery)) // VOREStation edit, this statement allows pAIs stuck in a machine to eject themselves.
var/obj/machinery/M = card.loc
M.ejectpai()
//I'm not sure how much of this is necessary, but I would rather avoid issues. //I'm not sure how much of this is necessary, but I would rather avoid issues.
if(istype(card.loc,/obj/item/rig_module)) if(istype(card.loc,/obj/item/rig_module))
to_chat(src, "There is no room to unfold inside this rig module. You're good and stuck.") to_chat(src, "There is no room to unfold inside this rig module. You're good and stuck.")

View File

@@ -4,6 +4,7 @@
real_name = "cockroach" real_name = "cockroach"
desc = "This station is just crawling with bugs." desc = "This station is just crawling with bugs."
tt_desc = "E Blattella germanica" tt_desc = "E Blattella germanica"
icon = 'icons/mob/animal_vr.dmi'
icon_state = "cockroach" icon_state = "cockroach"
item_state = "cockroach" item_state = "cockroach"
icon_living = "cockroach" icon_living = "cockroach"

View File

@@ -135,6 +135,13 @@
extra_overlay = "naga_markings" extra_overlay = "naga_markings"
//icon_sprite_tag = "naga2c" //icon_sprite_tag = "naga2c"
/datum/sprite_accessory/tail/taur/naga/alt_2c
name = "Naga alt style dual-color (Taur)"
suit_sprites = 'icons/mob/taursuits_naga_alt_vr.dmi'
icon_state = "altnaga_s"
extra_overlay = "altnaga_markings"
//icon_sprite_tag = "altnaga2c"
/datum/sprite_accessory/tail/taur/horse /datum/sprite_accessory/tail/taur/horse
name = "Horse (Taur)" name = "Horse (Taur)"
icon_state = "horse_s" icon_state = "horse_s"

View File

@@ -249,7 +249,7 @@
// There are a few things that will make us want to ignore all other languages in - namely, HIVEMIND languages. // There are a few things that will make us want to ignore all other languages in - namely, HIVEMIND languages.
var/datum/language/L = current[1] var/datum/language/L = current[1]
if(L && (L.flags & HIVEMIND || L.flags & SIGNLANG)) if(L && (L.flags & HIVEMIND || L.flags & SIGNLANG || L.flags & INAUDIBLE))
return new /datum/multilingual_say_piece(L, trim(sanitize(strip_prefixes(message)))) return new /datum/multilingual_say_piece(L, trim(sanitize(strip_prefixes(message))))
if(i + 1 > length(prefix_locations)) // We are out of lookaheads, that means the rest of the message is in cur lang if(i + 1 > length(prefix_locations)) // We are out of lookaheads, that means the rest of the message is in cur lang

View File

@@ -9,10 +9,12 @@
switch(network) switch(network)
if(NETWORK_THUNDER) if(NETWORK_THUNDER)
return 0 return 0
if(NETWORK_ENGINE,NETWORK_ALARM_ATMOS,NETWORK_ALARM_FIRE,NETWORK_ALARM_POWER) if(NETWORK_ENGINE,NETWORK_ENGINEERING,NETWORK_ALARM_ATMOS,NETWORK_ALARM_FIRE,NETWORK_ALARM_POWER)
return access_engine return access_engine
if(NETWORK_CIRCUITS) if(NETWORK_CIRCUITS)
return access_research return access_research
if(NETWORK_MINE)
return access_qm
if(NETWORK_ERT) if(NETWORK_ERT)
return access_cent_specops return access_cent_specops
//VOREStation Add Start //VOREStation Add Start

View File

@@ -384,5 +384,6 @@
/obj/item/device/toner /obj/item/device/toner
name = "toner cartridge" name = "toner cartridge"
icon = 'icons/obj/device.dmi'
icon_state = "tonercartridge" icon_state = "tonercartridge"
var/toner_amount = 30 var/toner_amount = 30

View File

@@ -53,6 +53,30 @@
name = "vial (amorphorovir)" name = "vial (amorphorovir)"
prefill = list("amorphorovir" = 1) prefill = list("amorphorovir" = 1)
/obj/item/weapon/reagent_containers/glass/beaker/vial/androrovir
name = "vial (androrovir)"
prefill = list("androrovir" = 1)
/obj/item/weapon/reagent_containers/glass/beaker/vial/gynorovir
name = "vial (gynorovir)"
prefill = list("gynorovir" = 1)
/obj/item/weapon/reagent_containers/glass/beaker/vial/androgynorovir
name = "vial (androgynorovir)"
prefill = list("androgynorovir" = 1)
/obj/item/weapon/reagent_containers/glass/beaker/vial/macrocillin
name = "vial (macrocillin)"
prefill = list("macrocillin" = 1)
/obj/item/weapon/reagent_containers/glass/beaker/vial/microcillin
name = "vial (microcillin)"
prefill = list("microcillin" = 1)
/obj/item/weapon/reagent_containers/glass/beaker/vial/normalcillin
name = "vial (normalcillin)"
prefill = list("normalcillin" = 1)
/obj/item/weapon/reagent_containers/glass/beaker/vial/supermatter /obj/item/weapon/reagent_containers/glass/beaker/vial/supermatter
name = "vial (supermatter)" name = "vial (supermatter)"
desc = "A glass vial containing the extremely dangerous results of grinding a shard of supermatter down to a fine powder." desc = "A glass vial containing the extremely dangerous results of grinding a shard of supermatter down to a fine powder."

View File

@@ -157,7 +157,7 @@ h1.alert, h2.alert {color: #000000;}
.skrell {color: #00B0B3;} .skrell {color: #00B0B3;}
.skrellfar {color: #70FCFF;} .skrellfar {color: #70FCFF;}
.soghun {color: #50BA6C;} .soghun {color: #50BA6C;}
.solcom {color: #22228B;} .solcom {color: #3333CE;} /* VOREStation Edit */
.changeling {color: #800080;} .changeling {color: #800080;}
.sergal {color: #0077FF;} .sergal {color: #0077FF;}
.birdsongc {color: #CC9900;} .birdsongc {color: #CC9900;}

View File

@@ -0,0 +1,47 @@
/mob/living/proc/vertical_nom()
set name = "Nom from Above"
set desc = "Allows you to eat people who are below your tile or adjacent one. Requires passability."
set category = "Abilities"
if(stat == DEAD || paralysis || weakened || stunned)
to_chat(src, "<span class='notice'>You cannot do that while in your current state.</span>")
return
if(!(src.vore_selected))
to_chat(src, "<span class='notice'>No selected belly found.</span>")
return
var/list/targets = list()
for(var/turf/T in range(1, src))
if(isopenspace(T))
while(isopenspace(T))
T = GetBelow(T)
if(T)
for(var/mob/living/L in T)
if(L.devourable && L.can_be_drop_prey)
targets += L
if(!(targets.len))
to_chat(src, "<span class='notice'>No eligible targets found.</span>")
return
var/mob/living/target = tgui_input_list(src, "Please select a target.", "Victim", targets)
if(!target)
return
to_chat(target, "<span class='warning'>You feel yourself being pulled up by something... Or someone?!</span>")
var/starting_loc = target.loc
if(do_after(src, 50))
if(target.loc != starting_loc)
to_chat(target, "<span class='warning'>You have interrupted whatever that was...</span>")
to_chat(src, "<span class='notice'>They got away.</span>")
return
if(target.buckled)
target.buckled.unbuckle_mob()
target.visible_message("<span class='warning'>\The [target] suddenly disappears somewhere above!</span>",\
"<span class='danger'>You are dragged above and feel yourself slipping directly into \the [src]'s [vore_selected]!</span>")
to_chat(src, "<span class='notice'>You successfully snatch \the [target], slipping them into your [vore_selected].</span>")
target.forceMove(src.vore_selected)

View File

@@ -105,6 +105,7 @@ h1.alert, h2.alert {color: #000000;}
.sergal {color: #0077FF;} .sergal {color: #0077FF;}
.birdsongc {color: #CC9900;} .birdsongc {color: #CC9900;}
.vulpkanin {color: #B97A57;} .vulpkanin {color: #B97A57;}
.echosong {color: #826D8C;}
.enochian {color: #848A33; letter-spacing:-1pt; word-spacing:4pt; font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif;} .enochian {color: #848A33; letter-spacing:-1pt; word-spacing:4pt; font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif;}
.daemon {color: #5E339E; letter-spacing:-1pt; word-spacing:0pt; font-family: "Courier New", Courier, monospace;} .daemon {color: #5E339E; letter-spacing:-1pt; word-spacing:0pt; font-family: "Courier New", Courier, monospace;}
.bug {color: #9e9e39;} .bug {color: #9e9e39;}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 150 KiB

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@@ -16081,6 +16081,20 @@
/obj/item/device/multitool, /obj/item/device/multitool,
/turf/simulated/floor/plating, /turf/simulated/floor/plating,
/area/storage/tech) /area/storage/tech)
<<<<<<< HEAD
=======
"cbU" = (
/obj/machinery/atmospherics/pipe/simple/hidden{
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/hidden/fuel{
dir = 8
},
/turf/simulated/wall/fancy_shuttle{
fancy_shuttle_tag = "secbus"
},
/area/shuttle/securiship/engines)
>>>>>>> 4ccd512332... Merge pull request #12923 from KillianKirilenko/kk-shipfixes
"cbY" = ( "cbY" = (
/obj/machinery/atmospherics/unary/vent_pump/on{ /obj/machinery/atmospherics/unary/vent_pump/on{
dir = 4 dir = 4
@@ -16729,6 +16743,20 @@
}, },
/turf/simulated/floor/tiled, /turf/simulated/floor/tiled,
/area/ai_monitored/storage/eva) /area/ai_monitored/storage/eva)
<<<<<<< HEAD
=======
"cDU" = (
/obj/machinery/atmospherics/pipe/simple/hidden{
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/hidden/fuel{
dir = 8
},
/turf/simulated/wall/fancy_shuttle{
fancy_shuttle_tag = "medbus"
},
/area/shuttle/medivac/engines)
>>>>>>> 4ccd512332... Merge pull request #12923 from KillianKirilenko/kk-shipfixes
"cEE" = ( "cEE" = (
/turf/simulated/wall/r_wall, /turf/simulated/wall/r_wall,
/area/bridge/secondary/teleporter) /area/bridge/secondary/teleporter)
@@ -17560,6 +17588,25 @@
/obj/random/tool, /obj/random/tool,
/turf/simulated/floor, /turf/simulated/floor,
/area/storage/tech) /area/storage/tech)
<<<<<<< HEAD
=======
"doW" = (
/obj/machinery/atmospherics/pipe/simple/hidden{
dir = 8
},
/obj/structure/cable{
d1 = 4;
d2 = 8;
icon_state = "4-8"
},
/obj/effect/floor_decal/fancy_shuttle{
fancy_shuttle_tag = "medbus";
name = "medbus"
},
/obj/machinery/atmospherics/pipe/simple/hidden/fuel,
/turf/simulated/floor/tiled,
/area/shuttle/medivac/engines)
>>>>>>> 4ccd512332... Merge pull request #12923 from KillianKirilenko/kk-shipfixes
"dqh" = ( "dqh" = (
/obj/machinery/embedded_controller/radio/airlock/docking_port{ /obj/machinery/embedded_controller/radio/airlock/docking_port{
dir = 8; dir = 8;
@@ -18088,6 +18135,29 @@
/obj/structure/closet/secure_closet/pilot, /obj/structure/closet/secure_closet/pilot,
/turf/simulated/floor/tiled, /turf/simulated/floor/tiled,
/area/tether/exploration/pilot_office) /area/tether/exploration/pilot_office)
<<<<<<< HEAD
=======
"dRZ" = (
/obj/machinery/power/terminal{
dir = 4
},
/obj/structure/cable/green{
d2 = 8;
icon_state = "0-8"
},
/obj/structure/table/standard,
/obj/item/weapon/tank/phoron,
/obj/random/medical,
/obj/effect/floor_decal/fancy_shuttle{
fancy_shuttle_tag = "medbus";
name = "medbus"
},
/obj/machinery/atmospherics/pipe/simple/hidden/fuel{
dir = 10
},
/turf/simulated/floor/tiled,
/area/shuttle/medivac/engines)
>>>>>>> 4ccd512332... Merge pull request #12923 from KillianKirilenko/kk-shipfixes
"dSp" = ( "dSp" = (
/turf/simulated/wall, /turf/simulated/wall,
/area/mine/explored/upper_level) /area/mine/explored/upper_level)
@@ -18972,6 +19042,7 @@
/obj/structure/grille, /obj/structure/grille,
/obj/machinery/door/firedoor/glass, /obj/machinery/door/firedoor/glass,
/obj/structure/window/reinforced/full, /obj/structure/window/reinforced/full,
<<<<<<< HEAD
/obj/structure/window/reinforced, /obj/structure/window/reinforced,
/obj/machinery/door/blast/regular{ /obj/machinery/door/blast/regular{
density = 0; density = 0;
@@ -18980,6 +19051,16 @@
id = "medivac blast"; id = "medivac blast";
name = "Shuttle Blast Doors"; name = "Shuttle Blast Doors";
opacity = 0 opacity = 0
=======
/obj/structure/window/reinforced{
dir = 1
},
/turf/simulated/floor/plating,
/area/tether/station/dock_two)
"eVl" = (
/obj/machinery/atmospherics/pipe/simple/hidden/fuel{
dir = 6
>>>>>>> 4ccd512332... Merge pull request #12923 from KillianKirilenko/kk-shipfixes
}, },
<<<<<<< HEAD <<<<<<< HEAD
/turf/simulated/floor/plating/eris/under, /turf/simulated/floor/plating/eris/under,
@@ -21605,10 +21686,12 @@
/area/maintenance/substation/cargo) /area/maintenance/substation/cargo)
"hsf" = ( "hsf" = (
/obj/machinery/shipsensors/fancy_shuttle, /obj/machinery/shipsensors/fancy_shuttle,
/turf/simulated/wall/fancy_shuttle{ /turf/simulated/wall/fancy_shuttle/nondense{
fancy_shuttle_tag = "secbus" fancy_shuttle_tag = "secbus";
nitrogen = 0;
oxygen = 0
}, },
/area/shuttle/securiship/cockpit) /area/shuttle/securiship/general)
"hsq" = ( "hsq" = (
/obj/structure/catwalk, /obj/structure/catwalk,
/obj/random/junk, /obj/random/junk,
@@ -24773,6 +24856,22 @@
fancy_shuttle_tag = "explo" fancy_shuttle_tag = "explo"
}, },
/area/shuttle/excursion/cargo) /area/shuttle/excursion/cargo)
<<<<<<< HEAD
=======
"kiN" = (
/obj/structure/fuel_port{
pixel_y = 32
},
/obj/effect/floor_decal/fancy_shuttle{
fancy_shuttle_tag = "medbus";
name = "medbus"
},
/obj/machinery/atmospherics/pipe/manifold/hidden/fuel{
dir = 1
},
/turf/simulated/floor/tiled,
/area/shuttle/medivac/engines)
>>>>>>> 4ccd512332... Merge pull request #12923 from KillianKirilenko/kk-shipfixes
"kjA" = ( "kjA" = (
/obj/structure/cable{ /obj/structure/cable{
d1 = 4; d1 = 4;
@@ -26107,6 +26206,17 @@
/obj/effect/floor_decal/corner/paleblue/border, /obj/effect/floor_decal/corner/paleblue/border,
/turf/simulated/floor/tiled/white, /turf/simulated/floor/tiled/white,
/area/tether/station/dock_two) /area/tether/station/dock_two)
<<<<<<< HEAD
=======
"lof" = (
/obj/machinery/atmospherics/pipe/simple/hidden/fuel{
dir = 8
},
/turf/simulated/wall/fancy_shuttle{
fancy_shuttle_tag = "medbus"
},
/area/shuttle/medivac/engines)
>>>>>>> 4ccd512332... Merge pull request #12923 from KillianKirilenko/kk-shipfixes
"loz" = ( "loz" = (
/obj/effect/floor_decal/borderfloor{ /obj/effect/floor_decal/borderfloor{
dir = 4 dir = 4
@@ -27934,7 +28044,11 @@
}, },
/turf/simulated/floor/tiled, /turf/simulated/floor/tiled,
/area/tether/station/dock_one) /area/tether/station/dock_one)
<<<<<<< HEAD
"mIR" = ( "mIR" = (
=======
"mIV" = (
>>>>>>> 4ccd512332... Merge pull request #12923 from KillianKirilenko/kk-shipfixes
/obj/structure/cable/green{ /obj/structure/cable/green{
dir = 1; dir = 1;
icon_state = "1-2" icon_state = "1-2"
@@ -27945,8 +28059,16 @@
dir = 8; dir = 8;
pixel_x = 0 pixel_x = 0
}, },
<<<<<<< HEAD
/turf/simulated/floor/tiled/eris/techmaint_cargo, /turf/simulated/floor/tiled/eris/techmaint_cargo,
/area/shuttle/securiship/general) /area/shuttle/securiship/general)
=======
/obj/machinery/atmospherics/pipe/simple/hidden/fuel{
dir = 6
},
/turf/simulated/floor/tiled,
/area/shuttle/securiship/engines)
>>>>>>> 4ccd512332... Merge pull request #12923 from KillianKirilenko/kk-shipfixes
"mJd" = ( "mJd" = (
/obj/machinery/atmospherics/unary/vent_pump/on{ /obj/machinery/atmospherics/unary/vent_pump/on{
dir = 1 dir = 1
@@ -28388,6 +28510,18 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/turf/simulated/floor/tiled, /turf/simulated/floor/tiled,
/area/tether/station/dock_two) /area/tether/station/dock_two)
<<<<<<< HEAD
=======
"ncN" = (
/obj/machinery/atmospherics/pipe/simple/hidden{
dir = 10
},
/obj/machinery/atmospherics/pipe/manifold/hidden/fuel,
/turf/simulated/wall/fancy_shuttle{
fancy_shuttle_tag = "secbus"
},
/area/shuttle/securiship/engines)
>>>>>>> 4ccd512332... Merge pull request #12923 from KillianKirilenko/kk-shipfixes
"ncX" = ( "ncX" = (
/obj/structure/grille, /obj/structure/grille,
/obj/structure/window/reinforced/full, /obj/structure/window/reinforced/full,
@@ -28880,7 +29014,7 @@
<<<<<<< HEAD <<<<<<< HEAD
======= =======
"nAr" = ( "nAr" = (
/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ /obj/machinery/atmospherics/pipe/simple/hidden/fuel{
dir = 10 dir = 10
}, },
/turf/simulated/wall/fancy_shuttle/low{ /turf/simulated/wall/fancy_shuttle/low{
@@ -28890,9 +29024,6 @@
}, },
/area/shuttle/securiship/engines) /area/shuttle/securiship/engines)
"nAx" = ( "nAx" = (
/obj/machinery/atmospherics/portables_connector{
dir = 4
},
/obj/machinery/portable_atmospherics/canister/phoron, /obj/machinery/portable_atmospherics/canister/phoron,
/obj/machinery/light{ /obj/machinery/light{
dir = 8 dir = 8
@@ -28901,6 +29032,9 @@
fancy_shuttle_tag = "medbus"; fancy_shuttle_tag = "medbus";
name = "medbus" name = "medbus"
}, },
/obj/machinery/atmospherics/portables_connector/fuel{
dir = 4
},
/turf/simulated/floor/tiled, /turf/simulated/floor/tiled,
/area/shuttle/medivac/engines) /area/shuttle/medivac/engines)
>>>>>>> de1f9190b8b... Merge pull request #12143 from Very-Soft/returntotether >>>>>>> de1f9190b8b... Merge pull request #12143 from Very-Soft/returntotether
@@ -29695,6 +29829,7 @@
d2 = 8; d2 = 8;
icon_state = "1-8" icon_state = "1-8"
}, },
<<<<<<< HEAD
/obj/structure/table/rack/shelf, /obj/structure/table/rack/shelf,
/obj/machinery/alarm{ /obj/machinery/alarm{
breach_detection = 0; breach_detection = 0;
@@ -29703,6 +29838,10 @@
pixel_x = 25; pixel_x = 25;
rcon_setting = 3; rcon_setting = 3;
report_danger_level = 0 report_danger_level = 0
=======
/obj/machinery/atmospherics/pipe/simple/hidden/fuel{
dir = 8
>>>>>>> 4ccd512332... Merge pull request #12923 from KillianKirilenko/kk-shipfixes
}, },
/turf/simulated/floor/tiled/eris/dark/techfloor, /turf/simulated/floor/tiled/eris/dark/techfloor,
/area/shuttle/securiship/general) /area/shuttle/securiship/general)
@@ -31085,10 +31224,20 @@
/obj/effect/floor_decal/industrial/outline/blue, /obj/effect/floor_decal/industrial/outline/blue,
/turf/simulated/floor, /turf/simulated/floor,
/area/maintenance/cargo) /area/maintenance/cargo)
<<<<<<< HEAD
"qiQ" = ( "qiQ" = (
/obj/machinery/atmospherics/portables_connector/fuel{ /obj/machinery/atmospherics/portables_connector/fuel{
dir = 8; dir = 8;
icon_state = "map_connector-fuel" icon_state = "map_connector-fuel"
=======
"qiZ" = (
/obj/machinery/atmospherics/pipe/simple/hidden{
dir = 4
},
/obj/machinery/atmospherics/pipe/manifold/hidden/fuel,
/turf/simulated/wall/fancy_shuttle{
fancy_shuttle_tag = "medbus"
>>>>>>> 4ccd512332... Merge pull request #12923 from KillianKirilenko/kk-shipfixes
}, },
/obj/machinery/portable_atmospherics/canister/phoron, /obj/machinery/portable_atmospherics/canister/phoron,
/obj/effect/floor_decal/industrial/outline/red, /obj/effect/floor_decal/industrial/outline/red,
@@ -32122,6 +32271,17 @@
/obj/effect/floor_decal/industrial/outline/yellow, /obj/effect/floor_decal/industrial/outline/yellow,
/turf/simulated/floor, /turf/simulated/floor,
/area/storage/emergency_storage/emergency4) /area/storage/emergency_storage/emergency4)
<<<<<<< HEAD
=======
"rkl" = (
/obj/machinery/atmospherics/pipe/simple/hidden/fuel{
dir = 8
},
/turf/simulated/wall/fancy_shuttle{
fancy_shuttle_tag = "secbus"
},
/area/shuttle/securiship/engines)
>>>>>>> 4ccd512332... Merge pull request #12923 from KillianKirilenko/kk-shipfixes
"rkH" = ( "rkH" = (
/obj/structure/disposalpipe/segment{ /obj/structure/disposalpipe/segment{
dir = 1; dir = 1;
@@ -32215,6 +32375,20 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/supply,
/turf/simulated/floor/tiled/steel_grid, /turf/simulated/floor/tiled/steel_grid,
/area/tether/station/dock_two) /area/tether/station/dock_two)
<<<<<<< HEAD
=======
"rqA" = (
/obj/machinery/atmospherics/pipe/simple/hidden{
dir = 5
},
/obj/machinery/atmospherics/pipe/manifold/hidden/fuel{
dir = 1
},
/turf/simulated/wall/fancy_shuttle{
fancy_shuttle_tag = "secbus"
},
/area/shuttle/securiship/engines)
>>>>>>> 4ccd512332... Merge pull request #12923 from KillianKirilenko/kk-shipfixes
"rqP" = ( "rqP" = (
/obj/machinery/access_button{ /obj/machinery/access_button{
command = "cycle_exterior"; command = "cycle_exterior";
@@ -33510,6 +33684,17 @@
}, },
/turf/simulated/floor/tiled, /turf/simulated/floor/tiled,
/area/tether/exploration/hallway) /area/tether/exploration/hallway)
<<<<<<< HEAD
=======
"sOn" = (
/obj/machinery/atmospherics/pipe/simple/hidden/fuel{
dir = 6
},
/turf/simulated/wall/fancy_shuttle{
fancy_shuttle_tag = "medbus"
},
/area/shuttle/medivac/engines)
>>>>>>> 4ccd512332... Merge pull request #12923 from KillianKirilenko/kk-shipfixes
"sPJ" = ( "sPJ" = (
/obj/structure/table/reinforced, /obj/structure/table/reinforced,
/obj/item/stack/material/plasteel{ /obj/item/stack/material/plasteel{
@@ -34928,6 +35113,20 @@
"uuz" = ( "uuz" = (
/turf/simulated/shuttle/wall, /turf/simulated/shuttle/wall,
/area/shuttle/belter) /area/shuttle/belter)
<<<<<<< HEAD
=======
"uvN" = (
/obj/machinery/portable_atmospherics/canister/phoron,
/obj/effect/floor_decal/fancy_shuttle{
fancy_shuttle_tag = "medbus";
name = "medbus"
},
/obj/machinery/atmospherics/portables_connector/fuel{
dir = 4
},
/turf/simulated/floor/tiled,
/area/shuttle/medivac/engines)
>>>>>>> 4ccd512332... Merge pull request #12923 from KillianKirilenko/kk-shipfixes
"uxR" = ( "uxR" = (
/obj/structure/disposalpipe/segment, /obj/structure/disposalpipe/segment,
/obj/structure/cable{ /obj/structure/cable{
@@ -35790,6 +35989,19 @@
}, },
/turf/simulated/floor/tiled, /turf/simulated/floor/tiled,
/area/hallway/station/docks) /area/hallway/station/docks)
<<<<<<< HEAD
=======
"vtg" = (
/obj/effect/floor_decal/fancy_shuttle{
fancy_shuttle_tag = "medbus";
name = "medbus"
},
/obj/machinery/atmospherics/pipe/simple/hidden/fuel{
dir = 9
},
/turf/simulated/floor/tiled,
/area/shuttle/medivac/engines)
>>>>>>> 4ccd512332... Merge pull request #12923 from KillianKirilenko/kk-shipfixes
"vtx" = ( "vtx" = (
/obj/machinery/sleep_console{ /obj/machinery/sleep_console{
dir = 4 dir = 4
@@ -36322,9 +36534,35 @@
}, },
/turf/simulated/floor/tiled, /turf/simulated/floor/tiled,
/area/quartermaster/office) /area/quartermaster/office)
<<<<<<< HEAD
"wbd" = ( "wbd" = (
/turf/simulated/wall/rshull, /turf/simulated/wall/rshull,
/area/shuttle/securiship/engines) /area/shuttle/securiship/engines)
=======
"vZG" = (
/obj/machinery/airlock_sensor{
pixel_x = -28;
pixel_y = -28
},
/obj/effect/floor_decal/fancy_shuttle{
fancy_shuttle_tag = "secbus";
name = "secbus"
},
/obj/effect/map_helper/airlock/sensor/int_sensor,
/turf/simulated/floor/tiled,
/area/shuttle/securiship/general)
"waj" = (
/obj/machinery/atmospherics/pipe/simple/hidden{
dir = 9
},
/obj/machinery/atmospherics/pipe/simple/hidden/fuel{
dir = 10
},
/turf/simulated/wall/fancy_shuttle{
fancy_shuttle_tag = "medbus"
},
/area/shuttle/medivac/engines)
>>>>>>> 4ccd512332... Merge pull request #12923 from KillianKirilenko/kk-shipfixes
"wbf" = ( "wbf" = (
/obj/effect/floor_decal/steeldecal/steel_decals7{ /obj/effect/floor_decal/steeldecal/steel_decals7{
dir = 4 dir = 4
@@ -36380,6 +36618,26 @@
}, },
/turf/simulated/floor/tiled, /turf/simulated/floor/tiled,
/area/quartermaster/belterdock/gear) /area/quartermaster/belterdock/gear)
<<<<<<< HEAD
=======
"weP" = (
/obj/machinery/atmospherics/pipe/simple/hidden,
/obj/structure/cable{
icon_state = "1-2"
},
/obj/structure/cable/green{
icon_state = "1-4"
},
/obj/effect/floor_decal/fancy_shuttle{
fancy_shuttle_tag = "medbus";
name = "medbus"
},
/obj/machinery/atmospherics/binary/pump/fuel{
dir = 4
},
/turf/simulated/floor/tiled,
/area/shuttle/medivac/engines)
>>>>>>> 4ccd512332... Merge pull request #12923 from KillianKirilenko/kk-shipfixes
"whg" = ( "whg" = (
/obj/effect/floor_decal/industrial/warning, /obj/effect/floor_decal/industrial/warning,
/obj/machinery/hologram/holopad, /obj/machinery/hologram/holopad,
@@ -36555,6 +36813,17 @@
}, },
/turf/simulated/floor/tiled, /turf/simulated/floor/tiled,
/area/tether/station/dock_two) /area/tether/station/dock_two)
<<<<<<< HEAD
=======
"wwJ" = (
/obj/machinery/atmospherics/pipe/manifold/hidden/fuel{
dir = 1
},
/turf/simulated/wall/fancy_shuttle{
fancy_shuttle_tag = "secbus"
},
/area/shuttle/securiship/engines)
>>>>>>> 4ccd512332... Merge pull request #12923 from KillianKirilenko/kk-shipfixes
"wwR" = ( "wwR" = (
/obj/structure/cable/green{ /obj/structure/cable/green{
d1 = 1; d1 = 1;
@@ -37581,6 +37850,35 @@
}, },
/turf/simulated/floor/tiled, /turf/simulated/floor/tiled,
/area/hallway/station/docks) /area/hallway/station/docks)
<<<<<<< HEAD
=======
"xMQ" = (
/obj/structure/cable/green{
icon_state = "1-8"
},
/obj/structure/cable{
d1 = 1;
d2 = 8;
icon_state = "1-8"
},
/obj/structure/cable{
d1 = 4;
d2 = 8;
icon_state = "4-8"
},
/obj/machinery/atmospherics/pipe/simple/hidden{
dir = 9
},
/obj/effect/floor_decal/fancy_shuttle{
fancy_shuttle_tag = "secbus";
name = "secbus"
},
/obj/machinery/atmospherics/pipe/manifold/hidden/fuel{
dir = 1
},
/turf/simulated/floor/tiled,
/area/shuttle/securiship/engines)
>>>>>>> 4ccd512332... Merge pull request #12923 from KillianKirilenko/kk-shipfixes
"xMZ" = ( "xMZ" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -37823,6 +38121,28 @@
}, },
/turf/simulated/floor/tiled, /turf/simulated/floor/tiled,
/area/quartermaster/belterdock/surface_mining_outpost_shuttle_hangar) /area/quartermaster/belterdock/surface_mining_outpost_shuttle_hangar)
<<<<<<< HEAD
=======
"xZE" = (
/obj/structure/cable{
icon_state = "0-8"
},
/obj/machinery/power/apc{
dir = 1;
name = "north bump";
nightshift_setting = 2;
pixel_y = 28
},
/obj/effect/floor_decal/fancy_shuttle{
fancy_shuttle_tag = "secbus";
name = "secbus"
},
/obj/machinery/atmospherics/pipe/simple/hidden/fuel{
dir = 10
},
/turf/simulated/floor/tiled,
/area/shuttle/securiship/engines)
>>>>>>> 4ccd512332... Merge pull request #12923 from KillianKirilenko/kk-shipfixes
"xZW" = ( "xZW" = (
/obj/structure/disposalpipe/segment{ /obj/structure/disposalpipe/segment{
dir = 4 dir = 4
@@ -37885,6 +38205,33 @@
}, },
/turf/simulated/floor/tiled, /turf/simulated/floor/tiled,
/area/tether/station/dock_two) /area/tether/station/dock_two)
<<<<<<< HEAD
=======
"ybT" = (
/obj/machinery/door/airlock/glass_external,
/obj/effect/map_helper/airlock/door/int_door,
/obj/effect/floor_decal/fancy_shuttle{
fancy_shuttle_tag = "secbus";
name = "secbus"
},
/turf/simulated/floor/tiled,
/area/shuttle/securiship/general)
"ydq" = (
/obj/structure/cable{
icon_state = "1-8"
},
/obj/machinery/light,
/obj/machinery/atmospherics/pipe/simple/hidden{
dir = 9
},
/obj/effect/floor_decal/fancy_shuttle{
fancy_shuttle_tag = "secbus";
name = "secbus"
},
/obj/machinery/atmospherics/binary/pump/fuel,
/turf/simulated/floor/tiled,
/area/shuttle/securiship/engines)
>>>>>>> 4ccd512332... Merge pull request #12923 from KillianKirilenko/kk-shipfixes
"ydT" = ( "ydT" = (
/obj/machinery/access_button{ /obj/machinery/access_button{
command = "cycle_interior"; command = "cycle_interior";
@@ -55352,6 +55699,7 @@ aaa
aaa aaa
aaa aaa
<<<<<<< HEAD <<<<<<< HEAD
<<<<<<< HEAD
aaa aaa
aaa aaa
aaa aaa
@@ -55375,6 +55723,9 @@ aaa
aaa aaa
======= =======
hsf hsf
=======
osM
>>>>>>> 4ccd512332... Merge pull request #12923 from KillianKirilenko/kk-shipfixes
osM osM
scB scB
sJw sJw
@@ -56251,6 +56602,7 @@ aaa
aaa aaa
aaa aaa
aaa aaa
<<<<<<< HEAD
aaa aaa
aaa aaa
aaa aaa
@@ -56262,6 +56614,16 @@ aaa
aaa aaa
aaa aaa
aaa aaa
=======
hsf
tqu
mRq
psE
psE
psE
psE
kKY
>>>>>>> 4ccd512332... Merge pull request #12923 from KillianKirilenko/kk-shipfixes
aaa aaa
aaa aaa
aaa aaa

View File

@@ -1129,6 +1129,10 @@ const SettingsTab = (props, context) => {
: "Ringer off." : "Ringer off."
} }
onClick={() => act("toggle_ringer")} /> onClick={() => act("toggle_ringer")} />
<Button
fluid
content="Set Ringer Tone"
onClick={() => act("set_ringer_tone")} />
</LabeledList.Item> </LabeledList.Item>
</LabeledList> </LabeledList>
</Section> </Section>

View File

@@ -63,6 +63,10 @@ const ActiveConversation = (props, context) => {
} }
height="450px" height="450px"
stretchContents> stretchContents>
<Button
icon="comment"
onClick={() => act("Message", { "target": active_conversation })}
content="Reply" />
<Section style={{ <Section style={{
"height": "97%", "height": "97%",
"overflow-y": "auto", "overflow-y": "auto",

File diff suppressed because one or more lines are too long

View File

@@ -1223,6 +1223,7 @@
#include "code\game\objects\items\poi_items.dm" #include "code\game\objects\items\poi_items.dm"
#include "code\game\objects\items\robobag.dm" #include "code\game\objects\items\robobag.dm"
#include "code\game\objects\items\sahoc_ch.dm" #include "code\game\objects\items\sahoc_ch.dm"
#include "code\game\objects\items\selectable_item_vr.dm"
#include "code\game\objects\items\shooting_range.dm" #include "code\game\objects\items\shooting_range.dm"
#include "code\game\objects\items\surplus_voucher_ch.dm" #include "code\game\objects\items\surplus_voucher_ch.dm"
#include "code\game\objects\items\tailoring.dm" #include "code\game\objects\items\tailoring.dm"
@@ -4301,6 +4302,7 @@
#include "code\modules\vore\eating\slipvore_vr.dm" #include "code\modules\vore\eating\slipvore_vr.dm"
#include "code\modules\vore\eating\stumblevore_vr.dm" #include "code\modules\vore\eating\stumblevore_vr.dm"
#include "code\modules\vore\eating\transforming_vr.dm" #include "code\modules\vore\eating\transforming_vr.dm"
#include "code\modules\vore\eating\vertical_nom_vr.dm"
#include "code\modules\vore\eating\vore_vr.dm" #include "code\modules\vore\eating\vore_vr.dm"
#include "code\modules\vore\eating\vorehooks_vr.dm" #include "code\modules\vore\eating\vorehooks_vr.dm"
#include "code\modules\vore\eating\vorepanel_ch.dm" #include "code\modules\vore\eating\vorepanel_ch.dm"