diff --git a/.github/workflows/ci_suite.yml b/.github/workflows/ci_suite.yml index 8f66dc14ad6f..683f3909b447 100644 --- a/.github/workflows/ci_suite.yml +++ b/.github/workflows/ci_suite.yml @@ -8,7 +8,7 @@ jobs: run_linters: if: "!contains(github.event.head_commit.message, '[ci skip]')" name: Run Linters - runs-on: ubuntu-22.04 + runs-on: ubuntu-latest concurrency: group: run_linters-${{ github.head_ref || github.run_id }} cancel-in-progress: true @@ -63,7 +63,7 @@ jobs: compile_all_maps: if: "!contains(github.event.head_commit.message, '[ci skip]')" name: Compile Maps - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Restore BYOND cache @@ -80,7 +80,7 @@ jobs: find_all_maps: if: "!contains(github.event.head_commit.message, '[ci skip]')" name: Find Maps to Test - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest outputs: maps: ${{ steps.map_finder.outputs.maps }} alternate_tests: ${{ steps.alternate_test_finder.outputs.alternate_tests }} @@ -92,7 +92,8 @@ jobs: - name: Find Maps id: map_finder run: | - echo "$(ls -mw0 maps/*.json)" > maps_output.txt + shopt -s extglob + echo "$(ls -mw0 maps/!(*override*).json)" > maps_output.txt sed -i -e s+maps/+\"+g -e s+.json+\"+g maps_output.txt echo "Maps: $(cat maps_output.txt)" echo "maps={\"paths\":[$(cat maps_output.txt)]}" >> $GITHUB_OUTPUT @@ -137,7 +138,7 @@ jobs: if: "!contains(github.event.head_commit.message, '[ci skip]') && needs.find_all_maps.outputs.alternate_tests != '[]'" name: Check Alternate Tests needs: [run_alternate_tests] - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest steps: - run: echo Alternate tests passed. diff --git a/.github/workflows/compile_changelogs.yml b/.github/workflows/compile_changelogs.yml index 1f6e72092627..85947f08b18b 100644 --- a/.github/workflows/compile_changelogs.yml +++ b/.github/workflows/compile_changelogs.yml @@ -8,7 +8,7 @@ on: jobs: compile: name: "Compile changelogs" - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest steps: - name: "Check for ACTION_ENABLER secret and pass true to output if it exists to be checked by later steps" id: value_holder diff --git a/.github/workflows/conflicts.yml b/.github/workflows/conflicts.yml index 9e70bf488482..02d9da40342b 100644 --- a/.github/workflows/conflicts.yml +++ b/.github/workflows/conflicts.yml @@ -7,7 +7,7 @@ on: types: [ready_for_review, opened, synchronize, reopened] jobs: triage: - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest steps: - uses: eps1lon/actions-label-merge-conflict@v2.1.0 with: diff --git a/.github/workflows/generate_documentation.yml b/.github/workflows/generate_documentation.yml index 59e6d1144c68..c2898dfa9c57 100644 --- a/.github/workflows/generate_documentation.yml +++ b/.github/workflows/generate_documentation.yml @@ -6,7 +6,7 @@ on: jobs: generate_documentation: if: "!contains(github.event.head_commit.message, '[ci skip]')" - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest concurrency: gen-docs steps: - uses: actions/checkout@v3 diff --git a/.github/workflows/run_approval.yml b/.github/workflows/run_approval.yml index 1708d41949f4..1d452c5f8aa7 100644 --- a/.github/workflows/run_approval.yml +++ b/.github/workflows/run_approval.yml @@ -1,11 +1,11 @@ name: Automatic Approve Workflows on: - schedule: + schedule: - cron: "*/10 * * * *" jobs: automatic-approve: name: Automatic Approve Workflows - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest steps: - name: Automatic Approve uses: mheap/automatic-approve-action@v1 diff --git a/.github/workflows/run_unit_tests.yml b/.github/workflows/run_unit_tests.yml index 8c2e7421b6a5..539b0fa01082 100644 --- a/.github/workflows/run_unit_tests.yml +++ b/.github/workflows/run_unit_tests.yml @@ -15,7 +15,7 @@ on: type: string jobs: run_unit_tests: - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Restore BYOND cache @@ -27,7 +27,7 @@ jobs: run: | sudo dpkg --add-architecture i386 sudo apt update || true - sudo apt install -o APT::Immediate-Configure=false libssl1.1:i386 + sudo apt install -o APT::Immediate-Configure=false zlib1g-dev:i386 libssl-dev:i386 bash tools/ci/install_rust_g.sh - name: Configure version run: | diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index fe2417ca3eb8..13cb50704387 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -7,7 +7,7 @@ on: jobs: stale: - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest steps: - uses: actions/stale@v4 diff --git a/.github/workflows/update_changelog.yml b/.github/workflows/update_changelog.yml index b7d8702c5cc7..0b30a268d4aa 100644 --- a/.github/workflows/update_changelog.yml +++ b/.github/workflows/update_changelog.yml @@ -7,7 +7,7 @@ on: jobs: update-changelog: concurrency: changelog - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest steps: - name: "Check for ACTION_ENABLER secret and pass true to output if it exists to be checked by later steps" id: value_holder diff --git a/.github/workflows/update_tgs_dmapi.yml b/.github/workflows/update_tgs_dmapi.yml index d530718d12e3..b197e62f392f 100644 --- a/.github/workflows/update_tgs_dmapi.yml +++ b/.github/workflows/update_tgs_dmapi.yml @@ -7,7 +7,7 @@ on: jobs: update-dmapi: - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest name: Update the TGS DMAPI steps: - name: Clone diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm index 71c659054952..60c4116df330 100644 --- a/code/__DEFINES/combat.dm +++ b/code/__DEFINES/combat.dm @@ -18,3 +18,5 @@ //the define for visible message range in combat #define COMBAT_MESSAGE_RANGE 3 #define DEFAULT_MESSAGE_RANGE 7 + +#define BAYONET_DRAW_DELAY (1 SECONDS) diff --git a/code/__DEFINES/keybinding.dm b/code/__DEFINES/keybinding.dm index 422edb05508b..1878ca63f34e 100644 --- a/code/__DEFINES/keybinding.dm +++ b/code/__DEFINES/keybinding.dm @@ -189,6 +189,7 @@ #define COMSIG_KB_OBSERVER_JOIN_XENO "keybinding_observer_join_as_xeno" #define COMSIG_KB_OBSERVER_JOIN_ERT "keybinding_observer_join_ert" #define COMSIG_KB_OBSERVER_JOIN_PREDATOR "keybinding_observer_join_pred" +#define COMSIG_KB_OBSERVER_JOIN_LESSER_DRONE "keybinding_observer_join_lesser_drone" #define CATEGORY_CLIENT "CLIENT" #define CATEGORY_EMOTE "EMOTE" diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index ba928e202cf0..673bb4fc6d81 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -221,6 +221,7 @@ //Mob sizes #define MOB_SIZE_SMALL 0 #define MOB_SIZE_HUMAN 1 +#define MOB_SIZE_XENO_VERY_SMALL 1.5 #define MOB_SIZE_XENO_SMALL 2 #define MOB_SIZE_XENO 3 #define MOB_SIZE_BIG 4 diff --git a/code/__DEFINES/mode.dm b/code/__DEFINES/mode.dm index ab58df78abcc..aa22c70d4213 100644 --- a/code/__DEFINES/mode.dm +++ b/code/__DEFINES/mode.dm @@ -222,6 +222,7 @@ var/global/list/whitelist_hierarchy = list(WHITELIST_NORMAL, WHITELIST_COUNCIL, #define FACTION_CLF "CLF" #define FACTION_PMC "PMC" #define FACTION_CONTRACTOR "VAI" +#define FACTION_MARSHAL "Colonial Marshal" #define FACTION_WY_DEATHSQUAD "WY Death Squad" #define FACTION_MERCENARY "Mercenary" #define FACTION_FREELANCER "Freelancer" @@ -238,7 +239,7 @@ var/global/list/whitelist_hierarchy = list(WHITELIST_NORMAL, WHITELIST_COUNCIL, #define FACTION_LIST_MARINE list(FACTION_MARINE) #define FACTION_LIST_HUMANOID list(FACTION_MARINE, FACTION_PMC, FACTION_WY, FACTION_WY_DEATHSQUAD, FACTION_CLF, FACTION_CONTRACTOR, FACTION_UPP, FACTION_FREELANCER, FACTION_SURVIVOR, FACTION_NEUTRAL, FACTION_COLONIST, FACTION_MERCENARY, FACTION_DUTCH, FACTION_HEFA, FACTION_GLADIATOR, FACTION_PIRATE, FACTION_PIZZA, FACTION_SOUTO, FACTION_YAUTJA, FACTION_ZOMBIE) -#define FACTION_LIST_ERT list(FACTION_PMC, FACTION_WY_DEATHSQUAD, FACTION_CLF, FACTION_CONTRACTOR, FACTION_UPP, FACTION_FREELANCER, FACTION_MERCENARY, FACTION_DUTCH, FACTION_HEFA, FACTION_GLADIATOR, FACTION_PIRATE, FACTION_PIZZA, FACTION_SOUTO) +#define FACTION_LIST_ERT list(FACTION_PMC, FACTION_WY_DEATHSQUAD, FACTION_CLF, FACTION_CONTRACTOR, FACTION_UPP, FACTION_FREELANCER, FACTION_MERCENARY, FACTION_DUTCH, FACTION_HEFA, FACTION_GLADIATOR, FACTION_PIRATE, FACTION_PIZZA, FACTION_SOUTO, FACTION_MARSHAL) #define FACTION_LIST_WY list(FACTION_PMC, FACTION_WY_DEATHSQUAD, FACTION_WY) #define FACTION_LIST_MARINE_WY list(FACTION_MARINE, FACTION_PMC, FACTION_WY_DEATHSQUAD, FACTION_WY) #define FACTION_LIST_MARINE_UPP list(FACTION_MARINE, FACTION_UPP) diff --git a/code/__DEFINES/typecheck/humanoids.dm b/code/__DEFINES/typecheck/humanoids.dm index 58d245c486e4..7076cf67c95c 100644 --- a/code/__DEFINES/typecheck/humanoids.dm +++ b/code/__DEFINES/typecheck/humanoids.dm @@ -25,7 +25,7 @@ #define isspeciessynth(A) (A.species?.group == SPECIES_SYNTHETIC) //Size checks for carbon to use instead of typechecks. (Hellhounds are deprecated) -#define iscarbonsizexeno(A) (A.mob_size >= MOB_SIZE_XENO_SMALL) +#define iscarbonsizexeno(A) (A.mob_size >= MOB_SIZE_XENO_VERY_SMALL) #define iscarbonsizehuman(A) (A.mob_size <= MOB_SIZE_HUMAN) //job/role helpers diff --git a/code/__DEFINES/typecheck/xenos.dm b/code/__DEFINES/typecheck/xenos.dm index 4d1b7819bdf1..d313090e8305 100644 --- a/code/__DEFINES/typecheck/xenos.dm +++ b/code/__DEFINES/typecheck/xenos.dm @@ -14,6 +14,7 @@ #define islarva(A) (istype(A, /mob/living/carbon/xenomorph/larva)) #define ispredalienlarva(A) (istype(A, /mob/living/carbon/xenomorph/larva/predalien)) #define isfacehugger(A) (istype(A, /mob/living/carbon/xenomorph/facehugger)) +#define islesserdrone(A) (istype(A, /mob/living/carbon/xenomorph/lesser_drone)) #define ispraetorian(A) (istype(A, /mob/living/carbon/xenomorph/praetorian)) #define isqueen(A) (istype(A, /mob/living/carbon/xenomorph/queen)) #define isravager(A) (istype(A, /mob/living/carbon/xenomorph/ravager)) diff --git a/code/__DEFINES/xeno.dm b/code/__DEFINES/xeno.dm index ac783b6f426e..82237cd793b2 100644 --- a/code/__DEFINES/xeno.dm +++ b/code/__DEFINES/xeno.dm @@ -70,6 +70,7 @@ #define HUD_ARMOR_STATES_XENO 10 /// Multiplier for time taken for a xeno to place down a resin structure +#define BUILD_TIME_MULT_LESSER_DRONE 2 #define BUILD_TIME_MULT_XENO 1 #define BUILD_TIME_MULT_BUILDER 1 #define BUILD_TIME_MULT_HIVELORD 0.5 @@ -206,6 +207,7 @@ // Health bands #define XENO_HEALTH_LARVA 35 * XENO_UNIVERSAL_HPMULT +#define XENO_HEALTH_LESSER_DRONE 160 * XENO_UNIVERSAL_HPMULT #define XENO_HEALTH_RUNNER 230 * XENO_UNIVERSAL_HPMULT // Killed by 1 PB #define XENO_HEALTH_TIER_1 250 * XENO_UNIVERSAL_HPMULT #define XENO_HEALTH_TIER_2 300 * XENO_UNIVERSAL_HPMULT @@ -603,7 +605,8 @@ #define XENO_CASTE_LARVA "Bloody Larva" #define XENO_CASTE_PREDALIEN_LARVA "Predalien Larva" #define XENO_CASTE_FACEHUGGER "Facehugger" -#define XENO_T0_CASTES list(XENO_CASTE_LARVA, XENO_CASTE_PREDALIEN_LARVA, XENO_CASTE_FACEHUGGER) +#define XENO_CASTE_LESSER_DRONE "Lesser Drone" +#define XENO_T0_CASTES list(XENO_CASTE_LARVA, XENO_CASTE_PREDALIEN_LARVA, XENO_CASTE_FACEHUGGER, XENO_CASTE_LESSER_DRONE) //t1 #define XENO_CASTE_DRONE "Drone" @@ -631,7 +634,7 @@ #define XENO_CASTE_HELLHOUND "Hellhound" #define XENO_SPECIAL_CASTES list(XENO_CASTE_QUEEN, XENO_CASTE_PREDALIEN, XENO_CASTE_HELLHOUND) -#define ALL_XENO_CASTES list(XENO_CASTE_LARVA, XENO_CASTE_PREDALIEN_LARVA, XENO_CASTE_FACEHUGGER, XENO_CASTE_DRONE, XENO_CASTE_RUNNER, XENO_CASTE_SENTINEL, XENO_CASTE_DEFENDER, XENO_CASTE_BURROWER, XENO_CASTE_CARRIER, XENO_CASTE_HIVELORD, XENO_CASTE_LURKER, XENO_CASTE_WARRIOR, XENO_CASTE_SPITTER, XENO_CASTE_BOILER, XENO_CASTE_PRAETORIAN, XENO_CASTE_CRUSHER, XENO_CASTE_RAVAGER, XENO_CASTE_QUEEN, XENO_CASTE_PREDALIEN, XENO_CASTE_HELLHOUND) +#define ALL_XENO_CASTES list(XENO_CASTE_LARVA, XENO_CASTE_PREDALIEN_LARVA, XENO_CASTE_FACEHUGGER, XENO_CASTE_LESSER_DRONE, XENO_CASTE_DRONE, XENO_CASTE_RUNNER, XENO_CASTE_SENTINEL, XENO_CASTE_DEFENDER, XENO_CASTE_BURROWER, XENO_CASTE_CARRIER, XENO_CASTE_HIVELORD, XENO_CASTE_LURKER, XENO_CASTE_WARRIOR, XENO_CASTE_SPITTER, XENO_CASTE_BOILER, XENO_CASTE_PRAETORIAN, XENO_CASTE_CRUSHER, XENO_CASTE_RAVAGER, XENO_CASTE_QUEEN, XENO_CASTE_PREDALIEN, XENO_CASTE_HELLHOUND) // Checks if two hives are allied to each other. // PARAMETERS: @@ -695,3 +698,6 @@ #define TAILSTAB_AIRLOCK_DAMAGE_MULTIPLIER 2 #define FRENZY_DAMAGE_MULTIPLIER 2 + +#define JOIN_AS_FACEHUGGER_DELAY (3 MINUTES) +#define JOIN_AS_LESSER_DRONE_DELAY (30 SECONDS) diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index cca3edda464e..c05795c32b10 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -268,7 +268,7 @@ // copied from join as xeno var/deathtime = world.time - cur_obs.timeofdeath - if(deathtime < XENO_JOIN_DEAD_TIME && ( !cur_obs.client.admin_holder || !(cur_obs.client.admin_holder.rights & R_ADMIN)) ) + if(deathtime < XENO_JOIN_DEAD_TIME && ( !cur_obs.client.admin_holder || !(cur_obs.client.admin_holder.rights & R_ADMIN) || !cur_obs.bypass_time_of_death_checks)) continue // AFK players cannot be drafted diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 3b0a2601bbb0..2e48c9f80cd3 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -1139,7 +1139,7 @@ var/global/image/action_purple_power_up break if(user_flags & INTERRUPT_NEEDHAND) if(user_holding) - if(!user_holding.loc || busy_user.get_active_hand() != user_holding) //no longer holding the required item + if(!user_holding.loc || busy_user.get_active_hand() != user_holding) //no longer holding the required item in active hand . = FALSE break else if(busy_user.get_active_hand()) //something in active hand when we need it to stay empty @@ -1153,6 +1153,11 @@ var/global/image/action_purple_power_up else if(T.get_active_hand()) . = FALSE break + if(user_flags & INTERRUPT_NO_NEEDHAND) + if(user_holding) + if(!user_holding.loc || (busy_user.l_hand != user_holding && busy_user.r_hand != user_holding)) //no longer holding the required item in either hand + . = FALSE + break if(user_flags & INTERRUPT_RESIST && busy_user.resisting || \ target_is_mob && (target_flags & INTERRUPT_RESIST && T.resisting) ) diff --git a/code/_globalvars/global_lists.dm b/code/_globalvars/global_lists.dm index 586d5e71a92d..7e65cfecd8b0 100644 --- a/code/_globalvars/global_lists.dm +++ b/code/_globalvars/global_lists.dm @@ -50,6 +50,12 @@ GLOBAL_LIST_EMPTY(mainship_pipes) // Resin constructions parameters GLOBAL_LIST_INIT_TYPED(resin_constructions_list, /datum/resin_construction, setup_resin_constructions()) +GLOBAL_LIST_INIT(resin_build_order_lesser_drone, list( + /datum/resin_construction/resin_turf/wall, + /datum/resin_construction/resin_turf/membrane, + /datum/resin_construction/resin_obj/door, +)) + GLOBAL_LIST_INIT(resin_build_order_drone, list( /datum/resin_construction/resin_turf/wall, /datum/resin_construction/resin_turf/membrane, diff --git a/code/controllers/subsystem/minimap.dm b/code/controllers/subsystem/minimap.dm index c3b2d36b8177..b154c7673855 100644 --- a/code/controllers/subsystem/minimap.dm +++ b/code/controllers/subsystem/minimap.dm @@ -493,6 +493,16 @@ SUBSYSTEM_DEF(minimaps) else return UI_CLOSE +/datum/tacmap/xeno/ui_status(mob/user) + if(!isxeno(user)) + return UI_CLOSE + + var/mob/living/carbon/xenomorph/xeno = user + if(!xeno.hive?.living_xeno_queen?.ovipositor) + return UI_CLOSE + + return UI_INTERACTIVE + /datum/tacmap_holder var/map_ref var/atom/movable/screen/minimap/map diff --git a/code/datums/emergency_calls/goons.dm b/code/datums/emergency_calls/goons.dm index 8bb2ee515c69..8a0b00968807 100644 --- a/code/datums/emergency_calls/goons.dm +++ b/code/datums/emergency_calls/goons.dm @@ -47,12 +47,12 @@ /datum/emergency_call/goon/chem_retrieval/New() ..() dispatch_message = "[MAIN_SHIP_NAME], this is USCSS Royce. Our squad is boarding to retrieve all samples of a chemical recently scanned from your research department. You should already have received a significant sum of money for your department's discovery. In return we ask that you cooperate and provide everything related to the chemical to our retrieval team." - objectives = "Secure all documents, samples, and chemicals containing the property DNA_Disintegrating from [MAIN_SHIP_NAME] research department." + objectives = "Secure all documents, samples, and chemicals containing the property DNA_Disintegrating from [MAIN_SHIP_NAME] research department and return them to Response Team Station." /datum/emergency_call/goon/chem_retrieval/proc/check_objective_info() if(objective_info) - objectives = "Secure all documents, samples and chemicals related to [objective_info] from [MAIN_SHIP_NAME] research department." - objectives += "Assume at least 30 units are located within the department. If they can not make more that should be all. Cooperate with the onboard CL to ensure all who know the complete recipe are kept silenced with a contract of confidentiality. All humans who have ingested the chemical must be brought back dead or alive. Viral scan is required for any humans who is suspected of ingestion. The professor may call for PMC back up if things get out of hand." + objectives = "Secure all documents, samples and chemicals related to [objective_info] from [MAIN_SHIP_NAME] research department and return them to Response Team Station." + objectives += "Assume at least 30 units are located within the department. If they can not make more that should be all. Cooperate with the onboard CL to ensure all who know the complete recipe are kept silenced with a contract of confidentiality. All humans who have ingested the chemical must be brought back dead or alive. Viral scan is required for any humans who is suspected of ingestion. You must not deploy to the colony without explicit permission from PMC Dispatch. The professor may call for PMC back up if things get out of hand." checked_objective = TRUE /datum/emergency_call/goon/chem_retrieval/create_member(datum/mind/M, turf/override_spawn_loc) diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 6b980136bc9e..17b37ce76630 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -74,6 +74,23 @@ var/client/C = usr.client C?.open_particle_editor(src) +/atom/movable/vv_edit_var(var_name, var_value) + var/static/list/banned_edits = list(NAMEOF_STATIC(src, step_x) = TRUE, NAMEOF_STATIC(src, step_y) = TRUE, NAMEOF_STATIC(src, step_size) = TRUE, NAMEOF_STATIC(src, bounds) = TRUE) + var/static/list/careful_edits = list(NAMEOF_STATIC(src, bound_x) = TRUE, NAMEOF_STATIC(src, bound_y) = TRUE, NAMEOF_STATIC(src, bound_width) = TRUE, NAMEOF_STATIC(src, bound_height) = TRUE) + var/static/list/not_falsey_edits = list(NAMEOF_STATIC(src, bound_width) = TRUE, NAMEOF_STATIC(src, bound_height) = TRUE) + if(banned_edits[var_name]) + return FALSE //PLEASE no. + if(careful_edits[var_name] && (var_value % world.icon_size) != 0) + return FALSE + if(not_falsey_edits[var_name] && !var_value) + return FALSE + + if(!isnull(.)) + datum_flags |= DF_VAR_EDITED + return + + return ..() + //when a mob interact with something that gives them a special view, //check_eye() is called to verify that they're still eligible. //if they are not check_eye() usually reset the mob's view. diff --git a/code/game/gamemodes/cm_initialize.dm b/code/game/gamemodes/cm_initialize.dm index a42ff3f22e59..a7e8ab612bb4 100644 --- a/code/game/gamemodes/cm_initialize.dm +++ b/code/game/gamemodes/cm_initialize.dm @@ -548,6 +548,38 @@ Additional game mode variables. return TRUE +/datum/game_mode/proc/attempt_to_join_as_lesser_drone(mob/xeno_candidate) + var/list/active_hives = list() + var/datum/hive_status/hive + var/last_active_hive = 0 + for(var/hivenumber in GLOB.hive_datum) + hive = GLOB.hive_datum[hivenumber] + if(hive.totalXenos.len <= 0) + continue + active_hives[hive.name] = hive.hivenumber + last_active_hive = hive.hivenumber + + if(active_hives.len <= 0) + to_chat(xeno_candidate, SPAN_WARNING("There aren't any Hives active at this point for you to join.")) + return FALSE + + if(active_hives.len > 1) + var/hive_picked = tgui_input_list(xeno_candidate, "Select which Hive to attempt joining.", "Hive Choice", active_hives, theme="hive_status") + if(!hive_picked) + to_chat(xeno_candidate, SPAN_ALERT("Hive choice error. Aborting.")) + return + hive = GLOB.hive_datum[active_hives[hive_picked]] + else + hive = GLOB.hive_datum[last_active_hive] + + if(!hive.hive_location) + to_chat(xeno_candidate, SPAN_WARNING("The selected hive does not have a hive core to spawn from!")) + return + + hive.hive_location.spawn_lesser_drone(xeno_candidate) + + return TRUE + /datum/game_mode/proc/transfer_xeno(xeno_candidate, mob/living/new_xeno) if(!xeno_candidate || !isxeno(new_xeno) || QDELETED(new_xeno)) return FALSE diff --git a/code/game/jobs/role_authority.dm b/code/game/jobs/role_authority.dm index b909c38cd9e6..e7697d54f0de 100644 --- a/code/game/jobs/role_authority.dm +++ b/code/game/jobs/role_authority.dm @@ -762,6 +762,8 @@ I hope it's easier to tell what the heck this proc is even doing, unlike previou M = /mob/living/carbon/xenomorph/larva/predalien if(XENO_CASTE_FACEHUGGER) M = /mob/living/carbon/xenomorph/facehugger + if(XENO_CASTE_LESSER_DRONE) + M = /mob/living/carbon/xenomorph/lesser_drone if(XENO_CASTE_RUNNER) M = /mob/living/carbon/xenomorph/runner if(XENO_CASTE_DRONE) diff --git a/code/game/machinery/vending/cm_vending.dm b/code/game/machinery/vending/cm_vending.dm index 50abb701145e..57d0e49a58bc 100644 --- a/code/game/machinery/vending/cm_vending.dm +++ b/code/game/machinery/vending/cm_vending.dm @@ -1182,6 +1182,7 @@ GLOBAL_LIST_INIT(cm_vending_gear_corresponding_types_list, list( sleep(15) vendor.stat &= ~IN_USE + vendor.icon_state = initial(vendor.icon_state) vendor.update_icon() /proc/vendor_successful_vend_one(obj/structure/machinery/cm_vending/vendor, prod_type, mob/living/carbon/human/user, turf/target_turf, insignas_override) diff --git a/code/game/machinery/vending/vendor_types/crew/medical.dm b/code/game/machinery/vending/vendor_types/crew/medical.dm index ccf4abe03282..f1574c8104ff 100644 --- a/code/game/machinery/vending/vendor_types/crew/medical.dm +++ b/code/game/machinery/vending/vendor_types/crew/medical.dm @@ -145,7 +145,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_researcher, list( list("STANDARD EQUIPMENT (TAKE ALL)", 0, null, null, null), list("Gloves", 0, /obj/item/clothing/gloves/latex, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY), - list("Headset", 0, /obj/item/device/radio/headset/almayer/doc, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY), + list("Headset", 0, /obj/item/device/radio/headset/almayer/research, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY), list("Medical HUD Glasses", 0, /obj/item/clothing/glasses/hud/health, MARINE_CAN_BUY_GLASSES, VENDOR_ITEM_MANDATORY), list("Reagent Scanner HUD Goggles", 0, /obj/item/clothing/glasses/science, MARINE_CAN_BUY_GLASSES, VENDOR_ITEM_RECOMMENDED), diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_engineer.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_engineer.dm index 2dbf0324e3d6..3d39479167b0 100644 --- a/code/game/machinery/vending/vendor_types/squad_prep/squad_engineer.dm +++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_engineer.dm @@ -61,7 +61,6 @@ GLOBAL_LIST_INIT(cm_vending_gear_engi, list( list("M4 Pattern Armor", 30, /obj/item/clothing/suit/storage/marine/rto, null, VENDOR_ITEM_REGULAR), list("Large General Pouch", 6, /obj/item/storage/pouch/general/large, null, VENDOR_ITEM_REGULAR), list("Sling Pouch", 6, /obj/item/storage/pouch/sling, null, VENDOR_ITEM_REGULAR), - list("Large Magazine Pouch", 6, /obj/item/storage/pouch/magazine/large, null, VENDOR_ITEM_REGULAR), list("Fuel Tank Strap Pouch", 4, /obj/item/storage/pouch/flamertank, null, VENDOR_ITEM_REGULAR), list("Machete Pouch (Full)", 8, /obj/item/storage/pouch/machete/full, null, VENDOR_ITEM_REGULAR), list("Fire Extinguisher (Portable)", 3, /obj/item/tool/extinguisher/mini, null, VENDOR_ITEM_REGULAR), @@ -69,7 +68,6 @@ GLOBAL_LIST_INIT(cm_vending_gear_engi, list( list("Whistle", 3, /obj/item/device/whistle, null, VENDOR_ITEM_REGULAR), list("JTAC Pamphlet", 15, /obj/item/pamphlet/skill/jtac, null, VENDOR_ITEM_REGULAR), list("Powerloader Certification", 45, /obj/item/pamphlet/skill/powerloader, null, VENDOR_ITEM_REGULAR), - list("Large Shotgun Shell Pouch", 10, /obj/item/storage/pouch/shotgun/large, null, VENDOR_ITEM_RECOMMENDED), list("M276 Pattern Combat Toolbelt Rig", 15, /obj/item/storage/belt/gun/utility, null, VENDOR_ITEM_REGULAR), list("RADIO KEYS", 0, null, null, null), diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_leader.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_leader.dm index 907cb99a94d2..fdfdabd8335e 100644 --- a/code/game/machinery/vending/vendor_types/squad_prep/squad_leader.dm +++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_leader.dm @@ -26,7 +26,6 @@ GLOBAL_LIST_INIT(cm_vending_gear_leader, list( list("Motion Detector", 5, /obj/item/device/motiondetector, null, VENDOR_ITEM_REGULAR), list("M4 Pattern Armor", 30, /obj/item/clothing/suit/storage/marine/rto, null, VENDOR_ITEM_REGULAR), list("Powerloader Certification", 45, /obj/item/pamphlet/skill/powerloader, null, VENDOR_ITEM_REGULAR), - list("Large Shotgun Shell Pouch", 10, /obj/item/storage/pouch/shotgun/large, null, VENDOR_ITEM_RECOMMENDED), list("Fulton Device Stack", 5, /obj/item/stack/fulton, null, VENDOR_ITEM_REGULAR), list("Radio Telephone Pack", 5, /obj/item/storage/backpack/marine/satchel/rto, null, VENDOR_ITEM_REGULAR), diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_medic.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_medic.dm index ab864947e8f8..532c8e58dd02 100644 --- a/code/game/machinery/vending/vendor_types/squad_prep/squad_medic.dm +++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_medic.dm @@ -76,9 +76,6 @@ GLOBAL_LIST_INIT(cm_vending_gear_medic, list( list("M4 Pattern Armor", 28, /obj/item/clothing/suit/storage/marine/rto, null, VENDOR_ITEM_REGULAR), list("Range Finder", 6, /obj/item/device/binoculars/range, null, VENDOR_ITEM_REGULAR), list("Laser Designator", 8, /obj/item/device/binoculars/range/designator, null, VENDOR_ITEM_REGULAR), - list("Large General Pouch", 6, /obj/item/storage/pouch/general/large, null, VENDOR_ITEM_REGULAR), - list("Large Magazine Pouch", 6, /obj/item/storage/pouch/magazine/large, null, VENDOR_ITEM_REGULAR), - list("Large Shotgun Shell Pouch", 6, /obj/item/storage/pouch/shotgun/large, null, VENDOR_ITEM_REGULAR), list("Fuel Tank Strap Pouch", 4, /obj/item/storage/pouch/flamertank, null, VENDOR_ITEM_REGULAR), list("Shoulder Holster", 6, /obj/item/clothing/accessory/storage/holster, null, VENDOR_ITEM_REGULAR), list("Machete Scabbard (Full)", 6, /obj/item/storage/large_holster/machete/full, null, VENDOR_ITEM_REGULAR), diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_prep.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_prep.dm index 3777fe75aa16..9775c20cac33 100644 --- a/code/game/machinery/vending/vendor_types/squad_prep/squad_prep.dm +++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_prep.dm @@ -241,17 +241,14 @@ list("Construction Pouch", round(scale * 2), /obj/item/storage/pouch/construction, VENDOR_ITEM_REGULAR), list("Document Pouch", round(scale * 2), /obj/item/storage/pouch/document/small, VENDOR_ITEM_REGULAR), list("Explosive Pouch", round(scale * 2), /obj/item/storage/pouch/explosive, VENDOR_ITEM_REGULAR), - list("First-Aid Pouch (Full)", round(scale * 5), /obj/item/storage/pouch/firstaid/full, VENDOR_ITEM_REGULAR), + list("First-Aid Pouch (Full)", round(scale * 5), /obj/item/storage/pouch/firstaid/full/alternate, VENDOR_ITEM_REGULAR), list("First Responder Pouch (Empty)", round(scale * 4), /obj/item/storage/pouch/first_responder, VENDOR_ITEM_REGULAR), list("Flare Pouch", round(scale * 5), /obj/item/storage/pouch/flare/full, VENDOR_ITEM_REGULAR), list("Large Pistol Magazine Pouch", round(scale * 3), /obj/item/storage/pouch/magazine/pistol/large, VENDOR_ITEM_REGULAR), list("Magazine Pouch", round(scale * 5), /obj/item/storage/pouch/magazine, VENDOR_ITEM_REGULAR), - list("Medical Pouch (Empty)", round(scale * 4), /obj/item/storage/pouch/medical, VENDOR_ITEM_REGULAR), list("Medium General Pouch", round(scale * 2), /obj/item/storage/pouch/general/medium, VENDOR_ITEM_REGULAR), - list("Medkit Pouch", round(scale * 2), /obj/item/storage/pouch/medkit, VENDOR_ITEM_REGULAR), list("Shotgun Shell Pouch", round(scale *5), /obj/item/storage/pouch/shotgun, VENDOR_ITEM_REGULAR), list("Sidearm Pouch", round(scale * 15), /obj/item/storage/pouch/pistol, VENDOR_ITEM_REGULAR), - list("Syringe Pouch", round(scale * 2), /obj/item/storage/pouch/syringe, VENDOR_ITEM_REGULAR), list("Tools Pouch", round(scale * 2), /obj/item/storage/pouch/tools, VENDOR_ITEM_REGULAR), list("Sling Pouch", round(scale * 2), /obj/item/storage/pouch/sling, VENDOR_ITEM_REGULAR), diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_rifleman.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_rifleman.dm index 7ec257142ff5..543288c71706 100644 --- a/code/game/machinery/vending/vendor_types/squad_prep/squad_rifleman.dm +++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_rifleman.dm @@ -82,8 +82,6 @@ GLOBAL_LIST_INIT(cm_vending_clothing_marine, list( list("B12 Pattern Marine Armor", 30, /obj/item/clothing/suit/storage/marine/leader, null, VENDOR_ITEM_REGULAR), list("Range Finder", 10, /obj/item/device/binoculars/range, null, VENDOR_ITEM_REGULAR), list("Laser Designator", 15, /obj/item/device/binoculars/range/designator, null, VENDOR_ITEM_REGULAR), - list("Large General Pouch", 15, /obj/item/storage/pouch/general/large, null, VENDOR_ITEM_REGULAR), - list("Large Magazine Pouch", 15, /obj/item/storage/pouch/magazine/large, null, VENDOR_ITEM_REGULAR), list("Fuel Tank Strap Pouch", 5, /obj/item/storage/pouch/flamertank, null, VENDOR_ITEM_REGULAR), list("Shoulder Holster", 15, /obj/item/clothing/accessory/storage/holster, null, VENDOR_ITEM_REGULAR), list("Machete Scabbard (Full)", 15, /obj/item/storage/large_holster/machete/full, null, VENDOR_ITEM_REGULAR), @@ -96,7 +94,6 @@ GLOBAL_LIST_INIT(cm_vending_clothing_marine, list( list("JTAC Pamphlet", 15, /obj/item/pamphlet/skill/jtac, null, VENDOR_ITEM_REGULAR), list("Engineering Pamphlet", 15, /obj/item/pamphlet/skill/engineer, null, VENDOR_ITEM_REGULAR), list("Powerloader Certification", 45, /obj/item/pamphlet/skill/powerloader, null, VENDOR_ITEM_REGULAR), - list("Large Shotgun Shell Pouch", 10, /obj/item/storage/pouch/shotgun/large, null, VENDOR_ITEM_REGULAR), list("USCM Radio Telephone Pack", 15, /obj/item/storage/backpack/marine/satchel/rto, null, VENDOR_ITEM_REGULAR), list("RADIO KEYS", 0, null, null, null), diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_smartgunner.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_smartgunner.dm index b471d61628e0..5560508ca4c1 100644 --- a/code/game/machinery/vending/vendor_types/squad_prep/squad_smartgunner.dm +++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_smartgunner.dm @@ -26,15 +26,12 @@ GLOBAL_LIST_INIT(cm_vending_gear_smartgun, list( list("UTILITIES", 0, null, null, null), list("Range Finder", 10, /obj/item/device/binoculars/range, null, VENDOR_ITEM_REGULAR), list("Laser Designator", 15, /obj/item/device/binoculars/range/designator, null, VENDOR_ITEM_REGULAR), - list("Large General Pouch", 15, /obj/item/storage/pouch/general/large, null, VENDOR_ITEM_REGULAR), - list("Large Magazine Pouch", 15, /obj/item/storage/pouch/magazine/large, null, VENDOR_ITEM_REGULAR), list("Fuel Tank Strap Pouch", 5, /obj/item/storage/pouch/flamertank, null, VENDOR_ITEM_REGULAR), list("Fire Extinguisher (Portable)", 5, /obj/item/tool/extinguisher/mini, null, VENDOR_ITEM_REGULAR), list("Whistle", 5, /obj/item/device/whistle, null, VENDOR_ITEM_REGULAR), list("JTAC Pamphlet", 15, /obj/item/pamphlet/skill/jtac, null, VENDOR_ITEM_REGULAR), list("Engineering Pamphlet", 15, /obj/item/pamphlet/skill/engineer, null, VENDOR_ITEM_REGULAR), list("Powerloader Certification", 45, /obj/item/pamphlet/skill/powerloader, null, VENDOR_ITEM_REGULAR), - list("Large Shotgun Shell Pouch", 10, /obj/item/storage/pouch/shotgun/large, null, VENDOR_ITEM_RECOMMENDED), list("Roller Bed", 5, /obj/item/roller, null, VENDOR_ITEM_REGULAR), list("Fulton Device Stack", 5, /obj/item/stack/fulton, null, VENDOR_ITEM_REGULAR), diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_specialist.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_specialist.dm index d8f1eb742785..6b763936fdc8 100644 --- a/code/game/machinery/vending/vendor_types/squad_prep/squad_specialist.dm +++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_specialist.dm @@ -50,7 +50,6 @@ GLOBAL_LIST_INIT(cm_vending_gear_spec, list( list("JTAC Pamphlet", 15, /obj/item/pamphlet/skill/jtac, null, VENDOR_ITEM_REGULAR), list("Engineering Pamphlet", 15, /obj/item/pamphlet/skill/engineer, null, VENDOR_ITEM_REGULAR), list("Powerloader Certification", 45, /obj/item/pamphlet/skill/powerloader, null, VENDOR_ITEM_REGULAR), - list("Large Shotgun Shell Pouch", 10, /obj/item/storage/pouch/shotgun/large, null, VENDOR_ITEM_REGULAR), list("RADIO KEYS", 0, null, null, null), list("Engineering Radio Encryption Key", 5, /obj/item/device/encryptionkey/engi, null, VENDOR_ITEM_REGULAR), @@ -101,8 +100,8 @@ GLOBAL_LIST_INIT(cm_vending_clothing_specialist, list( list("First-Aid Pouch (Splints, Gauze, Ointment)", 0, /obj/item/storage/pouch/firstaid/full/alternate, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED), list("First-Aid Pouch (Pill Packets)", 0, /obj/item/storage/pouch/firstaid/full/pills, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED), list("Flare Pouch (Full)", 0, /obj/item/storage/pouch/flare/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), - list("Large Magazine Pouch", 0, /obj/item/storage/pouch/magazine/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED), - list("Large Shotgun Shell Pouch", 0, /obj/item/storage/pouch/shotgun/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED), + list("Magazine Pouch", 0, /obj/item/storage/pouch/magazine, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED), + list("Shotgun Shell Pouch", 0, /obj/item/storage/pouch/shotgun, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED), list("Large Pistol Magazine Pouch", 0, /obj/item/storage/pouch/magazine/pistol/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), list("Medium General Pouch", 0, /obj/item/storage/pouch/general/medium, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), list("Pistol Pouch", 0, /obj/item/storage/pouch/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_tl.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_tl.dm index e373244f72d6..4311a3982c86 100644 --- a/code/game/machinery/vending/vendor_types/squad_prep/squad_tl.dm +++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_tl.dm @@ -32,7 +32,6 @@ GLOBAL_LIST_INIT(cm_vending_gear_tl, list( list("UTILITIES", 0, null, null, null), list("Radio Telephone Pack", 5, /obj/item/storage/backpack/marine/satchel/rto, null, VENDOR_ITEM_RECOMMENDED), list("Binoculars", 5, /obj/item/device/binoculars, null, VENDOR_ITEM_REGULAR), - list("Large Magazine Pouch", 10, /obj/item/storage/pouch/magazine/large, null, VENDOR_ITEM_REGULAR), list("Motion Detector", 15, /obj/item/device/motiondetector, null, VENDOR_ITEM_RECOMMENDED), list("Plastic Explosive", 10, /obj/item/explosive/plastic, null, VENDOR_ITEM_REGULAR), list("Breaching Charge", 10, /obj/item/explosive/plastic/breaching_charge, null, VENDOR_ITEM_REGULAR), @@ -40,7 +39,6 @@ GLOBAL_LIST_INIT(cm_vending_gear_tl, list( list("M2 Night Vision Goggles", 30, /obj/item/prop/helmetgarb/helmet_nvg, null, VENDOR_ITEM_RECOMMENDED), list("Roller Bed", 5, /obj/item/roller, null, VENDOR_ITEM_REGULAR), list("Fulton Device Stack", 5, /obj/item/stack/fulton, null, VENDOR_ITEM_REGULAR), - list("Large General Pouch", 15, /obj/item/storage/pouch/general/large, null, VENDOR_ITEM_REGULAR), list("Shoulder Holster", 15, /obj/item/clothing/accessory/storage/holster, null, VENDOR_ITEM_REGULAR), list("Machete Scabbard (Full)", 5, /obj/item/storage/large_holster/machete/full, null, VENDOR_ITEM_REGULAR), list("Machete Pouch (Full)", 15, /obj/item/storage/pouch/machete/full, null, VENDOR_ITEM_REGULAR), @@ -48,7 +46,6 @@ GLOBAL_LIST_INIT(cm_vending_gear_tl, list( list("Whistle", 5, /obj/item/device/whistle, null, VENDOR_ITEM_REGULAR), list("Welding Goggles", 5, /obj/item/clothing/glasses/welding, null, VENDOR_ITEM_REGULAR), list("Powerloader Certification", 45, /obj/item/pamphlet/skill/powerloader, null, VENDOR_ITEM_REGULAR), - list("Large Shotgun Shell Pouch", 10, /obj/item/storage/pouch/shotgun/large, null, VENDOR_ITEM_RECOMMENDED), list("Insulated Gloves", 3, /obj/item/clothing/gloves/yellow, null, VENDOR_ITEM_REGULAR), list("RADIO KEYS", 0, null, null, null), diff --git a/code/game/objects/effects/landmarks/survivor_spawner.dm b/code/game/objects/effects/landmarks/survivor_spawner.dm index bc24cb0d9d1f..b7a2e11fb0aa 100644 --- a/code/game/objects/effects/landmarks/survivor_spawner.dm +++ b/code/game/objects/effects/landmarks/survivor_spawner.dm @@ -80,7 +80,7 @@ /obj/effect/landmark/survivor_spawner/bigred_crashed_pmc_medic equipment = /datum/equipment_preset/survivor/pmc/medic - synth_equipment = /datum/equipment_preset/pmc/synth + synth_equipment = /datum/equipment_preset/synth/survivor/pmc intro_text = list("

You are a survivor of a crash landing!

",\ "You are NOT aware of the xenomorph threat.",\ "Your primary objective is to heal up and survive. If you want to assault the hive - adminhelp.") @@ -93,7 +93,7 @@ /obj/effect/landmark/survivor_spawner/bigred_crashed_pmc_engineer equipment = /datum/equipment_preset/survivor/pmc/engineer - synth_equipment = /datum/equipment_preset/pmc/synth + synth_equipment = /datum/equipment_preset/synth/survivor/pmc intro_text = list("

You are a survivor of a crash landing!

",\ "You are NOT aware of the xenomorph threat.",\ "Your primary objective is to heal up and survive. If you want to assault the hive - adminhelp.") diff --git a/code/game/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm index 55f3c32cebba..3b84d2433e88 100644 --- a/code/game/objects/items/bodybag.dm +++ b/code/game/objects/items/bodybag.dm @@ -122,25 +122,27 @@ /obj/structure/closet/bodybag/store_mobs(stored_units) // overriding this var/list/dead_mobs = list() - for(var/mob/living/M in loc) - if(M.buckled) + for(var/mob/living/mob in loc) + if(mob.buckled) continue - if(M.stat != DEAD) // covers alive mobs + if(mob.stat != DEAD) // covers alive mobs continue - if(!ishuman(M)) // all the dead other shit - dead_mobs += M + if(!ishuman(mob)) // all the dead other shit + dead_mobs += mob continue - var/mob/living/carbon/human/H = M - if(H.check_tod() || issynth(H) || H.is_revivable() && H.get_ghost()) // revivable + var/mob/living/carbon/human/human = mob + if(issynth(human)) continue - dead_mobs += M + if(human.check_tod() && human.is_revivable()) // revivable + continue + dead_mobs += mob var/mob/living/mob_to_store if(dead_mobs.len) mob_to_store = pick(dead_mobs) mob_to_store.forceMove(src) stored_units += mob_size - for(var/obj/item/limb/L in loc) - L.forceMove(src) + for(var/obj/item/limb/limb in loc) + limb.forceMove(src) return stored_units /obj/structure/closet/bodybag/attack_hand(mob/living/user) diff --git a/code/game/objects/items/devices/radio/encryptionkey.dm b/code/game/objects/items/devices/radio/encryptionkey.dm index 6293abb67339..d45b4e8b8212 100644 --- a/code/game/objects/items/devices/radio/encryptionkey.dm +++ b/code/game/objects/items/devices/radio/encryptionkey.dm @@ -92,6 +92,11 @@ icon_state = "med_key" channels = list(RADIO_CHANNEL_MEDSCI = TRUE) +/obj/item/device/encryptionkey/medres + name = "Research Radio Encryption Key" + icon_state = "med_key" + channels = list(RADIO_CHANNEL_MEDSCI = TRUE, RADIO_CHANNEL_INTEL = TRUE) + // MARINE MILITARY POLICE /obj/item/device/encryptionkey/cmpcom diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index e8dcdac34222..c3b1eee806c5 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -439,6 +439,12 @@ icon_state = "med_headset" initial_keys = list(/obj/item/device/encryptionkey/med) +/obj/item/device/radio/headset/almayer/research + name = "researcher radio headset" + desc = "A headset used by medbay's skilled researchers. Channels are as follows: :m - medical, :t - intel." + icon_state = "med_headset" + initial_keys = list(/obj/item/device/encryptionkey/medres) + /obj/item/device/radio/headset/almayer/ct name = "supply radio headset" desc = "Used by the lowly Cargo Technicians of the USCM, light weight and portable. To access the supply channel, use :u." diff --git a/code/game/objects/items/reagent_containers/blood_pack.dm b/code/game/objects/items/reagent_containers/blood_pack.dm index 8e29a26c2ecd..0879dcffdc68 100644 --- a/code/game/objects/items/reagent_containers/blood_pack.dm +++ b/code/game/objects/items/reagent_containers/blood_pack.dm @@ -2,10 +2,10 @@ #define BLOOD_BAG_TAKING 0 /obj/item/reagent_container/blood - name = "BloodPack" - desc = "Contains blood used for transfusion." + name = "blood pack" + desc = "A blood pack. Contains fluids, typically used for transfusions." icon = 'icons/obj/items/bloodpack.dmi' - icon_state = "empty" + icon_state = "bloodpack" volume = 300 matter = list("plastic" = 500) flags_atom = CAN_BE_SYRINGED @@ -20,7 +20,7 @@ /obj/item/reagent_container/blood/Initialize() . = ..() if(blood_type != null) - name = "BloodPack [blood_type]" + name = "[blood_type] blood pack" reagents.add_reagent("blood", initial(volume), list("viruses" = null, "blood_type" = blood_type, "resistances" = null)) update_icon() @@ -29,10 +29,26 @@ /obj/item/reagent_container/blood/update_icon() var/percent = round((reagents.total_volume / volume) * 100) - switch(percent) - if(0 to 9) icon_state = "empty" - if(10 to 50) icon_state = "half" - if(51 to INFINITY) icon_state = "full" + overlays = null + underlays = null + + if(blood_type) + overlays += image('icons/obj/items/bloodpack.dmi', src, blood_type) + + if(reagents && reagents.total_volume) + var/image/filling = image('icons/obj/items/reagentfillings.dmi', src, "[icon_state]10") + + switch(percent) + if(1 to 9) filling.icon_state = "[icon_state]5" + if(10 to 19) filling.icon_state = "[icon_state]10" + if(20 to 39) filling.icon_state = "[icon_state]25" + if(40 to 64) filling.icon_state = "[icon_state]50" + if(65 to 79) filling.icon_state = "[icon_state]75" + if(80 to 90) filling.icon_state = "[icon_state]80" + if(91 to INFINITY) filling.icon_state = "[icon_state]100" + + filling.color = mix_color_from_reagents(reagents.reagent_list) + underlays += filling /obj/item/reagent_container/blood/proc/update_beam() if(current_beam) @@ -65,7 +81,7 @@ if(user.action_busy) return - if(!do_after(user, 3 SECONDS * user.get_skill_duration_multiplier(SKILL_SURGERY), INTERRUPT_ALL, BUSY_ICON_FRIENDLY, attacked_mob, INTERRUPT_MOVED, BUSY_ICON_MEDICAL)) + if(!do_after(user, (1 SECONDS) * user.get_skill_duration_multiplier(SKILL_SURGERY), INTERRUPT_ALL, BUSY_ICON_FRIENDLY, attacked_mob, INTERRUPT_MOVED, BUSY_ICON_MEDICAL)) to_chat(user, SPAN_WARNING("You were interrupted before you could finish!")) return @@ -132,7 +148,7 @@ connected_to.visible_message("[src] breaks free of [connected_to]!", "[src] is pulled out of you!") connected_to.apply_damage(3, BRUTE, pick("r_arm", "l_arm")) if(connected_to.pain.feels_pain) - connected_to.emote("scream") + connected_to.emote("pain") connected_to.active_transfusions -= src connected_to.base_pixel_x = 0 connected_to = null @@ -173,9 +189,8 @@ blood_type = "O-" /obj/item/reagent_container/blood/empty - name = "Empty BloodPack" - desc = "Seems pretty useless... Maybe if there were a way to fill it?" - icon_state = "empty" + name = "empty blood pack" + desc = "An empty blood pack. Sorry, vampires, no luck here." #undef BLOOD_BAG_INJECTING #undef BLOOD_BAG_TAKING diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index 015d8a5eca60..6e8b00fc48e8 100644 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -742,8 +742,8 @@ ) cant_hold = list() flap = FALSE - var/draw_cooldown = 0 - var/draw_cooldown_interval = 1 SECONDS + + COOLDOWN_DECLARE(draw_cooldown) /obj/item/storage/belt/knifepouch/fill_preset_inventory() for(var/i = 1 to storage_slots) @@ -758,9 +758,9 @@ playsound(src, 'sound/weapons/gun_shotgun_shell_insert.ogg', 15, TRUE) /obj/item/storage/belt/knifepouch/attack_hand(mob/user, mods) - if(draw_cooldown < world.time) + if(COOLDOWN_FINISHED(src, draw_cooldown)) ..() - draw_cooldown = world.time + draw_cooldown_interval + COOLDOWN_START(src, draw_cooldown, BAYONET_DRAW_DELAY) playsound(src, 'sound/weapons/gun_shotgun_shell_insert.ogg', 15, TRUE) else to_chat(user, SPAN_WARNING("You need to wait before drawing another knife!")) diff --git a/code/game/objects/items/storage/pouch.dm b/code/game/objects/items/storage/pouch.dm index 02e4b3866271..7a49f48cdc92 100644 --- a/code/game/objects/items/storage/pouch.dm +++ b/code/game/objects/items/storage/pouch.dm @@ -128,10 +128,10 @@ icon_state = "bayonet" storage_slots = 5 storage_flags = STORAGE_FLAGS_POUCH|STORAGE_USING_DRAWING_METHOD|STORAGE_ALLOW_QUICKDRAW - var/draw_cooldown = 0 - var/draw_cooldown_interval = 1 SECONDS var/default_knife_type = /obj/item/weapon/throwing_knife + COOLDOWN_DECLARE(draw_cooldown) + /obj/item/storage/pouch/bayonet/Initialize() . = ..() for(var/total_storage_slots in 1 to storage_slots) @@ -149,9 +149,9 @@ playsound(src, 'sound/weapons/gun_shotgun_shell_insert.ogg', 15, TRUE) /obj/item/storage/pouch/bayonet/attack_hand(mob/user, mods) - if(draw_cooldown < world.time) + if(COOLDOWN_FINISHED(src, draw_cooldown)) ..() - draw_cooldown = world.time + draw_cooldown_interval + COOLDOWN_START(src, draw_cooldown, BAYONET_DRAW_DELAY) playsound(src, 'sound/weapons/gun_shotgun_shell_insert.ogg', 15, TRUE) else to_chat(user, SPAN_WARNING("You need to wait before drawing another knife!")) diff --git a/code/game/objects/items/storage/surgical_tray.dm b/code/game/objects/items/storage/surgical_tray.dm index d86918c697b2..16c0d1352961 100644 --- a/code/game/objects/items/storage/surgical_tray.dm +++ b/code/game/objects/items/storage/surgical_tray.dm @@ -4,7 +4,7 @@ icon_state = "surgical_tray" flags_atom = FPRINT|CONDUCT w_class = SIZE_LARGE //Should not fit in backpacks - storage_slots = 13 + storage_slots = 14 max_storage_space = 24 use_sound = "toolbox" matter = list("plastic" = 3000) @@ -31,6 +31,7 @@ new /obj/item/tool/surgery/FixOVein(src) new /obj/item/stack/nanopaste(src) new /obj/item/tool/surgery/surgical_line(src) + new /obj/item/tool/surgery/synthgraft(src) /obj/item/storage/surgical_tray/update_icon() if(!contents.len) diff --git a/code/game/objects/items/tools/maintenance_tools.dm b/code/game/objects/items/tools/maintenance_tools.dm index 2560c5ff91e8..b8affb0de616 100644 --- a/code/game/objects/items/tools/maintenance_tools.dm +++ b/code/game/objects/items/tools/maintenance_tools.dm @@ -219,41 +219,43 @@ toggle(TRUE) -/obj/item/tool/weldingtool/attack(mob/M, mob/user) +/obj/item/tool/weldingtool/attack(mob/target, mob/user) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - var/obj/limb/S = H.get_limb(user.zone_selected) + if(ishuman(target)) + var/mob/living/carbon/human/human = target + var/obj/limb/limb = human.get_limb(user.zone_selected) - if (!S) return - if(!(S.status & (LIMB_ROBOT|LIMB_SYNTHSKIN)) || user.a_intent != INTENT_HELP) + if (!limb) return + if(!(limb.status & (LIMB_ROBOT|LIMB_SYNTHSKIN)) || user.a_intent != INTENT_HELP) return ..() if(user.action_busy) return var/self_fixing = FALSE - if(H.species.flags & IS_SYNTHETIC && M == user) + if(human.species.flags & IS_SYNTHETIC && target == user) self_fixing = TRUE - if(S.brute_dam && welding) + if(limb.brute_dam && welding) remove_fuel(1,user) if(self_fixing) - user.visible_message(SPAN_WARNING("\The [user] begins fixing some dents on their [S.display_name]."), \ - SPAN_WARNING("You begin to carefully patch some dents on your [S.display_name] so as not to void your warranty.")) + user.visible_message(SPAN_WARNING("\The [user] begins fixing some dents on their [limb.display_name]."), \ + SPAN_WARNING("You begin to carefully patch some dents on your [limb.display_name] so as not to void your warranty.")) if(!do_after(user, 30, INTERRUPT_ALL, BUSY_ICON_FRIENDLY)) return - S.heal_damage(15, 0, TRUE) - H.pain.recalculate_pain() - H.UpdateDamageIcon() - user.visible_message(SPAN_WARNING("\The [user] patches some dents on \the [H]'s [S.display_name] with \the [src]."), \ - SPAN_WARNING("You patch some dents on \the [H]'s [S.display_name] with \the [src].")) + limb.heal_damage(15, 0, TRUE) + human.pain.recalculate_pain() + human.UpdateDamageIcon() + user.visible_message(SPAN_WARNING("\The [user] patches some dents on \the [human]'s [limb.display_name] with \the [src]."), \ + SPAN_WARNING("You patch some dents on \the [human]'s [limb.display_name] with \the [src].")) return else to_chat(user, SPAN_WARNING("Nothing to fix!")) else + if(ismob(target)) + remove_fuel(1) return ..() /obj/item/tool/weldingtool/afterattack(obj/target, mob/user, proximity) @@ -274,8 +276,6 @@ tank.explode() return if (welding) - remove_fuel(1) - if(isliving(target)) var/mob/living/L = target L.IgniteMob() diff --git a/code/game/objects/structures/stool_bed_chair_nest/xeno_nest.dm b/code/game/objects/structures/stool_bed_chair_nest/xeno_nest.dm index 37d46cbe6d5d..c8f5a7f82c0f 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/xeno_nest.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/xeno_nest.dm @@ -192,12 +192,12 @@ recently_nested = TRUE addtimer(VARSET_CALLBACK(src, recently_nested, FALSE), 5 SECONDS) -/obj/structure/bed/nest/buckle_mob(mob/M as mob, mob/user as mob) +/obj/structure/bed/nest/buckle_mob(mob/mob, mob/user) . = FALSE - if(!isliving(M) || islarva(user) || (get_dist(src, user) > 1) || user.is_mob_restrained() || user.stat || user.lying || M.buckled || !iscarbon(user)) + if(!isliving(mob) || islarva(user) || (get_dist(src, user) > 1) || user.is_mob_restrained() || user.stat || user.lying || mob.buckled || !iscarbon(user)) return - if(isxeno(M)) + if(isxeno(mob)) to_chat(user, SPAN_WARNING("You can't buckle your sisters.")) return @@ -205,69 +205,64 @@ to_chat(user, SPAN_WARNING("There's already someone in [src].")) return - if(M.mob_size > MOB_SIZE_HUMAN) - to_chat(user, SPAN_WARNING("\The [M] is too big to fit in [src].")) + if(mob.mob_size > MOB_SIZE_HUMAN) + to_chat(user, SPAN_WARNING("\The [mob] is too big to fit in [src].")) return - if(!isxeno(user) || issynth(M)) + if(!isxeno(user) || issynth(mob)) to_chat(user, SPAN_WARNING("Gross! You're not touching that stuff.")) return - if(isyautja(M) && !force_nest) - to_chat(user, SPAN_WARNING("\The [M] seems to be wearing some kind of resin-resistant armor!")) + if(isyautja(mob) && !force_nest) + to_chat(user, SPAN_WARNING("\The [mob] seems to be wearing some kind of resin-resistant armor!")) return - if(M == user) + if(mob == user) return - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(!H.lying) //Don't ask me why is has to be - to_chat(user, SPAN_WARNING("[M] is resisting, ground them.")) + var/mob/living/carbon/human/human = null + if(ishuman(mob)) + human = mob + if(!human.lying) //Don't ask me why is has to be + to_chat(user, SPAN_WARNING("[mob] is resisting, ground them.")) return var/securing_time = 15 // Don't increase the nesting time for monkeys and other species - if(ishuman_strict(M)) + if(ishuman_strict(mob)) securing_time = 75 - user.visible_message(SPAN_WARNING("[user] pins [M] into [src], preparing the securing resin."), - SPAN_WARNING("[user] pins [M] into [src], preparing the securing resin.")) - var/M_loc = M.loc + user.visible_message(SPAN_WARNING("[user] pins [mob] into [src], preparing the securing resin."), + SPAN_WARNING("[user] pins [mob] into [src], preparing the securing resin.")) + var/M_loc = mob.loc if(!do_after(user, securing_time, INTERRUPT_NO_NEEDHAND, BUSY_ICON_HOSTILE)) return - if(M.loc != M_loc) + if(mob.loc != M_loc) return if(buckled_mob) //Just in case to_chat(user, SPAN_WARNING("There's already someone in [src].")) return - if(ishuman(M)) //Improperly stunned Marines won't be nested - var/mob/living/carbon/human/H = M - if(!H.lying) //Don't ask me why is has to be - to_chat(user, SPAN_WARNING("[M] is resisting, ground them.")) + if(human) //Improperly stunned Marines won't be nested + if(!human.lying) //Don't ask me why is has to be + to_chat(user, SPAN_WARNING("[mob] is resisting, ground them.")) return - do_buckle(M, user) - ADD_TRAIT(M, TRAIT_NESTED, TRAIT_SOURCE_BUCKLE) + do_buckle(mob, user) + ADD_TRAIT(mob, TRAIT_NESTED, TRAIT_SOURCE_BUCKLE) - if(!ishuman(M)) + if(!human) return TRUE //Disabling motion detectors and other stuff they might be carrying - var/mob/living/carbon/human/H = M - H.start_nesting_cooldown() - H.disable_special_flags() - H.disable_lights() - H.disable_special_items() - - if(H.mind) - var/choice = alert(M, "You have no possibility of escaping unless freed by your fellow marines, do you wish to Ghost? If you are freed while ghosted, you will be given the choice to return to your body.", ,"Ghost", "Remain") - if(choice == "Ghost") - // Ask to ghostize() so they can reenter, to leave mind and such intact - ghost_of_buckled_mob = M.ghostize(can_reenter_corpse = TRUE) - ghost_of_buckled_mob?.can_reenter_corpse = FALSE // Just don't for now + human.start_nesting_cooldown() + human.disable_special_flags() + human.disable_lights() + human.disable_special_items() + + if(human.client) + human.do_ghost() return TRUE diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 6e98f4d7c065..bc0375e0b850 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -118,6 +118,12 @@ VV_DROPDOWN_OPTION(VV_HK_EXPLODE, "Trigger Explosion") VV_DROPDOWN_OPTION(VV_HK_EMPULSE, "Trigger EM Pulse") +/turf/vv_edit_var(var_name, new_value) + var/static/list/banned_edits = list(NAMEOF_STATIC(src, x), NAMEOF_STATIC(src, y), NAMEOF_STATIC(src, z)) + if(var_name in banned_edits) + return FALSE + . = ..() + /turf/ex_act(severity) return 0 diff --git a/code/modules/admin/player_panel/actions/transform.dm b/code/modules/admin/player_panel/actions/transform.dm index 11dd7525bb07..185165357e05 100644 --- a/code/modules/admin/player_panel/actions/transform.dm +++ b/code/modules/admin/player_panel/actions/transform.dm @@ -38,6 +38,11 @@ GLOBAL_LIST_INIT(pp_transformables, list( name = "Facehugger", key = /mob/living/carbon/xenomorph/facehugger, color = "purple" + ), + list( + name = "Lesser Drone", + key = /mob/living/carbon/xenomorph/lesser_drone, + color = "purple" ) ), diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 5698c30c0acf..16afa8d1b4f2 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -590,7 +590,7 @@ var/const/MAX_SAVE_SLOTS = 10 dat += "
" dat += "

Gameplay Toggles:

" dat += "Toggle Being Able to Hurt Yourself: \ - [toggle_prefs & TOGGLE_IGNORE_SELF ? "On" : "Off"]
" + [toggle_prefs & TOGGLE_IGNORE_SELF ? "Off" : "On"]
" dat += "Toggle Help Intent Safety: \ [toggle_prefs & TOGGLE_HELP_INTENT_SAFETY ? "On" : "Off"]
" dat += "Toggle Middle Mouse Ability Activation: \ diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 0a1b54112f18..0f482fa7f894 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -199,22 +199,22 @@ lastchangelog = sanitize_text(lastchangelog, initial(lastchangelog)) UI_style = sanitize_inlist(UI_style, list("white", "dark", "midnight", "orange", "old"), initial(UI_style)) tgui_say = sanitize_integer(tgui_say, FALSE, TRUE, TRUE) - be_special = sanitize_integer(be_special, 0, 65535, initial(be_special)) + be_special = sanitize_integer(be_special, 0, SHORT_REAL_LIMIT, initial(be_special)) default_slot = sanitize_integer(default_slot, 1, MAX_SAVE_SLOTS, initial(default_slot)) - toggles_chat = sanitize_integer(toggles_chat, 0, 65535, initial(toggles_chat)) - chat_display_preferences = sanitize_integer(chat_display_preferences, 0, 65535, initial(chat_display_preferences)) - toggles_ghost = sanitize_integer(toggles_ghost, 0, 65535, initial(toggles_ghost)) - toggles_langchat = sanitize_integer(toggles_langchat, 0, 65535, initial(toggles_langchat)) - toggles_sound = sanitize_integer(toggles_sound, 0, 65535, initial(toggles_sound)) - toggle_prefs = sanitize_integer(toggle_prefs, 0, 65535, initial(toggle_prefs)) - toggles_flashing= sanitize_integer(toggles_flashing, 0, 65535, initial(toggles_flashing)) - toggles_ert = sanitize_integer(toggles_ert, 0, 65535, initial(toggles_ert)) - toggles_admin = sanitize_integer(toggles_admin, 0, 65535, initial(toggles_admin)) + toggles_chat = sanitize_integer(toggles_chat, 0, SHORT_REAL_LIMIT, initial(toggles_chat)) + chat_display_preferences = sanitize_integer(chat_display_preferences, 0, SHORT_REAL_LIMIT, initial(chat_display_preferences)) + toggles_ghost = sanitize_integer(toggles_ghost, 0, SHORT_REAL_LIMIT, initial(toggles_ghost)) + toggles_langchat = sanitize_integer(toggles_langchat, 0, SHORT_REAL_LIMIT, initial(toggles_langchat)) + toggles_sound = sanitize_integer(toggles_sound, 0, SHORT_REAL_LIMIT, initial(toggles_sound)) + toggle_prefs = sanitize_integer(toggle_prefs, 0, SHORT_REAL_LIMIT, initial(toggle_prefs)) + toggles_flashing= sanitize_integer(toggles_flashing, 0, SHORT_REAL_LIMIT, initial(toggles_flashing)) + toggles_ert = sanitize_integer(toggles_ert, 0, SHORT_REAL_LIMIT, initial(toggles_ert)) + toggles_admin = sanitize_integer(toggles_admin, 0, SHORT_REAL_LIMIT, initial(toggles_admin)) UI_style_color = sanitize_hexcolor(UI_style_color, initial(UI_style_color)) UI_style_alpha = sanitize_integer(UI_style_alpha, 0, 255, initial(UI_style_alpha)) item_animation_pref_level = sanitize_integer(item_animation_pref_level, SHOW_ITEM_ANIMATIONS_NONE, SHOW_ITEM_ANIMATIONS_ALL, SHOW_ITEM_ANIMATIONS_ALL) pain_overlay_pref_level = sanitize_integer(pain_overlay_pref_level, PAIN_OVERLAY_BLURRY, PAIN_OVERLAY_LEGACY, PAIN_OVERLAY_BLURRY) - window_skin = sanitize_integer(window_skin, 0, 65535, initial(window_skin)) + window_skin = sanitize_integer(window_skin, 0, SHORT_REAL_LIMIT, initial(window_skin)) ghost_vision_pref = sanitize_inlist(ghost_vision_pref, list(GHOST_VISION_LEVEL_NO_NVG, GHOST_VISION_LEVEL_MID_NVG, GHOST_VISION_LEVEL_FULL_NVG), GHOST_VISION_LEVEL_MID_NVG) ghost_orbit = sanitize_inlist(ghost_orbit, GLOB.ghost_orbits, initial(ghost_orbit)) playtime_perks = sanitize_integer(playtime_perks, 0, 1, 1) diff --git a/code/modules/clothing/head/collectable.dm b/code/modules/clothing/head/collectable.dm index e11014392393..addac1ecf139 100644 --- a/code/modules/clothing/head/collectable.dm +++ b/code/modules/clothing/head/collectable.dm @@ -29,3 +29,7 @@ worn_x_dimension = 64 worn_y_dimension = 64 w_class = SIZE_LARGE + +/obj/item/clothing/head/collectable/petehat + icon_state = "petehat" + item_state = "petehat" diff --git a/code/modules/clothing/under/ties.dm b/code/modules/clothing/under/ties.dm index 84e053388826..d42e7d17bfd2 100644 --- a/code/modules/clothing/under/ties.dm +++ b/code/modules/clothing/under/ties.dm @@ -529,7 +529,7 @@ new /obj/item/device/multitool(src) /obj/item/storage/internal/accessory/surg_vest - storage_slots = 13 + storage_slots = 14 can_hold = list( /obj/item/tool/surgery, /obj/item/stack/medical/advanced/bruise_pack, @@ -569,6 +569,7 @@ new /obj/item/tool/surgery/FixOVein(src) new /obj/item/stack/nanopaste(src) new /obj/item/tool/surgery/surgical_line(src) + new /obj/item/tool/surgery/synthgraft(src) /obj/item/clothing/accessory/storage/surg_vest name = "surgical webbing vest" @@ -593,6 +594,12 @@ icon_state = "vest_knives" hold = /obj/item/storage/internal/accessory/knifeharness +/obj/item/clothing/accessory/storage/knifeharness/attack_hand(mob/user, mods) + if(!mods || !mods["alt"] || !length(hold.contents)) + return ..() + + hold.contents[length(contents)].attack_hand(user, mods) + /obj/item/storage/internal/accessory/knifeharness storage_slots = 5 max_storage_space = 5 @@ -603,6 +610,32 @@ /obj/item/attachable/bayonet, /obj/item/weapon/throwing_knife, ) + storage_flags = STORAGE_ALLOW_QUICKDRAW|STORAGE_FLAGS_POUCH + + COOLDOWN_DECLARE(draw_cooldown) + +/obj/item/storage/internal/accessory/knifeharness/fill_preset_inventory() + for(var/i = 1 to storage_slots) + new /obj/item/weapon/throwing_knife(src) + +/obj/item/storage/internal/accessory/knifeharness/attack_hand(mob/user, mods) + . = ..() + + if(!COOLDOWN_FINISHED(src, draw_cooldown)) + to_chat(user, SPAN_WARNING("You need to wait before drawing another knife!")) + return FALSE + + if(length(contents)) + contents[length(contents)].attack_hand(user, mods) + COOLDOWN_START(src, draw_cooldown, BAYONET_DRAW_DELAY) + +/obj/item/storage/internal/accessory/knifeharness/_item_insertion(obj/item/inserted_item, prevent_warning = 0) + ..() + playsound(src, 'sound/weapons/gun_shotgun_shell_insert.ogg', 15, TRUE) + +/obj/item/storage/internal/accessory/knifeharness/_item_removal(obj/item/removed_item, atom/new_location) + ..() + playsound(src, 'sound/weapons/gun_shotgun_shell_insert.ogg', 15, TRUE) /obj/item/clothing/accessory/storage/knifeharness/duelling name = "decorated harness" diff --git a/code/modules/cm_aliens/structures/special/pylon_core.dm b/code/modules/cm_aliens/structures/special/pylon_core.dm index a29b49b7745a..993d4f833fa6 100644 --- a/code/modules/cm_aliens/structures/special/pylon_core.dm +++ b/code/modules/cm_aliens/structures/special/pylon_core.dm @@ -327,5 +327,22 @@ // Tell admins that this condition is reached so they know what has happened if it fails somehow return +/obj/effect/alien/resin/special/pylon/core/proc/spawn_lesser_drone(mob/xeno_candidate) + if(!linked_hive.can_spawn_as_lesser_drone(xeno_candidate)) + return FALSE + + var/mob/living/carbon/xenomorph/lesser_drone/new_drone = new /mob/living/carbon/xenomorph/lesser_drone(loc, null, linked_hive.hivenumber) + xeno_candidate.mind.transfer_to(new_drone, TRUE) + new_drone.visible_message(SPAN_XENODANGER("A lesser drone emerges out of [src]!"), SPAN_XENODANGER("You emerge out of [src] and awaken from your slumber. For the Hive!")) + playsound(new_drone, 'sound/effects/xeno_newlarva.ogg', 25, TRUE) + new_drone.generate_name() + + return TRUE + +/obj/effect/alien/resin/special/pylon/core/attack_ghost(mob/dead/observer/user) + . = ..() + if(SSticker.mode.check_xeno_late_join(user)) + SSticker.mode.attempt_to_join_as_lesser_drone(user) + #undef PYLON_REPAIR_TIME #undef PYLON_WEEDS_REGROWTH_TIME diff --git a/code/modules/cm_marines/Donor_Items.dm b/code/modules/cm_marines/Donator_Items.dm similarity index 77% rename from code/modules/cm_marines/Donor_Items.dm rename to code/modules/cm_marines/Donator_Items.dm index 4b36792b0527..47380ca2c84a 100644 --- a/code/modules/cm_marines/Donor_Items.dm +++ b/code/modules/cm_marines/Donator_Items.dm @@ -1,6 +1,63 @@ // SS13 DONATOR CUSTOM ITEM STORAGE ZONE OF MAGICAL HAPPINESS APOPHIS - LAST UPDATE - 14JUN2016 -// EXO-SUITS/ARMORS COSMETICS //////////////////////////////////////////////// +//#######################################################\\ +//###################### TEMPLATES ######################\\ +//#######################################################\\ + +//HEAD TEMPLATE (for Helmets/Hats/Berets) ONLY TAKE NAME, DESC, ICON_STATE, AND ITEM_STATE. Make a copy of those, and put the ckey of the person at the end after fluff +/obj/item/clothing/head/helmet/marine/fluff + name = "ITEM NAME" + desc = "ITEM DESCRIPTION. DONOR ITEM" //Add UNIQUE if Unique + icon_state = null + item_state = null + //DON'T GRAB STUFF BETWEEN THIS LINE + icon = 'icons/obj/items/clothing/hats.dmi' + icon_override = 'icons/mob/humans/onmob/head_0.dmi' + flags_inventory = BLOCKSHARPOBJ + flags_inv_hide = HIDEEARS + flags_atom = NO_NAME_OVERRIDE + min_cold_protection_temperature = ICE_PLANET_MIN_COLD_PROT + flags_marine_helmet = NO_FLAGS + +/obj/item/clothing/head/helmet/marine/fluff/verb/toggle_squad_markings() + set src in usr + if(!ishuman(usr)) return + + if(!usr.canmove || usr.stat || usr.is_mob_restrained() || !usr.loc || !isturf(usr.loc)) + to_chat(usr, SPAN_WARNING("Not right now!")) + return + + to_chat(usr, SPAN_NOTICE("You [flags_marine_helmet & HELMET_SQUAD_OVERLAY? "hide" : "show"] the squad markings.")) + flags_marine_helmet ^= HELMET_SQUAD_OVERLAY + usr.update_inv_head() + +/obj/item/clothing/head/helmet/marine/fluff/verb/toggle_garb_overlay() + set src in usr + if(!ishuman(usr)) return + + if(!usr.canmove || usr.stat || usr.is_mob_restrained() || !usr.loc || !isturf(usr.loc)) + to_chat(usr, SPAN_WARNING("Not right now!")) + return + + to_chat(usr, SPAN_NOTICE("You [flags_marine_helmet & HELMET_GARB_OVERLAY? "hide" : "show"] the helmet garb.")) + flags_marine_helmet ^= HELMET_GARB_OVERLAY + update_icon() + + //AND THIS LINE +//END HEAD TEMPLATE + +//MASK TEMPLATE (for masks) ONLY TAKE NAME, DESC, ICON_STATE, ITEM_STATE, AND ITEM_COLOR. Make a copy of those, and put the ckey of the person at the end after fluff +/obj/item/clothing/mask/fluff + name = "ITEM NAME" + desc = "ITEM DESCRIPTION. DONOR ITEM" //Add UNIQUE if Unique + icon_state = null + item_state = null + //DON'T GRAB STUFF BETWEEN THIS LINE + flags_inventory = ALLOWREBREATH + flags_inv_hide = HIDEEARS|HIDEEYES|HIDEFACE + //AND THIS LINE + +//END MASK TEMPLATE //SUIT TEMPLATE (for armor/exosuit) ONLY TAKE NAME, DESC, ICON_STATE, AND ITEM_STATE. Make a copy of those, and put the ckey of the person at the end after fluff /obj/item/clothing/suit/storage/marine/fluff @@ -43,13 +100,84 @@ //AND THIS LINE //END SUIT TEMPLATE -/obj/item/clothing/suit/storage/marine/fluff/santa +//FEET TEMPLATE (for shoes) ONLY TAKE NAME, DESC, ICON_STATE, ITEM_STATE, AND ITEM_COLOR. Make a copy of those, and put the ckey of the person at the end after fluff +/obj/item/clothing/shoes/marine/fluff + name = "ITEM NAME" + desc = "ITEM DESCRIPTION. DONOR ITEM" //Add UNIQUE if Unique + icon_state = null + item_state = null +//END FEET TEMPLATE + +/obj/item/storage/backpack/marine/fluff + xeno_types = null + +/obj/item/clothing/gloves/marine/fluff //MARINE GLOVES TEMPLATE + name = "ITEM NAME" + desc = "ITEM DESCRIPTION. DONOR ITEM" //Add UNIQUE if Unique + icon_state = null + item_state = null + +/obj/item/clothing/glasses/fluff + flags_inventory = COVEREYES + + +//#######################################################\\ +//#################### GENERIC SET(S) ###################\\ +//#######################################################\\ + +/obj/item/clothing/head/helmet/marine/fluff/standard_helmet //GENERIC DONOR + name = "Omega Team Helmet" + desc = "Helmet worn by Omega Team. DONOR ITEM" + icon_state = "standard_helmet" + item_state = "standard_helmet" + flags_inventory = BLOCKSHARPOBJ + flags_inv_hide = HIDEEARS|HIDEMASK|HIDEEYES|HIDEALLHAIR + +/obj/item/clothing/suit/storage/marine/fluff/standard_armor //GENERIC DONOR + name = "Omega Team Armor" + desc = "Armor worn by the Omega Team. DONOR ITEM" + icon_state = "standard_armor" + item_state = "standard_armor" + +/obj/item/clothing/under/marine/fluff/standard_jumpsuit //GENERIC DONOR + name = "Omega Team Uniform" + desc = "Uniform worn by Omega Team. DONOR ITEM" + icon_state = "standard_jumpsuit" + worn_state = "standard_jumpsuit" + flags_jumpsuit = FALSE + +/obj/item/clothing/under/marine/fluff/turtleneck //GENERIC DONOR + name = "Black Ops Turtleneck" + desc = "A $900 black turtleneck woven from only the purest Azerbaijani cashmere wool. DONOR ITEM" + icon_state = "syndicate" + item_state = "bl_suit" + worn_state = "syndicate" + flags_jumpsuit = FALSE + + +/obj/item/clothing/mask/fluff/balaclava //GENERIC DONOR + name = "Balaclava" + desc = "A black Balaclava used for hiding your face. DISCLAIMER: May not actually hide your face... DONOR ITEM" + item_state = "balaclava" + icon_state = "balaclava" + flags_inventory = COVERMOUTH|ALLOWREBREATH + flags_inv_hide = HIDEEARS|HIDEFACE|HIDEALLHAIR + +/obj/item/clothing/glasses/fluff/eyepatch //GENERIC DONOR + name = "An Eyepatch" + desc = "Badass +10. Donor Item" + icon_state = "eyepatch" + item_state = "eyepatch" + +// EXO-SUITS/ARMORS COSMETICS //////////////////////////////////////////////// + +/obj/item/clothing/suit/storage/marine/fluff/santa //CKEY=tophatpenguin name = "Santa's suit" desc = "Festive! DONOR ITEM" icon_state = "santa" item_state = "santa" -/obj/item/clothing/suit/storage/marine/fluff/armorammo +/obj/item/clothing/suit/storage/marine/fluff/commandercookies //CKEY=commandercookies name = "marine armor w/ ammo" desc = "A marine combat vest with ammunition on it. DONOR ITEM" icon_state = "bulletproofammo" @@ -61,118 +189,118 @@ icon_state = "cia" item_state = "cia" -/obj/item/clothing/suit/storage/marine/fluff/obey +/obj/item/clothing/suit/storage/marine/fluff/obey //CKEY=obeystylez (UNIQUE) name = "Black Ops Ablative Armor Vest" desc = "Some fancy looking armor. DONOR ITEM" icon_state = "armor_reflec" item_state = "armor_reflec" -/obj/item/clothing/suit/storage/marine/fluff/sas5 +/obj/item/clothing/suit/storage/marine/fluff/sas_juggernaut //CKEY=sasoperative (UNIQUE) name = "Juggernaut Armor" desc = "Some fancy looking armor. DONOR ITEM" icon_state = "rig-syndi" item_state = "syndie_hardsuit" -/obj/item/clothing/suit/storage/marine/fluff/penguin +/obj/item/clothing/suit/storage/marine/fluff/penguin //CKEY=tophatpenguin name = "Trenchcoat" desc = "An 18th-century trenchcoat. Someone who wears this means serious business. DONOR ITEM" icon_state = "detective" item_state = "det_suit" blood_overlay_type = "coat" -/obj/item/clothing/suit/storage/marine/fluff/wright +/obj/item/clothing/suit/storage/marine/fluff/wright //CKEY=wrightthewrong name = "Swat Armor" desc = "Some fancy looking armor. DONOR ITEM" icon_state = "deathsquad" item_state = "swat_suit" -/obj/item/clothing/suit/storage/marine/fluff/tyran +/obj/item/clothing/suit/storage/marine/fluff/tyran //CKEY=tyran68 name = "Swat Armor" desc = "Some fancy looking armor. DONOR ITEM" icon_state = "deathsquad" item_state = "swat_suit" -/obj/item/clothing/suit/storage/marine/fluff/tristan +/obj/item/clothing/suit/storage/marine/fluff/tristan //CKEY=tristan63 name = "Sciency Teleport Armor" desc = "Some fancy looking armor, with lots of lights and buttons. DONOR ITEM" icon_state = "reactive" item_state = "reactive" blood_overlay_type = "armor" -/obj/item/clothing/suit/storage/marine/fluff/SAS +/obj/item/clothing/suit/storage/marine/fluff/sas_legion //CKEY=sasoperative (UNIQUE) name = "Legion Armor" desc = "This armor was custom-made to resemble the small growing Legion within the galaxy started by one man slowly making its way to becoming a larger Corporation. DONOR ITEM." item_state = "ncrjacket" icon_state = "ncrjacket" -/obj/item/clothing/suit/storage/marine/fluff/mycroft +/obj/item/clothing/suit/storage/marine/fluff/feodrich //CKEY=feodrich (UNIQUE) name = "Doom Armor" desc = "A uniform, of a famous Earth warrior... Donor Item" item_state = "doom_armor" icon_state = "doom_armor" -/obj/item/clothing/suit/storage/marine/fluff/LEO +/obj/item/clothing/suit/storage/marine/fluff/totalanarchy //CKEY=totalanarchy name = "Leo's Armor" desc = "Used Mercenary armor. DONOR ITEM." item_state = "merc_armor" icon_state = "merc_armor" -/obj/item/clothing/suit/storage/marine/fluff/Sado +/obj/item/clothing/suit/storage/marine/fluff/sadokist2 //CKEY=sadokist name = "Heavy Security Hardsuit" desc = "Heavily armored security hardsuit. DONOR ITEM" icon_state = "rig-secTG" item_state = "rig-secTG" -/obj/item/clothing/suit/storage/marine/fluff/Vintage +/obj/item/clothing/suit/storage/marine/fluff/vintage //CKEY=vintagepalmer name = "Vintage armor with ripples." desc = "A vintage DONOR ITEM" icon_state = "bulletproof" item_state = "bulletproof" -/obj/item/clothing/suit/storage/marine/fluff/john56 +/obj/item/clothing/suit/storage/marine/fluff/john56 //CKEY=johnkilla56 name = "A red trenchcoat" desc = "A special trenchcoat made famous for instilling fear into greytide everywhere. DONOR ITEM" icon_state = "hos" item_state = "hos" blood_overlay_type = "coat" -/obj/item/clothing/suit/storage/marine/fluff/biolock +/obj/item/clothing/suit/storage/marine/fluff/biolock //CKEY=biolock name = "Medic Armor" desc = "Medical armor, designed to protect medics from things that hurt medics. DONOR ITEM." item_state = "medarmor" icon_state = "medarmor" -/obj/item/clothing/suit/storage/marine/fluff/sas3 //UNIQUE +/obj/item/clothing/suit/storage/marine/fluff/sas_elite //CKEY=sasoperative (UNIQUE) name = "Elite Combat Armor" desc = "A combat armor with blood stains on it from previous battles. UNIQUE DONOR ITEM" icon_state = "hecuarmor_u" item_state = "hecuarmor_u" -/obj/item/clothing/suit/storage/marine/fluff/limo +/obj/item/clothing/suit/storage/marine/fluff/limo //CKEY=limodish (UNIQUE) name = "Blood-Red Hardsuit" desc = "Looks like a hardsuit. Unique DONOR ITEM" icon_state = "syndicate" item_state = "syndicate" -/obj/item/clothing/suit/storage/marine/fluff/Zynax +/obj/item/clothing/suit/storage/marine/fluff/Zynax //CKEY=zynax name = "Gorka Vest" desc = "Russian Camo Vest. Unique DONOR ITEM" icon_state = "gorkavest_u" item_state = "gorkavest_u" -/obj/item/clothing/suit/storage/marine/fluff/BWO +/obj/item/clothing/suit/storage/marine/fluff/bwoincognito //CKEY=bwoincognito name = "Fallout Jacket" desc = "The Jacket of an ancient wastelander... Unique DONOR ITEM" icon_state = "riotjacket_u" item_state = "riotjacket_u" -/obj/item/clothing/suit/storage/marine/fluff/vrai +/obj/item/clothing/suit/storage/marine/fluff/adjective name = "HOS Trenchcoat" desc = "A trenchcoat of authority. DONOR ITEM" icon_state = "jensencoat" item_state = "jensencoat" -/obj/item/clothing/suit/storage/marine/fluff/fick +/obj/item/clothing/suit/storage/marine/fluff/fickmacher //CKEY=fickmacher (UNIQUE) name = "Selena's Trenchcoat" desc = "A trenchcoat of authority. DONOR ITEM" icon_state = "jensencoat" @@ -196,26 +324,26 @@ icon_state = "hawkeye_jacket_u" item_state = "hawkeye_jacket_u" -/obj/item/clothing/suit/storage/marine/fluff/chimera +/obj/item/clothing/suit/storage/marine/fluff/chimera //CKEY=theultimatechimera name = "Brett's Trenchcoat" desc = "A trenchcoat of authority. DONOR ITEM" icon_state = "hos" item_state = "hos" -/obj/item/clothing/suit/storage/marine/fluff/devil +/obj/item/clothing/suit/storage/marine/fluff/devilzhand name = "Tank's Trenchcoat" desc = "A trenchcoat of authority. DONOR ITEM" icon_state = "jensencoat" item_state = "jensencoat" -/obj/item/clothing/suit/storage/marine/fluff/pink +/obj/item/clothing/suit/storage/marine/fluff/feweh //CKEY=feweh name = "Pink's Ablative Armor Vest" desc = "The fanciest bullet proof vest you've ever seen. DONOR ITEM" icon_state = "armor_reflec" item_state = "armor_reflec" -/obj/item/clothing/suit/storage/marine/fluff/tye +/obj/item/clothing/suit/storage/marine/fluff/crazyh206 name = "Templar Armor" desc = "Some strange holy armor you don't recognize... DONOR ITEM" //Add UNIQUE if Unique icon_state = "templar" @@ -227,31 +355,31 @@ item_state = "solo_jumpsuit_u" icon_state = "solo_jumpsuit_u" -/obj/item/clothing/suit/storage/marine/fluff/oneonethreeeight +/obj/item/clothing/suit/storage/marine/fluff/oneonethreeeight //CKEY=oneonethreeeight name = "Camouflage Armor" desc = "Woodland Camouflage Armor. DONOR ITEM" //Add UNIQUE if Unique icon_state = "camo_armor" item_state = "camo_armor" -/obj/item/clothing/suit/storage/marine/fluff/dino +/obj/item/clothing/suit/storage/marine/fluff/dino //CKEY=dinobubba7 name = "Sneaking Suit" desc = "An old suit, used by a famous spy. Smells like cigarettes... DONOR ITEM" icon_state = "snakesuit" item_state = "snakesuit" -/obj/item/clothing/suit/storage/marine/fluff/fick2 +/obj/item/clothing/suit/storage/marine/fluff/fickmacher2 //CKEY=fickmacher (UNIQUE) name = "Corporal Hart's Armor" desc = "It looks like the left arm is Robotic, wait what? DONOR ITEM" icon_state = "hartarmor" item_state = "hartarmor" -/obj/item/clothing/suit/storage/marine/fluff/paradox +/obj/item/clothing/suit/storage/marine/fluff/paradox //CKEY=paradox1i7 name = "Templar Armor" desc = "Ancient holy armor of heroes long passed... DONOR ITEM" icon_state = "templar2" item_state = "templar2" -/obj/item/clothing/suit/storage/marine/fluff/roswell +/obj/item/clothing/suit/storage/marine/fluff/chris1464 //CKEY=chris1464 name = "Mercenary Armor" desc = "Armor from an old Mercenary Company, you hope it still holds up... DONOR ITEM" icon_state = "merc_vest" @@ -263,74 +391,68 @@ icon_state = "boba_armor" item_state = "boba_armor" -/obj/item/clothing/suit/storage/marine/fluff/stobarico +/obj/item/clothing/suit/storage/marine/fluff/stobarico //CKEY=stobarico (UNIQUE) name = "British Admiral Uniform" desc = "An ancient uniform of an Admiral. DONOR ITEM" icon_state = "lordadmiral" item_state = "lordadmiral" -/obj/item/clothing/suit/storage/marine/fluff/starscream +/obj/item/clothing/suit/storage/marine/fluff/starscream //CKEY=starscream123 (NOT UNIQUE) name = "Kardar Hussein's Armor" desc = "Slightly worn and torn. DONOR ITEM" icon_state = "merc_armor" item_state = "merc_armor" -/obj/item/clothing/suit/storage/marine/fluff/steelpoint +/obj/item/clothing/suit/storage/marine/fluff/steelpoint //CKEY=steelpoint (UNIQUE) name = "M4X Armor" desc = "Armor to the M4X!!!! DONOR ITEM" icon_state = "steelpoint_armor" item_state = "steelpoint_armor" -/obj/item/clothing/suit/storage/marine/fluff/valentine +/obj/item/clothing/suit/storage/marine/fluff/valentine //CKEY=markvalentine name = "Shocky's Armor" desc = "Shockingly good armor. DONOR ITEM" icon_state = "ertarmor_sec" item_state = "ertarmor_sec" -/obj/item/clothing/suit/storage/marine/fluff/nickiscool +/obj/item/clothing/suit/storage/marine/fluff/nickiskool //CKEY=nickiskool name = "Starlord's Jacket" desc = "Who? DONOR ITEM" icon_state = "star_jacket" item_state = "star_jacker" -/obj/item/clothing/suit/storage/marine/fluff/Sado2 +/obj/item/clothing/suit/storage/marine/fluff/sadokist //CKEY=sadokist name = "T15 spec ops armor" desc = "A suit of tightly woven armor crafted for a special forces operator, meant to be flexible and protective against small arms fire. Seems to be custom fit for a very specific user, as the collar has the name 'Tanya' stamped on it. DONOR ITEM" icon_state = "sadokist_armor" item_state = "sadokist_armor" -/obj/item/clothing/suit/storage/marine/fluff/Fairedan +/obj/item/clothing/suit/storage/marine/fluff/fairedan //CKEY=fairedan (UNIQUE) name = "Freighter Crew Flight Jacket" desc = "Standard Issue Jacket for crew that serve on Lockmart CM-88B Bison starfreighters. It has the number 1809246 on the inside tag... DONOR ITEM" icon_state = "Fairedan_vest" item_state = "Fairedan_vest" -/obj/item/clothing/suit/storage/marine/fluff/Jack +/obj/item/clothing/suit/storage/marine/fluff/jackmcintyre //CKEY=jackmcintyre (UNIQUE) name = "Exo-Suit Jackert" desc = "Some sort of strange Exo-suit jacket. It has the letters USCM stamped over a faded word that appears to be ATLAS... UNIQUE DONOR ITEM" icon_state = "Adam_jacket_u" item_state = "Adam_jacket_u" -/obj/item/clothing/suit/storage/marine/fluff/commisar_armor +/obj/item/clothing/suit/storage/marine/fluff/commissar //used by both ckeys 'hycinth' and 'technokat' (UNIQUE) name = "Omega Commissar Armor" desc = "Armor worn by the feared and respected Comissars of Omega Team. UNIQUE DONOR ITEM" icon_state = "commisar_armor_u" item_state = "commisar_armor_u" -/obj/item/clothing/suit/storage/marine/fluff/medicae_armor +/obj/item/clothing/suit/storage/marine/fluff/medicae_armor //CKEY=graciegrace0 (UNIQUE) name = "Omega Medicae Armor" desc = "Armor worn by the Omega Team Medical Corps. UNIQUE DONOR ITEM" icon_state = "medicae_armor_u" item_state = "medicae_armor_u" -/obj/item/clothing/suit/storage/marine/fluff/standard_armor - name = "Omega Team Armor" - desc = "Armor worn by the Omega Team. DONOR ITEM" - icon_state = "standard_armor" - item_state = "standard_armor" - /obj/item/clothing/suit/storage/marine/fluff/Sanctum_heavy name = "Sanctum Founder Armor" desc = "Personal Armor of the Founder of Sanctum Team. It looks more like a Exosuit. Unique DONOR ITEM" //Add UNIQUE if Unique @@ -343,14 +465,14 @@ icon_state = "Sanctum_Medium_u" item_state = "Sanctum_Medium_u" -/obj/item/clothing/suit/storage/marine/fluff/AlexLemire +/obj/item/clothing/suit/storage/marine/fluff/dudewithatude name = "Rainbow Coat" desc = "Powered by the magic of FRIENDSHIP. (Can be toggled opened or closed) UNIQUE DONOR ITEM" icon_state = "AlexLermire_u" item_state = "AlexLermire_u" var/open = FALSE -/obj/item/clothing/suit/storage/marine/fluff/AlexLemire/verb/verb_toggleopen() +/obj/item/clothing/suit/storage/marine/fluff/dudewithatude/verb/verb_toggleopen() set src in usr set category = "Object" set name = "Toggle Open" @@ -371,13 +493,13 @@ icon_state = "leviathan13_u" item_state = "leviathan13_u" -/obj/item/clothing/suit/storage/marine/fluff/blackdrago +/obj/item/clothing/suit/storage/marine/fluff/trblackdragon //CKEY=trblackdragon name = "Strange Looking Armor" desc = "Looks like it's from another time and place... UNIQUE DONOR ITEM" icon_state = "TR-Donor_u" item_state = "TR-Donor_u" -/obj/item/clothing/suit/storage/marine/fluff/zegara +/obj/item/clothing/suit/storage/marine/fluff/zegara //CKEY=zegara name = "Black and Pink armor" desc = "Shiny black armor with pink accents... UNIQUE DONOR ITEM" icon_state = "zegara_armor_u" @@ -411,7 +533,7 @@ icon_state = "kailas_armor" item_state = "kailas_armor" -/obj/item/clothing/suit/storage/marine/fluff/reznor +/obj/item/clothing/suit/storage/marine/fluff/fridrich name = "Solid Black Labcoat" desc = "Very stylish. DONOR ITEM" icon_state = "Reznoriam" @@ -429,7 +551,7 @@ icon_state = "laser243" item_state = "laser243" -/obj/item/clothing/suit/storage/marine/fluff/killaninja +/obj/item/clothing/suit/storage/marine/fluff/killaninja12 name = "space cowboy armor" desc = "Some people call you the space cowboy, some people call you the gangster of love... UNIQUE DONOR ITEM." icon_state = "killaninja12_u" @@ -445,123 +567,80 @@ // HELMETS/HATS/BERETS COSMETICS //////////////////////////////////////////////// - -//HEAD TEMPLATE (for Helmets/Hats/Berets) ONLY TAKE NAME, DESC, ICON_STATE, AND ITEM_STATE. Make a copy of those, and put the ckey of the person at the end after fluff -/obj/item/clothing/head/helmet/marine/fluff - name = "ITEM NAME" - desc = "ITEM DESCRIPTION. DONOR ITEM" //Add UNIQUE if Unique - icon_state = null - item_state = null - //DON'T GRAB STUFF BETWEEN THIS LINE - icon = 'icons/obj/items/clothing/hats.dmi' - icon_override = 'icons/mob/humans/onmob/head_0.dmi' - flags_inventory = BLOCKSHARPOBJ - flags_inv_hide = HIDEEARS - flags_atom = NO_NAME_OVERRIDE - min_cold_protection_temperature = ICE_PLANET_MIN_COLD_PROT - flags_marine_helmet = NO_FLAGS - -/obj/item/clothing/head/helmet/marine/fluff/verb/toggle_squad_markings() - set src in usr - if(!ishuman(usr)) return - - if(!usr.canmove || usr.stat || usr.is_mob_restrained() || !usr.loc || !isturf(usr.loc)) - to_chat(usr, SPAN_WARNING("Not right now!")) - return - - to_chat(usr, SPAN_NOTICE("You [flags_marine_helmet & HELMET_SQUAD_OVERLAY? "hide" : "show"] the squad markings.")) - flags_marine_helmet ^= HELMET_SQUAD_OVERLAY - usr.update_inv_head() - -/obj/item/clothing/head/helmet/marine/fluff/verb/toggle_garb_overlay() - set src in usr - if(!ishuman(usr)) return - - if(!usr.canmove || usr.stat || usr.is_mob_restrained() || !usr.loc || !isturf(usr.loc)) - to_chat(usr, SPAN_WARNING("Not right now!")) - return - - to_chat(usr, SPAN_NOTICE("You [flags_marine_helmet & HELMET_GARB_OVERLAY? "hide" : "show"] the helmet garb.")) - flags_marine_helmet ^= HELMET_GARB_OVERLAY - update_icon() - - //AND THIS LINE -//END HEAD TEMPLATE - -/obj/item/clothing/head/helmet/marine/fluff/santahat +/obj/item/clothing/head/helmet/marine/fluff/santahat //CKEY=tophatpenguin name = "Santa's hat" desc = "Ho ho ho. Merrry X-mas!" icon_state = "santahat" flags_inventory = BLOCKSHARPOBJ flags_inv_hide = HIDEEARS|HIDEALLHAIR -/obj/item/clothing/head/helmet/marine/fluff/sas +/obj/item/clothing/head/helmet/marine/fluff/sas_juggernaut //CKEY=sasoperative (UNIQUE) name = "Juggernaut Helmet" icon_state = "rig0-syndi" desc = "A red helmet, for pairing with JuggerNaut Armor. DONOR ITEM" -/obj/item/clothing/head/helmet/marine/fluff/tristan +/obj/item/clothing/head/helmet/marine/fluff/tristan //CKEY=tristan63 name = "Fancy Helmet" desc = "That's not red paint. That's real blood. DONOR ITEM" icon_state = "syndicate" flags_inventory = BLOCKSHARPOBJ flags_inv_hide = HIDEEARS|HIDEMASK|HIDEALLHAIR -/obj/item/clothing/head/helmet/marine/fluff/penguin +/obj/item/clothing/head/helmet/marine/fluff/penguin //CKEY=tophatpenguin name = "Top Penguin Hat" icon_state = "petehat" desc = "A hat for a penguin, maybe even the TOP Penguin... DONOR ITEM" flags_inventory = BLOCKSHARPOBJ -/obj/item/clothing/head/helmet/marine/fluff/mycroft +/obj/item/clothing/head/helmet/marine/fluff/feodrich //CKEY=feodrich (UNIQUE) name = "Doom Helmet" icon_state = "doom_helmet" desc = "A Helmet, of a famous Earth warrior... Donor Item" flags_inventory = BLOCKSHARPOBJ flags_inv_hide = HIDEEARS|HIDEMASK|HIDEEYES|HIDEALLHAIR -/obj/item/clothing/head/helmet/marine/fluff/sas2 +/obj/item/clothing/head/helmet/marine/fluff/sas_juggernaut_alt //CKEY=sasoperative (UNIQUE) name = "Juggernaut Helmet" icon_state = "ncrhelmet" desc = "A red helmet, for pairing with JuggerNaut Armor. DONOR ITEM" flags_inventory = BLOCKSHARPOBJ flags_inv_hide = HIDEEARS|HIDEMASK|HIDEEYES|HIDEALLHAIR -/obj/item/clothing/head/helmet/marine/fluff/Sado +/obj/item/clothing/head/helmet/marine/fluff/sadokist //CKEY=sadokist name = "Tanya's Beret" desc = "A bright red beret, owned by Tanya Edenia." icon_state = "beret_badge" flags_inventory = BLOCKSHARPOBJ -/obj/item/clothing/head/helmet/marine/fluff/Robin +/obj/item/clothing/head/helmet/marine/fluff/robin //CKEY=robin63 name = "Robin Low's Beret" desc = "A bright red beret, owned by Robin Low." icon_state = "beret_badge" flags_inventory = BLOCKSHARPOBJ -/obj/item/clothing/head/helmet/marine/fluff/Vintage +/obj/item/clothing/head/helmet/marine/fluff/vintage //CKEY=vintagepalmer name = "Vintage Pimp Hat" icon_state = "petehat" desc = "A pimp hat, for the classic pimp. DONOR ITEM" flags_inventory = BLOCKSHARPOBJ -/obj/item/clothing/head/helmet/marine/fluff/john56 +/obj/item/clothing/head/helmet/marine/fluff/john56 //CKEY=johnkilla56 name = "Priest hood" icon_state = "chaplain_hood" desc = "Thought I walk through the valley in the shadow of death... Donor Item" -/obj/item/clothing/head/helmet/marine/fluff/biolock +/obj/item/clothing/head/helmet/marine/fluff/biolock //CKEY=biolock name = "Medic Helmet" desc = "Medical Helmet designed to protect the head of a medic. DONOR ITEM" icon_state = "helmetm" -/obj/item/clothing/head/helmet/marine/fluff/haveatya +/obj/item/clothing/head/helmet/marine/fluff/haveatya //CKEY=haveatya name = "Pararescue Beret" desc = "A Pararescue Beret, issued only to the very best. DONOR ITEM" icon_state = "beret_badge" flags_inventory = BLOCKSHARPOBJ -/obj/item/clothing/head/helmet/marine/fluff/sas3 +/obj/item/clothing/head/helmet/marine/fluff/sas_elite //CKEY=sasoperative (UNIQUE) name = "Elite Combat Helmet" icon_state = "hecuhelm_u" desc = "A combat helmet, bearing the scars of many battles. UNIQUE DONOR ITEM" @@ -572,7 +651,7 @@ icon_state = "beret_badge" flags_inventory = BLOCKSHARPOBJ -/obj/item/clothing/head/helmet/marine/fluff/anthonycarmine +/obj/item/clothing/head/helmet/marine/fluff/ningajai name = "Anthony's helmet" desc = "COG helmet owned by Anthony Carmine" icon_state = "anthonycarmine" @@ -591,7 +670,7 @@ icon_state = "gtberet" flags_inventory = BLOCKSHARPOBJ -/obj/item/clothing/head/helmet/marine/fluff/elliotberet +/obj/item/clothing/head/helmet/marine/fluff/commandercookies //CKEY=commandercookies name = "Elliots Beret" desc = "A dark maroon beret" icon_state = "eberet" @@ -604,7 +683,7 @@ item_state = "detective" flags_inventory = BLOCKSHARPOBJ -/obj/item/clothing/head/helmet/marine/fluff/limo +/obj/item/clothing/head/helmet/marine/fluff/limo //CKEY=limodish (UNIQUE) name = "Blood Red Hardsuit" desc = "It looks like a costume hardsuit helmet. DONOR ITEM" icon_state = "syndicate" @@ -612,7 +691,7 @@ flags_inventory = BLOCKSHARPOBJ flags_inv_hide = HIDEEARS|HIDEMASK|HIDEALLHAIR -/obj/item/clothing/head/helmet/marine/fluff/devil +/obj/item/clothing/head/helmet/marine/fluff/devilzhand name = "MICH Helmet" desc = "A fancy combat helmet. DONOR ITEM" icon_state = "mich" @@ -626,7 +705,7 @@ flags_inventory = BLOCKSHARPOBJ flags_inv_hide = HIDEEARS|HIDEEYES -/obj/item/clothing/head/helmet/marine/fluff/BWO +/obj/item/clothing/head/helmet/marine/fluff/bwoincognito //CKEY=bwoincognito name = "Fallout Helmet" desc = "A helmet from an ancient wastelander... UNIQUE DONOR ITEM" icon_state = "riothelm_u" @@ -641,7 +720,7 @@ item_state = "beret_badge" flags_inventory = BLOCKSHARPOBJ -/obj/item/clothing/head/helmet/marine/fluff/fick +/obj/item/clothing/head/helmet/marine/fluff/fickmacher //CKEY=fickmacher (UNIQUE) name = "Selena's hat" desc = "A fancy beret. DONOR ITEM" icon_state = "hosberet" @@ -655,21 +734,21 @@ item_state = "hosberet" flags_inventory = BLOCKSHARPOBJ -/obj/item/clothing/head/helmet/marine/fluff/chimera +/obj/item/clothing/head/helmet/marine/fluff/chimera //CKEY=theultimatechimera name = "Brett's hat" desc = "A fancy beret. DONOR ITEM" icon_state = "hosberet" item_state = "hosberet" flags_inventory = BLOCKSHARPOBJ -/obj/item/clothing/head/helmet/marine/fluff/lostmix +/obj/item/clothing/head/helmet/marine/fluff/lostmixup name = "Infinite Ammo Bandanna" desc = "Disclaimer: Probably doesn't provide infinite ammo. UNIQUE DONOR ITEM" icon_state = "headband_u" item_state = "headband_u" flags_inventory = BLOCKSHARPOBJ -/obj/item/clothing/head/helmet/marine/fluff/LEO +/obj/item/clothing/head/helmet/marine/fluff/totalanarchy //CKEY=totalanarchy name = "Leo's Helm" desc = "An old mercenary helmet. DONOR ITEM" icon_state = "merc_helm" @@ -677,20 +756,20 @@ flags_inventory = BLOCKSHARPOBJ flags_inv_hide = HIDELOWHAIR -/obj/item/clothing/head/helmet/marine/fluff/oneonethreeeight +/obj/item/clothing/head/helmet/marine/fluff/oneonethreeeight //CKEY=oneonethreeeight name = "Camouflage Helmet" desc = "Woodland Camouflage helmet. DONOR ITEM" icon_state = "camo_helm" item_state = "camo_helm" -/obj/item/clothing/head/helmet/marine/fluff/dino +/obj/item/clothing/head/helmet/marine/fluff/dino //CKEY=dinobubba7 name = "Snake's Bandana" desc = "Property of The Boss. DONOR ITEM" icon_state = "snakeheadband" item_state = "snakeheadband" flags_inventory = BLOCKSHARPOBJ -/obj/item/clothing/head/helmet/marine/fluff/paradox +/obj/item/clothing/head/helmet/marine/fluff/paradox //CKEY=paradox1i7 name = "Templar Helmet" desc = "The helm of a once powerful order. DONOR ITEM" icon_state = "templar_helm" @@ -705,7 +784,7 @@ item_state = "beret_badge" flags_inventory = BLOCKSHARPOBJ -/obj/item/clothing/head/helmet/marine/fluff/roswell +/obj/item/clothing/head/helmet/marine/fluff/chris1464 //CKEY=chris1464 name = "Merc Beret" desc = "Beret from a Mercenary Company. DONOR ITEM" icon_state = "cargosoft" @@ -720,7 +799,7 @@ flags_inventory = BLOCKSHARPOBJ flags_inv_hide = HIDEEARS|HIDEMASK|HIDEEYES|HIDEALLHAIR -/obj/item/clothing/head/helmet/marine/fluff/coleMercer +/obj/item/clothing/head/helmet/marine/fluff/whiteblood17 //CKEY=whiteblood17 name = "Black Ops Helmet" desc = "You're not authorized to look at it. DONOR ITEM" icon_state = "syndicate-helm-black" @@ -728,14 +807,14 @@ flags_inventory = BLOCKSHARPOBJ flags_inv_hide = HIDEEARS|HIDEMASK|HIDEALLHAIR -/obj/item/clothing/head/helmet/marine/fluff/leondark +/obj/item/clothing/head/helmet/marine/fluff/leondark //CKEY=leondark16 name = "Hunter's USCM Cap" desc = "A well-worn cap with the name 'Barrientos' written on the inside. DONOR ITEM" icon_state = "USCM_cap" item_state = "USCM_cap" flags_inventory = BLOCKSHARPOBJ -/obj/item/clothing/head/helmet/marine/fluff/starscream +/obj/item/clothing/head/helmet/marine/fluff/starscream //CKEY=starscream123 (UNIQUE) name = "Kardar Hussein's Helmet" desc = "Slightly worn and torn. DONOR ITEM" icon_state = "asset_protect" @@ -743,7 +822,7 @@ flags_inventory = BLOCKSHARPOBJ flags_inv_hide = HIDEEARS|HIDEMASK|HIDEEYES|HIDEALLHAIR -/obj/item/clothing/head/helmet/marine/fluff/blackdragon +/obj/item/clothing/head/helmet/marine/fluff/trblackdragon //CKEY=trblackdragon name = "Spartan Helmet" desc = "SPARTANS, WHAT IS YOUR PROFESSION? DONOR ITEM" icon_state = "blackdragon_helmet_u" //UNIQUE @@ -751,7 +830,7 @@ flags_inventory = BLOCKSHARPOBJ flags_inv_hide = HIDEEARS|HIDEMASK|HIDEEYES|HIDEALLHAIR -/obj/item/clothing/head/helmet/marine/fluff/steelpoint +/obj/item/clothing/head/helmet/marine/fluff/steelpoint //CKEY=steelpoint (UNIQUE) name = "M4X Helmet" desc = "Helmets to the M4X!!! DONOR ITEM" icon_state = "steelpoint_helmet" @@ -759,7 +838,7 @@ flags_inventory = BLOCKSHARPOBJ flags_inv_hide = HIDEEARS|HIDEMASK|HIDEEYES|HIDEALLHAIR -/obj/item/clothing/head/helmet/marine/fluff/valentine +/obj/item/clothing/head/helmet/marine/fluff/valentine //CKEY=markvalentine name = "Shocky's Helmet" desc = "Shockingly good helmet. DONOR ITEM" icon_state = "syndicate-helm-black" @@ -767,14 +846,14 @@ flags_inventory = BLOCKSHARPOBJ flags_inv_hide = HIDEEARS|HIDEMASK|HIDEALLHAIR -/obj/item/clothing/head/helmet/marine/fluff/Jdobbin49 +/obj/item/clothing/head/helmet/marine/fluff/jdobbin49 //CKEY=jdobbin49 name = "Phillip's Beret" desc = "Beret owned by Phillip Greenwall. DONOR ITEM" icon_state = "berettan" item_state = "berettan" flags_inventory = BLOCKSHARPOBJ -/obj/item/clothing/head/helmet/marine/fluff/nickiscool +/obj/item/clothing/head/helmet/marine/fluff/nickiskool //CKEY=nickiskool name = "Starlord Mask" desc = "Just in case someone might recognize you... DONOR ITEM" icon_state = "star_mask" @@ -782,7 +861,7 @@ flags_inventory = BLOCKSHARPOBJ flags_inv_hide = HIDEEARS|HIDEMASK|HIDEEYES|HIDEALLHAIR -/obj/item/clothing/head/helmet/marine/fluff/Bibblesless +/obj/item/clothing/head/helmet/marine/fluff/bibblesless name = "Yellow ERT Helmet" desc = "Standard Emergency Helmet, yellow variety.... DONOR ITEM" icon_state = "rig0-ert_engineer" @@ -790,7 +869,7 @@ flags_inventory = BLOCKSHARPOBJ flags_inv_hide = HIDEEARS|HIDEMASK|HIDEEYES|HIDEALLHAIR -/obj/item/clothing/head/helmet/marine/fluff/FernKiller +/obj/item/clothing/head/helmet/marine/fluff/fernkiller name = "White ERT Helmet" desc = "Standard Emergency Helmet, white variety.... DONOR ITEM" icon_state = "rig0-ert_medical" @@ -798,14 +877,14 @@ flags_inventory = BLOCKSHARPOBJ flags_inv_hide = HIDEEARS|HIDEMASK|HIDEEYES|HIDEALLHAIR -/obj/item/clothing/head/helmet/marine/fluff/Jack +/obj/item/clothing/head/helmet/marine/fluff/jackmcintyre //CKEY=jackmcintyre (UNIQUE) name = "USCM Ball Cap" desc = "USCM Cold Weather Ball Cap... DONOR ITEM" icon_state = "Adam_hat" item_state = "Adam_hat" flags_inventory = BLOCKSHARPOBJ -/obj/item/clothing/head/helmet/marine/fluff/commissar_helmet +/obj/item/clothing/head/helmet/marine/fluff/commissar //used by both ckeys 'hycinth' and 'technokat' (UNIQUE) name = "Omega Commissar Helmet" desc = "Helmet worn by the Comissars of Omega Team. UNIQUE DONOR ITEM" icon_state = "commissar_helmet_u" @@ -813,7 +892,7 @@ flags_inventory = BLOCKSHARPOBJ flags_inv_hide = HIDEEARS|HIDEMASK|HIDEEYES|HIDEALLHAIR -/obj/item/clothing/head/helmet/marine/fluff/medicae_helmet +/obj/item/clothing/head/helmet/marine/fluff/medicae_helmet //CKEY=graciegrace0 (UNIQUE) name = "Omega Medicae Helmet" desc = "Helmet worn by the Medical Corps of Omega Team. UNIQUE DONOR ITEM" icon_state = "medicae_helmet_u" @@ -821,14 +900,6 @@ flags_inventory = BLOCKSHARPOBJ flags_inv_hide = HIDEEARS|HIDEMASK|HIDEEYES|HIDEALLHAIR -/obj/item/clothing/head/helmet/marine/fluff/standard_helmet - name = "Omega Team Helmet" - desc = "Helmet worn by Omega Team. DONOR ITEM" //Add UNIQUE if Unique - icon_state = "standard_helmet" - item_state = "standard_helmet" - flags_inventory = BLOCKSHARPOBJ - flags_inv_hide = HIDEEARS|HIDEMASK|HIDEEYES|HIDEALLHAIR - /obj/item/clothing/head/helmet/marine/fluff/Sanctum_helmet name = "Sanctum Combat Helmet" desc = " The Standard Issue helmet of Sanctum Team. DONOR ITEM" //Add UNIQUE if Unique @@ -837,7 +908,7 @@ flags_inventory = BLOCKSHARPOBJ flags_inv_hide = HIDEEARS|HIDEMASK|HIDEEYES|HIDEALLHAIR -/obj/item/clothing/head/helmet/marine/fluff/DingleDangle +/obj/item/clothing/head/helmet/marine/fluff/dingledangle name = "Rusty's Cap" desc = "A little old and shabby. The color has slightly faded over time. DONOR ITEM" icon_state = "bluesoft" @@ -893,97 +964,89 @@ //AND THIS LINE //END UNIFORM TEMPLATE -/obj/item/clothing/under/marine/fluff/marinemedic +/obj/item/clothing/under/marine/fluff/marinemedic //UNUSED name = "Marine Medic jumpsuit" desc = "A standard quilted Colonial Marine jumpsuit. Weaved with armored plates to protect against low-caliber rounds and light impacts. Has medical markings. " icon_state = "marine_medic" worn_state = "marine_medic" -/obj/item/clothing/under/marine/fluff/marineengineer +/obj/item/clothing/under/marine/fluff/marineengineer //UNUSED name = "Marine Technician jumpsuit" desc = "A standard quilted Colonial Marine jumpsuit. Weaved with armored plates to protect against low-caliber rounds and light impacts. Has engineer markings. " icon_state = "marine_engineer" worn_state = "marine_engineer" -/obj/item/clothing/under/marine/fluff/turtleneck - name = "Black Ops Turtleneck" - desc = "A $900 black turtleneck woven from only the purest Azerbaijani cashmere wool. DONOR ITEM" - icon_state = "syndicate" - item_state = "bl_suit" - worn_state = "syndicate" - flags_jumpsuit = FALSE - -/obj/item/clothing/under/marine/fluff/tristan +/obj/item/clothing/under/marine/fluff/tristan //CKEY=tristan63 desc = "It's a blue jumpsuit with some gold markings denoting the rank of \"Captain\"." name = "captain's jumpsuit" icon_state = "camojump" worn_state = "camojump" flags_jumpsuit = FALSE -/obj/item/clothing/under/marine/fluff/SAS +/obj/item/clothing/under/marine/fluff/sas_legion //CKEY=sasoperative (UNIQUE) name = "Legion Suit" desc = "This armor was custom-made to resemble the small growing Legion within the galaxy started by one man slowly making its way to becoming a larger Corporation. DONOR ITEM." icon_state = "ncr_uni" worn_state = "ncr_uni" flags_jumpsuit = FALSE -/obj/item/clothing/under/marine/fluff/mycroft +/obj/item/clothing/under/marine/fluff/feodrich //CKEY=feodrich (UNIQUE) name = "Doom Uniform" desc = "A uniform, of a famous Earth warrior... Donor Item" icon_state = "doom_suit" worn_state = "doom_suit" flags_jumpsuit = FALSE -/obj/item/clothing/under/marine/fluff/LEO +/obj/item/clothing/under/marine/fluff/totalanarchy //CKEY=totalanarchy name = "Mercenary Jumpsuit Suit" desc = "A uniform from a band of mercenaries... DONOR ITEM." icon_state = "merc_jumpsuit" worn_state = "merc_jumpsuit" flags_jumpsuit = FALSE -/obj/item/clothing/under/marine/fluff/john56 +/obj/item/clothing/under/marine/fluff/john56 //CKEY=johnkilla56 name = "Pink Pride Jumpsuit" desc = "A jumpsuit for showing your pride in pink... Donor Item" icon_state = "pink" worn_state = "pink" flags_jumpsuit = FALSE -/obj/item/clothing/under/marine/fluff/sas3 //UNIQUE +/obj/item/clothing/under/marine/fluff/sas_elite //CKEY=sasoperative (UNIQUE) name = "Black Fatigues" desc = "Black camo Fatigues usually used on Night Operations. UNIQUE DONOR ITEM." icon_state = "hecu_u" worn_state = "hecu_u" flags_jumpsuit = FALSE -/obj/item/clothing/under/marine/fluff/leeeverett +/obj/item/clothing/under/marine/fluff/leeeverett //CKEY=theflagbearer (UNIQUE) name = "Rugged Outfit" desc = "It's covered in blood and smells terrible. Who died in this?" icon_state = "rugged" worn_state = "rugged" flags_jumpsuit = FALSE -/obj/item/clothing/under/marine/fluff/Vintage +/obj/item/clothing/under/marine/fluff/vintage //CKEY=vintagepalmer name = "Vintage Pink Jumpsuit" desc = "A jumpsuit that was either once red, or once white and washed with a load of colors... Donor Item" icon_state = "pink" worn_state = "pink" flags_jumpsuit = FALSE -/obj/item/clothing/under/marine/fluff/wooki +/obj/item/clothing/under/marine/fluff/wooki //CKEY=tophatpenguin (UNIQUE) name = "Fancy Uniform" desc = "Wooki's fancy blue suit. UNIQUE DONOR ITEM" icon_state = "wooki_u" worn_state = "wooki_u" flags_jumpsuit = FALSE -/obj/item/clothing/under/marine/fluff/Zynax +/obj/item/clothing/under/marine/fluff/Zynax //CKEY=zynax name = "Gorka Suit" desc = "Russian Gamo. DONOR ITEM" icon_state = "gorkasuit" worn_state = "gorkasuit" flags_jumpsuit = FALSE -/obj/item/clothing/under/marine/fluff/BWO +/obj/item/clothing/under/marine/fluff/bwoincognito //CKEY=bwoincognito name = "Fallout Suit" desc = "A suit from an ancient group of wastelanders... UNIQUE DONOR ITEM" icon_state = "riot_u" @@ -997,7 +1060,7 @@ worn_state = "hos_corporate" flags_jumpsuit = FALSE -/obj/item/clothing/under/marine/fluff/fick +/obj/item/clothing/under/marine/fluff/fickmacher //CKEY=fickmacher (UNIQUE) name = "Selena's Tactical Suit" desc = "A strange looking black jumpsuit. DONOR ITEM" icon_state = "robotics" @@ -1010,35 +1073,35 @@ worn_state = "hawkeye_jumpsuit_u" flags_jumpsuit = FALSE -/obj/item/clothing/under/marine/fluff/pink +/obj/item/clothing/under/marine/fluff/feweh //CKEY=feweh name = "Pink Fatigues" desc = "For fighting breast cancer. With bullets. Donor Item" icon_state = "pink2" worn_state = "pink2" flags_jumpsuit = FALSE -/obj/item/clothing/under/marine/fluff/oneonethreeeight +/obj/item/clothing/under/marine/fluff/oneonethreeeight //CKEY=oneonethreeeight name = "Camouflage Jumpsuit" desc = "Woodland Camouflage Jumpsuit. DONOR ITEM" icon_state = "camo_jumpsuit" worn_state = "camo_jumpsuit" flags_jumpsuit = FALSE -/obj/item/clothing/under/marine/fluff/fick2 +/obj/item/clothing/under/marine/fluff/fickmacher2 //CKEY=fickmacher (UNIQUE) name = "Hart's Suit" desc = "It looks like the Right Arm is robotic. DONOR ITEM" icon_state = "hart_jumpsuit" worn_state = "hart_jumpsuit" flags_jumpsuit = FALSE -/obj/item/clothing/under/marine/fluff/paradox +/obj/item/clothing/under/marine/fluff/paradox //CKEY=paradox1i7 name = "Templar Jumpsuit" desc = "The interface components, for Templar Armor. DONOR ITEM" icon_state = "templar_jumpsuit" worn_state = "templar_jumpsuit" flags_jumpsuit = FALSE -/obj/item/clothing/under/marine/fluff/roswell +/obj/item/clothing/under/marine/fluff/chris1464 //CKEY=chris1464 name = "Merc Jumpsuit" desc = "Jumpsuit from a super shady mercenary company. DONOR ITEM" icon_state = "merc_jumpsuit" @@ -1052,35 +1115,35 @@ worn_state = "boba_jumpsuit" flags_jumpsuit = FALSE -/obj/item/clothing/under/marine/fluff/jackmcintyre +/obj/item/clothing/under/marine/fluff/jackmcintyre_alt //CKEY=jackmcintyre name = "Dress Uniform" desc = "A Dress uniform, worn by standard marines. DONOR ITEM" icon_state = "BO_jumpsuit" worn_state = "BO_jumpsuit" flags_jumpsuit = FALSE -/obj/item/clothing/under/marine/fluff/starscream +/obj/item/clothing/under/marine/fluff/starscream //CKEY=starscream123 (UNIQUE) name = "Kardar Hussein's Jumpsuit" desc = "Slightly worn and torn. DONOR ITEM" icon_state = "merc_jumpsuit2" worn_state = "merc_jumpsuit2" flags_jumpsuit = FALSE -/obj/item/clothing/under/marine/fluff/allan +/obj/item/clothing/under/marine/fluff/allan1234 name = "Commander Jumpsuit" desc = "Jumpsuit worn by a space commander... DONOR ITEM" icon_state = "henrick_jumpsuit" worn_state = "henrick_jumpsuit" flags_jumpsuit = FALSE -/obj/item/clothing/under/marine/fluff/steelpoint +/obj/item/clothing/under/marine/fluff/steelpoint //CKEY=steelpoint (UNIQUE) name = "M4X Jumpsuit" desc = "Jumpsuit to the M4X!!! DONOR ITEM" icon_state = "steelpoint_jumpsuit" worn_state = "steelpoint_jumpsuit" flags_jumpsuit = FALSE -/obj/item/clothing/under/marine/fluff/valentine +/obj/item/clothing/under/marine/fluff/valentine //CKEY=markvalentine name = "Shocky's Jumpsuit" desc = "Shockingly good Jumpsuit. DONOR ITEM" icon_state = "jensen" @@ -1094,70 +1157,63 @@ worn_state = "samus_jumpsuit" flags_jumpsuit = FALSE -/obj/item/clothing/under/marine/fluff/nickiscool +/obj/item/clothing/under/marine/fluff/nickiskool //CKEY=nickiskool name = "Starlords Jumpsuit" desc = "Designed to show off your manly muscles for all the ladies. DONOR ITEM" icon_state = "star_jumpsuit" worn_state = "star_jumpsuit" flags_jumpsuit = FALSE -/obj/item/clothing/under/marine/fluff/Jack +/obj/item/clothing/under/marine/fluff/jackmcintyre //CKEY=jackmcintyre (UNIQUE) name = "White shirt and black Pants" desc = "Perfect for formal dress, or going to a combat zone in Style. UNIQUE DONOR ITEM" icon_state = "Adam_jumpsuit_u" worn_state = "Adam_jumpsuit_u" flags_jumpsuit = FALSE -/obj/item/clothing/under/marine/fluff/Fairedan +/obj/item/clothing/under/marine/fluff/fairedan //CKEY=fairedan (UNIQUE) name = "Starfreighter Jumpsuit" desc = "Standard Issue Jumpsuit for crew that serve on Lockmart CM-88B Bison starfreighters. It has the number 1809246 on the inside tag.... DONOR ITEM" icon_state = "Fairedan_jumpsuit" worn_state = "Fairedan_jumpsuit" flags_jumpsuit = FALSE -/obj/item/clothing/under/marine/fluff/commisar_jumpsuit +/obj/item/clothing/under/marine/fluff/commissar //used by both ckeys 'hycinth' and 'technokat' (UNIQUE) name = "Omega Commissar Uniform" desc = "Uniform worn by the Comissars of Omega Team. UNIQUE DONOR ITEM" icon_state = "commisar_jumpsuit_u" worn_state = "commisar_jumpsuit_u" flags_jumpsuit = FALSE -/obj/item/clothing/under/marine/fluff/medicae_jumpsuit +/obj/item/clothing/under/marine/fluff/medicae_jumpsuit //CKEY=graciegrace0 (UNIQUE) name = "Omega Medicae Uniform" desc = "Uniform work by the Medical Corps of Omega Team. UNIQUE DONOR ITEM" icon_state = "medicae_jumpsuit_u" worn_state = "medicae_jumpsuit_u" flags_jumpsuit = FALSE -/obj/item/clothing/under/marine/fluff/standard_jumpsuit - name = "Omega Team Uniform" - desc = "Uniform worn by Omega Team. DONOR ITEM" - icon_state = "standard_jumpsuit" - worn_state = "standard_jumpsuit" - flags_jumpsuit = FALSE - -/obj/item/clothing/under/marine/fluff/Sanctum_uniform +/obj/item/clothing/under/marine/fluff/sanctum_uniform //NO USER name = "Sanctum Fatigues" desc = "Fatigues with Kevlar fibers for a bit more protection than most clothing. UNIQUE DONOR ITEM" icon_state = "Sanctum_u" worn_state = "Sanctum_u" flags_jumpsuit = FALSE -/obj/item/clothing/under/marine/fluff/sailorDave +/obj/item/clothing/under/marine/fluff/sailordave //CKEY=sailordave name = "Eden USCM uniform" desc = "An older model USCM uniform. UNIQUE DONOR ITEM" icon_state = "syndicate" worn_state = "syndicate" flags_jumpsuit = FALSE -/obj/item/clothing/under/marine/fluff/coleMercer +/obj/item/clothing/under/marine/fluff/whiteblood17 //CKEY=whiteblood17 name = "Black Ops uniform" desc = "Way above your pay grade... DONOR ITEM" icon_state = "jensen" worn_state = "jensen" flags_jumpsuit = FALSE -/obj/item/clothing/under/marine/fluff/mileswolfe +/obj/item/clothing/under/marine/fluff/mileswolfe //CKEY=mileswolfe name = "tiger striped combat fatigues" desc = "Combat Fatigues that appear to have tiger stripes on them. UNIQUE DONOR ITEM" icon_state = "mileswolfe_u" @@ -1167,35 +1223,14 @@ // MASK COSMETICS //////////////////////////////////////////////// -//MASK TEMPLATE (for masks) ONLY TAKE NAME, DESC, ICON_STATE, ITEM_STATE, AND ITEM_COLOR. Make a copy of those, and put the ckey of the person at the end after fluff -/obj/item/clothing/mask/fluff - name = "ITEM NAME" - desc = "ITEM DESCRIPTION. DONOR ITEM" //Add UNIQUE if Unique - icon_state = null - item_state = null - //DON'T GRAB STUFF BETWEEN THIS LINE - flags_inventory = ALLOWREBREATH - flags_inv_hide = HIDEEARS|HIDEEYES|HIDEFACE - //AND THIS LINE - -//END MASK TEMPLATE - - -/obj/item/clothing/mask/fluff/john56 +/obj/item/clothing/mask/fluff/john56 //CKEY=johnkilla56 name = "Revan Mask" desc = "A mask from a famous sith... Wait what? DONOR ITEM." item_state = "revanmask" icon_state = "revanmask" -/obj/item/clothing/mask/fluff/balaclava - name = "Balaclava" - desc = "A black Balaclava used for hiding your face. DISCLAIMER: May not actually hide your face... DONOR ITEM" - item_state = "balaclava" - icon_state = "balaclava" - flags_inventory = COVERMOUTH|ALLOWREBREATH - flags_inv_hide = HIDEEARS|HIDEFACE|HIDEALLHAIR -/obj/item/clothing/mask/fluff/SAS +/obj/item/clothing/mask/fluff/sas_legion //CKEY=sasoperative (UNIQUE) name = "Legion Mask" desc = "This armor was custom-made to resemble the small growing Legion within the galaxy started by one man slowly making its way to becoming a larger Corporation. DONOR ITEM." icon_override = 'icons/mob/humans/onmob/mask.dmi' @@ -1204,7 +1239,7 @@ flags_inventory = COVERMOUTH|ALLOWREBREATH flags_inv_hide = HIDEEARS|HIDEFACE|HIDEALLHAIR -/obj/item/clothing/mask/fluff/LEO +/obj/item/clothing/mask/fluff/totalanarchy //CKEY=totalanarchy name = "PMC Mask" desc = "A white colored PMC Mask. DONOR ITEM." icon_override = 'icons/mob/humans/onmob/mask.dmi' @@ -1213,13 +1248,13 @@ flags_inventory = COVERMOUTH|ALLOWREBREATH flags_inv_hide = HIDEEARS|HIDEFACE|HIDEALLHAIR -/obj/item/clothing/mask/fluff/sas3 //UNIQUE +/obj/item/clothing/mask/fluff/sas_elite //CKEY=sasoperative (UNIQUE) name = "Compact Gas Mask" desc = "A compact Gas Mask with a pure red tint to it. UNIQUE DONOR ITEM." item_state = "hecumask_u" icon_state = "hecumask_u" -/obj/item/clothing/mask/fluff/limo +/obj/item/clothing/mask/fluff/limo //CKEY=limodish name = "Swat Mask" desc = "Swat Gas Mask. DONOR ITEM" icon_state = "swat" @@ -1227,7 +1262,7 @@ flags_inventory = ALLOWREBREATH flags_inv_hide = HIDEEYES|HIDEFACE -/obj/item/clothing/mask/fluff/pink +/obj/item/clothing/mask/fluff/feweh //CKEY=feweh name = "Pink's Gas Mask" desc = "A standard issue gas mask. DONOR ITEM" icon_state = "swat" @@ -1235,7 +1270,7 @@ flags_inventory = ALLOWREBREATH flags_inv_hide = HIDEEYES|HIDEFACE -/obj/item/clothing/mask/fluff/fick2 +/obj/item/clothing/mask/fluff/fickmacher2 //CKEY=fickmacher (UNIQUE) name = "Corporal Hart's Mask" desc = "A robotic looking Armored mask. DONOR ITEM" icon_state = "hartmask" @@ -1243,7 +1278,7 @@ flags_inventory = ALLOWREBREATH flags_inv_hide = HIDEFACE -/obj/item/clothing/mask/fluff/starscream +/obj/item/clothing/mask/fluff/starscream //CKEY=starscream123 (UNIQUE) name = "Kardar Hussein's mask" desc = "Slightly worn and torn. DONOR ITEM" icon_state = "merc_mask" @@ -1251,7 +1286,7 @@ flags_inventory = ALLOWREBREATH flags_inv_hide = HIDEFACE -/obj/item/clothing/mask/fluff/lostmix +/obj/item/clothing/mask/fluff/lostmixup name = "Phantom Cigar" desc = "It's a g-g-g-g-g-ghost cigar. DONOR ITEM" //Add UNIQUE if Unique icon_state = "cigar_on" @@ -1260,28 +1295,19 @@ flags_inv_hide = HIDEFACE // BOOTS/SHOES COSMETICS //////////////////////////////////////////////// - -//FEET TEMPLATE (for masks) ONLY TAKE NAME, DESC, ICON_STATE, ITEM_STATE, AND ITEM_COLOR. Make a copy of those, and put the ckey of the person at the end after fluff -/obj/item/clothing/shoes/marine/fluff - name = "ITEM NAME" - desc = "ITEM DESCRIPTION. DONOR ITEM" //Add UNIQUE if Unique - icon_state = null - item_state = null -//END FEET TEMPLATE - -/obj/item/clothing/shoes/marine/fluff/Vintage +/obj/item/clothing/shoes/marine/fluff/vintage //CKEY=vintagepalmer name = "Vintage Sandals" desc = "Vintage Sandals, suitable for only the highest class of hipster. DONOR ITEM" icon_state = "wizard" item_state = "wizard" -/obj/item/clothing/shoes/marine/fluff/mycroft +/obj/item/clothing/shoes/marine/fluff/feodrich //CKEY=feodrich (UNIQUE) name = "Doom Shoes" desc = "A uniform, of a famous Earth warrior... Donor Item" icon_state = "doom_boots" item_state = "doom_boots" -/obj/item/clothing/shoes/marine/fluff/steelpoint +/obj/item/clothing/shoes/marine/fluff/steelpoint //CKEY=steelpoint (UNIQUE) name = "M4X Boot" desc = "Boots to the M4X. DONOR ITEM" icon_state = "jackboots" @@ -1289,47 +1315,31 @@ //GENERIC GLASSES, GLOVES, AND MISC //////////////////// -/obj/item/clothing/gloves/marine/fluff //MARINE GLOVES TEMPLATE - name = "ITEM NAME" - desc = "ITEM DESCRIPTION. DONOR ITEM" //Add UNIQUE if Unique - icon_state = null - item_state = null - -/obj/item/clothing/glasses/fluff - flags_inventory = COVEREYES - -/obj/item/clothing/glasses/fluff/eyepatch - name = "An Eyepatch" - desc = "Badass +10. Donor Item" - icon_state = "eyepatch" - item_state = "eyepatch" - -/obj/item/clothing/glasses/fluff/wright +/obj/item/clothing/glasses/fluff/wright //CKEY=wrightthewrong name = "eyepatch" desc = "Yarr, this be a Donor Item, YARR!" icon_state = "eyepatch" item_state = "eyepatch" -/obj/item/clothing/glasses/fluff/sado +/obj/item/clothing/glasses/fluff/sadokist //CKEY=sadokist name = "Tanya's Optics" desc = "Custom Optics, owned by Tanya Edenia" icon_state = "thermal" item_state = "glasses" -/obj/item/clothing/glasses/fluff/haveatya +/obj/item/clothing/glasses/fluff/haveatya //CKEY=haveatya name = "Special Nightvision Goggles" desc = "Disclaimer: May not provide Night Vision. DONOR ITEM" icon_state = "night" item_state = "glasses" -/obj/item/clothing/gloves/black/obey +/obj/item/clothing/gloves/black/obey //CKEY=obeystylez (UNIQUE) desc = "Black gloves, favored by Special Operations teams. DONOR ITEM" name = "Black Ops Black Gloves" -/obj/item/storage/backpack/marine/fluff - xeno_types = null +//BACKPACKS -/obj/item/storage/backpack/marine/fluff/Sado +/obj/item/storage/backpack/marine/fluff/sadokist //CKEY=sadokist name = "Tanya's Backpack" desc = "A large backpack, used by Tanya Edenia. DONOR ITEM" icon_state = "securitypack" @@ -1341,32 +1351,32 @@ icon_state = "securitypack" item_state = "securitypack" -/obj/item/clothing/glasses/fluff/alexwar +/obj/item/clothing/glasses/fluff/alexwarhammer name = "Black Jack's Dank Shades" desc = "+20 Badass points. Donor item" icon_state = "sun" item_state = "sun" -/obj/item/clothing/gloves/marine/fluff/jedijas +/obj/item/clothing/gloves/marine/fluff/jedijas //CKEY=jedijasun (UNIQUE) name = "Fists of Mandalore" desc = "If Mandalore was a person, these would be it's fists... DONOR ITEM" icon_state = "marine_white" item_state = "marine_wgloves" -/obj/item/storage/belt/marine/fluff/swordbelt +/obj/item/storage/belt/marine/fluff/commissar //used by both ckeys 'hycinth' and 'technokat' (UNIQUE) name = "Omega Sword Belt" desc = "Belt worn by the dreaded Commissars of Omega Team. UNIQUE DONOR ITEM" icon_state = "swordbelt_u" item_state = "swordbelt_u" //CUSTOM ITEMS - NO TEMPLATES - ALL UNIQUE //////////////////////// -/obj/item/tool/lighter/zippo/fluff/ghost - name = "Gold zippo lighter" - desc = "A Golden Zippo lighter, engraved with the name John Donable... UNIQUE DONOR ITEM." +/obj/item/tool/lighter/zippo/fluff/ghostdex //CKEY=ghostdex + name = "purple zippo lighter" + desc = "A Purple Zippo lighter, engraved with the name John Donable... UNIQUE DONOR ITEM." icon = 'icons/obj/items/items.dmi' icon_state = "bluezippo" -/obj/item/clothing/mask/cigarette/fluff/ghost +/obj/item/clothing/mask/cigarette/fluff/ghostdex //CKEY=ghostdex name = "XXX's custom Cigar" desc = "A custom rolled giant, made specifically for John Donable in the best, hottest, and most abusive of Cuban sweat shops. UNIQUE DONOR ITEM." icon_state = "cigar2_off" @@ -1378,8 +1388,8 @@ //GHOST CIGAR CODE -/obj/item/clothing/mask/cigarette/cigar/fluff/ghost/attackby(obj/item/W as obj, mob/user as mob) - if(istype(W, /obj/item/tool/lighter/zippo/fluff/ghost)) +/obj/item/clothing/mask/cigarette/cigar/fluff/ghostdex/attackby(obj/item/W as obj, mob/user as mob) + if(istype(W, /obj/item/tool/lighter/zippo/fluff/ghostdex)) ..() else to_chat(user, SPAN_NOTICE("\The [src] straight out REFUSES to be lit by anything other than a purple zippo.")) diff --git a/code/modules/cm_marines/Donator_Kits.dm b/code/modules/cm_marines/Donator_Kits.dm new file mode 100644 index 000000000000..2576732736aa --- /dev/null +++ b/code/modules/cm_marines/Donator_Kits.dm @@ -0,0 +1,588 @@ +/obj/item/storage/box/donator_kit + name = "donated box" + desc = "A cardboard box stamped with a dollar sign and filled with trinkets. Appears to have been donated by a wealthy sponsor." + icon_state = "donator_kit" + item_state = "giftbag" + var/list/donor_gear = list() + var/donor_key = "GENERIC" //Key the kit is assigned to. If GENERIC, not tied to particular donor. + var/kit_variant + max_w_class = SIZE_TINY + +/obj/item/storage/box/donator_kit/New() + if(kit_variant) + name = "[name] ([kit_variant])" + ..() + +/obj/item/storage/box/donator_kit/fill_preset_inventory() + for(var/donor_item in donor_gear) + new donor_item(src) + +/obj/item/storage/box/donator_kit/open(mob/user) + if((donor_key != "GENERIC") && (donor_key != user.ckey)) + to_chat(user, SPAN_BOLDWARNING("You cannot open a donator kit you do not own!")) + return FALSE + ..() + +/obj/item/storage/box/donator_kit/verb/destroy_kit() + set name = "Destroy Kit" + set category = "Object" + set src in oview(1) + + var/mob/user = usr + + if((donor_key != "GENERIC") && (donor_key != user.ckey)) + to_chat(user, SPAN_BOLDWARNING("You cannot destroy a donator kit you do not own!")) + return FALSE + + log_admin("[key_name(user)] deleted a donator kit.") + qdel(src) + +/obj/item/storage/box/donator_kit/generic_omega //Generic set given to various donors + kit_variant = "Team Omega (G)" + donor_gear = list( + /obj/item/clothing/under/marine/fluff/standard_jumpsuit, + /obj/item/clothing/suit/storage/marine/fluff/standard_armor, + /obj/item/clothing/head/helmet/marine/fluff/standard_helmet, + ) + +//Unless specified in comments as otherwise, subtype of box/donator_kit/ is CKEY of the donator (example: /obj/item/storage/box/donator_kit/sasoperative) +/obj/item/storage/box/donator_kit/adjective + donor_key = "adjective" + donor_gear = list(/obj/item/clothing/suit/storage/marine/fluff/adjective) + +/obj/item/storage/box/donator_kit/alexwarhammer + donor_key = "alexwarhammer" + donor_gear = list(/obj/item/clothing/glasses/fluff/alexwarhammer) + +/obj/item/storage/box/donator_kit/allan1234 + donor_key = "allan1234" + donor_gear = list(/obj/item/clothing/under/marine/fluff/allan1234) + +/obj/item/storage/box/donator_kit/arachnidnexus + donor_key = "arachnidnexus" + donor_gear = list(/obj/item/clothing/under/marine/fluff/arach) + +/obj/item/storage/box/donator_kit/bibblesless + donor_key = "bibblesless" + donor_gear = list(/obj/item/clothing/head/helmet/marine/fluff/bibblesless) + +/obj/item/storage/box/donator_kit/biolock + donor_key = "biolock" + donor_gear = list( + /obj/item/clothing/head/helmet/marine/fluff/biolock, + /obj/item/clothing/suit/storage/marine/fluff/biolock, + ) + +/obj/item/storage/box/donator_kit/bunny232 + donor_key = "bunny232" + donor_gear = list(/obj/item/clothing/glasses/fluff/eyepatch) + +/obj/item/storage/box/donator_kit/bwoincognito + donor_key = "bwoincognito" + donor_gear = list( + /obj/item/clothing/head/helmet/marine/fluff/bwoincognito, + /obj/item/clothing/suit/storage/marine/fluff/bwoincognito, + /obj/item/clothing/under/marine/fluff/bwoincognito, + ) + +/obj/item/storage/box/donator_kit/chris1464 + donor_key = "chris1464" + donor_gear = list( + /obj/item/clothing/head/helmet/marine/fluff/chris1464, + /obj/item/clothing/suit/storage/marine/fluff/chris1464, + /obj/item/clothing/under/marine/fluff/chris1464, + ) + +/obj/item/storage/box/donator_kit/commandercookies + donor_key = "commandercookies" + donor_gear = list( + /obj/item/clothing/head/helmet/marine/fluff/commandercookies, + /obj/item/clothing/suit/storage/marine/fluff/commandercookies, + ) + +/obj/item/storage/box/donator_kit/commissar //used by both ckeys 'hycinth' and 'technokat' + donor_key = "hycinth" + kit_variant = "Commissar" + donor_gear = list( + /obj/item/clothing/head/helmet/marine/fluff/commissar, + /obj/item/clothing/suit/storage/marine/fluff/commissar, + /obj/item/clothing/under/marine/fluff/commissar, + /obj/item/storage/belt/marine/fluff/commissar, + ) + +/obj/item/storage/box/donator_kit/commissar/technokat + donor_key = "technokat" + +/obj/item/storage/box/donator_kit/crazyh206 + donor_key = "crazyh206" + donor_gear = list(/obj/item/clothing/suit/storage/marine/fluff/crazyh206) + +/obj/item/storage/box/donator_kit/devilzhand + donor_key = "devilzhand" + donor_gear = list( + /obj/item/clothing/head/helmet/marine/fluff/devilzhand, + /obj/item/clothing/suit/storage/marine/fluff/devilzhand, + ) + +/obj/item/storage/box/donator_kit/dingledangle + donor_key = "dingledangle" + donor_gear = list(/obj/item/clothing/head/helmet/marine/fluff/dingledangle) + +/obj/item/storage/box/donator_kit/dinobubba7 + donor_key = "dinobubba7" + donor_gear = list( + /obj/item/clothing/head/helmet/marine/fluff/dino, + /obj/item/clothing/suit/storage/marine/fluff/dino, + ) + +/obj/item/storage/box/donator_kit/docdemo + donor_key = "docdemo" + donor_gear = list(/obj/item/clothing/head/helmet/marine/fluff/goldtrimberet) + +/obj/item/storage/box/donator_kit/dudewithatude + donor_key = "dudewithatude" + donor_gear = list(/obj/item/clothing/suit/storage/marine/fluff/dudewithatude) + +/obj/item/storage/box/donator_kit/eastgermanstasi + donor_key = "eastgermanstasi" + donor_gear = list(/obj/item/clothing/head/helmet/marine/fluff/eastgerman) + +/obj/item/storage/box/donator_kit/edgelord + donor_key = "edgelord" + donor_gear = list(/obj/item/clothing/head/helmet/marine/fluff/edgelord) + +/obj/item/storage/box/donator_kit/eonoc + donor_key = "eonoc" + donor_gear = list(/obj/item/clothing/suit/storage/marine/fluff/eonoc) + +/obj/item/storage/box/donator_kit/fairedan + donor_key = "fairedan" + donor_gear = list( + /obj/item/clothing/suit/storage/marine/fluff/fairedan, + /obj/item/clothing/under/marine/fluff/fairedan, + ) + +/obj/item/storage/box/donator_kit/feodrich + donor_key = "feodrich" + donor_gear = list( + /obj/item/clothing/head/helmet/marine/fluff/feodrich, + /obj/item/clothing/shoes/marine/fluff/feodrich, + /obj/item/clothing/suit/storage/marine/fluff/feodrich, + /obj/item/clothing/under/marine/fluff/feodrich, + ) + +/obj/item/storage/box/donator_kit/fernkiller + donor_key = "fernkiller" + donor_gear = list(/obj/item/clothing/head/helmet/marine/fluff/fernkiller) + +/obj/item/storage/box/donator_kit/feweh + donor_key = "feweh" + donor_gear = list( + /obj/item/clothing/mask/fluff/feweh, + /obj/item/clothing/suit/storage/marine/fluff/feweh, + /obj/item/clothing/under/marine/fluff/feweh, + ) + +/obj/item/storage/box/donator_kit/fickmacher_selena //ckey fickmacher has two sets + donor_key = "fickmacher" + kit_variant = "Selena" + donor_gear = list( + /obj/item/clothing/head/helmet/marine/fluff/fickmacher, + /obj/item/clothing/suit/storage/marine/fluff/fickmacher, + /obj/item/clothing/under/marine/fluff/fickmacher, + ) + +/obj/item/storage/box/donator_kit/fickmacher_hart + donor_key = "fickmacher" + kit_variant = "Hart" + donor_gear = list( + /obj/item/clothing/mask/fluff/fickmacher2, + /obj/item/clothing/suit/storage/marine/fluff/fickmacher2, + /obj/item/clothing/under/marine/fluff/fickmacher2, + ) + +/obj/item/storage/box/donator_kit/fridrich + donor_key = "fridrich" + donor_gear = list(/obj/item/clothing/suit/storage/marine/fluff/fridrich) + +/obj/item/storage/box/donator_kit/ghostdex + donor_key = "ghostdex" + donor_gear = list( + /obj/item/clothing/mask/cigarette/fluff/ghostdex, + /obj/item/tool/lighter/zippo/fluff/ghostdex, + ) + +/obj/item/storage/box/donator_kit/graciegrace0 + donor_key = "graciegrace0" + donor_gear = list( + /obj/item/clothing/head/helmet/marine/fluff/medicae_helmet, + /obj/item/clothing/suit/storage/marine/fluff/medicae_armor, + /obj/item/clothing/under/marine/fluff/medicae_jumpsuit, + ) + +/obj/item/storage/box/donator_kit/gromoi + donor_key = "gromoi" + donor_gear = list( + /obj/item/clothing/suit/storage/marine/fluff/gromi, + /obj/item/clothing/under/marine/fluff/gromi, + ) + +/obj/item/storage/box/donator_kit/haveatya + donor_key = "haveatya" + donor_gear = list( + /obj/item/clothing/glasses/fluff/haveatya, + /obj/item/clothing/head/helmet/marine/fluff/haveatya, + /obj/item/clothing/under/marine/fluff/turtleneck, //generic item + ) + +/obj/item/storage/box/donator_kit/jackmcintyre + donor_key = "jackmcintyre" + donor_gear = list( + /obj/item/clothing/head/helmet/marine/fluff/jackmcintyre, + /obj/item/clothing/suit/storage/marine/fluff/jackmcintyre, + /obj/item/clothing/under/marine/fluff/jackmcintyre, + /obj/item/clothing/under/marine/fluff/jackmcintyre_alt, + ) + +/obj/item/storage/box/donator_kit/jdobbin49 + donor_key = "jdobbin49" + donor_gear = list(/obj/item/clothing/head/helmet/marine/fluff/jdobbin49) + +/obj/item/storage/box/donator_kit/jedijasun + donor_key = "jedijasun" + donor_gear = list(/obj/item/clothing/gloves/marine/fluff/jedijas) + +/obj/item/storage/box/donator_kit/johnkilla56 + donor_key = "johnkilla56" + donor_gear = list( + /obj/item/clothing/head/helmet/marine/fluff/john56, + /obj/item/clothing/mask/fluff/john56, + /obj/item/clothing/suit/storage/marine/fluff/john56, + /obj/item/clothing/under/marine/fluff/john56, + ) + +/obj/item/storage/box/donator_kit/juninho77 + donor_key = "juninho77" + donor_gear = list( + /obj/item/clothing/head/helmet/marine/fluff/juniho, + /obj/item/clothing/suit/storage/marine/fluff/juninho, + /obj/item/clothing/under/marine/fluff/juninho, + ) + +/obj/item/storage/box/donator_kit/kilinger + donor_key = "kilinger" + donor_gear = list(/obj/item/clothing/head/helmet/marine/fluff/goldshieldberet) + +/obj/item/storage/box/donator_kit/kyrac + donor_key = "kyrac" + donor_gear = list( + /obj/item/clothing/under/marine/fluff/turtleneck, + /obj/item/clothing/glasses/fluff/eyepatch, + ) + +/obj/item/storage/box/donator_kit/laser243 + donor_key = "laser243" + donor_gear = list( + /obj/item/clothing/head/helmet/marine/fluff/laser243, + /obj/item/clothing/suit/storage/marine/fluff/laser243, + ) + +/obj/item/storage/box/donator_kit/leondark16 + donor_key = "leondark16" + donor_gear = list(/obj/item/clothing/head/helmet/marine/fluff/leondark) + +/obj/item/storage/box/donator_kit/lestatanderson + donor_key = "lestatanderson" + donor_gear = list(/obj/item/clothing/suit/storage/marine/fluff/cia) + +/obj/item/storage/box/donator_kit/limodish + donor_key = "limodish" + donor_gear = list( + /obj/item/clothing/head/helmet/marine/fluff/limo, + /obj/item/clothing/mask/fluff/limo, + /obj/item/clothing/suit/storage/marine/fluff/limo, + /obj/item/clothing/under/marine/fluff/turtleneck, //generic item + ) + +/obj/item/storage/box/donator_kit/lostmixup + donor_key = "lostmixup" + donor_gear = list( + /obj/item/clothing/head/helmet/marine/fluff/lostmixup, + /obj/item/clothing/mask/fluff/lostmixup, + /obj/item/clothing/suit/storage/marine/fluff/lostmixup, + ) + +/obj/item/storage/box/donator_kit/markvalentine + donor_key = "markvalentine" + donor_gear = list( + /obj/item/clothing/head/helmet/marine/fluff/valentine, + /obj/item/clothing/suit/storage/marine/fluff/valentine, + /obj/item/clothing/under/marine/fluff/valentine, + ) + +/obj/item/storage/box/donator_kit/mitii + donor_key = "mitii" + donor_gear = list( + /obj/item/clothing/head/helmet/marine/fluff/mitii, + /obj/item/clothing/suit/storage/marine/fluff/mitii, + /obj/item/storage/backpack/marine/fluff/mitii, + ) + +/obj/item/storage/box/donator_kit/mrbark45 + donor_key = "mrbark45" + donor_gear = list(/obj/item/clothing/head/helmet/marine/fluff/bark) + +/obj/item/storage/box/donator_kit/nickiskool + donor_key = "nickiskool" + donor_gear = list( + /obj/item/clothing/head/helmet/marine/fluff/nickiskool, + /obj/item/clothing/suit/storage/marine/fluff/nickiskool, + /obj/item/clothing/under/marine/fluff/nickiskool, + ) + +/obj/item/storage/box/donator_kit/ningajai + donor_key = "ningajai" + donor_gear = list(/obj/item/clothing/head/helmet/marine/fluff/ningajai) + +/obj/item/storage/box/donator_kit/obeystylez + donor_key = "obeystylez" + donor_gear = list( + /obj/item/clothing/gloves/black/obey, + /obj/item/clothing/mask/fluff/balaclava, //generic item + /obj/item/clothing/suit/storage/marine/fluff/obey, + /obj/item/clothing/under/marine/fluff/turtleneck, //generic item + ) + +/obj/item/storage/box/donator_kit/officialjake + donor_key = "officialjake" + donor_gear = list(/obj/item/clothing/head/helmet/marine/fluff/officialjake) + +/obj/item/storage/box/donator_kit/oneonethreeeight + donor_key = "oneonethreeeight" + donor_gear = list( + /obj/item/clothing/head/helmet/marine/fluff/oneonethreeeight, + /obj/item/clothing/suit/storage/marine/fluff/oneonethreeeight, + /obj/item/clothing/under/marine/fluff/oneonethreeeight, + ) + +/obj/item/storage/box/donator_kit/paradox1i7 + donor_key = "paradox1i7" + donor_gear = list( + /obj/item/clothing/head/helmet/marine/fluff/paradox, + /obj/item/clothing/suit/storage/marine/fluff/paradox, + /obj/item/clothing/under/marine/fluff/paradox, + ) + +/obj/item/storage/box/donator_kit/poops_buttly + donor_key = "poops_buttly" + donor_gear = list( + /obj/item/clothing/head/helmet/marine/fluff/kaila, + /obj/item/clothing/suit/storage/marine/fluff/kaila, + ) + +/obj/item/storage/box/donator_kit/radicalscorpion + donor_key = "radicalscorpion" + donor_gear = list( + /obj/item/clothing/head/helmet/marine/fluff/radical, + /obj/item/clothing/mask/fluff/balaclava, //generic item + /obj/item/clothing/suit/storage/marine/fluff/radical, + /obj/item/clothing/under/marine/fluff/radical, + ) + +/obj/item/storage/box/donator_kit/robin63 + donor_key = "robin63" + donor_gear = list(/obj/item/clothing/head/helmet/marine/fluff/robin) + +/obj/item/storage/box/donator_kit/rogue1131 + donor_key = "rogue1131" + donor_gear = list( + /obj/item/clothing/head/helmet/marine/fluff/titus, + /obj/item/clothing/suit/storage/marine/fluff/titus, + ) + +/obj/item/storage/box/donator_kit/sadokist + donor_key = "sadokist" + donor_gear = list( + /obj/item/clothing/glasses/fluff/sadokist, + /obj/item/clothing/head/helmet/marine/fluff/sadokist, + /obj/item/clothing/suit/storage/marine/fluff/sadokist, + /obj/item/storage/backpack/marine/fluff/sadokist, + ) + +/obj/item/storage/box/donator_kit/sailordave + donor_key = "sailordave" + donor_gear = list(/obj/item/clothing/under/marine/fluff/sailordave) + +/obj/item/storage/box/donator_kit/sasoperative_elite //sasoperative has several sets + donor_key = "sasoperative" + kit_variant = "Elite" + donor_gear = list( + /obj/item/clothing/head/helmet/marine/fluff/sas_elite, + /obj/item/clothing/mask/fluff/sas_elite, + /obj/item/clothing/suit/storage/marine/fluff/sas_elite, + /obj/item/clothing/under/marine/fluff/sas_elite, + ) + +/obj/item/storage/box/donator_kit/sasoperative_juggernaut + donor_key = "sasoperative" + kit_variant = "Juggernaut" + donor_gear = list( + /obj/item/clothing/head/helmet/marine/fluff/sas_juggernaut_alt, + /obj/item/clothing/head/helmet/marine/fluff/sas_juggernaut, + /obj/item/clothing/suit/storage/marine/fluff/sas_juggernaut, + ) + +/obj/item/storage/box/donator_kit/sasoperative_legion + donor_key = "sasoperative" + kit_variant = "Legion" + donor_gear = list( + /obj/item/clothing/suit/storage/marine/fluff/sas_legion, + /obj/item/clothing/under/marine/fluff/sas_legion, + /obj/item/clothing/mask/fluff/sas_legion, + ) + +/obj/item/storage/box/donator_kit/seloc_aferah + donor_key = "seloc_aferah" + donor_gear = list(/obj/item/clothing/head/helmet/marine/fluff/deejay) + +/obj/item/storage/box/donator_kit/starscream123 + donor_key = "starscream123" + donor_gear = list( + /obj/item/clothing/head/helmet/marine/fluff/starscream, + /obj/item/clothing/mask/fluff/starscream, + /obj/item/clothing/suit/storage/marine/fluff/starscream, + /obj/item/clothing/under/marine/fluff/starscream, + ) + +/obj/item/storage/box/donator_kit/steelpoint + donor_key = "steelpoint" + donor_gear = list( + /obj/item/clothing/head/helmet/marine/fluff/steelpoint, + /obj/item/clothing/shoes/marine/fluff/steelpoint, + /obj/item/clothing/suit/storage/marine/fluff/steelpoint, + /obj/item/clothing/under/marine/fluff/steelpoint, + ) + +/obj/item/storage/box/donator_kit/stobarico + donor_key = "stobarico" + donor_gear = list(/obj/item/clothing/suit/storage/marine/fluff/stobarico) + +/obj/item/storage/box/donator_kit/theflagbearer + donor_key = "theflagbearer" + donor_gear = list(/obj/item/clothing/under/marine/fluff/leeeverett) + +/obj/item/storage/box/donator_kit/theultimatechimera + donor_key = "theultimatechimera" + donor_gear = list( + /obj/item/clothing/head/helmet/marine/fluff/chimera, + /obj/item/clothing/suit/storage/marine/fluff/chimera, + ) + +/obj/item/storage/box/donator_kit/tophatpenguin_wooki //ckey tophatpenguin has two sets + donor_key = "tophatpenguin" + kit_variant = "Wooki" + donor_gear = list( + /obj/item/clothing/suit/storage/marine/fluff/penguin, + /obj/item/clothing/under/marine/fluff/wooki, + /obj/item/clothing/head/helmet/marine/fluff/penguin, + ) + +/obj/item/storage/box/donator_kit/tophatpenguin_santa + donor_key = "tophatpenguin" + kit_variant = "Santa" + donor_gear = list( + /obj/item/clothing/head/helmet/marine/fluff/santahat, + /obj/item/clothing/suit/storage/marine/fluff/santa, + ) + +/obj/item/storage/box/donator_kit/totalanarchy + donor_key = "totalanarchy" + donor_gear = list( + /obj/item/clothing/head/helmet/marine/fluff/totalanarchy, + /obj/item/clothing/mask/fluff/totalanarchy, + /obj/item/clothing/suit/storage/marine/fluff/totalanarchy, + /obj/item/clothing/under/marine/fluff/totalanarchy, + ) + +/obj/item/storage/box/donator_kit/tranquill + donor_key = "tranquill" + donor_gear = list(/obj/item/clothing/suit/storage/marine/fluff/tranquill) + +/obj/item/storage/box/donator_kit/trblackdragon + donor_key = "trblackdragon" + donor_gear = list( + /obj/item/clothing/head/helmet/marine/fluff/trblackdragon, + /obj/item/clothing/suit/storage/marine/fluff/trblackdragon, + ) + +/obj/item/storage/box/donator_kit/tristan63 + donor_key = "tristan63" + donor_gear = list( + /obj/item/clothing/head/helmet/marine/fluff/tristan, + /obj/item/clothing/suit/storage/marine/fluff/tristan, + /obj/item/clothing/under/marine/fluff/tristan, + ) + +/obj/item/storage/box/donator_kit/tyran68 + donor_key = "tyran68" + donor_gear = list(/obj/item/clothing/suit/storage/marine/fluff/tyran) + +/obj/item/storage/box/donator_kit/shotgunbill + donor_key = "shotgunbill" + donor_gear = list(/obj/item/clothing/head/collectable/petehat) + +/obj/item/storage/box/donator_kit/vintagepalmer + donor_key = "vintagepalmer" + donor_gear = list( + /obj/item/clothing/head/helmet/marine/fluff/vintage, + /obj/item/clothing/shoes/marine/fluff/vintage, + /obj/item/clothing/suit/storage/marine/fluff/vintage, + /obj/item/clothing/under/marine/fluff/vintage, + ) + +/obj/item/storage/box/donator_kit/whiteblood17 + donor_key = "whiteblood17" + donor_gear = list( + /obj/item/clothing/head/helmet/marine/fluff/whiteblood17, + /obj/item/clothing/under/marine/fluff/whiteblood17, + ) + +/obj/item/storage/box/donator_kit/wrightthewrong + donor_key = "wrightthewrong" + donor_gear = list( + /obj/item/clothing/glasses/fluff/wright, + /obj/item/clothing/suit/storage/marine/fluff/wright, + /obj/item/clothing/under/marine/fluff/turtleneck, //generic item + ) + +/obj/item/storage/box/donator_kit/zegara + donor_key = "zegara" + donor_gear = list(/obj/item/clothing/suit/storage/marine/fluff/zegara) + +/obj/item/storage/box/donator_kit/zynax + donor_key = "zynax" + donor_gear = list( + /obj/item/clothing/mask/fluff/balaclava, //generic item + /obj/item/clothing/suit/storage/marine/fluff/Zynax, + /obj/item/clothing/under/marine/fluff/turtleneck, //generic item + /obj/item/clothing/under/marine/fluff/Zynax, + ) + +/obj/item/storage/box/donator_kit/mileswolfe + donor_key = "mileswolfe" + donor_gear = list(/obj/item/clothing/under/marine/fluff/mileswolfe) + +/obj/item/storage/box/donator_kit/killaninja12 + donor_key = "killaninja12" + donor_gear = list( + /obj/item/clothing/head/helmet/marine/fluff/killaninja12, + /obj/item/clothing/suit/storage/marine/fluff/killaninja12, + ) + +/obj/item/storage/box/donator_kit/noize + donor_key = "noize" + donor_gear = list(/obj/item/clothing/suit/storage/marine/fluff/forwardslashn) + +/obj/item/storage/box/donator_kit/deanthelis + donor_key = "deanthelis" + donor_gear = list(/obj/item/clothing/head/beret/marine/techofficer) diff --git a/code/modules/cm_marines/dropship_ammo.dm b/code/modules/cm_marines/dropship_ammo.dm index 3c01688b70d7..d3d0266e5982 100644 --- a/code/modules/cm_marines/dropship_ammo.dm +++ b/code/modules/cm_marines/dropship_ammo.dm @@ -347,6 +347,21 @@ addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(fire_spread), impact, create_cause_data(initial(name), source_mob), 6, 60, 30, "#EE6515"), 0.5 SECONDS) //Color changed into napalm's color to better convey how intense the fire actually is. QDEL_IN(src, 0.5 SECONDS) +/obj/structure/ship_ammo/rocket/thermobaric + name = "\improper BLU-200 'Dragons Breath'" + desc = "The BLU-200 Dragons Breath a thermobaric fuel-air bomb. The aerosolized fuel mixture creates a vacuum when ignited causing serious damage to those in its way." + icon_state = "fatty" + ammo_id = "f" + travelling_time = 50 + point_cost = 300 + fire_mission_delay = 4 + +/obj/structure/ship_ammo/rocket/thermobaric/detonate_on(turf/impact) + impact.ceiling_debris_check(3) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(fire_spread), impact, create_cause_data(initial(name), source_mob), 4, 25, 50, "#c96500"), 0.5 SECONDS) //Very intense but the fire doesn't last very long + for(var/mob/living/carbon/victim in orange(5, impact)) + victim.throw_atom(impact, 3, 15, src, TRUE) // Implosion throws affected towards center of vacuum + QDEL_IN(src, 0.5 SECONDS) //minirockets diff --git a/code/modules/cm_marines/smartgun_mount.dm b/code/modules/cm_marines/smartgun_mount.dm index 2db33c10ed46..b72120d2038e 100644 --- a/code/modules/cm_marines/smartgun_mount.dm +++ b/code/modules/cm_marines/smartgun_mount.dm @@ -906,7 +906,7 @@ user.visible_message(SPAN_NOTICE("[user] lets go of \the [src]."),SPAN_NOTICE("You let go of \the [src], letting the gun rest.")) user.unfreeze() user.reset_view(null) - user.forceMove(get_step(src, reverse_direction(src.dir))) + user.Move(get_step(src, reverse_direction(src.dir))) user.setDir(dir) //set the direction of the player to the direction the gun is facing user_old_x = 0 //reset our x user_old_y = 0 //reset our y diff --git a/code/modules/cm_preds/yaut_items.dm b/code/modules/cm_preds/yaut_items.dm index a6fb4658ed0b..8a3306817078 100644 --- a/code/modules/cm_preds/yaut_items.dm +++ b/code/modules/cm_preds/yaut_items.dm @@ -102,7 +102,7 @@ desc = "A suit of armor with light padding. It looks old, yet functional." armor_melee = CLOTHING_ARMOR_MEDIUMLOW - armor_bullet = CLOTHING_ARMOR_HIGH + armor_bullet = CLOTHING_ARMOR_MEDIUMHIGH armor_laser = CLOTHING_ARMOR_MEDIUMHIGH armor_energy = CLOTHING_ARMOR_MEDIUMHIGH armor_bomb = CLOTHING_ARMOR_HIGH @@ -118,7 +118,7 @@ flags_armor_protection = BODY_FLAG_CHEST|BODY_FLAG_GROIN|BODY_FLAG_ARMS|BODY_FLAG_HEAD|BODY_FLAG_LEGS flags_item = ITEM_PREDATOR armor_melee = CLOTHING_ARMOR_HIGH - armor_bullet = CLOTHING_ARMOR_MEDIUMHIGH + armor_bullet = CLOTHING_ARMOR_HIGH armor_laser = CLOTHING_ARMOR_HIGH armor_energy = CLOTHING_ARMOR_HIGH armor_bomb = CLOTHING_ARMOR_HIGHPLUS diff --git a/code/modules/cm_preds/yaut_mask.dm b/code/modules/cm_preds/yaut_mask.dm index c715ca590cd5..5d4d21c46c80 100644 --- a/code/modules/cm_preds/yaut_mask.dm +++ b/code/modules/cm_preds/yaut_mask.dm @@ -29,7 +29,7 @@ min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROT flags_armor_protection = BODY_FLAG_HEAD|BODY_FLAG_FACE|BODY_FLAG_EYES flags_cold_protection = BODY_FLAG_HEAD - flags_inventory = COVEREYES|COVERMOUTH|NOPRESSUREDMAGE|ALLOWINTERNALS|ALLOWREBREATH|BLOCKGASEFFECT|BLOCKSHARPOBJ + flags_inventory = COVEREYES|COVERMOUTH|NOPRESSUREDMAGE|ALLOWINTERNALS|ALLOWREBREATH|BLOCKGASEFFECT flags_inv_hide = HIDEEARS|HIDEEYES|HIDEFACE|HIDELOWHAIR flags_item = ITEM_PREDATOR filtered_gases = list("phoron", "sleeping_agent", "carbon_dioxide") diff --git a/code/modules/customitems/item_spawning.dm b/code/modules/customitems/item_spawning.dm index 3bf8e5e71f33..b2d6b34f51c9 100644 --- a/code/modules/customitems/item_spawning.dm +++ b/code/modules/customitems/item_spawning.dm @@ -13,45 +13,22 @@ GLOBAL_LIST_FILE_LOAD(custom_items, "config/custom_items.txt") for(var/i = 1 to Entry.len) Entry[i] = trim(Entry[i]) - if(Entry.len < 3) + if(Entry.len < 2) continue; - if(Entry[1] == M.ckey && Entry[2] == M.real_name) - var/list/Paths = splittext(Entry[3], ",") + if(Entry[1] == M.ckey) + var/list/Paths = splittext(Entry[2], ",") for(var/P in Paths) - var/ok = 0 // 1 if the item was placed successfully + var/ok = FALSE // TRUE if the item was placed successfully P = trim(P) var/path = text2path(P) if(!path) continue var/obj/item/Item = new path() - if(istype(Item,/obj/item/card/id)) - var/obj/item/card/id/I = Item - for(var/obj/item/card/id/C in M) - //default settings - I.name = "[M.real_name]'s ID Card ([M.job])" - I.registered_name = M.real_name - I.registered_ref = WEAKREF(M) - I.registered_gid = M.gid - I.access = C.access - I.assignment = C.assignment - I.blood_type = C.blood_type - //replace old ID - qdel(C) - ok = M.equip_if_possible(I, WEAR_ID, 0) //if 1, last argument deletes on fail + for(var/obj/item/storage/S in M.contents) // Try to place it in any item that can store stuff, on the mob. + if (S.handle_item_insertion(Item, TRUE)) + ok = TRUE break - else if(istype(Item,/obj/item/storage/belt)) - var/obj/item/storage/belt/I = Item - if(istype(M.belt,/obj/item/storage/belt)) - qdel(M.belt) - M.belt=null - ok = M.equip_if_possible(I, WEAR_WAIST, 0) - break - else - for(var/obj/item/storage/S in M.contents) // Try to place it in any item that can store stuff, on the mob. - if (S.handle_item_insertion(Item, TRUE)) - ok = 1 - break - if (ok == 0) // Finally, since everything else failed, place it on the ground + if (ok == FALSE) // Finally, since everything else failed, place it on the ground Item.forceMove(get_turf(M.loc)) diff --git a/code/modules/gear_presets/cmb.dm b/code/modules/gear_presets/cmb.dm index 79df8d567770..55602ec956f3 100644 --- a/code/modules/gear_presets/cmb.dm +++ b/code/modules/gear_presets/cmb.dm @@ -1,6 +1,7 @@ /datum/equipment_preset/cmb name = "Colonial Marshal" - faction = FACTION_USCM + faction = FACTION_MARSHAL + faction_group = list(FACTION_MARSHAL, FACTION_MARINE) rank = JOB_CMB idtype = /obj/item/card/id/deputy languages = list(LANGUAGE_ENGLISH, LANGUAGE_JAPANESE) @@ -410,7 +411,8 @@ paygrade = "ME2" role_comm_title = "A-RFN" skills = /datum/skills/pfc/crafty - faction = FACTION_USCM + faction = FACTION_MARSHAL + faction_group = list(FACTION_MARSHAL, FACTION_MARINE) /datum/equipment_preset/uscm/cmb/load_status(mob/living/carbon/human/new_human) . = ..() diff --git a/code/modules/gear_presets/synths.dm b/code/modules/gear_presets/synths.dm index 8ac227e9a0bb..3e732e93990a 100644 --- a/code/modules/gear_presets/synths.dm +++ b/code/modules/gear_presets/synths.dm @@ -352,7 +352,7 @@ role_comm_title = "CMB Syn" equipment_to_spawn = list( WEAR_HEAD = /obj/item/clothing/head/CMB, - WEAR_L_EAR = /obj/item/device/radio/headset/distress/CMB, + WEAR_L_EAR = /obj/item/device/radio/headset/distress/CMB/limited, WEAR_EYES = /obj/item/clothing/glasses/sunglasses/sechud, WEAR_BODY = /obj/item/clothing/under/CM_uniform, WEAR_BACK = /obj/item/storage/backpack/satchel/sec, diff --git a/code/modules/gear_presets/uscm_medical.dm b/code/modules/gear_presets/uscm_medical.dm index ac1e082f6655..080911951b54 100644 --- a/code/modules/gear_presets/uscm_medical.dm +++ b/code/modules/gear_presets/uscm_medical.dm @@ -168,7 +168,7 @@ if (new_human.client && new_human.client.prefs && (new_human.client.prefs.backbag == 1)) back_item = /obj/item/storage/backpack/marine - new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/almayer/doc(new_human), WEAR_L_EAR) + new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/almayer/research(new_human), WEAR_L_EAR) new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/officer/researcher(new_human), WEAR_BODY) new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(new_human), WEAR_FEET) diff --git a/code/modules/mob/dead/observer/actions.dm b/code/modules/mob/dead/observer/actions.dm index 49a3890088f6..ff897db4a3f6 100644 --- a/code/modules/mob/dead/observer/actions.dm +++ b/code/modules/mob/dead/observer/actions.dm @@ -81,6 +81,22 @@ if(SSticker.mode.check_xeno_late_join(owner)) SSticker.mode.attempt_to_join_as_xeno(owner) +/datum/action/observer_action/join_lesser_drone + name = "Join as Lesser Drone" + action_icon_state = "join_lesser_drone" + listen_signal = COMSIG_KB_OBSERVER_JOIN_LESSER_DRONE + +/datum/action/observer_action/join_lesser_drone/action_activate() + if(!owner.client) + return + + if(SSticker.current_state < GAME_STATE_PLAYING || !SSticker.mode) + owner.balloon_alert(owner, "game must start!") + return + + if(SSticker.mode.check_xeno_late_join(owner)) + SSticker.mode.attempt_to_join_as_lesser_drone(owner) + /datum/keybinding/observer category = CATEGORY_OBSERVER weight = WEIGHT_DEAD @@ -108,3 +124,10 @@ name = "join_pred" full_name = "Join the Hunt" keybind_signal = COMSIG_KB_OBSERVER_JOIN_PREDATOR + +/datum/keybinding/observer/join_lesser_drone + hotkey_keys = list("Unbound") + classic_keys = list("Unbound") + name = "join_lesser_drone" + full_name = "Join as Lesser Drone" + keybind_signal = COMSIG_KB_OBSERVER_JOIN_LESSER_DRONE diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 7e8dfe6cf3fd..9e8fa264af1d 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -49,13 +49,16 @@ var/updatedir = TRUE //Do we have to update our dir as the ghost moves around? var/atom/movable/following = null var/datum/orbit_menu/orbit_menu - var/mob/observetarget = null //The target mob that the ghost is observing. Used as a reference in logout() + /// The target mob that the ghost is observing. Used as a reference in logout() + var/mob/observetarget = null var/datum/health_scan/last_health_display var/ghost_orbit = GHOST_ORBIT_CIRCLE var/own_orbit_size = 0 - var/observer_actions = list(/datum/action/observer_action/join_xeno) + var/observer_actions = list(/datum/action/observer_action/join_xeno, /datum/action/observer_action/join_lesser_drone) var/datum/action/minimap/observer/minimap var/larva_queue_cached_message + ///Used to bypass time of death checks such as when being selected for larva. + var/bypass_time_of_death_checks = FALSE alpha = 127 @@ -365,10 +368,13 @@ Works together with spawning an observer, noted above. if(ghost.client.player_data) ghost.client.player_data.load_timestat_data() - // Larva queue: We use the larger of their existing queue time or the new timeofdeath except for facehuggers - // We don't change facehugger timeofdeath because they are still on cooldown if they died as a hugger - var/new_tod = isfacehugger(src) ? 1 : ghost.timeofdeath - ghost.client.player_details.larva_queue_time = max(ghost.client.player_details.larva_queue_time, new_tod) + // Larva queue: We use the larger of their existing queue time or the new timeofdeath except for facehuggers or lesser drone + var/new_tod = (isfacehugger(src) || islesserdrone(src)) ? 1 : ghost.timeofdeath + + // if they died as facehugger or lesser drone, bypass typical TOD checks + ghost.bypass_time_of_death_checks = (isfacehugger(src) || islesserdrone(src)) + + ghost.client?.player_details.larva_queue_time = max(ghost.client.player_details.larva_queue_time, new_tod) ghost.set_huds_from_prefs() @@ -391,7 +397,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp ghostize(TRUE) else var/list/options = list("Ghost", "Stay in body") - if(check_rights(R_MOD)) + if(check_other_rights(client, R_MOD, FALSE)) options = list("Aghost") + options var/text_prompt = "Are you -sure- you want to ghost?\n(You are alive. If you ghost, you won't be able to return to your body. You can't change your mind so choose wisely!)" var/is_nested = (buckled && istype(buckled, /obj/structure/bed/nest)) ? TRUE : FALSE @@ -407,14 +413,18 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp AdjustSleeping(2) // Sleep so you will be properly recognized as ghosted var/turf/location = get_turf(src) if(location) //to avoid runtime when a mob ends up in nullspace - msg_admin_niche("[key_name_admin(usr)] has ghosted. [ADMIN_JMP(location)]") - log_game("[key_name_admin(usr)] has ghosted.") + msg_admin_niche("[key_name_admin(client)] has ghosted. [ADMIN_JMP(location)]") + log_game("[key_name_admin(client)] has ghosted.") var/mob/dead/observer/ghost = ghostize((is_nested && nest && !QDELETED(nest))) //FALSE parameter is so we can never re-enter our body, "Charlie, you can never come baaaack~" :3 if(ghost && !is_admin_level(z)) ghost.timeofdeath = world.time - // Larva queue: We use the larger of their existing queue time or the new timeofdeath except for facehuggers - var/new_tod = isfacehugger(src) ? 1 : world.time + // Larva queue: We use the larger of their existing queue time or the new timeofdeath except for facehuggers or lesser drone + var/new_tod = (isfacehugger(src) || islesserdrone(src)) ? 1 : ghost.timeofdeath + + // if they died as facehugger or lesser drone, bypass typical TOD checks + ghost.bypass_time_of_death_checks = (isfacehugger(src) || islesserdrone(src)) + ghost.client?.player_details.larva_queue_time = max(ghost.client.player_details.larva_queue_time, new_tod) if(is_nested && nest && !QDELETED(nest)) ghost.can_reenter_corpse = FALSE @@ -773,6 +783,21 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(SSticker.mode.check_xeno_late_join(src)) SSticker.mode.attempt_to_join_as_facehugger(src) +/mob/dead/verb/join_as_lesser_drone() + set category = "Ghost.Join" + set name = "Join as a Lesser Drone" + set desc = "Try joining as a Lesser Drone to support the hive." + + if (!client) + return + + if(SSticker.current_state < GAME_STATE_PLAYING || !SSticker.mode) + to_chat(src, SPAN_WARNING("The game hasn't started yet!")) + return + + if(SSticker.mode.check_xeno_late_join(src)) + SSticker.mode.attempt_to_join_as_lesser_drone(src) + /mob/dead/verb/join_as_zombie() //Adapted from join as hellhoud set category = "Ghost.Join" set name = "Join as Zombie" diff --git a/code/modules/mob/living/carbon/xenomorph/Embryo.dm b/code/modules/mob/living/carbon/xenomorph/Embryo.dm index e6fc734e4e5a..b1c6bddd0ac8 100644 --- a/code/modules/mob/living/carbon/xenomorph/Embryo.dm +++ b/code/modules/mob/living/carbon/xenomorph/Embryo.dm @@ -218,6 +218,18 @@ to_chat(new_xeno, "Talk in Hivemind using ; (e.g. ';My life for the queen!')") playsound_client(new_xeno.client, 'sound/effects/xeno_newlarva.ogg', 25, 1) + // Inform observers to grab some popcorn if it isnt nested + if(!HAS_TRAIT(affected_mob, TRAIT_NESTED)) + var/area/burst_area = get_area(src) + if(burst_area) + for(var/mob/dead/observer/observer as anything in GLOB.observer_list) + to_chat(observer, SPAN_DEADSAY("A [new_xeno.hive.prefix]Larva is about to chestburst out of [affected_mob] at \the [burst_area]! [OBSERVER_JMP(observer, affected_mob)]")) + to_chat(src, SPAN_DEADSAY("A [new_xeno.hive.prefix]Larva is about to chestburst out of [affected_mob] at \the [burst_area]!")) + else + for(var/mob/dead/observer/observer as anything in GLOB.observer_list) + to_chat(observer, SPAN_DEADSAY("A [new_xeno.hive.prefix]Larva is about to chestburst out of [affected_mob]! [OBSERVER_JMP(observer, affected_mob)]")) + to_chat(src, SPAN_DEADSAY("A [new_xeno.hive.prefix]Larva is about to chestburst out of [affected_mob]!")) + stage = 6 /mob/living/carbon/xenomorph/larva/proc/cause_unbearable_pain(mob/living/carbon/victim) diff --git a/code/modules/mob/living/carbon/xenomorph/Facehuggers.dm b/code/modules/mob/living/carbon/xenomorph/Facehuggers.dm index 5ef9626620b2..bc86ea40361c 100644 --- a/code/modules/mob/living/carbon/xenomorph/Facehuggers.dm +++ b/code/modules/mob/living/carbon/xenomorph/Facehuggers.dm @@ -246,7 +246,7 @@ throw_atom(target, 3, SPEED_FAST) return TRUE -/obj/item/clothing/mask/facehugger/proc/attach(mob/living/living_mob, silent = FALSE, knockout_mod = 1, hugger_ckey = null) +/obj/item/clothing/mask/facehugger/proc/attach(mob/living/living_mob, silent = FALSE, knockout_mod = 1, mob/living/carbon/xenomorph/facehugger/hugger) if(attached || !can_hug(living_mob, hivenumber)) return FALSE @@ -281,7 +281,22 @@ if(!human.species || !(human.species.flags & IS_SYNTHETIC)) //synthetics aren't paralyzed human.apply_effect(MIN_IMPREGNATION_TIME * 0.5 * knockout_mod, PARALYZE) //THIS MIGHT NEED TWEAKS - addtimer(CALLBACK(src, PROC_REF(impregnate), human, hugger_ckey), rand(MIN_IMPREGNATION_TIME, MAX_IMPREGNATION_TIME)) + var/area/hug_area = get_area(src) + var/name = hugger ? "[hugger]" : "\a [src]" + if(hug_area) + for(var/mob/dead/observer/observer as anything in GLOB.observer_list) + to_chat(observer, SPAN_DEADSAY("[human] has been facehugged by [name] at \the [hug_area] [OBSERVER_JMP(observer, human)]")) + to_chat(src, SPAN_DEADSAY("[human] has been facehugged by [name] at \the [hug_area]")) + else + for(var/mob/dead/observer/observer as anything in GLOB.observer_list) + to_chat(observer, SPAN_DEADSAY("[human] has been facehugged by [name] [OBSERVER_JMP(observer, human)]")) + to_chat(src, SPAN_DEADSAY("[human] has been facehugged by [name]")) + if(hug_area) + xeno_message(SPAN_XENOMINORWARNING("You sense that [name] has facehugged a host at \the [hug_area]!"), 1, hivenumber) + else + xeno_message(SPAN_XENOMINORWARNING("You sense that [name] has facehugged a host!"), 1, hivenumber) + + addtimer(CALLBACK(src, PROC_REF(impregnate), human, hugger?.client?.ckey), rand(MIN_IMPREGNATION_TIME, MAX_IMPREGNATION_TIME)) return TRUE diff --git a/code/modules/mob/living/carbon/xenomorph/XenoAttacks.dm b/code/modules/mob/living/carbon/xenomorph/XenoAttacks.dm index b12ff5d6c3bb..6361ff595b10 100644 --- a/code/modules/mob/living/carbon/xenomorph/XenoAttacks.dm +++ b/code/modules/mob/living/carbon/xenomorph/XenoAttacks.dm @@ -185,7 +185,7 @@ var/is_shover_queen = isqueen(M) var/can_resist_shove = M.hivenumber != src.hivenumber || ((isqueen(src) || IS_XENO_LEADER(src)) && !is_shover_queen) var/can_mega_shove = is_shover_queen || IS_XENO_LEADER(M) - if(can_mega_shove && !can_resist_shove) + if(can_mega_shove && !can_resist_shove || (mob_size < MOB_SIZE_XENO_SMALL && M.mob_size >= MOB_SIZE_XENO_SMALL)) playsound(loc, 'sound/weapons/alien_knockdown.ogg', 25, 1) M.visible_message(SPAN_WARNING("\The [M] shoves \the [src] out of her way!"), \ SPAN_WARNING("You shove \the [src] out of your way!"), null, 5, CHAT_TYPE_XENO_COMBAT) diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/general_abilities.dm b/code/modules/mob/living/carbon/xenomorph/abilities/general_abilities.dm index d95fbc304397..b681179e7ce8 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/general_abilities.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/general_abilities.dm @@ -510,16 +510,15 @@ SIGNAL_HANDLER if(tracked_queen) - UnregisterSignal(tracked_queen, list(COMSIG_QUEEN_MOUNT_OVIPOSITOR, COMSIG_QUEEN_DISMOUNT_OVIPOSITOR, COMSIG_PARENT_QDELETING)) + UnregisterSignal(tracked_queen, list(COMSIG_QUEEN_MOUNT_OVIPOSITOR, COMSIG_QUEEN_DISMOUNT_OVIPOSITOR)) tracked_queen = new_queen - if(!tracked_queen.ovipositor) + if(!tracked_queen?.ovipositor) hide_from(owner) RegisterSignal(tracked_queen, COMSIG_QUEEN_MOUNT_OVIPOSITOR, PROC_REF(handle_mount_ovipositor)) RegisterSignal(tracked_queen, COMSIG_QUEEN_DISMOUNT_OVIPOSITOR, PROC_REF(handle_dismount_ovipositor)) - RegisterSignal(tracked_queen, COMSIG_PARENT_QDELETING, PROC_REF(handle_queen_qdel)) /// deals with the queen mounting the ovipositor, unhiding the action from the user /datum/action/xeno_action/onclick/tacmap/proc/handle_mount_ovipositor() @@ -533,13 +532,6 @@ hide_from(owner) -/// cleans up references to the queen when the queen is being qdel'd, hides the action from the user -/datum/action/xeno_action/onclick/tacmap/proc/handle_queen_qdel() - SIGNAL_HANDLER - - tracked_queen = null - hide_from(owner) - /datum/action/xeno_action/onclick/tacmap/use_ability(atom/target) var/mob/living/carbon/xenomorph/xeno = owner xeno.xeno_tacmap() diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/lesser_drone/lesser_drone_abilities.dm b/code/modules/mob/living/carbon/xenomorph/abilities/lesser_drone/lesser_drone_abilities.dm new file mode 100644 index 000000000000..8b137891791f --- /dev/null +++ b/code/modules/mob/living/carbon/xenomorph/abilities/lesser_drone/lesser_drone_abilities.dm @@ -0,0 +1 @@ + diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/lesser_drone/lesser_drone_macros.dm b/code/modules/mob/living/carbon/xenomorph/abilities/lesser_drone/lesser_drone_macros.dm new file mode 100644 index 000000000000..8b137891791f --- /dev/null +++ b/code/modules/mob/living/carbon/xenomorph/abilities/lesser_drone/lesser_drone_macros.dm @@ -0,0 +1 @@ + diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/lesser_drone/lesser_drone_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/lesser_drone/lesser_drone_powers.dm new file mode 100644 index 000000000000..515efea23d53 --- /dev/null +++ b/code/modules/mob/living/carbon/xenomorph/abilities/lesser_drone/lesser_drone_powers.dm @@ -0,0 +1,6 @@ +/datum/action/xeno_action/onclick/plant_weeds/lesser/use_ability(atom/A) + if(!(locate(/obj/effect/alien/weeds/node) in orange(4, owner))) + to_chat(owner, SPAN_XENONOTICE("You can only plant resin nodes near other resin nodes!")) + return + + . = ..() diff --git a/code/modules/mob/living/carbon/xenomorph/castes/Carrier.dm b/code/modules/mob/living/carbon/xenomorph/castes/Carrier.dm index ec1697f30081..6b847a6a4fec 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/Carrier.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/Carrier.dm @@ -82,15 +82,20 @@ var/list/hugger_image_index = list() var/mutable_appearance/hugger_overlays_icon + var/mutable_appearance/eggsac_overlays_icon /mob/living/carbon/xenomorph/carrier/update_icons() . = ..() - - update_hugger_overlays() + if (mutation_type == CARRIER_NORMAL) + update_hugger_overlays() + if (mutation_type == CARRIER_EGGSAC) + update_eggsac_overlays() /mob/living/carbon/xenomorph/carrier/proc/update_hugger_overlays() if(!hugger_overlays_icon) return + if(mutation_type != CARRIER_NORMAL) + return overlays -= hugger_overlays_icon hugger_overlays_icon.overlays.Cut() @@ -99,7 +104,7 @@ hugger_image_index.Cut() return - update_icon_maths(round(( huggers_cur / huggers_max ) * 3.999) + 1) + update_clinger_maths(round(( huggers_cur / huggers_max ) * 3.999) + 1) for(var/i in hugger_image_index) if(stat == DEAD) @@ -114,8 +119,8 @@ overlays += hugger_overlays_icon -/mob/living/carbon/xenomorph/carrier/proc/update_icon_maths(number) - var/funny_list = list(1,2,3,4) +/mob/living/carbon/xenomorph/carrier/proc/update_clinger_maths(number) + var/clinger_list = list(1,2,3,4) if(length(hugger_image_index) != number) if(length(hugger_image_index) > number) while(length(hugger_image_index) != number) @@ -123,20 +128,56 @@ else while(length(hugger_image_index) != number) for(var/i in hugger_image_index) - if(locate(i) in funny_list) - funny_list -= i - hugger_image_index += funny_list[rand(1,length(funny_list))] + if(locate(i) in clinger_list) + clinger_list -= i + hugger_image_index += clinger_list[rand(1,length(clinger_list))] + +/mob/living/carbon/xenomorph/carrier/proc/update_eggsac_overlays() + if(!eggsac_overlays_icon) + return + if(mutation_type != CARRIER_EGGSAC) + return + + overlays -= eggsac_overlays_icon + eggsac_overlays_icon.overlays.Cut() + + if(!eggs_cur) + return + + ///Simplified image index change. + var/i = 0 + if(eggs_cur > 8) + i = 3 + else if (eggs_cur > 4) + i = 2 + else if (eggs_cur > 0) + i = 1 + + if(stat != DEAD) + if(lying) + if((resting || sleeping) && (!knocked_down && !knocked_out && health > 0)) + eggsac_overlays_icon.overlays += icon(icon, "eggsac_[i] Sleeping") + else + eggsac_overlays_icon.overlays +=icon(icon, "eggsac_[i] Knocked Down") + else + eggsac_overlays_icon.overlays +=icon(icon, "eggsac_[i]") + + overlays += eggsac_overlays_icon /mob/living/carbon/xenomorph/carrier/Initialize(mapload, mob/living/carbon/xenomorph/oldxeno, h_number) . = ..() hugger_overlays_icon = mutable_appearance('icons/mob/xenos/overlay_effects64x64.dmi',"empty") + eggsac_overlays_icon = mutable_appearance('icons/mob/xenos/overlay_effects64x64.dmi',"empty") /mob/living/carbon/xenomorph/carrier/death(cause, gibbed) . = ..(cause, gibbed) if(.) - var/chance = 75 + var/chance = 75 //75% to drop an egg or hugger. + if(mutation_type == CARRIER_EGGSAC) + visible_message(SPAN_XENOWARNING("[src] throes as its eggsac bursts into a mess of acid!")) + playsound(src.loc, 'sound/effects/alien_egg_burst.ogg', 25, 1) - if (huggers_cur) + if(huggers_cur) //Hugger explosion, like an egg morpher var/obj/item/clothing/mask/facehugger/hugger visible_message(SPAN_XENOWARNING("The chittering mass of tiny aliens is trying to escape [src]!")) @@ -145,10 +186,15 @@ hugger = new(loc, hivenumber) step_away(hugger, src, 1) - while (eggs_cur > 0) + var/eggs_dropped = FALSE + for(var/i in 1 to eggs_cur) if(prob(chance)) new /obj/item/xeno_egg(loc, hivenumber) - eggs_cur-- + eggs_dropped = TRUE + eggs_cur = 0 + + if(eggs_dropped) //Checks whether or not to announce egg drop. + xeno_message(SPAN_XENOANNOUNCE("[src] has dropped some precious eggs!"), 2, hive.hivenumber) /mob/living/carbon/xenomorph/carrier/get_status_tab_items() . = ..() @@ -272,6 +318,7 @@ if(eggs_cur < eggs_max) if(stat == CONSCIOUS) eggs_cur++ + update_icons() to_chat(src, SPAN_NOTICE("You store the egg and carry it for safekeeping. Now sheltering: [eggs_cur] / [eggs_max].")) qdel(E) else @@ -306,6 +353,7 @@ return E = new(src, hivenumber) eggs_cur-- + update_icons() put_in_active_hand(E) to_chat(src, SPAN_XENONOTICE("You grab one of the eggs in your storage. Now sheltering: [eggs_cur] / [eggs_max].")) return diff --git a/code/modules/mob/living/carbon/xenomorph/castes/Facehugger.dm b/code/modules/mob/living/carbon/xenomorph/castes/Facehugger.dm index df9572df2628..d82e43db2aaf 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/Facehugger.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/Facehugger.dm @@ -149,23 +149,10 @@ /mob/living/carbon/xenomorph/facehugger/proc/handle_hug(mob/living/carbon/human/human) var/obj/item/clothing/mask/facehugger/hugger = new /obj/item/clothing/mask/facehugger(loc, hivenumber) - var/did_hug = hugger.attach(human, TRUE, 0.5, client?.ckey) + var/did_hug = hugger.attach(human, TRUE, 0.5, src) if(client) client.player_data?.adjust_stat(PLAYER_STAT_FACEHUGS, STAT_CATEGORY_XENO, 1) - var/area/hug_area = get_area(src) - if(hug_area) - for(var/mob/dead/observer/observer as anything in GLOB.observer_list) - to_chat(observer, SPAN_DEADSAY("[human] has been facehugged by [src] at \the [hug_area]" + " [OBSERVER_JMP(observer, human)]")) - to_chat(src, SPAN_DEADSAY("[human] has been facehugged by [src] at \the [hug_area]")) - else - for(var/mob/dead/observer/observer as anything in GLOB.observer_list) - to_chat(observer, SPAN_DEADSAY("[human] has been facehugged by [src]" + " [OBSERVER_JMP(observer, human)]")) - to_chat(src, SPAN_DEADSAY("[human] has been facehugged by [src]")) qdel(src) - if(hug_area) - xeno_message(SPAN_XENOMINORWARNING("You sense that [src] has facehugged a host at \the [hug_area]!"), 1, src.hivenumber) - else - xeno_message(SPAN_XENOMINORWARNING("You sense that [src] has facehugged a host!"), 1, src.hivenumber) return did_hug /mob/living/carbon/xenomorph/facehugger/age_xeno() diff --git a/code/modules/mob/living/carbon/xenomorph/castes/lesser_drone.dm b/code/modules/mob/living/carbon/xenomorph/castes/lesser_drone.dm new file mode 100644 index 000000000000..48bf0d95ddcf --- /dev/null +++ b/code/modules/mob/living/carbon/xenomorph/castes/lesser_drone.dm @@ -0,0 +1,97 @@ +/datum/caste_datum/lesser_drone + caste_type = XENO_CASTE_LESSER_DRONE + tier = 1 + melee_damage_lower = XENO_DAMAGE_TIER_1 + melee_damage_upper = XENO_DAMAGE_TIER_1 + melee_vehicle_damage = XENO_DAMAGE_TIER_1 + max_health = XENO_HEALTH_LESSER_DRONE + plasma_gain = XENO_PLASMA_GAIN_TIER_7 + plasma_max = XENO_PLASMA_TIER_3 + crystal_max = XENO_CRYSTAL_LOW + xeno_explosion_resistance = XENO_NO_EXPLOSIVE_ARMOR + armor_deflection = XENO_NO_ARMOR + evasion = XENO_EVASION_LOW + speed = XENO_SPEED_TIER_6 + + evolution_allowed = FALSE + can_be_revived = FALSE + + build_time_mult = BUILD_TIME_MULT_LESSER_DRONE + + caste_desc = "A builder of hives." + can_hold_facehuggers = 1 + can_hold_eggs = CAN_HOLD_TWO_HANDS + acid_level = 1 + weed_level = WEED_LEVEL_STANDARD + max_build_dist = 1 + + tackle_min = 4 + tackle_max = 5 + + aura_strength = 1 + + minimap_icon = "lesser_drone" + +/datum/caste_datum/lesser_drone/New() + . = ..() + + resin_build_order = GLOB.resin_build_order_lesser_drone + +/mob/living/carbon/xenomorph/lesser_drone + caste_type = XENO_CASTE_LESSER_DRONE + name = XENO_CASTE_LESSER_DRONE + desc = "An alien drone. Looks... smaller." + icon = 'icons/mob/xenos/drone.dmi' + icon_size = 48 + icon_state = "Lesser Drone Walking" + plasma_types = list(PLASMA_PURPLE) + tier = 0 + mob_flags = NOBIOSCAN + mob_size = MOB_SIZE_XENO_VERY_SMALL + life_value = 0 + default_honor_value = 0 + show_only_numbers = TRUE + counts_for_slots = FALSE + counts_for_roundend = FALSE + refunds_larva_if_banished = FALSE + crit_health = 0 + gib_chance = 100 + acid_blood_damage = 15 + base_actions = list( + /datum/action/xeno_action/onclick/xeno_resting, + /datum/action/xeno_action/onclick/regurgitate, + /datum/action/xeno_action/watch_xeno, + /datum/action/xeno_action/activable/tail_stab, + /datum/action/xeno_action/activable/corrosive_acid/weak, + /datum/action/xeno_action/onclick/emit_pheromones, + /datum/action/xeno_action/onclick/plant_weeds/lesser, //first macro + /datum/action/xeno_action/onclick/choose_resin, //second macro + /datum/action/xeno_action/activable/secrete_resin, //third macro + /datum/action/xeno_action/onclick/tacmap, + ) + inherent_verbs = list( + /mob/living/carbon/xenomorph/proc/vent_crawl, + /mob/living/carbon/xenomorph/proc/rename_tunnel, + /mob/living/carbon/xenomorph/proc/set_hugger_reserve_for_morpher, + ) + + mutation_type = DRONE_NORMAL + + icon_xeno = 'icons/mob/xenos/lesser_drone.dmi' + icon_xenonid = 'icons/mob/xenonids/lesser_drone.dmi' + +/mob/living/carbon/xenomorph/lesser_drone/age_xeno() + if(stat == DEAD || !caste || QDELETED(src) || !client) + return + + age = XENO_NORMAL + + hud_update() + + xeno_jitter(25) + +/mob/living/carbon/xenomorph/lesser_drone/initialize_pass_flags(datum/pass_flags_container/PF) + ..() + if (PF) + PF.flags_pass = PASS_MOB_IS_XENO|PASS_MOB_THRU_XENO + PF.flags_can_pass_all = PASS_MOB_IS_XENO|PASS_MOB_THRU_XENO diff --git a/code/modules/mob/living/carbon/xenomorph/mutators/strains/carrier/eggsac.dm b/code/modules/mob/living/carbon/xenomorph/mutators/strains/carrier/eggsac.dm index c8e6b768f2bc..436adb79e5aa 100644 --- a/code/modules/mob/living/carbon/xenomorph/mutators/strains/carrier/eggsac.dm +++ b/code/modules/mob/living/carbon/xenomorph/mutators/strains/carrier/eggsac.dm @@ -36,6 +36,8 @@ playsound(carrier.loc, 'sound/voice/alien_facehugger_dies.ogg', 25, 1) carrier.huggers_cur = 0 carrier.huggers_max = 0 + carrier.update_hugger_overlays() + carrier.update_eggsac_overlays() carrier.eggs_max = 12 carrier.extra_build_dist = 1 return TRUE @@ -73,3 +75,4 @@ if(egg_generation_progress >= 15) egg_generation_progress = 0 xeno.eggs_cur++ + xeno.update_icons() diff --git a/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm b/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm index 8b25cf07d14b..fa01938a1203 100644 --- a/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm +++ b/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm @@ -1,5 +1,3 @@ -#define JOIN_AS_FACEHUGGER_DELAY 3 MINUTES - // Actual caste datum basedef /datum/caste_datum var/caste_type = "" @@ -352,7 +350,10 @@ /// How many huggers can the hive support var/playable_hugger_limit = 0 - var/datum/tacmap/tacmap + /// How many lesser drones the hive can support + var/lesser_drone_limit = 0 + + var/datum/tacmap/xeno/tacmap var/minimap_type = MINIMAP_FLAG_XENO /datum/hive_status/New() @@ -893,8 +894,11 @@ qdel(S) for(var/mob/living/carbon/xenomorph/xeno as anything in totalXenos) if(get_area(xeno) != hijacked_dropship && xeno.loc && is_ground_level(xeno.loc.z)) - if(isfacehugger(xeno)) + if(isfacehugger(xeno) || islesserdrone(xeno)) to_chat(xeno, SPAN_XENOANNOUNCE("The Queen has left without you, you quickly find a hiding place to enter hibernation as you lose touch with the hive mind.")) + if(xeno.stomach_contents.len) + xeno.devour_timer = 0 + xeno.handle_stomach_contents() qdel(xeno) continue if(xeno.hunter_data.hunted && !isqueen(xeno)) @@ -908,7 +912,7 @@ qdel(xeno) stored_larva++ continue - if(!isfacehugger(xeno)) + if(xeno.tier >= 1) xenos_count++ for(var/i in GLOB.alive_mob_list) var/mob/living/potential_host = i @@ -1047,6 +1051,53 @@ playsound(hugger, 'sound/effects/xeno_newlarva.ogg', 25, TRUE) hugger.generate_name() +/datum/hive_status/proc/update_lesser_drone_limit() + lesser_drone_limit = Ceiling(totalXenos.len / 3) + +/datum/hive_status/proc/can_spawn_as_lesser_drone(mob/dead/observer/user) + if(!GLOB.hive_datum || ! GLOB.hive_datum[hivenumber]) + return FALSE + + if(jobban_isbanned(user, JOB_XENOMORPH)) // User is jobbanned + to_chat(user, SPAN_WARNING("You are banned from playing aliens and cannot spawn as a xenomorph.")) + return FALSE + + if(world.time - user.timeofdeath < JOIN_AS_LESSER_DRONE_DELAY) + var/time_left = round((user.timeofdeath + JOIN_AS_LESSER_DRONE_DELAY - world.time) / 10) + to_chat(user, SPAN_WARNING("You ghosted too recently. You cannot become a lesser drone until 30 seconds have passed ([time_left] seconds remaining).")) + return FALSE + + if(totalXenos.len <= 0) + to_chat(user, SPAN_WARNING("The hive has fallen, you can't join it!")) + return FALSE + + if(!living_xeno_queen) + to_chat(user, SPAN_WARNING("The selected hive does not have a Queen!")) + return FALSE + + if(!living_xeno_queen.ovipositor && !SSticker.mode.is_in_endgame) + to_chat(user, SPAN_WARNING("The selected hive does not have a Queen on Ovipositor!")) + return FALSE + + update_lesser_drone_limit() + + var/current_lesser_drone_count = 0 + for(var/mob/mob as anything in totalXenos) + if(islesserdrone(mob)) + current_lesser_drone_count++ + + if(lesser_drone_limit <= current_lesser_drone_count) + to_chat(user, SPAN_WARNING("[GLOB.hive_datum[hivenumber]] cannot support more lesser drones! Limit: [current_lesser_drone_count]/[lesser_drone_limit]")) + return FALSE + + if(tgui_alert(user, "Are you sure you want to become a lesser drone?", "Confirmation", list("Yes", "No")) != "Yes") + return FALSE + + if(!user.client) + return FALSE + + return TRUE + ///Called by /obj/item/alien_embryo when a host is bursting to determine extra larva per burst /datum/hive_status/proc/increase_larva_after_burst() var/extra_per_burst = CONFIG_GET(number/extra_larva_per_burst) diff --git a/code/modules/organs/limbs.dm b/code/modules/organs/limbs.dm index dae33bea8157..7d0261d971b9 100644 --- a/code/modules/organs/limbs.dm +++ b/code/modules/organs/limbs.dm @@ -1220,7 +1220,7 @@ treat_grafted var tells it to apply to grafted but unsalved wounds, for burn kit user.visible_message(SPAN_WARNING("[user] fumbles with [S]"), SPAN_WARNING("You fumble with [S]...")) time_to_take = 15 SECONDS - if(do_after(user, time_to_take * user.get_skill_duration_multiplier(SKILL_MEDICAL), INTERRUPT_NEEDHAND, BUSY_ICON_FRIENDLY, target, INTERRUPT_MOVED, BUSY_ICON_MEDICAL)) + if(do_after(user, time_to_take * user.get_skill_duration_multiplier(SKILL_MEDICAL), INTERRUPT_NO_NEEDHAND, BUSY_ICON_FRIENDLY, target, INTERRUPT_MOVED, BUSY_ICON_MEDICAL)) var/possessive = "[user == target ? "your" : "\the [target]'s"]" var/possessive_their = "[user == target ? user.gender == MALE ? "his" : "her" : "\the [target]'s"]" user.affected_message(target, diff --git a/code/modules/projectiles/gun_helpers.dm b/code/modules/projectiles/gun_helpers.dm index d8ea29cd92f8..62f7378191a5 100644 --- a/code/modules/projectiles/gun_helpers.dm +++ b/code/modules/projectiles/gun_helpers.dm @@ -554,6 +554,12 @@ As sniper rifles have both and weapon mods can change them as well. ..() deals w var/obj/item/storage/internal/accessory/holster/holster = cycled_holster.hold if(holster.current_gun) return holster.current_gun + + for(var/obj/item/clothing/accessory/storage/cycled_accessory in w_uniform.accessories) + var/obj/item/storage/internal/accessory/accessory_storage = cycled_accessory.hold + if(accessory_storage.storage_flags & STORAGE_ALLOW_QUICKDRAW) + return accessory_storage + return FALSE if(istype(slot) && (slot.storage_flags & STORAGE_ALLOW_QUICKDRAW)) diff --git a/code/modules/surgery/mcomp_tendwounds.dm b/code/modules/surgery/mcomp_tendwounds.dm index 9f4a9460f669..3a876a8b5730 100644 --- a/code/modules/surgery/mcomp_tendwounds.dm +++ b/code/modules/surgery/mcomp_tendwounds.dm @@ -1,6 +1,6 @@ /datum/surgery/mcomp_wounds name = "Tend Wounds" - possible_locs = list("chest") + possible_locs = DEFENSE_ZONES_LIVING //all hud aiming locations are suitable for yautja to target. invasiveness = list(SURGERY_DEPTH_SURFACE) required_surgery_skill = SKILL_SURGERY_TRAINED var/required_trait = TRAIT_YAUTJA_TECH// Only predators can do this @@ -15,6 +15,14 @@ self_operable = TRUE /datum/surgery/mcomp_wounds/can_start(mob/living/carbon/human/user, mob/living/carbon/human/patient, obj/limb/limb, obj/item/tool) + var/list/surgery_limbs = DEFENSE_ZONES_LIVING //Creates a list of all targetable locations + surgery_limbs -= user.zone_selected //Removes the zone you are currently targeting + + for(var/zone in surgery_limbs) //Loops through the limbs of the patient + if(istype(patient.active_surgeries[zone], /datum/surgery/mcomp_wounds)) //Checks if there is already a surgery of this type existing elsewhere. + to_chat(user, SPAN_WARNING("The [zone] is already being worked on and you have to finish that first!"))//gives a message to the person trying to perform the action + return FALSE + if(istype(user) && HAS_TRAIT(user, TRAIT_YAUTJA_TECH)) if (patient.getBruteLoss() || patient.getFireLoss()) //Heals brute or burn return TRUE diff --git a/code/modules/tents/folded_tents.dm b/code/modules/tents/folded_tents.dm index d1f922703500..d6f1dbca9fd9 100644 --- a/code/modules/tents/folded_tents.dm +++ b/code/modules/tents/folded_tents.dm @@ -12,6 +12,8 @@ var/off_y = 0 /// Map Template to use for the tent var/template + /// If this tent can be deployed anywhere + var/unrestricted_deployment = FALSE /// Check an area is clear for deployment of the tent /obj/item/folded_tent/proc/check_area(turf/ref_turf, mob/message_receiver, display_error = FALSE) @@ -20,7 +22,7 @@ var/list/turf_block = get_deployment_area(ref_turf) for(var/turf/turf as anything in turf_block) var/area/area = get_area(turf) - if(!area.can_build_special) + if(!area.can_build_special && !unrestricted_deployment) if(message_receiver) to_chat(message_receiver, SPAN_WARNING("You cannot deploy tents on restricted areas.")) if(display_error) @@ -73,7 +75,7 @@ if(!istype(deploy_turf) || (deploy_turf.x + dim_x > world.maxx) || (deploy_turf.y + dim_y > world.maxy)) // Map border basically return - if(!is_ground_level(deploy_turf.z)) + if(!is_ground_level(deploy_turf.z) && !unrestricted_deployment) to_chat(user, SPAN_WARNING("USCM Operational Tents are intended for operations, not ship or space recreation.")) return diff --git a/code/modules/tgui/tgui_number_input.dm b/code/modules/tgui/tgui_number_input.dm index 9c447ecd5a03..aa189b1d2039 100644 --- a/code/modules/tgui/tgui_number_input.dm +++ b/code/modules/tgui/tgui_number_input.dm @@ -31,7 +31,7 @@ qdel(number_input) ///A clone of tgui_input_number that defaults to accepting negative inputs too. -/proc/tgui_input_real_number(mob/user, message, title = "Number Input", default = 0, max_value = 16777216, min_value = -16777216, timeout = 0, integer_only = FALSE) +/proc/tgui_input_real_number(mob/user, message, title = "Number Input", default = 0, max_value = SHORT_REAL_LIMIT, min_value = -SHORT_REAL_LIMIT, timeout = 0, integer_only = FALSE) return tgui_input_number(user, message, title, default, max_value, min_value, timeout, integer_only) /** * Creates an asynchronous TGUI number input window with an associated callback. diff --git a/colonialmarines.dme b/colonialmarines.dme index 74f0f99545b4..4a5798995693 100644 --- a/colonialmarines.dme +++ b/colonialmarines.dme @@ -1501,7 +1501,8 @@ #include "code\modules\cm_marines\altitude_control_console.dm" #include "code\modules\cm_marines\anti_air.dm" #include "code\modules\cm_marines\codebook.dm" -#include "code\modules\cm_marines\Donor_Items.dm" +#include "code\modules\cm_marines\Donator_Items.dm" +#include "code\modules\cm_marines\Donator_Kits.dm" #include "code\modules\cm_marines\dropship_ammo.dm" #include "code\modules\cm_marines\dropship_equipment.dm" #include "code\modules\cm_marines\marines_consoles.dm" @@ -1854,6 +1855,9 @@ #include "code\modules\mob\living\carbon\xenomorph\abilities\facehugger\facehugger_powers.dm" #include "code\modules\mob\living\carbon\xenomorph\abilities\hivelord\hivelord_abilities.dm" #include "code\modules\mob\living\carbon\xenomorph\abilities\hivelord\hivelord_powers.dm" +#include "code\modules\mob\living\carbon\xenomorph\abilities\lesser_drone\lesser_drone_abilities.dm" +#include "code\modules\mob\living\carbon\xenomorph\abilities\lesser_drone\lesser_drone_macros.dm" +#include "code\modules\mob\living\carbon\xenomorph\abilities\lesser_drone\lesser_drone_powers.dm" #include "code\modules\mob\living\carbon\xenomorph\abilities\lurker\lurker_abilities.dm" #include "code\modules\mob\living\carbon\xenomorph\abilities\lurker\lurker_macros.dm" #include "code\modules\mob\living\carbon\xenomorph\abilities\lurker\lurker_powers.dm" @@ -1890,6 +1894,7 @@ #include "code\modules\mob\living\carbon\xenomorph\castes\Hellhound.dm" #include "code\modules\mob\living\carbon\xenomorph\castes\Hivelord.dm" #include "code\modules\mob\living\carbon\xenomorph\castes\Larva.dm" +#include "code\modules\mob\living\carbon\xenomorph\castes\lesser_drone.dm" #include "code\modules\mob\living\carbon\xenomorph\castes\Lurker.dm" #include "code\modules\mob\living\carbon\xenomorph\castes\Praetorian.dm" #include "code\modules\mob\living\carbon\xenomorph\castes\Predalien.dm" diff --git a/dependencies.sh b/dependencies.sh index ef00662eaa4d..2889751d36e6 100644 --- a/dependencies.sh +++ b/dependencies.sh @@ -8,7 +8,7 @@ export BYOND_MAJOR=514 export BYOND_MINOR=1588 #rust_g git tag -export RUST_G_VERSION=1.2.0 +export RUST_G_VERSION=2.1.0 #node version export NODE_VERSION=14 diff --git a/html/changelogs/AutoChangeLog-pr-3676.yml b/html/changelogs/AutoChangeLog-pr-3676.yml deleted file mode 100644 index 7253d1827834..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3676.yml +++ /dev/null @@ -1,10 +0,0 @@ -author: "Anuv" -delete-after: True -changes: - - bugfix: "#3775" - - rscadd: "Added a new storm siren unique to NV, new survivor types" - - spellcheck: "Updates to the waking distress call notif." - - code_imp: "Weather-related code changes. Update to the handheld maps." - - soundadd: "Added new monsoon weather sfx, new map-unique ambience, new storm siren sfx." - - maptweak: "New LZ (LZ2 Palm Airfield) in the NE with a construction zone. Removed a number of rocks around cave areas. Increased hive location choices from 3 to 4. Added glass ceilings to facility areas (deep caves are still protected, can be OB'd). Slightly widened the 45 minute weed protection areas around LZs. Added a fog monsoon to the SE beach that dissipates after an hour. Expanded east beach. New SW cave section. Opened up the walkway west of LZ1. Enhanced survivor loot and mats to a comparable degree to current maps. Many small changes to lessen chokes and offer more route choice for xenos and marines alike. Removed Spearhead/Rival and laser pistols. Swapped fawras for monkeys. Added more survivor-type choices. Added a bar area and decrepit truck to the north beach." - - config: "Enabled NV again as a map in maps.txt." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-3729.yml b/html/changelogs/AutoChangeLog-pr-3729.yml deleted file mode 100644 index d4ad5bec6772..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3729.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "GoldenDarkness55" -delete-after: True -changes: - - balance: "Base rav cooldown regain per slash reduced (4 to 3), empowered charge stun duration reduced (2 to 1.3), empower duration increased (5 to 6.5), empower cooldown reduced (22 to 18), duration window for second empower cast reduced (15 to 6), base shield gain reduced (75 to 50), shield gain per marine reduced (80 to 50), maximum empower targets increased (5 to 6), scissor slash cooldown reduced (10 to 6), and damage reduced (45 to 40)" - - balance: "Hedge rav doesn't lose speed anymore, but loses 10 slash damage instead. Shield duration increased (2 to 2.5), Fire Spikes shard range increased (5 to 6), Spike Shed shard lockout duration reduced (30 to 15), shard lock speed reduced to maintain same speed as previously. Shard damage increased (5 to 8), shard slowdown duration reduced (8 to 3), shard gain per tick reduced (10 to 5), shard gain per bullet reduced (20 to 10), added shard gain per slash (15)" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-3749.yml b/html/changelogs/AutoChangeLog-pr-3749.yml deleted file mode 100644 index 0c3d649ed4ad..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3749.yml +++ /dev/null @@ -1,8 +0,0 @@ -author: "Diegoflores31" -delete-after: True -changes: - - balance: "Acid Splash damage increased to 25" - - balance: "Acid Splash damage can be reduced with BIO armor." - - balance: "Reduced Light armor BIO resistance by 10" - - balance: "Increased Heavy armor BIO resistance by 5" - - balance: "Increased VL vest BIO resistance by 5" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-3777.yml b/html/changelogs/AutoChangeLog-pr-3777.yml deleted file mode 100644 index 2f29ce013541..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3777.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "IowaPotatoFarmer" -delete-after: True -changes: - - rscadd: "The PMC Crash on Solaris Ridge now spawns one PMC medic survivor and one PMC engineer survivor." - - bugfix: "The Wey-Yu goon survivors now have their unique corporate white camo M41A MK2 back." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-3817.yml b/html/changelogs/AutoChangeLog-pr-3817.yml deleted file mode 100644 index 457ab6a6452c..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3817.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Zonespace27" -delete-after: True -changes: - - balance: "Trashbags now hold normal items and can be looked through like a box or storage container." - - balance: "Trashbags no longer fit in your belt slot." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-3822.yml b/html/changelogs/AutoChangeLog-pr-3822.yml deleted file mode 100644 index 61e8b77c9ebe..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3822.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "QuickLoad" -delete-after: True -changes: - - balance: "Tones down ERT skills. Impacts VAIPO/Dutch'sDozen/CMB/UPP/CLF/EMerc." - - balance: "Gives PMC & SurvPMC a trained level of CQC." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-3833.yml b/html/changelogs/AutoChangeLog-pr-3833.yml deleted file mode 100644 index 630fe71ce25f..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3833.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "silencer_pl" -delete-after: True -changes: - - qol: "Default paper and desc_lore viewing windows are now larger to match the expected content in them better." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-3844.yml b/html/changelogs/AutoChangeLog-pr-3844.yml deleted file mode 100644 index eb9d04ab9a4e..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3844.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: "BeagleGaming1" -delete-after: True -changes: - - config: "Moved time to burst to the config" - - balance: "Fixed time to burst, lowering it from 15 minutes to 7.5 minutes by default" - - balance: "Stasis bags used on late-stage mobs properly slow growth down less" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-3853.yml b/html/changelogs/AutoChangeLog-pr-3853.yml deleted file mode 100644 index 746efb43655c..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3853.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "realforest2001" -delete-after: True -changes: - - admin: "Removed the R_REJUVINATE permissions flag and replaces instances where it is used with R_MOD." - - admin: "Added logs if a restricted proc is proccalled." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-3868.yml b/html/changelogs/AutoChangeLog-pr-3868.yml new file mode 100644 index 000000000000..4bd11e9a6b0e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3868.yml @@ -0,0 +1,6 @@ +author: "MarpleJones, ihatethisengine2" +delete-after: True +changes: + - rscadd: "Added new sprites for the Eggsac Carrier. Includes an additional death sound for the eggsac bursting." + - rscadd: "Added a hive announcement for when a Carrier dies with eggs." + - bugfix: "Carrier egg drop chance upon death now works as intended." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-3889.yml b/html/changelogs/AutoChangeLog-pr-3889.yml deleted file mode 100644 index 63f48a14cf2e..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3889.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Steelpoint" -delete-after: True -changes: - - rscadd: "Predator toolbelt is now a unique item with its own sprite." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-3890.yml b/html/changelogs/AutoChangeLog-pr-3890.yml deleted file mode 100644 index 4960b78915aa..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3890.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Steelpoint" -delete-after: True -changes: - - maptweak: "More weed spawns so larva don't spawn in area with no weed to evolve on." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-3905.yml b/html/changelogs/AutoChangeLog-pr-3905.yml deleted file mode 100644 index cc457dba451a..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3905.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Huffie56" -delete-after: True -changes: - - bugfix: "fix some area having no apc on the almayer making them not behave like they should specialy when hijack happen." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-3915.yml b/html/changelogs/AutoChangeLog-pr-3915.yml deleted file mode 100644 index c40b5c92f907..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3915.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: "TeDGamer" -delete-after: True -changes: - - bugfix: "Xenos allied to the hive can now open hive's doors" - - bugfix: "Huggers can now scuttle doors" - - code_imp: "Combined hugger + larva code to allow for any small castes to scuttle" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-3921.yml b/html/changelogs/AutoChangeLog-pr-3921.yml deleted file mode 100644 index 29091c2e2721..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3921.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "ihatethisengine" -delete-after: True -changes: - - balance: "Lurkers don't lose invisibility when they bump into partly visible mobs." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-3924.yml b/html/changelogs/AutoChangeLog-pr-3924.yml deleted file mode 100644 index f9f311e597e7..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3924.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Ben10083" -delete-after: True -changes: - - spellcheck: "fix typo relating to Starshell ash" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-3939.yml b/html/changelogs/AutoChangeLog-pr-3939.yml new file mode 100644 index 000000000000..97bac6e085de --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3939.yml @@ -0,0 +1,4 @@ +author: "Morrow" +delete-after: True +changes: + - rscadd: "Added lesser drones" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-3964.yml b/html/changelogs/AutoChangeLog-pr-3964.yml new file mode 100644 index 000000000000..ccd54d9eda5f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3964.yml @@ -0,0 +1,4 @@ +author: "Drathek" +delete-after: True +changes: + - bugfix: "Fix bodybags not accepting warm (recent) dead bodies even if unreviveable" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-3975.yml b/html/changelogs/AutoChangeLog-pr-3975.yml new file mode 100644 index 000000000000..6f871b20bbb6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3975.yml @@ -0,0 +1,5 @@ +author: "Drathek" +delete-after: True +changes: + - bugfix: "Fixed ability deactivation and late join current slot toggles not persisting." + - bugfix: "Toggle the Ability to Hurt Yourself now says On when you can hurt yourself." \ No newline at end of file diff --git a/html/changelogs/archive/2023-07.yml b/html/changelogs/archive/2023-07.yml index 4ecadab4e2d4..99120b3a13c4 100644 --- a/html/changelogs/archive/2023-07.yml +++ b/html/changelogs/archive/2023-07.yml @@ -246,3 +246,166 @@ - bugfix: Fixes another synth survivor variant having marine comms. theselfish: - spellcheck: Goodbye Squad Spotter, hello regular non-squaded Spotter. +2023-07-20: + Anuv: + - bugfix: '#3775' + - rscadd: Added a new storm siren unique to NV, new survivor types + - spellcheck: Updates to the waking distress call notif. + - code_imp: Weather-related code changes. Update to the handheld maps. + - soundadd: Added new monsoon weather sfx, new map-unique ambience, new storm siren + sfx. + - maptweak: New LZ (LZ2 Palm Airfield) in the NE with a construction zone. Removed + a number of rocks around cave areas. Increased hive location choices from 3 + to 4. Added glass ceilings to facility areas (deep caves are still protected, + can be OB'd). Slightly widened the 45 minute weed protection areas around LZs. + Added a fog monsoon to the SE beach that dissipates after an hour. Expanded + east beach. New SW cave section. Opened up the walkway west of LZ1. Enhanced + survivor loot and mats to a comparable degree to current maps. Many small changes + to lessen chokes and offer more route choice for xenos and marines alike. Removed + Spearhead/Rival and laser pistols. Swapped fawras for monkeys. Added more survivor-type + choices. Added a bar area and decrepit truck to the north beach. + - config: Enabled NV again as a map in maps.txt. + Awantje: + - bugfix: The M56D no longer let's you violate density code when exiting it. + BeagleGaming1: + - config: Moved time to burst to the config + - balance: Fixed time to burst, lowering it from 15 minutes to 7.5 minutes by default + - balance: Stasis bags used on late-stage mobs properly slow growth down less + Ben10083: + - qol: Non player Facehuggers now also notify the hive when they facehug something. + - spellcheck: fix typo relating to Starshell ash + Diegoflores31: + - balance: Acid Splash damage increased to 25 + - balance: Acid Splash damage can be reduced with BIO armor. + - balance: Reduced Light armor BIO resistance by 10 + - balance: Increased Heavy armor BIO resistance by 5 + - balance: Increased VL vest BIO resistance by 5 + GoldenDarkness55: + - balance: Base rav cooldown regain per slash reduced (4 to 3), empowered charge + stun duration reduced (2 to 1.3), empower duration increased (5 to 6.5), empower + cooldown reduced (22 to 18), duration window for second empower cast reduced + (15 to 6), base shield gain reduced (75 to 50), shield gain per marine reduced + (80 to 50), maximum empower targets increased (5 to 6), scissor slash cooldown + reduced (10 to 6), and damage reduced (45 to 40) + - balance: Hedge rav doesn't lose speed anymore, but loses 10 slash damage instead. + Shield duration increased (2 to 2.5), Fire Spikes shard range increased (5 to + 6), Spike Shed shard lockout duration reduced (30 to 15), shard lock speed reduced + to maintain same speed as previously. Shard damage increased (5 to 8), shard + slowdown duration reduced (8 to 3), shard gain per tick reduced (10 to 5), shard + gain per bullet reduced (20 to 10), added shard gain per slash (15) + Huffie56: + - bugfix: fix some area having no apc on the almayer making them not behave like + they should specialy when hijack happen. + IowaPotatoFarmer: + - rscadd: The PMC Crash on Solaris Ridge now spawns one PMC medic survivor and one + PMC engineer survivor. + - bugfix: The Wey-Yu goon survivors now have their unique corporate white camo M41A + MK2 back. + Kaboomcat: + - imageadd: Updated the gin bottle sprite + QuickLoad: + - balance: Tones down ERT skills. Impacts VAIPO/Dutch'sDozen/CMB/UPP/CLF/EMerc. + - balance: Gives PMC & SurvPMC a trained level of CQC. + Steelpoint: + - maptweak: More weed spawns so larva don't spawn in area with no weed to evolve + on. + - rscadd: Predator toolbelt is now a unique item with its own sprite. + TeDGamer: + - bugfix: Xenos allied to the hive can now open hive's doors + - bugfix: Huggers can now scuttle doors + - code_imp: Combined hugger + larva code to allow for any small castes to scuttle + Zonespace27: + - balance: Trashbags now hold normal items and can be looked through like a box + or storage container. + - balance: Trashbags no longer fit in your belt slot. + ihatethisengine: + - balance: Lurkers don't lose invisibility when they bump into partly visible mobs. + realforest2001: + - admin: Removed the R_REJUVINATE permissions flag and replaces instances where + it is used with R_MOD. + - admin: Added logs if a restricted proc is proccalled. + silencer_pl: + - qol: Default paper and desc_lore viewing windows are now larger to match the expected + content in them better. +2023-07-21: + Awantje: + - code_imp: Medicomp surgery tools no longer care about what zone you target. + Ben10083: + - rscadd: Facehuggers now bypass time of death checks when being considered for + larva. + - code_imp: new variable for observers to handle bypass of time of death checks + Drathek: + - code_imp: Removed extra CI testing for override maps + Morrow: + - bugfix: Colonial Marshal ERT now uses their own faction + - bugfix: Anchorpoint marines now use the proper define for USCM + - rscadd: Added sounds for inserting and removing knifes to the knife webbing + - rscadd: Added draw delay for knives to the knife webbing + - rscadd: Allowed using quickdraw with the knife webbing + - rscadd: Allowed knife webbing to be alt-clicked to draw from it + - rscadd: Knife webbing is now spawned full + - code_imp: Standardized knife draw delay in a define + - balance: Modifies INTERRUPT_NO_NEEDHAND flag to require you hold the item at least + in one hand. + - balance: Changes splint back to using INTERRUPT_NO_NEEDHAND + - balance: Removes large pouches as buyable from all squad roles other than SL + - balance: Removes medkit, medical (the base ones, not first aid), and syringe pouches + from squad prep room vendors + - balance: Replaces the EZ-injector first aid pouch with the alternate tricord/bandage/splint/ointment + version in the squad prep room vendors + QuickLode: + - bugfix: limits the Survivor CMB Synthetic comms + harryob: + - admin: you can no longer touch bad vars + realforest2001: + - bugfix: Fixes PMC survivor synth spawning with marine comms, again. + - bugfix: Reduces yautja armor bullet resistance by 5, and puts that 5 extra onto + the heavy armor. + - rscadd: Added donator kit boxes that hold a donator's special gear. They can be + destroyed with a right-click while on the ground, and are locked to the donator. + - code_imp: Tidied up typepaths for many donator items to make it clearer what or + who they are for. + - code_imp: Removed the requirement for donators to match their character name to + our config file. +2023-07-22: + Ben10083: + - qol: Ghosts now informed when a non-nested host is about to chestburst + ClairionCM: + - rscadd: Chem ERT objectives now mention that they cant deploy without explicit + permission. + Drathek: + - bugfix: 'Fixed the prompt when nested to ghost: Now uses a TGUI prompt and sets + larva queue time.' + Morrow: + - balance: Decreased blood bag IV insertion time from 3 to 1 second + Waseemq1235: + - code_imp: Adds unrestricted_deployment var to tents. Bypasses groundside checks. +2023-07-23: + Anuv: + - rscadd: Added a headset to Researchers with the intel channel included + Ben10083: + - maptweak: AI Core APC now uses a hyper capacity cell + Drathek: + - bugfix: Fix xeno tacmap staying open when it should be unavailable + - code_imp: Bump rust_g to 2.1.0 and bump all github testing ubuntu versions to + latest. + Khadd: + - bugfix: blowtorch no longer loses fuel on clicks that produce no action + - code_imp: replaced 1-letter vars + QuickLode: + - bugfix: Surgical graft now fits in surgical trays and vests. + blackdragonTOW: + - rscadd: 'Added new CAS Missile: BLU-200 Dragons Breath' + ihatethisengine: + - bugfix: vendors icon_state resets after vending as intended. + nauticall: + - imageadd: Resprited blood bags to look nicer and use proper a proper overlay/underlay + system. Their types are also now distinguishable at a glance. + - code_imp: Reworked the way blood bag sprites work behind the scenes to use the + overlay/underlay system. +2023-07-24: + JackieEstegado: + - maptweak: Made LV-624's "Fully-locked" Research nightmare insert no longer have + indestructible blast doors. + Morrow: + - bugfix: Fixes wood window numbering diff --git a/icons/mob/hud/actions.dmi b/icons/mob/hud/actions.dmi index 4d0697733207..9f885c44f50f 100644 Binary files a/icons/mob/hud/actions.dmi and b/icons/mob/hud/actions.dmi differ diff --git a/icons/mob/xenonids/lesser_drone.dmi b/icons/mob/xenonids/lesser_drone.dmi new file mode 100644 index 000000000000..bff44e659162 Binary files /dev/null and b/icons/mob/xenonids/lesser_drone.dmi differ diff --git a/icons/mob/xenos/carrier.dmi b/icons/mob/xenos/carrier.dmi index 6832bbba8716..4b69cffd5313 100644 Binary files a/icons/mob/xenos/carrier.dmi and b/icons/mob/xenos/carrier.dmi differ diff --git a/icons/mob/xenos/lesser_drone.dmi b/icons/mob/xenos/lesser_drone.dmi new file mode 100644 index 000000000000..134ec0c4ae7c Binary files /dev/null and b/icons/mob/xenos/lesser_drone.dmi differ diff --git a/icons/obj/items/bloodpack.dmi b/icons/obj/items/bloodpack.dmi index b46b6eb638c0..d2bee4892dcf 100644 Binary files a/icons/obj/items/bloodpack.dmi and b/icons/obj/items/bloodpack.dmi differ diff --git a/icons/obj/items/drinks.dmi b/icons/obj/items/drinks.dmi index 10872151260a..2823407a429c 100644 Binary files a/icons/obj/items/drinks.dmi and b/icons/obj/items/drinks.dmi differ diff --git a/icons/obj/items/reagentfillings.dmi b/icons/obj/items/reagentfillings.dmi index 3c6420fa8839..1514db495e13 100644 Binary files a/icons/obj/items/reagentfillings.dmi and b/icons/obj/items/reagentfillings.dmi differ diff --git a/icons/obj/items/storage.dmi b/icons/obj/items/storage.dmi index 65cc0868440f..2d0c1f5928df 100644 Binary files a/icons/obj/items/storage.dmi and b/icons/obj/items/storage.dmi differ diff --git a/icons/turf/walls/windows.dmi b/icons/turf/walls/windows.dmi index 85f822873e68..a3f2fd1d4198 100644 Binary files a/icons/turf/walls/windows.dmi and b/icons/turf/walls/windows.dmi differ diff --git a/icons/ui_icons/map_blips.dmi b/icons/ui_icons/map_blips.dmi index 85ef9959027f..829d9b8a43b0 100644 Binary files a/icons/ui_icons/map_blips.dmi and b/icons/ui_icons/map_blips.dmi differ diff --git a/librust_g.so b/librust_g.so index 49a86aad89b7..56625573d004 100644 Binary files a/librust_g.so and b/librust_g.so differ diff --git a/maps/map_files/LV624/science/40.fullylocked.dmm b/maps/map_files/LV624/science/40.fullylocked.dmm index 63a5d17558f3..3ba311757b73 100644 --- a/maps/map_files/LV624/science/40.fullylocked.dmm +++ b/maps/map_files/LV624/science/40.fullylocked.dmm @@ -7,7 +7,7 @@ /area/lv624/lazarus/research) "ac" = ( /obj/structure/window/framed/colony/reinforced, -/obj/structure/machinery/door/poddoor/almayer/locked{ +/obj/structure/machinery/door/poddoor/almayer/planet_side_blastdoor{ id = "science_blast"; layer = 3.3; name = "\improper Science Wing Blast Door" @@ -15,7 +15,7 @@ /turf/open/floor/plating, /area/lv624/lazarus/research) "ad" = ( -/obj/structure/machinery/door/poddoor/almayer/locked{ +/obj/structure/machinery/door/poddoor/almayer/planet_side_blastdoor{ id = "science_blast"; layer = 3.3; name = "\improper Science Wing Blast Door" @@ -41,7 +41,7 @@ /area/lv624/ground/jungle/north_west_jungle) "ai" = ( /obj/structure/window_frame/colony/reinforced, -/obj/structure/machinery/door/poddoor/almayer/locked{ +/obj/structure/machinery/door/poddoor/almayer/planet_side_blastdoor{ id = "science_blast"; layer = 3.3; name = "\improper Science Wing Blast Door" @@ -73,7 +73,7 @@ /area/lv624/ground/colony/south_medbay_road) "ao" = ( /obj/structure/window/framed/colony/reinforced, -/obj/structure/machinery/door/poddoor/almayer/locked{ +/obj/structure/machinery/door/poddoor/almayer/planet_side_blastdoor{ dir = 4; id = "science_blast"; layer = 3.3; @@ -218,7 +218,7 @@ }, /area/lv624/lazarus/research) "aI" = ( -/obj/structure/machinery/door/poddoor/almayer/locked{ +/obj/structure/machinery/door/poddoor/almayer/planet_side_blastdoor{ dir = 4; id = "science_blast"; layer = 3.3; @@ -336,7 +336,7 @@ }, /area/lv624/lazarus/research) "aU" = ( -/obj/structure/machinery/door/poddoor/almayer/locked{ +/obj/structure/machinery/door/poddoor/almayer/planet_side_blastdoor{ dir = 4; id = "science_blast"; layer = 3.3; diff --git a/maps/map_files/USS_Almayer/USS_Almayer.dmm b/maps/map_files/USS_Almayer/USS_Almayer.dmm index 8ccc43dbc64d..0e5546879dcb 100644 --- a/maps/map_files/USS_Almayer/USS_Almayer.dmm +++ b/maps/map_files/USS_Almayer/USS_Almayer.dmm @@ -64804,7 +64804,8 @@ /area/almayer/living/briefing) "sTV" = ( /obj/structure/machinery/power/apc/almayer/hardened{ - dir = 1 + dir = 1; + cell_type = /obj/item/cell/hyper }, /turf/open/floor/plating, /area/almayer/command/airoom) diff --git a/rust_g.dll b/rust_g.dll index 52a74ce745ea..72a27df14403 100644 Binary files a/rust_g.dll and b/rust_g.dll differ