596 Commits

Author SHA1 Message Date
evilew 2d876eefbb blob nerf
the blob now requires 800 tiles to win, instead of 400
2025-02-12 21:46:36 +01:00
evilew b869b17eae Merge pull request #86 from Phantastic-Swan/master
Fixes mice being able to bite wires through catwalks
2025-02-12 18:35:09 +01:00
evilew f01382a1bd Merge pull request #85 from shikikanx/IPCSynthfix
Organ fixes for IPCs and Synths to prevent decay.
2025-02-12 18:34:54 +01:00
AbsFree 89c3439dee but not if the catwalk is open :) 2025-02-12 17:59:04 +01:00
AbsFree 1d2bb0bfa1 mice cannot bite through catwalks anymore 2025-02-12 17:40:59 +01:00
shikikanx 9115bb7715 Tests seem to work, I'll try it with the brain next. 2025-02-10 14:33:53 +00:00
shikikanx 2cae2f237a Adding the synthetic flag to IPC organs. 2025-02-10 13:01:50 +00:00
evilew bc979b5aae Merge pull request #83 from evilew/tweaks
small tweaks
2025-02-07 20:49:41 +01:00
evilew 355d9232c2 Merge pull request #82 from Alphas00/master
Berries juicing fix
2025-02-05 20:41:09 +01:00
evilew 5c5781ac78 Merge pull request #80 from AlManiak/feature/bluespace_collar
Feature/bluespace_collar
2025-02-05 20:40:59 +01:00
Alphas00 a57e5a12a4 Berries juicing fix
Added an additional check to code for juicing people to avoid some null cases
2025-02-05 16:12:51 +01:00
Metis e8e0068531 Update borghypo.dm 2025-02-05 01:17:30 -05:00
sheepishgoat aad13926bf Merge pull request #81 from ReoDaProtovali/Industrial-Feeding-Tube-Fixes
Fixes a potential issue with feeding tubes
2025-02-03 18:22:32 -05:00
ReoDaProtovali 9efe8c2791 Small Fixes 2025-02-03 17:00:26 -06:00
AlManiak 15801a9a82 Merge branch 'feature/bluespace_collar' of https://github.com/AlManiak/GS13-Citadel into feature/bluespace_collar 2025-02-02 19:58:37 +01:00
AlManiak 70b495d3bb More specific description for food 2025-02-02 19:58:33 +01:00
Metis 844ff69bf6 Update fatness.dm 2025-02-02 12:13:04 -05:00
evilew 0386dec84d adding sharky plush 2025-02-02 03:31:05 +01:00
evilew 8ed2b7e2f1 fixing some masks and eyepatches
- fixed white eyepatch
- fixed fattening mask's missing sprite
- added labcoat to loadout
2025-02-01 19:55:20 +01:00
evilew ad5cac97f4 removing a vendor from dj station
it was annoying, getting on radio
2025-02-01 19:19:08 +01:00
evilew f501de020e tweaks
- removed obj damage from magehands
- added xenoarch to areas excluded from size uncap
- fixed a typo in a lore note
- brought back xeno queen sprites that are more in tune with Geiger's designs
2025-02-01 18:03:47 +01:00
AlManiak dbe071f91d Merge branch 'evilew:master' into feature/bluespace_collar 2025-02-01 00:46:12 +01:00
AlManiak 00fb0f0fb2 Added most consuming procs for the collar
Added research and design for collar
2025-02-01 00:44:39 +01:00
Metis 0e5dde5d84 Credit 2025-01-31 12:48:04 -05:00
evilew 1060250ee5 Merge pull request #79 from evilew/liberator-gun
Liberator Gun
2025-01-31 14:25:11 +01:00
AlManiak 6755a031e4 Initial commit
collar works with food and drinks
2025-01-31 12:15:56 +01:00
sheepishgoat e55521a68a Merge pull request #78 from brightkitsune/operation-porting
Porting over some items and changes from the old code.
2025-01-31 03:31:17 -05:00
Metis 31544e0b9f liberator 2025-01-31 03:29:53 -05:00
brightkitsune 46cfaff349 Adding tag as requested 2025-01-30 19:41:02 +00:00
evilew d421bb2059 Merge pull request #77 from Alphas00/master
Toggle others' giant sprite Functions
2025-01-30 17:53:55 +01:00
brightkitsune 988e9d6417 Adding the latex clothes back in. 2025-01-29 01:04:05 +00:00
brightkitsune 3cd7e4c5d4 Merge branch 'evilew:master' into operation-porting 2025-01-29 01:02:55 +00:00
Alphas00 3a69e2597c Variable names, QDEL remove from list, misc fixes 2025-01-28 23:28:34 +01:00
Alphas00 557a3b3ef3 Update GainStation13/code/modules/resize/height_limits.dm
Co-authored-by: sheepishgoat <100518708+sheepishgoat@users.noreply.github.com>
2025-01-28 22:42:58 +01:00
Alphas00 2cf8c9e8e6 Update GainStation13/code/modules/resize/height_limits.dm
Co-authored-by: sheepishgoat <100518708+sheepishgoat@users.noreply.github.com>
2025-01-28 22:35:11 +01:00
Alphas00 e932583ba0 Update GainStation13/code/modules/resize/height_limits.dm
Co-authored-by: sheepishgoat <100518708+sheepishgoat@users.noreply.github.com>
2025-01-28 22:32:32 +01:00
Alphas00 ab0de5d920 Update GainStation13/code/modules/resize/height_limits.dm
Co-authored-by: sheepishgoat <100518708+sheepishgoat@users.noreply.github.com>
2025-01-28 22:32:15 +01:00
Alphas00 be783e52f5 Update GainStation13/code/modules/resize/height_limits.dm
Co-authored-by: sheepishgoat <100518708+sheepishgoat@users.noreply.github.com>
2025-01-28 22:32:06 +01:00
Alphas00 2a3c07db2e Arousal menu option & Preference subcategory 2025-01-28 08:38:27 +01:00
Alphas00 0a0fa49403 Comments, toggle chat notification 2025-01-27 17:32:57 +01:00
Alphas00 1225e366e8 Lists, sprite updates, rotation and translate 2025-01-27 16:25:52 +01:00
Alphas00 695db655d5 Verb Toggle 2025-01-26 23:35:27 +01:00
Alphas00 2070a6e5c7 Toggle Button working 2025-01-26 22:00:27 +01:00
Alphas00 9ee85193a0 Universal Height Toggle 2025-01-26 19:55:58 +01:00
evilew 410f86be72 Merge pull request #76 from evilew/tweaks
gateway related stuff
2025-01-25 20:56:11 +01:00
evilew 60714ae1ec more map notes and prefabs 2025-01-25 20:55:06 +01:00
evilew b9877bdcf6 away mission areas 2025-01-25 13:35:30 +01:00
evilew 49363bdf6b fixing megaseed vendor error 2025-01-25 12:49:59 +01:00
evilew 53ffc3c697 deer tail, snout and spade tail 2025-01-25 12:38:54 +01:00
evilew 4a12dd7967 Merge pull request #75 from Alphas00/master
Adiphazard & Permafat fix
2025-01-25 12:24:46 +01:00
evilew 14ca5c17b0 Merge pull request #74 from caballs/beebalmbranch
Added bee-balm to the seed vendors once hacked.
2025-01-25 12:24:32 +01:00
Alphas00 4971a2e404 Adiphazard & Permafat fix
Adipohazard no longer tries to fatten up non-carbon pulled or pulled by objects
Permafat no longer tries to save without a client
2025-01-25 08:21:34 +01:00
Caballs 05b61a7e34 Added bee-balm to the seed vendors once hacked. 2025-01-24 22:44:20 -05:00
evilew 705e92e0c7 Merge pull request #73 from SeepingVisage/exoskeleton-fix
adds sprites to the invisible exoskeleton (inventory only)
2025-01-25 01:29:56 +01:00
brightkitsune ea97d2a789 So that's why it wasn't compiling. Missing Vars. 2025-01-24 18:05:36 +00:00
brightkitsune 1a73b7e405 Porting over minor changes in the turpo nutriment pump. 2025-01-24 17:53:28 +00:00
evilew 6be749e919 fixed a cake sprite, added gateway computers
- added gateway computers to all stations besides Meta
- fixed blackberry cake sprites to replace them with better ones
2025-01-24 16:16:53 +01:00
SeepingVisage ba7722db9f adds sprites to the invisible exoskeleton (inventory only) 2025-01-22 21:16:39 -05:00
evilew b2c7f53a8b gato badge ckey add 2025-01-22 19:36:51 +01:00
evilew 6d228c1838 Merge pull request #72 from Alphas00/master
Roundstart exoskeleton locked variant
2025-01-22 18:46:17 +01:00
Alphas00 dbb761fbf6 Roundstart exoskeleton locked variant
Added a locked variant of the exoskeleton MODsuit that replaces the version you can pick for starting loadouts. This version's modules are unremovable. Customizable exoskeletons can still be created by roboticists.
2025-01-22 11:24:52 +01:00
evilew 8a01669706 Merge pull request #71 from Alphas00/master
Breasts size fix
2025-01-21 18:30:23 +01:00
Alphas00 cd5c83f3d6 Breasts size fix
Fixed breast size not increasing beyond huge
2025-01-21 18:29:30 +01:00
evilew 26e7d5f911 spacelaw map fix
removing old spacelaw books from box
2025-01-20 23:54:53 +01:00
evilew bff8f52225 magehand fix
it bled...
2025-01-20 18:00:36 +01:00
evilew 1319069168 magehand fix
- fixed magehands dying to environment
2025-01-20 13:00:51 +01:00
evilew 660fcb970e Merge pull request #70 from evilew/tweaking
mage hand, map tweaks, fatty loot
2025-01-19 21:42:33 +01:00
evilew 5c149e7084 detailing out mage hand
- adding fat mage hands to maps
- finishing work on fattening mage hand
2025-01-19 21:31:57 +01:00
evilew 50d40ed710 mage hand and loot
- added a mage hand hostile mob: it will poke you to fatten you up
- added rewards to some of the calorite ruins
2025-01-19 21:10:32 +01:00
evilew 7915082aae map tweaks
- detailed boxstation a bit more (decals, better captain room, better service room)
- detailed other stations a bit too, mostly just details
- fixed bee plush
- added prefabs for some kink liquids
2025-01-19 20:00:09 +01:00
evilew 42ffbdc38a Merge pull request #69 from PatrickLeeJohnson/food-fix
Food fix
2025-01-19 15:12:00 +01:00
PatrickLeeJohnson aa4fbf6aac moar fixes 2025-01-19 16:50:45 +03:00
PatrickLeeJohnson a02ee487dd hope this works 2025-01-19 16:31:27 +03:00
PatrickLeeJohnson 130ca0c49c Update food_righthand.dmi 2025-01-19 16:14:42 +03:00
evilew b5374fd109 box fix (shooting range)
added the magnetic thingy in box shooting range
2025-01-19 02:21:43 +01:00
evilew 413a04c0e7 more mapping tweaks
- rotated some airlocks on kilo
- small tweaks to near-station ruins (just more details)
- small details in xenoarch station
2025-01-17 00:14:41 +01:00
evilew bb471a7db5 construction area down at xenoarch
also there was a catwalk floating around in Kilo space, removed it
2025-01-16 21:57:24 +01:00
evilew 669f90554d Merge pull request #68 from Alphas00/master
Weak Legs delay fix
2025-01-16 21:47:51 +01:00
evilew 1717add7fe Merge pull request #67 from SeepingVisage/burpslur
burpslur changes
2025-01-16 21:47:14 +01:00
Alphas00 c7760beb8e Weak Legs delay fix
Fixed an issue with fatness speed delay modifiers that would cause Weak Legs' max delay to speed to not apply
2025-01-15 09:09:52 +01:00
evilew 8032269d3d TG law to GT law
- removed TG space law books, replaced them with GATO ones (on maps)
2025-01-15 06:46:22 +01:00
evilew 0e3df050a0 Revert "replacing TG space law with GATO ones"
This reverts commit 5c73eb0e01.
2025-01-15 06:31:32 +01:00
evilew 5c73eb0e01 replacing TG space law with GATO ones
- self explanatory - just our versions of space law
2025-01-15 06:29:48 +01:00
evilew 183fad6af6 sec heirlooms tweaks
- changed sec heirlooms to use gato space law, not tg space law
2025-01-15 06:29:10 +01:00
SeepingVisage e31996bd54 burpslur changes
made it properly bold and also removed extra spaces before and after the belches so that it would fit into text better
2025-01-14 22:03:19 -05:00
evilew cc9fd1e686 Merge pull request #66 from SeepingVisage/belchfix
Belchfix
2025-01-13 17:26:46 +01:00
SeepingVisage 7497987677 Merge branch 'evilew:master' into belchfix 2025-01-12 22:00:43 -05:00
SeepingVisage 57ce44d9f6 fixing the belch and fart and burp
fixes playsound_prefed which was previously broken. also adds burping and farting prefs to the menu. awesome
2025-01-12 21:59:59 -05:00
evilew 214bcf46b0 Merge pull request #64 from SeepingVisage/kitty-accent
Kitty accent
2025-01-12 14:26:27 +01:00
evilew 258791d4fe Merge pull request #65 from SeepingVisage/burpslur
readds burpslur
2025-01-12 14:23:36 +01:00
SeepingVisage d9e4bee18f fixing gs13 edit labeling 2025-01-12 01:31:35 -05:00
SeepingVisage 732c73b0aa readds burpslur
burpslur. get it from fizulphite
2025-01-11 22:55:03 -05:00
SeepingVisage 088d823be2 adds kitty tongue to customization
now can select kitty tongue from roundstart
2025-01-11 21:59:30 -05:00
evilew b196b76c4f Merge pull request #63 from MrMateusz/master
added cyclopbig and carp eyes
2025-01-11 16:50:58 +01:00
MrMateusz f7bd8c2ea5 added cyclopbig and carp eyes
added a larger cyclops eye and a variant of double eyes that look like space carp's eyes, both are colourable via heterochromia option
2025-01-11 16:07:56 +01:00
evilew b14f3fcb71 adding girder mode to RCDs 2025-01-10 19:43:51 +01:00
SeepingVisage 91e177e636 re-adds the kitty purr tongue from oldcode
currently just has this as the default tongue for felinids. i have to figure out how to make it selectable from roundstart
2025-01-09 23:57:38 -05:00
evilew f6b0d15cdc Merge pull request #62 from PatrickLeeJohnson/gator-snout-fix
Gator snout fix
2025-01-08 19:25:19 +01:00
evilew 2dffc08a98 Merge pull request #61 from PatrickLeeJohnson/master
Milkshakes got their sprites back
2025-01-08 19:24:03 +01:00
PatrickLeeJohnson 056cf4ded1 Update .gitignore
what the fuck
2025-01-08 21:10:18 +03:00
PatrickLeeJohnson 01de2e202c Update .gitignore
why did I change this in the first place
2025-01-08 21:09:43 +03:00
PatrickLeeJohnson 0b1534bf5b ANOTHER fix 2025-01-08 21:06:55 +03:00
PatrickLeeJohnson 3f3a884e50 gator snout fix 2025-01-08 21:01:10 +03:00
PatrickLeeJohnson 21de5d6df1 Update .gitignore 2025-01-08 20:36:54 +03:00
PatrickLeeJohnson 367447c96f milkshakes and stuff 2025-01-08 20:13:29 +03:00
evilew 9ffee1df7f Update MetaStation.dmm 2025-01-08 18:08:10 +01:00
evilew 8d58b73747 Merge pull request #60 from grimmblin/Meta-Changes-v3
MetaStation GATO Overhaul V3.1.1
2025-01-07 22:01:47 +01:00
grimmbly 8d7596f28b MetaStation GATO Overhaul V3.1.1 2025-01-07 15:48:20 -05:00
PatrickLeeJohnson f9f10c2746 Merge pull request #1 from evilew/master
pulling shit up to date
2025-01-07 23:06:29 +03:00
evilew 293d3633bf Merge pull request #59 from Alphas00/master
Naga Tails coiling
2025-01-07 18:11:11 +01:00
Alphas00 fbc4034f6a Naga Tails coiling
Added the ability to coil people for other naga tails
2025-01-07 17:59:53 +01:00
evilew be8f70da76 test commit 2025-01-07 16:02:43 +01:00
evilew 04cf0afd88 made some snouts lighter 2025-01-07 14:55:38 +01:00
evilew a1409cb99a Merge pull request #58 from grimmblin/Meta-Changes-v3
MetaStation GATO Overhaul V3.1
2025-01-07 13:01:56 +01:00
evilew edfbd35408 fixing a broken jacket 2025-01-07 00:21:55 +01:00
grimmbly 222fa45eec Update MetaStation.dmm 2025-01-06 16:19:01 -05:00
grimmbly b6a79371d2 MetaStation GATO Overhaul V3.1
Patch for MetaStation v3.1 (1/6/2025)
2025-01-06 14:57:53 -05:00
evilew 715bcada92 Update __donator.dm 2025-01-06 20:53:30 +01:00
evilew 40e601679a Update __donator.dm 2025-01-06 20:17:19 +01:00
evilew 9dc3820e37 Merge pull request #57 from Alphas00/master
Grey suit modular sprite fixes
2025-01-06 02:20:50 +01:00
evilew 7966f0ed98 cost nerf
- modular greysuit now costs 0 in the loadout
- fatty exoskeleton costs 3
2025-01-06 02:18:37 +01:00
evilew 582c5950b5 disabling greytide 2025-01-05 23:45:48 +01:00
Alphas00 c9713cd694 Grey suit modular sprite fixes
Grey suit modular sprite fixed by @scoo121133ooop
2025-01-05 21:30:01 +01:00
evilew b7d7319b9d Merge branch 'master' of https://github.com/evilew/GS13-Citadel 2025-01-05 00:03:36 +01:00
evilew 9bdc8fd36f small mapping tweaks
- honestly just super mega tiny fixes like adding a holofan or replacing law books
2025-01-05 00:03:34 +01:00
evilew 5dc0d089ab Merge pull request #55 from grimmblin/Meta-Changes-v3
MetaStation GATO Overhaul V3
2025-01-03 22:02:38 +01:00
grimmbly 50b3d9d375 Update MetaStation.dmm 2025-01-03 16:02:05 -05:00
grimmbly ddbca7b175 MetaStation GATO Overhaul V3
This time I prioritized the atmospherics pipes concerning engineering, the AI SAT, the rest of science, and some of the southern halls. As well as touching up some, but not all, areas of science including Toxins/Ordinance. I aim to touch the main R&D lab, the RD's office, and robotics in a future patch.
2025-01-03 15:42:35 -05:00
evilew d119b10c9f Merge pull request #54 from grimmblin/MetaChangesv2
MetaStation Service Fixes
2025-01-02 12:27:47 +01:00
grimmbly f35ba79c09 MetaStation Service Fixes
blehhh
2025-01-02 04:34:08 -05:00
evilew 32fbd91203 Merge pull request #53 from grimmblin/MetaStationChanges
Service/Science Remodeling
2025-01-01 22:02:24 +01:00
grimmbly 579bed5895 Service/Science Remodeling
Reworked several parts of service, science, and some minor areas
2025-01-01 15:02:24 -05:00
evilew d7300954a2 meta update
- fixed some missing walls and girders
2024-12-29 15:02:33 +01:00
evilew bbe86c63c4 adding in goat ears 2024-12-29 00:47:13 +01:00
evilew 8a33d6004f added catwalks to maints
- added catwalks to all active map maints, which allow see through of pipes, cables etc underneath them while preventing mice from biting them
- the design philosophy of this is: catwalks should be placed over longer annoying stretches of maints to cover wires, but they're usually exposed near maint entrances or airlocks
2024-12-29 00:28:13 +01:00
evilew a767e39505 removed the racist space ruin
tg artifact ig lol
2024-12-28 23:40:52 +01:00
evilew f89210450f upgraded construction shuttle a bit
- it seems fair for it to have a bunch of decent starter tools, so added them back in
- also added some windows to it
2024-12-28 14:54:13 +01:00
evilew 0bdbc5196a Merge pull request #52 from Alphas00/master
Mobility exoskeleton & modules, max fat genital sizes, Adipohazard
2024-12-28 13:37:35 +01:00
evilew 49c4f19b06 chocolate slimes are devourable
also removed some unused vars in slugcat code
2024-12-28 11:56:02 +01:00
Alphas00 628c5db072 Adipohazard Mutation
Added the Adipohazard mutation, which causes others to fatten when touching or being touched by someone with the mutation.
2024-12-23 14:02:01 +01:00
Alphas00 acf6407d86 Merge branch 'evilew:master' into master 2024-12-23 14:00:40 +01:00
sheepishgoat d1be07f437 Merge pull request #51 from Phantastic-Swan/fix/crafting_fixes
Fix/crafting fixes
2024-12-22 13:16:02 -05:00
sheepishgoat 4e87d46f89 Update code/modules/research/techweb/nodes/engineering_nodes.dm 2024-12-22 13:02:51 -05:00
sheepishgoat b6964b6f92 Update code/modules/research/designs/tool_designs.dm 2024-12-22 13:02:45 -05:00
sheepishgoat d56b15f7fa Update code/modules/research/designs/stock_parts_designs.dm 2024-12-22 13:02:38 -05:00
sheepishgoat c08690cd6d Update code/modules/research/designs/stock_parts_designs.dm 2024-12-22 13:02:29 -05:00
sheepishgoat f77aaba858 Update code/modules/research/designs/autolathe_desings/autolathe_designs_sec_and_hacked.dm 2024-12-22 13:02:21 -05:00
sheepishgoat 7af1c41411 Update code/modules/research/designs/misc_designs.dm 2024-12-22 13:02:14 -05:00
sheepishgoat 3bd4b1a457 Update code/modules/research/designs/autolathe_desings/autolathe_designs_sec_and_hacked.dm 2024-12-22 13:02:04 -05:00
Alphas00 d4ed2bc4b7 Small fixes 2024-12-22 13:27:51 +01:00
Alphas00 7597de2ab8 Mobility exoskeleton & modules, max fat genital sizes
Added the mobility exoskeleton, weak MODsuit that comes with mobility-related modules.
Added mobility-related modules
Added preference for max genital sizes due to fat increase
2024-12-22 13:05:34 +01:00
AbsFree 30a68aa1b0 advanced engineering research node no longershows 2 rpd's 2024-12-22 12:46:27 +01:00
AbsFree 860111c0eb Merge branch 'fix/crafting_fixes' of https://github.com/Phantastic-Swan/GS13-Citadel into fix/crafting_fixes 2024-12-22 09:56:34 +01:00
AbsFree 22165a20f1 changed node names to make it easier to look for them 2024-12-22 09:56:08 +01:00
Phantastic-Swan 88614e7c8a Merge branch 'evilew:master' into fix/crafting_fixes 2024-12-22 01:23:59 +01:00
AbsFree 9397bf71ca beanbag chairs deconstructible with wirecutters, all other chairs deconstructible with wrench 2024-12-22 01:22:18 +01:00
sheepishgoat f2ab8dc9a5 Merge pull request #50 from Phantastic-Swan/fix/supermatter-auto-delam
Fix/supermatter auto delam
2024-12-21 15:41:21 -05:00
AbsFree 379100ddbe addeda comment, commit because git bullies me :( 2024-12-21 21:34:15 +01:00
AbsFree 924e5c28bd added beanbag chair recipes and deconstruction 2024-12-21 16:24:37 +01:00
AbsFree 494435be0e fixed engi lathe not being able to craft the RPD, added double O2 tank 2024-12-21 15:42:00 +01:00
AbsFree 5403543663 hopefully fixed the SM just delaming for no reason even when inactive 2024-12-20 23:43:11 +01:00
Phantastic-Swan 449b2bd9f7 Merge branch 'evilew:master' into master 2024-12-19 23:20:31 +01:00
Phantastic-Swan 279569f901 Merge pull request #1 from Phantastic-Swan/better_belts
Better belts
2024-12-19 23:20:14 +01:00
evilew 36d48f986e Merge pull request #49 from Phantastic-Swan/better_belts
More capacity for Belts
2024-12-19 23:16:12 +01:00
Metis 3ffca10009 Update DeltaStation2.dmm 2024-12-19 16:45:54 -05:00
Metis e98de30e8b moves some files so that CI doesn't scream at us as much 2024-12-19 16:16:30 -05:00
Metis b9a644d8a4 Update DeltaStation2.dmm 2024-12-19 16:00:15 -05:00
Metis 20f4a1b699 Update DeltaStation2.dmm 2024-12-19 15:51:43 -05:00
Metis e6c5eba93c Merge branch 'master' of https://github.com/evilew/GS13-Citadel 2024-12-19 15:43:37 -05:00
Metis 2402580023 runtime fix 2024-12-19 15:43:35 -05:00
evilew 63dbd661e8 sec fix
double wide door in sec fix
2024-12-19 21:09:56 +01:00
Metis f3486be292 permafat damage 2024-12-19 15:07:57 -05:00
evilew 05284d7e0a vent clog tweak
- generally nerfed the event so it doesn't spill everywhere and it doesn't have such a heavy emphasis on mess-making chemicals
- as a future addition, we could just dillute the pool with more 'safe' chems as well tbh
2024-12-19 17:49:55 +01:00
Phantastic-Swan 4aa44a7242 Merge branch 'evilew:master' into better_belts 2024-12-18 10:04:57 +01:00
AbsFree 042ef547e2 fixed shit, medical stuff for dura (big cheeks) belts 2024-12-18 10:01:50 +01:00
AbsFree 86828f19fc commented out shit that doesn't work, made code a bit better, fixed lack of commas, changed an description and went to sleep 2024-12-17 23:21:21 +01:00
evilew 16151244d9 Merge pull request #48 from Phantastic-Swan/master
Adding Lipoifium
2024-12-17 16:22:17 +01:00
evilew bc0f8a44c7 Update __donator.dm 2024-12-17 15:38:48 +01:00
evilew cfc8f4b9cc donator fix, hopefully... 2024-12-17 15:17:32 +01:00
AbsFree f2fe45093e changed texture 2024-12-17 15:11:31 +01:00
AbsFree ad9e23e51e upgraded belts 2024-12-17 13:28:25 +01:00
AbsFree 8f163ecd72 upgraded engineering belts 2024-12-17 13:00:04 +01:00
AbsFree 348a2496dd adjusted temperatur calculations 2024-12-17 10:18:48 +01:00
AbsFree 5f61b40fea added check for when we ran out of fuel 2024-12-17 10:01:24 +01:00
AbsFree 0d041fbf2e maybe would be nice if you removed the gasses you're using to form it eh? 2024-12-17 09:59:55 +01:00
AbsFree abb10ca695 clearing overlays before changing file 2024-12-17 09:46:50 +01:00
AbsFree 245c071c40 placed the fattening_gasses inclusion to be alphabetic 2024-12-17 09:46:22 +01:00
AbsFree 4651d639e9 added canister overlays. One day I'll move them around 2024-12-17 09:45:59 +01:00
AbsFree 5ceedf1b58 changed the name of lipoifium file to fattening gasses because I will be adding more 2024-12-17 08:06:06 +01:00
Phantastic-Swan cf6edd84ba Merge branch 'evilew:master' into master 2024-12-17 07:44:17 +01:00
AbsFree 4ca74f5234 described the odor problem 2024-12-16 20:54:44 +01:00
AbsFree 900f825272 adjusted odor strength and odor, if someone ever sees it, we will know 2024-12-16 20:45:56 +01:00
AbsFree 1d8f9f9d31 made it so it doesn't blob you out immediately 2024-12-16 19:46:03 +01:00
evilew ab03798d23 mapping tweaks
- fixed a whole bunch of stuff and detailed FestiveStation. Mostly just adding lathes, lights, fixing areas... still lot of stuff to take care of tho
- added a proper gym and a secret nerd club in xenoarch
2024-12-16 01:55:37 +01:00
AbsFree ba9e7f8f25 made the reaction exothermic, added efficiency based on temperature 2024-12-15 21:50:15 +01:00
Swan c84583f817 fixed an error 2024-12-15 19:33:33 +01:00
Swan 7a779f389f made priority a sane number, added max reaction temp, changed comments 2024-12-15 17:18:17 +01:00
Swan 77d1f0f43f changed odor_strength to 2 but it STILL DOESN'T WORK WHY DOESN'T IT WOOOOOOORK?! 2024-12-15 17:13:16 +01:00
Swan 5408a7b72e changed comments 2024-12-15 16:57:30 +01:00
Swan 9d4bedb0d1 changed color to be the same as lipoifier, added odor strength 2024-12-15 16:48:51 +01:00
Swan 065fc5c7da added textures 2024-12-15 16:35:01 +01:00
Swan 9dc705805f added lipoifium 2024-12-15 16:34:49 +01:00
Swan db570bcd55 added GS13 edit comments, removed lipoifium canister class and added icon change fix 2024-12-15 16:34:28 +01:00
Swan 283a8fcedb moved the includes (don't know how it did this, it happened by itself...) 2024-12-15 16:33:47 +01:00
Swan 7bcb2727ea added lipoifium canister 2024-12-15 14:41:57 +01:00
evilew 69f1aac2a8 Merge pull request #47 from Alphas00/master
Modular Items Fullness fix & Comments, Permanence Options reload fix
2024-12-15 14:22:56 +01:00
Alphas00 39fc7ce11d Permanence Options reload fix
Clients no longer need to reload character info for permanence options to update between leaving and joining rounds
2024-12-15 11:18:11 +01:00
Swan 00b06c66b6 added atmos WG prefs 2024-12-14 21:16:15 +01:00
Swan ac2af85ffd added atmos WG prefs 2024-12-14 21:02:58 +01:00
Swan 4012621746 Added atmos gasses WG option 2024-12-14 20:56:21 +01:00
Swan 960d69e9d3 multiplied weight gain by five and made the code more readeable (?) 2024-12-14 20:40:47 +01:00
Swan f5717c43b5 changed requirements from plasma and N2 to BZ and trit 2024-12-14 19:54:44 +01:00
Alphas00 9cd54a58dd Modular Items Fullness fix & Comments
Fixed fullness not causing modular items to update the sprites
Added comments to modular items code
2024-12-14 16:07:53 +01:00
evilew db8efa1dc6 Merge pull request #46 from Alphas00/master
Endround Fat Permanence fix
2024-12-14 14:45:45 +01:00
Swan 2e19d2d97c added odor and overlay hopefully 2024-12-13 13:38:51 +01:00
Swan bab6f16e9d added odor and overlay hopefully 2024-12-13 13:38:20 +01:00
Alphas00 f4a8519bda Endround Fat Permanence fix
Fixed an issue with roundend fat permanence that overwrote the newly added information
Added timers to ensure the saving happens at the appropriate time and messages to let players know when the saving begins and ends
2024-12-13 10:56:04 +01:00
evilew 11cf05a591 Merge pull request #45 from Alphas00/master
Web Weaver fixes, Water OD removal
2024-12-13 03:13:47 +01:00
evilew 1a25707108 Merge pull request #44 from SeepingVisage/gut-slap
Gut Slap
2024-12-13 03:13:33 +01:00
evilew 0389da552b Merge pull request #43 from SeepingVisage/master
add horse snout
2024-12-13 03:12:17 +01:00
evilew d8c94fdb8a Merge pull request #42 from eyespy2222/master
Porting Fat AI displays
2024-12-13 03:11:42 +01:00
Swan 74a33d5c7c added lipoifium breathing 2024-12-12 19:56:52 +01:00
Swan fc95da1557 added TODO's 2024-12-12 19:56:29 +01:00
Swan 662aba8e00 added lipoifium 2024-12-12 18:04:52 +01:00
Alphas00 780faa9339 Web Weaver fixes, Water OD removal
Removed OD effect of water
Fixed Web Weaver actions
Re-added free movement through webs for characters with Web Weaver
2024-12-12 10:36:40 +01:00
SeepingVisage 8944220660 bugfix
allows for disarming from the sides when targeting groin instead of doing nothing
2024-12-11 19:46:56 -05:00
SeepingVisage 487fad9279 adds gut slapping
adds gut slapping. same as ass slapping (targeting groin) but from the front
2024-12-11 19:08:38 -05:00
eyespy 27d28b1d27 Comment patch
Marks which AI displays are original to this server specifically.
2024-12-12 09:54:51 +11:00
SeepingVisage eb12d02496 fix horse
wrong icon sheet
2024-12-11 14:59:26 -05:00
SeepingVisage 840e8b7dcc horse
horse snout
2024-12-11 14:51:06 -05:00
evilew 5546002e93 Merge pull request #41 from Alphas00/master
Fatten mode and vore fatness, Modular jumpsuit options, Hair Porting Define
2024-12-11 19:55:46 +01:00
Alphas00 ddef09510b Hair Porting Define
Tweaked the file for GS13 ported hair to utilize a single, streamlined line of code to quickly integrate hair
2024-12-11 16:48:40 +01:00
Alphas00 40ca700f8b Merge branch 'evilew:master' into master 2024-12-11 16:47:24 +01:00
eyespy 561f192c2c Porting Fat AI displays
Porting the AI displays I made a while back.
2024-12-11 21:04:11 +11:00
evilew 3bd6de943c vote fix?
- make it so if no one votes on round continuing, the station will carry on
2024-12-10 20:39:07 +01:00
Alphas00 8eb38e5244 Fatten mode and vore fatness, Modular jumpsuit options
Ported Fatten vore mode
Ported vore fatness hide function which makes you appear fatter based on how fat the people you've vored are
Readded grey jumpsuits as an option in loadouts
Readded grey jumpsuits to ClothesMate
The helplessness prefs for clothes now ignore modular clothes as did the original modular grey jumpsuit
2024-12-10 11:13:03 +01:00
evilew 4c43ea5bb0 Merge pull request #40 from evilew/stuff
big bottles / beanbag
2024-12-10 03:37:06 +01:00
evilew 9947696b47 Merge pull request #38 from Alphas00/master
Modular items tweaks, breasts sprite fix, Water Sponge vapor function
2024-12-10 03:33:00 +01:00
evilew b85ec05e6d Merge pull request #39 from SeepingVisage/stuff
makes it so that the bottles retain their original names
2024-12-10 03:32:43 +01:00
evilew 6be60b9bd7 small tweaks
- mostly just fixes to maps (saunas, adding some beanbags)
- new big bottle
2024-12-10 02:40:35 +01:00
SeepingVisage c848981604 makes it so that the bottles retain their original names
original names for bigbottles even if filled with something else
2024-12-09 20:37:45 -05:00
evilew ed6d20bb7d beanbag presets + placed on maps 2024-12-09 21:50:08 +01:00
evilew a167d6e433 finishing up big bottles
- sprites and properties of bottles were fixed
2024-12-09 21:27:38 +01:00
evilew 90b0df326d directional beanbag chairs 2024-12-09 20:18:57 +01:00
Alphas00 b4e4253a5b Further modular items tweak and breasts fix
Further tweaked modular item functions and fixed an error with breasts sprites
2024-12-09 20:09:45 +01:00
evilew 8f6e5f9ee4 we love dumping everything into one commit!
- added beanbag and GATO beanbag chairs
- added big bottles of soda (found in gato cola vendors)
- tweaked prices of RCDs and insuls
2024-12-09 19:43:32 +01:00
Alphas00 6eca3fed86 Modular items update tweak, Water Sponge vapor function
Changed modular items to update periodically though handle_fatness, not just when fatness is changed.
Water Sponge vapor function restored and updated
2024-12-09 12:16:45 +01:00
evilew a2767e1339 Merge pull request #37 from Alphas00/master
Roundend and Shuttle Recall fixes, GS13 plant mutations fix, Modular suits tag
2024-12-08 22:29:00 +01:00
Alphas00 67b91defbf Modular suits tag
Added (Modular) to the grey jumpsuits to mark their state as modular items
2024-12-08 22:03:03 +01:00
Alphas00 1718d3bcf7 GS13 plant mutations fix
Re-introduced munchies weed and blueberries and potential mutations for cannabis and berries respectively
2024-12-08 21:58:39 +01:00
Alphas00 31feb96296 Merge branch 'evilew:master' into master 2024-12-08 19:33:58 +01:00
Alphas00 70de1c7076 Roundend and Shuttle Recall fixes
Fixed roundend error due to fatness permanence saving
Fixed vote shuttle not being recallable by admins
2024-12-08 19:33:37 +01:00
evilew 452556ab5a Merge pull request #36 from Alphas00/master
Modular Clothes V2 & Department Grey Suits
2024-12-06 18:58:41 +01:00
Alphas00 b0afe506cf Merge branch 'evilew:master' into master 2024-12-06 18:51:42 +01:00
Alphas00 078517584e Department grey suits
Added departmental colored grey suits as placeholders for jumpsuit modular sprites
Removed the modular grey suit as it is now outdated
2024-12-06 18:43:36 +01:00
evilew 118591046d Revert "tweaked voting code"
This reverts commit 0d91a9de6d.
2024-12-06 13:06:59 +01:00
evilew 631fb49035 Merge pull request #35 from evilew/tweakin
fix batch
2024-12-06 12:47:43 +01:00
evilew e17e9c191c mapping tweaks
- fixed some pipes
- added more fans in airlocks
2024-12-06 12:45:23 +01:00
Alphas00 bed38679b9 Modular Clothes System V2
Introduction of the second, improved version of a system for modular clothes, with the aim to allow the transformation of any given item to a modular one.
Tweaked layer defines to add in specific layers for modular clothes sprites
2024-12-05 16:57:42 +01:00
evilew 627f876d6c donator key fix 2024-12-03 22:22:08 +01:00
evilew 91a38ab87a kilo disposals fix 2024-12-03 19:39:46 +01:00
evilew 96e0a2148e e
- GATO card resprite
- fixed airlock directions on Kilo
- removed bugged centcomm escape pod IDs
2024-12-03 00:31:12 +01:00
evilew d0c514a02f Merge pull request #34 from AlManiak/deature/buckle-stuckage-weight
Feature/buckle stuckage weight
2024-12-02 22:36:17 +01:00
evilew 0d91a9de6d tweaked voting code
- removed the whole mechanic where extending the round requires an increasing amount of people to vote (based on the amount of times the vote has appeared)
2024-12-02 22:31:41 +01:00
evilew 4fd1e6dc79 voting doesn't require incremental wins
- changed it so amount required to pass a continuation votes doesn't increase with next votes
2024-12-02 22:26:05 +01:00
evilew dad8e94879 kilo area tweak 2024-12-02 22:09:45 +01:00
AlManiak 03a06585e4 Cleaned up nesting 2024-12-02 21:58:25 +01:00
AlManiak 8fe1ab503f Merge branch 'deature/buckle-stuckage-weight' of https://github.com/AlManiak/GS13-Citadel into deature/buckle-stuckage-weight 2024-12-02 21:17:07 +01:00
AlManiak d9e839c083 Added regular doors for stuckage 2024-12-02 21:17:04 +01:00
AlManiak c5b9b0d69d Merge branch 'evilew:master' into deature/buckle-stuckage-weight 2024-12-02 21:16:19 +01:00
evilew 25403cbf76 Merge pull request #33 from Alphas00/master
Genitals fix 2
2024-12-02 15:54:29 +01:00
Metis 07110e2299 this should fix stuff? 2024-12-02 08:33:05 -05:00
Metis 06b3a77244 Update transformation_component.dm 2024-12-02 07:25:11 -05:00
Metis 19116b0d52 Update transformation_component.dm 2024-12-02 07:12:30 -05:00
Alphas00 fa3d4177d3 Genitals fix 2
Testicles now appear on humans
2024-12-02 12:56:44 +01:00
Metis cd6938e9a9 Update mood.dm 2024-12-01 20:17:38 -05:00
Metis 5d160c502f Update mod.dm 2024-12-01 18:10:12 -05:00
evilew 93157b6e5f small stations tweaks
just fixing hos window stuff so the carp don't fuck up electricity if they run into it
2024-12-01 22:50:05 +01:00
AlManiak 95ef6f6942 replace sleep with timer 2024-12-01 19:38:37 +01:00
AlManiak bf43f4d817 Added airlock weight interaction 2024-12-01 18:04:47 +01:00
evilew 292725a33e meta park fix
the water was leaking out air
2024-12-01 16:57:46 +01:00
AlManiak e5fcaedfe2 Added buckling weight interactions
Added creaking sound from hypercode
2024-12-01 16:00:00 +01:00
evilew 62a361e9c0 Merge pull request #32 from sheepishgoat/tweakin
small tweaks
2024-12-01 15:51:19 +01:00
evilew 85e4ee2414 fixing more wall smoothing 2024-12-01 15:48:07 +01:00
evilew 1423402fc3 sprite tweaks - meatball 2024-12-01 14:47:28 +01:00
evilew 9c5d13eaac donator stuff
- cc rep ranks and donator
2024-12-01 14:30:01 +01:00
evilew f44c98b966 station tweaks
- added captain clothing vendors to all maps
- moved over more elaborate brig onto boxstation
2024-12-01 14:25:38 +01:00
evilew 59155cab24 box atmos fix 2024-11-30 22:25:24 +01:00
evilew 58076e4c1c Merge pull request #31 from Alphas00/master
Human genitals fix & Fat persistance
2024-11-30 21:44:31 +01:00
evilew 7b4e04dc40 Revert "temp map commit"
This reverts commit fb8288cd21.
2024-11-30 19:32:04 +01:00
evilew fb8288cd21 temp map commit
temp map commit just to see if the rebased maps produce runtimes
2024-11-30 17:34:34 +01:00
Alphas00 702485b045 Human genitals fix & Fat persistance
Fixed sprites for human genitals (breasts, penis, vagina)
Moved fat permanence changes to the GS13 folder
Re-added fat permanence save on round end for all alive and present players
2024-11-30 11:51:18 +01:00
evilew 1133f46556 Merge pull request #30 from AlManiak/feature/jobtitles_fix
Feature/jobtitles fix
2024-11-28 22:20:58 +01:00
AlManiak 9001c33918 Merge branch 'sheepishgoat:master' into feature/jobtitles_fix 2024-11-28 18:04:41 +01:00
Metis bdf3c8d783 tgs 2024-11-28 04:04:03 -05:00
Metis f456eb78d6 Update .tgs.yml 2024-11-28 03:17:18 -05:00
AlManiak 5ec3f3eab8 Fixed announcer empty list bug
Fixed alternate rank not showing on PDA
Fixed Manifest because record not being filled correctly
2024-11-25 23:24:02 +01:00
evilew 251a4c8fa4 fixing chair runtimes
fixed the chair runtimes that resulted from porting over comfy chair padding overlay code
2024-11-25 19:01:27 +01:00
evilew ecd025e7c7 escape pod fixes
- fixed the escape pods on all stations
2024-11-24 17:34:28 +01:00
evilew 63fa317b9b map tweaks
- fixing broken areas, somee APCs and whatnot
2024-11-24 14:58:53 +01:00
evilew eee079605c donator tweak 2024-11-24 13:03:36 +01:00
evilew 967fc35c88 small mapping tweaks
- just adding detailing for the most part
2024-11-24 12:58:44 +01:00
evilew 4212968854 map quick fixes
- added BEPIS machines, civilian bounty pads to all maps
- fixed incorrect ID var on lavaland outpost shuttle land
2024-11-23 20:05:08 +01:00
evilew fd5d3706cf fixing mining station shuttle id port 2024-11-23 14:00:14 +01:00
evilew 5f2cefdf36 Merge pull request #29 from sheepishgoat/mapping-tweaks
mappin tweaks & more
2024-11-23 02:24:39 +01:00
evilew cffa8f3be4 butt sprite fixes
sprites 5-7 were identical, which I fixed
2024-11-23 02:09:37 +01:00
evilew 6025f47fee small map tweaks
- included cozy cabin into map pool
- small fixes to fast food map
- removed wastes ashlander spawn
2024-11-22 21:47:20 +01:00
evilew c1b7866891 balls fluid
- added balls fluid code
2024-11-22 21:20:24 +01:00
evilew d120128125 boobencocken
- ported over HS13 cock and boob sprites
- made bigger cock / boob sizes available
2024-11-22 20:45:45 +01:00
evilew 6e2e4fe4d0 moving over hyper sprites
- tweaked some lavaland levels; new details, fixing floors
- moving over hyper genital sprites
2024-11-22 18:28:45 +01:00
evilew 167717ee37 fixes
- fixed airlock directions and gato-ified festivestation a bit
- fixed some presets of comfy chairs
- nerfed mealdors
2024-11-22 05:02:56 +01:00
Metis 9d7f14842c ladder and chasm fix 2024-11-21 22:16:50 -05:00
evilew f1cef34b8c moving over our versions of ruins
- moved over our versions of lavaland/space ruins
- added gato cigs to cig vendors
2024-11-22 02:24:51 +01:00
evilew bb584eba2b rename
renamed a folder (oh no)
2024-11-22 01:59:31 +01:00
evilew 438dcff051 mapping tweaks
- moving over our CC level / maps
- moving over our levels
- all the other maps are moved to a seperate folder
- better comfy chairs
- brought back solar defence crates
2024-11-22 01:58:57 +01:00
evilew af3f43cd8f Merge pull request #28 from sheepishgoat/maps-we-got-them
moving over GS maps
2024-11-21 23:04:08 +01:00
evilew c75eb1d8b5 Merge branch 'master' of https://github.com/sheepishgoat/GS13-Citadel into maps-we-got-them 2024-11-21 23:03:17 +01:00
evilew 4ff7707544 fucking giant mess lol
xd
2024-11-21 22:29:40 +01:00
evilew 0d4b6b9112 Merge pull request #27 from sheepishgoat/gatofication2
Gatofication2
2024-11-21 22:11:30 +01:00
evilew 9d9f805d7b Merge branch 'master' into gatofication2 2024-11-21 22:11:24 +01:00
evilew 4518a0b016 NT to GT - comments
- added GS13 comments to wherever NT was changed into GT
2024-11-21 21:45:25 +01:00
evilew 94355ba15e gato rebranding
- rebranding some more items, this time mostly the sprites
2024-11-21 04:20:54 +01:00
evilew 2dd9f92643 Merge pull request #26 from sheepishgoat/tweaklandia
Plentitude of Small Fixes 3: The Return of Tweaks
2024-11-21 01:06:47 +01:00
evilew b251055c6e bluespace tray buff
from 50 to 100
2024-11-21 01:05:42 +01:00
evilew 9ae15b96d1 WAITER, WAITER
MORE EVENT TWEAKS PLEASE!!
2024-11-20 21:22:28 +01:00
evilew 45ac0b6fd5 Merge pull request #25 from Alphas00/master
GS13 plants fix & ported GS13 drink icons fix
2024-11-20 21:05:33 +01:00
evilew f9e6623372 fixing cfc ship, light sprites
- brough back better lightbulb sprites
- slightly fixed cfc ship (it still can't seem to move)
2024-11-20 16:11:50 +01:00
evilew bdccf133cb load of fixes
- increased age_min from 18 to 21
- gave RCDs an option of airlock direction
- buffed bluespace trays
- made more windows / walls directional and merging with airlocks/windows
- gave the rusty walls perspective sprites
- removed stoner language from beach bum
- enabled prisoner (for now)
- buffed HEVA not to be weak to goliaths
- brought back smaller, more realistic bee sprites
2024-11-20 15:51:04 +01:00
evilew 7da7c6292e lavaland mining base
shoved our variant of lavaland  mining base into gs_maps folder
2024-11-20 02:36:24 +01:00
evilew 35d9c6327d reverting citbox
citbox was accidentally replaced by gsbox, reverting the original sprite
2024-11-20 02:29:40 +01:00
evilew 4fa4eca4d2 paintings to gs maps
added slots for paintings on GS maps
2024-11-20 02:24:29 +01:00
evilew 10ef9e374a Nanotrasen to GATO - comments
I know it's a mess, but the least I can do is add comments anywhere I can
2024-11-19 01:59:28 +01:00
evilew 17385694fe gatofication icons
work in progress! gatofication.dmi should be split up later
2024-11-19 01:25:15 +01:00
evilew 279547e3eb fixing gs maps shuttles
- fixed GS map variants not having any working shuttles (it was a matter of 'id' and 'id_shuttle' variables)
- edited the basemap file to include comments pertaining to GS13 edits
2024-11-19 01:22:22 +01:00
evilew ca1e968e38 donator ckey fixes
hopefully fixed ckeys in donator items, also segregated donator item defines from datums
2024-11-19 00:34:13 +01:00
evilew 88f53fbb2a company suits
- added in suits for lethal company inspired suits, made by Cubic (they currently aren't implemented in any way, just added them)
2024-11-19 00:23:28 +01:00
evilew df6bd86f82 bodyparts and stuff
- fixed a typo in untie shoes event
- ported more snouts, tails, taurs, hair and stuff
- med analyzer has better sprites now
2024-11-18 19:22:30 +01:00
Metis 1c874d536b no more dogborgs 2024-11-18 10:58:17 -05:00
Alphas00 cce387ea41 GS13 drink icons fix
Added a var to consumable reagents that allows drinking glasses to locate icons in the GS13 drinks.dmi file
Fixed icons for oily oafs, glyphid slammer, belly bloats, blobby mary, beltbuster mead, heavy cafe, fruits tea and snakebite
2024-11-18 12:37:56 +01:00
Alphas00 60c2228fd5 GS13 plants fix & ported GS13 drink icons
Ported and fixed the icons for blueberries and munchies weed.
All icons for GS13 plants "compressed" into 3 files (seeds, fruits, plants).
Ported sprites for dwarven and fatty drinks (not added in-game yet)

The drinks' sprites have not been added in because of the way drink sprites work. The glass changes its icon state among those in its original icon file. Adding the sprites to those files would cause upstream conflicts
2024-11-18 10:14:07 +01:00
Metis 6f59b88ad7 Merge remote-tracking branch 'upstream/master' 2024-11-17 18:19:39 -05:00
deathride58 aa4ab29d97 Merge pull request #16113 from sheepishgoat/usable_bsrped
Buffs RPEDs
2024-11-17 18:18:02 -05:00
Metis d6561e5236 Update rped.dm 2024-11-17 18:00:26 -05:00
evilew d80bb00853 event tweaks 2024-11-17 22:56:20 +01:00
Metis 4bd63db80f Merge remote-tracking branch 'upstream/master' 2024-11-17 16:55:40 -05:00
deathride58 13278a0307 Merge pull request #16112 from sheepishgoat/custom-job-titles
Custom Job Titles
2024-11-17 16:49:25 -05:00
Metis 128714345d whoops 2024-11-17 16:43:09 -05:00
evilew fa1ef5fa3b Merge pull request #23 from AlManiak/feature/Fix_stuffed_belly
Fixed stuffed belly sprite for non-round belly
2024-11-17 20:35:30 +01:00
evilew 10a07b2b0d Merge pull request #21 from ReoDaProtovali/Fixing-the-fixes
Plentitide of small fixes part 2: electric boogaloo
2024-11-17 20:35:18 +01:00
evilew 5b8db19c80 Merge pull request #22 from Alphas00/master
2nd Bartender Slow, Dumbbell fix
2024-11-17 20:34:32 +01:00
evilew 61ac190ce9 Merge pull request #24 from ReoDaProtovali/Dorms-and-Bar-shielding
Bar and dorms rad shielding
2024-11-17 20:34:23 +01:00
AlManiak d3fa1dc87f Fixed stuffed belly sprite for non-round belly 2024-11-17 18:00:00 +01:00
Alphas00 b63399b57d 2nd Bartender Slow, Dumbbell fix
Added a second job slot for bartender
Dumbbell runtime error fixed
2024-11-17 13:49:01 +01:00
ReoDaProtovali 6d76c01886 Dorms shielding 2024-11-17 05:21:26 -06:00
ReoDaProtovali 0d3e6e9a31 ticks some unticked files. No idea how they got unticked.
I LOVE UNTICKED FILES!!!
2024-11-16 22:31:02 -06:00
ReoDaProtovali 4a92821583 I think that's about everything. 2024-11-16 21:44:12 -06:00
evilew df14aba518 goodbye bustedbelt
it was supposed to be in a modularity folder but I think I added it in here earlier mistakenly
2024-11-16 13:26:40 +01:00
Metis b77ff92808 Analyzers show weight 2024-11-15 23:13:52 -05:00
Metis d4a3aba010 Update robot_modules.dm 2024-11-15 22:54:08 -05:00
Metis d4dd19cc05 Update tgstation.dme 2024-11-15 22:39:26 -05:00
Metis 8c4dfbd07c readds fat borgs 2024-11-15 22:35:44 -05:00
Metis 495a45841e makes cyborg playable 2024-11-15 22:18:47 -05:00
Metis 52550eae18 floor tile fix 2024-11-15 19:23:32 -05:00
evilew 6b4758654b moving over posters, small tweaks 2024-11-15 23:15:35 +01:00
Metis fa1de20bf3 calorite smithing 2024-11-15 15:59:42 -05:00
sheepishgoat 8aab389afe Merge pull request #20 from sheepishgoat/tf-mechanics
Object TF mechanics
2024-11-15 01:22:07 -05:00
Metis d4c73d45ce Update mob_procs.dm 2024-11-15 01:21:19 -05:00
Metis c7c81d6c53 Update kinkmate.dm 2024-11-15 01:14:10 -05:00
Metis b28c11d9f5 extra functionality :3 2024-11-15 01:12:29 -05:00
Metis d3499a9a2c Update transformation_item.dm 2024-11-15 00:29:38 -05:00
Metis 19ea7268aa prefs 2024-11-15 00:26:55 -05:00
Metis 22ec293d45 the item 2024-11-15 00:21:13 -05:00
sheepishgoat 73023562d6 Merge pull request #19 from ReoDaProtovali/FeedingTubePolish
Industrial Feeding Tube Polish
2024-11-14 10:50:06 -05:00
ReoDaProtovali 0107bf1543 Minor fix
oops
2024-11-14 02:44:04 -06:00
ReoDaProtovali 0f2a8f1865 Merge remote-tracking branch 'upstream/master' into FeedingTubePolish 2024-11-14 02:40:28 -06:00
ReoDaProtovali 6b43f1fe7a Pump Clunk change
clong, clong
2024-11-14 02:34:14 -06:00
ReoDaProtovali 136f9d45d4 Real 2024-11-14 02:10:59 -06:00
Metis 31d94f18e9 fixes organ shrinkage 2024-11-13 22:15:05 -05:00
Metis e5c1aa922f Update traits.dm 2024-11-13 21:37:13 -05:00
Metis c7dd9ca68e Update haydee_suit.dm 2024-11-13 21:23:04 -05:00
Metis 02c80c15c6 fixes runtime? 2024-11-13 21:06:52 -05:00
sheepishgoat 853d9c5703 Merge pull request #18 from AlManiak/feature/cegloves-and-others
Feature/cegloves and others
2024-11-13 12:50:54 -05:00
AlManiak ce1081a8dc Added Vegetarian quirk 2024-11-10 18:35:14 +01:00
AlManiak 78a6e336e4 Merge branch 'sheepishgoat:master' into feature/cegloves-and-others 2024-11-10 18:17:51 +01:00
AlManiak 883bcb7c3a Added CE gloves 2024-11-10 18:16:27 +01:00
evilew a61398acc6 donator item 2024-11-09 23:24:34 +01:00
evilew 3a3ad0657f donator plushie
crowbars
2024-11-09 23:16:45 +01:00
evilew 42c59d3506 NT to GT
Changed most instances of NT (Nanotranse) to GT (GATO). Left alone stuff that makes sense for it to be NT branded
2024-11-09 23:11:05 +01:00
evilew edea3ae8e0 nanotrasen to gato
Replaced most instances of Nanotrasen mentions into GATO, though I've kept some that have more sense to be kept as Nanotrasen (like nanotrasen marked stuff and such)
2024-11-09 23:05:02 +01:00
evilew 72168518fc map path swap
swapping paths of selectable maps
2024-11-09 18:40:17 +01:00
evilew 0d0ee5b51c removed the supernova and fattening vent clogs 2024-11-09 15:23:25 +01:00
sheepishgoat a86abb5e79 Merge pull request #17 from AlManiak/feature/alternative-belly-sprites
Feature/alternative belly sprites
2024-11-07 15:08:02 -05:00
evilew 680720c508 fennec ear fix
ooops, had a typo :3
2024-11-07 17:13:36 +01:00
evilew d891b0378c gs13 beach 2024-11-07 12:40:36 +01:00
evilew 9dff51a54a Merge branch 'master' of https://github.com/sheepishgoat/GS13-Citadel 2024-11-07 12:35:55 +01:00
evilew 4ebdcb68da fennec ears
bigass fennec ears
2024-11-07 12:35:52 +01:00
AlManiak e7df30054f Merge branch 'feature/alternative-belly-sprites' of https://github.com/AlManiak/GS13-Citadel into feature/alternative-belly-sprites 2024-11-05 15:22:37 +01:00
AlManiak bf82005185 tidy up 2024-11-05 15:22:31 +01:00
AlManiak e63d2dd0df Merge branch 'sheepishgoat:master' into feature/alternative-belly-sprites 2024-11-05 14:37:21 +01:00
AlManiak b68ab4e339 tweaked sprite 2024-11-05 14:06:55 +01:00
Metis 3057f0e46c bedsheets 2024-11-05 00:31:50 -05:00
Metis 9bc7c20a38 removing this to fix CI 2024-11-04 03:28:47 -05:00
Metis 5f625c4c95 suffering 2024-11-04 03:19:55 -05:00
Metis 88dbbd0d3b Update job_titles.dm 2024-11-03 13:28:02 -05:00
AlManiak 4d3504b6be Jumpsuit change 2024-11-02 21:56:18 +01:00
AlManiak 912c914f5e Initial commit 2024-11-02 21:51:17 +01:00
Metis f6af059a06 job titles 2024-11-02 03:16:16 -04:00
evilew 537966ca0c loadout stuff
- added metis plush
- added wheely heels for a donator
2024-11-01 16:10:30 +01:00
Metis 95967c169a whoops 2024-10-31 14:44:39 -04:00
evilew d7f06aff9b spookystation small tweaks
- just a bunch of basic fixes
2024-10-31 17:44:43 +01:00
evilew c54da40d25 boxstation tweaks
- just mostly some visual fixes and other area stuff
2024-10-30 23:39:08 +01:00
evilew 11ff328986 map area fixes (untested)
- fixed areas in GS13 maps
2024-10-30 23:17:43 +01:00
sheepishgoat ba53c902d4 Merge pull request #15 from sheepishgoat/markings-init
initializing markings
2024-10-30 14:16:27 -04:00
sheepishgoat 81d700f1a7 Merge pull request #14 from sheepishgoat/fixes-and-maps
plentitude of small fixes
2024-10-30 14:15:55 -04:00
evilew ae36d41495 added a couple simple markings
- added avali ears
- added jackal snout
- added cobra hoods
2024-10-30 13:55:32 +01:00
evilew 096df974f5 haydee suit
- fixed some shutter/blast door sprites too (to be perspective'd)
- nerfed haydee suit, made it available in clothesmate hacked section
2024-10-30 12:23:44 +01:00
evilew c5ae1bf17e moving over different airlock sprites
- moved over airlock sprites that use perspective sprites
2024-10-30 12:11:43 +01:00
evilew 795325d786 more tweaks
- brought over better glitter sprites
- nerfed bear object dmg
- removed brand intelligence from the pool
- nerfed mice migration spawns
2024-10-30 11:36:06 +01:00
sheepishgoat c91abc56f7 Merge pull request #13 from AlManiak/feature/small-bits-and-bob
Feature/small bits and bob
2024-10-29 14:58:51 -04:00
Metis f9ee168b6a Merge remote-tracking branch 'upstream/master' 2024-10-28 22:21:26 -04:00
SandPoot 7fc23c7acf Merge pull request #16109 from sheepishgoat/performance-ports
Various Performance and Dev QoL changes
2024-10-28 18:54:12 -03:00
Metis 9e31990e7a Update .gitignore 2024-10-28 17:26:06 -04:00
AlManiak d19e37fd2a Removed duplicates 2024-10-28 17:57:13 +01:00
AlManiak ef93595938 Review commentary resolution 2024-10-28 17:53:36 +01:00
AlManiak e86c52cb2b Moved ported functionality to GS13 code when applicable 2024-10-28 16:50:08 +01:00
Metis e1eaa7f6b3 Update _compile_options.dm 2024-10-26 19:01:00 -04:00
SandPoot 2b6e9e7207 Merge pull request #16111 from sheepishgoat/no-more-mob-spam
Removes npc emote spam in deadchat
2024-10-26 19:58:27 -03:00
Metis b072a63cea Update emotes.dm 2024-10-26 18:48:16 -04:00
Metis 117e5d8669 Fuck around and find out 2024-10-25 22:59:39 -04:00
AlManiak 800f0d35a7 Tweaked extra productive genitals, amounts had a different baseline old code vs new code, causing climaxing to not spill onto floor 2024-10-25 15:36:10 +02:00
AlManiak 7a53d88f67 Put lewd headpat in wrong file 2024-10-25 12:41:16 +02:00
AlManiak 621d68b326 Merge branch 'sheepishgoat:master' into feature/small-bits-and-bob 2024-10-25 11:31:41 +02:00
Metis 1bbe63c33b sweet relief 2024-10-25 00:44:31 -04:00
Metis d5637089b5 Update teleporter.dm 2024-10-25 00:28:10 -04:00
Metis b34fa8b6b0 Update species.dm 2024-10-25 00:26:00 -04:00
Metis 87c85712cb fat mood 2024-10-25 00:20:57 -04:00
Metis bae37cd45c Update slaughterevent.dm 2024-10-24 23:33:41 -04:00
Kylerace feacce1bb8 turns one of the vis_contents in openspace turfs to overlays (#58500)
one of the appearances that open space tiles add as vis_contents was an unchanging grey cover. its useless to keep it as vis_contents since its not supposed to change so its better to have it as an overlay. its possible that i can make openspace tiles not add the turf below as vis_contents and instead listen to objects entering and leaving it with connect_loc and add those objects as vis_contents then but that sounds like more trouble than its worth

edit: probably not the last part

overlays < vis_contents in maptick cost

also tramstation has the most open space tiles in high traffic areas compared to other maps. openspace tiles have 2 vis_contents each, equivalent to 2 objects that sendmaps processes every tick this pr only makes it 1 appearance in vis_contents. its also the map with the current highest maptick per player according to lemons graphs
2024-10-24 23:09:30 -04:00
Metis a003e7947d admin smites 2024-10-24 20:24:20 -04:00
SandPoot d90493e71e push 2024-10-24 15:58:04 -03:00
AlManiak 30f539cb69 Fixed DNC
Fixed Arousal enabled when in prefs disabled
2024-10-24 19:33:18 +02:00
AlManiak bba2ef4de6 Added missing traits
in heat
extra productive genitals
headpat slut
Do Not Clone
Strong Legs
universal diet
2024-10-24 18:02:10 +02:00
AlManiak 19f4c34381 Added Big Gulps
Fixed earshattering fryer sound overshadowing ding sound
2024-10-24 17:03:27 +02:00
AlManiak a90d5c8eff Added Big gulps 2024-10-24 14:27:48 +02:00
Metis e73c9fed6e Merge remote-tracking branch 'upstream/master' 2024-10-24 01:19:47 -04:00
Metis bad8127688 some updates 2024-10-24 01:17:27 -04:00
SandPoot c8f6640ac5 Merge pull request #16075 from deathride58/mousemovethrottle
throttles mouse movement calls
2024-10-23 21:11:38 -03:00
deathride58 51a264c9a7 Replaces throttle with cooldown define and also adds it to mousedrag 2024-10-23 19:51:18 -04:00
deathride58 bbf0a7b2bf Merge pull request #16106 from sheepishgoat/chem-grinder-change
Chem grinder change
2024-10-23 19:22:11 -04:00
deathride58 73ba1bff4d Merge pull request #16102 from SandPoot/this-is-a-feature-but-was-left-in-an-unusable-state
Enables the feature for having multiple loadout slots
2024-10-23 19:20:45 -04:00
deathride58 47a51925e0 Merge pull request #16108 from SandPoot/fix-pipes
Fixes some pipe related issues
2024-10-23 19:20:25 -04:00
Metis b59523ae89 enable byond-tracy 2024-10-23 14:00:51 -04:00
evilew d1d52f013b changing some icosn
- added approaching GS13 sound
- moved over Hyper's xeno queen sprites
- moved over wooden chair sprites
2024-10-23 13:48:18 +02:00
evilew fb4f430693 event nerfs
- removed pyro anomaly, disease outbreak and brain trauma from the event pool
2024-10-23 13:10:20 +02:00
evilew 3422f7a198 bar sign
- added back the busted belt bar sign
2024-10-23 13:02:37 +02:00
Mothblocks 3a044ef627 Add defines for byond-tracy support (#70931)
Adds `USE_BYOND_TRACY`, which automatically loads a given
prof.dll/libprof.so using https://github.com/mafemergency/byond-tracy/.

Not intended for use in production, and we do not ship a copy of
byond-tracy. It is extremely easy to compile yourself, but if you're
someone interesting enough to play around with this then let me know and
I can just give you a build.

I'm going to be using this for init profiling.
2024-10-22 22:17:37 -04:00
sheepishgoat de470edc5b Merge pull request #12 from OzzyMcPseudonym/dev
Loadout mod grey suit on dev this time.
2024-10-22 20:29:20 -04:00
sheepishgoat fa683d30f9 Merge pull request #11 from AlManiak/feature/port-stuffed-functionality
Feature/port stuffed functionality
2024-10-22 20:28:58 -04:00
OzzyMcpseudonym fd8289485c Loadout mod grey suit on dev this time. 2024-10-21 14:03:53 -04:00
AlManiak f4789c4b65 Added buffer sprites for belly inflation 2024-10-21 16:11:24 +02:00
AlManiak 39908fe3ab Fix jumpsuit 2024-10-21 15:23:34 +02:00
LemonInTheDark b478367fd9 Saves on average 10 seconds from roundstart times (#71730)
## About The Pull Request

When runlevels change mid work, subsystems running behind have their
next_fire updated.
It's offset by a sum of random numbers, so things don't bunch up,
especially KEEPTIME SSs

The trouble is we have so many subsystems that get added at roundstart
that this offset gets LARGE, like 10 seconds on average.

So instead of randomly offsetting, why not "fill" a set of time slots?
Only 1 keeptime subsystem a tick, and 4 others. Then we just fill up
those buckets and get to it (also don't offset things that are already
processing)

I've talked to mso a bit about this. What he reccomended was sampling a
random time withing a 2 second window.
I'm not totally sure why, kinda waiting for him to tell me off, if he
does I'll fix things up.

This pattern takes the max possible delay from 16 (76 * 5 / 20)) seconds
to 0.7 (56 / 4 / 20)
It obviously scales with subsystem count, but I like this scaling a bit
better

I've applied the same pattern to the offsetting we do at the start of
Loop(), for ticker subsystems. I am less confident in this, it does take
last fire times from at worst 3.75 seconds (15 * 5 / 20) to a static
0.75 (15 / 20)
As stated I'm less sure of this, hoping to get mso'd so I can clean
things up

## Why It's Good For The Game

Makes roundstart snappier

## Changelog
🆑
code: Roundstart "starting" should be much snappier now
/🆑

Co-authored-by: Kyle Spier-Swenson <kyleshome@gmail.com>
2024-10-21 00:30:59 -04:00
SandPoot 2099a76fc7 push 2024-10-20 22:33:23 -03:00
AlManiak 39c5a4afad Merge branch 'sheepishgoat:master' into feature/port-stuffed-functionality 2024-10-20 23:58:36 +02:00
AlManiak 2f22f4cf47 Added visual stuffed states 2024-10-20 23:57:37 +02:00
AlManiak b080beb42e Initial commit 2024-10-20 21:33:22 +02:00
Metis a10d870908 Update server.txt 2024-10-20 13:25:27 -04:00
Metis 78f472ff0f updates tick rate 2024-10-19 18:53:55 -04:00
Metis 88c30646e8 Merge branch 'master' of https://github.com/sheepishgoat/GS13-Citadel 2024-10-19 17:57:06 -04:00
Metis 5e44e63556 Merge remote-tracking branch 'upstream/master' 2024-10-19 17:56:57 -04:00
evilew 594686d615 snaxi tweak 2024-10-19 20:05:57 +02:00
evilew 93a83fa1e1 fixes
- adjusting taur bodyparts and colors
- renaming taur filenames so they work
2024-10-19 16:48:34 +02:00
evilew 0e432531c9 adding in files
- added empty files for most important markings
- added a couple ear and taur markings (mostly from Virgo)
2024-10-19 15:52:38 +02:00
SandPoot b344b3d727 Merge branch 'master' into this-is-a-feature-but-was-left-in-an-unusable-state 2024-10-19 03:24:49 -03:00
SandPoot f029095440 Merge pull request #16107 from sheepishgoat/fix-ci
fixes CI
2024-10-19 03:23:32 -03:00
Metis fdb18045de Update requirements.txt 2024-10-19 01:53:43 -04:00
Metis 989afa2d37 Update ci_suite.yml 2024-10-19 01:47:49 -04:00
Metis 35c80d9911 node 2024-10-19 01:35:11 -04:00
Metis 1637b9da0e Update dependencies.sh 2024-10-19 01:31:37 -04:00
Metis 676c60ce40 Update dependencies.sh 2024-10-19 01:13:52 -04:00
Metis 98b9739e22 Update dependencies.sh 2024-10-19 01:06:17 -04:00
Metis 7359088a1b Update ci_suite.yml 2024-10-19 00:54:36 -04:00
Metis 812c195491 Update ci_suite.yml 2024-10-19 00:45:12 -04:00
Metis e26351cbf6 hopefully this does it 2024-10-19 00:33:10 -04:00
Metis d55279a842 movement fix 2024-10-17 00:11:45 -04:00
Metis 51adf0dd23 Merge remote-tracking branch 'upstream/master' 2024-10-16 18:18:34 -04:00
Metis 76a4e29281 Update mob_movement.dm 2024-10-16 17:38:17 -04:00
Metis 149d93f83f quick fix 2024-10-16 14:48:47 -04:00
Metis 58b055dbad achievements but fat 2024-10-16 14:46:54 -04:00
Metis f0e5bd1acc mining point nerf 2024-10-16 14:13:15 -04:00
Metis de2126547e blacksmithing change 2024-10-16 14:11:13 -04:00
Metis 1d5774be1f Calorite Fix 2024-10-16 13:43:14 -04:00
Metis 5072c705a5 cleaning things up 2024-10-16 11:04:51 -04:00
ReoDaProtovali 209bd24bbb Finished.
Scrubbed out a few last bugs
2024-10-16 10:56:23 -04:00
ReoDaProtovali f3c684ad98 Almost complete.... 2024-10-16 10:56:05 -04:00
Metis 686feda59a Update tgstation.dme 2024-10-16 10:55:26 -04:00
ReoDaProtovali 1c1a157ee6 Not done. 2024-10-16 10:54:40 -04:00
Metis a6b831f2f6 Update tgstation.dme 2024-10-16 10:52:42 -04:00
ReoDaProtovali 3921328d1f done? 2024-10-16 10:52:13 -04:00
ReoDaProtovali ce1cf1d093 Plap 2024-10-16 10:49:35 -04:00
Metis bf5512db61 Update traits.dm 2024-10-16 10:47:27 -04:00
Metis 36d0b712f0 Update traits.dm 2024-10-16 10:46:17 -04:00
Metis f5a53e66b7 fixes perma fatness 2024-10-15 18:46:51 -04:00
silicons 77c1554bf7 Merge pull request #16105 from sheepishgoat/arcd-tweak
ARCD now comes with upgrades
2024-10-15 14:51:26 -07:00
Metis 75b717d7fa Merge remote-tracking branch 'upstream/master' 2024-10-15 13:22:30 -04:00
ReoDaProtovali b64aa10eb7 tipe 2024-10-15 13:03:41 -04:00
Metis 358fc16365 Merge remote-tracking branch 'upstream/master' 2024-10-15 12:51:58 -04:00
Metis c04d889e8b Update grinder_chemical.dm 2024-10-15 11:36:26 -04:00
Metis 0a3304223f Merge remote-tracking branch 'upstream/master' into chem-grinder-change 2024-10-15 11:29:47 -04:00
evilew 99732e0809 changing strings / reflavoring
- changed a lot of strings to remove some unfitting meta jokes or names
- changed some mentions of Nanotrasen to GATO
- added in GS specific Ion laws and brain traumas
2024-10-15 16:47:23 +02:00
evilew 688009dada readded 2 GS events
- readded fattening vent clog
- readded cargo snack attack
2024-10-15 15:17:49 +02:00
evilew 47d2d2bc79 small tweaks
- brought back fat jacqueen sprites
- added modular suits and flowers to loadouts
- nerfed electrical storms
2024-10-15 14:22:21 +02:00
SandPoot 0df0d30c82 Merge pull request #16104 from sheepishgoat/toast!
Ports over Toast
2024-10-15 03:19:27 -03:00
Metis 01841576cb Update grinder_chemical.dm 2024-10-15 01:21:42 -04:00
Metis 61b0b62f2d Update grinder_chemical.dm 2024-10-15 01:21:24 -04:00
Metis a28c282158 Update grinder_chemical.dm 2024-10-15 01:16:19 -04:00
Metis 52b9c3b246 Update grinder_chemical.dm 2024-10-15 01:15:09 -04:00
Metis 2b19d9084f needed emote 2024-10-15 01:07:10 -04:00
Metis 4800f35a3a Update traits.dm 2024-10-15 00:54:18 -04:00
Metis 2908fed991 Update stock_parts.dm 2024-10-15 00:46:11 -04:00
Metis a5e9ae8bc6 Update RCD.dm 2024-10-15 00:41:11 -04:00
Metis 04cb381e02 camera and arousal fixes 2024-10-15 00:36:18 -04:00
Metis 50e2d911a6 Update general.txt 2024-10-15 00:26:38 -04:00
SkyratBot 80e7c0db0a [MIRROR] Sends a toast notification when initializations complete. [MDB IGNORE] (#18623)
* Sends a toast notification when initializations complete. (#72465)

Initialization is significantly slowed down by the presence of clients,
though when testing features, you need to join the server. I've been
told that some devs (particularly Mothblocks) are alt-tabbed out of
Dream Daemon while doing dev work, meaning that they are liable to miss
initializations completing, causing an effective slowdown in the dev
cycle. Mothblocks said it would be nice if there was a way to produce a
desktop notification when initialization completes.

I originally intended to add a function to rust_g that would produce a
Windows toast notification with a button allowing you to immediately
launch Dream Seeker. However, I couldn't find a reliable way to detect
if the OS version was Windows 7 or earlier, so running this function on
such an OS would cause a rust panic (which I was told is only a problem
because MSO probably still uses Windows 7).

Fortunately, PowerShell scripts can access the necessary .NET APIs to
produce toast notifications on Windows 10, while also failing more
gracefully than crashing the host process. So I recreated the
functionality I intended in PowerShell.

Toast notifications will only be sent on Windows, if the
TOAST_NOTIFICATION_ON_INIT config flag is enabled, AND there are no
clients on the server.

**Note for downstreams:** If you want the toast notification to have
your downstream's icon, copy it, scale the copy down to 16x16, and
either rename it "tg_16.png" or change that path in the call to
`world.shelleo` to the name of the new file.

Video Demo:

https://user-images.githubusercontent.com/12720844/210492033-963923d7-a1de-4326-9c9f-4f0c0b71d1a5.mp4

This isn't really a line item in the Dev Cycles Initiative, but even if
Mothblocks was exaggerating the benefits, it would still be a
significant speedup in the dev cycles.

No player-facing changes.

* Sends a toast notification when initializations complete.

Co-authored-by: Y0SH1M4S73R <legoboyo@earthlink.net>
2024-10-15 00:25:48 -04:00
Metis f348b44bef ghost roles fix 2024-10-14 23:57:52 -04:00
sheepishgoat 007b5565ec Merge pull request #8 from AlManiak/feature/add-back-arousal
Feature/add back arousal
2024-10-14 20:18:47 -04:00
AlManiak 46e3de0d5e Enabled Adiposexual 2024-10-14 19:18:36 +02:00
AlManiak 81215db8ab Merge remote-tracking branch 'origin/master' into feature/add-back-arousal 2024-10-14 17:01:15 +02:00
AlManiak 2eb2659590 Fix for belly_visibility
Inflation added
cleanup of warnings
Fixed arousal hud genital visibility menu
2024-10-14 16:53:47 +02:00
AlManiak f7181a0aa8 Fixed genitals not producing reagents 2024-10-14 13:58:41 +02:00
sheepishgoat 5ee767d405 Merge pull request #7 from SeepingVisage/master
Fixing Belly Customization
2024-10-13 20:00:59 -04:00
SeepingVisage 77cc858a9f makes belly editing menu stylistically consistent
changes the order of a few items and makes it so that the belly displays its hex number. this is consistent with other genitals
2024-10-13 17:09:56 -04:00
SeepingVisage bcf67120a7 makes bellies 24-bit color instead of 12-bit
most bodily parts are 24-bit color now but belly color was still 12 bit.
2024-10-13 16:54:58 -04:00
AlManiak 854a0cf4b4 Initial commit of a working state 2024-10-13 22:48:31 +02:00
evilew 943dd90076 quick fix
typo
2024-10-13 19:21:04 +02:00
evilew 9209e1657c Merge pull request #6 from sheepishgoat/tweaks-and-fixes
tweaking event balance
2024-10-13 19:06:10 +02:00
evilew e073063399 tweaking event balance
- nerfed most disruptive events from happening, raising pop requirement
- stopped radstorms and heart attacks from occuring
- slightly buffed lighter or less destructive events
2024-10-13 14:53:10 +02:00
sheepishgoat 276b56363c Merge pull request #5 from Alphas00/master
Belly organ fix
2024-10-12 15:29:23 -04:00
Metis ea00b29d08 chem changes 2024-10-12 15:26:43 -04:00
Alphas00 984a9c1a1f Belly organ fix
Fixed error when intializing belly organs. Colors and size should now both work properly.
In the character setup menu, belly options have been aligned to the row of other organs (breasts, butts, etc)
2024-10-12 16:43:06 +02:00
Metis cea76b26ae Update preferences.dm 2024-10-11 16:56:11 -04:00
Metis 8dccea748e Update breasts.dm 2024-10-11 15:39:55 -04:00
Metis 0e3649bea5 I am dumb 2024-10-11 15:34:57 -04:00
Metis 2dfbda2d13 Merge branch 'master' of https://github.com/sheepishgoat/GS13-Citadel 2024-10-11 15:18:13 -04:00
Metis d38d160b41 strange rocks 2024-10-11 15:18:11 -04:00
evilew 694820001a Merge pull request #4 from sheepishgoat/tweaks-and-fixes
Tweaks and fixes
2024-10-11 20:59:56 +02:00
evilew 3d0064ce24 fixing windows/airlocks/walls smoothing
title
2024-10-11 20:42:19 +02:00
Metis cf1a9a28e7 synthliz gluttony 2024-10-11 01:29:11 -04:00
Metis aa2758eb94 examine text and custom breast reagent fix 2024-10-11 00:20:11 -04:00
Metis b3501ec2b1 ssd indicator 2024-10-10 19:43:07 -04:00
Metis 58828c3328 radio sounds 2024-10-10 19:37:09 -04:00
evilew 83cd479f88 windows, tendril loot
- readded karl's pickaxe
- readded GS necropolis loot
- added hyper windows
2024-10-11 00:35:55 +02:00
evilew 6e8577f732 sprite tweaks
- moved over hyper walls
- added delta plushie
- fixed some floors
2024-10-10 23:59:37 +02:00
Metis 7297f121cd radio 2024-10-10 16:57:05 -04:00
Metis 7b84b44f8c speeeeen! 2024-10-10 16:52:35 -04:00
Metis b915cdcbb5 Update economy.dm 2024-10-10 16:47:56 -04:00
Metis 2b8e805b5f ambience 2024-10-10 16:20:45 -04:00
Metis 1a8a067b14 Update gym.dm 2024-10-10 15:49:06 -04:00
Metis 15139d1e78 Update maps.dm 2024-10-10 12:30:11 -04:00
Metis 14d08124c8 fixxes 2024-10-10 12:25:01 -04:00
Metis 2d6f685f63 missing biogen chemicals 2024-10-10 11:11:42 -04:00
Metis 6494544bb8 normalizers and strong legs 2024-10-10 10:59:52 -04:00
Metis a836d7a172 Update nuclearbomb.dm 2024-10-09 18:32:32 -04:00
Metis 82a4c7c51f Update movespeed.txt 2024-10-09 18:21:58 -04:00
Metis f59536f369 Update preferences.dm 2024-10-09 17:56:18 -04:00
Metis 281af43a77 belly fix? 2024-10-09 16:23:40 -04:00
Metis b1afdedbf6 Update sheet_types.dm 2024-10-09 16:13:51 -04:00
Metis 1efba71b8e make stuff print right 2024-10-09 16:03:10 -04:00
evilew 641a1a2688 Merge pull request #3 from sheepishgoat/revert-2-maps-we-got-them
Revert "Maps we got them"
2024-10-09 20:20:46 +02:00
evilew 7db7bb6035 Revert "Maps we got them" 2024-10-09 20:20:32 +02:00
evilew e9726a607b Merge pull request #2 from sheepishgoat/maps-we-got-them
Maps we got them
2024-10-09 19:41:48 +02:00
evilew 897cc87fa3 TEMP COMMIT!! REVERT LATER!!
I had to commit real quick because I was running late for rebase tests. Revert this commit later if you wanna keep the old ver of Citadel Boxstation somewhere!! It gets replaced with GS13 version
2024-10-09 19:35:50 +02:00
evilew 93ca3c884d boxstation area fixes 2024-10-09 19:32:24 +02:00
Metis d20bf9ff41 update our icons 2024-10-08 22:18:49 -04:00
Metis fbf4b7162d Merge branch 'master' of https://github.com/sheepishgoat/GS13-Citadel 2024-10-08 22:05:50 -04:00
Metis 9744da9e8e Update recipes.dm 2024-10-08 22:05:43 -04:00
sheepishgoat 7fc87cbc2d Merge pull request #1 from sheepishgoat/mapping-tweaks
config tweaks
2024-10-08 21:51:48 -04:00
evilew cb5cba673b Revert "gs13 maps port"
This reverts commit f16e6cc3a6.
2024-10-08 23:12:55 +02:00
Metis b25981f15d crafting 2024-10-08 00:26:39 -04:00
Metis 37d759f980 more 2024-10-02 22:33:55 -04:00
Metis 8b9d8b39b4 more map changes 2024-10-02 10:26:04 -04:00
Metis 6ec8354320 map stuff 2024-10-01 22:11:45 -04:00
evilew f16e6cc3a6 gs13 maps port
- meta and box are fixed in this commit, however they will still need a lot more fixing
2024-09-30 15:21:02 +02:00
SandPoot b65df409d7 that was weird 2024-09-29 17:11:32 -03:00
SandPoot b0dd5b48ed uh oh 2024-09-25 03:42:51 -03:00
SandPoot a6ff3a5d95 Merge branch 'master' of https://github.com/Citadel-Station-13/Citadel-Station-13 into this-is-a-feature-but-was-left-in-an-unusable-state 2024-09-25 03:39:20 -03:00
deathride58 3646a45b17 Merge pull request #16103 from SandPoot/fix-build-stuff
Fix CI
2024-09-24 22:13:37 -04:00
evilew 9950e38d03 doing stuff with title screens + configs 2024-09-24 22:26:57 +02:00
evilew bced8089c5 config tweaks
probably might make things more confusing but some of these things are just universally better used by default
2024-09-24 21:54:27 +02:00
evilew 3d27360022 respawning config tweaks
not quite the full thing but yeah
2024-09-24 21:15:28 +02:00
evilew 4460aa6dcd path change 2024-09-24 21:07:18 +02:00
SandPoot 0fadeeb580 bur 2024-09-19 17:58:22 -03:00
deathride58 94067bdc62 Merge pull request #16100 from SandPoot/fix-ntnet
Fix ntnet
2024-09-19 13:47:14 -04:00
SandPoot 19c436e994 push 2024-09-17 16:52:54 -03:00
SandPoot e46b75c68e push 2024-08-24 23:55:01 -03:00
deathride58 6de44caeed throttles mouse movement calls 2024-04-12 21:55:07 -04:00
912 changed files with 3903674 additions and 742689 deletions
+19 -24
View File
@@ -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-20.04
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
- name: Restore SpacemanDMM cache
uses: actions/cache@v2
uses: actions/cache@v4
with:
path: ~/SpacemanDMM
key: ${{ runner.os }}-spacemandmm-${{ secrets.CACHE_PURGE_KEY }}
- name: Restore Yarn cache
uses: actions/cache@v2
uses: actions/cache@v4
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
pip3 install setuptools --upgrade
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-20.04
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
- name: Restore BYOND cache
uses: actions/cache@v2
uses: actions/cache@v4
with:
path: ~/BYOND
key: ${{ runner.os }}-byond-${{ secrets.CACHE_PURGE_KEY }}
@@ -66,11 +66,10 @@ 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-20.04
runs-on: ubuntu-22.04
services:
mysql:
image: mysql:latest
@@ -80,14 +79,14 @@ jobs:
- 3306
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
- name: Restore BYOND cache
uses: actions/cache@v2
uses: actions/cache@v4
with:
path: ~/BYOND
key: ${{ runner.os }}-byond-${{ secrets.CACHE_PURGE_KEY }}
- name: Restore Yarn cache
uses: actions/cache@v2
uses: actions/cache@v4
with:
path: tgui/.yarn/cache
key: ${{ runner.os }}-yarn-${{ secrets.CACHE_PURGE_KEY }}-${{ hashFiles('tgui/yarn.lock') }}
@@ -104,9 +103,6 @@ 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: |
@@ -118,15 +114,14 @@ 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@v2
- uses: actions/checkout@v4
- name: Restore Yarn cache
uses: actions/cache@v2
uses: actions/cache@v4
with:
path: tgui/.yarn/cache
key: ${{ runner.os }}-yarn-${{ secrets.CACHE_PURGE_KEY }}-${{ hashFiles('tgui/yarn.lock') }}
@@ -143,7 +138,7 @@ jobs:
md deploy
bash tools/deploy.sh ./deploy
- name: Deploy artifact
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: deploy
path: deploy
@@ -0,0 +1,31 @@
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
+1 -1
View File
@@ -11,7 +11,7 @@ jobs:
name: Update the TGS DMAPI
steps:
- name: Clone
uses: actions/checkout@v2
uses: actions/checkout@v4
- name: Branch
run: |
+1 -1
View File
@@ -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/tgs_scripts/PreCompile.bat
PreCompile.bat: tools/tgs4_scripts/PreCompile.bat
# The security level the game should be run at
security: Trusted
+14
View File
@@ -7,6 +7,13 @@
"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",
@@ -45,6 +52,13 @@
"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}"
}
]
}
+51
View File
@@ -24,6 +24,31 @@
"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",
@@ -74,6 +99,32 @@
],
"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",
@@ -0,0 +1 @@
#define GAS_FAT "lipoifium"
@@ -0,0 +1 @@
GLOBAL_LIST_INIT(genital_fluids_list, list("Milk", "Water", "Semen", "Femcum", "Honey", "Strawberry Milk", "Nutriment", "Berry Juice"))
@@ -0,0 +1,57 @@
/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
@@ -0,0 +1,198 @@
/obj/item/clothing/neck/petcollar/locked/bluespace_collar_receiver
name = "Bluespace collar receiver"
desc = "A collar containing a miniaturized bluespace whitehole. Other bluespace transmitter collars can connect to this, causing the wearer to receive food from other transmitter collars directly into the stomach. "
slot_flags = ITEM_SLOT_NECK
var/mob/living/carbon/victim = 0
/obj/item/clothing/neck/petcollar/locked/bluespace_collar_receiver/equipped(mob/user, slot)
. = ..()
var/mob/living/carbon/wearer = user
if(!iscarbon(wearer) || slot !=ITEM_SLOT_NECK || !wearer?.client?.prefs?.weight_gain_items)
return FALSE
victim = user;
/obj/item/clothing/neck/petcollar/locked/bluespace_collar_receiver/dropped(mob/user)
. = ..()
var/mob/living/carbon/wearer = user
if(!iscarbon(wearer) || !(wearer.get_item_by_slot(ITEM_SLOT_NECK) == src) || !wearer?.client?.prefs?.weight_gain_items)
return FALSE
victim = 0
/obj/item/clothing/neck/petcollar/locked/bluespace_collar_receiver/proc/isworn()
if(istype(victim, /mob/living/carbon))
return TRUE
else
return FALSE
/obj/item/clothing/neck/petcollar/locked/bluespace_collar_receiver/attackby(obj/item/clothing/neck/petcollar/locked/bluespace_collar_transmitter/K, mob/user, params)
if(istype(K, /obj/item/clothing/neck/petcollar/locked/bluespace_collar_transmitter))
K.linked_receiver = src
var/mob/living/carbon/U = user
to_chat(U, "<span class='notice'>You link the bluespace collar with the other transmitter</span>")
. = ..()
return
/obj/item/clothing/neck/petcollar/locked/bluespace_collar_transmitter
name = "Bluespace collar transmitter"
desc = "A collar containing a miniaturized bluespace blackhole. Can be connected to a bluespace collar receiver to transmit food to a linked receiver collar. "
slot_flags = ITEM_SLOT_NECK
var/obj/item/clothing/neck/petcollar/locked/bluespace_collar_receiver/linked_receiver = 0
/obj/item/clothing/neck/petcollar/locked/bluespace_collar_transmitter/equipped(mob/user, slot)
. = ..()
var/mob/living/carbon/wearer = user
if(!iscarbon(wearer) || slot !=ITEM_SLOT_NECK || !wearer?.client?.prefs?.weight_gain_items)
return FALSE
/obj/item/clothing/neck/petcollar/locked/bluespace_collar_transmitter/dropped(mob/user)
. = ..()
var/mob/living/carbon/wearer = user
if(!iscarbon(wearer) || !(wearer.get_item_by_slot(ITEM_SLOT_NECK) == src) || !wearer?.client?.prefs?.weight_gain_items)
return FALSE
/obj/item/clothing/neck/petcollar/locked/bluespace_collar_transmitter/attackby(obj/item/K, mob/user, params)
if(istype(K, /obj/item/clothing/neck/petcollar/locked/bluespace_collar_receiver))
linked_receiver = K
var/mob/living/carbon/U = user
to_chat(U, "<span class='notice'>You link the bluespace collar to the other receiver</span>")
. = ..()
return
/obj/item/clothing/neck/petcollar/locked/bluespace_collar_transmitter/proc/islinked()
if (linked_receiver && linked_receiver.isworn())
return TRUE
else
return FALSE
// For food
/obj/item/clothing/neck/petcollar/locked/bluespace_collar_transmitter/proc/transpose_food(obj/item/reagent_containers/food/snacks/owner, mob/living/original_eater, mob/living/feeder)
if (!islinked())
return FALSE
var/mob/living/carbon/human/eater = linked_receiver.victim
if(owner.reagents)
if(eater.satiety > -200)
eater.satiety -= owner.junkiness
playsound(eater.loc,'sound/items/eatfood.ogg', rand(10,50), 1)
playsound(original_eater.loc,'sound/items/eatfood.ogg', rand(10,50), 1)
eater.visible_message("<span class='warning'>[eater]'s belly seems to visibly distend a bit further'!</span>", "<span class='danger'>You feel your stomach get filled by food!</span>")
var/bitevolume = 1
if(HAS_TRAIT(original_eater, TRAIT_VORACIOUS))
bitevolume = bitevolume * 0.67
var/mob/living/carbon/human/human_eater = eater
if(istype(human_eater))
human_eater.fullness += bitevolume;
if(owner.reagents.total_volume)
SEND_SIGNAL(owner, COMSIG_FOOD_EATEN, eater, feeder)
var/fraction = min(owner.bitesize / owner.reagents.total_volume, 1)
owner.reagents.reaction(eater, INGEST, fraction)
owner.reagents.trans_to(eater, owner.bitesize, log = TRUE)
owner.bitecount++
owner.On_Consume(eater)
owner.checkLiked(fraction, original_eater)
return TRUE
// For the alternative edible functionality
/obj/item/clothing/neck/petcollar/locked/bluespace_collar_transmitter/proc/transpose_edible(datum/component/edible/foodstuff, mob/living/original_eater, mob/living/feeder)
if (!islinked())
return FALSE
var/atom/owner = foodstuff.parent
var/mob/living/carbon/human/eater = linked_receiver.victim
if(!owner?.reagents)
return FALSE
if(eater.satiety > -200)
eater.satiety -= foodstuff.junkiness
playsound(original_eater.loc,'sound/items/eatfood.ogg', rand(10,50), TRUE)
playsound(eater.loc,'sound/items/eatfood.ogg', rand(10,50), TRUE)
eater.visible_message("<span class='warning'>[eater]'s belly seems to visibly distend a bit further'!</span>", "<span class='danger'>You feel your stomach get filled by something!</span>")
var/mob/living/carbon/human/human_eater = original_eater
if(istype(human_eater))
var/bitevolume = 1
if(HAS_TRAIT(human_eater, TRAIT_VORACIOUS))
bitevolume = bitevolume * 0.67
if(istype(eater))
eater.fullness += bitevolume;
if(owner.reagents.total_volume)
SEND_SIGNAL(foodstuff.parent, COMSIG_FOOD_EATEN, eater, original_eater)
var/fraction = min(foodstuff.bite_consumption / owner.reagents.total_volume, 1)
owner.reagents.reaction(eater, INGEST, fraction)
owner.reagents.trans_to(eater, foodstuff.bite_consumption)
foodstuff.bitecount++
foodstuff.On_Consume(eater)
foodstuff.checkLiked(fraction, original_eater)
//Invoke our after eat callback if it is valid
if(foodstuff.after_eat)
foodstuff.after_eat.Invoke(eater, feeder)
return TRUE
// For Drinks
/obj/item/clothing/neck/petcollar/locked/bluespace_collar_transmitter/proc/transpose_drink(obj/item/reagent_containers/food/drinks/owner, mob/living/original_eater)
if (!islinked())
return FALSE
var/mob/living/carbon/human/eater = linked_receiver.victim
var/fraction = min(owner.gulp_size/owner.reagents.total_volume, 1)
owner.checkLiked(fraction, eater)
owner.reagents.reaction(eater, INGEST, fraction)
owner.reagents.trans_to(eater, owner.gulp_size, log = TRUE)
//GS13 Port - Fullness
if(iscarbon(eater))
var/mob/living/carbon/human/human_eater = eater
var/mob/living/carbon/human/human_original_eater = original_eater
if(HAS_TRAIT(human_original_eater, TRAIT_VORACIOUS))
human_eater.fullness += min(owner.gulp_size * 0.67, owner.reagents.total_volume * 0.67)
else
human_eater.fullness += min(owner.gulp_size, owner.reagents.total_volume) // GS13 drinks will fill your stomach
playsound(original_eater.loc,'sound/items/drink.ogg', rand(10,50), 1)
playsound(eater.loc,'sound/items/drink.ogg', rand(10,50), 1)
eater.visible_message("<span class='warning'>[eater]'s belly seems to visibly distend a bit further, emitting an audible sloshing noise!</span>", "<span class='danger'>You feel your stomach get filled by liquid, hearing sloshing noises coming from within!</span>")
return TRUE
// For containers
/obj/item/clothing/neck/petcollar/locked/bluespace_collar_transmitter/proc/transpose_container(var/datum/reagents/reagents , fraction, mob/M, mob/user)
if (!islinked())
return FALSE
var/mob/living/carbon/human/eater = linked_receiver.victim
var/self_fed = M == user
reagents.reaction(eater, INGEST, fraction)
addtimer(CALLBACK(reagents, TYPE_PROC_REF(/datum/reagents, trans_to), eater, 5, null, null, null, self_fed? "self swallowed" : "fed by [user]"), 5)
eater.visible_message("<span class='warning'>[eater]'s belly seems to visibly distend a bit further, emitting an audible sloshing noise!</span>", "<span class='danger'>You feel your stomach get filled by liquid, hearing sloshing noises coming from within!</span>")
return TRUE
// For industrial feeding tube
/obj/item/clothing/neck/petcollar/locked/bluespace_collar_transmitter/proc/transpose_industrial_feeding(obj/item/reagent_containers/food/snacks/food, datum/reagents/food_reagents, mob/living/original_eater)
if (!islinked())
return FALSE
var/mob/living/carbon/human/eater = linked_receiver.victim
var/food_size = food_reagents.total_volume //We're cramming the Whole Thing down your throat~
food_reagents.reaction(eater, INGEST, food_size)
food_reagents.trans_to(eater, food_size)
eater.fullness += food_size
food.checkLiked(food_size, eater) //...Hopefully you like the taste.
eater.visible_message("<span class='warning'>[eater]'s belly seems to greatly distend, as if it was being inflated with large amounts of food.</span>", "<span class='danger'>You feel an immense pressure in your stomach, as if large amounts of food were pumped directly into you.</span>")
return TRUE
// For feeding tube
/obj/item/clothing/neck/petcollar/locked/bluespace_collar_transmitter/proc/transpose_feeding(transfer_amount, var/obj/item/reagent_containers/beaker, mob/living/original_eater)
if (!islinked())
return FALSE
var/mob/living/carbon/human/eater = linked_receiver.victim
var/fraction = min(transfer_amount/beaker.reagents.total_volume, 1) //the fraction that is transfered of the total volume
beaker.reagents.reaction(eater, INJECT, fraction, FALSE) //make reagents reacts, but don't spam messages
beaker.reagents.trans_to(eater, transfer_amount)
eater.fullness += transfer_amount //Added feeding tube's causing fullness (But ignores limits~)
if(prob(10))
eater.visible_message("<span class='warning'>[eater]'s belly seems to visibly distend, emitting an audible sloshing noise!</span>", "<span class='danger'>You feel your stomach get pumped full with liquid, hearing sloshing noises coming from within!</span>")
return TRUE
/obj/item/clothing/neck/petcollar/locked/bluespace_collar_transmitter/attack_self(mob/user)
linked_receiver = 0
var/mob/living/carbon/U = user
to_chat(U, "<span class='notice'>You remove the currently linked receiver collar from the buffer</span>")
. = ..()
+3
View File
@@ -2,8 +2,11 @@
name = "drone mask"
desc = "A mask that can be connected to an air supply. When seen from certain angles, an orange light is reflected by it."
icon = 'GainStation13/icons/obj/clothing/fat_mask.dmi'
mob_overlay_icon = 'GainStation13/icons/mob/mask.dmi'
anthro_mob_worn_overlay = 'GainStation13/icons/mob/mask.dmi'
icon_state = "fat_mask"
item_state = "fat_mask"
mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON
var/mob/living/carbon/C
/obj/item/clothing/mask/gas/fattening/equipped(mob/M, slot)
+15
View File
@@ -0,0 +1,15 @@
// 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
+2 -2
View File
@@ -4,7 +4,6 @@
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
@@ -13,11 +12,12 @@
/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" = 10, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 10, "bio" = 0, "rad" = 25, "fire" = 25, "acid" = 25)
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 25, "fire" = 5, "acid" = 5)
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
+14
View File
@@ -0,0 +1,14 @@
/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
+9
View File
@@ -0,0 +1,9 @@
/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
@@ -0,0 +1,46 @@
/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
@@ -0,0 +1,31 @@
// 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
@@ -39,7 +39,7 @@
M.reagents.add_reagent(infection_reagent, max(A.totalStageSpeed(), 1))
/obj/item/reagent_containers/glass/attack(mob/M, mob/user, obj/target)
if(M.reagents.get_reagent_amount(/datum/reagent/blueberry_juice) > 0 && (reagents.total_volume + min(amount_per_transfer_from_this, 10)) <= volume)
if(M.reagents && M.reagents.get_reagent_amount(/datum/reagent/blueberry_juice) > 0 && (reagents.total_volume + min(amount_per_transfer_from_this, 10)) <= volume)
reagents.add_reagent(/datum/reagent/blueberry_juice, min(10, amount_per_transfer_from_this))
M.reagents.remove_reagent(/datum/reagent/blueberry_juice, min(10, amount_per_transfer_from_this))
if(M != user)
@@ -31,3 +31,11 @@
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
@@ -0,0 +1,13 @@
/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
@@ -0,0 +1,178 @@
/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)
+100
View File
@@ -19,6 +19,15 @@
value = -1
medical_record_text = "Patient's legs seem to lack strength"
/datum/quirk/strong_legs //GS13
name = "Strong Legs"
desc = "Your body is able to handle heavier sizes very well."
value = 2
mob_trait = TRAIT_STRONGLEGS
gain_text = "<span class='notice'>You feel like you can carry more weight.</span>"
lose_text = "<span class='notice'>Your legs cannot bear heavier loads anymore.</span>"
medical_record_text = "Patient exhibits increased muscle strength in their legs."
/datum/quirk/draconicspeaker
name = "Draconic speaker"
desc = "Due to your time spent around lizards, you can speak Draconic!"
@@ -48,3 +57,94 @@
/datum/quirk/slimespeaker/remove()
var/mob/living/M = quirk_holder
M?.remove_language(/datum/language/slime)
/datum/quirk/SpawnWithWheelchair
name = "Mobility Assistance"
desc = "After your last failed fitness test, you were advised to start using a hoverchair"
/datum/quirk/SpawnWithWheelchair/on_spawn()
if(quirk_holder.buckled) // Handle late joins being buckled to arrival shuttle chairs.
quirk_holder.buckled.unbuckle_mob(quirk_holder)
var/turf/T = get_turf(quirk_holder)
var/obj/structure/chair/spawn_chair = locate() in T
var/obj/vehicle/ridden/wheelchair/wheels = new(T)
if(spawn_chair) // Makes spawning on the arrivals shuttle more consistent looking
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
+28
View File
@@ -36,3 +36,31 @@
/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"
+37 -123
View File
@@ -1,89 +1,18 @@
//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")
//
//item presets for donator items and other gunk
//
/obj/item/clothing/glasses/eyepatch/white
icon ='GainStation13/icons/obj/clothing/glasses.dmi'
mob_overlay_icon = 'GainStation13/icons/mob/eyes.dmi'
name = "White eyepatch"
desc = "Smells faintly of medicine and headaches."
icon_state = "eyepatch_white"
item_state = "eyepatch_white"
/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/clothing/glasses/eyepatch/white/cabal
name = "Cabal's Eyepatch"
desc = "Vulpine sluts only."
/obj/item/toy/sword/chloesabre/halsey
name = "Halsey's Sabre"
@@ -94,46 +23,31 @@
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
/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/wgspell_add
name = "Weight Gain Spellbook"
category = LOADOUT_SUBCATEGORY_BACKPACK_TOYS
path = /obj/item/book/granter/spell/fattening
ckeywhitelist = list("sonoida", "themrsky", "Not Number")
/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
/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")
/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)
/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")
/obj/item/crowbar/bronze/glaug
name = "Milwaukee Pocket Crowbar"
desc = "Much more expensive. Still serves the same function."
/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
/obj/item/clothing/glasses/eyepatch/white
name = "White eyepatch"
desc = "Smells faintly of medicine and headaches."
icon_state = "eyepatch_white"
item_state = "eyepatch_white"
/obj/item/clothing/glasses/eyepatch/cabal
name = "Cabal's Eyepatch"
desc = "Vulpine sluts only."
icon_state = "eyepatch_white"
item_state = "eyepatch_white"
+63
View File
@@ -549,3 +549,66 @@
</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 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."
@@ -0,0 +1,18 @@
//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,3 +63,101 @@
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,3 +20,74 @@
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"
+2 -2
View File
@@ -3,7 +3,7 @@
desc = "A tool that can construct and deconstruct walls, airlocks and floors on the fly. This model works at a distance."
id = "arcd_design"
build_type = PROTOLATHE
materials = list(/datum/material/iron = MINERAL_MATERIAL_AMOUNT, /datum/material/glass = MINERAL_MATERIAL_AMOUNT, /datum/material/diamond = 500, MAT_BLUESPACE = 500) // costs more than what it did in the autolathe, this one comes loaded.
materials = list(/datum/material/iron = MINERAL_MATERIAL_AMOUNT, /datum/material/glass = MINERAL_MATERIAL_AMOUNT, /datum/material/diamond = 500, /datum/material/bluespace = 500) // costs more than what it did in the autolathe, this one comes loaded.
build_path = /obj/item/construction/rcd/arcd
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
@@ -41,6 +41,6 @@
id = "borg_arcd"
build_type = MECHFAB
build_path = /obj/item/borg/upgrade/arcd
materials = list(/datum/material/iron = MINERAL_MATERIAL_AMOUNT, /datum/material/glass = MINERAL_MATERIAL_AMOUNT, /datum/material/diamond = 500, MAT_BLUESPACE = 500)
materials = list(/datum/material/iron = MINERAL_MATERIAL_AMOUNT, /datum/material/glass = MINERAL_MATERIAL_AMOUNT, /datum/material/diamond = 500, /datum/material/bluespace = 500)
construction_time = 100
category = list("Cyborg Upgrade Modules")
@@ -0,0 +1,7 @@
////////////// 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."
@@ -0,0 +1,13 @@
//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)
+26 -6
View File
@@ -1,8 +1,8 @@
/obj/item/toy/plush/gs13
icon = 'icons/obj/plushes.dmi'
icon = 'GainStation13/icons/obj/plushes.dmi'
/obj/item/toy/plush/gs13/metha
name = "Magical Captain plush/gs13ie"
name = "Magical Captain plushie"
desc = "A NEW GATO TOY FROM GATO CORPORATION, FEEL THE MAGIC OF THIS COOL TOY!"
icon_state = "metha"
attack_verb = list("fattened","Metha'd", "Brigged")
@@ -45,24 +45,44 @@
squeak_override = list('modular_citadel/sound/voice/weh.ogg' = 1)
/obj/item/toy/plush/gs13/kinichi
desc = "A silly looking plush/gs13ie of an adorable lizard janitor. His smile is heartwarming to look at."
desc = "A silly looking plushie of an adorable lizard janitor. His smile is heartwarming to look at."
icon_state = "kinichi"
attack_verb = list("hissed","squished", "hugged")
/obj/item/toy/plush/gs13/lgo
desc = "An attempt to market one of cleaning machines from the local market, in the form of a purchasable plush/gs13ie."
desc = "An attempt to market one of cleaning machines from the local market, in the form of a purchasable plushie."
icon_state = "lgo"
attack_verb = list("gronkled","beeped", "brushed")
/obj/item/toy/plush/gs13/oliver
desc = "A plush/gs13 of a silly shark with a stylish bandanna."
desc = "A plush of a silly shark with a stylish bandanna."
icon_state = "oliver"
attack_verb = list("chomped", "bit")
/obj/item/toy/plush/gs13/chloe
desc = "A plush/gs13 of a chunky red-haired botanist."
desc = "A plush of a chunky red-haired botanist."
icon_state = "chloe"
attack_verb = list("squished", "hugged", "smushed")
/obj/item/toy/plush/gs13/mammal/fox
icon_state = "fox"
/obj/item/toy/plush/gs13/delta
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")
/obj/item/toy/plush/gs13/sharky
desc = "A plush of a toothy, sharky creature."
icon_state = "sharky"
attack_verb = list("squished", "bit", "sharkied")
+28 -15
View File
@@ -1,7 +1,7 @@
/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)
/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)
if(isarea(source))
throw EXCEPTION("playsound(): source is an area")
return
CRASH("playsound(): source is an area")
var/turf/turf_source = get_turf(source)
@@ -9,29 +9,42 @@
return
//allocate a channel if necessary now so its the same for everyone
channel = channel //|| open_sound_channel()
channel = channel || SSsounds.random_available_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 = (world.view + extrarange)
var/z = turf_source.z
var/list/listeners = SSmobs.clients_by_zlevel[z]
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)
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, channel, pressure_affected, S, soundenvwet, soundenvdry)
for(var/P in SSmobs.dead_players_by_zlevel[z])
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])
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, channel, pressure_affected, S, soundenvwet, soundenvdry)
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)
+2 -2
View File
@@ -16,12 +16,12 @@
/turf/closed/indestructible/candy
name = "Candy wall"
desc = "Despite being made out of mere candy, this wall is harder than stone!"
icon = 'Gainstation13/icons/turf/wall_candy.dmi'
icon = 'Gainstation13/icons/turf/walls/wall_candy.dmi'
icon_state = "candywall"
/turf/closed/indestructible/chocolate
name = "Chocolate wall"
desc = "Somehow, it doesn't melt at all..."
icon = 'Gainstation13/icons/turf/wall_candy.dmi'
icon = 'Gainstation13/icons/turf/walls/wall_candy.dmi'
icon_state = "choco_wall1"
@@ -0,0 +1,88 @@
//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)
+10 -3
View File
@@ -62,10 +62,17 @@
if(beaker)
if(mode)
if(beaker.reagents.total_volume)
// Check to see if the person is wearing a bluespace collar
var/obj/item/clothing/neck/petcollar/locked/bluespace_collar_transmitter/K = 0
if(istype(attached, /mob/living/carbon/human))
var/mob/living/carbon/human/human_eater = attached
K = human_eater.wear_neck
var/transfer_amount = 5
var/fraction = min(transfer_amount/beaker.reagents.total_volume, 1) //the fraction that is transfered of the total volume
beaker.reagents.reaction(attached, INJECT, fraction, FALSE) //make reagents reacts, but don't spam messages
beaker.reagents.trans_to(attached, transfer_amount)
if (!(istype(K, /obj/item/clothing/neck/petcollar/locked/bluespace_collar_transmitter) && K.transpose_feeding(transfer_amount, beaker, attached))) //If wearing a BS collar, use BS proc. If not, continue as normal
var/fraction = min(transfer_amount/beaker.reagents.total_volume, 1) //the fraction that is transfered of the total volume
beaker.reagents.reaction(attached, INJECT, fraction, FALSE) //make reagents reacts, but don't spam messages
beaker.reagents.trans_to(attached, transfer_amount)
attached.fullness += transfer_amount //Added feeding tube's causing fullness (But ignores limits~)
update_icon()
else if(!beaker.reagents.total_volume && istype(beaker, /obj/item/reagent_containers/food))
@@ -0,0 +1,525 @@
/**
* 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)
// Check to see if the person is wearing a bluespace collar
var/obj/item/clothing/neck/petcollar/locked/bluespace_collar_transmitter/K = 0
if(istype(attached, /mob/living/carbon/human))
var/mob/living/carbon/human/human_eater = attached
K = human_eater.wear_neck
if (!(istype(K, /obj/item/clothing/neck/petcollar/locked/bluespace_collar_transmitter) && K.transpose_industrial_feeding(food, food_reagents, attached))) //If wearing a BS collar, use BS proc. If not, continue as normal
food_reagents.reaction(attached, INGEST, food_size)
food_reagents.trans_to(attached, food_size)
if(istype(attached, /mob/living/carbon/human))
var/mob/living/carbon/human/human_eater = attached
human_eater.fullness += food_size //Added industrial feeding tube's causing fullness (But ignores limits~)
food.checkLiked(food_size, attached) //...Hopefully you like the taste.
if(food.trash) //Lets make the trash the food's supposed to make, if it has any
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)
+33 -4
View File
@@ -1,6 +1,28 @@
/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
@@ -14,6 +36,7 @@
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"
@@ -25,17 +48,21 @@
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("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("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),\
))
/obj/item/stack/sheet/mineral/calorite/Initialize(mapload, new_amount, merge = TRUE)
recipes = GLOB.calorite_recipes
/obj/item/stack/sheet/mineral/calorite/get_main_recipes()
. = ..()
. += GLOB.calorite_recipes
/obj/item/stack/tile/mineral/calorite //GS13
@@ -242,3 +269,5 @@ GLOBAL_LIST_INIT(calorite_recipes, list ( \
fatten()
. = ..()
/obj/item/ingot/calorite
custom_materials = list(/datum/material/calorite=1500)
@@ -26,7 +26,7 @@
var/credits = linked_scale?.credits
dat += "Gear Credits: [credits] <br>"
dat += "<b>Transfer credits in exchange for supplies:</b><br>"
dat += "<b>Transfer credits in exchange for supplies:</b><br>"
for(var/goodie in subtypesof(/datum/feeders_den_goodie))
var/datum/feeders_den_goodie/temp_goodie = new goodie()
dat += "<a href='?src=[REF(src)];dispense=[goodie]'>[temp_goodie.name] (Cost: [temp_goodie.credit_cost])</A><br>"
@@ -64,7 +64,7 @@
say("Unable to purchase more!")
return FALSE
if(!Dispense(item_path, price))
if(!Dispense(item_path, price))
return FALSE
if(buy_counts[goodie_datum.name] == null)
@@ -146,7 +146,7 @@
return TRUE
return ..()
/obj/structure/scale/credits
name = "tracking scale"
desc = "A upgraded scale that tracks to weight of all of those that have stepped on it. Using this will add credits to the feeder console"
@@ -155,7 +155,7 @@
/// How much credits do we currently have?
var/credits = 0
/// How many credits are we going to reward per pound gained?
var/credits_per_fatness = 0.25
var/credits_per_fatness = 0.25
/// A list containing all of the people we've scanned and their maximum weight.
var/list/scanned_people = list()
/// What is the current team number?
@@ -201,7 +201,7 @@
var/credit_total = max((credits_to_add - credits_to_remove), 0)
if(credit_total > 0)
say("[credit_total] credits have been deposited into the console.")
credits += credit_total
scanned_people[fatty] += credit_total
@@ -214,6 +214,7 @@
team_number = 27
vest_mode_action = null
vest_disguise_action = null
check_if_abductor = FALSE
/obj/machinery/computer/camera_advanced/abductor/feeder/IsScientist(mob/living/carbon/human/H)
return TRUE
@@ -245,4 +246,4 @@
prepare(target,user)
return TRUE
+42 -8
View File
@@ -1,4 +1,7 @@
GLOBAL_LIST_INIT(uncapped_resize_areas, list(/area/command/bridge, /area/maintenance, /area/security/prison, /area/holodeck, /area/commons/vacant_room/office, /area/space, /area/ruin, /area/lavaland, /area/awaymission, /area/centcom, /area/fatlab))
GLOBAL_LIST_INIT(uncapped_resize_areas, list(/area/command/bridge, /area/maintenance, /area/security/prison, /area/holodeck, /area/commons/vacant_room/office, /area/space, /area/ruin, /area/lavaland, /area/awaymission, /area/centcom, /area/fatlab, /area/xenoarch))
/mob/living
var/burpslurring = 0 //GS13 - necessary due to "say" being defined by mob/living
/mob/living/carbon
//Due to the changes needed to create the system to hide fatness, here's some notes:
@@ -21,10 +24,7 @@ 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
var/burpslurring = 0
var/fullness_reducion_timer = 0 // When was the last time they emoted to reduce their fullness
var/fullness_reduction_timer = 0 // When was the last time they emoted to reduce their fullness
/**
* Adjusts the fatness level of the parent mob.
@@ -60,6 +60,25 @@ 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)
@@ -76,6 +95,9 @@ 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
@@ -104,6 +126,10 @@ 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
@@ -190,9 +216,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_BIG) //check if the size needs capping otherwise don't bother searching the list
if(xwg_size > RESIZE_A_HUGEBIG) //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_BIG
xwg_size = RESIZE_A_HUGEBIG
resize(xwg_size)
/proc/get_fatness_level_name(fatness_amount)
@@ -207,7 +233,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 "Morbidly Obese"
return "Very Obese"
if(fatness_amount < FATNESS_LEVEL_BARELYMOBILE)
return "Extremely Obese"
if(fatness_amount < FATNESS_LEVEL_IMMOBILE)
@@ -251,3 +277,11 @@ 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
+3 -3
View File
@@ -16,14 +16,14 @@
var/mob/living/carbon/C = quirk_holder
C.hider_remove(src)
/*
/datum/quirk/fatrousal/proc/fat_hide(var/mob/living/carbon/user)
if(iscarbon(quirk_holder))
var/mob/living/carbon/C = quirk_holder
return C.getArousalLoss()*35
return C.getArousal()*35
return FALSE
*/
///mob/living/adjust_arousal(amount, updating_arousal=1)
// if(HAS_TRAIT(src, TRAIT_FATROUSAL))
@@ -0,0 +1,28 @@
/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)
. = ..()
+8 -3
View File
@@ -5,16 +5,21 @@
return ..()
/datum/species/can_equip(obj/item/I, slot, disable_warning, mob/living/carbon/human/H, bypass_equip_delay_self)
if(HAS_TRAIT(H, TRAIT_NO_BACKPACK) && slot ==ITEM_SLOT_BACK)
if(!istype(I, /obj/item/mod) && 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(!istype(I, /obj/item/clothing/under/color/grey/modular) && HAS_TRAIT(H, TRAIT_NO_JUMPSUIT) && slot == ITEM_SLOT_ICLOTHING)
if(I.modular_icon_location == null && 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(HAS_TRAIT(H, TRAIT_NO_MISC) && (slot == ITEM_SLOT_FEET || slot ==ITEM_SLOT_GLOVES || slot == ITEM_SLOT_OCLOTHING))
if(!mod_check(I) && 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
+33 -9
View File
@@ -2,10 +2,10 @@
var/savekey
var/ckeyslot
/mob/living/carbon/proc/perma_fat_save(mob/living/carbon/character)
/mob/living/carbon/proc/perma_fat_save()
var/key = savekey
if(!key)
return FALSE
if(!key || !client)
return FALSE
var/filename = "preferences.sav"
var/path = "data/player_saves/[key[1]]/[key]/[filename]"
@@ -13,18 +13,42 @@
if(!path)
return FALSE
if(character.ckeyslot)
var/slot = character.ckeyslot
if(ckeyslot)
var/slot = ckeyslot
S.cd = "/character[slot]"
var/persi
S["weight_gain_persistent"] >> persi
if(persi)
WRITE_FILE(S["starting_weight"] , character.fatness_real)
var/perma
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
S["weight_gain_permanent"] >> perma
if(S["weight_gain_permanent"])
WRITE_FILE(S["permanent_fat"] , character.fatness_perma)
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)
. = ..()
/*
/datum/preferences/proc/perma_fat_save(character)
@@ -45,7 +69,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)
+11 -1
View File
@@ -2,4 +2,14 @@
name = "Calorite dance floor"
result = /obj/item/stack/tile/mineral/calorite/dance
reqs = list(/obj/item/stack/cable_coil = 3, /obj/item/stack/tile/mineral/calorite = 1)
category = CAT_MISC
subcategory = CAT_MISCELLANEOUS
category = CAT_MISCELLANEOUS
/datum/crafting_recipe/nutribot
name = "Nutribot"
reqs = list(/obj/item/stack/sheet/cardboard = 1,
/obj/item/stack/sheet/mineral/calorite = 1,
/obj/item/bodypart/r_arm/robot = 1,
/obj/item/assembly/prox_sensor = 1)
result = /mob/living/simple_animal/bot/nutribot
category = CAT_ROBOT
@@ -0,0 +1,16 @@
/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
@@ -0,0 +1,36 @@
/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
@@ -0,0 +1,115 @@
/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)
@@ -0,0 +1,116 @@
/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()
+22 -11
View File
@@ -6,6 +6,9 @@
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))
@@ -30,7 +33,7 @@
/datum/reagent/water/proc/fat_hide(mob/living/carbon/user)
return volume * 3.5
return volume * bloat_coeff
/obj/machinery/shower/process()
..()
@@ -40,17 +43,25 @@
var/mob/living/carbon/L = AM
L.reagents.add_reagent(/datum/reagent/water, 3)
/* Disabling this for now.
/mob/living/carbon/proc/water_check(datum/gas_mixture/breath)
if(HAS_TRAIT(src, TRAIT_WATER_SPONGE))
/obj/item/organ/lungs/proc/water_check(datum/gas_mixture/breath, mob/living/carbon/human/H)
if(HAS_TRAIT(H, TRAIT_WATER_SPONGE))
if(breath)
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
*/
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
/obj/structure/sink
var/mob/living/attached
+25 -6
View File
@@ -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_mob(user, target, 30 SECONDS))
if(!do_after(user, 30 SECONDS, target))
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_mob(user, target, 10 SECONDS) || !target.dropItemToGround(suit))
if(!do_after(user, 10 SECONDS, target) || !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_mob(user, target, 20 SECONDS) || !target.equip_to_slot_if_possible(wrapping, ITEM_SLOT_OCLOTHING, TRUE, TRUE))
if(!do_after(user, 20 SECONDS, target) || !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,9 +105,28 @@
/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>")
if(!do_after(owner, 10 SECONDS, 1, null, 1))
var/obj/structure/spider/stickyweb/W = locate() in get_turf(src)
if(W || !do_after(owner, 10 SECONDS, T))
owner.visible_message("<span class='warning'>[owner] fails to spin a web!</span>", "<span class='warning'>You fail to spin web.</span>")
return FALSE
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>")
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)
return TRUE
+50 -4
View File
@@ -38,10 +38,7 @@
blood_volume = 0
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE
initial_language_holder = /datum/language_holder/slime
// // You are not immune to vore.
// devourable = 1
// digestable = 1
// feeding = 1
vore_flags = DEVOURABLE | DIGESTABLE | FEEDING
//Creambeast - basically a bit tougher mob that has feeding ranged attacks
/mob/living/simple_animal/hostile/feed/chocolate_slime/creambeast
@@ -93,3 +90,52 @@
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
obj_damage = 0
melee_damage_lower = 0.001
melee_damage_upper = 0.001
blood_volume = 0 //don't want it to bleed
del_on_death = TRUE //it's an apparition, shouldn't have a body
movement_type = FLYING
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)
+191
View File
@@ -0,0 +1,191 @@
/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
+45 -2
View File
@@ -1,2 +1,45 @@
/datum/emote/proc/get_sound(mob/living/user)
return sound //by default just return this var.
/datum/emote/speen
key = "speen"
key_third_person = "speeeeens!"
restraint_check = TRUE
mob_type_allowed_typecache = list(/mob/living, /mob/dead/observer)
mob_type_ignore_stat_typecache = list(/mob/dead/observer)
/datum/emote/speen/run_emote(mob/user)
. = ..()
if(.)
user.spin(20, 1)
if(iscyborg(user) && user.has_buckled_mobs())
var/mob/living/silicon/robot/R = user
var/datum/component/riding/riding_datum = R.GetComponent(/datum/component/riding)
if(riding_datum)
for(var/mob/M in R.buckled_mobs)
riding_datum.force_dismount(M)
else
R.unbuckle_all_mobs()
/datum/emote/speen/run_emote(mob/living/user, params)
if(ishuman(user))
if(user.nextsoundemote >= world.time)
return
user.nextsoundemote = world.time + 7
playsound(user, 'GainStation13/sound/voice/speen.ogg', 50, 1, -1)
. = ..()
/datum/emote/living/cackle
key = "cackle"
key_third_person = "cackles"
message = "cackles hysterically!"
emote_type = EMOTE_AUDIBLE
muzzle_ignore = FALSE
restraint_check = FALSE
/datum/emote/living/cackle/run_emote(mob/living/user, params)
if(ishuman(user))
if(user.nextsoundemote >= world.time)
return
user.nextsoundemote = world.time + 7
playsound(user, 'GainStation13/sound/voice//cackle_yeen.ogg', 50, 1, -1)
. = ..()
+1 -3
View File
@@ -33,9 +33,7 @@
var/held_icon = "slugcat"
do_footstep = TRUE
//lizard food
devourable = 1
digestable = 1
feeding = 1
vore_flags = DEVOURABLE | DIGESTABLE | FEEDING
var/obj/item/spear/weapon
/mob/living/simple_animal/pet/slugcat/Initialize(mapload)
@@ -0,0 +1,19 @@
//GS13 Port
/mob/living/proc/mob_climax(forced_climax = FALSE, cause = "none")//This is just so I can test this shit without being forced to add actual content to get rid of arousal. Will be a very basic proc for a while.
set name = "Masturbate"
set category = "IC"
if(canbearoused && !restrained() && !stat)
if(mb_cd_timer <= world.time)
//start the cooldown even if it fails
mb_cd_timer = world.time + mb_cd_length
if(getArousal() >= ((max_arousal / 100) * 33))//33% arousal or greater required
src.visible_message("<span class='danger'>[src] starts masturbating!</span>", \
"<span class='userdanger'>You start masturbating.</span>")
if(do_after(src, 30, target = src))
src.visible_message("<span class='danger'>[src] relieves [p_them()]self!</span>", \
"<span class='userdanger'>You have relieved yourself.</span>")
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm)
setArousal(min_arousal)
else
to_chat(src, "<span class='notice'>You aren't aroused enough for that.</span>")
@@ -0,0 +1,9 @@
/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
@@ -0,0 +1,33 @@
/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
@@ -0,0 +1,6 @@
/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
@@ -0,0 +1,17 @@
//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
@@ -0,0 +1,4 @@
/datum/gear/uniform/modularjumpsuit
name = "Grey jumpsuit (Modular)"
path = /obj/item/clothing/under/color/grey
cost = 0
@@ -15,6 +15,8 @@
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
@@ -31,6 +33,8 @@
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?
@@ -57,6 +61,8 @@
///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
@@ -1 +0,0 @@
@@ -1,156 +0,0 @@
/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"
@@ -0,0 +1,257 @@
//////////////////////////////////////
// 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)
@@ -0,0 +1,27 @@
/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
@@ -0,0 +1,71 @@
////////////////////////////////////////////////////////////////////////////////
/// 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)
@@ -0,0 +1,13 @@
/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,6 +3,7 @@
/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
+1 -1
View File
@@ -83,7 +83,7 @@
/obj/item/circuitboard/machine/treadmill
name = "Treadmill (Machine Board)"
build_path = /obj/machinery/autolathe
build_path = /obj/machinery/treadmill
req_components = list(/obj/item/stock_parts/manipulator = 1)
/datum/design/treadmill
@@ -1,7 +1,9 @@
/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
@@ -11,11 +13,18 @@
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,8 +1,6 @@
/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
@@ -11,17 +9,19 @@
maturation = 8
production = 5
yield = 1
growing_icon = 'GainStation13/icons/obj/hydroponics/lipo_growing.dmi'
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'
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/lipo_harvest.dmi'
icon = 'GainStation13/icons/obj/hydroponics/harvest.dmi'
icon_state = "lipo_nut"
item_state = "lipo_nut"
possible_transfer_amounts = list(5, 10, 15, 20, 25, 30, 50)
@@ -1,6 +1,11 @@
/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"
@@ -8,22 +13,26 @@
/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,4 +1,4 @@
/datum/gear/bluespace_belt
/datum/gear/backpack/bluespace_belt
name = "Bluespace Belt"
category = LOADOUT_SUBCATEGORY_BACKPACK_GENERAL
path = /obj/item/bluespace_belt
+2 -4
View File
@@ -1,11 +1,9 @@
/datum/gear/syntech/ring
/datum/gear/gloves/syntech/ring
name = "Normalizer Ring"
category = LOADOUT_CATEGORY_GLOVES
path = /obj/item/clothing/gloves/ring/syntech
cost = 6
/datum/gear/syntech/band
/datum/gear/gloves/syntech/band
name = "Normalizer Band"
category = LOADOUT_CATEGORY_GLOVES
path = /obj/item/clothing/gloves/ring/syntech/band
cost = 6
+3 -6
View File
@@ -1,17 +1,14 @@
/datum/gear/syntech/pendant
/datum/gear/neck/syntech/pendant
name = "Normalizer Pendant"
category = LOADOUT_CATEGORY_NECK
path = /obj/item/clothing/neck/syntech
cost = 6
/datum/gear/syntech/choker
/datum/gear/neck/syntech/choker
name = "Normalizer Choker"
category = LOADOUT_CATEGORY_NECK
path = /obj/item/clothing/neck/syntech/choker
cost = 6
/datum/gear/syntech/collar
/datum/gear/neck/syntech/collar
name = "Normalizer Collar"
category = LOADOUT_CATEGORY_NECK
path = /obj/item/clothing/neck/syntech/collar
cost = 6
@@ -12,6 +12,7 @@
flavour_text = "After you've sold your soul to corporate overlords, your contract obliged you to enter cryostasis. \
Finally, after God knows how long, the cryopod system have awakened you with only a single sentence of information - welcome and lure in new guests into the freshly opened GATO restaurant!"
assignedrole = "Restaurant worker"
mirrorcanloadappearance = TRUE
/obj/effect/mob_spawn/human/fastfoodmanager
name = "Corporate cryostasis pod"
@@ -27,6 +28,7 @@
flavour_text = "After you've sold your soul to corporate overlords, your contract obliged you to enter cryostasis. \
Finally, after God knows how long, the cryopod system have awakened you with only a single sentence of information - make sure to keep the best care of GATO's restaurant, currently under your management! You have a higher say over your workers, but do not abuse this power."
assignedrole = "Restaurant manager"
mirrorcanloadappearance = TRUE
/obj/effect/mob_spawn/human/fastfood/Initialize(mapload)
. = ..()
@@ -108,6 +110,7 @@
death = FALSE
roundstart = FALSE
mob_species = /datum/species/human
mirrorcanloadappearance = TRUE
/datum/outfit/feeders_den/fanatic
name = "Feeder Fanatic"
@@ -152,6 +155,7 @@
death = FALSE
roundstart = FALSE
mob_species = /datum/species/human
mirrorcanloadappearance = TRUE
/datum/outfit/feeders_den/victim
name = "Den Victim"
@@ -0,0 +1,55 @@
//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
@@ -0,0 +1,22 @@
//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'
@@ -0,0 +1 @@
//GS13 - markings, ported or our own (preferably mark where you took them from)
@@ -0,0 +1,10 @@
//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
@@ -0,0 +1 @@
//GS13 - markings, ported or our own (preferably mark where you took them from)
@@ -0,0 +1 @@
//GS13 - markings, ported or our own (preferably mark where you took them from)
@@ -0,0 +1,63 @@
//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
@@ -0,0 +1,70 @@
//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
@@ -0,0 +1 @@
//GS13 - markings, ported or our own (preferably mark where you took them from)
@@ -0,0 +1,100 @@
//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
@@ -0,0 +1 @@
//GS13 - markings, ported or our own (preferably mark where you took them from)
+31 -5
View File
@@ -7,16 +7,19 @@
slot = ORGAN_SLOT_BELLY
w_class = 3
size = 0
var/max_size = 0
shape = DEF_BELLY_SHAPE
var/statuscheck = FALSE
shape = "belly"
genital_flags = UPDATE_OWNER_APPEARANCE
masturbation_verb = "massage"
var/sent_full_message = TRUE //defaults to 1 since they're full to start
var/inflatable = FALSE //For inflation connoisseurs
var/size_cached = 0
var/prev_size = 0
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, min, max)
var/new_value = clamp(size_cached + modifier, starting_size, max)
if(new_value == size_cached)
return
prev_size = size_cached
@@ -26,7 +29,26 @@
..()
/obj/item/organ/genital/belly/update_appearance()
icon_state = "belly_[shape]_[size]"
//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]"
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...
@@ -42,8 +64,12 @@
if(D.species.use_skintones && D.features["genitals_use_skintone"])
color = SKINTONE2HEX(H.skin_tone)
else
color = "[D.features["belly_color"]]"
size = "[D.features["belly_size"]]"
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_reducion_timer + FULLNESS_REDUCTION_COOLDOWN < world.time)
if(fullness >= FULLNESS_LEVEL_BLOATED && fullness_reduction_timer + FULLNESS_REDUCTION_COOLDOWN < world.time)
fullness -= amount // Remove Fullness
@@ -7,11 +7,23 @@
var/obj/item/organ/genital/breasts/breasts = H.getorganslot(ORGAN_SLOT_BREASTS)
if(butt)
butt.modify_size(size_change)
if(butt.max_size > 0)
if((butt.size + size_change) <= butt.max_size)
butt.modify_size(size_change)
else
butt.modify_size(size_change)
if(belly)
belly.modify_size(size_change)
if(belly.max_size > 0)
if((belly.size + size_change) <= belly.max_size)
belly.modify_size(size_change)
else
belly.modify_size(size_change)
if(breasts)
breasts.modify_size(size_change)
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)
H.genital_override = TRUE
H.update_body()
@@ -38,7 +50,7 @@
/datum/species/proc/handle_helplessness(mob/living/carbon/human/fatty)
var/datum/preferences/preferences = fatty?.client?.prefs
if(!istype(preferences))
if(!istype(preferences) || HAS_TRAIT(fatty, TRAIT_NO_HELPLESSNESS))
return FALSE
if(preferences.helplessness_no_movement)
@@ -142,7 +154,7 @@
ADD_TRAIT(fatty, TRAIT_NO_JUMPSUIT, HELPLESSNESS_TRAIT)
var/obj/item/clothing/under/jumpsuit = fatty.w_uniform
if(istype(jumpsuit) && !istype(jumpsuit, /obj/item/clothing/under/color/grey/modular))
if(istype(jumpsuit) && jumpsuit.modular_icon_location == null)
to_chat(fatty, "<span class='warning'>[jumpsuit] can no longer contain your weight!</span>")
fatty.dropItemToGround(jumpsuit)
@@ -161,17 +173,17 @@
ADD_TRAIT(fatty, TRAIT_NO_MISC, HELPLESSNESS_TRAIT)
var/obj/item/clothing/suit/worn_suit = fatty.wear_suit
if(istype(worn_suit))
if(istype(worn_suit) && !istype(worn_suit, /obj/item/clothing/suit/mod))
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))
if(istype(worn_gloves)&& !istype(worn_gloves, /obj/item/clothing/gloves/mod))
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))
if(istype(worn_shoes) && !istype(worn_shoes, /obj/item/clothing/shoes/mod))
to_chat(fatty, "<span class='warning'>[worn_shoes] can no longer contain your weight!</span>")
fatty.dropItemToGround(worn_shoes)
@@ -189,7 +201,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))
if(istype(back_item) && !istype(back_item, /obj/item/mod))
to_chat(fatty, "<span class='warning'>Your weight makes it impossible for you to carry [back_item].</span>")
fatty.dropItemToGround(back_item)
@@ -220,8 +232,48 @@
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
@@ -239,7 +291,11 @@
fatness_delay += (H.fatness / FATNESS_LEVEL_IMMOBILE) * FATNESS_WEAKLEGS_MODIFIER
fatness_delay = min(fatness_delay, 60)
H.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/fatness, TRUE, fatness_delay)
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)
if(HAS_TRAIT(H, TRAIT_BLOB))
handle_fatness_trait(
@@ -0,0 +1,37 @@
//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(.)
@@ -0,0 +1,235 @@
/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,6 +13,7 @@
shot_glass_icon_state = "shotglassbrown"
pH = 4.5
value = 0.1
use_gs_icon = TRUE
/datum/reagent/consumable/ethanol/glyphid_slammer
name = "Glyphid slammer"
@@ -26,3 +27,4 @@
shot_glass_icon_state = "shotglassbrown"
pH = 4.5
value = 0.1
use_gs_icon = TRUE
@@ -11,6 +11,7 @@
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
@@ -30,6 +31,7 @@
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
@@ -49,6 +51,7 @@
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
@@ -67,6 +70,7 @@
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)
@@ -92,6 +96,7 @@
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)
@@ -118,6 +123,7 @@
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
@@ -137,6 +143,7 @@
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"
@@ -149,3 +156,4 @@
glass_name = "chocolate milkshake"
glass_desc = "Nothing better than cream AND cocoa!"
shot_glass_icon_state = "shotglassbrown"
use_gs_icon = TRUE
@@ -1,35 +0,0 @@
//Chem for regen extracts to use
/datum/reagent/medicine/pure_regen_jelly
name = "Pure Regenerative Jelly"
description = "Very pure form of regenerative jelly that regenerates all types of damage rapidly, without harming slime anatomy."
reagent_state = LIQUID
color = "#91D865"
metabolization_rate = 0.25 * REAGENTS_METABOLISM
taste_description = "jelly"
can_synth = FALSE
/datum/reagent/medicine/pure_regen_jelly/on_mob_life(mob/living/carbon/M)
M.adjustBruteLoss(-5*REM, 0)
M.adjustFireLoss(-5*REM, 0)
M.adjustOxyLoss(-5*REM, 0)
M.adjustToxLoss(-5*REM, 0, TRUE) //heals TOXINLOVERs
. = 1
..()
/datum/reagent/medicine/pure_neo_jelly
name = "Pure Neo Jelly"
description = "Pure Neo-Jelly that rapidly heals all damage."
reagent_state = LIQUID
metabolization_rate = 0.25 * REAGENTS_METABOLISM
color = "#91D865"
taste_description = "jelly"
can_synth = FALSE
/datum/reagent/medicine/pure_neo_jelly/on_mob_life(mob/living/carbon/M)
M.adjustBruteLoss(-1*REM, 0)
M.adjustFireLoss(-1*REM, 0)
M.adjustOxyLoss(-1*REM, 0)
M.adjustToxLoss(-1*REM, 0, TRUE) //heals TOXINLOVERs
M.heal_bodypart_damage(3,3)
. = 1
..()
@@ -0,0 +1,17 @@
// 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
@@ -5,7 +5,7 @@
name = "lipoifier"
id = /datum/reagent/consumable/lipoifier
results = list(/datum/reagent/consumable/lipoifier = 3)
required_reagents = list(/datum/reagent/consumable/sugar = 1, /datum/reagent/consumable/cornoil = 1, /datum/reagent/medicine/synthflesh = 1)
required_reagents = list(/datum/reagent/consumable/caramel = 1, /datum/reagent/consumable/cornoil = 1, /datum/reagent/medicine/synthflesh = 1)
/datum/chemical_reaction/lipolicide
@@ -0,0 +1,20 @@
///////////////////////////////// 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,3 +5,43 @@
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")

Some files were not shown because too many files have changed in this diff Show More