Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 7f156083f5 | |||
| 39a425e2cd | |||
| 050dcb5cc1 | |||
| f82de944b3 |
@@ -8,18 +8,18 @@ on:
|
||||
- master
|
||||
jobs:
|
||||
run_linters:
|
||||
if: ( !contains(github.event.head_commit.message, '[ci skip]') )
|
||||
if: "!contains(github.event.head_commit.message, '[ci skip]')"
|
||||
name: Run Linters
|
||||
runs-on: ubuntu-22.04
|
||||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v2
|
||||
- name: Restore SpacemanDMM cache
|
||||
uses: actions/cache@v4
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ~/SpacemanDMM
|
||||
key: ${{ runner.os }}-spacemandmm-${{ secrets.CACHE_PURGE_KEY }}
|
||||
- name: Restore Yarn cache
|
||||
uses: actions/cache@v4
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: tgui/.yarn/cache
|
||||
key: ${{ runner.os }}-yarn-${{ secrets.CACHE_PURGE_KEY }}-${{ hashFiles('tgui/yarn.lock') }}
|
||||
@@ -29,7 +29,7 @@ jobs:
|
||||
${{ runner.os }}-
|
||||
- name: Install Tools
|
||||
run: |
|
||||
pip3 install setuptools --upgrade
|
||||
pip3 install setuptools
|
||||
bash tools/ci/install_node.sh
|
||||
bash tools/ci/install_spaceman_dmm.sh dreamchecker
|
||||
tools/bootstrap/python -c ''
|
||||
@@ -51,13 +51,13 @@ jobs:
|
||||
outputFile: output-annotations.txt
|
||||
|
||||
compile_all_maps:
|
||||
if: ( !contains(github.event.head_commit.message, '[ci skip]') )
|
||||
if: "!contains(github.event.head_commit.message, '[ci skip]')"
|
||||
name: Compile Maps
|
||||
runs-on: ubuntu-22.04
|
||||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v2
|
||||
- name: Restore BYOND cache
|
||||
uses: actions/cache@v4
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ~/BYOND
|
||||
key: ${{ runner.os }}-byond-${{ secrets.CACHE_PURGE_KEY }}
|
||||
@@ -66,10 +66,11 @@ jobs:
|
||||
bash tools/ci/install_byond.sh
|
||||
source $HOME/BYOND/byond/bin/byondsetup
|
||||
tools/build/build --ci dm -DCIBUILDING -DCITESTING -DALL_MAPS
|
||||
|
||||
run_all_tests:
|
||||
if: ( !contains(github.event.head_commit.message, '[ci skip]') )
|
||||
if: "!contains(github.event.head_commit.message, '[ci skip]')"
|
||||
name: Integration Tests
|
||||
runs-on: ubuntu-22.04
|
||||
runs-on: ubuntu-20.04
|
||||
services:
|
||||
mysql:
|
||||
image: mysql:latest
|
||||
@@ -79,14 +80,14 @@ jobs:
|
||||
- 3306
|
||||
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v2
|
||||
- name: Restore BYOND cache
|
||||
uses: actions/cache@v4
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ~/BYOND
|
||||
key: ${{ runner.os }}-byond-${{ secrets.CACHE_PURGE_KEY }}
|
||||
- name: Restore Yarn cache
|
||||
uses: actions/cache@v4
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: tgui/.yarn/cache
|
||||
key: ${{ runner.os }}-yarn-${{ secrets.CACHE_PURGE_KEY }}-${{ hashFiles('tgui/yarn.lock') }}
|
||||
@@ -103,6 +104,9 @@ jobs:
|
||||
mysql -u root -proot tg_ci_prefixed < SQL/tgstation_schema_prefixed.sql
|
||||
- name: Install rust-g
|
||||
run: |
|
||||
sudo dpkg --add-architecture i386
|
||||
sudo apt update || true
|
||||
sudo apt install -o APT::Immediate-Configure=false libssl1.1:i386
|
||||
bash tools/ci/install_rust_g.sh
|
||||
- name: Install auxmos
|
||||
run: |
|
||||
@@ -114,14 +118,15 @@ jobs:
|
||||
source $HOME/BYOND/byond/bin/byondsetup
|
||||
tools/build/build --ci -DCIBUILDING
|
||||
bash tools/ci/run_server.sh
|
||||
|
||||
test_windows:
|
||||
if: ( !contains(github.event.head_commit.message, '[ci skip]') )
|
||||
if: "!contains(github.event.head_commit.message, '[ci skip]')"
|
||||
name: Windows Build
|
||||
runs-on: windows-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v2
|
||||
- name: Restore Yarn cache
|
||||
uses: actions/cache@v4
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: tgui/.yarn/cache
|
||||
key: ${{ runner.os }}-yarn-${{ secrets.CACHE_PURGE_KEY }}-${{ hashFiles('tgui/yarn.lock') }}
|
||||
@@ -138,7 +143,7 @@ jobs:
|
||||
md deploy
|
||||
bash tools/deploy.sh ./deploy
|
||||
- name: Deploy artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: deploy
|
||||
path: deploy
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
name: Generate documentation
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
jobs:
|
||||
generate_documentation:
|
||||
if: "!contains(github.event.head_commit.message, '[ci skip]')"
|
||||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Setup cache
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ~/SpacemanDMM
|
||||
key: ${{ runner.os }}-spacemandmm-${{ secrets.CACHE_PURGE_KEY }}
|
||||
- name: Install SpacemanDMM
|
||||
run: bash tools/ci/install_spaceman_dmm.sh dmdoc
|
||||
- name: Generate documentation
|
||||
run: |
|
||||
~/dmdoc
|
||||
touch dmdoc/.nojekyll
|
||||
echo codedocs.citadel-station.net > dmdoc/CNAME
|
||||
- name: Deploy
|
||||
uses: JamesIves/github-pages-deploy-action@3.7.1
|
||||
with:
|
||||
BRANCH: gh-pages
|
||||
CLEAN: true
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
SINGLE_COMMIT: true
|
||||
FOLDER: dmdoc
|
||||
@@ -11,7 +11,7 @@ jobs:
|
||||
name: Update the TGS DMAPI
|
||||
steps:
|
||||
- name: Clone
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Branch
|
||||
run: |
|
||||
|
||||
@@ -18,6 +18,6 @@ linux_scripts:
|
||||
PreCompile.sh: tools/tgs4_scripts/PreCompile.sh
|
||||
# Same as above for Windows hosted servers
|
||||
windows_scripts:
|
||||
PreCompile.bat: tools/tgs4_scripts/PreCompile.bat
|
||||
PreCompile.bat: tools/tgs_scripts/PreCompile.bat
|
||||
# The security level the game should be run at
|
||||
security: Trusted
|
||||
|
||||
Vendored
-14
@@ -7,13 +7,6 @@
|
||||
"name": "Launch DreamSeeker",
|
||||
"preLaunchTask": "Build All",
|
||||
"dmb": "${workspaceFolder}/${command:CurrentDMB}"
|
||||
},
|
||||
{
|
||||
"type": "byond",
|
||||
"request": "launch",
|
||||
"name": "Launch DreamSeeker (TRACY)",
|
||||
"preLaunchTask": "Build All (TRACY)",
|
||||
"dmb": "${workspaceFolder}/${command:CurrentDMB}"
|
||||
},
|
||||
{
|
||||
"type": "byond",
|
||||
@@ -52,13 +45,6 @@
|
||||
"preLaunchTask": "Build All (LOWMEMORYMODE)",
|
||||
"dmb": "${workspaceFolder}/${command:CurrentDMB}",
|
||||
"dreamDaemon": true
|
||||
},
|
||||
{
|
||||
"type": "byond",
|
||||
"request": "launch",
|
||||
"name": "Launch DreamSeeker (LOWMEMORYMODE + TRACY)",
|
||||
"preLaunchTask": "Build All (LOWMEMORYMODE TRACY)",
|
||||
"dmb": "${workspaceFolder}/${command:CurrentDMB}"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
Vendored
-51
@@ -24,31 +24,6 @@
|
||||
"dependsOn": "dm: reparse",
|
||||
"label": "Build All"
|
||||
},
|
||||
{
|
||||
"type": "process",
|
||||
"command": "tools/build/build",
|
||||
"windows": {
|
||||
"command": ".\\tools\\build\\build.bat"
|
||||
},
|
||||
"options": {
|
||||
"env": {
|
||||
"DM_EXE": "${config:dreammaker.byondPath}"
|
||||
}
|
||||
},
|
||||
"problemMatcher": [
|
||||
"$dreammaker",
|
||||
"$tsc",
|
||||
"$eslint-stylish"
|
||||
],
|
||||
"group": {
|
||||
"kind": "build"
|
||||
},
|
||||
"dependsOn": "dm: reparse",
|
||||
"args": [
|
||||
"-DUSE_BYOND_TRACY"
|
||||
],
|
||||
"label": "Build All (TRACY)"
|
||||
},
|
||||
{
|
||||
"type": "process",
|
||||
"command": "tools/build/build",
|
||||
@@ -99,32 +74,6 @@
|
||||
],
|
||||
"label": "Build All (LOWMEMORYMODE)"
|
||||
},
|
||||
{
|
||||
"type": "process",
|
||||
"command": "tools/build/build",
|
||||
"windows": {
|
||||
"command": ".\\tools\\build\\build.bat"
|
||||
},
|
||||
"options": {
|
||||
"env": {
|
||||
"DM_EXE": "${config:dreammaker.byondPath}"
|
||||
}
|
||||
},
|
||||
"problemMatcher": [
|
||||
"$dreammaker",
|
||||
"$tsc",
|
||||
"$eslint-stylish"
|
||||
],
|
||||
"group": {
|
||||
"kind": "build"
|
||||
},
|
||||
"dependsOn": "dm: reparse",
|
||||
"args": [
|
||||
"-DLOWMEMORYMODE",
|
||||
"-DUSE_BYOND_TRACY"
|
||||
],
|
||||
"label": "Build All (LOWMEMORYMODE TRACY)"
|
||||
},
|
||||
{
|
||||
"type": "dreammaker",
|
||||
"dme": "tgstation.dme",
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
#define GAS_FAT "lipoifium"
|
||||
@@ -1,57 +0,0 @@
|
||||
/client/proc/breadify(atom/movable/target)
|
||||
var/obj/item/reagent_containers/food/snacks/store/bread/plain/funnyBread = new(get_turf(target))
|
||||
target.forceMove(funnyBread)
|
||||
|
||||
GLOBAL_LIST_EMPTY(transformation_animation_objects)
|
||||
/*
|
||||
* Creates animation that turns current icon into result appearance from top down.
|
||||
*
|
||||
* result_appearance - End result appearance/atom/image
|
||||
* time - Animation duration
|
||||
* transform_overlay - Appearance/atom/image of effect that moves along the animation - should be horizonatally centered
|
||||
* reset_after - If FALSE, filters won't be reset and helper vis_objects will not be removed after animation duration expires. Cleanup must be handled by the caller!
|
||||
*/
|
||||
/atom/movable/proc/transformation_animation(result_appearance,time = 3 SECONDS,transform_overlay,reset_after=TRUE)
|
||||
var/list/transformation_objects = GLOB.transformation_animation_objects[src] || list()
|
||||
//Disappearing part
|
||||
var/top_part_filter = filter(type="alpha",icon=icon('icons/effects/alphacolors.dmi',"white"),y=0)
|
||||
filters += top_part_filter
|
||||
var/filter_index = length(filters)
|
||||
animate(filters[filter_index],y=-32,time=time)
|
||||
//Appearing part
|
||||
var/obj/effect/overlay/appearing_part = new
|
||||
appearing_part.appearance = result_appearance
|
||||
appearing_part.appearance_flags |= KEEP_TOGETHER | KEEP_APART
|
||||
appearing_part.vis_flags = VIS_INHERIT_ID
|
||||
appearing_part.filters = filter(type="alpha",icon=icon('icons/effects/alphacolors.dmi',"white"),y=0,flags=MASK_INVERSE)
|
||||
animate(appearing_part.filters[1],y=-32,time=time)
|
||||
transformation_objects += appearing_part
|
||||
//Transform effect thing - todo make appearance passed in
|
||||
if(transform_overlay)
|
||||
var/obj/transform_effect = new
|
||||
transform_effect.appearance = transform_overlay
|
||||
transform_effect.vis_flags = VIS_INHERIT_ID
|
||||
transform_effect.pixel_y = 16
|
||||
transform_effect.alpha = 255
|
||||
transformation_objects += transform_effect
|
||||
animate(transform_effect,pixel_y=-16,time=time)
|
||||
animate(alpha=0)
|
||||
GLOB.transformation_animation_objects[src] = transformation_objects
|
||||
for(var/A in transformation_objects)
|
||||
vis_contents += A
|
||||
if(reset_after)
|
||||
addtimer(CALLBACK(src,.proc/_reset_transformation_animation,filter_index),time)
|
||||
/*
|
||||
* Resets filters and removes transformation animations helper objects from vis contents.
|
||||
*/
|
||||
/atom/movable/proc/_reset_transformation_animation(filter_index)
|
||||
var/list/transformation_objects = GLOB.transformation_animation_objects[src]
|
||||
for(var/A in transformation_objects)
|
||||
vis_contents -= A
|
||||
qdel(A)
|
||||
transformation_objects.Cut()
|
||||
GLOB.transformation_animation_objects -= src
|
||||
if(filters && length(filters) >= filter_index)
|
||||
filters -= filters[filter_index]
|
||||
//else
|
||||
// filters = null
|
||||
@@ -1,15 +0,0 @@
|
||||
// GS13 - Port CE Gloves
|
||||
/obj/item/clothing/gloves/color/yellow/ce //funky looking, basically combat gloves
|
||||
desc = "Special Insulated gloves with pricy thermal shielding normally only found in combat gloves."
|
||||
name = "Chief Engineer Insulated Gloves"
|
||||
icon = 'GainStation13/icons/obj/clothing/gloves.dmi'
|
||||
icon_state = "ce_insuls"
|
||||
item_state = "blackgloves"
|
||||
siemens_coefficient = 0
|
||||
permeability_coefficient = 0.05
|
||||
strip_delay = 80
|
||||
cold_protection = HANDS
|
||||
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
|
||||
heat_protection = HANDS
|
||||
max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
|
||||
resistance_flags = NONE
|
||||
@@ -4,6 +4,7 @@
|
||||
icon = 'GainStation13/icons/obj/clothing/haydee_modular.dmi'
|
||||
mob_overlay_icon = 'GainStation13/icons/obj/clothing/haydee_modular.dmi'
|
||||
icon_state = "haydee_helmet"
|
||||
item_state = "item_haydee_helmet"
|
||||
armor = list("melee" = 10, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 0, "bio" = 0, "rad" = 25, "fire" = 25, "acid" = 25)
|
||||
slowdown = 0
|
||||
mutantrace_variation = NONE
|
||||
@@ -12,12 +13,11 @@
|
||||
/obj/item/clothing/suit/space/hardsuit/engine/haydee
|
||||
name = "Haydee Suit"
|
||||
desc = "A strangely voluptous suit. Offers little to no protection. It also appears to have minor flab-compressing properties."
|
||||
icon = 'GainStation13/icons/obj/clothing/haydee_modular.dmi'
|
||||
mob_overlay_icon = 'GainStation13/icons/obj/clothing/haydee_modular.dmi'
|
||||
anthro_mob_worn_overlay = 'GainStation13/icons/obj/clothing/haydee_modular.dmi'
|
||||
icon_state = "haydee_suit1"
|
||||
item_state = "item_haydee"
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 25, "fire" = 5, "acid" = 5)
|
||||
armor = list("melee" = 10, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 10, "bio" = 0, "rad" = 25, "fire" = 25, "acid" = 25)
|
||||
allowed = list(/obj/item/flashlight, /obj/item/tank/internals)
|
||||
actions_types = list(/datum/action/item_action/toggle_helmet)
|
||||
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/engine/haydee
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
|
||||
/obj/item/clothing/glasses/hud/health/gar
|
||||
name = "gar health scanner HUD"
|
||||
desc = "When you're scared, that's all the more reason to move forward!"
|
||||
icon ='GainStation13/icons/obj/clothing/glasses.dmi'
|
||||
mob_overlay_icon = 'GainStation13/icons/mob/eyes.dmi'
|
||||
icon_state = "garh"
|
||||
item_state = "garh"
|
||||
force = 10
|
||||
throwforce = 10
|
||||
throw_speed = 4
|
||||
attack_verb = list("sliced")
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
sharpness = SHARP_POINTY
|
||||
@@ -1,9 +0,0 @@
|
||||
/datum/accent/kitty/modify_speech(list/speech_args)
|
||||
var/message = speech_args[SPEECH_MESSAGE]
|
||||
var/static/regex/taja_purr = new("r+", "g")
|
||||
var/static/regex/taja_puRR = new("R+", "g")
|
||||
if(message[1] != "*")
|
||||
message = taja_purr.Replace(message, "rrr")
|
||||
message = taja_puRR.Replace(message, "Rrr")
|
||||
speech_args[SPEECH_MESSAGE] = message
|
||||
return speech_args
|
||||
@@ -1,46 +0,0 @@
|
||||
|
||||
/datum/award/achievement/fat
|
||||
category = "Gluttony"
|
||||
icon = "basemisc"
|
||||
|
||||
//chemistry
|
||||
|
||||
/datum/award/achievement/fat/blob
|
||||
name = "Become a blob"
|
||||
desc = "You've gotten fat enough to become a blob!"
|
||||
database_id = GLUTTONY_BLOB
|
||||
|
||||
/datum/award/achievement/fat/milestone_one
|
||||
name = "Fatness Milestone One"
|
||||
desc = "Reach a BFI level of 10,000!"
|
||||
database_id = GLUTTONY_MILESTONE_ONE
|
||||
|
||||
/datum/award/achievement/fat/milestone_two
|
||||
name = "Fatness Milestone One"
|
||||
desc = "Reach a BFI level of 25,000!"
|
||||
database_id = GLUTTONY_MILESTONE_TWO
|
||||
|
||||
/datum/award/achievement/fat/milestone_three
|
||||
name = "Fatness Milestone Three"
|
||||
desc = "Reach a BFI level of 50,000!"
|
||||
database_id = GLUTTONY_MILESTONE_THREE
|
||||
|
||||
/datum/award/achievement/fat/milestone_four
|
||||
name = "Fatness Milestone Four"
|
||||
desc = "Reach a BFI level of 100,000!"
|
||||
database_id = GLUTTONY_MILESTONE_FOUR
|
||||
|
||||
/datum/award/achievement/fat/milestone_five
|
||||
name = "Fatness Milestone Five"
|
||||
desc = "Reach a BFI level of 500,000!"
|
||||
database_id = GLUTTONY_MILESTONE_FIVE
|
||||
|
||||
/datum/award/achievement/fat/milestone_six
|
||||
name = "Fatness Milestone Six"
|
||||
desc = "Reach a BFI level of 1,000,000!"
|
||||
database_id = GLUTTONY_MILESTONE_SIX
|
||||
|
||||
/datum/award/achievement/fat/milestone_seven
|
||||
name = "Fatness Milestone Seven"
|
||||
desc = "Reach a BFI level of 10,000,000!"
|
||||
database_id = GLUTTONY_MILESTONE_SEVEN
|
||||
@@ -1,31 +0,0 @@
|
||||
// GS miscellaneous recipes
|
||||
|
||||
/datum/crafting_recipe/industrial_feeding_tube
|
||||
name = "Industrial Feeding Tube"
|
||||
reqs = list(
|
||||
// /obj/machinery/iv_drip/feeding_tube = 1, //Removing this. Seems to be buggy with not-items used to craft
|
||||
/obj/item/stack/sheet/metal = 5,
|
||||
/obj/item/stack/sheet/plastic = 5,
|
||||
/obj/item/pipe = 2,
|
||||
/obj/item/stock_parts/matter_bin = 2
|
||||
)
|
||||
parts = list(
|
||||
/obj/item/stock_parts/matter_bin = 2
|
||||
)
|
||||
result = /obj/structure/disposaloutlet/industrial_feeding_tube
|
||||
tools = list(TOOL_WELDER, TOOL_WRENCH, TOOL_SCREWDRIVER)
|
||||
subcategory = CAT_MISCELLANEOUS
|
||||
category = CAT_MISCELLANEOUS
|
||||
|
||||
/datum/crafting_recipe/liberator // It's easy to craft, but it's not a good gun.
|
||||
name = "Liberator Pistol"
|
||||
reqs = list(
|
||||
/obj/item/stack/sheet/metal = 3,
|
||||
/obj/item/weaponcrafting/receiver = 1,
|
||||
/obj/item/ammo_casing/c10mm = 1,
|
||||
)
|
||||
|
||||
result = /obj/item/gun/ballistic/liberator
|
||||
tools = list(TOOL_WELDER, TOOL_SCREWDRIVER)
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
@@ -31,11 +31,3 @@
|
||||
suffix = "lavaland_surface_blueberryarea.dmm"
|
||||
allow_duplicates = TRUE
|
||||
cost = 0
|
||||
|
||||
/datum/map_template/ruin/lavaland/cozy_cabin //HS13 (I think?)
|
||||
name = "Cozy Cabin"
|
||||
id = "cozycabin"
|
||||
description = "A comfy lil cabin, amidst the barren hot landscape."
|
||||
suffix = "lavaland_surface_cozy_cabin.dmm"
|
||||
allow_duplicates = TRUE
|
||||
cost = 0
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
/datum/mood_event/fat_bad
|
||||
description = "<span class='warning'><B>I'm so fat...</B></span>\n"
|
||||
mood_change = -4
|
||||
|
||||
/datum/mood_event/fat_good
|
||||
description = "<span class='nicegreen'><B>I'm so fat!</B></span>\n"
|
||||
mood_change = 4
|
||||
|
||||
//GS13 Port
|
||||
/datum/mood_event/lewd_headpat
|
||||
description = "<span class='nicegreen'>I love headpats so much!</span>\n"
|
||||
mood_change = 3
|
||||
timeout = 2 MINUTES
|
||||
@@ -1,178 +0,0 @@
|
||||
/datum/mutation/human/adipohazard
|
||||
name = "Adipohazard"
|
||||
desc = "A mutation that causes swelling upon touching the mutated person."
|
||||
quality = POSITIVE
|
||||
text_gain_indication = "<span class='notice'>Everything around you feels soft...</span>"
|
||||
text_lose_indication = "<span class='notice'>The soft feeling around you disappears.</span>"
|
||||
difficulty = 14
|
||||
instability = 30
|
||||
power_coeff = 1
|
||||
var/fat_add = 2
|
||||
|
||||
/datum/mutation/human/adipohazard/on_life()
|
||||
. = ..()
|
||||
if(owner.pulledby != null && iscarbon(owner.pulledby))
|
||||
var/mob/living/carbon/C = owner.pulledby
|
||||
var/pwr = GET_MUTATION_POWER(src)
|
||||
C.adjust_fatness(get_fatness_bonus(owner) + (fat_add * pwr), FATTENING_TYPE_RADIATIONS)
|
||||
if(C.grab_state >= GRAB_AGGRESSIVE)
|
||||
C.adjust_fatness(get_fatness_bonus(owner) + ((fat_add * 2) * pwr), FATTENING_TYPE_RADIATIONS)
|
||||
if(prob(5))
|
||||
var/add_text = pick("You feel softer.", "[owner] feels warm to the touch", "It's so nice to touch [owner].", "You don't want to let go of [owner].")
|
||||
to_chat(C, "<span class='notice'>[add_text]</span>")
|
||||
if(owner.pulling != null && iscarbon(owner.pulling))
|
||||
var/mob/living/carbon/C = owner.pulling
|
||||
var/pwr = GET_MUTATION_POWER(src)
|
||||
C.adjust_fatness(get_fatness_bonus(owner) + (fat_add * pwr), FATTENING_TYPE_RADIATIONS)
|
||||
if(C.grab_state >= GRAB_AGGRESSIVE)
|
||||
C.adjust_fatness(get_fatness_bonus(owner) + ((fat_add * 2) * pwr), FATTENING_TYPE_RADIATIONS)
|
||||
if(prob(5))
|
||||
var/add_text = pick("You feel softer.", "[owner] feels warm to the touch", "It's so nice for [owner] to touch.", "You don't want [owner] to let go of you.")
|
||||
to_chat(C, "<span class='notice'>[add_text]</span>")
|
||||
|
||||
/datum/mutation/human/adipohazard/proc/get_fatness_bonus(mob/living/carbon/user)
|
||||
var/fatness_level = get_fatness_level_name(user.fatness)
|
||||
var/fatness_bonus = 0
|
||||
switch(fatness_level)
|
||||
if("Fat", "Fatter")
|
||||
fatness_bonus = 1
|
||||
if("Very Fat", "Obese")
|
||||
fatness_bonus = 2
|
||||
if("Very Obese", "Extremely Obese")
|
||||
fatness_bonus = 3
|
||||
if("Barely Mobile", "Immobile")
|
||||
fatness_bonus = 4
|
||||
if("Blob")
|
||||
fatness_bonus = 5
|
||||
return fatness_bonus
|
||||
|
||||
/datum/mutation/human/adipohazard/proc/fatten(mob/living/carbon/toucher, amount = 1)
|
||||
toucher.adjust_fatness(get_fatness_bonus(owner) + (amount * GET_MUTATION_POWER(src)), FATTENING_TYPE_RADIATIONS)
|
||||
to_chat(toucher, "<span class='notice'>That felt so nice!</span>")
|
||||
|
||||
/obj/item/dnainjector/antiadipohazard
|
||||
name = "\improper DNA injector (Anti-Adipohazard)"
|
||||
desc = "No hugs?"
|
||||
remove_mutations = list(ADIPOHAZARD)
|
||||
|
||||
/obj/item/dnainjector/adipohazard
|
||||
name = "\improper DNA injector (Adipohazard)"
|
||||
desc = "It's hugs time!"
|
||||
add_mutations = list(ADIPOHAZARD)
|
||||
|
||||
/mob/living/carbon/help_shake_act(mob/living/carbon/M)
|
||||
. = ..()
|
||||
|
||||
var/datum/mutation/human/adipohazard/touched_mutation
|
||||
for(var/datum/mutation/human/adipohazard/HM in dna.mutations)
|
||||
if(istype(HM, /datum/mutation/human/adipohazard))
|
||||
touched_mutation = HM
|
||||
|
||||
var/datum/mutation/human/adipohazard/touching_mutation
|
||||
for(var/datum/mutation/human/adipohazard/HM in M.dna.mutations)
|
||||
if(istype(HM, /datum/mutation/human/adipohazard))
|
||||
touching_mutation = HM
|
||||
|
||||
if(on_fire)
|
||||
return
|
||||
if(M == src && check_self_for_injuries())
|
||||
return
|
||||
|
||||
if(touched_mutation)
|
||||
if(health >= 0 && !(HAS_TRAIT(src, TRAIT_FAKEDEATH)))
|
||||
if(mob_run_block(M, 0, M.name, ATTACK_TYPE_UNARMED, 0, null, null, null))
|
||||
return
|
||||
if(lying)
|
||||
if(buckled)
|
||||
return
|
||||
touched_mutation.fatten(M, 5)
|
||||
else if(M.zone_selected == BODY_ZONE_PRECISE_MOUTH)
|
||||
touched_mutation.fatten(M, 1)
|
||||
else if(check_zone(M.zone_selected) == BODY_ZONE_HEAD)
|
||||
touched_mutation.fatten(M, 3)
|
||||
else if(check_zone(M.zone_selected) == BODY_ZONE_R_ARM || check_zone(M.zone_selected) == BODY_ZONE_L_ARM)
|
||||
if((pulling == M) && (grab_state == GRAB_PASSIVE))
|
||||
touched_mutation.fatten(M, 2)
|
||||
else
|
||||
touched_mutation.fatten(M, 1)
|
||||
else
|
||||
touched_mutation.fatten(M, 5)
|
||||
|
||||
if(touching_mutation)
|
||||
if(health >= 0 && !(HAS_TRAIT(src, TRAIT_FAKEDEATH)))
|
||||
if(mob_run_block(M, 0, M.name, ATTACK_TYPE_UNARMED, 0, null, null, null))
|
||||
return
|
||||
if(lying)
|
||||
if(buckled)
|
||||
return
|
||||
touching_mutation.fatten(src, 5)
|
||||
else if(M.zone_selected == BODY_ZONE_PRECISE_MOUTH)
|
||||
touching_mutation.fatten(src, 1)
|
||||
else if(check_zone(M.zone_selected) == BODY_ZONE_HEAD)
|
||||
touching_mutation.fatten(src, 3)
|
||||
else if(check_zone(M.zone_selected) == BODY_ZONE_R_ARM || check_zone(M.zone_selected) == BODY_ZONE_L_ARM)
|
||||
if((pulling == M) && (grab_state == GRAB_PASSIVE))
|
||||
touching_mutation.fatten(src, 2)
|
||||
else
|
||||
touching_mutation.fatten(src, 1)
|
||||
else
|
||||
touching_mutation.fatten(src, 5)
|
||||
|
||||
/mob/living/carbon/human/kisstarget(mob/living/L)
|
||||
. = ..()
|
||||
if(isliving(L))
|
||||
if(iscarbon(L))
|
||||
var/datum/mutation/human/adipohazard/touched_mutation
|
||||
var/mob/living/carbon/C = L
|
||||
for(var/datum/mutation/human/adipohazard/HM in C.dna.mutations)
|
||||
if(istype(HM, /datum/mutation/human/adipohazard))
|
||||
touched_mutation = HM
|
||||
if(touched_mutation)
|
||||
touched_mutation.fatten(src, 10)
|
||||
|
||||
var/datum/mutation/human/adipohazard/touching_mutation
|
||||
for(var/datum/mutation/human/adipohazard/HM in dna.mutations)
|
||||
if(istype(HM, /datum/mutation/human/adipohazard))
|
||||
touching_mutation = HM
|
||||
if(touching_mutation)
|
||||
touching_mutation.fatten(L, 10)
|
||||
|
||||
/datum/species/disarm(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style)
|
||||
. = ..()
|
||||
var/aim_for_mouth = user.zone_selected == "mouth"
|
||||
var/target_on_help = target.a_intent == INTENT_HELP
|
||||
var/target_aiming_for_mouth = target.zone_selected == "mouth"
|
||||
var/target_restrained = target.restrained()
|
||||
var/same_dir = (target.dir & user.dir)
|
||||
var/aim_for_groin = user.zone_selected == "groin"
|
||||
var/target_aiming_for_groin = target.zone_selected == "groin"
|
||||
|
||||
var/opposite_dir = user.dir == DIRFLIP(target.dir)
|
||||
|
||||
var/datum/mutation/human/adipohazard/touched_mutation
|
||||
for(var/datum/mutation/human/adipohazard/HM in target.dna.mutations)
|
||||
if(istype(HM, /datum/mutation/human/adipohazard))
|
||||
touched_mutation = HM
|
||||
|
||||
var/datum/mutation/human/adipohazard/touching_mutation
|
||||
for(var/datum/mutation/human/adipohazard/HM in user.dna.mutations)
|
||||
if(istype(HM, /datum/mutation/human/adipohazard))
|
||||
touching_mutation = HM
|
||||
|
||||
if(touched_mutation != null && target != user)
|
||||
if(!IS_STAMCRIT(user))
|
||||
if(aim_for_mouth && ( target_on_help || target_restrained || target_aiming_for_mouth))
|
||||
touched_mutation.fatten(user, 4)
|
||||
else if(aim_for_groin && (target == user || target.lying || same_dir || opposite_dir) && (target_on_help || target_restrained || target_aiming_for_groin))
|
||||
touched_mutation.fatten(user, 5)
|
||||
else
|
||||
touched_mutation.fatten(user, 5)
|
||||
|
||||
if(touching_mutation != null && target != user)
|
||||
if(!IS_STAMCRIT(user))
|
||||
if(aim_for_mouth && ( target_on_help || target_restrained || target_aiming_for_mouth))
|
||||
touching_mutation.fatten(target, 4)
|
||||
else if(aim_for_groin && (target == user || target.lying || same_dir || opposite_dir) && (target_on_help || target_restrained || target_aiming_for_groin))
|
||||
touching_mutation.fatten(target, 5)
|
||||
else
|
||||
touching_mutation.fatten(target, 2)
|
||||
@@ -74,77 +74,3 @@
|
||||
wheels.setDir(spawn_chair.dir)
|
||||
|
||||
wheels.buckle_mob(quirk_holder)
|
||||
|
||||
|
||||
/datum/quirk/universal_diet
|
||||
name = "Universal diet"
|
||||
desc = "You are fine with eating just about anything normally edible, you have no strong dislikes in food. Toxic food will still hurt you, though."
|
||||
value = 0
|
||||
gain_text = "<span class='notice'>You feel like you can eat any food type.</span>"
|
||||
lose_text = "<span class='notice'>You start to dislike certain food types again.</span>"
|
||||
medical_record_text = "Patient reports no strong dietary dislikes."
|
||||
|
||||
/datum/quirk/universal_diet/add()
|
||||
var/mob/living/carbon/human/H = quirk_holder
|
||||
var/datum/species/species = H.dna.species
|
||||
species.disliked_food = null
|
||||
|
||||
/datum/quirk/universal_diet/remove()
|
||||
var/mob/living/carbon/human/H = quirk_holder
|
||||
if(H)
|
||||
var/datum/species/species = H.dna.species
|
||||
species.disliked_food = initial(species.disliked_food)
|
||||
|
||||
//GS13 Port
|
||||
//Port from Shadow
|
||||
/datum/quirk/donotclone
|
||||
name = "DNC"
|
||||
desc = "You have filed a Do Not Clone order, stating that you do not wish to be cloned. You can still be revived by other means."
|
||||
value = -2
|
||||
mob_trait = TRAIT_NEVER_CLONE
|
||||
medical_record_text = "Patient has a DNC (Do not clone) order on file, and cannot be cloned as a result."
|
||||
|
||||
/datum/quirk/inheat
|
||||
name = "In Heat"
|
||||
desc = "Your system burns with the desire to be bred, your body will betray you and alert others' to your desire when examining you. Satisfying your lust will make you happy, but ignoring it may cause you to become sad and needy."
|
||||
value = 0
|
||||
mob_trait = TRAIT_HEAT
|
||||
gain_text = "<span class='notice'>You body burns with the desire to be bred.</span>"
|
||||
lose_text = "<span class='notice'>You feel more in control of your body and thoughts.</span>"
|
||||
|
||||
/datum/quirk/headpat_slut
|
||||
name = "Headpat Slut"
|
||||
desc = "You like headpats, alot, maybe even a little bit too much. Headpats give you a bigger mood boost and cause arousal"
|
||||
mob_trait = TRAIT_HEADPAT_SLUT
|
||||
value = 0
|
||||
medical_record_text = "Patient seems overly affectionate."
|
||||
|
||||
/datum/quirk/headpat_hater
|
||||
name = "Distant"
|
||||
desc = "You don't seem to show much care for being touched. Whether it's because you're reserved or due to self control, you won't wag your tail outside of your own control should you possess one."
|
||||
mob_trait = TRAIT_DISTANT
|
||||
value = 0
|
||||
medical_record_text = "Patient cares little with or dislikes being touched."
|
||||
|
||||
/datum/quirk/vegetarian
|
||||
name = "Vegetarian"
|
||||
desc = "You find the idea of eating meat morally and physically repulsive."
|
||||
value = 0
|
||||
gain_text = "<span class='notice'>You feel repulsion at the idea of eating meat.</span>"
|
||||
lose_text = "<span class='notice'>You feel like eating meat isn't that bad.</span>"
|
||||
medical_record_text = "Patient reports a vegetarian diet."
|
||||
|
||||
/datum/quirk/vegetarian/add()
|
||||
var/mob/living/carbon/human/H = quirk_holder
|
||||
var/datum/species/species = H.dna.species
|
||||
species.liked_food &= ~MEAT
|
||||
species.disliked_food |= MEAT
|
||||
|
||||
/datum/quirk/vegetarian/remove()
|
||||
var/mob/living/carbon/human/H = quirk_holder
|
||||
if(H)
|
||||
var/datum/species/species = H.dna.species
|
||||
if(initial(species.liked_food) & MEAT)
|
||||
species.liked_food |= MEAT
|
||||
else
|
||||
species.disliked_food &= ~MEAT
|
||||
|
||||
@@ -36,31 +36,3 @@
|
||||
/area/ruin/powered/candycaveLower/inside
|
||||
name = "Candy Cave"
|
||||
icon_state = "away"
|
||||
|
||||
|
||||
//fatventure gateway map
|
||||
/area/awaymission/fatventure
|
||||
name = "Unknown Area"
|
||||
icon_state = "awaycontent1"
|
||||
requires_power = FALSE
|
||||
dynamic_lighting = DYNAMIC_LIGHTING_DISABLED
|
||||
|
||||
/area/awaymission/fatventure/outside
|
||||
name = "Unknown Area - Outside"
|
||||
icon_state = "awaycontent25"
|
||||
|
||||
/area/awaymission/fatventure/inside
|
||||
name = "Unknown Area - Inside"
|
||||
icon_state = "awaycontent2"
|
||||
// requires_power = TRUE
|
||||
dynamic_lighting = DYNAMIC_LIGHTING_FORCED
|
||||
|
||||
/obj/effect/light_emitter/light //made this light emitter for adventure maps where you have to naturally switch between dynamic and nondynamic light
|
||||
set_luminosity = 4
|
||||
set_cap = 2.5
|
||||
light_color = LIGHT_COLOR_TUNGSTEN
|
||||
|
||||
/turf/closed/indestructible/junglemineral
|
||||
name = "tough rock"
|
||||
icon = 'icons/turf/mining.dmi'
|
||||
icon_state = "rock"
|
||||
|
||||
@@ -1,7 +1,131 @@
|
||||
//GS13: donator items and other ckey-locked junk
|
||||
/datum/gear/gatobadge_employee //these are available only to admins with CC-related characters
|
||||
name = "GATO Badge - Employee"
|
||||
category = LOADOUT_CATEGORY_DONATOR
|
||||
path = /obj/item/clothing/accessory/medal/gato_badge/employee
|
||||
ckeywhitelist = list("sonoida", "yeeny")
|
||||
|
||||
/datum/gear/gatobadge_middleman //these are available to players who were granted permission to have their characters to CC
|
||||
name = "GATO Badge - Correspondent"
|
||||
category = LOADOUT_CATEGORY_DONATOR
|
||||
path = /obj/item/clothing/accessory/medal/gato_badge/middleman
|
||||
ckeywhitelist = list("johnjimjim", "sonoida", "yeeny", "Not Number")
|
||||
|
||||
/datum/gear/halsey_overcoat
|
||||
name = "Halsey's Commander Overcoat"
|
||||
category = LOADOUT_CATEGORY_DONATOR
|
||||
path = /obj/item/clothing/suit/chloe/halsey
|
||||
ckeywhitelist = list("yeeny")
|
||||
|
||||
/datum/gear/haydee_suit
|
||||
name = "Haydee Suit"
|
||||
category = LOADOUT_CATEGORY_DONATOR
|
||||
path = /obj/item/clothing/suit/space/hardsuit/engine/haydee
|
||||
ckeywhitelist = list("lumu", "sonoida")
|
||||
|
||||
/datum/gear/haydee_pistol
|
||||
name = "Haydee Pistol"
|
||||
category = LOADOUT_CATEGORY_DONATOR
|
||||
path = /obj/item/gun/ballistic/automatic/toy/pistol/haydee
|
||||
ckeywhitelist = list("lumu", "sonoida")
|
||||
|
||||
//sorry for defining this here, just thought it'd be more convenient
|
||||
/obj/item/clothing/suit/chloe/halsey //sorry to whoever chloe is, but that coat is far too badass not to be used
|
||||
name = "Halsey's Commander Overcoat"
|
||||
desc = "A Ginormous red overcoat that looks fit for a commander. Has a tag on it that reads: 'Property of Halsey Harmonten. Please return if lost!'"
|
||||
armor = list("melee" = 20, "bullet" = 20, "laser" = 0,"energy" = 20, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 0) //worn by a captain player, might as well recompensate not wearing the carapace
|
||||
|
||||
/datum/gear/rose_plush
|
||||
name = "Dezir Rose Plush"
|
||||
category = LOADOUT_SUBCATEGORY_BACKPACK_TOYS
|
||||
path = /obj/item/toy/plush/gs13/rose
|
||||
ckeywhitelist = list("eremitanovem", "sonoida")
|
||||
|
||||
/datum/gear/chloe_plush
|
||||
name = "Chloe Plush"
|
||||
category = LOADOUT_SUBCATEGORY_BACKPACK_TOYS
|
||||
path = /obj/item/toy/plush/gs13/chloe
|
||||
ckeywhitelist = list("alphas0")
|
||||
|
||||
/datum/gear/grimmy_coat
|
||||
name = "Overcoat of the Destitute"
|
||||
category = LOADOUT_SUBCATEGORY_BACKPACK_TOYS
|
||||
path = /obj/item/clothing/suit/storage/blueshield/grimmy
|
||||
ckeywhitelist = list("bbgrimmy")
|
||||
|
||||
/obj/item/clothing/suit/storage/blueshield/grimmy
|
||||
name = "Overcoat of the Destitute"
|
||||
desc = "Welcome all to the everlasting all-time low. Please put your hands together for the ever-failing one man show: Domino!"
|
||||
|
||||
/datum/gear/tarek_gps
|
||||
name = "Tarek's GPS"
|
||||
category = LOADOUT_SUBCATEGORY_BACKPACK_TOYS
|
||||
path = /obj/item/gps/mining
|
||||
ckeywhitelist = list("e926user25")
|
||||
|
||||
/datum/gear/milwaukee_crowbar
|
||||
name = "Milwaukee Pocket Crowbar"
|
||||
category = LOADOUT_SUBCATEGORY_BACKPACK_TOYS
|
||||
path = /obj/item/crowbar/bronze/glaug
|
||||
ckeywhitelist = list("happytpr")
|
||||
|
||||
/obj/item/crowbar/bronze/glaug
|
||||
name = "Milwaukee Pocket Crowbar"
|
||||
desc = "Much more expensive. Still serves the same function."
|
||||
|
||||
/datum/gear/fatfang
|
||||
name = "Fattening Fangs Injector"
|
||||
category = LOADOUT_SUBCATEGORY_BACKPACK_TOYS
|
||||
path = /obj/item/dnainjector/fatfang
|
||||
ckeywhitelist = list("sonoida")
|
||||
|
||||
/datum/gear/toolbelt
|
||||
name = "Empty Toolbelt"
|
||||
category = LOADOUT_SUBCATEGORY_BACKPACK_TOYS
|
||||
path = /obj/item/storage/belt/utility
|
||||
ckeywhitelist = list("killmewitha22", "Killmewitha22", "KILLMEWITHA22", "sonoida")
|
||||
|
||||
/obj/item/toy/sword/chloesabre/halsey
|
||||
name = "Halsey's Sabre"
|
||||
desc = "An elegant weapon, similar in design to the Captain's Sabre, but with a platinum hilt and an adamantine blade. the hilt has an engraved hyena on it."
|
||||
force = 16
|
||||
|
||||
/obj/item/gun/ballistic/revolver/mateba/moka
|
||||
name = "\improper Custom Unica 6 revolver"
|
||||
desc = "An elegant and ornate revolver belonging to a certain hellcat commander. There are some words carved on its side: 'Dura Lex, Sed Lex'"
|
||||
|
||||
//metha rossi you fat hog
|
||||
|
||||
/datum/gear/wgspell_add
|
||||
name = "Weight Gain Spellbook"
|
||||
category = LOADOUT_SUBCATEGORY_BACKPACK_TOYS
|
||||
path = /obj/item/book/granter/spell/fattening
|
||||
ckeywhitelist = list("sonoida", "themrsky", "Not Number")
|
||||
|
||||
/datum/gear/wgspell_transfer
|
||||
name = "Weight Transfer Spellbook"
|
||||
category = LOADOUT_SUBCATEGORY_BACKPACK_TOYS
|
||||
path = /obj/item/book/granter/spell/fattening/transfer
|
||||
ckeywhitelist = list("sonoida", "themrsky", "Not Number")
|
||||
|
||||
/datum/gear/wgspell_take
|
||||
name = "Weight Steal Spellbook"
|
||||
category = LOADOUT_SUBCATEGORY_BACKPACK_TOYS
|
||||
path = /obj/item/book/granter/spell/fattening/steal
|
||||
ckeywhitelist = list("sonoida", "themrsky", "Not Number")
|
||||
|
||||
|
||||
/datum/gear/white_eyepatch_cabal
|
||||
name = "Cabal's Eyepatch"
|
||||
category = LOADOUT_CATEGORY_GLASSES
|
||||
path = /obj/item/clothing/glasses/eyepatch/cabal
|
||||
ckeywhitelist = list("spess_lizurd", "SPESS LIZURD", "spess lizurd", "SPESS_LIZURD", "spesslizurd", "sonoida")
|
||||
|
||||
/datum/gear/white_eyepatch
|
||||
name = "White Eyepatch"
|
||||
category = LOADOUT_CATEGORY_GLASSES
|
||||
path = /obj/item/clothing/glasses/eyepatch/white
|
||||
|
||||
//
|
||||
//item presets for donator items and other gunk
|
||||
//
|
||||
/obj/item/clothing/glasses/eyepatch/white
|
||||
name = "White eyepatch"
|
||||
desc = "Smells faintly of medicine and headaches."
|
||||
@@ -13,40 +137,3 @@
|
||||
desc = "Vulpine sluts only."
|
||||
icon_state = "eyepatch_white"
|
||||
item_state = "eyepatch_white"
|
||||
|
||||
/obj/item/toy/sword/chloesabre/halsey
|
||||
name = "Halsey's Sabre"
|
||||
desc = "An elegant weapon, similar in design to the Captain's Sabre, but with a platinum hilt and an adamantine blade. the hilt has an engraved hyena on it."
|
||||
force = 16
|
||||
|
||||
/obj/item/gun/ballistic/revolver/mateba/moka
|
||||
name = "\improper Custom Unica 6 revolver"
|
||||
desc = "An elegant and ornate revolver belonging to a certain hellcat commander. There are some words carved on its side: 'Dura Lex, Sed Lex'"
|
||||
|
||||
/obj/item/clothing/suit/chloe/halsey //sorry to whoever chloe is, but that coat is far too badass not to be used
|
||||
name = "Halsey's Commander Overcoat"
|
||||
desc = "A Ginormous red overcoat that looks fit for a commander. Has a tag on it that reads: 'Property of Halsey Harmonten. Please return if lost!'"
|
||||
armor = list("melee" = 20, "bullet" = 20, "laser" = 0,"energy" = 20, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 0) //worn by a captain player, might as well recompensate not wearing the carapace
|
||||
|
||||
/obj/item/clothing/suit/storage/blueshield //Look man I don't know, this is the file it was in on Oracle. Don't shoot me. Please.
|
||||
name = "blueshield coat"
|
||||
desc = "An armored coat often worn by bodyguards. Tough because everyone knows deep down you're a softie."
|
||||
icon = 'GainStation13/icons/obj/clothing/suits.dmi'
|
||||
mob_overlay_icon = 'GainStation13/icons/mob/suit.dmi'
|
||||
icon_state = "blueshieldcoat"
|
||||
item_state = "blueshieldcoat"
|
||||
body_parts_covered = CHEST|LEGS|ARMS
|
||||
allowed = list(/obj/item/gun/energy, /obj/item/reagent_containers/spray/pepper, /obj/item/ammo_box, /obj/item/ammo_casing,/obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/flashlight/seclite, /obj/item/melee/classic_baton)
|
||||
armor = list(melee = 25, bullet = 10, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0)
|
||||
cold_protection = CHEST|LEGS|ARMS
|
||||
heat_protection = CHEST|LEGS|ARMS
|
||||
mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON
|
||||
|
||||
/obj/item/clothing/suit/storage/blueshield/grimmy
|
||||
name = "Overcoat of the Destitute"
|
||||
desc = "Welcome all to the everlasting all-time low. Please put your hands together for the ever-failing one man show: Domino!"
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/crowbar/bronze/glaug
|
||||
name = "Milwaukee Pocket Crowbar"
|
||||
desc = "Much more expensive. Still serves the same function."
|
||||
|
||||
@@ -549,66 +549,3 @@
|
||||
</body>
|
||||
</html>
|
||||
"}
|
||||
|
||||
//gs13 snack attack shuttle loan
|
||||
|
||||
/obj/item/paper/fluff/chocoslime_research
|
||||
name = "Stained Research Papers"
|
||||
info = "<b>AUDIO LOG OF CHOCOLATE SLIME REPORT NO.3</b>. Despite possessing no obvious combat capabilities, the chocolate slime can feed itself to its victim, possibly rupturing its st-- mmhfph- grhm... ...(AUDIO LOG END)."
|
||||
|
||||
|
||||
//gs13 - solar defence crate
|
||||
|
||||
/obj/item/paper/guides/jobs/engi/solar_defence
|
||||
name = "Info on Satellite Defence"
|
||||
info = "<h1>Welcome</h1><p>With this crate, you will be able to protect the station's solar arrays from constant barrages of space sand. The set-up is simple. Drag around all the satellites in front of solar panel arrays, preferably in direction open to space (the best spot is near the solar tracker and outside of the grilles), as that is where the space sand will come from. It's advised to set down just 1 satellite for each solar array. Once you set the satellite down, you can activate it by flicking on the switch. The crate also provides you with an OPTIONAL computer board to keep track of your defence satellites. Voila!</p>"
|
||||
|
||||
//GS13's gateway map
|
||||
|
||||
/obj/item/paper/fluff/ruins/gateway_fats/caloriteslime1
|
||||
name = "Day 5 - Calorite Slime Specimen"
|
||||
info = "We finally got the calorite slime specimen to react - it began to self-produce lipoifier wherever it went, along with making subtle traces of lipoifium every now and then. Any contact without protection results in almost immediate immobilization. Jay Cobb has been smacking it with a cattle prod for a good 5 hours now. I hope it doesn't escape."
|
||||
|
||||
/obj/item/paper/fluff/ruins/gateway_fats/caloriteslime2
|
||||
name = "Day 6 - Calorite Slime Specimen"
|
||||
info = "It escaped."
|
||||
|
||||
/obj/item/paper/fluff/ruins/gateway_fats/candyland_shack
|
||||
name = "Dear Diary"
|
||||
info = "So far living here has been working out quite well. I don't need to worry about food at all! The only problem: I really should've made a bigger doorway..."
|
||||
|
||||
/obj/item/paper/fluff/ruins/gateway_fats/facility_doodle
|
||||
name = "a doodle"
|
||||
info = "(it's a crude drawing of a man in a suit, being hit by a car. There are stink lines coming off him, for some reason.)"
|
||||
|
||||
/obj/item/paper/fluff/ruins/gateway_fats/facility_report1
|
||||
name = "Personal note"
|
||||
info = "I really don't know which executive or RD comes up with this shit. Sure, I can get building chambers for testing properties of various creatures or items on people, as illegal and immoral it might be... But building a SMALL HAZARD COURSE? Really? I wouldn't be surprised if this room's camera tapes are saved every week..."
|
||||
|
||||
/obj/item/paper/fluff/ruins/gateway_fats/facility_report2
|
||||
name = "Security Notice"
|
||||
info = "We've spotted a few life signatures poking around this region near the facility. The scans don't match any of the local flora or fauna... Be on the lookout for potential threats."
|
||||
|
||||
/obj/item/paper/fluff/ruins/gateway_fats/facility_report3
|
||||
name = "Security Notice 2"
|
||||
info = "We've captured an agent - turtleneck sweater, black and red gear, stechkin tucked away in his boot. Seems like a typical syndie. Before we could really squeeze out any information though, he bit through one of his teeth and succumbed to poison. Need to poke HOS about more thorough search scans in the future."
|
||||
|
||||
/obj/item/paper/fluff/ruins/gateway_fats/facility_report4
|
||||
name = "My Will"
|
||||
info = "I don't think I'm gonna squeeze out of this rubble anytime soon. In case I don't make it: Please leave all that I have to-- (the rest of the page is covered in droplets of dried blood)"
|
||||
|
||||
/obj/item/paper/fluff/ruins/gateway_fats/facility_report5
|
||||
name = "AUTOMATIC REPORT - CODE RED EMERGENCY"
|
||||
info = "MULTIPLE EXPLOSIONS DETECTED. STRUCTURAL INTEGRITY OF THE FACILITY HAS BEEN COMPROMISED - EMERGENCY PROTOCOLS ENGAGED. CONTACTING HQ... ... ... ... ... CONTACT FAILED. CHECK SYSTEM WIRING."
|
||||
|
||||
/obj/item/paper/fluff/ruins/gateway_fats/facility_report6
|
||||
name = "STOP STEALING MY FUCKING LUNCH"
|
||||
info = "Tell that cunt Jerry from requisitions that if he ever steals my lunch again, I'm gonna lock him in a room with 10 of those creepy floating orange hands."
|
||||
|
||||
/obj/item/paper/fluff/ruins/gateway_fats/facility_report7
|
||||
name = "Report #383 C28 - Prolonged Exposure to Calorite and Calorite-Derived Products"
|
||||
info = "(the entire paper is covered in some sort of grease, smudging all the ink and making it unreadable...)"
|
||||
|
||||
/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."
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
|
||||
//GS13 glitters. Making the subtle variants their own subtypes, as some use the fake gas effects to make a room look like it's full of gas, when it isnt.
|
||||
/obj/effect/decal/cleanable/glitter/pink_subtle
|
||||
name = "faint pink glitter"
|
||||
icon = 'GainStation13/icons/effects/atmospherics.dmi'
|
||||
icon_state = "glitter"
|
||||
color = "#9e0089"
|
||||
|
||||
/obj/effect/decal/cleanable/glitter/white_subtle
|
||||
name = "faint white glitter"
|
||||
icon = 'GainStation13/icons/effects/atmospherics.dmi'
|
||||
icon_state = "glitter"
|
||||
|
||||
/obj/effect/decal/cleanable/glitter/blue_subtle
|
||||
name = "faint blue glitter"
|
||||
icon = 'GainStation13/icons/effects/atmospherics.dmi'
|
||||
icon_state = "glitter"
|
||||
color = "#2dd6ff"
|
||||
@@ -63,101 +63,3 @@
|
||||
desc = "A poster from terran sectors, suggesting non-existence of mythical country of Malta."
|
||||
icon_state = "poster50"
|
||||
icon = 'GainStation13/icons/obj/contraband.dmi'
|
||||
|
||||
|
||||
//recoloring of propaganda posters - from NT blue to GT pink
|
||||
/obj/structure/sign/poster/gato/safety
|
||||
name = "Here For Your Safety"
|
||||
desc = "A poster glorifying the station's security force."
|
||||
icon_state = "poster1_legit"
|
||||
icon = 'GainStation13/icons/obj/contraband.dmi'
|
||||
|
||||
/obj/structure/sign/poster/gato/lovegato
|
||||
name = "GATO Poster"
|
||||
desc = "A poster with the GATO's friendly feline mascot."
|
||||
icon_state = "poster2_legit"
|
||||
icon = 'GainStation13/icons/obj/contraband.dmi'
|
||||
|
||||
/obj/structure/sign/poster/gato/cleanhands
|
||||
name = "Cleanliness"
|
||||
desc = "A poster warning of the dangers of poor hygiene."
|
||||
icon_state = "poster3_legit"
|
||||
icon = 'GainStation13/icons/obj/contraband.dmi'
|
||||
|
||||
/obj/structure/sign/poster/gato/helpothers
|
||||
name = "Help Others"
|
||||
desc = "A poster encouraging you to help fellow crewmembers."
|
||||
icon_state = "poster4_legit"
|
||||
icon = 'GainStation13/icons/obj/contraband.dmi'
|
||||
|
||||
/obj/structure/sign/poster/gato/buildstuff
|
||||
name = "Build"
|
||||
desc = "A poster glorifying the engineering team."
|
||||
icon_state = "poster5_legit"
|
||||
icon = 'GainStation13/icons/obj/contraband.dmi'
|
||||
|
||||
/obj/structure/sign/poster/gato/blessthisspess
|
||||
name = "Bless This Spess"
|
||||
desc = "A poster blessing this area."
|
||||
icon_state = "poster6_legit"
|
||||
icon = 'GainStation13/icons/obj/contraband.dmi'
|
||||
|
||||
/obj/structure/sign/poster/gato/science
|
||||
name = "Science"
|
||||
desc = "A poster depicting an atom."
|
||||
icon_state = "poster7_legit"
|
||||
icon = 'GainStation13/icons/obj/contraband.dmi'
|
||||
|
||||
/obj/structure/sign/poster/gato/arf
|
||||
name = "Ian"
|
||||
desc = "Arf arf. Yap."
|
||||
icon_state = "poster8_legit"
|
||||
icon = 'GainStation13/icons/obj/contraband.dmi'
|
||||
|
||||
/obj/structure/sign/poster/gato/obey
|
||||
name = "Obey"
|
||||
desc = "A poster instructing the viewer to obey authority."
|
||||
icon_state = "poster9_legit"
|
||||
icon = 'GainStation13/icons/obj/contraband.dmi'
|
||||
|
||||
/obj/structure/sign/poster/gato/walk
|
||||
name = "Walk"
|
||||
desc = "A poster instructing the viewer to walk instead of running."
|
||||
icon_state = "poster10_legit"
|
||||
icon = 'GainStation13/icons/obj/contraband.dmi'
|
||||
|
||||
/obj/structure/sign/poster/gato/statelaws
|
||||
name = "State Laws"
|
||||
desc = "A poster instructing cyborgs to state their laws."
|
||||
icon_state = "poster11_legit"
|
||||
icon = 'GainStation13/icons/obj/contraband.dmi'
|
||||
|
||||
/obj/structure/sign/poster/gato/loveian
|
||||
name = "Love Ian"
|
||||
desc = "Ian is love, Ian is life."
|
||||
icon_state = "poster12_legit"
|
||||
icon = 'GainStation13/icons/obj/contraband.dmi'
|
||||
|
||||
/obj/structure/sign/poster/gato/futurework
|
||||
name = "Work For A Future"
|
||||
desc = " A poster encouraging you to work for your future."
|
||||
icon_state = "poster17_legit"
|
||||
icon = 'GainStation13/icons/obj/contraband.dmi'
|
||||
|
||||
/obj/structure/sign/poster/gato/safety
|
||||
name = "Safety: Internals"
|
||||
desc = "A poster instructing the viewer to wear internals in the rare environments where there is no oxygen or the air has been rendered toxic."
|
||||
icon_state = "poster19_legit"
|
||||
icon = 'GainStation13/icons/obj/contraband.dmi'
|
||||
|
||||
/obj/structure/sign/poster/gato/safety2
|
||||
name = "Safety: Eye Protection"
|
||||
desc = "A poster instructing the viewer to wear eye protection when dealing with chemicals, smoke, or bright lights."
|
||||
icon_state = "poster20_legit"
|
||||
icon = 'GainStation13/icons/obj/contraband.dmi'
|
||||
|
||||
/obj/structure/sign/poster/gato/reportcrimes
|
||||
name = "Report Crimes"
|
||||
desc = "A poster encouraging the swift reporting of crime or seditious behavior to station security."
|
||||
icon_state = "poster22_legit"
|
||||
icon = 'GainStation13/icons/obj/contraband.dmi'
|
||||
|
||||
@@ -20,74 +20,3 @@
|
||||
last_event = world.time
|
||||
active = 0
|
||||
return
|
||||
|
||||
//gato colored signs - from NT blue to GT pink
|
||||
/obj/structure/sign/warning/gato
|
||||
name = "\improper WARNING SIGN"
|
||||
desc = "A warning sign which reads 'SECURE AREA'."
|
||||
icon = 'GainStation13/icons/obj/decals.dmi'
|
||||
|
||||
/obj/structure/sign/warning/gato/securearea
|
||||
name = "\improper SECURE AREA"
|
||||
desc = "A warning sign which reads 'SECURE AREA'."
|
||||
|
||||
/obj/structure/sign/warning/gato/docking
|
||||
name = "\improper KEEP CLEAR: DOCKING AREA"
|
||||
desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."
|
||||
|
||||
/obj/structure/sign/warning/gato/biohazard
|
||||
name = "\improper BIOHAZARD"
|
||||
desc = "A warning sign which reads 'BIOHAZARD'."
|
||||
icon_state = "bio"
|
||||
|
||||
/obj/structure/sign/warning/gato/electricshock
|
||||
name = "\improper HIGH VOLTAGE"
|
||||
desc = "A warning sign which reads 'HIGH VOLTAGE'."
|
||||
icon_state = "shock"
|
||||
|
||||
/obj/structure/sign/warning/gato/vacuum
|
||||
name = "\improper HARD VACUUM AHEAD"
|
||||
desc = "A warning sign which reads 'HARD VACUUM AHEAD'."
|
||||
icon_state = "space"
|
||||
|
||||
/obj/structure/sign/warning/gato/vacuum/external
|
||||
name = "\improper EXTERNAL AIRLOCK"
|
||||
desc = "A warning sign which reads 'EXTERNAL AIRLOCK'."
|
||||
layer = MOB_LAYER
|
||||
|
||||
/obj/structure/sign/warning/gato/deathsposal
|
||||
name = "\improper DISPOSAL: LEADS TO SPACE"
|
||||
desc = "A warning sign which reads 'DISPOSAL: LEADS TO SPACE'."
|
||||
icon_state = "deathsposal"
|
||||
|
||||
/obj/structure/sign/warning/gato/pods
|
||||
name = "\improper ESCAPE PODS"
|
||||
desc = "A warning sign which reads 'ESCAPE PODS'."
|
||||
icon_state = "pods"
|
||||
|
||||
/obj/structure/sign/warning/gato/fire
|
||||
name = "\improper DANGER: FIRE"
|
||||
desc = "A warning sign which reads 'DANGER: FIRE'."
|
||||
icon_state = "fire"
|
||||
|
||||
/obj/structure/sign/warning/gato/nosmoking
|
||||
name = "\improper NO SMOKING"
|
||||
desc = "A warning sign which reads 'NO SMOKING'."
|
||||
icon_state = "nosmoking2"
|
||||
|
||||
/obj/structure/sign/warning/gato/nosmoking/circle
|
||||
icon_state = "nosmoking"
|
||||
|
||||
/obj/structure/sign/warning/gato/radiation
|
||||
name = "\improper HAZARDOUS RADIATION"
|
||||
desc = "A warning sign alerting the user of potential radiation hazards."
|
||||
icon_state = "radiation"
|
||||
|
||||
/obj/structure/sign/warning/gato/radiation/rad_area
|
||||
name = "\improper RADIOACTIVE AREA"
|
||||
desc = "A warning sign which reads 'RADIOACTIVE AREA'."
|
||||
|
||||
/obj/structure/sign/warning/gato/enginesafety
|
||||
name = "\improper ENGINEERING SAFETY"
|
||||
desc = "A sign detailing the various safety protocols when working on-site to ensure a safe shift."
|
||||
icon_state = "safety"
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
////////////// GS13 BARSIGNS ///////////////
|
||||
// Because modularity, yo
|
||||
|
||||
/datum/barsign/the_busted_belt //gs13
|
||||
name = "The Busted Belt"
|
||||
icon = "thebustedbelt" //...I dont think this survived the rebase, oops.
|
||||
desc = "GATO is not liable for any pieces of broken wardrobe."
|
||||
@@ -1,13 +0,0 @@
|
||||
//gs13 - solar defence crate
|
||||
/obj/structure/closet/crate/solarpanel_defence
|
||||
name = "solar system defence crate"
|
||||
icon_state = "engi_e_crate"
|
||||
|
||||
/obj/structure/closet/crate/solarpanel_defence/PopulateContents()
|
||||
..()
|
||||
new /obj/machinery/satellite/meteor_shield(src)
|
||||
new /obj/machinery/satellite/meteor_shield(src)
|
||||
new /obj/machinery/satellite/meteor_shield(src)
|
||||
new /obj/machinery/satellite/meteor_shield(src)
|
||||
new /obj/item/paper/guides/jobs/engi/solar_defence(src)
|
||||
new /obj/item/circuitboard/computer/sat_control(src)
|
||||
@@ -1,5 +1,5 @@
|
||||
/obj/item/toy/plush/gs13
|
||||
icon = 'GainStation13/icons/obj/plushes.dmi'
|
||||
icon = 'icons/obj/plushes.dmi'
|
||||
|
||||
/obj/item/toy/plush/gs13/metha
|
||||
name = "Magical Captain plushie"
|
||||
@@ -71,13 +71,3 @@
|
||||
desc = "A plush of a chunky greaseball."
|
||||
icon_state = "delta"
|
||||
attack_verb = list("squished", "hugged", "smushed")
|
||||
|
||||
/obj/item/toy/plush/gs13/metis
|
||||
desc = "A plush of black-furred nerdy goat."
|
||||
icon_state = "metis"
|
||||
attack_verb = list("squished", "goated", "baah'd")
|
||||
|
||||
/obj/item/toy/plush/gs13/crowbars
|
||||
desc = "A plush of a silly-eyed xeno seccie."
|
||||
icon_state = "crowbars"
|
||||
attack_verb = list("squished", "crowbared", "beno'd")
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/proc/playsound_prefed(atom/source, soundin, pref, vol as num, vary, extrarange as num, falloff_exponent = SOUND_FALLOFF_EXPONENT, frequency = null, channel = 0, pressure_affected = TRUE, ignore_walls = TRUE,
|
||||
falloff_distance = SOUND_DEFAULT_FALLOFF_DISTANCE, envwet = -10000, envdry = 0, distance_multiplier = SOUND_DEFAULT_DISTANCE_MULTIPLIER, distance_multiplier_min_range = SOUND_DEFAULT_MULTIPLIER_EFFECT_RANGE)
|
||||
/proc/playsound_prefed(atom/source, soundin, pref, vol as num, vary, extrarange as num, falloff, frequency = null, channel = 0, pressure_affected = TRUE, ignore_walls = TRUE, soundenvwet = -10000, soundenvdry = 0)
|
||||
if(isarea(source))
|
||||
CRASH("playsound(): source is an area")
|
||||
throw EXCEPTION("playsound(): source is an area")
|
||||
return
|
||||
|
||||
var/turf/turf_source = get_turf(source)
|
||||
|
||||
@@ -9,42 +9,29 @@
|
||||
return
|
||||
|
||||
//allocate a channel if necessary now so its the same for everyone
|
||||
channel = channel || SSsounds.random_available_channel()
|
||||
channel = channel //|| open_sound_channel()
|
||||
|
||||
// Looping through the player list has the added bonus of working for mobs inside containers
|
||||
// Looping through the player list has the added bonus of working for mobs inside containers
|
||||
var/sound/S = sound(get_sfx(soundin))
|
||||
var/maxdistance = SOUND_RANGE + extrarange
|
||||
var/source_z = turf_source.z
|
||||
var/list/listeners = SSmobs.clients_by_zlevel[source_z].Copy()
|
||||
|
||||
var/turf/above_turf = SSmapping.get_turf_above(turf_source)
|
||||
var/turf/below_turf = SSmapping.get_turf_below(turf_source)
|
||||
|
||||
var/maxdistance = (world.view + extrarange)
|
||||
var/z = turf_source.z
|
||||
var/list/listeners = SSmobs.clients_by_zlevel[z]
|
||||
if(!ignore_walls) //these sounds don't carry through walls
|
||||
listeners = listeners & hearers(maxdistance,turf_source)
|
||||
|
||||
if(above_turf && istransparentturf(above_turf))
|
||||
listeners += hearers(maxdistance,above_turf)
|
||||
|
||||
if(below_turf && istransparentturf(turf_source))
|
||||
listeners += hearers(maxdistance,below_turf)
|
||||
|
||||
else
|
||||
if(above_turf && istransparentturf(above_turf))
|
||||
listeners += SSmobs.clients_by_zlevel[above_turf.z]
|
||||
|
||||
if(below_turf && istransparentturf(turf_source))
|
||||
listeners += SSmobs.clients_by_zlevel[below_turf.z]
|
||||
|
||||
for(var/P in listeners)
|
||||
var/mob/M = P
|
||||
if(!M.client)
|
||||
continue
|
||||
if(!(M.client?.prefs.cit_toggles & pref))
|
||||
continue
|
||||
if(get_dist(M, turf_source) <= maxdistance)
|
||||
M.playsound_local(turf_source, soundin, vol, vary, frequency, falloff_exponent, channel, pressure_affected, S, maxdistance, falloff_distance, get_dist(M, turf_source) <= distance_multiplier_min_range? 1 : distance_multiplier, envwet, envdry)
|
||||
for(var/P in SSmobs.dead_players_by_zlevel[source_z])
|
||||
M.playsound_local(turf_source, soundin, vol, vary, frequency, falloff, channel, pressure_affected, S, soundenvwet, soundenvdry)
|
||||
for(var/P in SSmobs.dead_players_by_zlevel[z])
|
||||
var/mob/M = P
|
||||
if(!M.client)
|
||||
continue
|
||||
if(!(M.client?.prefs.cit_toggles & pref))
|
||||
continue
|
||||
if(get_dist(M, turf_source) <= maxdistance)
|
||||
M.playsound_local(turf_source, soundin, vol, vary, frequency, falloff_exponent, channel, pressure_affected, S, maxdistance, falloff_distance, get_dist(M, turf_source) <= distance_multiplier_min_range? 1 : distance_multiplier, envwet, envdry)
|
||||
M.playsound_local(turf_source, soundin, vol, vary, frequency, falloff, channel, pressure_affected, S, soundenvwet, soundenvdry)
|
||||
|
||||
@@ -1,88 +0,0 @@
|
||||
//GS13 Port - stuckage code
|
||||
/obj/machinery/door/airlock/Crossed(mob/living/carbon/L)
|
||||
if(!istype(L))
|
||||
return ..()
|
||||
|
||||
var/stuckage_weight = L?.client?.prefs?.stuckage
|
||||
if(isnull(stuckage_weight) || (stuckage_weight < 10))
|
||||
return ..() // They aren't able to get stuck
|
||||
|
||||
if(L.fatness > (stuckage_weight * 2))
|
||||
if(rand(1, 3) == 1)
|
||||
L.doorstuck = 1
|
||||
L.visible_message("<span class'danger'>[L] gets stuck in the doorway!</span>")
|
||||
to_chat(L, "<span class='danger'>As you attempt to pass through \the [src], your ample curves get wedged in the narrow opening. You find yourself stuck in the [src] frame, struggling to free yourself from the tight squeeze.</span>")
|
||||
L.Stun(100, updating = TRUE, ignore_canstun = TRUE)
|
||||
addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/machinery/door/airlock/, AsyncDoorstuckCall), L), 100)
|
||||
//sleep(100)
|
||||
return ..()
|
||||
|
||||
else if(L.fatness > stuckage_weight)
|
||||
if(rand(1, 5) == 1)
|
||||
L.doorstuck = 1
|
||||
L.visible_message("<span class'danger'>[L] gets stuck in the doorway!</span>")
|
||||
to_chat(L, "<span class='danger'>As you attempt to pass through \the [src], your ample curves get wedged in the narrow opening. You find yourself stuck in the [src] frame, struggling to free yourself from the tight squeeze.</span>")
|
||||
L.Stun(55, updating = TRUE, ignore_canstun = TRUE)
|
||||
addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/machinery/door/airlock/, AsyncDoorstuckCall), L), 55)
|
||||
//sleep(55)
|
||||
return ..()
|
||||
if(rand(1, 5) == 5)
|
||||
to_chat(L, "<span class='danger'>With great effort, you manage to squeeze your massive form through \the [src]. It's a tight fit, but you successfully navigate the narrow opening, barely avoiding getting stuck.</span>")
|
||||
return ..()
|
||||
|
||||
else if(L.fatness > (stuckage_weight / 2))
|
||||
if(rand(1, 5) == 1)
|
||||
L.visible_message("<span class'danger'>[L]'s hips brush against the doorway...</span>")
|
||||
to_chat(L, "<span class='danger'>As you pass through \the [src], you feel a slight brushing against your hips. The [src] frame accommodates your form, but it's a close fit..</span>")
|
||||
return ..()
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/structure/mineral_door/Crossed(mob/living/carbon/L)
|
||||
if(!istype(L))
|
||||
return ..()
|
||||
|
||||
var/stuckage_weight = L?.client?.prefs?.stuckage
|
||||
if(isnull(stuckage_weight) || (stuckage_weight < 10))
|
||||
return ..() // They aren't able to get stuck
|
||||
|
||||
if(L.fatness > (stuckage_weight * 2))
|
||||
if(rand(1, 3) == 1)
|
||||
L.doorstuck = 1
|
||||
L.visible_message("<span class'danger'>[L] gets stuck in the doorway!</span>")
|
||||
to_chat(L, "<span class='danger'>As you attempt to pass through \the [src], your ample curves get wedged in the narrow opening. You find yourself stuck in the [src] frame, struggling to free yourself from the tight squeeze.</span>")
|
||||
L.Stun(100, updating = TRUE, ignore_canstun = TRUE)
|
||||
addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/structure/mineral_door/, AsyncDoorstuckCall), L), 100)
|
||||
//sleep(100)
|
||||
return ..()
|
||||
|
||||
else if(L.fatness > stuckage_weight)
|
||||
if(rand(1, 5) == 1)
|
||||
L.doorstuck = 1
|
||||
L.visible_message("<span class'danger'>[L] gets stuck in the doorway!</span>")
|
||||
to_chat(L, "<span class='danger'>As you attempt to pass through \the [src], your ample curves get wedged in the narrow opening. You find yourself stuck in the [src] frame, struggling to free yourself from the tight squeeze.</span>")
|
||||
L.Stun(55, updating = TRUE, ignore_canstun = TRUE)
|
||||
addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/structure/mineral_door/, AsyncDoorstuckCall), L), 55)
|
||||
//sleep(55)
|
||||
return ..()
|
||||
if(rand(1, 5) == 5)
|
||||
to_chat(L, "<span class='danger'>With great effort, you manage to squeeze your massive form through \the [src]. It's a tight fit, but you successfully navigate the narrow opening, barely avoiding getting stuck.</span>")
|
||||
return ..()
|
||||
|
||||
else if(L.fatness > (stuckage_weight / 2))
|
||||
if(rand(1, 5) == 1)
|
||||
L.visible_message("<span class'danger'>[L]'s hips brush against the doorway...</span>")
|
||||
to_chat(L, "<span class='danger'>As you pass through \the [src], you feel a slight brushing against your hips. The [src] frame accommodates your form, but it's a close fit..</span>")
|
||||
return ..()
|
||||
|
||||
return ..()
|
||||
|
||||
// Callback proc to replace sleep function
|
||||
/obj/machinery/door/airlock/proc/AsyncDoorstuckCall(mob/living/carbon/L)
|
||||
L.doorstuck = 0
|
||||
L.Knockdown(1)
|
||||
|
||||
// Callback proc to replace sleep function
|
||||
/obj/structure/mineral_door/proc/AsyncDoorstuckCall(mob/living/carbon/L)
|
||||
L.doorstuck = 0
|
||||
L.Knockdown(1)
|
||||
@@ -1,517 +0,0 @@
|
||||
/**
|
||||
* Contains:
|
||||
* Industrial Feeding Tube
|
||||
*/
|
||||
|
||||
/obj/structure/disposaloutlet/industrial_feeding_tube
|
||||
name = "\improper industrial feeding tube"
|
||||
desc = "An imposing machine designed to pump an absurd amount of \"food\" down something's throat. It seems to connect to disposal pipes."
|
||||
icon = 'GainStation13/icons/obj/feeding_tube_industrial.dmi'
|
||||
icon_state = "base"
|
||||
max_integrity = 500 //Durable...
|
||||
anchored = FALSE
|
||||
/// Is it welded down?
|
||||
var/welded = FALSE
|
||||
/// Who the tube is attached to
|
||||
var/mob/living/attached
|
||||
/// Where the tube tries to dump it's stuff into
|
||||
var/output_dest
|
||||
/// It's Glogged !
|
||||
var/clogged = FALSE
|
||||
/// Are we currently pumping?
|
||||
var/pumping = FALSE
|
||||
/// Stuff we're currently trying to pump out
|
||||
var/list/pump_stuff = list()
|
||||
/// How many items we can push per-pump.
|
||||
var/pump_limit = 5
|
||||
|
||||
|
||||
/obj/structure/disposaloutlet/industrial_feeding_tube/Initialize(mapload)
|
||||
. = ..()
|
||||
|
||||
update_icon()
|
||||
|
||||
if(anchored) // So it can be mapped in, attached to something.
|
||||
trunk = locate() in loc
|
||||
if(!trunk)
|
||||
return
|
||||
trunk.linked = src // link the pipe trunk to self
|
||||
anchored = TRUE
|
||||
welded = TRUE //Make it functional
|
||||
|
||||
/obj/structure/disposaloutlet/industrial_feeding_tube/examine(mob/user)
|
||||
. = ..()
|
||||
if(LAZYLEN(pump_stuff))
|
||||
switch(LAZYLEN(pump_stuff))
|
||||
if(1)
|
||||
. += "It seems to have something inside"
|
||||
if(2 to 20)
|
||||
. += "It seems to have some stuff inside"
|
||||
if(21 to 50)
|
||||
. += "It seems to be rather full of stuff!"
|
||||
if(51 to 200)
|
||||
. += "<b>It's walls are bulging out with tons of stuff packed inside!!</b>"
|
||||
else
|
||||
. += "<span class='danger'>The whole machine is shuddering as it strains to contain hundreds of objects!</span>"
|
||||
if(clogged)
|
||||
. += "<span class='warning'>It seems to be clogged with stuff!</span>"
|
||||
|
||||
|
||||
/obj/structure/disposaloutlet/industrial_feeding_tube/CheckParts(list/parts_list)
|
||||
..()
|
||||
pump_limit = 0
|
||||
for(var/obj/item/stock_parts/matter_bin/mb in contents)
|
||||
if(mb in pump_stuff) //stuff we're going to pump are not being used to build us.
|
||||
continue
|
||||
pump_limit += mb.rating * 2.5 // ~20 items per pump with 2 bluespace bins
|
||||
|
||||
pump_limit = ceil(pump_limit) //Only whole numbers
|
||||
|
||||
|
||||
/obj/structure/disposaloutlet/industrial_feeding_tube/deconstruct(disassembled)
|
||||
if(!(flags_1 & NODECONSTRUCT_1))
|
||||
new /obj/item/stack/sheet/metal(loc, 5)
|
||||
new /obj/item/stack/sheet/plastic(loc, 5)
|
||||
new /obj/item/pipe/binary(loc, PIPE_STRAIGHT, NORTH)
|
||||
new /obj/item/pipe/binary(loc, PIPE_STRAIGHT, NORTH)
|
||||
|
||||
if(contents) //Anything still glogged inside...
|
||||
for(var/atom/movable/AM in src)
|
||||
AM.forceMove(loc)
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/disposaloutlet/industrial_feeding_tube/Destroy()
|
||||
if(attached)
|
||||
attached = null
|
||||
if(output_dest)
|
||||
output_dest = null
|
||||
|
||||
if(LAZYLEN(contents)) // Just to be safe, lets dump everything out before it's deleted.
|
||||
for(var/atom/movable/AM in contents)
|
||||
if(istype(AM, /obj/item/stock_parts/matter_bin))
|
||||
if(AM in pump_stuff) // Unless it's one of our component parts..
|
||||
AM.forceMove(loc)
|
||||
continue
|
||||
qdel(AM)
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/structure/disposaloutlet/industrial_feeding_tube/MouseDrop(mob/living/target)
|
||||
. = ..()
|
||||
if(!usr.canUseTopic(src, BE_CLOSE))
|
||||
return
|
||||
if(!welded)
|
||||
to_chat(usr, "<span class='warning'>You need to weld down \the [src] before you can use it.</span>")
|
||||
return
|
||||
if(attached)
|
||||
attached.visible_message("<span class='warning'>\The [src]'s tube is removed from [attached].</span>", "<span class='warning'>The tube is removed from you.")
|
||||
detach_tube(FALSE)
|
||||
return
|
||||
if(!isliving(target))
|
||||
return
|
||||
|
||||
if(iscarbon(target)) // iscarbon() so that xenos/wendigos(?) can do feeding stuff maybe. Maybe.
|
||||
var/mob/living/carbon/feedee = target
|
||||
|
||||
if(HAS_TRAIT(feedee, TRAIT_TRASHCAN) || (feedee.vore_flags & FEEDING))
|
||||
var/food_dump = input(usr, "Where do you shove the tube? (cancel to just feed normally)", "Select belly") as null|anything in feedee.vore_organs
|
||||
if(food_dump && isbelly(food_dump))
|
||||
// Best to be safe with this thing. Since you can eat pretty much anythign with it...
|
||||
// Including People, Intentionally or otherwise.
|
||||
if(usr != feedee) // If someone is feeding themself, skip the prefcheck.
|
||||
var/feedeePrefCheck = alert(feedee, "[usr] is attempting to shove \the [src]'s tube into your [food_dump]! Do you want this?", "THE TUBE", "Yes!!", "No!")
|
||||
if(feedeePrefCheck != "Yes!!")
|
||||
to_chat(usr, "[feedee] doesnt want to be fed by \the [src]...")
|
||||
return
|
||||
|
||||
attach_tube(feedee, food_dump) // Attach in Vore Mode
|
||||
return
|
||||
|
||||
//Either we arn't attaching to vorebelly, or we arnt able to. Let's try to feed them normally!
|
||||
if(usr != feedee)
|
||||
var/feedeePrefCheck = alert(feedee, "[usr] is attempting to shove \the [src]'s tube into your mouth! Do you want this?", "THE TUBE", "Yes!!", "No!")
|
||||
if(feedeePrefCheck != "Yes!!")
|
||||
to_chat(usr, "[feedee] doesnt want to be fed by \the [src]...")
|
||||
return
|
||||
|
||||
attach_tube(feedee) // Attach normally
|
||||
return
|
||||
|
||||
/// Attaches the tube to the target. dest defaults to the target, if dest isnt defined
|
||||
/obj/structure/disposaloutlet/industrial_feeding_tube/proc/attach_tube(var/mob/living/target, var/dest = null, var/loud = TRUE)
|
||||
if(!target)
|
||||
return FALSE
|
||||
if(dest)
|
||||
output_dest = dest
|
||||
else
|
||||
output_dest = target
|
||||
attached = target
|
||||
|
||||
if(loud)
|
||||
if(isbelly(output_dest))
|
||||
target.visible_message("\The [src]'s tube is shoved into [attached]!", "The tube is shoved directly into your [output_dest]!")
|
||||
else
|
||||
target.visible_message("\The [src]'s tube is shoved into [attached]!", "The tube is shoved directly into you!")
|
||||
|
||||
RegisterSignal(target, COMSIG_MOVABLE_MOVED, PROC_REF(check_target_dist))
|
||||
update_icon()
|
||||
face_atom(target)
|
||||
|
||||
/obj/structure/disposaloutlet/industrial_feeding_tube/proc/detach_tube(var/loud = TRUE)
|
||||
UnregisterSignal(attached, COMSIG_MOVABLE_MOVED)
|
||||
if(loud)
|
||||
attached.visible_message("<span class='warning'>[attached] is detached from [src].</span>")
|
||||
attached = null
|
||||
output_dest = null
|
||||
update_icon()
|
||||
|
||||
|
||||
/obj/structure/disposaloutlet/industrial_feeding_tube/proc/check_target_dist()
|
||||
if(!attached) //oh no
|
||||
UnregisterSignal()
|
||||
|
||||
if(!(get_dist(src, attached) <= 1 && isturf(attached.loc)))
|
||||
attached.visible_message("<span class='danger'The feeding tube is yanked out of [attached]!</span>","<span class='userdanger'>The feeding hose is yanked out of you!</span>")
|
||||
detach_tube(FALSE)
|
||||
return
|
||||
|
||||
face_atom(attached)
|
||||
|
||||
/obj/structure/disposaloutlet/industrial_feeding_tube/update_overlays()
|
||||
// A lot of this is temp. More likely than not you shouldnt see this comment as it'll be properly updated when reo PRs this.
|
||||
// Or it wont because epic fail :333
|
||||
. = ..()
|
||||
cut_overlays()
|
||||
|
||||
var/mutable_appearance/tube_overlay = mutable_appearance('GainStation13/icons/obj/feeding_tube_industrial.dmi', "tube_idle")
|
||||
|
||||
if(pumping)
|
||||
tube_overlay.icon_state = "tube-pump"
|
||||
else
|
||||
if(attached)
|
||||
tube_overlay.icon_state = "tube-active"
|
||||
else
|
||||
tube_overlay.icon_state = "tube-idle"
|
||||
|
||||
if(welded) //if we're not welded, dont show our light on.
|
||||
add_overlay("light-[clogged ? "r" : "g"]")
|
||||
|
||||
add_overlay(tube_overlay)
|
||||
|
||||
|
||||
// expel the contents of the holder object, then delete it
|
||||
// called when the holder exits the outlet
|
||||
/obj/structure/disposaloutlet/industrial_feeding_tube/expel(obj/structure/disposalholder/H)
|
||||
if(H.hasmob) //Uh oh-
|
||||
playsound(src, "clang", 100)
|
||||
visible_message("<span class='danger'>\The [src] loudly clunks as something large enters it's intake!</span>")
|
||||
H.active = FALSE
|
||||
H.vent_gas(get_turf(src))
|
||||
if(clogged)
|
||||
clog(H.contents)
|
||||
else
|
||||
var/start_pumping = FALSE
|
||||
for(var/atom/movable/AM in H.contents)
|
||||
pump_stuff += AM // Get ready to pump!
|
||||
AM.forceMove(src)
|
||||
if(!pumping) //Lets start a new pump cycle if we arnt pumping. Otherwise, it'll just be added to the queue.
|
||||
start_pumping = TRUE
|
||||
pumping = TRUE
|
||||
if(start_pumping)
|
||||
pump()
|
||||
qdel(H)
|
||||
|
||||
/obj/structure/disposaloutlet/industrial_feeding_tube/proc/pump(repeat = TRUE, unlimited = FALSE)
|
||||
if(clogged)
|
||||
return
|
||||
var/list/this_pump = list() //What we're going to pump this cycle
|
||||
var/item_count = 0
|
||||
for(var/atom/movable/AM in pump_stuff)
|
||||
this_pump += AM // Add to the stuff we're currently pumping
|
||||
item_count++
|
||||
if(item_count > pump_limit && !unlimited) //We're pumping as much as our parts allow!
|
||||
break
|
||||
if(!pumping)
|
||||
pumping = TRUE
|
||||
playsound(src, 'GainStation13/sound/rakshasa/Corrosion3.ogg', 50, 1)
|
||||
update_icon()
|
||||
spawn(8)
|
||||
pumping = FALSE
|
||||
update_icon()
|
||||
spawn(9) //Wait for the animation to finish
|
||||
|
||||
|
||||
if(!output_dest || !attached) //We either arnt, or got disconnected by time stuff was about to splort out!
|
||||
spew(this_pump, TRUE)
|
||||
if(LAZYLEN(pump_stuff) && repeat)
|
||||
pump()
|
||||
return
|
||||
|
||||
var/fed_something = FALSE
|
||||
// Feed Normally
|
||||
if(isliving(output_dest))
|
||||
var/list/not_food = list()
|
||||
for(var/atom/movable/AM in this_pump)
|
||||
if(istype(AM, /obj/item/reagent_containers/food/snacks))
|
||||
var/obj/item/reagent_containers/food/snacks/food = AM
|
||||
var/datum/reagents/food_reagents = food.reagents
|
||||
if(food_reagents.total_volume)
|
||||
var/food_size = food_reagents.total_volume //We're cramming the Whole Thing down your throat~
|
||||
|
||||
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.
|
||||
|
||||
|
||||
if(food.trash) //Lets make the trash the food's supposed to make, if it has any
|
||||
var/obj/item/trash = food.generate_trash(src)
|
||||
if(not_food)
|
||||
not_food += trash // If it's already going to get clogged, clog it more with the trash
|
||||
else
|
||||
trash.forceMove(get_turf(src)) // Otherwise move it to the tile. For convinience
|
||||
|
||||
fed_something = TRUE
|
||||
pump_stuff -= food
|
||||
qdel(food) //Gulp...
|
||||
continue
|
||||
else
|
||||
not_food += AM // That's not (traditionally) edible!
|
||||
|
||||
if(LAZYLEN(not_food))
|
||||
clog(not_food) // Now you've gone and clogged us...
|
||||
|
||||
// Feed Voraciously
|
||||
if(isbelly(output_dest))
|
||||
var/list/inedible //Some things shouldnt be eaten...
|
||||
for(var/atom/movable/AM in this_pump)
|
||||
pump_stuff -= AM // We're putting this in. Remove it from the list.
|
||||
if(isitem(AM))
|
||||
var/obj/item/I = AM
|
||||
if(is_type_in_list(I, item_vore_blacklist))
|
||||
inedible += I
|
||||
continue
|
||||
|
||||
if(isliving(AM))
|
||||
var/mob/living/cutie = AM
|
||||
if(!(cutie.vore_flags & DEVOURABLE)) //Do not eat this QT...
|
||||
inedible += cutie
|
||||
continue
|
||||
|
||||
|
||||
fed_something = TRUE
|
||||
AM.forceMove(output_dest)
|
||||
if(inedible)
|
||||
clog(inedible)
|
||||
|
||||
// After everything, if we've pushed something, play the "rubber tube noise"
|
||||
// It's technically an evil digestion sound from a snowflake shadekin, but it makes for a good tube sound. Thanks Verkie!
|
||||
if(fed_something)
|
||||
playsound(attached.loc, 'GainStation13/sound/rakshasa/Corrosion3.ogg', rand(50,70), 1)
|
||||
|
||||
if(LAZYLEN(pump_stuff) && repeat)
|
||||
pump()
|
||||
else
|
||||
pumping = FALSE
|
||||
update_icon()
|
||||
|
||||
/obj/structure/disposaloutlet/industrial_feeding_tube/expel_holder(obj/structure/disposalholder/H, playsound=FALSE)
|
||||
if(playsound)
|
||||
playsound(src, 'sound/machines/hiss.ogg', 25, 0, 0)
|
||||
|
||||
if(!H)
|
||||
return
|
||||
|
||||
spew(H.contents)
|
||||
|
||||
H.vent_gas(get_turf(src))
|
||||
qdel(H)
|
||||
|
||||
/obj/structure/disposaloutlet/industrial_feeding_tube/attack_hand(mob/user)
|
||||
. = ..()
|
||||
if(attached)
|
||||
detach_tube()
|
||||
return
|
||||
|
||||
/obj/structure/disposaloutlet/industrial_feeding_tube/attackby(obj/item/I, mob/living/user, params)
|
||||
if(user.a_intent != INTENT_HELP)
|
||||
return ..()
|
||||
switch(I.tool_behaviour)
|
||||
if(TOOL_WRENCH)
|
||||
if(welded)
|
||||
to_chat(user, "<span class='warning'>\The [src] is firmly welded to the floor. Cut the floorwelds before trying to unwrench it!</span>")
|
||||
return TRUE
|
||||
var/turf/T = get_turf(src)
|
||||
if(T.intact && isfloorturf(T))
|
||||
to_chat(user, "<span class='warning'>You need to remove the floor tiles before [anchored ? "detaching" : "attaching"] \the [src]!</span>")
|
||||
return TRUE
|
||||
if(anchored)
|
||||
I.play_tool_sound(src, 100)
|
||||
|
||||
anchored = FALSE
|
||||
trunk.linked = null
|
||||
trunk = null
|
||||
attached = null
|
||||
output_dest = null
|
||||
|
||||
user.visible_message("<span class='notice'>[user] detaches \the [src] from the floor!</span>")
|
||||
return TRUE
|
||||
else
|
||||
var/found_trunk = FALSE
|
||||
for(var/obj/structure/disposalpipe/P in T)
|
||||
if(istype(P, /obj/structure/disposalpipe/trunk))
|
||||
var/obj/structure/disposalpipe/trunk/newtrunk = P
|
||||
if(newtrunk.linked) //Trunk is already linked to something
|
||||
continue
|
||||
found_trunk = TRUE
|
||||
trunk = newtrunk
|
||||
break
|
||||
if(!found_trunk)
|
||||
to_chat(user, "<span class='warning'>\The [src] requires a trunk underneath it in order to work!</span>")
|
||||
return
|
||||
|
||||
to_chat(user, "<span class='notice'>You attach \the [src] to the trunk.</span>")
|
||||
anchored = TRUE
|
||||
|
||||
I.play_tool_sound(src, 100)
|
||||
update_icon()
|
||||
return
|
||||
|
||||
. = ..()
|
||||
|
||||
/obj/structure/disposaloutlet/industrial_feeding_tube/crowbar_act(mob/living/user, obj/item/I)
|
||||
if(!clogged)
|
||||
to_chat(user, "<span class='notice'>\The [src] doesnt seem to be clogged at the moment...")
|
||||
return TRUE
|
||||
user.visible_message("<span class='italics'>[user] starts to pry open the maintenance hatch of \the [src], attempting to unclog it...</span>")
|
||||
I.play_tool_sound(src, 100)
|
||||
if(I.use_tool(src, user, 30))
|
||||
user.visible_message("<span class='notice'>[user] pries open the maintenance hatch on \the [src], unclogging it!</span>")
|
||||
unclog()
|
||||
return TRUE
|
||||
|
||||
|
||||
// Plungers are a thing now, why not give them the ability to unclog?
|
||||
/obj/structure/disposaloutlet/industrial_feeding_tube/plunger_act(obj/item/plunger/P, mob/living/user, reinforced)
|
||||
if(!clogged)
|
||||
to_chat(user, "<span class='notice'>\The [src] doesnt seem to be clogged at the moment...")
|
||||
return TRUE
|
||||
user.visible_message("<span class='italics'>[user] starts to furiously plunge the tube of \the [src], attempting to unclog it...</span>")
|
||||
//I.play_tool_sound(src, 100) I dont think plungers have a use sound...
|
||||
if(P.use_tool(src, user, 20)) //Plungers are slightly shorter because funny niche use
|
||||
user.visible_message("<span class='notice'>[user] pries open the maintenance hatch on \the [src], unclogging it!</span>")
|
||||
unclog()
|
||||
return
|
||||
|
||||
/obj/structure/disposaloutlet/industrial_feeding_tube/welder_act(mob/living/user, obj/item/I)
|
||||
if(!I.tool_start_check(user, amount=0))
|
||||
return
|
||||
if(anchored)
|
||||
//var/turf/T = get_turf(src)
|
||||
if(!welded)
|
||||
if(!trunk) // If we're attaching it, we need to check for the pipe we're attaching to
|
||||
to_chat(user, "<span class='danger'>\The [src] needs to be welded to a trunk.</span>")
|
||||
return TRUE
|
||||
to_chat(user, "<span class='notice'>You start welding \the [src] in place...</span>")
|
||||
else
|
||||
if(clogged) // There's junk inside!
|
||||
to_chat(user, "<span class='warning'>There's junk inside \the [src]! Clean it out before trying to remove it!</span>")
|
||||
return TRUE
|
||||
//Already welded, lets cut it free
|
||||
to_chat(user, "<span class='notice'>You start slicing the floorweld off \the [src]...</span>")
|
||||
|
||||
playsound(src, 'sound/items/welder2.ogg', 100, 1)
|
||||
if(I.use_tool(src, user, 20))
|
||||
update_icon()
|
||||
playsound(src, 'sound/items/welder.ogg', 100, 1)
|
||||
if(welded)
|
||||
to_chat(user, "<span class='notice'>You slice the floorweld off [src].</span>")
|
||||
welded = FALSE
|
||||
trunk.linked = null
|
||||
return TRUE
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You weld \the [src] to the floor.</span>")
|
||||
welded = TRUE
|
||||
trunk.linked = src
|
||||
return TRUE
|
||||
|
||||
|
||||
else
|
||||
playsound(src, 'sound/items/welder2.ogg', 100, 1)
|
||||
to_chat(user, "<span class='notice'>You begin deconstructing \the [src]</span>")
|
||||
if(I.use_tool(src, user, 30))
|
||||
playsound(src, 'sound/items/welder.ogg', 100, 1)
|
||||
deconstruct(TRUE)
|
||||
return TRUE
|
||||
|
||||
// Someone got stuck inside after it got clogged!
|
||||
// Lets let them force their way out
|
||||
/obj/structure/disposaloutlet/industrial_feeding_tube/container_resist(mob/living/user)
|
||||
if(user.stat || !clogged) //If it's not clogged, they'll be ejected soon... One way or another.
|
||||
return
|
||||
playsound(src, 'sound/effects/clang.ogg', 50)
|
||||
visible_message("\The [src] loudly clongs as something inside tries to break free!")
|
||||
if(do_after(user, 100))
|
||||
unclog()
|
||||
|
||||
/obj/structure/disposaloutlet/industrial_feeding_tube/proc/clog(list/clog_junk, loud = TRUE)
|
||||
clogged = TRUE
|
||||
for(var/atom/movable/AM in clog_junk)
|
||||
if(!(AM in pump_stuff))
|
||||
pump_stuff += AM
|
||||
AM.forceMove(src)
|
||||
|
||||
|
||||
update_icon()
|
||||
if(loud)
|
||||
playsound(src, 'sound/machines/warning-buzzer.ogg', 50, 1)
|
||||
|
||||
/obj/structure/disposaloutlet/industrial_feeding_tube/proc/unclog()
|
||||
|
||||
spew(pump_stuff)
|
||||
|
||||
clogged = FALSE
|
||||
update_icon()
|
||||
|
||||
/obj/structure/disposaloutlet/industrial_feeding_tube/proc/spew(var/list/spew_stuff, playsound = FALSE)
|
||||
var/turf/T = get_turf(src)
|
||||
|
||||
if(playsound)
|
||||
playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0)
|
||||
for(var/atom/movable/AM in spew_stuff)
|
||||
if(AM in pump_stuff)
|
||||
pump_stuff -= AM
|
||||
target = get_offset_target_turf(loc, rand(2)-rand(2), rand(2)-rand(2))
|
||||
|
||||
AM.forceMove(T)
|
||||
AM.pipe_eject(dir)
|
||||
AM.throw_at(target, eject_range, 1)
|
||||
|
||||
/obj/structure/disposaloutlet/industrial_feeding_tube/proc/face_atom(atom/A) //Literally stolen from /mob. Sue me.
|
||||
if(!A || !x || !y || !A.x || !A.y )
|
||||
return
|
||||
var/dx = A.x - x
|
||||
var/dy = A.y - y
|
||||
if(!dx && !dy) // Wall items are graphically shifted but on the floor
|
||||
if(A.pixel_y > 16)
|
||||
setDir(NORTH)
|
||||
else if(A.pixel_y < -16)
|
||||
setDir(SOUTH)
|
||||
else if(A.pixel_x > 16)
|
||||
setDir(EAST)
|
||||
else if(A.pixel_x < -16)
|
||||
setDir(WEST)
|
||||
return
|
||||
|
||||
if(abs(dx) < abs(dy))
|
||||
if(dy > 0)
|
||||
setDir(NORTH)
|
||||
else
|
||||
setDir(SOUTH)
|
||||
else
|
||||
if(dx > 0)
|
||||
setDir(EAST)
|
||||
else
|
||||
setDir(WEST)
|
||||
@@ -1,28 +1,6 @@
|
||||
/datum/material/calorite
|
||||
name = "calorite"
|
||||
sheet_type = /obj/item/stack/sheet/mineral/calorite
|
||||
color = list(340/255, 150/255, 50/255,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0)
|
||||
strength_modifier = 1.5
|
||||
categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE)
|
||||
beauty_modifier = 0.05
|
||||
armor_modifiers = list(MELEE = 1.1, BULLET = 1.1, LASER = 1.15, ENERGY = 1.15, BOMB = 1, BIO = 1, RAD = 1, FIRE = 0.7, ACID = 1.1) // Same armor as gold.
|
||||
|
||||
/datum/material/calorite/on_applied_obj(obj/source, amount, material_flags)
|
||||
. = ..()
|
||||
if(!(material_flags & MATERIAL_AFFECT_STATISTICS))
|
||||
return
|
||||
|
||||
var/obj/source_obj = source
|
||||
source_obj.damtype = FAT
|
||||
|
||||
/datum/material/calorite/on_removed_obj(obj/source, material_flags)
|
||||
if(!(material_flags & MATERIAL_AFFECT_STATISTICS))
|
||||
return ..()
|
||||
|
||||
var/obj/source_obj = source
|
||||
source_obj.damtype = initial(source_obj.damtype)
|
||||
return ..()
|
||||
|
||||
|
||||
/turf/closed/mineral/calorite //GS13
|
||||
mineralType = /obj/item/stack/ore/calorite
|
||||
@@ -36,7 +14,6 @@
|
||||
points = 40
|
||||
custom_materials = list(/datum/material/calorite=MINERAL_MATERIAL_AMOUNT)
|
||||
refined_type = /obj/item/stack/sheet/mineral/calorite
|
||||
mine_experience = 20
|
||||
|
||||
/obj/item/stack/sheet/mineral/calorite
|
||||
name = "calorite"
|
||||
@@ -48,21 +25,17 @@
|
||||
novariants = TRUE
|
||||
grind_results = list(/datum/reagent/consumable/lipoifier = 2)
|
||||
point_value = 40
|
||||
custom_materials = list(/datum/material/calorite=MINERAL_MATERIAL_AMOUNT)
|
||||
merge_type = /obj/item/stack/sheet/mineral/calorite
|
||||
material_type = /datum/material/calorite
|
||||
walltype = /turf/closed/wall/mineral/calorite
|
||||
|
||||
GLOBAL_LIST_INIT(calorite_recipes, list ( \
|
||||
new/datum/stack_recipe("Calorite tile", /obj/item/stack/tile/mineral/calorite, 1, 4, 20), \
|
||||
new/datum/stack_recipe("Calorite Ingots", /obj/item/ingot/calorite, time = 30), \
|
||||
new/datum/stack_recipe("Fatty statue", /obj/structure/statue/calorite/fatty, 5, one_per_turf = 1, on_floor = 1),\
|
||||
new/datum/stack_recipe("Calorite doors", /obj/structure/mineral_door/calorite, 5, one_per_turf = 1, on_floor = 1),\
|
||||
new/datum/stack_recipe("Fatty statue", /obj/structure/statue/calorite/fatty, 5, one_per_turf = 1, on_floor = 1),
|
||||
new/datum/stack_recipe("Calorite doors", /obj/structure/mineral_door/calorite, 5, one_per_turf = 1, on_floor = 1),
|
||||
))
|
||||
|
||||
/obj/item/stack/sheet/mineral/calorite/get_main_recipes()
|
||||
/obj/item/stack/sheet/mineral/calorite/Initialize(mapload, new_amount, merge = TRUE)
|
||||
recipes = GLOB.calorite_recipes
|
||||
. = ..()
|
||||
. += GLOB.calorite_recipes
|
||||
|
||||
|
||||
/obj/item/stack/tile/mineral/calorite //GS13
|
||||
@@ -269,5 +242,3 @@ GLOBAL_LIST_INIT(calorite_recipes, list ( \
|
||||
fatten()
|
||||
. = ..()
|
||||
|
||||
/obj/item/ingot/calorite
|
||||
custom_materials = list(/datum/material/calorite=1500)
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
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))
|
||||
|
||||
/mob/living
|
||||
var/burpslurring = 0 //GS13 - necessary due to "say" being defined by mob/living
|
||||
|
||||
/mob/living/carbon
|
||||
//Due to the changes needed to create the system to hide fatness, here's some notes:
|
||||
// -If you are making a mob simply gain or lose weight, use adjust_fatness. Try to not touch the variables directly unless you know 'em well
|
||||
@@ -24,7 +21,10 @@ GLOBAL_LIST_INIT(uncapped_resize_areas, list(/area/command/bridge, /area/mainten
|
||||
var/doorstuck = 0
|
||||
|
||||
var/fullness = FULLNESS_LEVEL_HALF_FULL
|
||||
var/fullness_reduction_timer = 0 // When was the last time they emoted to reduce their fullness
|
||||
var/fullness_reduction_timer = 0
|
||||
var/burpslurring = 0
|
||||
|
||||
var/fullness_reducion_timer = 0 // When was the last time they emoted to reduce their fullness
|
||||
|
||||
/**
|
||||
* Adjusts the fatness level of the parent mob.
|
||||
@@ -60,25 +60,6 @@ GLOBAL_LIST_INIT(uncapped_resize_areas, list(/area/command/bridge, /area/mainten
|
||||
perma_apply() //Check and apply for permanent fat
|
||||
xwg_resize() //Apply XWG
|
||||
|
||||
// Handle Awards
|
||||
if(client)
|
||||
if(fatness > FATNESS_LEVEL_BLOB)
|
||||
client.give_award(/datum/award/achievement/fat/blob, src)
|
||||
if(fatness > 10000)
|
||||
client.give_award(/datum/award/achievement/fat/milestone_one, src)
|
||||
if(fatness > 25000)
|
||||
client.give_award(/datum/award/achievement/fat/milestone_two, src)
|
||||
if(fatness > 50000)
|
||||
client.give_award(/datum/award/achievement/fat/milestone_three, src)
|
||||
if(fatness > 100000)
|
||||
client.give_award(/datum/award/achievement/fat/milestone_four, src)
|
||||
if(fatness > 500000)
|
||||
client.give_award(/datum/award/achievement/fat/milestone_five, src)
|
||||
if(fatness > 1000000)
|
||||
client.give_award(/datum/award/achievement/fat/milestone_six, src)
|
||||
if(fatness > 10000000)
|
||||
client.give_award(/datum/award/achievement/fat/milestone_seven, src)
|
||||
|
||||
return TRUE
|
||||
|
||||
/mob/living/carbon/fully_heal(admin_revive)
|
||||
@@ -95,9 +76,6 @@ GLOBAL_LIST_INIT(uncapped_resize_areas, list(/area/command/bridge, /area/mainten
|
||||
return FALSE
|
||||
|
||||
switch(type_of_fattening)
|
||||
if(FATTENING_TYPE_ALMIGHTY)
|
||||
return TRUE
|
||||
|
||||
if(FATTENING_TYPE_ITEM)
|
||||
if(!client?.prefs?.weight_gain_items)
|
||||
return FALSE
|
||||
@@ -126,10 +104,6 @@ GLOBAL_LIST_INIT(uncapped_resize_areas, list(/area/command/bridge, /area/mainten
|
||||
if(!client?.prefs?.weight_gain_nanites)
|
||||
return FALSE
|
||||
|
||||
if(FATTENING_TYPE_ATMOS)
|
||||
if(!client?.prefs?.weight_gain_atmos)
|
||||
return FALSE
|
||||
|
||||
if(FATTENING_TYPE_WEIGHT_LOSS)
|
||||
if(HAS_TRAIT(src, TRAIT_WEIGHT_LOSS_IMMUNE))
|
||||
return FALSE
|
||||
@@ -216,9 +190,9 @@ GLOBAL_LIST_INIT(uncapped_resize_areas, list(/area/command/bridge, /area/mainten
|
||||
var/xwg_size = sqrt(fatness/FATNESS_LEVEL_BLOB)
|
||||
xwg_size = min(xwg_size, RESIZE_MACRO)
|
||||
xwg_size = max(xwg_size, custom_body_size)
|
||||
if(xwg_size > RESIZE_A_HUGEBIG) //check if the size needs capping otherwise don't bother searching the list
|
||||
if(xwg_size > RESIZE_BIG) //check if the size needs capping otherwise don't bother searching the list
|
||||
if(!is_type_in_list(get_area(src), GLOB.uncapped_resize_areas)) //if the area is not int the uncapped whitelist and new size is over the cap
|
||||
xwg_size = RESIZE_A_HUGEBIG
|
||||
xwg_size = RESIZE_BIG
|
||||
resize(xwg_size)
|
||||
|
||||
/proc/get_fatness_level_name(fatness_amount)
|
||||
@@ -233,7 +207,7 @@ GLOBAL_LIST_INIT(uncapped_resize_areas, list(/area/command/bridge, /area/mainten
|
||||
if(fatness_amount < FATNESS_LEVEL_MORBIDLY_OBESE)
|
||||
return "Obese"
|
||||
if(fatness_amount < FATNESS_LEVEL_EXTREMELY_OBESE)
|
||||
return "Very Obese"
|
||||
return "Morbidly Obese"
|
||||
if(fatness_amount < FATNESS_LEVEL_BARELYMOBILE)
|
||||
return "Extremely Obese"
|
||||
if(fatness_amount < FATNESS_LEVEL_IMMOBILE)
|
||||
@@ -277,11 +251,3 @@ GLOBAL_LIST_INIT(uncapped_resize_areas, list(/area/command/bridge, /area/mainten
|
||||
var/fat_to_add = ((amount * CONFIG_GET(number/damage_multiplier)) * FAT_DAMAGE_TO_FATNESS)
|
||||
adjust_fatness(fat_to_add, FATTENING_TYPE_WEAPON)
|
||||
return fat_to_add
|
||||
|
||||
/mob/living/carbon/proc/applyPermaFatnessDamage(amount)
|
||||
if(!client?.prefs?.weight_gain_permanent) // If we cant apply permafat, apply regular fat
|
||||
return applyFatnessDamage(amount)
|
||||
|
||||
var/fat_to_add = ((amount * CONFIG_GET(number/damage_multiplier)) * PERMA_FAT_DAMAGE_TO_FATNESS)
|
||||
adjust_perma(fat_to_add, FATTENING_TYPE_WEAPON)
|
||||
return fat_to_add
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
/obj/item/organ/lungs/proc/lipoifium_breathing(datum/gas_mixture/breath, mob/living/carbon/human/H)
|
||||
if(breath)
|
||||
var/pressure = breath.return_pressure()
|
||||
var/total_moles = breath.total_moles()
|
||||
var/lipoifium_moles = breath.get_moles(GAS_FAT)
|
||||
#define PP_MOLES(X) ((X / total_moles) * pressure)
|
||||
var/gas_breathed = PP_MOLES(lipoifium_moles) // this does the same thing as the bit below but I think this is more readable
|
||||
// #define PP(air, gas) PP_MOLES(air.get_moles(gas))
|
||||
// var/gas_breathed = PP(breath, GAS_FAT)
|
||||
if(gas_breathed > 0)
|
||||
// listen I know I can debug this but sometimes having this show up in chat without a pause is more convenient
|
||||
// message_admins("Lipoifium pp is [gas_breathed]")
|
||||
// message_admins("Lipoifium moles are [lipoifium_moles]")
|
||||
H.adjust_fatness(2 * gas_breathed, FATTENING_TYPE_ATMOS)
|
||||
breath.adjust_moles(GAS_FAT, -gas_breathed)
|
||||
// TODO: the entire code below is a workaround for default odor not working
|
||||
// The problem seems to be auxmos'es get_gasses function not acknowledging that lipoifium exists
|
||||
// which is strange, considering that everything else regarding this gas and auxmos works
|
||||
// I do not know what kind of spaghetti coding must be going on there, but I pray god has in his
|
||||
// care the poor sods who have to work on that
|
||||
var/smell_chance = min(lipoifium_moles * 100 / total_moles, 20)
|
||||
if(prob(smell_chance))
|
||||
to_chat(owner, "<span class='notice'>You can smell lard.</span>")
|
||||
|
||||
|
||||
/obj/item/organ/lungs/check_breath(datum/gas_mixture/breath, mob/living/carbon/human/H)
|
||||
lipoifium_breathing(breath, H)
|
||||
. = ..()
|
||||
@@ -5,21 +5,16 @@
|
||||
return ..()
|
||||
|
||||
/datum/species/can_equip(obj/item/I, slot, disable_warning, mob/living/carbon/human/H, bypass_equip_delay_self)
|
||||
if(!istype(I, /obj/item/mod) && HAS_TRAIT(H, TRAIT_NO_BACKPACK) && slot ==ITEM_SLOT_BACK)
|
||||
if(HAS_TRAIT(H, TRAIT_NO_BACKPACK) && slot ==ITEM_SLOT_BACK)
|
||||
to_chat(H, "<span class='warning'>You are too fat to wear anything on your back.</span>")
|
||||
return FALSE
|
||||
|
||||
if(I.modular_icon_location == null && HAS_TRAIT(H, TRAIT_NO_JUMPSUIT) && slot == ITEM_SLOT_ICLOTHING)
|
||||
if(!istype(I, /obj/item/clothing/under/color/grey/modular) && HAS_TRAIT(H, TRAIT_NO_JUMPSUIT) && slot == ITEM_SLOT_ICLOTHING)
|
||||
to_chat(H, "<span class='warning'>You are too fat to wear [I].</span>")
|
||||
return FALSE
|
||||
|
||||
if(!mod_check(I) && HAS_TRAIT(H, TRAIT_NO_MISC) && (slot == ITEM_SLOT_FEET || slot ==ITEM_SLOT_GLOVES || slot == ITEM_SLOT_OCLOTHING))
|
||||
if(HAS_TRAIT(H, TRAIT_NO_MISC) && (slot == ITEM_SLOT_FEET || slot ==ITEM_SLOT_GLOVES || slot == ITEM_SLOT_OCLOTHING))
|
||||
to_chat(H, "<span class='warning'>You are too fat to wear [I].</span>")
|
||||
return FALSE
|
||||
|
||||
return ..()
|
||||
|
||||
/datum/species/proc/mod_check(I)
|
||||
if(istype(I, /obj/item/mod) || istype(I, /obj/item/clothing/head/mod) || istype(I, /obj/item/clothing/gloves/mod) || istype(I, /obj/item/clothing/shoes/mod) || istype(I, /obj/item/clothing/suit/mod) )
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
@@ -2,10 +2,10 @@
|
||||
var/savekey
|
||||
var/ckeyslot
|
||||
|
||||
/mob/living/carbon/proc/perma_fat_save()
|
||||
/mob/living/carbon/proc/perma_fat_save(mob/living/carbon/character)
|
||||
var/key = savekey
|
||||
if(!key || !client)
|
||||
return FALSE
|
||||
if(!key)
|
||||
return FALSE
|
||||
var/filename = "preferences.sav"
|
||||
var/path = "data/player_saves/[key[1]]/[key]/[filename]"
|
||||
|
||||
@@ -13,42 +13,18 @@
|
||||
if(!path)
|
||||
return FALSE
|
||||
|
||||
if(ckeyslot)
|
||||
var/slot = ckeyslot
|
||||
if(character.ckeyslot)
|
||||
var/slot = character.ckeyslot
|
||||
S.cd = "/character[slot]"
|
||||
|
||||
var/persi
|
||||
S["weight_gain_persistent"] >> persi
|
||||
if(persi)
|
||||
WRITE_FILE(S["starting_weight"] , fatness_real)
|
||||
client.prefs.starting_weight = fatness_real
|
||||
to_chat(src, span_notice("Your starting weight has been updated!"))
|
||||
var/perma
|
||||
WRITE_FILE(S["starting_weight"] , character.fatness_real)
|
||||
var/perma
|
||||
S["weight_gain_permanent"] >> perma
|
||||
if(S["weight_gain_permanent"])
|
||||
WRITE_FILE(S["permanent_fat"] , fatness_perma)
|
||||
client.prefs.permanent_fat = fatness_perma
|
||||
to_chat(src, span_notice("Your permanent fat has been updated!"))
|
||||
|
||||
/mob/living/carbon/proc/queue_perma_save()
|
||||
to_chat(src,"Your permanence options are being saved, please wait." )
|
||||
addtimer(CALLBACK(src, PROC_REF(perma_fat_save), TRUE, silent), 3 SECONDS, TIMER_STOPPABLE)
|
||||
|
||||
/datum/controller/subsystem/ticker/declare_completion()
|
||||
. = ..()
|
||||
for(var/mob/m in GLOB.player_list)
|
||||
if(iscarbon(m))
|
||||
var/mob/living/carbon/C = m
|
||||
if(C)
|
||||
C.queue_perma_save()
|
||||
|
||||
/obj/machinery/cryopod/despawn_occupant()
|
||||
var/mob/living/mob_occupant = occupant
|
||||
if(iscarbon(mob_occupant))
|
||||
var/mob/living/carbon/C = mob_occupant
|
||||
if(C)
|
||||
C.perma_fat_save(C)
|
||||
. = ..()
|
||||
WRITE_FILE(S["permanent_fat"] , character.fatness_perma)
|
||||
|
||||
/*
|
||||
/datum/preferences/proc/perma_fat_save(character)
|
||||
@@ -69,7 +45,7 @@
|
||||
if(!S)
|
||||
return FALSE
|
||||
S.cd = "/character[default_slot]"
|
||||
|
||||
|
||||
if(C.client.prefs.weight_gain_persistent)
|
||||
WRITE_FILE(S["starting_weight"] , C.fatness_real)
|
||||
if(C.client.prefs.weight_gain_permanent)
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
/obj/item/reagent_containers/food/snacks/proc/handle_tf(mob/living/eater)
|
||||
var/datum/component/transformation_item/transformation_component = GetComponent(/datum/component/transformation_item)
|
||||
if(!istype(transformation_component) || transformation_component.transfer_to_vore || (transformation_component.transformed_mob != src))
|
||||
return FALSE
|
||||
|
||||
var/mob/living/food_mob = transformation_component.transformed_mob
|
||||
var/obj/belly/vore_belly = eater?.vore_selected
|
||||
if(!istype(food_mob) || !(food_mob?.vore_flags & DEVOURABLE) || (eater?.vore_flags & NO_VORE) || !istype(vore_belly))
|
||||
return FALSE
|
||||
|
||||
qdel(transformation_component)
|
||||
if(!vore_belly?.nom_mob(food_mob,eater))
|
||||
return FALSE
|
||||
|
||||
return TRUE
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
/mob/living/proc/get_tf_component()
|
||||
var/obj/item/item_loc = loc
|
||||
if(!istype(item_loc))
|
||||
return FALSE
|
||||
|
||||
var/datum/component/transformation_item/transformation_component = item_loc.GetComponent(/datum/component/transformation_item)
|
||||
if(!istype(transformation_component) || (transformation_component.transformed_mob != src))
|
||||
return FALSE
|
||||
|
||||
return transformation_component
|
||||
|
||||
/mob/living/proc/handle_transformation_ooc_escape()
|
||||
var/datum/component/transformation_item/transformation_component = get_tf_component()
|
||||
if(!transformation_component)
|
||||
return FALSE
|
||||
|
||||
qdel(transformation_component)
|
||||
return TRUE
|
||||
|
||||
/mob/living/proc/attempt_to_escape_tf()
|
||||
var/datum/component/transformation_item/transformation_component = get_tf_component()
|
||||
if(!transformation_component)
|
||||
return FALSE
|
||||
|
||||
if(!transformation_component.able_to_struggle_out)
|
||||
to_chat(src, span_warning("You are unable to struggle out."))
|
||||
return FALSE
|
||||
|
||||
to_chat(src, span_notice("You attempt to escape your transformation."))
|
||||
if(!do_after(src, 60 SECONDS))
|
||||
to_chat(src, span_warning("You fail to escape."))
|
||||
return FALSE
|
||||
|
||||
qdel(transformation_component)
|
||||
return TRUE
|
||||
|
||||
@@ -1,115 +0,0 @@
|
||||
/datum/component/transformation_item
|
||||
/// What mob do we currently have stuck in us?
|
||||
var/mob/living/transformed_mob
|
||||
/// Do we release the mob when the parent item is destroyed?
|
||||
var/release_mob = TRUE
|
||||
/// Is the mob able to speak as the item?
|
||||
var/able_to_speak = FALSE
|
||||
/// Is the mob able to emote as the item?
|
||||
var/able_to_emote = FALSE
|
||||
/// Does the object scale with the sprite size of the mob inside of it?
|
||||
var/scale_object = TRUE
|
||||
/// Show custom description.
|
||||
var/show_that_object_is_tf = TRUE
|
||||
/// Stored real name
|
||||
var/stored_real_name = ""
|
||||
/// Stored name
|
||||
var/stored_name = ""
|
||||
/// Is the component able to be removed?
|
||||
var/stuck_on_item = FALSE
|
||||
/// Is the person able to struggle out?
|
||||
var/able_to_struggle_out = TRUE
|
||||
/// Transfer to vore belly when eaten
|
||||
var/transfer_to_vore = TRUE
|
||||
/// Has the mob already been removed?
|
||||
var/mob_removed = FALSE
|
||||
|
||||
/datum/component/transformation_item/Initialize()
|
||||
RegisterSignal(parent, COMSIG_PARENT_EXAMINE, PROC_REF(examine))
|
||||
RegisterSignal(parent, COMSIG_PARENT_PREQDELETED, PROC_REF(remove_mob))
|
||||
|
||||
/datum/component/transformation_item/Destroy(force, silent)
|
||||
if(!mob_removed)
|
||||
remove_mob()
|
||||
|
||||
return ..()
|
||||
|
||||
/datum/component/transformation_item/proc/examine(datum/source, mob/user, list/examine_list)
|
||||
if(show_that_object_is_tf)
|
||||
examine_list += span_notice("Something about [source] seems lifelike.")
|
||||
|
||||
/datum/component/transformation_item/proc/register_mob(mob/living/mob_to_register)
|
||||
var/atom/parent_atom = parent
|
||||
if(!istype(mob_to_register))
|
||||
return FALSE
|
||||
|
||||
transformed_mob = mob_to_register
|
||||
stored_real_name = mob_to_register.real_name
|
||||
stored_name = mob_to_register.name
|
||||
|
||||
// This is really dumb, but if it works, then maybe it is not dumb.
|
||||
mob_to_register.real_name = parent_atom.name
|
||||
mob_to_register.name = parent_atom.name
|
||||
|
||||
ADD_TRAIT(mob_to_register, TRAIT_TRANSFORMED, src)
|
||||
ADD_TRAIT(mob_to_register, TRAIT_RESISTCOLD, src)
|
||||
ADD_TRAIT(mob_to_register, TRAIT_RESISTLOWPRESSURE, src)
|
||||
ADD_TRAIT(mob_to_register, TRAIT_LOWPRESSURECOOLING, src)
|
||||
ADD_TRAIT(mob_to_register, TRAIT_NOBREATH, src)
|
||||
|
||||
if(!able_to_speak)
|
||||
ADD_TRAIT(mob_to_register, TRAIT_MUTE, src)
|
||||
|
||||
if(!able_to_emote)
|
||||
ADD_TRAIT(mob_to_register, TRAIT_EMOTEMUTE, src)
|
||||
|
||||
// need to stop them from using radio headsets.
|
||||
var/mob/living/carbon/human/human_mob = mob_to_register
|
||||
if(istype(human_mob))
|
||||
ADD_TRAIT(mob_to_register, TRAIT_PARALYSIS_L_ARM, src)
|
||||
ADD_TRAIT(mob_to_register, TRAIT_PARALYSIS_R_ARM, src)
|
||||
human_mob.update_disabled_bodyparts()
|
||||
|
||||
mob_to_register.forceMove(parent_atom)
|
||||
if(scale_object)
|
||||
var/target_size = mob_to_register.size_multiplier
|
||||
var/matrix/new_matrix = new
|
||||
|
||||
new_matrix.Scale(target_size)
|
||||
new_matrix.Translate(0,16 * (target_size-1))
|
||||
parent_atom.transform = new_matrix
|
||||
|
||||
/datum/component/transformation_item/proc/remove_mob()
|
||||
if(!release_mob || !transformed_mob)
|
||||
return FALSE
|
||||
|
||||
transformed_mob.real_name = stored_real_name
|
||||
transformed_mob.name = stored_name
|
||||
|
||||
if(!able_to_speak)
|
||||
REMOVE_TRAIT(transformed_mob, TRAIT_MUTE, src)
|
||||
|
||||
if(!able_to_emote)
|
||||
REMOVE_TRAIT(transformed_mob, TRAIT_EMOTEMUTE, src)
|
||||
|
||||
REMOVE_TRAIT(transformed_mob, TRAIT_TRANSFORMED, src)
|
||||
REMOVE_TRAIT(transformed_mob, TRAIT_RESISTCOLD, src)
|
||||
REMOVE_TRAIT(transformed_mob, TRAIT_RESISTLOWPRESSURE, src)
|
||||
REMOVE_TRAIT(transformed_mob, TRAIT_LOWPRESSURECOOLING, src)
|
||||
REMOVE_TRAIT(transformed_mob, TRAIT_NOBREATH, src)
|
||||
|
||||
var/mob/living/carbon/human/human_mob = transformed_mob
|
||||
if(istype(human_mob))
|
||||
REMOVE_TRAIT(human_mob, TRAIT_PARALYSIS_L_ARM, src)
|
||||
REMOVE_TRAIT(human_mob, TRAIT_PARALYSIS_R_ARM, src)
|
||||
human_mob.update_disabled_bodyparts()
|
||||
|
||||
var/atom/parent_atom = parent
|
||||
var/turf/parent_turf = get_turf(parent_atom)
|
||||
|
||||
transformed_mob.forceMove(parent_turf)
|
||||
if(scale_object)
|
||||
parent_atom.transform = null
|
||||
|
||||
mob_removed = TRUE
|
||||
qdel(src)
|
||||
@@ -1,116 +0,0 @@
|
||||
/obj/item/transformation_item
|
||||
name = "Handheld Transmogrifier"
|
||||
desc = "a handheld device that is mysteriously able to turn people into objects. It can also be used to remove said transformations."
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
icon_state = "gizmo_scan"
|
||||
item_state = "silencer"
|
||||
lefthand_file = 'icons/mob/inhands/antag/abductor_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/antag/abductor_righthand.dmi'
|
||||
|
||||
/// What item are we wanting to TF people into?
|
||||
var/obj/item/target_item
|
||||
/// Do we want our transformed person to be able to speak as the object?
|
||||
var/able_to_speak = TRUE
|
||||
/// Do we want our transformed person to be able to emote as the object?
|
||||
var/able_to_emote = TRUE
|
||||
/// Do we want the item to scale?
|
||||
var/scale_object = FALSE
|
||||
/// Do we want to show that the object was once a person?
|
||||
var/show_that_object_is_tf = TRUE
|
||||
/// Is our captured person able to struggle out?
|
||||
var/able_to_struggle_out = TRUE
|
||||
/// Do we have any items we can't turn people into?
|
||||
var/list/object_blacklist = list()
|
||||
|
||||
/obj/item/transformation_item/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
|
||||
. = ..()
|
||||
var/obj/item/attacked_item = target
|
||||
if(!proximity_flag || !istype(attacked_item))
|
||||
return FALSE
|
||||
|
||||
var/datum/component/transformation_item/transformation_component = attacked_item.GetComponent(/datum/component/transformation_item)
|
||||
if(istype(transformation_component) && !transformation_component.stuck_on_item)
|
||||
qdel(transformation_component)
|
||||
to_chat(user, span_notice("You dispel the current transformation for [attacked_item]."))
|
||||
return
|
||||
|
||||
target_item = attacked_item
|
||||
to_chat(user, span_notice("The next time someone is transformed, they will be transformed into [attacked_item]."))
|
||||
return
|
||||
|
||||
/obj/item/transformation_item/attack(mob/living/M, mob/living/user)
|
||||
if(!target_item)
|
||||
to_chat(user, span_warning("You need to have an item linked to transform someone."))
|
||||
return
|
||||
|
||||
perform_transfomration(M, user)
|
||||
return
|
||||
|
||||
/obj/item/transformation_item/proc/perform_transfomration(mob/living/target_mob, mob/living/user)
|
||||
if(!istype(target_mob))
|
||||
return FALSE
|
||||
|
||||
if(!target_item.Adjacent(target_mob))
|
||||
to_chat(user, span_warning("The [target_item] isn't close enough to [target_mob]"))
|
||||
return FALSE
|
||||
|
||||
if(target_item in target_mob.get_contents())
|
||||
return FALSE // Don't TF someone into something they are holding.
|
||||
|
||||
if(!target_mob?.client?.prefs?.object_tf)
|
||||
to_chat(user, span_warning("It seems like [target_mob] does not want to be transformed."))
|
||||
return FALSE
|
||||
|
||||
var/datum/component/transformation_item/transformation_component = target_item.AddComponent(/datum/component/transformation_item)
|
||||
// Make sure that we apply our variables before we actually put the mob in the item.
|
||||
transformation_component.able_to_speak = able_to_speak
|
||||
transformation_component.able_to_emote = able_to_emote
|
||||
transformation_component.scale_object = scale_object
|
||||
transformation_component.show_that_object_is_tf = show_that_object_is_tf
|
||||
transformation_component.able_to_struggle_out = able_to_struggle_out
|
||||
|
||||
transformation_component.register_mob(target_mob)
|
||||
target_item = null
|
||||
return TRUE
|
||||
|
||||
/obj/item/transformation_item/ui_data(mob/user)
|
||||
var/list/data = list()
|
||||
data["able_to_speak"] = able_to_speak
|
||||
data["able_to_emote"] = able_to_emote
|
||||
data["scale_object"] = scale_object
|
||||
data["show_that_object_is_tf"] = show_that_object_is_tf
|
||||
data["linked_item_name"] = target_item
|
||||
data["able_to_struggle_out"] = able_to_struggle_out
|
||||
|
||||
return data
|
||||
|
||||
/obj/item/transformation_item/ui_act(action, params)
|
||||
if(..())
|
||||
return
|
||||
|
||||
switch(action)
|
||||
if("set_speaking")
|
||||
able_to_speak = !able_to_speak
|
||||
. = TRUE
|
||||
|
||||
if("set_emote")
|
||||
able_to_emote = !able_to_emote
|
||||
. = TRUE
|
||||
|
||||
if("set_scale")
|
||||
scale_object = !scale_object
|
||||
. = TRUE
|
||||
|
||||
if("toggle_struggle")
|
||||
able_to_struggle_out = !able_to_struggle_out
|
||||
. = TRUE
|
||||
|
||||
if("set_show_desc")
|
||||
show_that_object_is_tf = !show_that_object_is_tf
|
||||
. = TRUE
|
||||
|
||||
/obj/item/transformation_item/ui_interact(mob/user, datum/tgui/ui)
|
||||
ui = SStgui.try_update_ui(user, src, ui)
|
||||
if(!ui)
|
||||
ui = new(user, src, "TransformTool", name)
|
||||
ui.open()
|
||||
@@ -6,9 +6,6 @@
|
||||
lose_text = "<span class='notice'>You don't feel absorbant anymore.</span>"
|
||||
mob_trait = TRAIT_WATER_SPONGE
|
||||
|
||||
/datum/reagent/water
|
||||
var/bloat_coeff = 3.5
|
||||
|
||||
/datum/reagent/water/on_mob_add(mob/living/L, amount)
|
||||
if(HAS_TRAIT(L, TRAIT_WATER_SPONGE))
|
||||
if(iscarbon(L))
|
||||
@@ -33,7 +30,7 @@
|
||||
|
||||
|
||||
/datum/reagent/water/proc/fat_hide(mob/living/carbon/user)
|
||||
return volume * bloat_coeff
|
||||
return volume * 3.5
|
||||
|
||||
/obj/machinery/shower/process()
|
||||
..()
|
||||
@@ -43,25 +40,17 @@
|
||||
var/mob/living/carbon/L = AM
|
||||
L.reagents.add_reagent(/datum/reagent/water, 3)
|
||||
|
||||
|
||||
/obj/item/organ/lungs/proc/water_check(datum/gas_mixture/breath, mob/living/carbon/human/H)
|
||||
if(HAS_TRAIT(H, TRAIT_WATER_SPONGE))
|
||||
/* Disabling this for now.
|
||||
/mob/living/carbon/proc/water_check(datum/gas_mixture/breath)
|
||||
if(HAS_TRAIT(src, TRAIT_WATER_SPONGE))
|
||||
if(breath)
|
||||
var/pressure = breath.return_pressure()
|
||||
var/total_moles = breath.total_moles()
|
||||
//#define PP_MOLES(X) ((X / total_moles) * pressure)
|
||||
#define PP(air, gas) PP_MOLES(air.get_moles(gas))
|
||||
var/gas_breathed = PP(breath,GAS_H2O)
|
||||
if(gas_breathed > 0)
|
||||
H.reagents.add_reagent(/datum/reagent/water, gas_breathed)
|
||||
breath.adjust_moles(GAS_H2O, -gas_breathed)
|
||||
|
||||
/obj/item/organ/lungs/check_breath(datum/gas_mixture/breath, mob/living/carbon/human/H)
|
||||
water_check(breath, H)
|
||||
. = ..()
|
||||
|
||||
/datum/reagent/water/overdose_start(mob/living/M)
|
||||
. = 1
|
||||
if(breath.gases)
|
||||
var/breath_gases = breath.gases
|
||||
if(breath_gases[/datum/gas/water_vapor])
|
||||
var/H2O_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/water_vapor])
|
||||
reagents.add_reagent(/datum/reagent/water, H2O_pp/10)
|
||||
breath_gases[/datum/gas/water_vapor] -= H2O_pp
|
||||
*/
|
||||
|
||||
/obj/structure/sink
|
||||
var/mob/living/attached
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
var/obj/item/clothing/suit = target.wear_suit
|
||||
if(istype(suit, /obj/item/clothing/suit/straight_jacket/web))
|
||||
user.visible_message("<span class='warning'>[user] begins to fully encase [target] in a cocoon!</span>", "<span class='warning'>You begin to fully encase [target] in a cocoon.</span>")
|
||||
if(!do_after(user, 30 SECONDS, target))
|
||||
if(!do_after_mob(user, target, 30 SECONDS))
|
||||
return FALSE
|
||||
|
||||
var/obj/structure/spider/cocoon/quirk/spawned_cocoon = new(target.loc)
|
||||
@@ -60,7 +60,7 @@
|
||||
return TRUE
|
||||
|
||||
user.visible_message("<span class='warning'>[user] attempts to remove [target]'s [target.wear_suit]!</span>", "<span class='warning'>You attempt to remove [target]'s [target.wear_suit].</span>")
|
||||
if(!do_after(user, 10 SECONDS, target) || !target.dropItemToGround(suit))
|
||||
if(!do_after_mob(user, target, 10 SECONDS) || !target.dropItemToGround(suit))
|
||||
return FALSE
|
||||
|
||||
var/obj/item/clothing/suit/straight_jacket/web/wrapping = new
|
||||
@@ -68,7 +68,7 @@
|
||||
return FALSE
|
||||
|
||||
user.visible_message("<span class='warning'>[user] attempts to wrap [target] inside of [wrapping]!</span>", "<span class='warning'>You attempt to wrap [target] inside of [wrapping].</span>")
|
||||
if(!do_after(user, 20 SECONDS, target) || !target.equip_to_slot_if_possible(wrapping, ITEM_SLOT_OCLOTHING, TRUE, TRUE))
|
||||
if(!do_after_mob(user, target, 20 SECONDS) || !target.equip_to_slot_if_possible(wrapping, ITEM_SLOT_OCLOTHING, TRUE, TRUE))
|
||||
user.visible_message("<span class='warning'>[user] fails to wrap [target] inside of [wrapping]!</span>", "<span class='warning'>You fail to wrap [target] inside of [wrapping].</span>")
|
||||
return FALSE
|
||||
|
||||
@@ -105,28 +105,9 @@
|
||||
/datum/action/innate/make_web/Activate()
|
||||
var/turf/T = get_turf(owner)
|
||||
owner.visible_message("<span class='warning'>[owner] begins spinning a web!</span>", "<span class='warning'>You begin spinning a web.</span>")
|
||||
var/obj/structure/spider/stickyweb/W = locate() in get_turf(src)
|
||||
if(W || !do_after(owner, 10 SECONDS, T))
|
||||
if(!do_after(owner, 10 SECONDS, 1, null, 1))
|
||||
owner.visible_message("<span class='warning'>[owner] fails to spin a web!</span>", "<span class='warning'>You fail to spin web.</span>")
|
||||
return FALSE
|
||||
new /obj/structure/spider/stickyweb(T)
|
||||
owner.visible_message("<span class='warning'>[owner] spins a sticky web!</span>", "<span class='warning'>You spin a sticky web.</span>")
|
||||
return TRUE
|
||||
|
||||
/obj/structure/spider/stickyweb/CanPass(atom/movable/mover, turf/target)
|
||||
if (genetic)
|
||||
return
|
||||
if(istype(mover, /mob/living/simple_animal/hostile/poison/giant_spider) || HAS_TRAIT(mover, TRAIT_WEB_WEAVER))
|
||||
return TRUE
|
||||
else if(isliving(mover))
|
||||
if(istype(mover.pulledby, /mob/living/simple_animal/hostile/poison/giant_spider))
|
||||
return TRUE
|
||||
if(mover.pulledby)
|
||||
if(HAS_TRAIT(mover.pulledby, TRAIT_WEB_WEAVER))
|
||||
return TRUE
|
||||
if(prob(50))
|
||||
to_chat(mover, "<span class='danger'>You get stuck in \the [src] for a moment.</span>")
|
||||
return FALSE
|
||||
else if(istype(mover, /obj/item/projectile))
|
||||
return prob(30)
|
||||
T.ChangeTurf(/obj/structure/spider/stickyweb)
|
||||
owner.visible_message("<span class='warning'>[owner] spin a sticky web!</span>", "<span class='warning'>You spin a sticky web.</span>")
|
||||
return TRUE
|
||||
|
||||
@@ -38,7 +38,10 @@
|
||||
blood_volume = 0
|
||||
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE
|
||||
initial_language_holder = /datum/language_holder/slime
|
||||
vore_flags = DEVOURABLE | DIGESTABLE | FEEDING
|
||||
// // You are not immune to vore.
|
||||
// devourable = 1
|
||||
// digestable = 1
|
||||
// feeding = 1
|
||||
|
||||
//Creambeast - basically a bit tougher mob that has feeding ranged attacks
|
||||
/mob/living/simple_animal/hostile/feed/chocolate_slime/creambeast
|
||||
@@ -90,49 +93,3 @@
|
||||
if(HAS_TRAIT(L, TRAIT_VORACIOUS))
|
||||
fullness_add = fullness_add * 0.67
|
||||
L.fullness += (fullness_add)
|
||||
|
||||
|
||||
|
||||
//should probably put this in elsewhere or whatever, but for now it'll do
|
||||
|
||||
/mob/living/simple_animal/hostile/fatten/magehand
|
||||
name = "Magehand"
|
||||
desc = "It's a floating mage hand of strange, crackling orange energy..."
|
||||
icon = 'GainStation13/icons/mob/fathand.dmi'
|
||||
icon_state = "fathand"
|
||||
icon_living = "fathand"
|
||||
icon_dead = "fathand_dead"
|
||||
speak_emote = list("crackles")
|
||||
emote_hear = list("crackles")
|
||||
speak_chance = 5
|
||||
mob_biotypes = MOB_SPIRIT
|
||||
pressure_resistance = 9000
|
||||
turns_per_move = 5
|
||||
aggro_vision_range = 10
|
||||
see_in_dark = 10
|
||||
maxHealth = 20
|
||||
health = 20
|
||||
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
|
||||
attack_verb_continuous = "pokes"
|
||||
attack_verb_simple = "pokes"
|
||||
a_intent = INTENT_HARM
|
||||
pass_flags = PASSTABLE
|
||||
move_to_delay = 2 //very fast
|
||||
attack_sound = 'sound/weapons/pulse.ogg'
|
||||
unique_name = 1
|
||||
faction = list(ROLE_WIZARD)
|
||||
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
minbodytemp = 0
|
||||
maxbodytemp = INFINITY
|
||||
|
||||
/mob/living/simple_animal/hostile/fatten
|
||||
var/fat_per_hit = 30
|
||||
|
||||
/mob/living/simple_animal/hostile/fatten/AttackingTarget()
|
||||
. = ..()
|
||||
var/mob/living/carbon/L = target
|
||||
if(L.client?.prefs?.weight_gain_magic)
|
||||
L.adjust_fatness(fat_per_hit)
|
||||
|
||||
@@ -1,191 +0,0 @@
|
||||
/mob/living
|
||||
var/adminbus_trash = FALSE // For abusing trash eater for event shenanigans.
|
||||
|
||||
/obj/item
|
||||
var/trash_eatable = TRUE
|
||||
|
||||
/mob/living/proc/eat_trash()
|
||||
set name = "Eat Trash"
|
||||
set category = "Vore" //No Abilities?
|
||||
set desc = "Consume held garbage."
|
||||
|
||||
if(!vore_selected)
|
||||
to_chat(src,"<span class='warning'>You either don't have a belly selected, or don't have a belly!</span>")
|
||||
return
|
||||
|
||||
var/obj/item/I = get_active_held_item()
|
||||
if(!I)
|
||||
to_chat(src, "<span class='notice'>You are not holding anything.</span>")
|
||||
return
|
||||
|
||||
if(is_type_in_list(I,item_vore_blacklist) && !adminbus_trash) //If someone has adminbus, they can eat whatever they want.
|
||||
to_chat(src, "<span class='warning'>You are not allowed to eat this.</span>")
|
||||
return
|
||||
|
||||
if(!I.trash_eatable) //OOC pref. This /IS/ respected, even if adminbus_trash is enabled
|
||||
to_chat(src, "<span class='warning'>You can't eat that so casually!</span>")
|
||||
return
|
||||
|
||||
/*
|
||||
if(istype(I, /obj/item/paicard))
|
||||
var/obj/item/paicard/palcard = I
|
||||
var/mob/living/silicon/pai/pocketpal = palcard.pai
|
||||
if(pocketpal && (!pocketpal.devourable))
|
||||
to_chat(src, "<span class='warning'>\The [pocketpal] doesn't allow you to eat it.</span>")
|
||||
return
|
||||
*/
|
||||
|
||||
if(is_type_in_list(I,edible_trash) | adminbus_trash /*|| is_type_in_list(I,edible_tech) && isSynthetic()*/)
|
||||
/*
|
||||
if(I.hidden_uplink)
|
||||
to_chat(src, "<span class='warning'>You really should not be eating this.</span>")
|
||||
message_admins("[key_name(src)] has attempted to ingest an uplink item. ([src ? ADMIN_JMP(src) : "null"])")
|
||||
return
|
||||
*/
|
||||
if(istype(I,/obj/item/pda))
|
||||
var/obj/item/pda/P = I
|
||||
if(P.owner)
|
||||
var/watching = FALSE
|
||||
for(var/mob/living/carbon/human/H in view(src))
|
||||
if(H.real_name == P.owner && H.client)
|
||||
watching = TRUE
|
||||
break
|
||||
if(!watching)
|
||||
return
|
||||
else
|
||||
visible_message("<span class='warning'>[src] is threatening to make [P] disappear!</span>")
|
||||
if(P.id)
|
||||
var/confirm = alert(src, "The PDA you're holding contains a vulnerable ID card. Will you risk it?", "Confirmation", "Definitely", "Cancel") //No tgui input?
|
||||
if(confirm != "Definitely")
|
||||
return
|
||||
if(!do_after(src, 100, P))
|
||||
return
|
||||
visible_message("<span class='warning'>[src] successfully makes [P] disappear!</span>")
|
||||
to_chat(src, "<span class='notice'>You can taste the sweet flavor of delicious technology.</span>")
|
||||
dropItemToGround(I)
|
||||
I.forceMove(vore_selected)
|
||||
updateVRPanel()
|
||||
return
|
||||
/*
|
||||
if(istype(I,/obj/item/clothing/shoes))
|
||||
var/obj/item/clothing/shoes/S = I
|
||||
if(S.holding)
|
||||
to_chat(src, "<span class='warning'>There's something inside!</span>")
|
||||
return
|
||||
*/
|
||||
/*
|
||||
if(iscapturecrystal(I))
|
||||
var/obj/item/capture_crystal/C = I
|
||||
if(!C.bound_mob.devourable)
|
||||
to_chat(src, "<span class='warning'>That doesn't seem like a good idea. (\The [C.bound_mob]'s prefs don't allow it.)</span>")
|
||||
return
|
||||
*/
|
||||
dropItemToGround(I)
|
||||
I.forceMove(vore_selected)
|
||||
updateVRPanel()
|
||||
|
||||
log_admin("VORE: [src] used Eat Trash to swallow [I].")
|
||||
|
||||
if(istype(I,/obj/item/flashlight/flare) || istype(I,/obj/item/match) || istype(I,/obj/item/storage/box/matches))
|
||||
to_chat(src, "<span class='notice'>You can taste the flavor of spicy cardboard.</span>")
|
||||
else if(istype(I,/obj/item/flashlight/glowstick)) //Repath from /obj/item/device/flashlight/glowstick
|
||||
to_chat(src, "<span class='notice'>You found out the glowy juice only tastes like regret.</span>")
|
||||
else if(istype(I,/obj/item/cigbutt)) //Repath from /obj/item/trash/cigbutt
|
||||
to_chat(src, "<span class='notice'>You can taste the flavor of bitter ash. Classy.</span>")
|
||||
else if(istype(I,/obj/item/clothing/mask/cigarette)) //Repath from /obj/item/clothing/mask/smokable
|
||||
var/obj/item/clothing/mask/cigarette/C = I
|
||||
if(C.lit)
|
||||
to_chat(src, "<span class='notice'>You can taste the flavor of burning ash. Spicy!</span>")
|
||||
else
|
||||
to_chat(src, "<span class='notice'>You can taste the flavor of aromatic rolling paper and funny looks.</span>")
|
||||
else if(istype(I,/obj/item/paper)) //Repath from /obj/item/weapon/paper
|
||||
to_chat(src, "<span class='notice'>You can taste the dry flavor of bureaucracy.</span>")
|
||||
else if(istype(I,/obj/item/dice)) //Repath from /obj/item/weapon/dice
|
||||
to_chat(src, "<span class='notice'>You can taste the bitter flavor of cheating.</span>")
|
||||
else if(istype(I,/obj/item/lipstick)) //Repath from /obj/item/weapon/lipstick
|
||||
to_chat(src, "<span class='notice'>You can taste the flavor of couture and style. Toddler at the make-up bag style.</span>")
|
||||
else if(istype(I,/obj/item/soap)) //Repath from /obj/item/weapon/soap
|
||||
to_chat(src, "<span class='notice'>You can taste the bitter flavor of verbal purification.</span>")
|
||||
else if(istype(I,/obj/item/stack/spacecash) || istype(I,/obj/item/storage/wallet)) //Repath from /obj/item/weapon/spacecash and /obj/item/weapon/storage/wallet
|
||||
to_chat(src, "<span class='notice'>You can taste the flavor of wealth and reckless waste.</span>")
|
||||
else if(istype(I,/obj/item/broken_bottle) || istype(I,/obj/item/shard)) //Repath from /obj/item/weapon/broken_bottle
|
||||
to_chat(src, "<span class='notice'>You can taste the flavor of pain. This can't possibly be healthy for your guts.</span>")
|
||||
else if(istype(I,/obj/item/light)) //Repath from /obj/item/weapon/light
|
||||
var/obj/item/light/L = I
|
||||
if(L.status == LIGHT_BROKEN)
|
||||
to_chat(src, "<span class='notice'>You can taste the flavor of pain. This can't possibly be healthy for your guts.</span>")
|
||||
else
|
||||
to_chat(src, "<span class='notice'>You can taste the flavor of really bad ideas.</span>")
|
||||
/*
|
||||
else if(istype(I,/obj/item/weapon/bikehorn/tinytether)) //Doenst exist
|
||||
to_chat(src, "<span class='notice'>You feel a rush of power swallowing such a large, err, tiny structure.</span>")
|
||||
*/
|
||||
else if(istype(I,/obj/item/mmi/posibrain) || istype(I,/obj/item/aicard)) //Repath from /obj/item/device/mmi/digital/posibrain and //Repath from /obj/item/device/aicard
|
||||
to_chat(src, "<span class='notice'>You can taste the sweet flavor of digital friendship. Or maybe it is something else.</span>")
|
||||
else if(istype(I,/obj/item/paicard)) //Repath from /obj/item/device/paicard
|
||||
to_chat(src, "<span class='notice'>You can taste the sweet flavor of digital friendship.</span>")
|
||||
var/obj/item/paicard/ourcard = I
|
||||
if(ourcard.pai && ourcard.pai.client && isbelly(ourcard.loc))
|
||||
var/obj/belly/B = ourcard.loc
|
||||
to_chat(ourcard.pai, "<span class= 'notice'><B>[B.desc]</B></span>")
|
||||
else if(istype(I,/obj/item/reagent_containers/food)) //Repath from /obj/item/weapon/reagent_containers/food
|
||||
var/obj/item/reagent_containers/food/F = I
|
||||
if(!F.reagents.total_volume)
|
||||
to_chat(src, "<span class='notice'>You can taste the flavor of garbage and leftovers. Delicious?</span>")
|
||||
else
|
||||
to_chat(src, "<span class='notice'>You can taste the flavor of gluttonous waste of food.</span>")
|
||||
else if (istype(I,/obj/item/clothing/neck/petcollar))
|
||||
to_chat(src, "<span class='notice'>You can taste the submissiveness in the wearer of [I]!</span>")
|
||||
/*
|
||||
else if(iscapturecrystal(I))
|
||||
var/obj/item/capture_crystal/C = I
|
||||
if(C.bound_mob && (C.bound_mob in C.contents))
|
||||
if(isbelly(C.loc))
|
||||
//var/obj/belly/B = C.loc //CHOMPedit
|
||||
//to_chat(C.bound_mob, "<span class= 'notice'>Outside of your crystal, you can see; <B>[B.desc]</B></span>") //CHOMPedit: moved to modular_chomp capture_crystal.dm
|
||||
to_chat(src, "<span class='notice'>You can taste the the power of command.</span>")
|
||||
*/
|
||||
// CHOMPedit begin
|
||||
/*
|
||||
else if(istype(I,/obj/item/starcaster_news))
|
||||
to_chat(src, "<span class='notice'>You can taste the dry flavor of digital garbage, oh wait its just the news.</span>")
|
||||
*/
|
||||
else if(istype(I,/obj/item/newspaper))
|
||||
to_chat(src, "<span class='notice'>You can taste the dry flavor of garbage, oh wait its just the news.</span>")
|
||||
else if (istype(I,/obj/item/stock_parts/cell))
|
||||
visible_message("<span class='warning'>[src] sates their electric appetite with a [I]!</span>")
|
||||
to_chat(src, "<span class='notice'>You can taste the spicy flavor of electrolytes, yum.</span>")
|
||||
/*
|
||||
else if (istype(I,/obj/item/walkpod))
|
||||
visible_message("<span class='warning'>[src] sates their musical appetite with a [I]!</span>")
|
||||
to_chat(src, "<span class='notice'>You can taste the jazzy flavor of music.</span>")
|
||||
*/
|
||||
/*
|
||||
else if (istype(I,/obj/item/mail/junkmail))
|
||||
visible_message("<span class='warning'>[src] devours the [I]!</span>")
|
||||
to_chat(src, "<span class='notice'>You can taste the flavor of the galactic postal service.</span>")
|
||||
*/
|
||||
/*
|
||||
else if (istype(I,/obj/item/weapon/gun/energy/sizegun))
|
||||
visible_message("<span class='warning'>[src] devours the [I]!</span>")
|
||||
to_chat(src, "<span class='notice'>You didn't read the warning label, did you?</span>")
|
||||
*/
|
||||
/*
|
||||
else if (istype(I,/obj/item/device/slow_sizegun))
|
||||
visible_message("<span class='warning'>[src] devours the [I]!</span>")
|
||||
to_chat(src, "<span class='notice'>You taste the flavor of sunday driver bluespace.</span>")
|
||||
*/
|
||||
else if (istype(I,/obj/item/laser_pointer))
|
||||
visible_message("<span class='warning'>[src] devours the [I]!</span>")
|
||||
to_chat(src, "<span class='notice'>You taste the flavor of a laser.</span>")
|
||||
else if (istype(I,/obj/item/canvas))
|
||||
visible_message("<span class='warning'>[src] devours the [I]!</span>")
|
||||
to_chat(src, "<span class='notice'>You taste the flavor of priceless artwork.</span>")
|
||||
//CHOMPedit end
|
||||
|
||||
else
|
||||
to_chat(src, "<span class='notice'>You can taste the flavor of garbage. Delicious.</span>")
|
||||
visible_message("<span class='warning'>[src] demonstrates their voracious capabilities by swallowing [I] whole!</span>")
|
||||
return
|
||||
to_chat(src, "<span class='notice'>This snack is too powerful to go down that easily.</span>") //CHOMPEdit
|
||||
return
|
||||
@@ -33,7 +33,9 @@
|
||||
var/held_icon = "slugcat"
|
||||
do_footstep = TRUE
|
||||
//lizard food
|
||||
vore_flags = DEVOURABLE | DIGESTABLE | FEEDING
|
||||
devourable = 1
|
||||
digestable = 1
|
||||
feeding = 1
|
||||
var/obj/item/spear/weapon
|
||||
|
||||
/mob/living/simple_animal/pet/slugcat/Initialize(mapload)
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
/datum/gas/lipoifium
|
||||
id = GAS_FAT
|
||||
specific_heat = 20
|
||||
name = "Lipoifium"
|
||||
moles_visible = MOLES_GAS_VISIBLE
|
||||
color = "#e2e1b1"
|
||||
odor = "that this is a function that wasn't working, but it now, for some reason, is. You should speak to the gods about this and the conditions under which it happened"
|
||||
odor_strength = 1 // TODO: doesn't work for now
|
||||
|
||||
@@ -1,33 +0,0 @@
|
||||
/datum/gas_reaction/lipoifium_formation
|
||||
priority = 7
|
||||
name = "Lipoifium Formation"
|
||||
id = "lipoifium_formation"
|
||||
|
||||
/datum/gas_reaction/lipoifium_formation/init_reqs()
|
||||
min_requirements = list(
|
||||
"MAX_TEMP" = 100,
|
||||
GAS_BZ = 15,
|
||||
GAS_TRITIUM = 15
|
||||
)
|
||||
|
||||
/datum/gas_reaction/lipoifium_formation/react(datum/gas_mixture/air)
|
||||
if (air.get_moles(GAS_BZ) < 15 || air.get_moles(GAS_TRITIUM) < 15)
|
||||
return NO_REACTION
|
||||
var/temperature = air.return_temperature()
|
||||
var/reaction_efficiency = 0
|
||||
if (temperature <= 5)
|
||||
reaction_efficiency = 1
|
||||
else if (temperature >= 100)
|
||||
return NO_REACTION
|
||||
else
|
||||
reaction_efficiency = -((temperature - 5) / 95) + 1 // will equal 1 at 5 kelvin, and will linearly fall until 0 at 100k
|
||||
|
||||
var/energy_released = reaction_efficiency * FIRE_CARBON_ENERGY_RELEASED
|
||||
var/old_heat_capacity = air.heat_capacity()
|
||||
air.adjust_moles(GAS_FAT, reaction_efficiency)
|
||||
air.adjust_moles(GAS_TRITIUM, -reaction_efficiency / 2)
|
||||
air.adjust_moles(GAS_BZ, -reaction_efficiency / 2)
|
||||
var/new_heat_capacity = air.heat_capacity()
|
||||
air.set_temperature(max((temperature * old_heat_capacity + energy_released) / new_heat_capacity, TCMB))
|
||||
|
||||
return REACTING
|
||||
@@ -1,6 +0,0 @@
|
||||
/obj/machinery/portable_atmospherics/canister/lipoifium
|
||||
name = "lipoifium canister"
|
||||
desc = "Lipoifium. Inhaling causes quick buildup of adipose in one's body."
|
||||
icon = 'GainStation13/icons/obj/atmos.dmi'
|
||||
icon_state = "yellowblack"
|
||||
gas_type = GAS_FAT
|
||||
@@ -1,17 +0,0 @@
|
||||
//Roses dont exist here... Sad
|
||||
|
||||
// /datum/gear/head/rose
|
||||
// name = "Rose"
|
||||
// path = /obj/item/grown/rose
|
||||
|
||||
/datum/gear/head/sunflower
|
||||
name = "Sunflower"
|
||||
path = /obj/item/grown/sunflower
|
||||
|
||||
/datum/gear/head/poppy
|
||||
name = "Poppy"
|
||||
path = /obj/item/reagent_containers/food/snacks/grown/poppy
|
||||
|
||||
/datum/gear/head/harebell
|
||||
name = "Harebell"
|
||||
path = /obj/item/reagent_containers/food/snacks/grown/harebell
|
||||
@@ -1,4 +0,0 @@
|
||||
/datum/gear/uniform/modularjumpsuit
|
||||
name = "Grey jumpsuit (Modular)"
|
||||
path = /obj/item/clothing/under/color/grey
|
||||
cost = 0
|
||||
@@ -15,8 +15,6 @@
|
||||
var/weight_gain_viruses = FALSE
|
||||
///Weight gain from nanites
|
||||
var/weight_gain_nanites = FALSE
|
||||
//Weight gain from atmos gasses
|
||||
var/weight_gain_atmos = FALSE
|
||||
///Blueberry Inflation
|
||||
var/blueberry_inflation = FALSE
|
||||
///Extreme weight gain
|
||||
@@ -33,8 +31,6 @@
|
||||
var/fatness_vulnerable = FALSE
|
||||
/// Similar to fatness_vulnerable, but with more extreme effects such as transformation/hypno.
|
||||
var/extreme_fatness_vulnerable = FALSE
|
||||
/// Can the person be transformed into an object?
|
||||
var/object_tf
|
||||
|
||||
// Helplessness, a set of prefs that make things extra tough at higher weights. If set to FALSE, they won't do anything.
|
||||
///What fatness level disables movement?
|
||||
@@ -61,8 +57,6 @@
|
||||
|
||||
///Does the person wish to be involved with non-con weight gain events?
|
||||
var/noncon_weight_gain = FALSE
|
||||
///Does the person want to get into confrontation?
|
||||
var/trouble_seeker = FALSE
|
||||
|
||||
//Does the person wish to be fed from bots?
|
||||
var/bot_feeding = FALSE
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
|
||||
@@ -0,0 +1,156 @@
|
||||
/obj/item/clothing/under/rank/chef/modular
|
||||
name = "cook's modular suit"
|
||||
desc = "A suit which is given only to the most <b>hardcore</b> cooks in space. Now adjusts to the match the wearer's size!"
|
||||
|
||||
var/mob/living/carbon/U
|
||||
|
||||
/obj/item/clothing/under/rank/chef/modular/equipped(mob/user, slot)
|
||||
..()
|
||||
U = user
|
||||
|
||||
/obj/item/clothing/under/rank/chef/modular/dropped()
|
||||
..()
|
||||
U = null
|
||||
|
||||
/obj/item/clothing/under/rank/chef/modular/jumpsuit_adjust()
|
||||
..()
|
||||
worn_overlays()
|
||||
|
||||
/obj/item/clothing/under/rank/chef/modular/worn_overlays(isinhands = FALSE)
|
||||
if(!isinhands)
|
||||
. = list()
|
||||
var/obj/item/organ/O
|
||||
var/obj/item/organ/genital/G
|
||||
for(O in U.internal_organs)
|
||||
if(istype(O, /obj/item/organ/genital/belly))
|
||||
G = O
|
||||
if(!adjusted)
|
||||
if(G.size <= 9) //These need to be removed later, better to cap organ sizes to begin with
|
||||
. += mutable_appearance('GainStation13/icons/mob/modclothes/chefmodular.dmi', "belly_[G.size]", GENITALS_UNDER_LAYER)
|
||||
else
|
||||
. += mutable_appearance('GainStation13/icons/mob/modclothes/chefmodular.dmi', "belly_9", GENITALS_UNDER_LAYER)
|
||||
else
|
||||
if(G.size <= 9)
|
||||
. += mutable_appearance('GainStation13/icons/mob/modclothes/chefmodular.dmi', "belly_[G.size]_d", GENITALS_UNDER_LAYER)
|
||||
else
|
||||
. += mutable_appearance('GainStation13/icons/mob/modclothes/chefmodular.dmi', "belly_9_d", GENITALS_UNDER_LAYER)
|
||||
if(istype(O, /obj/item/organ/genital/butt))
|
||||
G = O
|
||||
if(mutantrace_variation == STYLE_DIGITIGRADE)
|
||||
if(G.size <= 10)
|
||||
. += mutable_appearance('GainStation13/icons/mob/modclothes/chefmodular.dmi', "butt_[G.size]_l", GENITALS_FRONT_LAYER)
|
||||
. += mutable_appearance('GainStation13/icons/mob/modclothes/chefmodular.dmi', "butt_[G.size]_l_NORTH", GENITALS_FRONT_LAYER)
|
||||
else
|
||||
. += mutable_appearance('GainStation13/icons/mob/modclothes/chefmodular.dmi', "butt_10_l", GENITALS_FRONT_LAYER)
|
||||
. += mutable_appearance('GainStation13/icons/mob/modclothes/chefmodular.dmi', "butt_10_l_NORTH", GENITALS_FRONT_LAYER)
|
||||
else
|
||||
if(G.size <= 10)
|
||||
. += mutable_appearance('GainStation13/icons/mob/modclothes/chefmodular.dmi', "butt_[G.size]", GENITALS_FRONT_LAYER)
|
||||
. += mutable_appearance('GainStation13/icons/mob/modclothes/chefmodular.dmi', "butt_[G.size]_NORTH", GENITALS_FRONT_LAYER)
|
||||
else
|
||||
. += mutable_appearance('GainStation13/icons/mob/modclothes/chefmodular.dmi', "butt_10", GENITALS_FRONT_LAYER)
|
||||
. += mutable_appearance('GainStation13/icons/mob/modclothes/chefmodular.dmi', "butt_10_NORTH", GENITALS_FRONT_LAYER)
|
||||
if(istype(O, /obj/item/organ/genital/breasts))
|
||||
G = O
|
||||
if(G.size <= "impossible")
|
||||
. += mutable_appearance('GainStation13/icons/mob/modclothes/chefmodular.dmi', "breasts_[G.size]", GENITALS_BEHIND_LAYER) //nearest
|
||||
. += mutable_appearance('GainStation13/icons/mob/modclothes/chefmodular.dmi', "breasts_[G.size]_NORTH", BODY_FRONT_LAYER) //farthest
|
||||
else
|
||||
. += mutable_appearance('GainStation13/icons/mob/modclothes/chefmodular.dmi', "breasts_impossible", GENITALS_BEHIND_LAYER) //nearest
|
||||
. += mutable_appearance('GainStation13/icons/mob/modclothes/chefmodular.dmi', "breasts_impossible_NORTH", BODY_FRONT_LAYER) //farthest
|
||||
if(damaged_clothes)
|
||||
. += mutable_appearance('icons/effects/item_damage.dmi', "damageduniform")
|
||||
if(blood_DNA)
|
||||
. += mutable_appearance('icons/effects/blood.dmi', "uniformblood", color = blood_DNA_to_color())
|
||||
if(length(accessory_overlays))
|
||||
. += accessory_overlays
|
||||
|
||||
/obj/item/clothing/under/color/grey/modular
|
||||
name = "grey modular jumpsuit" //change name from base clothes to distinguish them
|
||||
desc = "A tasteful grey jumpsuit that reminds you of the good old days. Now adjusts to the match the wearer's size!" //description same as above
|
||||
|
||||
var/icon_location = 'GainStation13/icons/mob/modclothes/graymodular.dmi' //specify the file path where the modular overlays for those clothes are located
|
||||
var/mob/living/carbon/U //instance a variable for keeping track of the user
|
||||
|
||||
/obj/item/clothing/under/color/grey/modular/equipped(mob/user, slot) //whenever the clothes are in someone's inventory the clothes keep track of who that user is
|
||||
..()
|
||||
U = user
|
||||
|
||||
/obj/item/clothing/under/color/grey/modular/dropped() //whenever the clothes leave a person's inventory, they forget who held them
|
||||
..()
|
||||
U = null
|
||||
|
||||
/obj/item/clothing/under/color/grey/modular/jumpsuit_adjust() //when the user adjusts the clothes' style, rebuild the overlays
|
||||
..()
|
||||
worn_overlays()
|
||||
|
||||
/obj/item/clothing/under/color/grey/modular/worn_overlays(isinhands = FALSE)
|
||||
if(U)
|
||||
if(!isinhands) //make sure the clothes are being worn and aren't in someone's hands
|
||||
. = list()
|
||||
var/obj/item/organ/O
|
||||
var/obj/item/organ/genital/G
|
||||
for(O in U.internal_organs) //check the user for the organs they have
|
||||
if(istype(O, /obj/item/organ/genital/belly)) //if that organ is a belly
|
||||
G = O //treat that organ as a genital
|
||||
if(!adjusted) //check the style, if it needs to be the adjusted variants
|
||||
if(G.size <= 9) //check that the size is within accepted values, NOTE: these need to be removed later, better to cap organ sizes to begin with
|
||||
. += mutable_appearance(icon_location, "belly_[G.size]", GENITALS_UNDER_LAYER) //add, from the clothes' icon file the overlay corresponding to that genital at that size and draw it onto the layer
|
||||
else //if not an expected size value, bigger than the max, default to max size
|
||||
. += mutable_appearance(icon_location, "belly_9", GENITALS_UNDER_LAYER)
|
||||
else //use the alternative adjusted sprites
|
||||
if(G.size <= 9)
|
||||
. += mutable_appearance(icon_location, "belly_[G.size]_d", GENITALS_UNDER_LAYER)
|
||||
else
|
||||
. += mutable_appearance(icon_location, "belly_9_d", GENITALS_UNDER_LAYER)
|
||||
if(istype(O, /obj/item/organ/genital/butt)) //if that organ is the butt
|
||||
G = O
|
||||
if(mutantrace_variation == STYLE_DIGITIGRADE) //check if the suit needs to use sprites for digitigrade characters
|
||||
if(G.size <= 10)
|
||||
. += mutable_appearance(icon_location, "butt_[G.size]_l", GENITALS_FRONT_LAYER)
|
||||
. += mutable_appearance(icon_location, "butt_[G.size]_l_NORTH", GENITALS_FRONT_LAYER) //to not adjust overlays every time a character turns, north-facing breasts and bellies are drawn separately, with individual icons
|
||||
else //they'll have blank north-facing sprites in the main icon state and the north-facing will be blank on all other sides, and are drawn on different layers
|
||||
. += mutable_appearance(icon_location, "butt_10_l", GENITALS_FRONT_LAYER)
|
||||
. += mutable_appearance(icon_location, "butt_10_l_NORTH", GENITALS_FRONT_LAYER)
|
||||
else //if the character is not digitigrade
|
||||
if(G.size <= 10)
|
||||
. += mutable_appearance(icon_location, "butt_[G.size]", GENITALS_FRONT_LAYER)
|
||||
. += mutable_appearance(icon_location, "butt_[G.size]_NORTH", GENITALS_FRONT_LAYER)
|
||||
else
|
||||
. += mutable_appearance(icon_location, "butt_10", GENITALS_FRONT_LAYER)
|
||||
. += mutable_appearance(icon_location, "butt_10_NORTH", GENITALS_FRONT_LAYER)
|
||||
if(istype(O, /obj/item/organ/genital/breasts)) //if the organ is the breasts
|
||||
G = O
|
||||
if(G.size <= "o")
|
||||
. += mutable_appearance(icon_location, "breasts_[G.size]", GENITALS_BEHIND_LAYER)
|
||||
. += mutable_appearance(icon_location, "breasts_[G.size]_NORTH", BODY_FRONT_LAYER)
|
||||
else
|
||||
if(G.size == "huge")
|
||||
. += mutable_appearance(icon_location, "breasts_huge", GENITALS_BEHIND_LAYER)
|
||||
. += mutable_appearance(icon_location, "breasts_huge_NORTH", BODY_FRONT_LAYER)
|
||||
else
|
||||
if(G.size == "massive")
|
||||
. += mutable_appearance(icon_location, "breasts_massive", GENITALS_BEHIND_LAYER)
|
||||
. += mutable_appearance(icon_location, "breasts_massive_NORTH", BODY_FRONT_LAYER)
|
||||
else
|
||||
if(G.size == "giga")
|
||||
. += mutable_appearance(icon_location, "breasts_giga", GENITALS_BEHIND_LAYER)
|
||||
. += mutable_appearance(icon_location, "breasts_giga_NORTH", BODY_FRONT_LAYER)
|
||||
else
|
||||
. += mutable_appearance(icon_location, "breasts_impossible", GENITALS_BEHIND_LAYER)
|
||||
. += mutable_appearance(icon_location, "breasts_impossible_NORTH", BODY_FRONT_LAYER)
|
||||
if(damaged_clothes)
|
||||
. += mutable_appearance('icons/effects/item_damage.dmi', "damageduniform")
|
||||
if(blood_DNA)
|
||||
. += mutable_appearance('icons/effects/blood.dmi', "uniformblood", color = blood_DNA_to_color())
|
||||
if(length(accessory_overlays))
|
||||
. += accessory_overlays
|
||||
|
||||
|
||||
/obj/item/clothing/under/color/grey/modular/bra
|
||||
name = "grey modular bra"
|
||||
desc = "A tasteful grey bra that reminds you of the good old days. Now adjusts to the match the wearer's size!"
|
||||
icon_location = 'GainStation13/icons/mob/modclothes/graymodular_bra.dmi'
|
||||
icon_state = "grey"
|
||||
item_state = "grey_bra"
|
||||
// item_color = "grey_bra"
|
||||
@@ -1,257 +0,0 @@
|
||||
//////////////////////////////////////
|
||||
// MODULAR ITEMS 2.0 //
|
||||
// BETTER AND BIGGER THAN EVER //
|
||||
//////////////////////////////////////
|
||||
|
||||
//HOW TO CREATE A NEW MODULAR ITEM
|
||||
// 1) DRAW THE SPRITES (see already made modular sprites)
|
||||
// 2) FIND THE ITEM YOU WANT TO MAKE MODULAR (example: the grey jumpsuit is /obj/item/clothing/under/color/grey )
|
||||
// 3) CHANGE IT'S modular_icon_location TO BE THE LOCATION OF THE SPRITES YOU'VE MADE (example: modular_icon_location = 'GainStation13/icons/mob/modclothes/modular_grey.dmi')
|
||||
// 4) YOU ARE DONE. YOUR ITEM IS NOW MODULAR
|
||||
|
||||
//Many functions of the system can be customized by overloading the various procs
|
||||
//If you know what you are doing then I encoourage you to tweak your item to work better for the idea you had in mind
|
||||
|
||||
/mob/living/carbon
|
||||
var/modular_items = list()
|
||||
|
||||
|
||||
// Called by handle_fatness, this is called periodically to tell all items to check for sprites and, if needed, build new ones
|
||||
/mob/living/carbon/proc/handle_modular_items(adjustment_amount, type_of_fattening = FATTENING_TYPE_ITEM)
|
||||
for(var/obj/item/item in modular_items)
|
||||
item.update_modular_overlays(src)
|
||||
|
||||
/obj/item
|
||||
var/modular_icon_location = null //Locates the sprites, null if it is not a modular item. Changing this makes the item modular
|
||||
var/mod_overlays = list() //Keeps track of the modular sprite overlays for the item
|
||||
var/mod_breasts_rec //Records the last used sprite for breasts to avoid building sprites if no change occurred
|
||||
var/mod_butt_rec //^^^ for butt
|
||||
var/mod_belly_rec //^^^ for belly
|
||||
|
||||
//General condition for activating modular sprites for an item.
|
||||
//When equipped to that item's appropriate slot, if the item has modular icons then initialize it as a modular item
|
||||
/obj/item/equipped(mob/user, slot)
|
||||
if(modular_icon_location != null && slot == slot_flags)
|
||||
add_modular_item(user)
|
||||
..()
|
||||
|
||||
//General condition for deactivating modular sprites for an item.
|
||||
//When dropped. And/or moved to another slot, works together with equipped checking the approporiate slot
|
||||
/obj/item/dropped(mob/user)
|
||||
remove_modular_item(user)
|
||||
..()
|
||||
|
||||
//Initialize a modular item by resetting any recorded sprite names and force a sprite update
|
||||
/obj/item/proc/add_modular_item(mob/user)
|
||||
mod_breasts_rec = null
|
||||
mod_butt_rec = null
|
||||
mod_belly_rec = null
|
||||
update_modular_overlays(user)
|
||||
|
||||
//Remove a modular item by deleting it from the user's list of tracked modular items
|
||||
//and forcing sprite deletion
|
||||
/obj/item/proc/remove_modular_item(mob/user)
|
||||
if(!iscarbon(user))
|
||||
return
|
||||
delete_modular_overlays(user)
|
||||
var/mob/living/carbon/U = user
|
||||
if(src in U.modular_items)
|
||||
U.modular_items -= src
|
||||
|
||||
//The meat of the system, checks the genitals, compares to recorded size and request
|
||||
//the sprites if new ones are needed
|
||||
/obj/item/proc/update_modular_overlays(mob/user)
|
||||
if(!iscarbon(user))
|
||||
return
|
||||
var/mob/living/carbon/U = user
|
||||
|
||||
var/list/genitals_list
|
||||
var/build_modular = FALSE
|
||||
|
||||
//Before requesting sprites we must make sure new ones are actually needed
|
||||
//Go through the genitals of the user to detect belly, butt and breasts (individually, not all 3 are needed)
|
||||
//Add it to a list of found genitals to not go through all organs again
|
||||
//Get the sprite name of the sprites needed and compare it to the ones recorded
|
||||
//If they are different, record the sprites and build_modular to TRUE to signal that new sprites are needed
|
||||
var/obj/item/organ/genital/O
|
||||
for(O in U.internal_organs)
|
||||
if(istype(O, /obj/item/organ/genital/belly))
|
||||
genitals_list += list(O)
|
||||
var/belly = get_modular_belly(O)
|
||||
if(belly != mod_belly_rec)
|
||||
mod_belly_rec = belly
|
||||
build_modular = TRUE
|
||||
if(istype(O, /obj/item/organ/genital/butt))
|
||||
genitals_list += list(O)
|
||||
var/butt = get_modular_butt(O)
|
||||
if(butt != mod_butt_rec)
|
||||
mod_butt_rec = butt
|
||||
build_modular = TRUE
|
||||
if(istype(O, /obj/item/organ/genital/breasts))
|
||||
genitals_list += list(O)
|
||||
var/breasts = get_modular_breasts(O)
|
||||
if(breasts != mod_breasts_rec)
|
||||
mod_breasts_rec = breasts
|
||||
build_modular = TRUE
|
||||
if(!build_modular) //Stop early if no new sprites are needed
|
||||
return
|
||||
delete_modular_overlays(U) //Delete the old sprites
|
||||
|
||||
if(!(src in U.modular_items)) //Make sure the item is inside the user's tracked modular items
|
||||
U.modular_items += src //used on the first sprite request and to ensure it's being tracked for future updates
|
||||
|
||||
//Go through the list of genitals previously found and for each add the modular sprite overlays to the user
|
||||
var/obj/item/organ/genital/G
|
||||
for(G in genitals_list)
|
||||
if(istype(G, /obj/item/organ/genital/belly))
|
||||
add_modular_overlay(U, mod_belly_rec, MODULAR_BELLY_LAYER, color)
|
||||
add_modular_overlay(U, "[mod_belly_rec]_SOUTH", BELLY_FRONT_LAYER, color)
|
||||
if(istype(G, /obj/item/organ/genital/butt))
|
||||
add_modular_overlay(U, mod_butt_rec, MODULAR_BUTT_LAYER, color)
|
||||
add_modular_overlay(U, "[mod_butt_rec]_NORTH", BUTT_BEHIND_LAYER, color)
|
||||
if(istype(G, /obj/item/organ/genital/breasts))
|
||||
add_modular_overlay(U, mod_breasts_rec, MODULAR_BREASTS_LAYER, color)
|
||||
add_modular_overlay(U, "[mod_breasts_rec]_NORTH", BREASTS_BEHIND_LAYER, color)
|
||||
add_modular_overlay(U, "[mod_breasts_rec]_SOUTH", BREASTS_FRONT_LAYER, color)
|
||||
|
||||
//Remove the previously built modular sprite overlays and empty the list of tracked overlays
|
||||
/obj/item/proc/delete_modular_overlays(mob/user)
|
||||
if(!iscarbon(user))
|
||||
return
|
||||
var/mob/living/carbon/U = user
|
||||
if(!(src in U.modular_items))
|
||||
return
|
||||
for(var/mutable_appearance/overlay in mod_overlays)
|
||||
U.cut_overlay(overlay)
|
||||
mod_overlays -= mod_overlays
|
||||
|
||||
//Function to easily add a requested overlay
|
||||
//Create the appropriate sprite object (mod_overlay) using the icon previously found, from the item's modular sprites file, on the appropriate overlay and with the item's color
|
||||
//The sprite is then added to the item's list of built modular sprites overlay
|
||||
//Added to the appropriate layer of the user
|
||||
//Then the layer is applied
|
||||
//
|
||||
// Why is the layer in mutable appearance entered as its negative version?
|
||||
// No. Damn. Clue. SS13, I don't question it further.
|
||||
//
|
||||
/obj/item/proc/add_modular_overlay(mob/living/carbon/U, modular_icon, modular_layer, sprite_color)
|
||||
var/mutable_appearance/mod_overlay = mutable_appearance(modular_icon_location, modular_icon, -(modular_layer), color = sprite_color)
|
||||
mod_overlays += mod_overlay
|
||||
U.overlays_standing[modular_layer] = mod_overlay
|
||||
U.apply_overlay(modular_layer)
|
||||
|
||||
//General function to generate the right icon_state for belly modular sprites
|
||||
/obj/item/proc/get_modular_belly(obj/item/organ/genital/G)
|
||||
return "belly_[get_belly_size(G)][get_belly_alt()]"
|
||||
|
||||
//General function to get the appropriate shape and size for the belly, accounting for fullness
|
||||
/obj/item/proc/get_belly_size(obj/item/organ/genital/G)
|
||||
var/size = G.size
|
||||
if(G.size > 9)
|
||||
size = 9
|
||||
var/shape
|
||||
if(G.owner.fullness <= FULLNESS_LEVEL_BLOATED)
|
||||
switch(G.shape)
|
||||
if("Soft Belly")
|
||||
shape = "soft"
|
||||
if("Round Belly")
|
||||
shape = "round"
|
||||
else
|
||||
shape = "stuffed"
|
||||
var/stuffed_modifier
|
||||
switch(G.owner.fullness)
|
||||
if(FULLNESS_LEVEL_BLOATED to FULLNESS_LEVEL_BEEG) // Take the stuffed sprite of the same size
|
||||
stuffed_modifier = 0
|
||||
if(FULLNESS_LEVEL_BEEG to FULLNESS_LEVEL_NOMOREPLZ) // Take the stuffed sprite of size + 1
|
||||
stuffed_modifier = 1
|
||||
if(FULLNESS_LEVEL_NOMOREPLZ to INFINITY)// Take the stuffed sprite of size + 2
|
||||
stuffed_modifier = 2
|
||||
size = size + stuffed_modifier
|
||||
|
||||
return "[shape]_[size]"
|
||||
|
||||
//Placeholder function for alternate variants of the shape and size sprites for belly
|
||||
/obj/item/proc/get_belly_alt()
|
||||
return ""
|
||||
|
||||
//General function to get the appropriate shape and size for the butt
|
||||
/obj/item/proc/get_modular_butt(obj/item/organ/genital/G)
|
||||
return "butt_[(G.size <= 10 ) ? "[G.size]" : "10"][get_butt_alt()]"
|
||||
|
||||
//General function to get the alternate variants for butt sprites, used for digitigrade characters
|
||||
/obj/item/proc/get_butt_alt()
|
||||
return "[(mutantrace_variation == STYLE_DIGITIGRADE) ? "_l" : ""]"
|
||||
|
||||
//General function to get the appropriate size for the breasts
|
||||
/obj/item/proc/get_modular_breasts(obj/item/organ/genital/G)
|
||||
var/size
|
||||
if(G.size <= "o")
|
||||
size = G.size
|
||||
else
|
||||
switch(G.size)
|
||||
if("huge")
|
||||
size = "huge"
|
||||
if("massive")
|
||||
size = "massive"
|
||||
if("giga")
|
||||
size = "giga"
|
||||
if("impossible")
|
||||
size = "impossible"
|
||||
return "breasts_[size][get_breasts_alt()]"
|
||||
|
||||
//Placeholder function for alternate variants of the breasts
|
||||
/obj/item/proc/get_breasts_alt()
|
||||
return ""
|
||||
|
||||
//The modular grey jumpsuit. The foundation of modular items and our holy grail
|
||||
/obj/item/clothing/under/color/grey
|
||||
name = "grey jumpsuit (Modular)" //(Modular) to tell players it is modular
|
||||
modular_icon_location = 'GainStation13/icons/mob/modclothes/modular_grey.dmi' //Location of the sprites, to make it modular
|
||||
desc = "A tasteful grey jumpsuit that reminds you of the good old days."
|
||||
|
||||
//Overload of the alt belly sprites function, for adjusteable clothing
|
||||
/obj/item/clothing/under/get_belly_alt()
|
||||
return "[(adjusted) ? "_d" : ""]"
|
||||
|
||||
//The placeholder colored jumpsuits
|
||||
/obj/item/clothing/under/color/grey/service
|
||||
name = "service grey jumpsuit (Modular)"
|
||||
desc = "Grey only in name"
|
||||
color = "#6AD427"
|
||||
armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, WOUND = 5)
|
||||
|
||||
/obj/item/clothing/under/color/grey/medical
|
||||
name = "medical grey jumpsuit (Modular)"
|
||||
desc = "Grey only in name"
|
||||
color = "#5A96BB"
|
||||
armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 10, RAD = 0, FIRE = 0, ACID = 0, WOUND = 5)
|
||||
|
||||
/obj/item/clothing/under/color/grey/cargo
|
||||
name = "cargo grey jumpsuit (Modular)"
|
||||
desc = "Grey only in name"
|
||||
color = "#BB9042"
|
||||
armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 0, WOUND = 10)
|
||||
|
||||
/obj/item/clothing/under/color/grey/engi
|
||||
name = "engineering grey jumpsuit (Modular)"
|
||||
desc = "Grey only in name"
|
||||
color = "#FF8800"
|
||||
armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 10, FIRE = 60, ACID = 20, WOUND = 5)
|
||||
|
||||
/obj/item/clothing/under/color/grey/science
|
||||
name = "science grey jumpsuit (Modular)"
|
||||
desc = "Grey only in name"
|
||||
color = "#9900FF"
|
||||
armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 10, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, WOUND = 5)
|
||||
|
||||
/obj/item/clothing/under/color/grey/security
|
||||
name = "security grey jumpsuit (Modular)"
|
||||
desc = "Grey only in name"
|
||||
color = "#F4080C"
|
||||
armor = list(MELEE = 10, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 30, ACID = 30, WOUND = 10)
|
||||
|
||||
/obj/item/clothing/under/color/grey/command
|
||||
name = "command grey jumpsuit (Modular)"
|
||||
desc = "Grey only in name"
|
||||
color = "#004B8F"
|
||||
armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, WOUND = 15)
|
||||
@@ -1,27 +0,0 @@
|
||||
|
||||
|
||||
/datum/round_event_control/vent_clog/fattening
|
||||
name = "Clogged Vents: Fattening"
|
||||
typepath = /datum/round_event/vent_clog/fattening
|
||||
max_occurrences = 0
|
||||
min_players = 5
|
||||
description = "Spits out lipoifier foam through the scrubber system."
|
||||
|
||||
/datum/round_event/vent_clog/fattening
|
||||
reagentsAmount = 50
|
||||
|
||||
/datum/round_event/vent_clog/fattening/announce()
|
||||
priority_announce("The scrubbers network is experiencing an unexpected surge of lipo-related chemicals. Some ejection of contents may occur.", "Atmospherics alert")
|
||||
|
||||
/datum/round_event/vent_clog/fattening/start()
|
||||
for(var/obj/machinery/atmospherics/components/unary/vent in vents)
|
||||
if(vent && vent.loc && !vent.welded)
|
||||
var/datum/reagents/R = new/datum/reagents(1000)
|
||||
R.my_atom = vent
|
||||
R.add_reagent(/datum/reagent/consumable/lipoifier, reagentsAmount)
|
||||
|
||||
var/datum/effect_system/foam_spread/foam = new
|
||||
foam.set_up(200, get_turf(vent), R)
|
||||
foam.start()
|
||||
CHECK_TICK
|
||||
|
||||
@@ -1,71 +0,0 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// GS13 - big bottles
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//unfortunately I wasn't able to code in a fancy overlay that changes depending on bottle's contents volume
|
||||
//however if anyone would like to give it a go, the sprites for it are already there, in the .dmi
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bigbottle
|
||||
name = "Bottle"
|
||||
desc = "You shouldn't see this."
|
||||
icon = 'GainStation13/icons/obj/food/bigbottle.dmi'
|
||||
icon_state = "bigbottle_default"
|
||||
list_reagents = list(/datum/reagent/consumable/space_cola = 25)
|
||||
custom_materials = list(/datum/material/plastic=200)
|
||||
foodtype = SUGAR
|
||||
isGlass = FALSE
|
||||
volume = 100
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bigbottle/starkist
|
||||
name = "StarKist Bottle"
|
||||
desc = "A big bottle of Sunkist - for all your chuggin' needs."
|
||||
icon_state = "bigbottle_fan"
|
||||
list_reagents = list(/datum/reagent/consumable/sodawater = 20, /datum/reagent/consumable/orangejuice = 60)
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bigbottle/cola
|
||||
name = "GT-Cola Bottle"
|
||||
desc = "A big bottle of GT-Cola - for all your chuggin' needs."
|
||||
icon_state = "bigbottle_cola"
|
||||
list_reagents = list(/datum/reagent/consumable/space_cola = 80)
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bigbottle/spaceup
|
||||
name = "Space-Up! Bottle"
|
||||
desc = "A big bottle of Space-Up! - for all your chuggin' needs."
|
||||
icon_state = "bigbottle_spr"
|
||||
list_reagents = list(/datum/reagent/consumable/space_up = 60, /datum/reagent/consumable/sodawater = 20)
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bigbottle/fizz
|
||||
name = "Fizz-Wizz Bottle"
|
||||
desc = "A big bottle of Fizz-Wizz - for all your chuggin' needs."
|
||||
icon_state = "bigbottle_fizz"
|
||||
list_reagents = list(/datum/reagent/consumable/space_cola = 50, /datum/reagent/consumable/fizulphite = 30)
|
||||
|
||||
|
||||
//code for overlays
|
||||
/obj/item/reagent_containers/food/drinks/bigbottle/on_reagent_change()
|
||||
cut_overlays()
|
||||
var/mutable_appearance/reagent_overlay = mutable_appearance(icon, "reagent")
|
||||
if(reagents.reagent_list.len)
|
||||
/*if(!renamedByPlayer)
|
||||
name = "bottle of " + R.name
|
||||
desc = R.glass_desc*/
|
||||
|
||||
var/percent = round((reagents.total_volume / volume) * 100)
|
||||
switch(percent)
|
||||
if(0)
|
||||
reagent_overlay.icon_state = "reagent0"
|
||||
if(1 to 19)
|
||||
reagent_overlay.icon_state = "reagent20"
|
||||
if(20 to 39)
|
||||
reagent_overlay.icon_state = "reagent40"
|
||||
if(40 to 59)
|
||||
reagent_overlay.icon_state = "reagent60"
|
||||
if(60 to 79)
|
||||
reagent_overlay.icon_state = "reagent80"
|
||||
if(80 to 100)
|
||||
reagent_overlay.icon_state = "reagent100"
|
||||
reagent_overlay.color = mix_color_from_reagents(reagents.reagent_list)
|
||||
add_overlay(reagent_overlay)
|
||||
else
|
||||
reagent_overlay.icon_state = "reagent0"
|
||||
add_overlay(reagent_overlay)
|
||||
@@ -1,13 +0,0 @@
|
||||
/datum/reagent/consumable
|
||||
var/use_gs_icon = FALSE
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/drinkingglass/on_reagent_change(changetype)
|
||||
icon = 'icons/obj/drinks.dmi'
|
||||
if(reagents.reagent_list.len)
|
||||
var/datum/reagent/R = reagents.get_master_reagent()
|
||||
if(istype(R, /datum/reagent/consumable))
|
||||
var/datum/reagent/consumable/C = R
|
||||
if(C.use_gs_icon == TRUE)
|
||||
icon = 'GainStation13/icons/obj/drinks.dmi'
|
||||
|
||||
..()
|
||||
@@ -3,7 +3,6 @@
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/gbburrito
|
||||
name = "\improper GATO Gas Giant Burrito"
|
||||
icon = 'Gainstation13/icons/obj/food/food.dmi'
|
||||
icon_state = "gbburrito"
|
||||
desc = "More than three pounds of beans, meat, and cheese wrapped in a greasy tortilla. It's piping hot."
|
||||
trash = null
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
|
||||
/obj/item/circuitboard/machine/treadmill
|
||||
name = "Treadmill (Machine Board)"
|
||||
build_path = /obj/machinery/treadmill
|
||||
build_path = /obj/machinery/autolathe
|
||||
req_components = list(/obj/item/stock_parts/manipulator = 1)
|
||||
|
||||
/datum/design/treadmill
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
/obj/item/seeds/berry
|
||||
mutatelist = list(/obj/item/seeds/berry/glow, /obj/item/seeds/berry/poison, /obj/item/seeds/berry/blueberry)
|
||||
|
||||
/obj/item/seeds/berry/blueberry
|
||||
name = "pack of blueberry seeds"
|
||||
desc = "These seeds grow into blueberry bushes."
|
||||
icon_state = "seed-blueberry"
|
||||
species = "blueberry"
|
||||
plantname = "Blueberry Bush"
|
||||
product = /obj/item/reagent_containers/food/snacks/grown/berries/blueberry
|
||||
@@ -13,18 +11,11 @@
|
||||
yield = 1
|
||||
production = 10
|
||||
rarity = 30
|
||||
icon = 'GainStation13/icons/obj/hydroponics/seeds.dmi'
|
||||
icon_state = "seed-blueberry"
|
||||
growing_icon = 'GainStation13/icons/obj/hydroponics/growing.dmi'
|
||||
icon_grow = "berry-grow" // Uses one growth icons set for all the subtypes
|
||||
icon_dead = "berry-dead" // Same for the dead icon
|
||||
icon_harvest = "blueberry-harvest"
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/berries/blueberry
|
||||
seed = /obj/item/seeds/berry/blueberry
|
||||
name = "bunch of blueberries"
|
||||
desc = "Taste so good, you might turn blue!"
|
||||
icon = 'GainStation13/icons/obj/hydroponics/harvest.dmi'
|
||||
icon_state = "blueberrypile"
|
||||
filling_color = "#5d00c7"
|
||||
foodtype = FRUIT
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
/obj/item/seeds/lipoplant
|
||||
name = "pack of adipolipus"
|
||||
desc = "These seeds grow into a foreign plant."
|
||||
icon = 'GainStation13/icons/obj/hydroponics/lipo_seeds.dmi'
|
||||
icon_state = "lipo_seed"
|
||||
species = "adipolipus"
|
||||
plantname = "Adipolipus"
|
||||
product = /obj/item/reagent_containers/food/snacks/grown/lipofruit
|
||||
@@ -9,19 +11,17 @@
|
||||
maturation = 8
|
||||
production = 5
|
||||
yield = 1
|
||||
reagents_add = list(/datum/reagent/consumable/lipoifier = 0.05)
|
||||
icon = 'GainStation13/icons/obj/hydroponics/seeds.dmi'
|
||||
icon_state = "seed-lipo"
|
||||
growing_icon = 'GainStation13/icons/obj/hydroponics/growing.dmi'
|
||||
growing_icon = 'GainStation13/icons/obj/hydroponics/lipo_growing.dmi'
|
||||
icon_grow = "lipo-grow" // Uses one growth icons set for all the subtypes
|
||||
icon_dead = "lipo-dead" // Same for the dead icon
|
||||
icon_harvest = "lipo-harvest"
|
||||
reagents_add = list(/datum/reagent/consumable/lipoifier = 0.05)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/lipofruit
|
||||
seed = /obj/item/seeds/lipoplant
|
||||
name = "lipofruit"
|
||||
desc = "A foreign fruit with an hard shell. Perhaps something sharp could open it?"
|
||||
icon = 'GainStation13/icons/obj/hydroponics/harvest.dmi'
|
||||
icon = 'GainStation13/icons/obj/hydroponics/lipo_harvest.dmi'
|
||||
icon_state = "lipo_nut"
|
||||
item_state = "lipo_nut"
|
||||
possible_transfer_amounts = list(5, 10, 15, 20, 25, 30, 50)
|
||||
|
||||
@@ -1,11 +1,6 @@
|
||||
/mob/living/carbon
|
||||
var/nutri_mult = 1
|
||||
|
||||
/obj/item/seeds/cannabis
|
||||
mutatelist = list(/obj/item/seeds/cannabis/rainbow,
|
||||
/obj/item/seeds/cannabis/death,
|
||||
/obj/item/seeds/cannabis/munchies)
|
||||
|
||||
/datum/plant_gene/trait/glow/orange
|
||||
name = "Orange Bioluminescence"
|
||||
glow_color = "#ff9166"
|
||||
@@ -13,26 +8,22 @@
|
||||
/obj/item/seeds/cannabis/munchies
|
||||
name = "pack of munchies weed seeds"
|
||||
desc = "These seeds grow into munchies weed."
|
||||
icon_state = "seed-munchies"
|
||||
species = "munchycannabis"
|
||||
plantname = "Munchies Weed"
|
||||
icon_grow = "munchycannabis-grow" // Uses one growth icons set for all the subtypes
|
||||
icon_dead = "munchycannabis-dead" // Same for the dead icon
|
||||
product = /obj/item/reagent_containers/food/snacks/grown/cannabis/munchies
|
||||
genes = list(/datum/plant_gene/trait/repeated_harvest, /datum/plant_gene/trait/glow/orange)
|
||||
mutatelist = list()
|
||||
reagents_add = list(/datum/reagent/drug/space_drugs = 0.05,
|
||||
/datum/reagent/drug/munchies = 0.10)
|
||||
rarity = 69
|
||||
icon = 'GainStation13/icons/obj/hydroponics/seeds.dmi'
|
||||
icon_state = "seed-munchies"
|
||||
growing_icon = 'GainStation13/icons/obj/hydroponics/growing.dmi'
|
||||
icon_grow = "munchycannabis-grow" // Uses one growth icons set for all the subtypes
|
||||
icon_dead = "munchycannabis-dead" // Same for the dead icon
|
||||
icon_harvest = "munchycannabis-harvest"
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/cannabis/munchies
|
||||
seed = /obj/item/seeds/cannabis/munchies
|
||||
name = "munchies cannabis leaf"
|
||||
desc = "You feel hungry just looking at it."
|
||||
icon = 'GainStation13/icons/obj/hydroponics/harvest.dmi'
|
||||
icon_state = "munchycannabis"
|
||||
wine_power = 90
|
||||
|
||||
|
||||
@@ -1,55 +0,0 @@
|
||||
//GS13 - markings, ported or our own (preferably mark where you took them from)
|
||||
//I don't know why these need both mam_ears and human variants, because some other ear datums just work fine without that??
|
||||
//It didn't want to show up otherwise so I'll keep it as that
|
||||
|
||||
/datum/sprite_accessory/ears/mam_ears/dragon //ported from Virgo
|
||||
name = "Dragon"
|
||||
icon = 'GainStation13/icons/mob/markings/mam_ears.dmi'
|
||||
icon_state = "dragon"
|
||||
|
||||
/datum/sprite_accessory/ears/human/dragon //ported from Virgo
|
||||
name = "Dragon"
|
||||
icon = 'GainStation13/icons/mob/markings/mam_ears.dmi'
|
||||
icon_state = "dragon"
|
||||
|
||||
/datum/sprite_accessory/ears/mam_ears/avali
|
||||
name = "Avali"
|
||||
icon_state = "avali"
|
||||
icon = 'GainStation13/icons/mob/markings/mam_ears.dmi'
|
||||
color_src = MATRIXED
|
||||
matrixed_sections = MATRIX_RED_GREEN
|
||||
|
||||
/datum/sprite_accessory/ears/human/avali
|
||||
name = "Avali"
|
||||
icon_state = "avali"
|
||||
icon = 'GainStation13/icons/mob/markings/mam_ears.dmi'
|
||||
color_src = MATRIXED
|
||||
matrixed_sections = MATRIX_RED_GREEN
|
||||
|
||||
/datum/sprite_accessory/ears/human/fennec_tall
|
||||
name = "Fennec (Tall)"
|
||||
icon = 'GainStation13/icons/mob/32x64_mam_ears.dmi'
|
||||
icon_state = "fennectall"
|
||||
color_src = MATRIXED
|
||||
matrixed_sections = MATRIX_RED_GREEN
|
||||
|
||||
/datum/sprite_accessory/ears/mam_ears/fennec_tall
|
||||
name = "Fennec (Tall)"
|
||||
icon = 'GainStation13/icons/mob/32x64_mam_ears.dmi'
|
||||
icon_state = "fennectall"
|
||||
color_src = MATRIXED
|
||||
matrixed_sections = MATRIX_RED_GREEN
|
||||
|
||||
/datum/sprite_accessory/ears/mam_ears/undergoat
|
||||
name = "Goat"
|
||||
icon_state = "goat"
|
||||
icon = 'GainStation13/icons/mob/markings/mam_ears.dmi'
|
||||
color_src = MATRIXED
|
||||
matrixed_sections = MATRIX_RED_GREEN
|
||||
|
||||
/datum/sprite_accessory/ears/human/undergoat
|
||||
name = "Avali"
|
||||
icon_state = "avali"
|
||||
icon = 'GainStation13/icons/mob/markings/mam_ears.dmi'
|
||||
color_src = MATRIXED
|
||||
matrixed_sections = MATRIX_RED_GREEN
|
||||
@@ -1,22 +0,0 @@
|
||||
//GS13 - markings, ported or our own (preferably mark where you took them from)
|
||||
|
||||
/datum/sprite_accessory/frills/cobra
|
||||
name = "Cobra Hood"
|
||||
icon_state = "cobrahood"
|
||||
color_src = MATRIXED
|
||||
matrixed_sections = MATRIX_RED_GREEN
|
||||
icon = 'hyperstation/icons/mob/snek.dmi'
|
||||
|
||||
/datum/sprite_accessory/frills/cobraslim
|
||||
name = "Narrow Cobra Hood"
|
||||
icon_state = "cobraslim"
|
||||
color_src = MATRIXED
|
||||
matrixed_sections = MATRIX_RED_GREEN
|
||||
icon = 'hyperstation/icons/mob/snek.dmi'
|
||||
|
||||
/datum/sprite_accessory/frills/cobrahood_alt
|
||||
name = "Cobra Hood - Alt"
|
||||
icon_state = "cobrahood_alt"
|
||||
color_src = MATRIXED
|
||||
matrixed_sections = MATRIX_RED_GREEN
|
||||
icon = 'hyperstation/icons/mob/snek.dmi'
|
||||
@@ -1 +0,0 @@
|
||||
//GS13 - markings, ported or our own (preferably mark where you took them from)
|
||||
@@ -1,10 +0,0 @@
|
||||
//GS13 - markings, ported or our own (preferably mark where you took them from)
|
||||
|
||||
#define NEWHAIR(_name, new_state) /datum/sprite_accessory/hair/##new_state/icon_state=#new_state;/datum/sprite_accessory/hair/##new_state/name = #_name;/datum/sprite_accessory/hair/##new_state/icon = 'GainStation13/icons/mob/human_face.dmi'
|
||||
|
||||
NEWHAIR(Elize, hair_elize)
|
||||
NEWHAIR(Lem, hair_lem)
|
||||
NEWHAIR(Straight (Floorlength), hair_straightfloorlength)
|
||||
|
||||
#undef NEWHAIR
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
//GS13 - markings, ported or our own (preferably mark where you took them from)
|
||||
@@ -1 +0,0 @@
|
||||
//GS13 - markings, ported or our own (preferably mark where you took them from)
|
||||
@@ -1,63 +0,0 @@
|
||||
//GS13 - markings, ported or our own (preferably mark where you took them from)
|
||||
|
||||
|
||||
/datum/sprite_accessory/taur/gator //ported from Vorestation
|
||||
name = "Gator"
|
||||
icon = 'GainStation13/icons/mob/markings/mam_taur.dmi'
|
||||
icon_state = "gator"
|
||||
color_src = MATRIXED
|
||||
matrixed_sections = MATRIX_RED_GREEN
|
||||
hide_legs = FALSE
|
||||
|
||||
/datum/sprite_accessory/taur/fatdrake //ported from Vorestation
|
||||
name = "Fat Drake"
|
||||
icon = 'GainStation13/icons/mob/markings/mam_taur.dmi'
|
||||
icon_state = "fatdrake"
|
||||
color_src = MATRIXED
|
||||
matrixed_sections = MATRIX_RED_GREEN
|
||||
|
||||
/datum/sprite_accessory/taur/fatwolf //ported from Vorestation
|
||||
name = "Fat Wolf"
|
||||
icon = 'GainStation13/icons/mob/markings/mam_taur.dmi'
|
||||
icon_state = "fatwolf"
|
||||
color_src = MUTCOLORS
|
||||
|
||||
/datum/sprite_accessory/taur/fatliz //ported from Vorestation
|
||||
name = "Fat Lizard"
|
||||
icon = 'GainStation13/icons/mob/markings/mam_taur.dmi'
|
||||
icon_state = "fatliz"
|
||||
color_src = MATRIXED
|
||||
matrixed_sections = MATRIX_RED_GREEN
|
||||
|
||||
/datum/sprite_accessory/taur/longtailfluff //ported from Vorestation
|
||||
name = "Long Fluffy Tail"
|
||||
icon = 'GainStation13/icons/mob/markings/mam_taur.dmi'
|
||||
icon_state = "longtailfluff"
|
||||
color_src = MATRIXED
|
||||
matrixed_sections = MATRIX_RED_GREEN
|
||||
|
||||
/datum/sprite_accessory/taur/fatsynthwolf //ported from Vorestation
|
||||
name = "Fat Synth Wolf"
|
||||
icon = 'GainStation13/icons/mob/markings/mam_taur.dmi'
|
||||
icon_state = "fatsynthwolf"
|
||||
color_src = MUTCOLORS
|
||||
|
||||
/datum/sprite_accessory/taur/bigleggies //ported from Vorestation
|
||||
name = "Big Leggies"
|
||||
icon = 'GainStation13/icons/mob/markings/mam_taur.dmi'
|
||||
icon_state = "bigleggy"
|
||||
color_src = MUTCOLORS
|
||||
|
||||
/datum/sprite_accessory/taur/fatnaga //ported from Vorestation
|
||||
name = "Fat Naga"
|
||||
icon = 'GainStation13/icons/mob/markings/mam_taur.dmi'
|
||||
icon_state = "fatnaga"
|
||||
color_src = MATRIXED
|
||||
matrixed_sections = MATRIX_RED_GREEN
|
||||
|
||||
/datum/sprite_accessory/taur/altnaga //ported from Vorestation
|
||||
name = "Alt Naga"
|
||||
icon = 'GainStation13/icons/mob/markings/mam_taur.dmi'
|
||||
icon_state = "altnaga"
|
||||
color_src = MATRIXED
|
||||
matrixed_sections = MATRIX_RED_GREEN
|
||||
@@ -1,70 +0,0 @@
|
||||
//GS13 - markings, ported or our own (preferably mark where you took them from)
|
||||
|
||||
/datum/sprite_accessory/snouts/mam_snouts/hjackal
|
||||
name = "Jackal"
|
||||
icon = 'GainStation13/icons/mob/markings/mam_snouts.dmi'
|
||||
icon_state = "hjackal"
|
||||
color_src = MATRIXED
|
||||
matrixed_sections = MATRIX_RED_GREEN
|
||||
|
||||
/datum/sprite_accessory/snouts/mam_snouts/synthlizproto1
|
||||
name = "Synthetic Lizard - Prototype Visor 1"
|
||||
icon = 'GainStation13/icons/mob/markings/mam_snouts.dmi'
|
||||
icon_state = "synthlizproto1"
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/snouts/mam_snouts/synthlizproto2
|
||||
name = "Synthetic Lizard - Prototype Visor 2"
|
||||
icon = 'GainStation13/icons/mob/markings/mam_snouts.dmi'
|
||||
icon_state = "synthlizproto2"
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/snouts/mam_snouts/gator
|
||||
name = "Gator"
|
||||
icon = 'GainStation13/icons/mob/markings/mam_snouts.dmi'
|
||||
icon_state = "gator"
|
||||
color_src = MATRIXED
|
||||
matrixed_sections = MATRIX_RED_GREEN
|
||||
|
||||
//eastern dragon
|
||||
/datum/sprite_accessory/snouts/mam_snouts/easterndragon
|
||||
name = "Eastern Dragon"
|
||||
icon = 'GainStation13/icons/mob/markings/char_snouts.dmi'
|
||||
icon_state = "easterndw"
|
||||
color_src = MATRIXED
|
||||
matrixed_sections = MATRIX_RED_GREEN
|
||||
|
||||
/datum/sprite_accessory/snouts/mam_snouts/easterndragon/no_whiskers
|
||||
name = "Eastern Dragon - No Whiskers"
|
||||
icon = 'GainStation13/icons/mob/markings/char_snouts.dmi'
|
||||
icon_state = "easterndnw"
|
||||
color_src = MATRIXED
|
||||
matrixed_sections = MATRIX_RED_GREEN
|
||||
|
||||
/datum/sprite_accessory/snouts/mam_snouts/feasterndragon
|
||||
name = "Eastern Dragon (Top)"
|
||||
icon = 'GainStation13/icons/mob/markings/char_snouts.dmi'
|
||||
icon_state = "feasterndw"
|
||||
color_src = MATRIXED
|
||||
matrixed_sections = MATRIX_RED_GREEN
|
||||
|
||||
/datum/sprite_accessory/snouts/mam_snouts/feasterndragon/no_whiskers
|
||||
name = "Eastern Dragon - No Whiskers (Top)"
|
||||
icon = 'GainStation13/icons/mob/markings/char_snouts.dmi'
|
||||
icon_state = "feasterndnw"
|
||||
color_src = MATRIXED
|
||||
matrixed_sections = MATRIX_RED_GREEN
|
||||
|
||||
/datum/sprite_accessory/snouts/mam_snouts/hhorse
|
||||
name = "Horse"
|
||||
icon = 'GainStation13/icons/mob/markings/mam_snouts.dmi'
|
||||
icon_state = "hhorse"
|
||||
color_src = MATRIXED
|
||||
matrixed_sections = MATRIX_RED_GREEN
|
||||
|
||||
/datum/sprite_accessory/snouts/mam_snouts/deer
|
||||
name = "Deer"
|
||||
icon = 'GainStation13/icons/mob/markings/mam_snouts.dmi'
|
||||
icon_state = "deer"
|
||||
color_src = MATRIXED
|
||||
matrixed_sections = MATRIX_RED_GREEN
|
||||
@@ -1 +0,0 @@
|
||||
//GS13 - markings, ported or our own (preferably mark where you took them from)
|
||||
@@ -1,100 +0,0 @@
|
||||
//GS13 - markings, ported or our own (preferably mark where you took them from)
|
||||
|
||||
//snaketail
|
||||
/datum/sprite_accessory/tails/lizard/snaketail //GS13 - ...6 seperate paths for one tail. Wew.
|
||||
name = "Snaketail"
|
||||
icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
|
||||
icon_state = "snaketail"
|
||||
color_src = MATRIXED
|
||||
matrixed_sections = MATRIX_RED_GREEN
|
||||
|
||||
/datum/sprite_accessory/tails_animated/lizard/snaketail
|
||||
name = "Snaketail"
|
||||
icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
|
||||
icon_state = "snaketail"
|
||||
color_src = MATRIXED
|
||||
matrixed_sections = MATRIX_RED_GREEN
|
||||
|
||||
/datum/sprite_accessory/tails/human/snaketail
|
||||
name = "Snaketail"
|
||||
icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
|
||||
icon_state = "snaketail"
|
||||
color_src = MATRIXED
|
||||
matrixed_sections = MATRIX_RED_GREEN
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/snaketail
|
||||
name = "Snaketail"
|
||||
icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
|
||||
icon_state = "snaketail"
|
||||
color_src = MATRIXED
|
||||
matrixed_sections = MATRIX_RED_GREEN
|
||||
|
||||
/datum/sprite_accessory/tails/mam_tails/snaketail
|
||||
name = "Snaketail"
|
||||
icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
|
||||
icon_state = "snaketail"
|
||||
color_src = MATRIXED
|
||||
matrixed_sections = MATRIX_RED_GREEN
|
||||
|
||||
/datum/sprite_accessory/tails_animated/mam_tails_animated/snaketail
|
||||
name = "Snaketail"
|
||||
icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
|
||||
icon_state = "snaketail"
|
||||
color_src = MATRIXED
|
||||
matrixed_sections = MATRIX_RED_GREEN
|
||||
|
||||
//spaded tail
|
||||
/datum/sprite_accessory/tails/mam_tails/spade
|
||||
name = "Demon Spade"
|
||||
icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
|
||||
icon_state = "spade"
|
||||
matrixed_sections = MATRIX_RED_GREEN
|
||||
|
||||
/datum/sprite_accessory/tails_animated/mam_tails_animated/spade
|
||||
name = "Demon Spade"
|
||||
icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
|
||||
icon_state = "spade"
|
||||
matrixed_sections = MATRIX_RED_GREEN
|
||||
|
||||
/datum/sprite_accessory/tails/human/spade
|
||||
name = "Demon Spade"
|
||||
icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
|
||||
icon_state = "spade"
|
||||
matrixed_sections = MATRIX_RED_GREEN
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/spade
|
||||
name = "Demon Spade"
|
||||
icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
|
||||
icon_state = "spade"
|
||||
matrixed_sections = MATRIX_RED_GREEN
|
||||
|
||||
//deer tail
|
||||
|
||||
|
||||
/datum/sprite_accessory/tails/human/deer
|
||||
name = "Deer"
|
||||
icon_state = "deer"
|
||||
color_src = MATRIXED
|
||||
icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
|
||||
matrixed_sections = MATRIX_RED_GREEN
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/deer
|
||||
name = "Deer"
|
||||
icon_state = "deer"
|
||||
color_src = MATRIXED
|
||||
icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
|
||||
matrixed_sections = MATRIX_RED_GREEN
|
||||
|
||||
/datum/sprite_accessory/tails/mam_tails/deer
|
||||
name = "Deer"
|
||||
icon_state = "deer"
|
||||
color_src = MATRIXED
|
||||
icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
|
||||
matrixed_sections = MATRIX_RED_GREEN
|
||||
|
||||
/datum/sprite_accessory/tails_animated/mam_tails_animated/deer
|
||||
name = "Deer"
|
||||
icon_state = "deer"
|
||||
color_src = MATRIXED
|
||||
icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
|
||||
matrixed_sections = MATRIX_RED_GREEN
|
||||
@@ -1 +0,0 @@
|
||||
//GS13 - markings, ported or our own (preferably mark where you took them from)
|
||||
@@ -7,10 +7,8 @@
|
||||
slot = ORGAN_SLOT_BELLY
|
||||
w_class = 3
|
||||
size = 0
|
||||
var/max_size = 0
|
||||
shape = DEF_BELLY_SHAPE
|
||||
var/statuscheck = FALSE
|
||||
genital_flags = UPDATE_OWNER_APPEARANCE
|
||||
shape = "belly"
|
||||
masturbation_verb = "massage"
|
||||
var/sent_full_message = TRUE //defaults to 1 since they're full to start
|
||||
var/inflatable = FALSE //For inflation connoisseurs
|
||||
@@ -19,7 +17,7 @@
|
||||
layer_index = BELLY_LAYER_INDEX
|
||||
|
||||
/obj/item/organ/genital/belly/modify_size(modifier, min = BELLY_SIZE_DEF, max = BELLY_SIZE_MAX)
|
||||
var/new_value = clamp(size_cached + modifier, starting_size, max)
|
||||
var/new_value = clamp(size_cached + modifier, min, max)
|
||||
if(new_value == size_cached)
|
||||
return
|
||||
prev_size = size_cached
|
||||
@@ -29,26 +27,7 @@
|
||||
..()
|
||||
|
||||
/obj/item/organ/genital/belly/update_appearance()
|
||||
//GS13 - Port Stuffed states
|
||||
// Default settings
|
||||
var/datum/sprite_accessory/S = GLOB.belly_shapes_list[shape] //GS13 - get belly shape
|
||||
var/icon_shape_state = S ? S.icon_state : "belly" //fallback to default belly in case we cant find a shape
|
||||
icon_state = "belly_[icon_shape_state]_[size]"
|
||||
var/icon_shape = S ? S.icon : "hyperstation/icons/obj/genitals/belly.dmi" //fallback to default belly in case we cant find a shape
|
||||
icon = icon_shape
|
||||
|
||||
// Change belly sprite and size based on current fullness
|
||||
switch(owner.fullness)
|
||||
if(FULLNESS_LEVEL_BLOATED to FULLNESS_LEVEL_BEEG)
|
||||
icon = 'hyperstation/icons/obj/genitals/belly_round.dmi' //We use round belly to represent stuffedness
|
||||
icon_state = "belly_round_[size]"
|
||||
if(FULLNESS_LEVEL_BEEG to FULLNESS_LEVEL_NOMOREPLZ)
|
||||
icon = 'hyperstation/icons/obj/genitals/belly_round.dmi'
|
||||
icon_state = "belly_round_[size+1]"
|
||||
if(FULLNESS_LEVEL_NOMOREPLZ to INFINITY)
|
||||
icon = 'hyperstation/icons/obj/genitals/belly_round.dmi'
|
||||
icon_state = "belly_round_[size+2]"
|
||||
|
||||
icon_state = "belly_[shape]_[size]"
|
||||
if(owner)
|
||||
if(owner.dna.species.use_skintones && owner.dna.features["genitals_use_skintone"])
|
||||
if(ishuman(owner)) // Check before recasting type, although someone fucked up if you're not human AND have use_skintones somehow...
|
||||
@@ -66,9 +45,6 @@
|
||||
else
|
||||
color = "#[D.features["belly_color"]]"
|
||||
size = D.features["belly_size"]
|
||||
max_size = D.features["max_belly_size"]
|
||||
starting_size = D.features["belly_size"]
|
||||
shape = D.features["belly_shape"]
|
||||
inflatable = D.features["inflatable_belly"]
|
||||
toggle_visibility(D.features["belly_visibility"], FALSE)
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
if(!ishuman(src))
|
||||
return
|
||||
|
||||
if(fullness >= FULLNESS_LEVEL_BLOATED && fullness_reduction_timer + FULLNESS_REDUCTION_COOLDOWN < world.time)
|
||||
if(fullness >= FULLNESS_LEVEL_BLOATED && fullness_reducion_timer + FULLNESS_REDUCTION_COOLDOWN < world.time)
|
||||
|
||||
fullness -= amount // Remove Fullness
|
||||
|
||||
|
||||
@@ -7,23 +7,11 @@
|
||||
var/obj/item/organ/genital/breasts/breasts = H.getorganslot(ORGAN_SLOT_BREASTS)
|
||||
|
||||
if(butt)
|
||||
if(butt.max_size > 0)
|
||||
if((butt.size + size_change) <= butt.max_size)
|
||||
butt.modify_size(size_change)
|
||||
else
|
||||
butt.modify_size(size_change)
|
||||
butt.modify_size(size_change)
|
||||
if(belly)
|
||||
if(belly.max_size > 0)
|
||||
if((belly.size + size_change) <= belly.max_size)
|
||||
belly.modify_size(size_change)
|
||||
else
|
||||
belly.modify_size(size_change)
|
||||
belly.modify_size(size_change)
|
||||
if(breasts)
|
||||
if(breasts.max_size > 0)
|
||||
if((breasts.cached_size + size_change) <= breasts.max_size)
|
||||
breasts.modify_size(size_change)
|
||||
else
|
||||
breasts.modify_size(size_change)
|
||||
breasts.modify_size(size_change)
|
||||
|
||||
H.genital_override = TRUE
|
||||
H.update_body()
|
||||
@@ -50,7 +38,7 @@
|
||||
|
||||
/datum/species/proc/handle_helplessness(mob/living/carbon/human/fatty)
|
||||
var/datum/preferences/preferences = fatty?.client?.prefs
|
||||
if(!istype(preferences) || HAS_TRAIT(fatty, TRAIT_NO_HELPLESSNESS))
|
||||
if(!istype(preferences))
|
||||
return FALSE
|
||||
|
||||
if(preferences.helplessness_no_movement)
|
||||
@@ -154,7 +142,7 @@
|
||||
ADD_TRAIT(fatty, TRAIT_NO_JUMPSUIT, HELPLESSNESS_TRAIT)
|
||||
|
||||
var/obj/item/clothing/under/jumpsuit = fatty.w_uniform
|
||||
if(istype(jumpsuit) && jumpsuit.modular_icon_location == null)
|
||||
if(istype(jumpsuit) && !istype(jumpsuit, /obj/item/clothing/under/color/grey/modular))
|
||||
to_chat(fatty, "<span class='warning'>[jumpsuit] can no longer contain your weight!</span>")
|
||||
fatty.dropItemToGround(jumpsuit)
|
||||
|
||||
@@ -173,17 +161,17 @@
|
||||
ADD_TRAIT(fatty, TRAIT_NO_MISC, HELPLESSNESS_TRAIT)
|
||||
|
||||
var/obj/item/clothing/suit/worn_suit = fatty.wear_suit
|
||||
if(istype(worn_suit) && !istype(worn_suit, /obj/item/clothing/suit/mod))
|
||||
if(istype(worn_suit))
|
||||
to_chat(fatty, "<span class='warning'>[worn_suit] can no longer contain your weight!</span>")
|
||||
fatty.dropItemToGround(worn_suit)
|
||||
|
||||
var/obj/item/clothing/gloves/worn_gloves = fatty.gloves
|
||||
if(istype(worn_gloves)&& !istype(worn_gloves, /obj/item/clothing/gloves/mod))
|
||||
if(istype(worn_gloves))
|
||||
to_chat(fatty, "<span class='warning'>[worn_gloves] can no longer contain your weight!</span>")
|
||||
fatty.dropItemToGround(worn_gloves)
|
||||
|
||||
var/obj/item/clothing/shoes/worn_shoes = fatty.shoes
|
||||
if(istype(worn_shoes) && !istype(worn_shoes, /obj/item/clothing/shoes/mod))
|
||||
if(istype(worn_shoes))
|
||||
to_chat(fatty, "<span class='warning'>[worn_shoes] can no longer contain your weight!</span>")
|
||||
fatty.dropItemToGround(worn_shoes)
|
||||
|
||||
@@ -201,7 +189,7 @@
|
||||
if(fatty.fatness >= preferences.helplessness_clothing_back)
|
||||
ADD_TRAIT(fatty, TRAIT_NO_BACKPACK, HELPLESSNESS_TRAIT)
|
||||
var/obj/item/back_item = fatty.back
|
||||
if(istype(back_item) && !istype(back_item, /obj/item/mod))
|
||||
if(istype(back_item))
|
||||
to_chat(fatty, "<span class='warning'>Your weight makes it impossible for you to carry [back_item].</span>")
|
||||
fatty.dropItemToGround(back_item)
|
||||
|
||||
@@ -232,48 +220,8 @@
|
||||
id = "fat"
|
||||
variable = TRUE
|
||||
|
||||
/mob/living/carbon
|
||||
var/list/fatness_delay_modifiers
|
||||
|
||||
/datum/fatness_delay_modifier
|
||||
var/name
|
||||
var/amount = 0
|
||||
var/multiplier = 1
|
||||
|
||||
/mob/living/carbon/proc/add_fat_delay_modifier(name = "", amount = 0, multiplier = 1)
|
||||
var/find_name = FALSE
|
||||
for(var/datum/fatness_delay_modifier/modifier in fatness_delay_modifiers)
|
||||
if(modifier.name == name && find_name == FALSE)
|
||||
modifier.amount = amount
|
||||
modifier.multiplier = multiplier
|
||||
find_name = TRUE
|
||||
if(find_name == FALSE)
|
||||
var/datum/fatness_delay_modifier/new_modifier = new()
|
||||
new_modifier.name = name
|
||||
new_modifier.amount = amount
|
||||
new_modifier.multiplier = multiplier
|
||||
LAZYADD(fatness_delay_modifiers, new_modifier)
|
||||
|
||||
/mob/living/carbon/proc/remove_fat_delay_modifier(name)
|
||||
for(var/datum/fatness_delay_modifier/modifier in fatness_delay_modifiers)
|
||||
if(modifier.name == name)
|
||||
LAZYREMOVE(fatness_delay_modifiers, modifier)
|
||||
|
||||
/datum/species/proc/apply_fatness_speed_modifiers(mob/living/carbon/human/H, fatness_delay)
|
||||
var/delay_cap = FATNESS_MAX_MOVE_PENALTY
|
||||
if(HAS_TRAIT(H, TRAIT_WEAKLEGS))
|
||||
delay_cap = 60
|
||||
for(var/datum/fatness_delay_modifier/modifier in H.fatness_delay_modifiers)
|
||||
fatness_delay = fatness_delay + modifier.amount
|
||||
for(var/datum/fatness_delay_modifier/modifier in H.fatness_delay_modifiers)
|
||||
fatness_delay *= modifier.multiplier
|
||||
fatness_delay = max(fatness_delay, 0)
|
||||
fatness_delay = min(fatness_delay, delay_cap)
|
||||
return fatness_delay
|
||||
|
||||
/datum/species/proc/handle_fatness(mob/living/carbon/human/H)
|
||||
handle_helplessness(H)
|
||||
H.handle_modular_items()
|
||||
|
||||
// update movement speed
|
||||
var/fatness_delay = 0
|
||||
@@ -291,11 +239,7 @@
|
||||
fatness_delay += (H.fatness / FATNESS_LEVEL_IMMOBILE) * FATNESS_WEAKLEGS_MODIFIER
|
||||
fatness_delay = min(fatness_delay, 60)
|
||||
|
||||
if(fatness_delay)
|
||||
fatness_delay = apply_fatness_speed_modifiers(H, fatness_delay)
|
||||
H.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/fatness, TRUE, fatness_delay)
|
||||
else
|
||||
H.remove_movespeed_modifier(/datum/movespeed_modifier/fatness)
|
||||
H.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/fatness, TRUE, fatness_delay)
|
||||
|
||||
if(HAS_TRAIT(H, TRAIT_BLOB))
|
||||
handle_fatness_trait(
|
||||
|
||||
@@ -1,37 +0,0 @@
|
||||
//GS13 - BURP SLURRING, USED IN SOME CHEMS OR EFFECTS
|
||||
|
||||
/proc/burpslur(phrase, strength = 50)
|
||||
strength = min(50, strength)
|
||||
phrase = html_decode(phrase)
|
||||
var/leng = length(phrase)
|
||||
. = ""
|
||||
var/newletter = ""
|
||||
var/rawchar = ""
|
||||
for(var/i = 1, i <= leng, i += length(rawchar))
|
||||
rawchar = newletter = phrase[i]
|
||||
if(rand(1,100)<=strength * 0.5)
|
||||
var/lowerletter = lowertext(newletter)
|
||||
if(lowerletter == "o")
|
||||
newletter = "+BURRP+"
|
||||
else if(lowerletter == "s")
|
||||
newletter = "+URP+"
|
||||
else if(lowerletter == "a")
|
||||
newletter = "+GWUURRP+"
|
||||
else if(lowerletter == "u")
|
||||
newletter = "+BUUUURRP+"
|
||||
else if(lowerletter == "c")
|
||||
newletter = "+BURP+"
|
||||
if(rand(1,100) <= strength * 0.25)
|
||||
if(newletter == " ")
|
||||
newletter = "...+GWWUUARRP+..."
|
||||
else if(newletter == ".")
|
||||
newletter = "+BWUUARRP+."
|
||||
switch(rand(1,100) <= strength * 0.5)
|
||||
if(1)
|
||||
newletter += "+BURRP+"
|
||||
if(10)
|
||||
newletter += "[newletter]"
|
||||
if(20)
|
||||
newletter += "[newletter][newletter]"
|
||||
. += "[newletter]"
|
||||
return sanitize(.)
|
||||
@@ -1,235 +0,0 @@
|
||||
/obj/item/mod/module/hydraulic_movement
|
||||
icon = 'GainStation13/icons/obj/clothing/modsuit/mod_modules.dmi'
|
||||
icon_state = "hydraulic_mod"
|
||||
name = "MOD hydraulic movement assistance module"
|
||||
desc = "A module created by GATO, installed across the suit, featuring a system of hydraulic pistons \
|
||||
that support and lighten vast amounts of excess weight to provide easier movement."
|
||||
complexity = 1
|
||||
incompatible_modules = list(/obj/item/mod/module/hydraulic_movement)
|
||||
idle_power_cost = 5
|
||||
var/amount = -2
|
||||
var/modifier_name = "hydraulic_mod"
|
||||
|
||||
/obj/item/mod/module/hydraulic_movement/locked
|
||||
name = "MOD hydraulic movement assistance module (locked)"
|
||||
removable = FALSE
|
||||
|
||||
/obj/item/mod/module/hydraulic_movement/on_suit_activation()
|
||||
var/mob/living/carbon/human/wearer = mod.wearer
|
||||
wearer.add_fat_delay_modifier(modifier_name, amount)
|
||||
|
||||
if(!HAS_TRAIT_FROM(wearer, TRAIT_NO_HELPLESSNESS, src))
|
||||
ADD_TRAIT(wearer, TRAIT_NO_HELPLESSNESS, src)
|
||||
|
||||
if(HAS_TRAIT_FROM(wearer, TRAIT_NO_MOVE, HELPLESSNESS_TRAIT))
|
||||
REMOVE_TRAIT(wearer, TRAIT_NO_MOVE, HELPLESSNESS_TRAIT)
|
||||
// if(HAS_TRAIT_FROM(wearer, TRAIT_CLUMSY, HELPLESSNESS_TRAIT))
|
||||
// REMOVE_TRAIT(wearer, TRAIT_CLUMSY, HELPLESSNESS_TRAIT)
|
||||
// if(HAS_TRAIT_FROM(wearer, TRAIT_NEARSIGHT, HELPLESSNESS_TRAIT))
|
||||
// wearer.cure_nearsighted(HELPLESSNESS_TRAIT)
|
||||
// if(HAS_TRAIT_FROM(wearer, TRAIT_DISFIGURED, HELPLESSNESS_TRAIT))
|
||||
// REMOVE_TRAIT(wearer, TRAIT_DISFIGURED, HELPLESSNESS_TRAIT)
|
||||
if(HAS_TRAIT_FROM(wearer, TRAIT_MUTE, HELPLESSNESS_TRAIT))
|
||||
REMOVE_TRAIT(wearer, TRAIT_MUTE, HELPLESSNESS_TRAIT)
|
||||
if(HAS_TRAIT_FROM(wearer, TRAIT_PARALYSIS_L_ARM, HELPLESSNESS_TRAIT))
|
||||
REMOVE_TRAIT(wearer, TRAIT_PARALYSIS_L_ARM, HELPLESSNESS_TRAIT)
|
||||
REMOVE_TRAIT(wearer, TRAIT_PARALYSIS_R_ARM, HELPLESSNESS_TRAIT)
|
||||
wearer.update_disabled_bodyparts()
|
||||
// if(HAS_TRAIT_FROM(wearer, TRAIT_NO_JUMPSUIT, HELPLESSNESS_TRAIT))
|
||||
// REMOVE_TRAIT(wearer, TRAIT_NO_JUMPSUIT, HELPLESSNESS_TRAIT)
|
||||
if(HAS_TRAIT_FROM(wearer, TRAIT_NO_MISC, HELPLESSNESS_TRAIT))
|
||||
REMOVE_TRAIT(wearer, TRAIT_NO_MISC, HELPLESSNESS_TRAIT)
|
||||
if(HAS_TRAIT_FROM(wearer, TRAIT_NO_BACKPACK, HELPLESSNESS_TRAIT))
|
||||
REMOVE_TRAIT(wearer, TRAIT_NO_BACKPACK, HELPLESSNESS_TRAIT)
|
||||
// if(HAS_TRAIT_FROM(wearer, TRAIT_NO_BUCKLE, HELPLESSNESS_TRAIT))
|
||||
// REMOVE_TRAIT(wearer, TRAIT_NO_BUCKLE, HELPLESSNESS_TRAIT)
|
||||
|
||||
/obj/item/mod/module/hydraulic_movement/on_suit_deactivation(deleting = FALSE)
|
||||
if(deleting)
|
||||
return
|
||||
if(HAS_TRAIT_FROM(mod.wearer, TRAIT_NO_HELPLESSNESS, src))
|
||||
REMOVE_TRAIT(mod.wearer, TRAIT_NO_HELPLESSNESS, src)
|
||||
mod.wearer.remove_fat_delay_modifier(modifier_name)
|
||||
|
||||
/datum/design/module/hydraulic_movement
|
||||
name = "Hydraulic Assistance Module"
|
||||
id = "mod_hydraulic"
|
||||
materials = list(/datum/material/iron = 1000, /datum/material/glass = 200)
|
||||
build_path = /obj/item/mod/module/hydraulic_movement
|
||||
desc = "A GATO-designed module that supports plumper bodies and allows easier movement."
|
||||
|
||||
/obj/item/mod/module/calovoltaic
|
||||
icon = 'GainStation13/icons/obj/clothing/modsuit/mod_modules.dmi'
|
||||
icon_state = "calovoltaic_mod"
|
||||
name = "MOD calovoltaic generator module"
|
||||
desc = "A module created by GATO, capable of burning adipose tissue \
|
||||
to generate power for the suit it is installed onto."
|
||||
module_type = MODULE_TOGGLE
|
||||
complexity = 1
|
||||
incompatible_modules = list(/obj/item/mod/module/calovoltaic)
|
||||
var/rate = 5
|
||||
|
||||
/obj/item/mod/module/calovoltaic/locked
|
||||
name = "MOD calovoltaic generator module (locked)"
|
||||
removable = FALSE
|
||||
|
||||
/obj/item/mod/module/storage/locked
|
||||
name = "MOD storage containment module (locked)"
|
||||
removable = FALSE
|
||||
|
||||
/obj/item/mod/module/calovoltaic/on_select()
|
||||
. = ..()
|
||||
if(active)
|
||||
balloon_alert(mod.wearer, "activated!")
|
||||
else
|
||||
balloon_alert(mod.wearer, "deactivated!")
|
||||
|
||||
/obj/item/mod/module/calovoltaic/on_active_process(delta_time)
|
||||
if(istype(mod.wearer, /mob/living/carbon))
|
||||
var/mob/living/carbon/C = mod.wearer
|
||||
var/adjusted_rate = rate * C.weight_loss_rate
|
||||
if(C.fatness_real > 0 && (C.fatness_real - adjusted_rate) >= adjusted_rate)
|
||||
C.adjust_fatness(-rate, FATTENING_TYPE_WEIGHT_LOSS)
|
||||
mod.cell.give(rate)
|
||||
|
||||
/datum/design/module/calovoltaic
|
||||
name = "Calovoltaic Generator Module"
|
||||
id = "mod_calovoltaic"
|
||||
materials = list(/datum/material/iron = 500, /datum/material/glass = 500, /datum/material/plasma = 500)
|
||||
build_path = /obj/item/mod/module/calovoltaic
|
||||
desc = "A GATO-designed module for burning excess fat to make power for your suit."
|
||||
|
||||
/obj/item/mod/construction/armor/exoskeleton
|
||||
theme = /datum/mod_theme/exoskeleton
|
||||
|
||||
/obj/item/mod/control/Initialize(mapload, new_theme, new_skin)
|
||||
. = ..()
|
||||
gs13_icon_update()
|
||||
|
||||
/obj/item/mod/control/proc/gs13_icon_update()
|
||||
if(theme.use_gs_icon == TRUE)
|
||||
icon = 'GainStation13/icons/obj/clothing/modsuit/mod_clothing.dmi'
|
||||
mob_overlay_icon = 'GainStation13/icons/mob/clothing/modsuit/mod_clothing.dmi'
|
||||
icon_state = "[theme]-control"
|
||||
item_state = "[theme]-control"
|
||||
|
||||
helmet.icon = 'GainStation13/icons/obj/clothing/modsuit/mod_clothing.dmi'
|
||||
helmet.mob_overlay_icon = 'GainStation13/icons/mob/clothing/modsuit/mod_clothing.dmi'
|
||||
helmet.icon_state = "[theme]-helmet"
|
||||
helmet.item_state = "[theme]-helmet"
|
||||
|
||||
chestplate.icon = 'GainStation13/icons/obj/clothing/modsuit/mod_clothing.dmi'
|
||||
chestplate.mob_overlay_icon = 'GainStation13/icons/mob/clothing/modsuit/mod_clothing.dmi'
|
||||
chestplate.icon_state = "[theme]-chestplate"
|
||||
chestplate.item_state = "[theme]-chestplate"
|
||||
|
||||
gauntlets.icon = 'GainStation13/icons/obj/clothing/modsuit/mod_clothing.dmi'
|
||||
gauntlets.mob_overlay_icon = 'GainStation13/icons/mob/clothing/modsuit/mod_clothing.dmi'
|
||||
gauntlets.icon_state = "[theme]-gauntlets"
|
||||
gauntlets.item_state = "[theme]-gauntlets"
|
||||
|
||||
boots.icon = 'GainStation13/icons/obj/clothing/modsuit/mod_clothing.dmi'
|
||||
boots.mob_overlay_icon = 'GainStation13/icons/mob/clothing/modsuit/mod_clothing.dmi'
|
||||
boots.icon_state = "[theme]-boots"
|
||||
boots.item_state = "[theme]-boots"
|
||||
|
||||
/datum/mod_theme
|
||||
var/use_gs_icon = FALSE
|
||||
|
||||
/datum/mod_theme/exoskeleton
|
||||
use_gs_icon = TRUE
|
||||
name = "exoskeleton"
|
||||
desc = "The design for a GATO-branded mobility exoskeleton"
|
||||
extended_desc = "To combat the obesity epidemic that spreads on its stations, \
|
||||
GATO scientists have worked hard to create this simple yet efficient way to support \
|
||||
people whose weight proves restrictive and help them on their journey to lose it."
|
||||
default_skin = "exoskeleton"
|
||||
complexity_max = 5
|
||||
armor = list(MELEE = 5, BULLET = 5, LASER = 5, ENERGY = 5, BOMB = 5, BIO = 5, FIRE = 5, ACID = 5, WOUND = 5, RAD = 5)
|
||||
resistance_flags = FIRE_PROOF
|
||||
max_heat_protection_temperature = 1
|
||||
min_cold_protection_temperature = -1
|
||||
permeability_coefficient = 1
|
||||
siemens_coefficient = 1
|
||||
slowdown_inactive = 0
|
||||
slowdown_active = 0
|
||||
inbuilt_modules = list(/obj/item/mod/module/hydraulic_movement, /obj/item/mod/module/calovoltaic, /obj/item/mod/module/storage)
|
||||
allowed = list(/obj/item/flashlight, /obj/item/tank/internals)
|
||||
skins = list(
|
||||
"exoskeleton" = list(
|
||||
HELMET_LAYER = NECK_LAYER,
|
||||
HELMET_FLAGS = list(
|
||||
UNSEALED_CLOTHING = NONE,
|
||||
SEALED_CLOTHING = NONE,
|
||||
UNSEALED_INVISIBILITY = NONE,
|
||||
SEALED_INVISIBILITY = NONE,
|
||||
SEALED_COVER = NONE,
|
||||
),
|
||||
CHESTPLATE_FLAGS = list(
|
||||
UNSEALED_CLOTHING = NONE,
|
||||
SEALED_CLOTHING = NONE,
|
||||
SEALED_INVISIBILITY = NONE,
|
||||
),
|
||||
GAUNTLETS_FLAGS = list(
|
||||
UNSEALED_CLOTHING = NONE,
|
||||
SEALED_CLOTHING = NONE,
|
||||
),
|
||||
BOOTS_FLAGS = list(
|
||||
UNSEALED_CLOTHING = NONE,
|
||||
SEALED_CLOTHING = NONE,
|
||||
),
|
||||
),
|
||||
"invisible" = list(
|
||||
HELMET_LAYER = NECK_LAYER,
|
||||
HELMET_FLAGS = list(
|
||||
UNSEALED_CLOTHING = NONE,
|
||||
SEALED_CLOTHING = NONE,
|
||||
UNSEALED_INVISIBILITY = NONE,
|
||||
SEALED_INVISIBILITY = NONE,
|
||||
SEALED_COVER = NONE,
|
||||
),
|
||||
CHESTPLATE_FLAGS = list(
|
||||
UNSEALED_CLOTHING = NONE,
|
||||
SEALED_CLOTHING = NONE,
|
||||
SEALED_INVISIBILITY = NONE,
|
||||
),
|
||||
GAUNTLETS_FLAGS = list(
|
||||
UNSEALED_CLOTHING = NONE,
|
||||
SEALED_CLOTHING = NONE,
|
||||
),
|
||||
BOOTS_FLAGS = list(
|
||||
UNSEALED_CLOTHING = NONE,
|
||||
SEALED_CLOTHING = NONE,
|
||||
),
|
||||
)
|
||||
)
|
||||
|
||||
/datum/mod_theme/exoskeleton/locked
|
||||
inbuilt_modules = list(/obj/item/mod/module/hydraulic_movement/locked, /obj/item/mod/module/calovoltaic/locked, /obj/item/mod/module/storage/locked)
|
||||
|
||||
/obj/item/mod/control/pre_equipped/exoskeleton
|
||||
desc = "A pre-built GATO mobility exoskeleton, designed to support high weights, favor movement and weight loss."
|
||||
theme = /datum/mod_theme/exoskeleton
|
||||
cell = /obj/item/stock_parts/cell/upgraded/plus
|
||||
|
||||
/obj/item/mod/control/pre_equipped/exoskeleton/locked
|
||||
name = "MOD control unit (locked)"
|
||||
desc = "A pre-built GATO mobility exoskeleton, designed to support high weights, favor movement and weight loss. This model's modules cannot be removed."
|
||||
theme = /datum/mod_theme/exoskeleton/locked
|
||||
|
||||
/datum/design/module/exoskeleton
|
||||
name = "MOD exoskeleton"
|
||||
id = "mod_exoskeleton"
|
||||
materials = list(/datum/material/iron = 5000, /datum/material/glass = 5000, /datum/material/plasma = 5000)
|
||||
build_path = /obj/item/mod/control/pre_equipped/exoskeleton
|
||||
desc = "A GATO-designed assistance exoskeleton based on MODsuit tech."
|
||||
build_type = MECHFAB
|
||||
construction_time = 10 SECONDS
|
||||
category = list("MODsuit Chassis", "MODsuit Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/gear/hands/exoskeleton
|
||||
name = "MOD exoskeleton"
|
||||
category = LOADOUT_CATEGORY_HANDS
|
||||
path = /obj/item/mod/control/pre_equipped/exoskeleton/locked
|
||||
cost = 3
|
||||
@@ -13,7 +13,6 @@
|
||||
shot_glass_icon_state = "shotglassbrown"
|
||||
pH = 4.5
|
||||
value = 0.1
|
||||
use_gs_icon = TRUE
|
||||
|
||||
/datum/reagent/consumable/ethanol/glyphid_slammer
|
||||
name = "Glyphid slammer"
|
||||
@@ -27,4 +26,3 @@
|
||||
shot_glass_icon_state = "shotglassbrown"
|
||||
pH = 4.5
|
||||
value = 0.1
|
||||
use_gs_icon = TRUE
|
||||
|
||||
@@ -11,7 +11,6 @@
|
||||
glass_name = "belly bloats"
|
||||
glass_desc = "The perfect mix to be big and merry with."
|
||||
shot_glass_icon_state = "shotglassbrown"
|
||||
use_gs_icon = TRUE
|
||||
|
||||
/datum/reagent/consumable/ethanol/belly_bloats/on_mob_life(mob/living/carbon/M)
|
||||
if(M && M?.client?.prefs.weight_gain_food) // GS13
|
||||
@@ -31,7 +30,6 @@
|
||||
glass_name = "blobby mary"
|
||||
glass_desc = "For the morbidly obese ladies and gentlemen."
|
||||
shot_glass_icon_state = "shotglassred"
|
||||
use_gs_icon = TRUE
|
||||
|
||||
/datum/reagent/consumable/ethanol/blobby_mary/on_mob_life(mob/living/carbon/M)
|
||||
if(M && M?.client?.prefs.weight_gain_food) // GS13
|
||||
@@ -51,7 +49,6 @@
|
||||
glass_name = "beltbuster mead"
|
||||
glass_desc = "The ambrosia of the blubbery gods."
|
||||
shot_glass_icon_state = "shotglassgold"
|
||||
use_gs_icon = TRUE
|
||||
|
||||
/datum/reagent/consumable/ethanol/beltbuster_mead/on_mob_life(mob/living/carbon/M)
|
||||
if(M && M?.client?.prefs.weight_gain_food) // GS13
|
||||
@@ -70,7 +67,6 @@
|
||||
glass_name = "heavy cafe"
|
||||
glass_desc = "To enjoy slow mornings with."
|
||||
shot_glass_icon_state = "shotglassbrown"
|
||||
use_gs_icon = TRUE
|
||||
|
||||
/datum/reagent/consumable/heavy_cafe/on_mob_life(mob/living/carbon/M)
|
||||
M.dizziness = max(0,M.dizziness-5)
|
||||
@@ -96,7 +92,6 @@
|
||||
glass_name = "fruits tea"
|
||||
glass_desc = "Goes down really easy and stays there for a long time."
|
||||
shot_glass_icon_state = "shotglassgold"
|
||||
use_gs_icon = TRUE
|
||||
|
||||
/datum/reagent/consumable/fruits_tea/on_mob_life(mob/living/carbon/M)
|
||||
M.dizziness = max(0,M.dizziness-2)
|
||||
@@ -123,7 +118,6 @@
|
||||
glass_name = "snakebite"
|
||||
glass_desc = "Won't hurt like a real bite, but you'll still regert drinking this."
|
||||
shot_glass_icon_state = "shotglassgreen"
|
||||
use_gs_icon = TRUE
|
||||
|
||||
/datum/reagent/consumable/snakebite/on_mob_life(mob/living/carbon/M)
|
||||
if(M && M?.client?.prefs.weight_gain_food) // GS13
|
||||
@@ -143,7 +137,6 @@
|
||||
glass_name = "vanilla milkshake"
|
||||
glass_desc = "Guess they fixed the milkshake machine after all, huh?"
|
||||
shot_glass_icon_state = "shotglasscream"
|
||||
use_gs_icon = TRUE
|
||||
|
||||
/datum/reagent/consumable/milkshake_chocolate
|
||||
name = "Chocolate Milkshake"
|
||||
@@ -156,4 +149,3 @@
|
||||
glass_name = "chocolate milkshake"
|
||||
glass_desc = "Nothing better than cream AND cocoa!"
|
||||
shot_glass_icon_state = "shotglassbrown"
|
||||
use_gs_icon = TRUE
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
// GS13 subtle glitters
|
||||
/datum/reagent/glitter/pink_subtle
|
||||
name = "lesser pink glitter"
|
||||
description = "pink sparkles that get everywhere. these ones seem lower density than normal."
|
||||
color = "#ff8080" //A light pink color
|
||||
glitter_type = /obj/effect/decal/cleanable/glitter/pink_subtle
|
||||
|
||||
/datum/reagent/glitter/white_subtle
|
||||
name = "lesser white glitter"
|
||||
description = "white sparkles that get everywhere. these ones seem lower density than normal."
|
||||
glitter_type = /obj/effect/decal/cleanable/glitter/white_subtle
|
||||
|
||||
/datum/reagent/glitter/blue_subtle
|
||||
name = "lesser blue glitter"
|
||||
description = "blue sparkles that get everywhere. these ones seem lower density than normal."
|
||||
color = "#4040FF" //A blueish color
|
||||
glitter_type = /obj/effect/decal/cleanable/glitter/blue_subtle
|
||||
@@ -1,20 +0,0 @@
|
||||
///////////////////////////////// SUBTLE GLITTERS ////////////////////////////
|
||||
|
||||
/datum/chemical_reaction/lesser_pink
|
||||
name = "pink glitter dilution"
|
||||
id = "lesser_pink_glitter"
|
||||
results = list(/datum/reagent/glitter/pink_subtle = 2)
|
||||
required_reagents = list(/datum/reagent/glitter/pink = 1, /datum/reagent/space_cleaner = 1) //You clean some of it away, I guess?
|
||||
|
||||
/datum/chemical_reaction/lesser_white
|
||||
name = "white glitter dilution"
|
||||
id = "lesser_white_glitter"
|
||||
results = list(/datum/reagent/glitter/white_subtle = 2)
|
||||
required_reagents = list(/datum/reagent/glitter/white = 1, /datum/reagent/space_cleaner = 1)
|
||||
|
||||
/datum/chemical_reaction/lesser_blue
|
||||
name = "pink glitter dilution"
|
||||
id = "lesser_blue_glitter"
|
||||
results = list(/datum/reagent/glitter/blue_subtle = 2)
|
||||
required_reagents = list(/datum/reagent/glitter/blue = 1, /datum/reagent/space_cleaner = 1)
|
||||
//Im not going to do the recolor recipes for the subtle glitters. Unless that's really wanted (except you cant even make glitter to start with so the recipes are already super niche to begin with.)
|
||||
@@ -5,43 +5,3 @@
|
||||
materials = list(/datum/material/iron = 1000, /datum/material/glass = 500)
|
||||
build_path = /obj/item/assembly/infra/fat
|
||||
category = list("initial", "Misc")
|
||||
|
||||
/datum/design/small_cup
|
||||
name = "Small Gulp Cup"
|
||||
id = "Small_Gulp"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(/datum/material/plastic=200)
|
||||
build_path = /obj/item/reagent_containers/food/drinks/flask/paper_cup/small
|
||||
category = list("initial","Dinnerware")
|
||||
|
||||
/datum/design/medium_cup
|
||||
name = "Medium Gulp Cup"
|
||||
id = "Medium_Gulp"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(/datum/material/plastic=300)
|
||||
build_path = /obj/item/reagent_containers/food/drinks/flask/paper_cup/medium
|
||||
category = list("initial","Dinnerware")
|
||||
|
||||
/datum/design/small_cup
|
||||
name = "Big Gulp Cup"
|
||||
id = "Big_Gulp"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(/datum/material/plastic=500)
|
||||
build_path = /obj/item/reagent_containers/food/drinks/flask/paper_cup/big
|
||||
category = list("initial","Dinnerware")
|
||||
|
||||
/datum/design/extra_big_cup
|
||||
name = "Extra Big Gulp Cup"
|
||||
id = "Extra_Big_Gulp"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(/datum/material/plastic=600)
|
||||
build_path = /obj/item/reagent_containers/food/drinks/flask/paper_cup/extra_big
|
||||
category = list("initial","Dinnerware")
|
||||
|
||||
/datum/design/super_extra_big_cup
|
||||
name = "Super Extra Big Gulp Cup"
|
||||
id = "Super_Extra_Big_Gulp"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(/datum/material/plastic=1000)
|
||||
build_path = /obj/item/reagent_containers/food/drinks/flask/paper_cup/super_extra_big
|
||||
category = list("initial","Dinnerware")
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
/obj/item/borg/upgrade/feeding_arm
|
||||
name = "food gripper module"
|
||||
desc = "An extra module that allows cyborgs to grab food and drinks, and feed them to people."
|
||||
icon_state = "cyborg_upgrade3"
|
||||
|
||||
/obj/item/borg/upgrade/feeding_arm/action(mob/living/silicon/robot/R, user = usr)
|
||||
. = ..()
|
||||
if(.)
|
||||
var/obj/item/gripper/food/S = new(R.module)
|
||||
R.module.basic_modules += S
|
||||
R.module.add_module(S, FALSE, TRUE)
|
||||
|
||||
/obj/item/borg/upgrade/feeding_arm/deactivate(mob/living/silicon/robot/R, user = usr)
|
||||
. = ..()
|
||||
if (.)
|
||||
var/obj/item/gripper/food/S = locate() in R.module
|
||||
R.module.remove_module(S, TRUE)
|
||||
|
||||
/obj/item/gripper/food
|
||||
name = "food gripper"
|
||||
desc = "A simple grasping tool for interacting with various food and drink related items."
|
||||
item_flags = NOBLUDGEON
|
||||
|
||||
can_hold = list(
|
||||
/obj/item/reagent_containers,
|
||||
)
|
||||
@@ -129,15 +129,6 @@
|
||||
construction_time = 100
|
||||
category = list("Cyborg Upgrade Modules")
|
||||
|
||||
/datum/design/borg_foodgrip
|
||||
name = "Cyborg Upgrade (Food Gripper)"
|
||||
id = "borg_upgrade_foodgrip"
|
||||
build_type = MECHFAB
|
||||
build_path = /obj/item/borg/upgrade/feeding_arm
|
||||
materials = list(/datum/material/iron = 8000, /datum/material/glass = 6000)
|
||||
construction_time = 100
|
||||
category = list("Cyborg Upgrade Modules")
|
||||
|
||||
//todo: make a seperate file for extra borg modules
|
||||
|
||||
/obj/item/borg/upgrade/cookiesynth
|
||||
|
||||
@@ -1,113 +0,0 @@
|
||||
|
||||
//Lists to keep track of:
|
||||
// - Mobs with a sprite size over 100%
|
||||
// - Mobs with the toggle activated
|
||||
// Done to reduce the amount of mobs that need to be taken into account when the toggle is switched and for updating the seen sprite
|
||||
GLOBAL_LIST_EMPTY(enabled_smallsprite)
|
||||
GLOBAL_LIST_EMPTY(see_toggle_smallsprite)
|
||||
|
||||
/mob/
|
||||
///var to know if one has the toggle activated or not
|
||||
var/see_resized_others = FALSE
|
||||
|
||||
/datum/atom_hud/alternate_appearance/basic/showSmall
|
||||
|
||||
//Verb for the associated toggle.
|
||||
//When switched on, add the current mob to the list of mobs that need to see smallsprites and apply the ones already present immediately to the mob's hud.
|
||||
//When switched off, remove from the list and remove smallsprites for the user's hud.
|
||||
/client/verb/toggle_others_giant()
|
||||
set name = "Toggle Others' Giant Sprite"
|
||||
set category = "Preferences.GS13"
|
||||
set desc = "Change display settings to and from displaying others' giant sprites."
|
||||
var/list/remove_from_list = new()
|
||||
|
||||
mob.see_resized_others = !mob.see_resized_others
|
||||
|
||||
if(mob.see_resized_others)
|
||||
GLOB.see_toggle_smallsprite += mob
|
||||
for(var/mob/living/resize_mob in GLOB.enabled_smallsprite)
|
||||
if(QDELETED(resize_mob))
|
||||
remove_from_list += resize_mob
|
||||
continue
|
||||
|
||||
if(resize_mob && resize_mob != mob && resize_mob.alternate_appearances && resize_mob.alternate_appearances["gscode_smallsprite"])
|
||||
var/datum/atom_hud/alternate_appearance/appearance = resize_mob.alternate_appearances["gscode_smallsprite"]
|
||||
appearance.add_to_single_hud(mob, resize_mob)
|
||||
|
||||
GLOB.enabled_smallsprite -= remove_from_list
|
||||
to_chat(src, "Resize others view toggled ON.")
|
||||
return
|
||||
|
||||
GLOB.see_toggle_smallsprite -= mob
|
||||
for(var/mob/living/resize_mob in GLOB.enabled_smallsprite)
|
||||
if(QDELETED(resize_mob))
|
||||
remove_from_list += resize_mob
|
||||
continue
|
||||
|
||||
if(resize_mob && resize_mob.alternate_appearances && resize_mob.alternate_appearances["gscode_smallsprite"])
|
||||
var/datum/atom_hud/alternate_appearance/appearance = resize_mob.alternate_appearances["gscode_smallsprite"]
|
||||
appearance.remove_from_single_hud(mob, resize_mob)
|
||||
|
||||
GLOB.enabled_smallsprite -= remove_from_list
|
||||
to_chat(src, "Resize others view toggled OFF.")
|
||||
|
||||
///Generate the image based on the mob's current icon and apply matrix transformations to adjust its position and angle
|
||||
/mob/living/proc/create_smallsprite()
|
||||
var/image/smallsprite = image(icon=icon, icon_state=icon_state, loc=src, layer=layer, pixel_x=pixel_x, pixel_y=pixel_y)
|
||||
smallsprite.overlays += overlays
|
||||
smallsprite.override = TRUE
|
||||
|
||||
var/matrix/ntransform = matrix(lying, MATRIX_ROTATE)
|
||||
if(lying != 0)
|
||||
ntransform.Translate(0, -get_standard_pixel_y_offset(lying))
|
||||
|
||||
smallsprite.transform = ntransform
|
||||
return smallsprite
|
||||
|
||||
/**
|
||||
* Call to regenerate the sprites and update huds.
|
||||
* * If present, remove the old sprite from the huds and from the mob
|
||||
* * If the size_multiplier is still higher than 1, check if the mob is in the list of smallsprite mobs and add it if not
|
||||
* * add a new sprite by generating it, then go through the list of mobs with smallsprites toggled on and it to their hud
|
||||
* * If the size_multiplier was not higher than one then remove the mob from the list of smallsprite mobs
|
||||
*/
|
||||
/mob/living/proc/regenerate_smallsprite()
|
||||
var/list/remove_from_list = new()
|
||||
|
||||
if(length(alternate_appearances) && alternate_appearances["gscode_smallsprite"])
|
||||
for(var/mob/viewer_mob in GLOB.see_toggle_smallsprite)
|
||||
if(QDELETED(viewer_mob))
|
||||
remove_from_list += viewer_mob
|
||||
continue
|
||||
|
||||
var/datum/atom_hud/alternate_appearance/appearance = alternate_appearances["gscode_smallsprite"]
|
||||
appearance.remove_from_single_hud(viewer_mob, src)
|
||||
remove_alt_appearance("gscode_smallsprite")
|
||||
|
||||
if(size_multiplier > 1)
|
||||
if(!GLOB.enabled_smallsprite[src])
|
||||
GLOB.enabled_smallsprite += src
|
||||
|
||||
add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/showSmall, "gscode_smallsprite", create_smallsprite(), FALSE)
|
||||
for(var/mob/viewer_mob in GLOB.see_toggle_smallsprite)
|
||||
if(QDELETED(viewer_mob))
|
||||
remove_from_list += viewer_mob
|
||||
continue
|
||||
|
||||
if(viewer_mob != src)
|
||||
var/datum/atom_hud/alternate_appearance/appearance = alternate_appearances["gscode_smallsprite"]
|
||||
appearance.add_to_single_hud(viewer_mob, src)
|
||||
return TRUE
|
||||
|
||||
else
|
||||
if(GLOB.enabled_smallsprite[src])
|
||||
GLOB.enabled_smallsprite -= src
|
||||
|
||||
GLOB.see_toggle_smallsprite -= remove_from_list
|
||||
|
||||
return FALSE
|
||||
|
||||
//Called periodically to regenerate the mob's smallsprite
|
||||
/mob/living/carbon/human/BiologicalLife(delta_time, times_fired)
|
||||
. = ..()
|
||||
regenerate_smallsprite()
|
||||
@@ -5,10 +5,8 @@
|
||||
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."
|
||||
icon_state = "chest_implant"
|
||||
implant_color = "#006607"
|
||||
nutrition_amount = 20 //Dunno if this is still needed. Will test.
|
||||
hunger_threshold = NUTRITION_LEVEL_FULL
|
||||
poison_amount = 10
|
||||
message = "" //Why wasn't this ported over? Spam is a pain in the butt. Just shaddup already!
|
||||
|
||||
/obj/item/organ/cyberimp/chest/mobility
|
||||
name = "Mobility Nanite Core"
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
/obj/item/organ/tongue/kitty
|
||||
name = "barbed tongue"
|
||||
desc = "A thin and prickled on top tongue, common among cats"
|
||||
icon_state = "tonguenormal"
|
||||
say_mod = "mrowls"
|
||||
taste_sensitivity = 15 //Tastes like normal
|
||||
maxHealth = 60 //And so has health like normal
|
||||
initial_accents = list(/datum/accent/kitty)
|
||||
@@ -6,15 +6,12 @@
|
||||
product_slogans = "Meow~, time for some cola!"
|
||||
vend_reply = "Meow~ Meow~"
|
||||
products = list(
|
||||
/obj/item/reagent_containers/food/drinks/beer = 10,
|
||||
/obj/item/reagent_containers/food/drinks/soda_cans/cola = 10,
|
||||
/obj/item/reagent_containers/food/drinks/soda_cans/dr_gibb = 10,
|
||||
/obj/item/reagent_containers/food/drinks/soda_cans/starkist = 10,
|
||||
/obj/item/reagent_containers/food/drinks/soda_cans/space_up = 10,
|
||||
/obj/item/reagent_containers/food/drinks/soda_cans/pwr_game = 10,
|
||||
/obj/item/reagent_containers/food/drinks/bigbottle/starkist = 6,
|
||||
/obj/item/reagent_containers/food/drinks/bigbottle/cola = 6,
|
||||
/obj/item/reagent_containers/food/drinks/bigbottle/spaceup = 6,
|
||||
/obj/item/reagent_containers/food/drinks/bigbottle/fizz = 3,
|
||||
)
|
||||
contraband = list(
|
||||
/obj/item/organ/ears/cat = 2,
|
||||
|
||||
@@ -5,27 +5,37 @@
|
||||
icon_state = "mealdor"
|
||||
product_slogans = "Are you hungry? Eat some of my food!;Be sure to eat one of our tasty treats!;Was that your stomach? Go ahead, get some food!"
|
||||
vend_reply = "Enjoy your meal."
|
||||
free = TRUE
|
||||
products = list(
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/fries = 4,
|
||||
/obj/item/reagent_containers/food/snacks/donut = 10,
|
||||
/obj/item/reagent_containers/food/snacks/store/cake/cheese = 10,
|
||||
/obj/item/reagent_containers/food/snacks/store/cake/pumpkinspice = 10,
|
||||
/obj/item/reagent_containers/food/snacks/store/cake/pound_cake = 8,
|
||||
/obj/item/reagent_containers/food/snacks/cakeslice/bsvc = 5,
|
||||
/obj/item/reagent_containers/food/snacks/cakeslice/bscc = 5,
|
||||
// /obj/item/reagent_containers/food/snacks/donut/purefat = 10,
|
||||
/obj/item/reagent_containers/food/snacks/fries = 10,
|
||||
/obj/item/reagent_containers/food/snacks/donut = 20,
|
||||
/obj/item/reagent_containers/food/snacks/candiedapple = 7,
|
||||
/obj/item/reagent_containers/food/snacks/burrito = 8,
|
||||
/obj/item/reagent_containers/food/snacks/pizza/margherita = 4,
|
||||
/obj/item/reagent_containers/food/snacks/butterdog = 5,
|
||||
/obj/item/reagent_containers/food/snacks/burger/plain = 5,
|
||||
/obj/item/reagent_containers/food/snacks/pie/plump_pie = 4,
|
||||
/obj/item/reagent_containers/food/snacks/store/cake/cheese = 2,
|
||||
/obj/item/reagent_containers/food/snacks/store/cake/pumpkinspice = 2,
|
||||
/obj/item/reagent_containers/food/snacks/store/cake/pound_cake = 2,
|
||||
/obj/item/reagent_containers/food/snacks/cakeslice/bsvc = 3,
|
||||
/obj/item/reagent_containers/food/snacks/cakeslice/bscc = 3,
|
||||
/obj/item/reagent_containers/food/snacks/enchiladas = 10,
|
||||
/obj/item/reagent_containers/food/snacks/spaghetti = 20,
|
||||
/obj/item/reagent_containers/food/snacks/kebab/rat = 7,
|
||||
/obj/item/reagent_containers/food/snacks/kebab/rat/double = 6,
|
||||
/obj/item/reagent_containers/food/snacks/meatballspaghetti = 10,
|
||||
/obj/item/reagent_containers/food/drinks/bottle/orangejuice = 10,
|
||||
/obj/item/reagent_containers/food/drinks/bottle/pineapplejuice = 10,
|
||||
/obj/item/reagent_containers/food/drinks/bottle/strawberryjuice = 10,
|
||||
/obj/item/reagent_containers/food/snacks/dough = 10
|
||||
/obj/item/reagent_containers/food/drinks/beer = 10,
|
||||
/obj/item/reagent_containers/food/drinks/soda_cans/cola = 10,
|
||||
/obj/item/reagent_containers/food/snacks/pizza/margherita = 10,
|
||||
/obj/item/reagent_containers/food/snacks/butterdog = 12,
|
||||
/obj/item/reagent_containers/food/snacks/burger/plain = 20,
|
||||
/obj/item/reagent_containers/food/snacks/burger/bearger = 10,
|
||||
/obj/item/reagent_containers/food/snacks/pie/plump_pie = 8,
|
||||
/obj/item/reagent_containers/food/snacks/dough = 20
|
||||
)
|
||||
contraband = list(
|
||||
/obj/item/clothing/mask/fakemoustache = 5,
|
||||
/obj/item/clothing/head/chefhat = 5,
|
||||
/obj/item/reagent_containers/food/snacks/cookie = 10,
|
||||
/obj/item/reagent_containers/food/snacks/salad/fruit = 15,
|
||||
|
||||
@@ -1,53 +0,0 @@
|
||||
|
||||
/obj/belly/release_all_contents(var/include_absorbed = FALSE, var/silent = FALSE)
|
||||
if(iscarbon(owner))
|
||||
var/mob/living/carbon/predator = owner
|
||||
predator.hider_remove(src)
|
||||
. = ..()
|
||||
|
||||
/obj/belly/release_specific_contents(var/atom/movable/M, var/silent = FALSE)
|
||||
if(iscarbon(owner))
|
||||
var/mob/living/carbon/predator = owner
|
||||
var/found = FALSE
|
||||
for(var/prey in contents)
|
||||
if(istype(prey, /mob/living/carbon))
|
||||
found = TRUE
|
||||
if(found)
|
||||
predator.hider_add(src)
|
||||
else
|
||||
predator.hider_remove(src)
|
||||
. = ..()
|
||||
|
||||
/obj/belly/process_belly(var/times_fired,var/wait)
|
||||
////////////////////////// Vore Fatness /////////////////////////////
|
||||
if(iscarbon(owner))
|
||||
var/mob/living/carbon/predator = owner
|
||||
var/found = FALSE
|
||||
for(var/prey in contents)
|
||||
if(istype(prey, /mob/living/carbon))
|
||||
found = TRUE
|
||||
if(found)
|
||||
predator.hider_add(src)
|
||||
else
|
||||
predator.hider_remove(src)
|
||||
///////////////////////////// DM_FATTEN /////////////////////////////
|
||||
if(digest_mode == DM_FATTEN)
|
||||
if(iscarbon(owner))
|
||||
var/mob/living/carbon/predator = owner
|
||||
for(var/mob/living/M in contents)
|
||||
var/mob/living/carbon/prey = M
|
||||
if(iscarbon(prey) && predator.fatness_real)
|
||||
if(predator.fatness_real > 50)
|
||||
prey.adjust_fatness(predator.fatness_real * 0.02, FATTENING_TYPE_FOOD)
|
||||
predator.adjust_fatness(-predator.fatness_real * 0.02, FATTENING_TYPE_FOOD)
|
||||
if(predator.nutrition > NUTRITION_LEVEL_HUNGRY)
|
||||
predator.nutrition -= 3
|
||||
. = ..()
|
||||
|
||||
/obj/belly/proc/fat_hide(var/mob/living/carbon/user)
|
||||
var/preys_fatness = 0
|
||||
for(var/prey in contents)
|
||||
if(iscarbon(prey))
|
||||
var/mob/living/carbon/cprey = prey
|
||||
preys_fatness += cprey.fatness
|
||||
return preys_fatness
|
||||
@@ -1,63 +0,0 @@
|
||||
/obj/item/gun/ballistic/liberator
|
||||
name = "liberator pistol"
|
||||
desc = "Hey, it's better than no gun, right?"
|
||||
icon = 'GainStation13/icons/obj/weapons/gun.dmi' // Sprites were made by Static and Lew
|
||||
icon_state = "liberator"
|
||||
w_class = WEIGHT_CLASS_SMALL // It's not really much of a gun...
|
||||
mag_type = /obj/item/ammo_box/magazine/m10mm/ramrod
|
||||
can_suppress = FALSE
|
||||
/// How many bullets are currently stashed in the gun
|
||||
var/list/stashed_bullets = list()
|
||||
/// What is the max amount of bullets we can stash in this baby?
|
||||
var/max_bullets = 5
|
||||
|
||||
/obj/item/gun/ballistic/liberator/examine(mob/user)
|
||||
. = ..()
|
||||
. += span_notice("Inside of the weapon there is a storage container, containing [length(stashed_bullets)] 10mm bullets.")
|
||||
. += span_notice("Bullets can be removed from the internal storage using <b>Alt+Click</b>.")
|
||||
|
||||
/obj/item/gun/ballistic/liberator/attackby(obj/item/A, mob/user, params)
|
||||
if(!istype(A, /obj/item/ammo_casing/c10mm))
|
||||
return ..()
|
||||
|
||||
if(length(stashed_bullets) >= max_bullets)
|
||||
to_chat(user, span_notice("The storage container in the gun is already full."))
|
||||
return
|
||||
|
||||
|
||||
if(!A.forceMove(src))
|
||||
return
|
||||
|
||||
stashed_bullets += A
|
||||
to_chat(user, span_notice("You slip the [A] inside of the storage chamber."))
|
||||
|
||||
return
|
||||
|
||||
/obj/item/gun/ballistic/liberator/AltClick(mob/user)
|
||||
if(!length(stashed_bullets))
|
||||
to_chat(user, span_notice("The storage container in the gun is already empty."))
|
||||
return
|
||||
|
||||
var/obj/item/removed_bullet = stashed_bullets[1]
|
||||
|
||||
if(!user.put_in_hands(removed_bullet))
|
||||
return
|
||||
|
||||
stashed_bullets.Remove(removed_bullet)
|
||||
to_chat(user, span_notice("You remove the [removed_bullet] from [src]"))
|
||||
|
||||
/obj/item/gun/ballistic/liberator/can_shoot()
|
||||
if(!chambered)
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
|
||||
/obj/item/ammo_box/magazine/m10mm/ramrod // baaaaaaa
|
||||
name = "ram rod"
|
||||
desc = "Allows for bullets to be pushed into guns."
|
||||
icon = 'GainStation13/icons/obj/weapons/gun.dmi'
|
||||
icon_state = "ram_rod"
|
||||
max_ammo = 1
|
||||
multiple_sprites = 1
|
||||
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
/turf/open/floor/mineral/titanium/old
|
||||
name = "tiled floor"
|
||||
icon = 'GainStation13/icons/turf/floors.dmi'
|
||||
icon_state = "titanium_old"
|
||||
floor_tile = /obj/item/stack/tile/mineral/titanium
|
||||
broken_states = list("titanium_dam1_old","titanium_dam2_old","titanium_dam3_old","titanium_dam4_old","titanium_dam5_old")
|
||||
/turf/open/floor/mineral/titanium/old/airless
|
||||
initial_gas_mix = "TEMP=2.7"
|
||||
|
||||
/turf/open/floor/mineral/titanium/old/yellow
|
||||
icon_state = "titanium_yellow_old"
|
||||
/turf/open/floor/mineral/titanium/old/yellow/airless
|
||||
initial_gas_mix = "TEMP=2.7"
|
||||
|
||||
/turf/open/floor/mineral/titanium/old/blue
|
||||
icon_state = "titanium_blue_old"
|
||||
/turf/open/floor/mineral/titanium/old/blue/airless
|
||||
initial_gas_mix = "TEMP=2.7"
|
||||
|
||||
/turf/open/floor/mineral/titanium/old/white
|
||||
icon_state = "titanium_white_old"
|
||||
/turf/open/floor/mineral/titanium/old/white/airless
|
||||
initial_gas_mix = "TEMP=2.7"
|
||||
|
||||
/turf/open/floor/mineral/titanium/old/purple
|
||||
icon_state = "titanium_purple_old"
|
||||
/turf/open/floor/mineral/titanium/purple/airless
|
||||
initial_gas_mix = "TEMP=2.7"
|
||||
@@ -1,21 +0,0 @@
|
||||
/////GS13 - reflavoring of random items into GATO corp, mostly seperated variants so we don't overwrite NT
|
||||
|
||||
/obj/item/storage/fancy/cigarettes/gatito
|
||||
name = "\improper HumoGatitos packet"
|
||||
desc = "Strangely tasty for a cigarette."
|
||||
icon = 'GainStation13/icons/obj/cigarettes.dmi'
|
||||
icon_state = "smokegatitos"
|
||||
spawn_type = /obj/item/clothing/mask/cigarette/gatito
|
||||
|
||||
/obj/item/clothing/mask/cigarette/gatito
|
||||
desc = "A HumoGatitos brand cigarette."
|
||||
|
||||
/obj/item/banner/gato
|
||||
name = "GATO banner"
|
||||
desc = "The banner of GATO, our corporate overlords."
|
||||
icon = 'GainStation13/icons/obj/items_and_weapons.dmi'
|
||||
icon_state = "banner_gato"
|
||||
job_loyalties = list("Command")
|
||||
warcry = "FOR THE INTEREST OF GATO!!"
|
||||
lefthand_file = 'GainStation13/icons/mob/inhands/equipment/banners_lefthand.dmi'
|
||||
righthand_file = 'GainStation13/icons/mob/inhands/equipment/banners_righthand.dmi'
|
||||
@@ -38,21 +38,6 @@
|
||||
/obj/item/reagent_containers/glass/beaker/flatulose
|
||||
list_reagents = list(/datum/reagent/consumable/flatulose = 50)
|
||||
|
||||
/obj/item/reagent_containers/glass/beaker/galbanic
|
||||
list_reagents = list(/datum/reagent/fermi_fat = 50)
|
||||
|
||||
/obj/item/reagent_containers/glass/beaker/macarenic
|
||||
list_reagents = list(/datum/reagent/fermi_slim = 50)
|
||||
|
||||
//evil fucking donut
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/donut/evil_superfat
|
||||
name = "Evil Fuckin' Donut"
|
||||
desc = "Merely looking at this thing makes you feel like you're getting fat..."
|
||||
bitesize = 100 // Always eat it in one bite
|
||||
list_reagents = list(/datum/reagent/fermi_fat = 120, /datum/reagent/consumable/lipoifier = 70, /datum/reagent/consumable/cornoil = 70)
|
||||
tastes = list("imminent immobility" = 10)
|
||||
|
||||
//blueberry gum snack
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/blueberry_gum
|
||||
@@ -186,92 +171,3 @@
|
||||
icon = 'icons/obj/module.dmi'
|
||||
icon_state = "datadisk0"
|
||||
desc = "A dusty disk, desconstruction will be needed to recover data."
|
||||
|
||||
//GS 13 Port - Big gulps in all sizes
|
||||
/obj/item/reagent_containers/food/drinks/flask/paper_cup
|
||||
name = "paper cup"
|
||||
icon = 'GainStation13/icons/obj/paper_cups.dmi'
|
||||
amount_per_transfer_from_this = 10
|
||||
possible_transfer_amounts = list(5, 10, 15, 20, 25, 30, 50)
|
||||
volume = 50
|
||||
reagent_flags = OPENCONTAINER
|
||||
spillable = TRUE
|
||||
container_HP = 5
|
||||
pickup_sound = 'sound/items/handling/cardboardbox_pickup.ogg'
|
||||
drop_sound = 'sound/items/handling/cardboardbox_drop.ogg'
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/flask/paper_cup/small
|
||||
name = "Small Gulp Cup"
|
||||
desc = "A paper cup. It can hold up to 50 units. It's not very strong."
|
||||
icon_state = "small"
|
||||
custom_materials = list(/datum/material/plastic=200)
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/flask/paper_cup/medium
|
||||
name = "Medium Gulp Cup"
|
||||
desc = "It's a paper cup, but you wouldn't call it 'medium' though. It can hold up to 75 units. It's not very strong."
|
||||
icon_state = "medium"
|
||||
volume = 75
|
||||
custom_materials = list(/datum/material/plastic=300)
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/flask/paper_cup/big
|
||||
name = "Big Gulp Cup"
|
||||
desc = "A huge paper cup, a normal person would struggle to drink it all in one sitting. It can hold up to 120 units. It's not very strong."
|
||||
icon_state = "big"
|
||||
volume = 120
|
||||
custom_materials = list(/datum/material/plastic=500)
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/flask/paper_cup/extra_big
|
||||
name = "Extra Big Gulp Cup"
|
||||
desc = "A comically large paper cup. It can hold up to 160 units. It's not very strong."
|
||||
icon_state = "extra_big"
|
||||
volume = 160
|
||||
custom_materials = list(/datum/material/plastic=600)
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/flask/paper_cup/super_extra_big
|
||||
name = "Super Extra Big Gulp Cup"
|
||||
desc = "Its called a paper 'cup', but it looks more like an oversized bucket to you. It can hold up to 250 units. It's not very strong."
|
||||
icon_state = "super_extra_big"
|
||||
volume = 250
|
||||
custom_materials = list(/datum/material/plastic=1000)
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
|
||||
|
||||
//weapon prefabs
|
||||
|
||||
/obj/item/melee/curator_whip/fattening
|
||||
name = "calorite-lined whip"
|
||||
desc = "The whip seems to glisten with an orange gleam inbetween its threads."
|
||||
damtype = "fat"
|
||||
attack_verb = list("fattened")
|
||||
force = 40
|
||||
|
||||
/obj/item/melee/curator_whip/permafattening
|
||||
name = "galbanic whip"
|
||||
desc = "How can a whip even be infused galbanic? No one knows."
|
||||
damtype = "perma_fat"
|
||||
attack_verb = list("fattened")
|
||||
force = 20
|
||||
|
||||
/obj/item/gavelhammer/fattening
|
||||
desc = "Some madman managed to create a weapon out of calorite... Luckily, it has a rubber handle for you to wield."
|
||||
name = "Calorite Hammer"
|
||||
icon = 'icons/obj/items_and_weapons.dmi'
|
||||
icon_state = "toyhammer"
|
||||
damtype = "fat"
|
||||
throwforce = 40
|
||||
force = 60
|
||||
attack_verb = list("fattened")
|
||||
|
||||
/obj/item/gavelhammer/permafattening
|
||||
desc = "You may ask yourself - how did someone make a hammer out of a chemical? The answer is clear: no one knows."
|
||||
name = "Permafat Hammer"
|
||||
icon = 'icons/obj/items_and_weapons.dmi'
|
||||
icon_state = "toyhammer"
|
||||
damtype = "perma_fat"
|
||||
throwforce = 10
|
||||
force = 20
|
||||
attack_verb = list("fattened")
|
||||
|
||||
@@ -1,165 +0,0 @@
|
||||
/////////////////////
|
||||
// Tile reskinning //
|
||||
/////////////////////
|
||||
// Q: What is this?
|
||||
// A: A simple function to allow you to change what tiles you place with a stack of tiles.
|
||||
// Q: Why do it this way?
|
||||
// A: This allows players more freedom to do beautiful-looking builds. Having five types of titanium tile would be clunky as heck.
|
||||
// Q: Great! Can I use this for all floors?
|
||||
// A: Unfortunately, this does not work on subtypes of plasteel and instead we must change the icon_state of these turfs instead, as the icon_regular_floor var that "saves" what type of floor a plasteel subtype turf was so once repaired...
|
||||
// ... it'll go back to the floor it was instead of grey (medical floors turn white even after crowbaring the tile and putting it back). This stops changing turf_type from working.
|
||||
|
||||
/obj/item/stack/tile/mineral/titanium/attack_self(mob/user)
|
||||
var/static/list/choices = list(
|
||||
"Titanium" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_shuttle"),
|
||||
"Yellow Titanium" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_shuttle_yellow"),
|
||||
"Blue Titanium" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_shuttle_blue"),
|
||||
"White Titanium" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_shuttle_white"),
|
||||
"Purple Titanium" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_shuttle_purple"),
|
||||
"Titanium Tile" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_shuttle_old"),
|
||||
"Yellow Titanium Tile" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_shuttle_old_yellow"),
|
||||
"Blue Titanium Tile" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_shuttle_old_blue"),
|
||||
"White Titanium Tile" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_shuttle_old_white"),
|
||||
"Purple Titanium Tile" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_shuttle_old_purple"),
|
||||
)
|
||||
var/choice = show_radial_menu(user, src, choices, radius = 48, require_near = TRUE)
|
||||
switch(choice)
|
||||
if("Titanium")
|
||||
turf_type = /turf/open/floor/mineral/titanium
|
||||
icon_state = "tile_shuttle"
|
||||
desc = "Sleek titanium tiles."
|
||||
if("Yellow Titanium")
|
||||
turf_type = /turf/open/floor/mineral/titanium/yellow
|
||||
icon_state = "tile_shuttle_yellow"
|
||||
desc = "Sleek yellow titanium tiles."
|
||||
if("Blue Titanium")
|
||||
turf_type = /turf/open/floor/mineral/titanium/blue
|
||||
icon_state = "tile_shuttle_blue"
|
||||
desc = "Sleek blue titanium tiles."
|
||||
if("White Titanium")
|
||||
turf_type = /turf/open/floor/mineral/titanium/white
|
||||
icon_state = "tile_shuttle_white"
|
||||
desc = "Sleek white titanium tiles."
|
||||
if("Purple Titanium")
|
||||
turf_type = /turf/open/floor/mineral/titanium/purple
|
||||
icon_state = "tile_shuttle_purple"
|
||||
desc = "Sleek purple titanium tiles."
|
||||
if("Titanium Tile")
|
||||
turf_type = /turf/open/floor/mineral/titanium/old
|
||||
icon_state = "tile_shuttle_old"
|
||||
desc = "Titanium floor tiles."
|
||||
if("Yellow Titanium Tile")
|
||||
turf_type = /turf/open/floor/mineral/titanium/old/yellow
|
||||
icon_state = "tile_shuttle_old_yellow"
|
||||
desc = "Yellow titanium floor tiles."
|
||||
if("Blue Titanium Tile")
|
||||
turf_type = /turf/open/floor/mineral/titanium/old/blue
|
||||
icon_state = "tile_shuttle_old_blue"
|
||||
desc = "Blue titanium floor tiles."
|
||||
if("White Titanium Tile")
|
||||
turf_type = /turf/open/floor/mineral/titanium/old/white
|
||||
icon_state = "tile_shuttle_old_white"
|
||||
desc = "White titanium floor tiles."
|
||||
if("Purple Titanium Tile")
|
||||
turf_type = /turf/open/floor/mineral/titanium/old/purple
|
||||
icon_state = "tile_shuttle_old_purple"
|
||||
desc = "Purple titanium floor tiles."
|
||||
|
||||
/obj/item/stack/tile/plasteel
|
||||
desc = "Metal tiles that can be placed on top of plating. Press Z or use these to change tiles."
|
||||
icon = 'GainStation13/icons/obj/tiles.dmi'
|
||||
var/tile_reskin_mode
|
||||
tile_reskin_mode = "plasteel"
|
||||
|
||||
/obj/item/stack/tile/plasteel/attack_self(mob/user)
|
||||
var/static/list/choices = list(
|
||||
"Plasteel" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_plasteel"),
|
||||
"White Plasteel" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_white"),
|
||||
"Dark Plasteel" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_dark"),
|
||||
"Chapel Flooring" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_chapel"),
|
||||
"Shower" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_shower"),
|
||||
"Freezer" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_freezer"),
|
||||
"Kitchen" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_kitchen"),
|
||||
"Grimy" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_grimy"),
|
||||
"Solar Panel" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_solar"),
|
||||
)
|
||||
var/choice = show_radial_menu(user, src, choices, radius = 48, require_near = TRUE)
|
||||
switch(choice)
|
||||
if("Plasteel")
|
||||
turf_type = /turf/open/floor/plasteel
|
||||
icon_state = "tile_plasteel"
|
||||
desc = "Metal floor tiles."
|
||||
tile_reskin_mode = "plasteel"
|
||||
if("White Plasteel")
|
||||
turf_type = /turf/open/floor/plasteel/white
|
||||
icon_state = "tile_white"
|
||||
desc = "White metal floor tiles."
|
||||
tile_reskin_mode = "white plasteel"
|
||||
if("Dark Plasteel")
|
||||
turf_type = /turf/open/floor/plasteel/dark
|
||||
icon_state = "tile_dark"
|
||||
desc = "Dark metal floor tiles."
|
||||
tile_reskin_mode = "dark plasteel"
|
||||
if("Chapel Flooring")
|
||||
turf_type = /turf/open/floor/plasteel/chapel
|
||||
icon_state = "tile_chapel"
|
||||
desc = "Those very dark floor tiles you find in the chapel a lot."
|
||||
tile_reskin_mode = "chapel"
|
||||
if("Shower")
|
||||
turf_type = /turf/open/floor/plasteel/showroomfloor
|
||||
icon_state = "tile_shower"
|
||||
desc = "Tiles for showers, bathrooms and wetrooms."
|
||||
tile_reskin_mode = "shower"
|
||||
if("Freezer")
|
||||
turf_type = /turf/open/floor/plasteel/freezer
|
||||
icon_state = "tile_freezer"
|
||||
desc = "High-grip flooring for walk-in freezers and chillers."
|
||||
tile_reskin_mode = "freezer"
|
||||
if("Kitchen")
|
||||
turf_type = /turf/open/floor/plasteel/cafeteria
|
||||
icon_state = "tile_kitchen"
|
||||
desc = "Chequered pattern plasteel tiles."
|
||||
tile_reskin_mode = "kitchen"
|
||||
if("Grimy")
|
||||
turf_type = /turf/open/floor/plasteel/grimy
|
||||
icon_state = "tile_grimy"
|
||||
desc = "I'm sure it'll look nice somewhere?"
|
||||
tile_reskin_mode = "grimy"
|
||||
if("Solar Panel")
|
||||
turf_type = /turf/open/floor/plasteel/airless/solarpanel
|
||||
icon_state = "tile_solar"
|
||||
desc = "Flooring usually placed below solar panels. Using this indoors is an intergalactic fashion crime."
|
||||
tile_reskin_mode = "solar"
|
||||
|
||||
/turf/open/floor/plasteel/attackby(obj/item/reskinstack, mob/user, params)
|
||||
if(istype(reskinstack, /obj/item/stack/tile/plasteel))
|
||||
var/obj/item/stack/tile/plasteel/hitfloor = reskinstack
|
||||
switch(hitfloor.tile_reskin_mode)
|
||||
if("plasteel")
|
||||
icon_state = "floor"
|
||||
icon_regular_floor = "floor"
|
||||
if("white plasteel")
|
||||
icon_state = "white"
|
||||
icon_regular_floor = "white"
|
||||
if("dark plasteel")
|
||||
icon_state = "darkfull"
|
||||
icon_regular_floor = "darkfull"
|
||||
if("chapel")
|
||||
icon_state = "chapel_alt"
|
||||
icon_regular_floor = "chapel_alt"
|
||||
if("shower")
|
||||
icon_state = "showroomfloor"
|
||||
icon_regular_floor = "showroomfloor"
|
||||
if("freezer")
|
||||
icon_state = "freezerfloor"
|
||||
icon_regular_floor = "freezerfloor"
|
||||
if("kitchen")
|
||||
icon_state = "cafeteria"
|
||||
icon_regular_floor = "cafeteria"
|
||||
if("grimy")
|
||||
icon_state = "grimy"
|
||||
icon_regular_floor = "grimy"
|
||||
if("solar")
|
||||
icon_state = "solarpanel"
|
||||
icon_regular_floor = "solarpanel"
|
||||
else return
|
||||
@@ -56,35 +56,5 @@
|
||||
icon = 'hyperstation/icons/obj/objects.dmi'
|
||||
icon_state = "shelf"
|
||||
|
||||
/obj/structure/chair/beanbag
|
||||
name = "beanbag chair"
|
||||
desc = "A comfy beanbag chair. Almost as soft as your fat ass."
|
||||
icon = 'GainStation13/icons/obj/chairs.dmi'
|
||||
icon_state = "beanbag"
|
||||
color = "#ffffff"
|
||||
anchored = FALSE
|
||||
buildstacktype = /obj/item/stack/sheet/cloth
|
||||
buildstackamount = 5
|
||||
item_chair = null
|
||||
|
||||
/obj/structure/chair/beanbag/gato
|
||||
name = "GATO beanbag chair"
|
||||
desc = "A comfy beanbag chair. This one seems to a super duper cutesy GATO mascot."
|
||||
icon_state = "beanbag_gato"
|
||||
|
||||
|
||||
//beanbag chair colors
|
||||
/obj/structure/chair/beanbag/red
|
||||
color = "#8b2e2e"
|
||||
|
||||
/obj/structure/chair/beanbag/blue
|
||||
color = "#345bbc"
|
||||
|
||||
/obj/structure/chair/beanbag/green
|
||||
color = "#76da4b"
|
||||
|
||||
/obj/structure/chair/beanbag/purple
|
||||
color = "#a83acf"
|
||||
|
||||
/obj/structure/chair/beanbag/black
|
||||
color = "#404040"
|
||||
/obj/structure/chair/comfy/blue
|
||||
color = rgb(50, 64, 255)
|
||||
|
||||
@@ -1,35 +0,0 @@
|
||||
/obj/structure/table/plaswood
|
||||
name = "plaswood table"
|
||||
desc = "An strong and grey wooden table."
|
||||
icon = 'GainStation13/icons/obj/smooth_structures/plaswoodpoker_table.dmi'
|
||||
icon_state = "plaswood_table"
|
||||
resistance_flags = FLAMMABLE
|
||||
max_integrity = 200
|
||||
integrity_failure = 50
|
||||
armor = list("melee" = 10, "bullet" = 30, "laser" = 30, "energy" = 100, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 70)
|
||||
canSmoothWith = list(/obj/structure/table/plaswood,
|
||||
/obj/structure/table/plaswood/plaswoodpoker)
|
||||
|
||||
/obj/structure/table/plaswood/plaswoodpoker
|
||||
name = "gambling table"
|
||||
desc = "A seedy table for seedy dealings in seedy places."
|
||||
icon = 'GainStation13/icons/obj/smooth_structures/plaswoodpoker_table.dmi'
|
||||
icon_state = "plaswoodpoker_table"
|
||||
buildstack = /obj/item/stack/tile/carpet
|
||||
|
||||
/obj/structure/table/gmushroom
|
||||
name = "Mushroom table"
|
||||
desc = "A pinkish table. And is fireproof!"
|
||||
icon = 'GainStation13/icons/obj/smooth_structures/gmushroom_table.dmi'
|
||||
icon_state = "gmushroom_table"
|
||||
resistance_flags = FIRE_PROOF
|
||||
max_integrity = 70
|
||||
canSmoothWith = list(/obj/structure/table/gmushroom,
|
||||
/obj/structure/table/gmushroom/gmushroompoker)
|
||||
|
||||
/obj/structure/table/gmushroom/gmushroompoker
|
||||
name = "gambling table"
|
||||
desc = "A seedy table for seedy dealings in seedy places."
|
||||
icon = 'GainStation13/icons/obj/smooth_structures/gmushroompoker_table.dmi'
|
||||
icon_state = "gmushroompoker_table"
|
||||
buildstack = /obj/item/stack/tile/carpet
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 19 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 595 B |
Binary file not shown.
|
Before Width: | Height: | Size: 38 KiB |
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user