diff --git a/.github/workflows/ci_suite.yml b/.github/workflows/ci_suite.yml index b31dcc7bd8..454a3bc43b 100644 --- a/.github/workflows/ci_suite.yml +++ b/.github/workflows/ci_suite.yml @@ -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 diff --git a/.github/workflows/generate_documentation.yml b/.github/workflows/generate_documentation.yml new file mode 100644 index 0000000000..b1bf902c69 --- /dev/null +++ b/.github/workflows/generate_documentation.yml @@ -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 diff --git a/.github/workflows/update_tgs_dmapi.yml b/.github/workflows/update_tgs_dmapi.yml index 19a72d6702..e3400bf3c3 100644 --- a/.github/workflows/update_tgs_dmapi.yml +++ b/.github/workflows/update_tgs_dmapi.yml @@ -11,7 +11,7 @@ jobs: name: Update the TGS DMAPI steps: - name: Clone - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: Branch run: | diff --git a/.vscode/launch.json b/.vscode/launch.json index e01beb7171..39f599fd9c 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -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}" } ] } diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 155c69ee99..5c8886b0c9 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -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", diff --git a/GainStation13/code/__HELPERS/global_lists.dm b/GainStation13/code/__HELPERS/global_lists.dm new file mode 100644 index 0000000000..93bb9e66fe --- /dev/null +++ b/GainStation13/code/__HELPERS/global_lists.dm @@ -0,0 +1 @@ +GLOBAL_LIST_INIT(genital_fluids_list, list("Milk", "Water", "Semen", "Femcum", "Honey", "Strawberry Milk", "Nutriment", "Berry Juice")) diff --git a/GainStation13/code/__HELPERS/transformation.dm b/GainStation13/code/__HELPERS/transformation.dm new file mode 100644 index 0000000000..9b34efdd74 --- /dev/null +++ b/GainStation13/code/__HELPERS/transformation.dm @@ -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 diff --git a/GainStation13/code/clothing/cloaks.dm b/GainStation13/code/clothing/cloaks.dm deleted file mode 100644 index 1b878b8e2a..0000000000 --- a/GainStation13/code/clothing/cloaks.dm +++ /dev/null @@ -1,8 +0,0 @@ -/obj/item/clothing/neck/cloak/centcom - name = "central command's cloak" - desc = "Worn by High-Ranking Central Command Personnel. I guess they needed one too." - icon = 'GainStation13/icons/obj/clothing/cloaks.dmi' - mob_overlay_icon = 'GainStation13/icons/mob/neck.dmi' - icon_state = "centcomcloak" - armor = list("melee" = 35, "bullet" = 40, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 20, "rad" = 20, "fire" = 60, "acid" = 60) - body_parts_covered = CHEST|GROIN|ARMS diff --git a/GainStation13/code/clothing/gloves.dm b/GainStation13/code/clothing/gloves.dm new file mode 100644 index 0000000000..23b760d049 --- /dev/null +++ b/GainStation13/code/clothing/gloves.dm @@ -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 diff --git a/GainStation13/code/clothing/haydee_suit.dm b/GainStation13/code/clothing/haydee_suit.dm index 348cb7f20a..266a5892f9 100644 --- a/GainStation13/code/clothing/haydee_suit.dm +++ b/GainStation13/code/clothing/haydee_suit.dm @@ -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 diff --git a/GainStation13/code/clothing/under.dm b/GainStation13/code/clothing/under.dm index c1e8caf3c7..1966c85e90 100644 --- a/GainStation13/code/clothing/under.dm +++ b/GainStation13/code/clothing/under.dm @@ -21,16 +21,3 @@ mob_overlay_icon = 'GainStation13/icons/mob/uniform.dmi' icon_state = "rsecuritypink" item_state = "r_suit" - - -/obj/item/clothing/under/shorts/yellow - name = "Yellow workout short" - icon_state = "yellowwshort" - icon = 'GainStation13/icons/obj/clothing/uniforms.dmi' - mob_overlay_icon = 'GainStation13/icons/mob/uniform.dmi' - -/obj/item/clothing/under/shorts/pink - name = "Pink workout short" - icon_state = "pinkwshort" - icon = 'GainStation13/icons/obj/clothing/uniforms.dmi' - mob_overlay_icon = 'GainStation13/icons/mob/uniform.dmi' diff --git a/GainStation13/code/datums/achievements/fat.dm b/GainStation13/code/datums/achievements/fat.dm new file mode 100644 index 0000000000..701920e96e --- /dev/null +++ b/GainStation13/code/datums/achievements/fat.dm @@ -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 diff --git a/GainStation13/code/datums/components/crafting/recipes/recipes_misc_gs.dm b/GainStation13/code/datums/components/crafting/recipes/recipes_misc_gs.dm new file mode 100644 index 0000000000..453c2d733d --- /dev/null +++ b/GainStation13/code/datums/components/crafting/recipes/recipes_misc_gs.dm @@ -0,0 +1,18 @@ +// 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 diff --git a/GainStation13/code/datums/crates.dm b/GainStation13/code/datums/crates.dm deleted file mode 100644 index e89bd36c12..0000000000 --- a/GainStation13/code/datums/crates.dm +++ /dev/null @@ -1,17 +0,0 @@ -//gs13 - solar defence crate -/obj/structure/closet/crate/solarpanel_defence - name = "solar system defence crate" - icon_state = "engi_e_crate" - -/obj/structure/closet/crate/solarpanel_defence/PopulateContents() - ..() - new /obj/machinery/satellite/meteor_shield(src) - new /obj/machinery/satellite/meteor_shield(src) - new /obj/machinery/satellite/meteor_shield(src) - new /obj/machinery/satellite/meteor_shield(src) - new /obj/item/paper/guides/jobs/engi/solar_defence(src) - new /obj/item/circuitboard/computer/sat_control(src) - -/obj/item/paper/guides/jobs/engi/solar_defence - name = "Info on Satellite Defence" - info = "
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!
" diff --git a/GainStation13/code/datums/mood_events/needs_events.dm b/GainStation13/code/datums/mood_events/needs_events.dm new file mode 100644 index 0000000000..102a3c2d9b --- /dev/null +++ b/GainStation13/code/datums/mood_events/needs_events.dm @@ -0,0 +1,13 @@ +/datum/mood_event/fat_bad + description = "I'm so fat...\n" + mood_change = -4 + +/datum/mood_event/fat_good + description = "I'm so fat!\n" + mood_change = 4 + +//GS13 Port +/datum/mood_event/lewd_headpat + description = "I love headpats so much!\n" + mood_change = 3 + timeout = 2 MINUTES diff --git a/GainStation13/code/datums/traits.dm b/GainStation13/code/datums/traits.dm index d952803bfe..89484a7b25 100644 --- a/GainStation13/code/datums/traits.dm +++ b/GainStation13/code/datums/traits.dm @@ -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 = "You feel like you can carry more weight." + lose_text = "Your legs cannot bear heavier loads anymore." + 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 = "You feel like you can eat any food type." + lose_text = "You start to dislike certain food types again." + 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 = "You body burns with the desire to be bred." + lose_text = "You feel more in control of your body and thoughts." + +/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 = "You feel repulsion at the idea of eating meat." + lose_text = "You feel like eating meat isn't that bad." + 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 diff --git a/GainStation13/code/game/donator.dm b/GainStation13/code/game/donator.dm index cf74042a42..0300ac2dcf 100644 --- a/GainStation13/code/game/donator.dm +++ b/GainStation13/code/game/donator.dm @@ -9,7 +9,7 @@ name = "GATO Badge - Correspondent" category = LOADOUT_CATEGORY_DONATOR path = /obj/item/clothing/accessory/medal/gato_badge/middleman - ckeywhitelist = list("johnjimjim", "sonoida", "yeeny", "Not Number") + ckeywhitelist = list("johnjimjim", "sonoida", "yeeny", "Not Number", "Not_Number", "NotNumber",) /datum/gear/halsey_overcoat name = "Halsey's Commander Overcoat" @@ -29,12 +29,6 @@ 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 @@ -53,10 +47,6 @@ 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 @@ -69,10 +59,6 @@ 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 @@ -85,15 +71,6 @@ path = /obj/item/storage/belt/utility ckeywhitelist = list("killmewitha22", "Killmewitha22", "KILLMEWITHA22", "sonoida") -/obj/item/toy/sword/chloesabre/halsey - name = "Halsey's Sabre" - desc = "An elegant weapon, similar in design to the Captain's Sabre, but with a platinum hilt and an adamantine blade. the hilt has an engraved hyena on it." - force = 16 - -/obj/item/gun/ballistic/revolver/mateba/moka - name = "\improper Custom Unica 6 revolver" - desc = "An elegant and ornate revolver belonging to a certain hellcat commander. There are some words carved on its side: 'Dura Lex, Sed Lex'" - //metha rossi you fat hog /datum/gear/wgspell_add @@ -114,18 +91,44 @@ path = /obj/item/book/granter/spell/fattening/steal ckeywhitelist = list("sonoida", "themrsky", "Not Number") - /datum/gear/white_eyepatch_cabal name = "Cabal's Eyepatch" category = LOADOUT_CATEGORY_GLASSES path = /obj/item/clothing/glasses/eyepatch/cabal ckeywhitelist = list("spess_lizurd", "SPESS LIZURD", "spess lizurd", "SPESS_LIZURD", "spesslizurd", "sonoida") -/datum/gear/white_eyepatch +/datum/gear/white_eyepatch //accessible to anyone, at donator's request name = "White Eyepatch" category = LOADOUT_CATEGORY_GLASSES path = /obj/item/clothing/glasses/eyepatch/white +/datum/gear/metis_plush + name = "Metis Plush" + category = LOADOUT_SUBCATEGORY_BACKPACK_TOYS + path = /obj/item/toy/plush/gs13/metis + ckeywhitelist = list("paraillegal", "Paraillegal") + +/datum/gear/wheelys + name = "Wheely-Heels" + category = LOADOUT_SUBCATEGORY_BACKPACK_TOYS + path = /obj/item/clothing/shoes/wheelys + ckeywhitelist = list("colorlessspy", "Colorlessspy") + +/datum/gear/crowbars_plush + name = "Crowbars Plush" + category = LOADOUT_SUBCATEGORY_BACKPACK_TOYS + path = /obj/item/toy/plush/gs13/crowbars + ckeywhitelist = list("M16nPregnant", "m16npregnant" ) + +/datum/gear/sams_welder + name = "Sam's Unlucky Welder" + category = LOADOUT_SUBCATEGORY_BACKPACK_TOYS + path = /obj/item/weldingtool/bronze + ckeywhitelist = list("almaniak", "Almaniak", "AlManiak") + +// +//item presets for donator items +// /obj/item/clothing/glasses/eyepatch/white name = "White eyepatch" desc = "Smells faintly of medicine and headaches." @@ -137,3 +140,25 @@ desc = "Vulpine sluts only." icon_state = "eyepatch_white" item_state = "eyepatch_white" + +/obj/item/toy/sword/chloesabre/halsey + name = "Halsey's Sabre" + desc = "An elegant weapon, similar in design to the Captain's Sabre, but with a platinum hilt and an adamantine blade. the hilt has an engraved hyena on it." + force = 16 + +/obj/item/gun/ballistic/revolver/mateba/moka + name = "\improper Custom Unica 6 revolver" + desc = "An elegant and ornate revolver belonging to a certain hellcat commander. There are some words carved on its side: 'Dura Lex, Sed Lex'" + +/obj/item/clothing/suit/chloe/halsey //sorry to whoever chloe is, but that coat is far too badass not to be used + name = "Halsey's Commander Overcoat" + desc = "A Ginormous red overcoat that looks fit for a commander. Has a tag on it that reads: 'Property of Halsey Harmonten. Please return if lost!'" + armor = list("melee" = 20, "bullet" = 20, "laser" = 0,"energy" = 20, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 0) //worn by a captain player, might as well recompensate not wearing the carapace + +/obj/item/clothing/suit/storage/blueshield/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!" + +/obj/item/crowbar/bronze/glaug + name = "Milwaukee Pocket Crowbar" + desc = "Much more expensive. Still serves the same function." diff --git a/GainStation13/code/game/lore_papers.dm b/GainStation13/code/game/lore_papers.dm index a879935823..82754112a1 100644 --- a/GainStation13/code/game/lore_papers.dm +++ b/GainStation13/code/game/lore_papers.dm @@ -549,3 +549,9 @@