Skip to content

Commit

Permalink
Nightmare Insert: Trijent Dam - Crashed UPP Survivors (#3845)
Browse files Browse the repository at this point in the history
# About the pull request

**Starring**
_The UPP 173rd Airborne Reconnaissance Company, 2nd Platoon_
![Screenshot 2023-07-09 16 10
32](https://github.com/cmss13-devs/cmss13/assets/6595389/76159e01-6d7f-44f7-b404-e30c54ecc9c8)

This PR adds a new nightmare insert to Trijent Dam that sees a small
group of UPP survivors, post a crash landing in their Mi-220 Assault
Gunship "Fulcrum", attempting to survive the xenomorph outbreak. Whilst
successful in holding their ground despite their initial casualties, the
group are now running low on ammunition and their equipment is starting
to falter. Rescue is coming, but from whom? The Americans? Is the enemy
of my enemy really our friend?

---------------

Technically speaking the PR will see the deployment of the following
survivor roles
* 4 Riflemen
* 1 Non-Combat Synthetic
* 2 Sappers
* 2 Medics
* 1 Specialist
* 1 Squad Leader

![Screenshot 2023-07-10 01 54
11](https://github.com/cmss13-devs/cmss13/assets/6595389/07ef824b-ec62-499c-b7fd-80e935140b73)
Squad Patch

The UPP are in dire straits and this is represented in game by them
being spawned with a mish mash of armour and items. Only the Specialist
and SL are guaranteed to spawn with full armour, everyone else is likely
getting clothing or webbing. If a soldier spawns with webbing they will
be given a flashlight in their suit storage slot.

Weapon's wise it is a even 33% chance for each role to either get a UPP
Pulse Rifle, Pulse Carbine or a UPP Shotgun, with each only getting two
spare mags/3 shell handfuls. The Specialist is guaranteed to get the UPP
Pulse Rifle/Flamer. The mini-gun in the DS is a prop and non-functional.

The area is littered with mostly props or junk, the 'HEAP' ammo mags are
all empty. There is a single ammo box of soft-point ammo set to around
120 rounds.

Every UPP member speaks Russian by default, with Chinese and German as
their secondary languages. Only the SL and Synth can speak English.

The Synthetic has lesser equipment compared to its ERT counterpart and
uses survivor synth skills. It has similar combat restrictions to its
USCM counterpart.

The lore has been run past the lore channel and has been given a thumbs
up.

-----------
**Other Additions**

- External webbing can be clipped to UPP uniforms, which is used to
facilitate some of the cosmetic options for the survivors.
- New UPP logo has been added for documents and faxes. Official UPP
documents now can look more official (see images for example).
- UPP synthetics will now speak Russian as their first language instead
of English

-----------

The PR (as far as I can tell) works and runs properly. I mostly have a
few other tasks of moderate difficulty to finish.
To-Do
- [x] Add the UPP synth
- [x] Figure out how to get the UPP to spawn with random UPP names
- [x] Sprite the dropships side and rear wings
- [x] Expand the in-game lore and descriptions
- [x] Get spawn chances set to correct odds (20% ?)
- [ ] BALANCE

# Explain why it's good for the game

I believe that this would add further variety to the game in two
respects.

Firstly, the UPP are a somewhat under-used aspect that generally only
appear during events or as hostile ERT. Technically in-universe the USCM
and UPP are in a cold war and are technically not at war, I believe that
their introduction as a uncommon survivor spawn may provide some
interesting opportunities for roleplay to occur, either from actual
encounters between UPP and USCM personnel, or from the USCM finding the
last stand of the UPP.

Secondly I think more variety in survivor roles is a boon for the game,
and the opportunity to play as a UPP soldier in a non-ERT setting may
present more opportunities for UPP roleplay to occur.


# Testing Photographs and Procedure
<details>
<summary>Screenshots & Videos</summary>

![2023-07-19 15 51
28](https://github.com/cmss13-devs/cmss13/assets/6595389/ffbce5b8-e593-4f1e-b1c0-0035c56807fd)
In game map as it stands

![Screenshot 2023-07-09 16 10
32](https://github.com/cmss13-devs/cmss13/assets/6595389/76159e01-6d7f-44f7-b404-e30c54ecc9c8)
Overview of the UPP as they stand

![Screenshot 2023-07-10 01 54
11](https://github.com/cmss13-devs/cmss13/assets/6595389/07ef824b-ec62-499c-b7fd-80e935140b73)
Squad Patch

![Screenshot 2023-07-11 12 09
54](https://github.com/cmss13-devs/cmss13/assets/6595389/572ec5b1-55eb-4e4b-95d2-9957dd6ebb02)
Your Orders + UPP logo

</details>


# Changelog
:cl:
add: A team of UPP survivors may spawn on Trijent Dam. 
mapadd: A new nightmare insert for Trijent Dam has been added, featuring
a crashed UPP dropship.
/:cl:

---------

Co-authored-by: Steelpoint <[email protected]>
  • Loading branch information
Steelpoint and Steelpoint committed Aug 4, 2023
1 parent 8d88170 commit 9dc622a
Show file tree
Hide file tree
Showing 22 changed files with 4,969 additions and 27 deletions.
2 changes: 2 additions & 0 deletions code/__DEFINES/language.dm
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@

#define ALL_SYNTH_LANGUAGES list(LANGUAGE_ENGLISH, LANGUAGE_JAPANESE, LANGUAGE_CHINESE, LANGUAGE_RUSSIAN, LANGUAGE_GERMAN, LANGUAGE_SPANISH, LANGUAGE_YAUTJA, LANGUAGE_XENOMORPH)

#define ALL_SYNTH_LANGUAGES_UPP list(LANGUAGE_RUSSIAN, LANGUAGE_ENGLISH, LANGUAGE_JAPANESE, LANGUAGE_CHINESE, LANGUAGE_GERMAN, LANGUAGE_SPANISH, LANGUAGE_YAUTJA, LANGUAGE_XENOMORPH)

//Chinese language sound bitflags

//initial flags
Expand Down
76 changes: 76 additions & 0 deletions code/datums/skills.dm
Original file line number Diff line number Diff line change
Expand Up @@ -1594,6 +1594,82 @@ COLONIAL MARSHALS
SKILL_INTEL = SKILL_INTEL_EXPERT,
SKILL_DOMESTIC = SKILL_DOMESTIC_MASTER
)

/datum/skills/military/survivor/upp_private
name = "UPP Private"
skills = list(
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED,
SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED,
SKILL_CQC = SKILL_CQC_TRAINED,
SKILL_FIREARMS = SKILL_FIREARMS_TRAINED,
SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED,
SKILL_VEHICLE = SKILL_VEHICLE_DEFAULT,
SKILL_JTAC = SKILL_JTAC_TRAINED,
)

/datum/skills/military/survivor/upp_sapper
name = "UPP Sapper"
skills = list(
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED,
SKILL_CQC = SKILL_CQC_TRAINED,
SKILL_FIREARMS = SKILL_FIREARMS_TRAINED,
SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED,
SKILL_VEHICLE = SKILL_VEHICLE_DEFAULT,
SKILL_JTAC = SKILL_JTAC_TRAINED,
)

/datum/skills/military/survivor/upp_medic
name = "UPP Medic"
skills = list(
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED,
SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
SKILL_MEDICAL = SKILL_MEDICAL_DOCTOR,
SKILL_SURGERY = SKILL_SURGERY_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED,
SKILL_FIREARMS = SKILL_FIREARMS_TRAINED,
SKILL_CQC = SKILL_CQC_TRAINED,
SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED,
SKILL_VEHICLE = SKILL_VEHICLE_DEFAULT,
SKILL_JTAC = SKILL_JTAC_TRAINED,
)

/datum/skills/military/survivor/upp_spec
name = "UPP Specialist"
skills = list(
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED,
SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED,
SKILL_CQC = SKILL_CQC_TRAINED,
SKILL_LEADERSHIP = SKILL_LEAD_TRAINED,
SKILL_JTAC = SKILL_JTAC_TRAINED,
SKILL_SPEC_WEAPONS = SKILL_SPEC_UPP,
SKILL_FIREARMS = SKILL_FIREARMS_TRAINED,
SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED,
SKILL_CQC = SKILL_CQC_TRAINED,
SKILL_VEHICLE = SKILL_VEHICLE_DEFAULT,
)

/datum/skills/military/survivor/upp_sl
name = "UPP Squad Leader"
skills = list(
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED,
SKILL_FIREARMS = SKILL_FIREARMS_TRAINED,
SKILL_CQC = SKILL_CQC_TRAINED,
SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED,
SKILL_LEADERSHIP = SKILL_LEAD_EXPERT,
SKILL_MEDICAL = SKILL_MEDICAL_MEDIC,
SKILL_VEHICLE = SKILL_VEHICLE_DEFAULT,
SKILL_JTAC = SKILL_JTAC_EXPERT,
)

/*
---------------------
SPEC-OPS
Expand Down
27 changes: 26 additions & 1 deletion code/game/objects/effects/landmarks/survivor_spawner.dm
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,6 @@

spawn_priority = SPAWN_PRIORITY_VERY_HIGH


//Military Survivors//

/obj/effect/landmark/survivor_spawner/lv522_forecon_tech
Expand All @@ -139,3 +138,29 @@
/obj/effect/landmark/survivor_spawner/lv522_forecon_squad_leader
equipment = /datum/equipment_preset/survivor/forecon/squad_leader
spawn_priority = SPAWN_PRIORITY_HIGH

/obj/effect/landmark/survivor_spawner/upp/soldier
equipment = /datum/equipment_preset/survivor/upp/soldier
synth_equipment = /datum/equipment_preset/synth/survivor/upp
spawn_priority = SPAWN_PRIORITY_MEDIUM

/obj/effect/landmark/survivor_spawner/upp_sapper
equipment = /datum/equipment_preset/survivor/upp/sapper
synth_equipment = /datum/equipment_preset/synth/survivor/upp
spawn_priority = SPAWN_PRIORITY_MEDIUM

/obj/effect/landmark/survivor_spawner/upp_medic
equipment = /datum/equipment_preset/survivor/upp/medic
synth_equipment = /datum/equipment_preset/synth/survivor/upp
spawn_priority = SPAWN_PRIORITY_HIGH

/obj/effect/landmark/survivor_spawner/upp_specialist
equipment = /datum/equipment_preset/survivor/upp/specialist
synth_equipment = /datum/equipment_preset/synth/survivor/upp
spawn_priority = SPAWN_PRIORITY_HIGH

/obj/effect/landmark/survivor_spawner/squad_leader
equipment = /datum/equipment_preset/survivor/upp/squad_leader
synth_equipment = /datum/equipment_preset/synth/survivor/upp
spawn_priority = SPAWN_PRIORITY_VERY_HIGH

4 changes: 4 additions & 0 deletions code/game/objects/items/storage/backpack.dm
Original file line number Diff line number Diff line change
Expand Up @@ -437,6 +437,10 @@
xeno_icon_state = "medicpack"
xeno_types = list(/mob/living/carbon/xenomorph/runner, /mob/living/carbon/xenomorph/praetorian, /mob/living/carbon/xenomorph/drone, /mob/living/carbon/xenomorph/warrior, /mob/living/carbon/xenomorph/defender, /mob/living/carbon/xenomorph/sentinel, /mob/living/carbon/xenomorph/spitter)

/obj/item/storage/backpack/marine/medic/upp
name = "\improper UPP corpsman backpack"
desc = "Uncommon issue backpack worn by UPP medics from isolated sectors. You can swear you can see a faded USCM symbol."

/obj/item/storage/backpack/marine/tech
name = "\improper USCM technician backpack"
desc = "A standard-issue backpack worn by USCM technicians."
Expand Down
13 changes: 13 additions & 0 deletions code/game/objects/items/storage/belt.dm
Original file line number Diff line number Diff line change
Expand Up @@ -283,6 +283,19 @@
new /obj/item/storage/pill_bottle/tramadol(src)
new /obj/item/storage/pill_bottle/peridaxon(src)

/obj/item/storage/belt/medical/lifesaver/upp/partial/fill_preset_inventory()
new /obj/item/stack/medical/advanced/bruise_pack(src)
new /obj/item/stack/medical/advanced/bruise_pack(src)
new /obj/item/stack/medical/advanced/ointment(src)
new /obj/item/stack/medical/advanced/ointment(src)
new /obj/item/stack/medical/splint(src)
new /obj/item/stack/medical/splint(src)
new /obj/item/reagent_container/hypospray/autoinjector/oxycodone(src)
new /obj/item/storage/pill_bottle/bicaridine(src)
new /obj/item/storage/pill_bottle/kelotane(src)
new /obj/item/storage/pill_bottle/inaprovaline(src)
new /obj/item/storage/pill_bottle/tramadol(src)

/obj/item/storage/belt/security
name = "\improper M276 pattern security rig"
desc = "The M276 is the standard load-bearing equipment of the USCM. It consists of a modular belt with various clips. This configuration is commonly seen among USCM Military Police and peacekeepers, though it can hold some light munitions."
Expand Down
6 changes: 6 additions & 0 deletions code/game/objects/items/storage/pouch.dm
Original file line number Diff line number Diff line change
Expand Up @@ -1211,6 +1211,12 @@
new /obj/item/explosive/plastic(src)
new /obj/item/explosive/plastic(src)

/obj/item/storage/pouch/tools/uppsynth/fill_preset_inventory()
new /obj/item/tool/crowbar(src)
new /obj/item/tool/wirecutters(src)
new /obj/item/tool/weldingtool(src)
new /obj/item/tool/wrench(src)

/obj/item/storage/pouch/sling
name = "sling strap"
desc = "Keeps a single item attached to a strap."
Expand Down
1 change: 1 addition & 0 deletions code/modules/asset_cache/asset_list_items.dm
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,7 @@
assets = list(
"wylogo.png" = 'html/images/wylogo.png',
"uscmlogo.png" = 'html/images/uscmlogo.png',
"upplogo.png" = 'html/images/upplogo.png',
"faxwylogo.png" = 'html/images/faxwylogo.png',
"faxbackground.jpg" = 'html/images/faxbackground.jpg',
)
Expand Down
2 changes: 1 addition & 1 deletion code/modules/clothing/under/marine_uniform.dm
Original file line number Diff line number Diff line change
Expand Up @@ -527,7 +527,7 @@
min_cold_protection_temperature = ICE_PLANET_MIN_COLD_PROT
has_sensor = UNIFORM_HAS_SENSORS
sensor_faction = FACTION_UPP
suit_restricted = list(/obj/item/clothing/suit/storage/marine/faction/UPP, /obj/item/clothing/suit/gimmick/jason, /obj/item/clothing/suit/storage/snow_suit/soviet, /obj/item/clothing/suit/storage/snow_suit/survivor)
suit_restricted = list(/obj/item/clothing/suit/storage/marine/faction/UPP, /obj/item/clothing/suit/gimmick/jason, /obj/item/clothing/suit/storage/snow_suit/soviet, /obj/item/clothing/suit/storage/snow_suit/survivor, /obj/item/clothing/suit/storage/webbing)
flags_jumpsuit = UNIFORM_SLEEVE_ROLLABLE

/obj/item/clothing/under/marine/veteran/UPP/medic
Expand Down
5 changes: 5 additions & 0 deletions code/modules/clothing/under/ties.dm
Original file line number Diff line number Diff line change
Expand Up @@ -359,6 +359,11 @@
desc = "A fire-resistant shoulder patch, worn by the men and women of the USS Hanyut, USCM FORECON."
icon_state = "forecon_patch"

/obj/item/clothing/accessory/patch/upp
name = "UPP Airborne Reconnaissance patch"
desc = "A fire-resistant shoulder patch, worn by the men and women of the 173rd Airborne Reconnaissance Platoon."
icon_state = "upppatch"

/obj/item/clothing/accessory/poncho
name = "USCM Poncho"
desc = "The standard USCM poncho has variations for every climate. Custom fitted to be attached to standard USCM armor variants it is comfortable, warming or cooling as needed, and well-fit. A marine couldn't ask for more. Affectionately referred to as a \"woobie\"."
Expand Down
50 changes: 50 additions & 0 deletions code/modules/gear_presets/_select_equipment.dm
Original file line number Diff line number Diff line change
Expand Up @@ -952,3 +952,53 @@ var/list/rebel_rifles = list(
list("Shoulder Holster", 10, /obj/item/clothing/accessory/storage/holster, null, VENDOR_ITEM_REGULAR),
list("Webbing", 10, /obj/item/clothing/accessory/storage/webbing, null, VENDOR_ITEM_REGULAR)
)

/datum/equipment_preset/proc/add_upp_weapon(mob/living/carbon/human/new_human)
var/random_gun = rand(1,3)
switch(random_gun)
if(1)
new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/type71(new_human), WEAR_L_HAND)
new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71(new_human), WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71(new_human), WEAR_IN_BACK)
if(2)
new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/type71/carbine(new_human), WEAR_L_HAND)
new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71(new_human), WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71(new_human), WEAR_IN_BACK)
if(3)
new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/shotgun/type23(new_human), WEAR_L_HAND)
new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun/heavy/buckshot(new_human), WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun/heavy/buckshot(new_human), WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun/heavy/buckshot(new_human), WEAR_IN_BACK)

/datum/equipment_preset/proc/spawn_random_upp_headgear(mob/living/carbon/human/new_human)
var/random_hat = rand(1,10)
switch(random_hat)
if (1, 2)
new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/UPP(new_human), WEAR_HEAD)
if (3, 4, 5)
new_human.equip_to_slot_or_del(new /obj/item/clothing/head/uppcap(new_human), WEAR_HEAD)
if (6, 7)
new_human.equip_to_slot_or_del(new /obj/item/clothing/head/uppcap/beret(new_human), WEAR_HEAD)
if (8, 9)
new_human.equip_to_slot_or_del(new /obj/item/clothing/head/uppcap/ushanka(new_human), WEAR_HEAD)

/datum/equipment_preset/proc/spawn_random_upp_armor(mob/living/carbon/human/new_human)
var/random_gear = rand(1, 4)
switch(random_gear)
if (1, 2, 3)
new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/UPP (new_human), WEAR_BODY)
new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/webbing(new_human), WEAR_JACKET)
new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar(new_human), WEAR_IN_JACKET)
new_human.equip_to_slot_or_del(new /obj/item/device/flashlight(new_human), WEAR_J_STORE)
if (4)
new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/UPP (new_human), WEAR_BODY)
new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/faction/UPP(new_human), WEAR_JACKET)
new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar(new_human), WEAR_IN_JACKET)

/datum/equipment_preset/proc/spawn_random_upp_belt(mob/living/carbon/human/new_human)
var/random_gun = rand(1, 3)
switch(random_gun)
if (1, 2)
new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/NY(new_human), WEAR_WAIST)
if (3)
new_human.equip_to_slot_or_del(new /obj/item/storage/belt/marine/upp(new_human), WEAR_WAIST)
Loading

0 comments on commit 9dc622a

Please sign in to comment.