21 Commits

Author SHA1 Message Date
evilew 2d876eefbb blob nerf
the blob now requires 800 tiles to win, instead of 400
2025-02-12 21:46:36 +01:00
evilew b869b17eae Merge pull request #86 from Phantastic-Swan/master
Fixes mice being able to bite wires through catwalks
2025-02-12 18:35:09 +01:00
evilew f01382a1bd Merge pull request #85 from shikikanx/IPCSynthfix
Organ fixes for IPCs and Synths to prevent decay.
2025-02-12 18:34:54 +01:00
AbsFree 89c3439dee but not if the catwalk is open :) 2025-02-12 17:59:04 +01:00
AbsFree 1d2bb0bfa1 mice cannot bite through catwalks anymore 2025-02-12 17:40:59 +01:00
shikikanx 9115bb7715 Tests seem to work, I'll try it with the brain next. 2025-02-10 14:33:53 +00:00
shikikanx 2cae2f237a Adding the synthetic flag to IPC organs. 2025-02-10 13:01:50 +00:00
evilew bc979b5aae Merge pull request #83 from evilew/tweaks
small tweaks
2025-02-07 20:49:41 +01:00
evilew 355d9232c2 Merge pull request #82 from Alphas00/master
Berries juicing fix
2025-02-05 20:41:09 +01:00
evilew 5c5781ac78 Merge pull request #80 from AlManiak/feature/bluespace_collar
Feature/bluespace_collar
2025-02-05 20:40:59 +01:00
Alphas00 a57e5a12a4 Berries juicing fix
Added an additional check to code for juicing people to avoid some null cases
2025-02-05 16:12:51 +01:00
Metis e8e0068531 Update borghypo.dm 2025-02-05 01:17:30 -05:00
AlManiak 15801a9a82 Merge branch 'feature/bluespace_collar' of https://github.com/AlManiak/GS13-Citadel into feature/bluespace_collar 2025-02-02 19:58:37 +01:00
AlManiak 70b495d3bb More specific description for food 2025-02-02 19:58:33 +01:00
evilew 0386dec84d adding sharky plush 2025-02-02 03:31:05 +01:00
evilew 8ed2b7e2f1 fixing some masks and eyepatches
- fixed white eyepatch
- fixed fattening mask's missing sprite
- added labcoat to loadout
2025-02-01 19:55:20 +01:00
evilew ad5cac97f4 removing a vendor from dj station
it was annoying, getting on radio
2025-02-01 19:19:08 +01:00
evilew f501de020e tweaks
- removed obj damage from magehands
- added xenoarch to areas excluded from size uncap
- fixed a typo in a lore note
- brought back xeno queen sprites that are more in tune with Geiger's designs
2025-02-01 18:03:47 +01:00
AlManiak dbe071f91d Merge branch 'evilew:master' into feature/bluespace_collar 2025-02-01 00:46:12 +01:00
AlManiak 00fb0f0fb2 Added most consuming procs for the collar
Added research and design for collar
2025-02-01 00:44:39 +01:00
AlManiak 6755a031e4 Initial commit
collar works with food and drinks
2025-01-31 12:15:56 +01:00
33 changed files with 686 additions and 201 deletions
@@ -0,0 +1,198 @@
/obj/item/clothing/neck/petcollar/locked/bluespace_collar_receiver
name = "Bluespace collar receiver"
desc = "A collar containing a miniaturized bluespace whitehole. Other bluespace transmitter collars can connect to this, causing the wearer to receive food from other transmitter collars directly into the stomach. "
slot_flags = ITEM_SLOT_NECK
var/mob/living/carbon/victim = 0
/obj/item/clothing/neck/petcollar/locked/bluespace_collar_receiver/equipped(mob/user, slot)
. = ..()
var/mob/living/carbon/wearer = user
if(!iscarbon(wearer) || slot !=ITEM_SLOT_NECK || !wearer?.client?.prefs?.weight_gain_items)
return FALSE
victim = user;
/obj/item/clothing/neck/petcollar/locked/bluespace_collar_receiver/dropped(mob/user)
. = ..()
var/mob/living/carbon/wearer = user
if(!iscarbon(wearer) || !(wearer.get_item_by_slot(ITEM_SLOT_NECK) == src) || !wearer?.client?.prefs?.weight_gain_items)
return FALSE
victim = 0
/obj/item/clothing/neck/petcollar/locked/bluespace_collar_receiver/proc/isworn()
if(istype(victim, /mob/living/carbon))
return TRUE
else
return FALSE
/obj/item/clothing/neck/petcollar/locked/bluespace_collar_receiver/attackby(obj/item/clothing/neck/petcollar/locked/bluespace_collar_transmitter/K, mob/user, params)
if(istype(K, /obj/item/clothing/neck/petcollar/locked/bluespace_collar_transmitter))
K.linked_receiver = src
var/mob/living/carbon/U = user
to_chat(U, "<span class='notice'>You link the bluespace collar with the other transmitter</span>")
. = ..()
return
/obj/item/clothing/neck/petcollar/locked/bluespace_collar_transmitter
name = "Bluespace collar transmitter"
desc = "A collar containing a miniaturized bluespace blackhole. Can be connected to a bluespace collar receiver to transmit food to a linked receiver collar. "
slot_flags = ITEM_SLOT_NECK
var/obj/item/clothing/neck/petcollar/locked/bluespace_collar_receiver/linked_receiver = 0
/obj/item/clothing/neck/petcollar/locked/bluespace_collar_transmitter/equipped(mob/user, slot)
. = ..()
var/mob/living/carbon/wearer = user
if(!iscarbon(wearer) || slot !=ITEM_SLOT_NECK || !wearer?.client?.prefs?.weight_gain_items)
return FALSE
/obj/item/clothing/neck/petcollar/locked/bluespace_collar_transmitter/dropped(mob/user)
. = ..()
var/mob/living/carbon/wearer = user
if(!iscarbon(wearer) || !(wearer.get_item_by_slot(ITEM_SLOT_NECK) == src) || !wearer?.client?.prefs?.weight_gain_items)
return FALSE
/obj/item/clothing/neck/petcollar/locked/bluespace_collar_transmitter/attackby(obj/item/K, mob/user, params)
if(istype(K, /obj/item/clothing/neck/petcollar/locked/bluespace_collar_receiver))
linked_receiver = K
var/mob/living/carbon/U = user
to_chat(U, "<span class='notice'>You link the bluespace collar to the other receiver</span>")
. = ..()
return
/obj/item/clothing/neck/petcollar/locked/bluespace_collar_transmitter/proc/islinked()
if (linked_receiver && linked_receiver.isworn())
return TRUE
else
return FALSE
// For food
/obj/item/clothing/neck/petcollar/locked/bluespace_collar_transmitter/proc/transpose_food(obj/item/reagent_containers/food/snacks/owner, mob/living/original_eater, mob/living/feeder)
if (!islinked())
return FALSE
var/mob/living/carbon/human/eater = linked_receiver.victim
if(owner.reagents)
if(eater.satiety > -200)
eater.satiety -= owner.junkiness
playsound(eater.loc,'sound/items/eatfood.ogg', rand(10,50), 1)
playsound(original_eater.loc,'sound/items/eatfood.ogg', rand(10,50), 1)
eater.visible_message("<span class='warning'>[eater]'s belly seems to visibly distend a bit further'!</span>", "<span class='danger'>You feel your stomach get filled by food!</span>")
var/bitevolume = 1
if(HAS_TRAIT(original_eater, TRAIT_VORACIOUS))
bitevolume = bitevolume * 0.67
var/mob/living/carbon/human/human_eater = eater
if(istype(human_eater))
human_eater.fullness += bitevolume;
if(owner.reagents.total_volume)
SEND_SIGNAL(owner, COMSIG_FOOD_EATEN, eater, feeder)
var/fraction = min(owner.bitesize / owner.reagents.total_volume, 1)
owner.reagents.reaction(eater, INGEST, fraction)
owner.reagents.trans_to(eater, owner.bitesize, log = TRUE)
owner.bitecount++
owner.On_Consume(eater)
owner.checkLiked(fraction, original_eater)
return TRUE
// For the alternative edible functionality
/obj/item/clothing/neck/petcollar/locked/bluespace_collar_transmitter/proc/transpose_edible(datum/component/edible/foodstuff, mob/living/original_eater, mob/living/feeder)
if (!islinked())
return FALSE
var/atom/owner = foodstuff.parent
var/mob/living/carbon/human/eater = linked_receiver.victim
if(!owner?.reagents)
return FALSE
if(eater.satiety > -200)
eater.satiety -= foodstuff.junkiness
playsound(original_eater.loc,'sound/items/eatfood.ogg', rand(10,50), TRUE)
playsound(eater.loc,'sound/items/eatfood.ogg', rand(10,50), TRUE)
eater.visible_message("<span class='warning'>[eater]'s belly seems to visibly distend a bit further'!</span>", "<span class='danger'>You feel your stomach get filled by something!</span>")
var/mob/living/carbon/human/human_eater = original_eater
if(istype(human_eater))
var/bitevolume = 1
if(HAS_TRAIT(human_eater, TRAIT_VORACIOUS))
bitevolume = bitevolume * 0.67
if(istype(eater))
eater.fullness += bitevolume;
if(owner.reagents.total_volume)
SEND_SIGNAL(foodstuff.parent, COMSIG_FOOD_EATEN, eater, original_eater)
var/fraction = min(foodstuff.bite_consumption / owner.reagents.total_volume, 1)
owner.reagents.reaction(eater, INGEST, fraction)
owner.reagents.trans_to(eater, foodstuff.bite_consumption)
foodstuff.bitecount++
foodstuff.On_Consume(eater)
foodstuff.checkLiked(fraction, original_eater)
//Invoke our after eat callback if it is valid
if(foodstuff.after_eat)
foodstuff.after_eat.Invoke(eater, feeder)
return TRUE
// For Drinks
/obj/item/clothing/neck/petcollar/locked/bluespace_collar_transmitter/proc/transpose_drink(obj/item/reagent_containers/food/drinks/owner, mob/living/original_eater)
if (!islinked())
return FALSE
var/mob/living/carbon/human/eater = linked_receiver.victim
var/fraction = min(owner.gulp_size/owner.reagents.total_volume, 1)
owner.checkLiked(fraction, eater)
owner.reagents.reaction(eater, INGEST, fraction)
owner.reagents.trans_to(eater, owner.gulp_size, log = TRUE)
//GS13 Port - Fullness
if(iscarbon(eater))
var/mob/living/carbon/human/human_eater = eater
var/mob/living/carbon/human/human_original_eater = original_eater
if(HAS_TRAIT(human_original_eater, TRAIT_VORACIOUS))
human_eater.fullness += min(owner.gulp_size * 0.67, owner.reagents.total_volume * 0.67)
else
human_eater.fullness += min(owner.gulp_size, owner.reagents.total_volume) // GS13 drinks will fill your stomach
playsound(original_eater.loc,'sound/items/drink.ogg', rand(10,50), 1)
playsound(eater.loc,'sound/items/drink.ogg', rand(10,50), 1)
eater.visible_message("<span class='warning'>[eater]'s belly seems to visibly distend a bit further, emitting an audible sloshing noise!</span>", "<span class='danger'>You feel your stomach get filled by liquid, hearing sloshing noises coming from within!</span>")
return TRUE
// For containers
/obj/item/clothing/neck/petcollar/locked/bluespace_collar_transmitter/proc/transpose_container(var/datum/reagents/reagents , fraction, mob/M, mob/user)
if (!islinked())
return FALSE
var/mob/living/carbon/human/eater = linked_receiver.victim
var/self_fed = M == user
reagents.reaction(eater, INGEST, fraction)
addtimer(CALLBACK(reagents, TYPE_PROC_REF(/datum/reagents, trans_to), eater, 5, null, null, null, self_fed? "self swallowed" : "fed by [user]"), 5)
eater.visible_message("<span class='warning'>[eater]'s belly seems to visibly distend a bit further, emitting an audible sloshing noise!</span>", "<span class='danger'>You feel your stomach get filled by liquid, hearing sloshing noises coming from within!</span>")
return TRUE
// For industrial feeding tube
/obj/item/clothing/neck/petcollar/locked/bluespace_collar_transmitter/proc/transpose_industrial_feeding(obj/item/reagent_containers/food/snacks/food, datum/reagents/food_reagents, mob/living/original_eater)
if (!islinked())
return FALSE
var/mob/living/carbon/human/eater = linked_receiver.victim
var/food_size = food_reagents.total_volume //We're cramming the Whole Thing down your throat~
food_reagents.reaction(eater, INGEST, food_size)
food_reagents.trans_to(eater, food_size)
eater.fullness += food_size
food.checkLiked(food_size, eater) //...Hopefully you like the taste.
eater.visible_message("<span class='warning'>[eater]'s belly seems to greatly distend, as if it was being inflated with large amounts of food.</span>", "<span class='danger'>You feel an immense pressure in your stomach, as if large amounts of food were pumped directly into you.</span>")
return TRUE
// For feeding tube
/obj/item/clothing/neck/petcollar/locked/bluespace_collar_transmitter/proc/transpose_feeding(transfer_amount, var/obj/item/reagent_containers/beaker, mob/living/original_eater)
if (!islinked())
return FALSE
var/mob/living/carbon/human/eater = linked_receiver.victim
var/fraction = min(transfer_amount/beaker.reagents.total_volume, 1) //the fraction that is transfered of the total volume
beaker.reagents.reaction(eater, INJECT, fraction, FALSE) //make reagents reacts, but don't spam messages
beaker.reagents.trans_to(eater, transfer_amount)
eater.fullness += transfer_amount //Added feeding tube's causing fullness (But ignores limits~)
if(prob(10))
eater.visible_message("<span class='warning'>[eater]'s belly seems to visibly distend, emitting an audible sloshing noise!</span>", "<span class='danger'>You feel your stomach get pumped full with liquid, hearing sloshing noises coming from within!</span>")
return TRUE
/obj/item/clothing/neck/petcollar/locked/bluespace_collar_transmitter/attack_self(mob/user)
linked_receiver = 0
var/mob/living/carbon/U = user
to_chat(U, "<span class='notice'>You remove the currently linked receiver collar from the buffer</span>")
. = ..()
+3
View File
@@ -2,8 +2,11 @@
name = "drone mask"
desc = "A mask that can be connected to an air supply. When seen from certain angles, an orange light is reflected by it."
icon = 'GainStation13/icons/obj/clothing/fat_mask.dmi'
mob_overlay_icon = 'GainStation13/icons/mob/mask.dmi'
anthro_mob_worn_overlay = 'GainStation13/icons/mob/mask.dmi'
icon_state = "fat_mask"
item_state = "fat_mask"
mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON
var/mob/living/carbon/C
/obj/item/clothing/mask/gas/fattening/equipped(mob/M, slot)
@@ -39,7 +39,7 @@
M.reagents.add_reagent(infection_reagent, max(A.totalStageSpeed(), 1))
/obj/item/reagent_containers/glass/attack(mob/M, mob/user, obj/target)
if(M.reagents.get_reagent_amount(/datum/reagent/blueberry_juice) > 0 && (reagents.total_volume + min(amount_per_transfer_from_this, 10)) <= volume)
if(M.reagents && M.reagents.get_reagent_amount(/datum/reagent/blueberry_juice) > 0 && (reagents.total_volume + min(amount_per_transfer_from_this, 10)) <= volume)
reagents.add_reagent(/datum/reagent/blueberry_juice, min(10, amount_per_transfer_from_this))
M.reagents.remove_reagent(/datum/reagent/blueberry_juice, min(10, amount_per_transfer_from_this))
if(M != user)
+4 -3
View File
@@ -3,16 +3,16 @@
//item presets for donator items and other gunk
//
/obj/item/clothing/glasses/eyepatch/white
icon ='GainStation13/icons/obj/clothing/glasses.dmi'
mob_overlay_icon = 'GainStation13/icons/mob/eyes.dmi'
name = "White eyepatch"
desc = "Smells faintly of medicine and headaches."
icon_state = "eyepatch_white"
item_state = "eyepatch_white"
/obj/item/clothing/glasses/eyepatch/cabal
/obj/item/clothing/glasses/eyepatch/white/cabal
name = "Cabal's Eyepatch"
desc = "Vulpine sluts only."
icon_state = "eyepatch_white"
item_state = "eyepatch_white"
/obj/item/toy/sword/chloesabre/halsey
name = "Halsey's Sabre"
@@ -50,3 +50,4 @@
/obj/item/crowbar/bronze/glaug
name = "Milwaukee Pocket Crowbar"
desc = "Much more expensive. Still serves the same function."
+1 -1
View File
@@ -611,4 +611,4 @@
/obj/item/paper/fluff/ruins/gateway_fats/facility_report8
name = "Report #192 A38 - Lipoifium"
info = "Subject 2 - Male, Anthropomorphic Fox, blue fur. Name: Sam S. At the beginning of the testing, subject was recorded to have weight of 160lbs. After a day minutes of exposure, their weight went into quadruple digits. Testing had to be concluded due to insufficient build of the test chamber. More detailed report found in the system."
info = "Subject 2 - Male, Anthropomorphic Fox, blue fur. Name: Sam S. At the beginning of the testing, subject was recorded to have weight of 160lbs. After a day of exposure, their weight went into quadruple digits. Testing had to be concluded due to insufficient build of the test chamber. More detailed report found in the system."
+5
View File
@@ -81,3 +81,8 @@
desc = "A plush of a silly-eyed xeno seccie."
icon_state = "crowbars"
attack_verb = list("squished", "crowbared", "beno'd")
/obj/item/toy/plush/gs13/sharky
desc = "A plush of a toothy, sharky creature."
icon_state = "sharky"
attack_verb = list("squished", "bit", "sharkied")
+10 -3
View File
@@ -62,10 +62,17 @@
if(beaker)
if(mode)
if(beaker.reagents.total_volume)
// Check to see if the person is wearing a bluespace collar
var/obj/item/clothing/neck/petcollar/locked/bluespace_collar_transmitter/K = 0
if(istype(attached, /mob/living/carbon/human))
var/mob/living/carbon/human/human_eater = attached
K = human_eater.wear_neck
var/transfer_amount = 5
var/fraction = min(transfer_amount/beaker.reagents.total_volume, 1) //the fraction that is transfered of the total volume
beaker.reagents.reaction(attached, INJECT, fraction, FALSE) //make reagents reacts, but don't spam messages
beaker.reagents.trans_to(attached, transfer_amount)
if (!(istype(K, /obj/item/clothing/neck/petcollar/locked/bluespace_collar_transmitter) && K.transpose_feeding(transfer_amount, beaker, attached))) //If wearing a BS collar, use BS proc. If not, continue as normal
var/fraction = min(transfer_amount/beaker.reagents.total_volume, 1) //the fraction that is transfered of the total volume
beaker.reagents.reaction(attached, INJECT, fraction, FALSE) //make reagents reacts, but don't spam messages
beaker.reagents.trans_to(attached, transfer_amount)
attached.fullness += transfer_amount //Added feeding tube's causing fullness (But ignores limits~)
update_icon()
else if(!beaker.reagents.total_volume && istype(beaker, /obj/item/reagent_containers/food))
@@ -260,10 +260,18 @@
SEND_SIGNAL(food, COMSIG_FOOD_EATEN, attached)
food_reagents.reaction(attached, INGEST, food_size)
food_reagents.trans_to(attached, food_size)
food.checkLiked(food_size, attached) //...Hopefully you like the taste.
// Check to see if the person is wearing a bluespace collar
var/obj/item/clothing/neck/petcollar/locked/bluespace_collar_transmitter/K = 0
if(istype(attached, /mob/living/carbon/human))
var/mob/living/carbon/human/human_eater = attached
K = human_eater.wear_neck
if (!(istype(K, /obj/item/clothing/neck/petcollar/locked/bluespace_collar_transmitter) && K.transpose_industrial_feeding(food, food_reagents, attached))) //If wearing a BS collar, use BS proc. If not, continue as normal
food_reagents.reaction(attached, INGEST, food_size)
food_reagents.trans_to(attached, food_size)
if(istype(attached, /mob/living/carbon/human))
var/mob/living/carbon/human/human_eater = attached
human_eater.fullness += food_size //Added industrial feeding tube's causing fullness (But ignores limits~)
food.checkLiked(food_size, attached) //...Hopefully you like the taste.
if(food.trash) //Lets make the trash the food's supposed to make, if it has any
+1 -1
View File
@@ -1,4 +1,4 @@
GLOBAL_LIST_INIT(uncapped_resize_areas, list(/area/command/bridge, /area/maintenance, /area/security/prison, /area/holodeck, /area/commons/vacant_room/office, /area/space, /area/ruin, /area/lavaland, /area/awaymission, /area/centcom, /area/fatlab))
GLOBAL_LIST_INIT(uncapped_resize_areas, list(/area/command/bridge, /area/maintenance, /area/security/prison, /area/holodeck, /area/commons/vacant_room/office, /area/space, /area/ruin, /area/lavaland, /area/awaymission, /area/centcom, /area/fatlab, /area/xenoarch))
/mob/living
var/burpslurring = 0 //GS13 - necessary due to "say" being defined by mob/living
+3
View File
@@ -112,6 +112,9 @@
see_in_dark = 10
maxHealth = 20
health = 20
obj_damage = 0
melee_damage_lower = 0.001
melee_damage_upper = 0.001
blood_volume = 0 //don't want it to bleed
del_on_death = TRUE //it's an apparition, shouldn't have a body
movement_type = FLYING
@@ -57,6 +57,28 @@
category = list("Equipment", "Misc", "Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_ALL
/datum/design/bluespace_collar_receiver
name = "Bluespace collar receiver"
desc = "A collar containing a miniaturized bluespace whitehole. Other bluespace transmitter collars can connect to this, causing the wearer to receive food from other transmitter collars directly into the stomach."
id = "bluespace_collar_receiver"
build_type = PROTOLATHE
materials = list(/datum/material/iron = 1000, /datum/material/calorite = 2500, /datum/material/bluespace = 250)
construction_time = 75
build_path = /obj/item/clothing/neck/petcollar/locked/bluespace_collar_receiver
category = list("Equipment", "Misc", "Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_ALL
/datum/design/bluespace_collar_transmitter
name = "Bluespace collar transmitter"
desc = "A collar containing a miniaturized bluespace blackhole. Can be connected to a bluespace collar receiver to transmit food to a linked receiver collar. "
id = "bluespace_collar_transmitter"
build_type = PROTOLATHE
materials = list(/datum/material/iron = 1000, /datum/material/calorite = 1000, /datum/material/bluespace = 500)
construction_time = 75
build_path = /obj/item/clothing/neck/petcollar/locked/bluespace_collar_transmitter
category = list("Equipment", "Misc", "Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_ALL
/datum/design/cyberimp_nutriment_turbo
name = "Nutriment Pump Implant TURBO"
desc = "This implant was meant to prevent people from going hungry, but due to a flaw in its designs, it permanently produces a small amount of nutriment overtime."
@@ -5,7 +5,7 @@
display_name = "Nutri-Tech Tools"
description = "Ending world hunger was never made easier!"
prereq_ids = list("biotech", "adv_engi")
design_ids = list("calorite_collar", "ci-nutrimentturbo", "bluespace_belt", "adipoelectric_transformer", "cookie_synthesizer", "borg_upgrade_cookiesynthesizer", "borg_upgrade_feedingtube", "ci-fatmobility")
design_ids = list("calorite_collar", "ci-nutrimentturbo", "bluespace_belt", "adipoelectric_transformer", "cookie_synthesizer", "borg_upgrade_cookiesynthesizer", "borg_upgrade_feedingtube", "ci-fatmobility","bluespace_collar_receiver","bluespace_collar_transmitter")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
boost_item_paths = list(/obj/item/gun/energy/fatoray, /obj/item/gun/energy/fatoray/cannon, /obj/item/trash/fatoray_scrap1, /obj/item/trash/fatoray_scrap2)
hidden = TRUE
Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

After

Width:  |  Height:  |  Size: 56 KiB

+321 -109
View File
@@ -25,12 +25,22 @@
/turf/open/floor/plating,
/area/ruin/space/djstation)
"ah" = (
/obj/effect/turf_decal/loading_area{
icon_state = "drain";
name = "drain";
dir = 1
},
/turf/open/floor/plating,
/area/ruin/space/djstation)
"ai" = (
/obj/machinery/light{
dir = 1
},
/obj/effect/turf_decal/loading_area{
icon_state = "drain";
name = "drain";
dir = 1
},
/turf/open/floor/plating,
/area/ruin/space/djstation)
"aj" = (
@@ -46,10 +56,20 @@
pixel_x = -2;
pixel_y = -1
},
/obj/effect/turf_decal/loading_area{
dir = 4;
icon_state = "drain";
name = "drain"
},
/turf/open/floor/plating,
/area/ruin/space/djstation)
"am" = (
/obj/item/extinguisher,
/obj/effect/turf_decal/loading_area{
dir = 8;
icon_state = "drain";
name = "drain"
},
/turf/open/floor/plating,
/area/ruin/space/djstation)
"an" = (
@@ -76,6 +96,15 @@
name = "Worn-out APC";
pixel_y = -24
},
/obj/effect/turf_decal/loading_area{
icon_state = "drain";
name = "drain"
},
/obj/effect/turf_decal/loading_area{
dir = 8;
icon_state = "drain";
name = "drain"
},
/turf/open/floor/plating,
/area/ruin/space/djstation)
"aq" = (
@@ -86,12 +115,20 @@
/obj/structure/sign/warning/electricshock{
pixel_y = -32
},
/obj/effect/turf_decal/loading_area{
icon_state = "drain";
name = "drain"
},
/turf/open/floor/plating,
/area/ruin/space/djstation)
"ar" = (
/obj/structure/cable{
icon_state = "1-8"
},
/obj/effect/turf_decal/loading_area{
icon_state = "drain";
name = "drain"
},
/turf/open/floor/plating,
/area/ruin/space/djstation)
"as" = (
@@ -99,21 +136,39 @@
/obj/item/clothing/suit/space/syndicate/orange,
/obj/item/clothing/head/helmet/space/syndicate/orange,
/obj/item/clothing/mask/breath,
/obj/effect/turf_decal/loading_area{
icon_state = "drain";
name = "drain"
},
/obj/effect/turf_decal/loading_area{
dir = 4;
icon_state = "drain";
name = "drain"
},
/turf/open/floor/plating,
/area/ruin/space/djstation)
"at" = (
/obj/machinery/door/airlock/maintenance_hatch,
/turf/open/floor/plating,
/turf/open/floor/plasteel,
/area/ruin/space/djstation)
"au" = (
/obj/structure/closet/emcloset,
/obj/effect/turf_decal/loading_area{
dir = 1;
icon_state = "box_white";
name = "drain"
},
/turf/open/floor/plasteel,
/area/ruin/space/djstation)
"av" = (
/obj/machinery/vending/snack,
/obj/machinery/light/small{
dir = 1
},
/obj/effect/turf_decal/loading_area{
dir = 1;
icon_state = "steel_decals_central1";
name = "drain"
},
/turf/open/floor/plasteel,
/area/ruin/space/djstation)
"aw" = (
@@ -125,89 +180,83 @@
dir = 10;
icon_state = "steel_decals10"
},
/obj/item/cigbutt{
pixel_x = -16;
pixel_y = -2
},
/turf/open/floor/plasteel/dark,
/area/ruin/space/djstation)
"ax" = (
/obj/machinery/light_switch{
pixel_y = 28
},
/obj/effect/turf_decal/loading_area{
dir = 1;
icon_state = "steel_decals_central1";
name = "drain"
},
/turf/open/floor/plasteel,
/area/ruin/space/djstation)
"ay" = (
/obj/machinery/newscaster{
pixel_y = 32
},
/obj/structure/closet/firecloset,
/obj/effect/turf_decal/loading_area{
dir = 1;
icon_state = "box_red";
name = "drain"
},
/turf/open/floor/plasteel,
/area/ruin/space/djstation)
"az" = (
/obj/structure/table,
/obj/machinery/cell_charger,
/obj/effect/turf_decal/tile/bar,
/obj/effect/turf_decal/tile/bar{
dir = 1
},
/turf/open/floor/plasteel,
/area/ruin/space/djstation)
"aA" = (
/obj/effect/turf_decal/tile/bar,
/obj/effect/turf_decal/tile/bar{
dir = 1
},
/obj/machinery/vending/snack,
/turf/open/floor/plasteel,
/area/ruin/space/djstation)
"aB" = (
/obj/effect/spawner/lootdrop/crate_spawner,
/turf/open/floor/plasteel/grimy,
/obj/machinery/sleeper,
/turf/open/floor/plasteel/dark,
/area/ruin/space/djstation)
"aC" = (
/obj/machinery/light_switch{
pixel_y = 28
},
/turf/open/floor/plasteel/grimy,
/turf/open/floor/carpet/red,
/area/ruin/space/djstation)
"aD" = (
/obj/structure/bed,
/obj/item/bedsheet,
/turf/open/floor/plasteel/grimy,
/obj/structure/closet,
/turf/open/floor/carpet/red,
/area/ruin/space/djstation)
"aE" = (
/obj/structure/table,
/obj/item/flashlight/lamp,
/turf/open/floor/plasteel/grimy,
/turf/open/floor/carpet/red,
/area/ruin/space/djstation)
"aF" = (
/obj/structure/table,
/obj/machinery/microwave{
pixel_y = 8
},
/obj/effect/turf_decal/tile/bar,
/obj/effect/turf_decal/tile/bar{
dir = 1
},
/turf/open/floor/plasteel,
/area/ruin/space/djstation)
"aG" = (
/turf/open/floor/plasteel,
/area/ruin/space/djstation)
"aH" = (
/obj/structure/table,
/obj/effect/turf_decal/loading_area{
dir = 4;
icon_state = "drain";
name = "drain"
},
/obj/effect/turf_decal/loading_area{
icon_state = "drain";
name = "drain";
dir = 1
},
/turf/open/floor/plasteel/dark,
/obj/structure/rack/shelf,
/obj/item/storage/box/donkpockets/donkpocketspicy,
/obj/item/reagent_containers/food/snacks/rationpack,
/obj/item/reagent_containers/food/snacks/rationpack,
/obj/item/reagent_containers/food/snacks/rationpack,
/turf/open/floor/plasteel,
/area/ruin/space/djstation)
"aI" = (
/obj/structure/chair/office/light,
/obj/effect/turf_decal/loading_area{
icon_state = "steel_decals_central6"
},
/turf/open/floor/plasteel,
/area/ruin/space/djstation)
"aJ" = (
@@ -217,74 +266,57 @@
/turf/open/floor/plasteel,
/area/ruin/space/djstation)
"aK" = (
/turf/open/floor/plasteel/grimy,
/turf/open/floor/carpet/red,
/area/ruin/space/djstation)
"aL" = (
/obj/machinery/sleeper{
dir = 8
},
/turf/open/floor/plasteel/grimy,
/obj/structure/bed,
/obj/item/bedsheet,
/turf/open/floor/carpet/red,
/area/ruin/space/djstation)
"aM" = (
/obj/machinery/disposal/bin,
/obj/structure/disposalpipe/trunk,
/obj/effect/turf_decal/tile/bar,
/obj/effect/turf_decal/tile/bar{
dir = 1
},
/turf/open/floor/plasteel,
/area/ruin/space/djstation)
"aN" = (
/obj/machinery/light/small,
/obj/effect/turf_decal/tile/bar,
/obj/effect/turf_decal/tile/bar{
dir = 1
dir = 8
},
/turf/open/floor/plasteel,
/obj/effect/turf_decal/tile/bar{
dir = 4
},
/obj/effect/turf_decal/loading_area{
dir = 9;
icon_state = "steel_panel";
name = "steel pannel"
},
/turf/open/floor/plasteel/checker,
/area/ruin/space/djstation)
"aO" = (
/obj/structure/chair{
dir = 1
},
/obj/effect/turf_decal/tile/bar,
/obj/effect/turf_decal/tile/bar{
dir = 1
dir = 8
},
/turf/open/floor/plasteel,
/obj/effect/turf_decal/tile/bar{
dir = 4
},
/turf/open/floor/plasteel/checker,
/area/ruin/space/djstation)
"aP" = (
/obj/structure/table,
/obj/effect/turf_decal/loading_area{
dir = 8;
icon_state = "drain";
name = "drain"
},
/obj/effect/turf_decal/loading_area{
icon_state = "drain";
name = "drain"
/obj/item/radio{
pixel_x = -5;
pixel_y = 9
},
/turf/open/floor/plasteel/dark,
/area/ruin/space/djstation)
"aQ" = (
/obj/structure/table,
/obj/effect/turf_decal/loading_area{
icon_state = "drain";
name = "drain"
},
/turf/open/floor/plasteel/dark,
/area/ruin/space/djstation)
"aR" = (
/obj/item/paper/fluff/ruins/djstation,
/obj/structure/table,
/obj/effect/turf_decal/loading_area{
dir = 4;
icon_state = "drain";
name = "drain"
},
/obj/effect/turf_decal/loading_area{
icon_state = "drain";
name = "drain"
},
/turf/open/floor/plasteel/dark,
/area/ruin/space/djstation)
"aS" = (
@@ -292,21 +324,21 @@
anchored = 1;
dir = 4
},
/turf/open/floor/plasteel/grimy,
/turf/open/floor/plasteel/dark,
/area/ruin/space/djstation)
"aT" = (
/obj/structure/chair{
dir = 8
},
/turf/open/floor/plasteel/grimy,
/turf/open/floor/plasteel/dark,
/area/ruin/space/djstation)
"aU" = (
/obj/machinery/light/small,
/turf/open/floor/plasteel/grimy,
/turf/open/floor/plasteel/dark,
/area/ruin/space/djstation)
"aV" = (
/obj/structure/closet,
/turf/open/floor/plasteel/grimy,
/obj/effect/spawner/lootdrop/crate_spawner,
/turf/open/floor/plasteel/dark,
/area/ruin/space/djstation)
"aW" = (
/obj/structure/disposalpipe/segment,
@@ -359,6 +391,10 @@
dir = 10;
icon_state = "steel_decals10"
},
/obj/item/cigbutt{
pixel_x = 10;
pixel_y = 6
},
/turf/open/floor/plasteel/dark,
/area/ruin/space/djstation)
"bc" = (
@@ -462,8 +498,42 @@
pixel_y = -14;
pixel_x = 12
},
/obj/item/cigbutt{
pixel_x = -10;
pixel_y = -4
},
/turf/open/floor/plasteel,
/area/ruin/space/djstation)
"dh" = (
/obj/effect/turf_decal/loading_area{
icon_state = "drain";
name = "drain";
dir = 1
},
/obj/effect/turf_decal/loading_area{
dir = 4;
icon_state = "drain";
name = "drain"
},
/turf/open/floor/plating,
/area/ruin/space/djstation)
"ec" = (
/obj/structure/chair,
/obj/effect/turf_decal/loading_area{
dir = 1;
icon_state = "steel_decals_central1";
name = "drain"
},
/turf/open/floor/plasteel,
/area/ruin/space/djstation)
"gt" = (
/obj/effect/turf_decal/loading_area{
dir = 8;
icon_state = "drain";
name = "drain"
},
/turf/open/floor/plating,
/area/ruin/space/djstation)
"gS" = (
/obj/effect/turf_decal/loading_area{
dir = 6;
@@ -478,10 +548,100 @@
"mU" = (
/turf/open/floor/catwalk_floor,
/area/ruin/space/djstation)
"qQ" = (
/obj/effect/turf_decal/loading_area{
icon_state = "drain";
name = "drain";
dir = 1
},
/obj/effect/turf_decal/loading_area{
dir = 8;
icon_state = "drain";
name = "drain"
},
/turf/open/floor/plating,
/area/ruin/space/djstation)
"rp" = (
/obj/effect/turf_decal/loading_area{
dir = 4;
icon_state = "steel_decals_central5";
name = "drain"
},
/turf/open/floor/plasteel,
/area/ruin/space/djstation)
"tY" = (
/obj/effect/turf_decal/loading_area{
dir = 6;
icon_state = "steel_decals6"
},
/obj/effect/turf_decal/loading_area{
dir = 5;
icon_state = "steel_decals6"
},
/obj/item/cigbutt,
/obj/item/cigbutt{
pixel_x = -6;
pixel_y = -23
},
/obj/item/cigbutt{
pixel_x = -10;
pixel_y = -15
},
/turf/open/floor/plasteel,
/area/ruin/space/djstation)
"uB" = (
/obj/effect/turf_decal/loading_area{
dir = 1;
icon_state = "steel_decals_central5";
name = "drain"
},
/turf/open/floor/plasteel,
/area/ruin/space/djstation)
"vh" = (
/obj/machinery/telecomms/relay/preset/ruskie,
/turf/open/floor/catwalk_floor,
/area/ruin/space/djstation)
"xf" = (
/obj/effect/turf_decal/tile/bar{
dir = 8
},
/obj/effect/turf_decal/tile/bar{
dir = 4
},
/obj/effect/turf_decal/loading_area{
dir = 5;
icon_state = "steel_panel";
name = "steel pannel"
},
/turf/open/floor/plasteel/checker,
/area/ruin/space/djstation)
"xm" = (
/obj/effect/turf_decal/loading_area{
dir = 4;
icon_state = "drain";
name = "drain"
},
/turf/open/floor/plating,
/area/ruin/space/djstation)
"zi" = (
/obj/effect/turf_decal/tile/bar{
dir = 8
},
/obj/effect/turf_decal/tile/bar{
dir = 4
},
/obj/effect/turf_decal/loading_area{
dir = 9;
icon_state = "steel_panel";
name = "steel pannel"
},
/obj/effect/turf_decal/loading_area{
dir = 4;
icon_state = "steel_panel";
name = "drain"
},
/turf/open/floor/plasteel/checker,
/area/ruin/space/djstation)
"zm" = (
/obj/item/radio/intercom{
broadcasting = 1;
@@ -493,6 +653,29 @@
},
/turf/open/floor/plasteel,
/area/ruin/space/djstation)
"zw" = (
/obj/effect/turf_decal/loading_area{
dir = 6;
icon_state = "steel_decals6"
},
/obj/effect/turf_decal/loading_area{
dir = 5;
icon_state = "steel_decals6"
},
/obj/item/cigbutt{
pixel_x = 7;
pixel_y = -18
},
/turf/open/floor/plasteel,
/area/ruin/space/djstation)
"BX" = (
/obj/effect/turf_decal/loading_area{
dir = 8;
icon_state = "steel_decals_central5";
name = "drain"
},
/turf/open/floor/plasteel,
/area/ruin/space/djstation)
"Co" = (
/obj/machinery/door/airlock/external{
name = "Ruskie DJ Station"
@@ -504,17 +687,38 @@
/area/ruin/space/djstation)
"Kw" = (
/obj/structure/table,
/obj/item/export/bottle/vodka{
pixel_x = -6;
pixel_y = 10
},
/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{
pixel_x = 6;
pixel_y = -6
},
/turf/open/floor/plasteel/dark,
/area/ruin/space/djstation)
"MQ" = (
/obj/effect/turf_decal/loading_area{
dir = 1;
icon_state = "caution_white";
name = "drain"
},
/turf/open/floor/plasteel/dark,
/area/ruin/space/djstation)
"MS" = (
/obj/effect/turf_decal/loading_area{
dir = 8;
icon_state = "drain";
name = "drain"
},
/turf/open/floor/plating,
/area/ruin/space/djstation)
"OS" = (
/obj/effect/turf_decal/loading_area{
icon_state = "drain";
name = "drain";
dir = 1
dir = 1;
icon_state = "delivery";
name = "drain"
},
/turf/open/floor/plasteel/dark,
/turf/open/floor/plating,
/area/ruin/space/djstation)
"To" = (
/obj/item/radio/intercom{
@@ -526,6 +730,14 @@
pixel_y = -14;
pixel_x = -12
},
/obj/item/cigbutt{
pixel_x = 3;
pixel_y = -6
},
/obj/item/cigbutt{
pixel_x = -17;
pixel_y = 8
},
/turf/open/floor/plasteel,
/area/ruin/space/djstation)
"Xy" = (
@@ -597,8 +809,8 @@ ac
ab
aa
af
aA
aA
ec
zi
aN
af
ae
@@ -622,8 +834,8 @@ ac
ab
aa
af
aA
aA
aH
xf
aO
af
af
@@ -648,8 +860,8 @@ ab
aa
af
aA
aA
aA
xf
aO
aX
ba
be
@@ -689,16 +901,16 @@ ac
ac
ac
ag
ah
ah
ah
qQ
gt
gt
am
ah
gt
ap
af
au
aG
aG
BX
aG
gS
af
@@ -725,7 +937,7 @@ av
bZ
Kw
aP
gS
zw
bb
bg
af
@@ -746,11 +958,11 @@ an
ao
ar
at
aG
uB
zm
aI
aQ
gS
tY
aw
Xy
af
@@ -769,11 +981,11 @@ mU
ak
mU
mU
ah
MS
af
ax
To
aH
aQ
aR
gS
bc
@@ -789,22 +1001,22 @@ ac
ac
ac
ag
ah
ah
dh
xm
al
ah
ah
xm
xm
as
af
ay
aG
aG
rp
aG
aY
bd
Xy
MQ
bi
ah
OS
Co
"}
(12,1,1) = {"
@@ -848,7 +1060,7 @@ ab
aa
af
aB
aK
Xy
aS
af
aa
+1 -28
View File
@@ -1,7 +1,7 @@
// tgstation-server DMAPI
// The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in IETF RFC 2119.
#define TGS_DMAPI_VERSION "7.3.1"
#define TGS_DMAPI_VERSION "7.3.0"
// All functions and datums outside this document are subject to change with any version and should not be relied on.
@@ -58,11 +58,6 @@
#define TGS_FILE2TEXT_NATIVE file2text
#endif
// SpacemanDMM compatibility
#ifndef CAN_BE_REDEFINED
#define CAN_BE_REDEFINED(X)
#endif
// EVENT CODES
/// Before a reboot mode change, extras parameters are the current and new reboot mode enums.
@@ -165,7 +160,6 @@
* * http_handler - Optional user defined [/datum/tgs_http_handler].
*/
/world/proc/TgsNew(datum/tgs_event_handler/event_handler, minimum_required_security_level = TGS_SECURITY_ULTRASAFE, datum/tgs_http_handler/http_handler)
CAN_BE_REDEFINED(TRUE)
return
/**
@@ -176,7 +170,6 @@
* This function should not be called before ..() in [/world/proc/New].
*/
/world/proc/TgsInitializationComplete()
CAN_BE_REDEFINED(TRUE)
return
/// Consumers MUST run this macro at the start of [/world/proc/Topic].
@@ -184,7 +177,6 @@
/// Consumers MUST call this as late as possible in [world/proc/Reboot] (BEFORE ..()).
/world/proc/TgsReboot()
CAN_BE_REDEFINED(TRUE)
return
// DATUM DEFINITIONS
@@ -222,7 +214,6 @@
* Returns [TRUE]/[FALSE] based on if the [/datum/tgs_version] contains wildcards.
*/
/datum/tgs_version/proc/Wildcard()
CAN_BE_REDEFINED(TRUE)
return
/**
@@ -231,7 +222,6 @@
* other_version - The [/datum/tgs_version] to compare against.
*/
/datum/tgs_version/proc/Equals(datum/tgs_version/other_version)
CAN_BE_REDEFINED(TRUE)
return
/// Represents a merge of a GitHub pull request.
@@ -469,19 +459,16 @@
/// Returns the maximum supported [/datum/tgs_version] of the DMAPI.
/world/proc/TgsMaximumApiVersion()
CAN_BE_REDEFINED(TRUE)
return
/// Returns the minimum supported [/datum/tgs_version] of the DMAPI.
/world/proc/TgsMinimumApiVersion()
CAN_BE_REDEFINED(TRUE)
return
/**
* Returns [TRUE] if DreamDaemon was launched under TGS, the API matches, and was properly initialized. [FALSE] will be returned otherwise.
*/
/world/proc/TgsAvailable()
CAN_BE_REDEFINED(TRUE)
return
// No function below this succeeds if it TgsAvailable() returns FALSE or if TgsNew() has yet to be called.
@@ -493,7 +480,6 @@
* If TGS has not requested a [TGS_REBOOT_MODE_SHUTDOWN] DreamDaemon will be launched again.
*/
/world/proc/TgsEndProcess()
CAN_BE_REDEFINED(TRUE)
return
/**
@@ -504,7 +490,6 @@
* admin_only: If [TRUE], message will be sent to admin connected chats. Vice-versa applies.
*/
/world/proc/TgsTargetedChatBroadcast(datum/tgs_message_content/message, admin_only = FALSE)
CAN_BE_REDEFINED(TRUE)
return
/**
@@ -515,7 +500,6 @@
* user: The [/datum/tgs_chat_user] to PM.
*/
/world/proc/TgsChatPrivateMessage(datum/tgs_message_content/message, datum/tgs_chat_user/user)
CAN_BE_REDEFINED(TRUE)
return
/**
@@ -526,52 +510,42 @@
* channels - Optional list of [/datum/tgs_chat_channel]s to restrict the message to.
*/
/world/proc/TgsChatBroadcast(datum/tgs_message_content/message, list/channels = null)
CAN_BE_REDEFINED(TRUE)
return
/// Returns the current [/datum/tgs_version] of TGS if it is running the server, null otherwise. This function may sleep if the call to [/world/proc/TgsNew] is sleeping!
/world/proc/TgsVersion()
CAN_BE_REDEFINED(TRUE)
return
/// Returns the running engine type
/world/proc/TgsEngine()
CAN_BE_REDEFINED(TRUE)
return
/// Returns the current [/datum/tgs_version] of the DMAPI being used if it was activated, null otherwise. This function may sleep if the call to [/world/proc/TgsNew] is sleeping!
/world/proc/TgsApiVersion()
CAN_BE_REDEFINED(TRUE)
return
/// Returns the name of the TGS instance running the game if TGS is present, null otherwise. This function may sleep if the call to [/world/proc/TgsNew] is sleeping!
/world/proc/TgsInstanceName()
CAN_BE_REDEFINED(TRUE)
return
/// Return the current [/datum/tgs_revision_information] of the running server if TGS is present, null otherwise. This function may sleep if the call to [/world/proc/TgsNew] is sleeping!
/world/proc/TgsRevision()
CAN_BE_REDEFINED(TRUE)
return
/// Returns the current BYOND security level as a TGS_SECURITY_ define if TGS is present, null otherwise. This function may sleep if the call to [/world/proc/TgsNew] is sleeping!
/world/proc/TgsSecurityLevel()
CAN_BE_REDEFINED(TRUE)
return
/// Returns the current BYOND visibility level as a TGS_VISIBILITY_ define if TGS is present, null otherwise. Requires TGS to be using interop API version 5 or higher otherwise the string "___unimplemented" wil be returned. This function may sleep if the call to [/world/proc/TgsNew] is sleeping!
/world/proc/TgsVisibility()
CAN_BE_REDEFINED(TRUE)
return
/// Returns a list of active [/datum/tgs_revision_information/test_merge]s if TGS is present, null otherwise. This function may sleep if the call to [/world/proc/TgsNew] is sleeping!
/world/proc/TgsTestMerges()
CAN_BE_REDEFINED(TRUE)
return
/// Returns a list of connected [/datum/tgs_chat_channel]s if TGS is present, null otherwise. This function may sleep if the call to [/world/proc/TgsNew] is sleeping!
/world/proc/TgsChatChannelInfo()
CAN_BE_REDEFINED(TRUE)
return
/**
@@ -582,7 +556,6 @@
* wait_for_completion - If set, this function will not return until the event has run to completion.
*/
/world/proc/TgsTriggerEvent(event_name, list/parameters, wait_for_completion = FALSE)
CAN_BE_REDEFINED(TRUE)
return
/*
+9 -2
View File
@@ -111,12 +111,18 @@ Behavior that's still missing from this component that original food items had t
. = COMPONENT_ITEM_NO_ATTACK //Point of no return I suppose
var/obj/item/clothing/neck/petcollar/locked/bluespace_collar_transmitter/K = human_eater.wear_neck //GS13 - Bluespace collar
if(eater == feeder)//If you're eating it yourself.
if(!do_mob(feeder, eater, eat_time)) //Gotta pass the minimal eat time
return
var/eatverb = pick(eatverbs)
if(junkiness && eater.satiety < -150 && eater.nutrition > NUTRITION_LEVEL_STARVING + 50 && !HAS_TRAIT(eater, TRAIT_VORACIOUS))
//GS13 - Bluespace collar addition
if (istype(K, /obj/item/clothing/neck/petcollar/locked/bluespace_collar_transmitter) && K.islinked())
eater.visible_message("<span class='notice'>[eater] effortlessly [eatverb]s \the [parent].</span>", "<span class='notice'>You effortlessly [eatverb] \the [parent], feeling as if you haven't eaten anything at all.</span>")
//GS13 - End
else if(junkiness && eater.satiety < -150 && eater.nutrition > NUTRITION_LEVEL_STARVING + 50 && !HAS_TRAIT(eater, TRAIT_VORACIOUS))
to_chat(eater, "<span class='warning'>You don't feel like eating any more junk food at the moment!</span>")
return
else if(fullness <= FULLNESS_LEVEL_HALF_FULL)
eater.visible_message("<span class='notice'>[eater] hungrily [eatverb]s \the [parent], gobbling it down!</span>", "<span class='notice'>You hungrily [eatverb] \the [parent], gobbling it down!</span>")
@@ -147,7 +153,8 @@ Behavior that's still missing from this component that original food items had t
eater.visible_message("<span class='danger'>[feeder] forces [eater] to eat [parent]!</span>", \
"<span class='userdanger'>[feeder] forces you to eat [parent]!</span>")
TakeBite(eater, feeder)
if (!(istype(K, /obj/item/clothing/neck/petcollar/locked/bluespace_collar_transmitter) && K.transpose_food(src, eater, feeder)))
TakeBite(eater, feeder)
///This function lets the eater take a bite and transfers the reagents to the eater.
/datum/component/edible/proc/TakeBite(mob/living/eater, mob/living/feeder)
@@ -36,7 +36,7 @@ GLOBAL_LIST_EMPTY(blob_nodes)
var/autoplace_max_time = 3600 //six minutes, as long as should be needed
var/list/blobs_legit = list()
var/max_count = 0 //The biggest it got before death
var/blobwincount = 400
var/blobwincount = 800 //GS13 - doubled the tile count from 400 to 800
var/victory_in_progress = FALSE
var/rerolling = FALSE
+23 -15
View File
@@ -30,9 +30,17 @@
if (!is_drainable())
to_chat(user, "<span class='warning'>[src]'s lid hasn't been opened!</span>")
return FALSE
//GS13 - Bluespace collar addition
var/obj/item/clothing/neck/petcollar/locked/bluespace_collar_transmitter/K = 0
if(istype(M, /mob/living/carbon/human))
var/mob/living/carbon/human/human_eater = M
K = human_eater.wear_neck
if(M == user)
user.visible_message("<span class='notice'>[user] swallows a gulp of [src].</span>", "<span class='notice'>You swallow a gulp of [src].</span>")
if (istype(K, /obj/item/clothing/neck/petcollar/locked/bluespace_collar_transmitter) && K.islinked())
user.visible_message("<span class='notice'>[user] effortlessly swallows a gulp of [src].</span>", "<span class='notice'>You effortlessly swallow a gulp of [src].</span>")
//GS13 - End
else
user.visible_message("<span class='notice'>[user] swallows a gulp of [src].</span>", "<span class='notice'>You swallow a gulp of [src].</span>")
else
M.visible_message("<span class='danger'>[user] attempts to feed the contents of [src] to [M].</span>", "<span class='userdanger'>[user] attempts to feed the contents of [src] to [M].</span>")
if(!do_mob(user, M))
@@ -41,19 +49,19 @@
return // The drink might be empty after the delay, such as by spam-feeding
M.visible_message("<span class='danger'>[user] feeds the contents of [src] to [M].</span>", "<span class='userdanger'>[user] feeds the contents of [src] to [M].</span>")
log_combat(user, M, "fed", reagents.log_list())
var/fraction = min(gulp_size/reagents.total_volume, 1)
checkLiked(fraction, M)
reagents.reaction(M, INGEST, fraction)
reagents.trans_to(M, gulp_size, log = TRUE)
//GS13 Port - Fullness
if(iscarbon(M))
var/mob/living/carbon/human/human_eater = M
if(HAS_TRAIT(M, TRAIT_VORACIOUS))
human_eater.fullness += min(gulp_size * 0.67, reagents.total_volume * 0.67)
else
human_eater.fullness += min(gulp_size, reagents.total_volume) // GS13 drinks will fill your stomach
playsound(M.loc,'sound/items/drink.ogg', rand(10,50), 1)
if (!(istype(K, /obj/item/clothing/neck/petcollar/locked/bluespace_collar_transmitter) && K.transpose_drink(src, M))) //If wearing a BS collar, use BS proc. If not, continue as normal
var/fraction = min(gulp_size/reagents.total_volume, 1)
checkLiked(fraction, M)
reagents.reaction(M, INGEST, fraction)
reagents.trans_to(M, gulp_size, log = TRUE)
//GS13 Port - Fullness
if(iscarbon(M))
var/mob/living/carbon/human/human_eater = M
if(HAS_TRAIT(M, TRAIT_VORACIOUS))
human_eater.fullness += min(gulp_size * 0.67, reagents.total_volume * 0.67)
else
human_eater.fullness += min(gulp_size, reagents.total_volume) // GS13 drinks will fill your stomach
playsound(M.loc,'sound/items/drink.ogg', rand(10,50), 1)
return TRUE
/obj/item/reagent_containers/food/drinks/CheckAttackCooldown(mob/user, atom/target)
+31 -23
View File
@@ -122,9 +122,13 @@ All foods are distributed among various categories. Use common sense.
var/mob/living/carbon/human/human_eater = M
if(istype(human_eater))
fullness = human_eater.fullness
var/obj/item/clothing/neck/petcollar/locked/bluespace_collar_transmitter/K = human_eater.wear_neck //GS13 - Bluespace collar
if(M == user) //If you're eating it yourself.
if(junkiness && M.satiety < -150 && M.nutrition > NUTRITION_LEVEL_STARVING + 50 )
//GS13 - Bluespace collar addition
if (istype(K, /obj/item/clothing/neck/petcollar/locked/bluespace_collar_transmitter) && K.islinked()) //Feeding with a collar ignores fullness or junkness
user.visible_message("<span class='notice'>[user] effortlessly [eatverb]s \the [src].</span>", "<span class='notice'>You effortlessly [eatverb] \the [src], feeling as if you haven't eaten anything at all.</span>")
//GS13 - End
else if(junkiness && M.satiety < -150 && M.nutrition > NUTRITION_LEVEL_STARVING + 50 )
to_chat(M, "<span class='notice'>You don't feel like eating any more junk food at the moment.</span>")
return FALSE
else if(fullness <= 50)
@@ -142,7 +146,12 @@ All foods are distributed among various categories. Use common sense.
M.SetNextAction(CLICK_CD_MELEE * 0.5) //nom nom nom
else
if(!isbrain(M)) //If you're feeding it to someone else.
if(fullness <= (FULLNESS_LEVEL_BEEG * (1 + M.overeatduration / 1000)))
//GS13 - Bluespace collar addition
if (istype(K, /obj/item/clothing/neck/petcollar/locked/bluespace_collar_transmitter) && K.islinked()) //Feeding with a collar ignores fullness
M.visible_message("<span class='danger'>[user] attempts to feed [M] [src].</span>", \
"<span class='userdanger'>[user] attempts to feed you [src].</span>")
//GS13 - End
else if(fullness <= (FULLNESS_LEVEL_BEEG * (1 + M.overeatduration / 1000)))
M.visible_message("<span class='danger'>[user] attempts to feed [M] [src].</span>", \
"<span class='userdanger'>[user] attempts to feed [M] [src].</span>")
else
@@ -159,27 +168,26 @@ All foods are distributed among various categories. Use common sense.
else
to_chat(user, "<span class='warning'>[M] doesn't seem to have a mouth!</span>")
return
if (!(istype(K, /obj/item/clothing/neck/petcollar/locked/bluespace_collar_transmitter) && K.transpose_food(src, M, user))) //If wearing a BS collar, use BS proc. If not, continue as normal
if(reagents) //Handle ingestion of the reagent.
if(M.satiety > -200)
M.satiety -= junkiness
playsound(M.loc,'sound/items/eatfood.ogg', rand(10,50), 1)
var/bitevolume = 1
if(HAS_TRAIT(M, TRAIT_VORACIOUS))
bitevolume = bitevolume * 0.67
if(istype(human_eater))
human_eater.fullness += bitevolume;
if(reagents) //Handle ingestion of the reagent.
if(M.satiety > -200)
M.satiety -= junkiness
playsound(M.loc,'sound/items/eatfood.ogg', rand(10,50), 1)
var/bitevolume = 1
if(HAS_TRAIT(M, TRAIT_VORACIOUS))
bitevolume = bitevolume * 0.67
human_eater.fullness += bitevolume;
if(istype(human_eater))
human_eater.fullness += bitevolume;
if(reagents.total_volume)
SEND_SIGNAL(src, COMSIG_FOOD_EATEN, M, user)
var/fraction = min(bitesize / reagents.total_volume, 1)
reagents.reaction(M, INGEST, fraction)
reagents.trans_to(M, bitesize, log = TRUE)
bitecount++
On_Consume(M)
checkLiked(fraction, M)
return TRUE
if(reagents.total_volume)
SEND_SIGNAL(src, COMSIG_FOOD_EATEN, M, user)
var/fraction = min(bitesize / reagents.total_volume, 1)
reagents.reaction(M, INGEST, fraction)
reagents.trans_to(M, bitesize, log = TRUE)
bitecount++
On_Consume(M)
checkLiked(fraction, M)
return TRUE
return FALSE
@@ -298,6 +298,7 @@
desc = "A cube of shining metal, four inches to a side and covered in shallow grooves. It has an IPC serial number engraved on the top. It is usually slotted into the head of synthetic crewmembers."
icon = 'icons/obj/surgery.dmi'
icon_state = "posibrain-ipc"
organ_flags = ORGAN_SYNTHETIC // GS13 = Fixes IPC organs decaying, we hope.
/obj/item/organ/brain/slime
name = "slime nucleus"
@@ -1,6 +1,6 @@
/mob/living/carbon/alien/humanoid/royal
//Common stuffs for Praetorian and Queen
icon = 'icons/mob/alienqueen.dmi'
icon = 'GainStation13/icons/mob/alienqueen.dmi' //GS13 - swapping out xeno queen sprites to be more in tune with Geiger's designs
status_flags = 0
unique_name = 0
pixel_x = -16
@@ -79,6 +79,12 @@
if(prob(chew_probability))
var/turf/open/floor/F = get_turf(src)
// GS13 - EDIT
if(istype(F, /turf/open/floor/catwalk_floor))
var/turf/open/floor/catwalk_floor/catwalk = F
if(catwalk.covered)
return
// GS13 - END EDIT
if(istype(F) && !F.intact)
var/obj/structure/cable/C = locate() in F
if(C && prob(15))
@@ -149,7 +149,7 @@ Borg Hypospray
/obj/item/reagent_containers/borghypo/hacked
icon_state = "borghypo_s"
reagent_ids = list (/datum/reagent/toxin/acid, /datum/reagent/toxin/mutetoxin, /datum/reagent/toxin/cyanide, /datum/reagent/toxin/sodium_thiopental, /datum/reagent/toxin/heparin, /datum/reagent/toxin/lexorin)
reagent_ids = list (/datum/reagent/toxin/acid, /datum/reagent/toxin/mutetoxin, /datum/reagent/toxin/cyanide, /datum/reagent/toxin/sodium_thiopental, /datum/reagent/toxin/heparin, /datum/reagent/toxin/lexorin, /datum/reagent/consumable/lipoifier) //GS13 EDIT, Lipoifier
accepts_reagent_upgrades = FALSE
/obj/item/reagent_containers/borghypo/clown
@@ -248,7 +248,7 @@ Borg Shaker
charge_cost = 20 //Lots of reagents all regenerating at once, so the charge cost is lower. They also regenerate faster.
recharge_time = 3
accepts_reagent_upgrades = FALSE
reagent_ids = list(/datum/reagent/toxin/fakebeer, /datum/reagent/consumable/ethanol/fernet)
reagent_ids = list(/datum/reagent/toxin/fakebeer, /datum/reagent/consumable/ethanol/fernet, /datum/reagent/consumable/lipoifier) //GS13 EDIT LIPOIFIER
/obj/item/reagent_containers/borghypo/peace
name = "Peace Hypospray"
@@ -261,7 +261,7 @@ Borg Shaker
icon_state = "borghypo_s"
reagent_ids = list(/datum/reagent/peaceborg_confuse, /datum/reagent/peaceborg_tire, /datum/reagent/pax/peaceborg,
/datum/reagent/toxin/staminatoxin,/datum/reagent/toxin/sulfonal,/datum/reagent/toxin/sodium_thiopental,
/datum/reagent/toxin/cyanide,/datum/reagent/toxin/fentanyl)
/datum/reagent/toxin/cyanide,/datum/reagent/toxin/fentanyl, /datum/reagent/consumable/lipoifier) //GS13 EDIT adds lipoifier
accepts_reagent_upgrades = FALSE
/obj/item/reagent_containers/borghypo/epi
@@ -23,7 +23,11 @@
if(!reagents || !reagents.total_volume)
to_chat(user, "<span class='warning'>[src] is empty!</span>")
return
//GS13 - Bluespace collar addition
var/obj/item/clothing/neck/petcollar/locked/bluespace_collar_transmitter/K = 0
if(istype(M, /mob/living/carbon/human))
var/mob/living/carbon/human/human_eater = M
K = human_eater.wear_neck
if(istype(M))
if(user.a_intent == INTENT_HARM)
M.visible_message("<span class='danger'>[user] splashes the contents of [src] onto [M]!</span>", \
@@ -57,11 +61,15 @@
log_reagent("INGESTION: FED BY: [key_name(user)] (loc [user.loc] at [AREACOORD(UT)]) -> [key_name(M)] (loc [M.loc] at [AREACOORD(MT)]) - [reagents.log_list()]")
else
var/turf/T = get_turf(user)
to_chat(user, "<span class='notice'>You swallow a gulp of [src].</span>")
if (istype(K, /obj/item/clothing/neck/petcollar/locked/bluespace_collar_transmitter) && K.islinked())
user.visible_message("<span class='notice'>[user] effortlessly swallows a gulp of [src].</span>", "<span class='notice'>You effortlessly swallow a gulp of [src].</span>")
else
to_chat(user, "<span class='notice'>You swallow a gulp of [src].</span>")
log_reagent("INGESTION: SELF: [key_name(user)] (loc [user.loc] at [AREACOORD(T)]) - [reagents.log_list()]")
var/fraction = min(5/reagents.total_volume, 1)
reagents.reaction(M, INGEST, fraction)
addtimer(CALLBACK(reagents, TYPE_PROC_REF(/datum/reagents, trans_to), M, 5, null, null, null, self_fed? "self swallowed" : "fed by [user]"), 5)
if (!(istype(K, /obj/item/clothing/neck/petcollar/locked/bluespace_collar_transmitter) && K.transpose_container(reagents, fraction, M, user))) //If wearing a BS collar, use BS proc. If not, continue as normal
reagents.reaction(M, INGEST, fraction)
addtimer(CALLBACK(reagents, TYPE_PROC_REF(/datum/reagents, trans_to), M, 5, null, null, null, self_fed? "self swallowed" : "fed by [user]"), 5)
playsound(M.loc,'sound/items/drink.ogg', rand(10,50), 1)
/obj/item/reagent_containers/glass/afterattack(obj/target, mob/user, proximity)
+1
View File
@@ -428,6 +428,7 @@
/obj/item/organ/eyes/ipc
name = "ipc eyes"
icon_state = "cybernetic_eyeballs"
organ_flags = ORGAN_SYNTHETIC // GS13 = Fixes IPC organs decaying, we hope.
/obj/item/organ/eyes/ipc/emp_act(severity)
. = ..()
+1
View File
@@ -263,6 +263,7 @@
name = "IPC heart"
desc = "An electronic pump that regulates hydraulic functions, the electronics have EMP shielding."
icon_state = "heart-c"
organ_flags = ORGAN_SYNTHETIC // GS13 = Fixes IPC organs decaying, we hope.
/obj/item/organ/heart/freedom
name = "heart of freedom"
+1
View File
@@ -96,6 +96,7 @@
/obj/item/organ/liver/ipc
name = "reagent processing liver"
icon_state = "liver-c"
organ_flags = ORGAN_SYNTHETIC // GS13 = Fixes IPC organs decaying, we hope.
/obj/item/organ/liver/cybernetic
name = "basic cybernetic liver"
+1
View File
@@ -130,6 +130,7 @@
/obj/item/organ/stomach/ipc
name = "ipc cell"
icon_state = "stomach-ipc"
organ_flags = ORGAN_SYNTHETIC // GS13 = Fixes IPC organs decaying, we hope.
/obj/item/organ/stomach/ipc/on_life()
. = ..()
@@ -109,7 +109,7 @@
/datum/gear/donator/white_eyepatch_cabal
name = "Cabal's Eyepatch"
category = LOADOUT_CATEGORY_DONATOR
path = /obj/item/clothing/glasses/eyepatch/cabal
path = /obj/item/clothing/glasses/eyepatch/white/cabal
ckeywhitelist = list("spess_lizurd", "SPESS LIZURD", "spess lizurd", "SPESS_LIZURD", "spesslizurd", "sonoida")
/datum/gear/white_eyepatch //accessible to anyone, at donator's request
@@ -135,9 +135,19 @@
path = /obj/item/toy/plush/gs13/crowbars
ckeywhitelist = list("M16nPregnant", "m16npregnant" )
/datum/gear/donator/sharky_plush
name = "Sharky Plush"
category = LOADOUT_CATEGORY_DONATOR
path = /obj/item/toy/plush/gs13/sharky
ckeywhitelist = list("drawntothicc", "Drawntothicc", "DrawnToThicc", "DRAWNTOTHICC")
/datum/gear/donator/sams_welder
name = "Sam's Unlucky Welder"
category = LOADOUT_CATEGORY_DONATOR
path = /obj/item/weldingtool/bronze
ckeywhitelist = list("almaniak", "Almaniak", "AlManiak")
/datum/gear/suit/labcoat
name = "Labcoat"
category = LOADOUT_CATEGORY_SUIT
path = /obj/item/clothing/suit/toggle/labcoat
+1
View File
@@ -3927,6 +3927,7 @@
#include "GainStation13\code\__HELPERS\transformation.dm"
#include "GainStation13\code\clothing\accessory.dm"
#include "GainStation13\code\clothing\backpacks.dm"
#include "GainStation13\code\clothing\bluespace_collar.dm"
#include "GainStation13\code\clothing\calorite_collar.dm"
#include "GainStation13\code\clothing\fat_mask.dm"
#include "GainStation13\code\clothing\gloves.dm"