Skip to content

Commit

Permalink
[CR] Possibility to fix experimental cyborgs at Rubic's Castle (#74054)
Browse files Browse the repository at this point in the history
* EasyFixCyborgs

Added possibility to fix cyborgs at Rubic's

* grammar fix

* Update data/json/npcs/classes.json

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Update data/json/npcs/exodii/exodii_merchant_talk.json

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Apply suggestions from code review

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* fix json with autoformatter

* Changed to item group list

* lint

* resolve comment issue + some translation

* Update data/json/npcs/exodii/exodii_merchant_talk.json

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* fix i think

* Apply suggestions from code review

* fix text

* Apply suggestions from code review

Audit CBMs in prototype cyborg recovery.

* Update data/json/npcs/classes.json

* Apply suggestions from code review

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Maleclypse <[email protected]>
Co-authored-by: Kevin Granade <[email protected]>
  • Loading branch information
4 people authored Aug 17, 2024
1 parent 095e71d commit b84853d
Show file tree
Hide file tree
Showing 4 changed files with 326 additions and 0 deletions.
24 changes: 24 additions & 0 deletions data/json/npcs/classes.json
Original file line number Diff line number Diff line change
Expand Up @@ -634,6 +634,30 @@
{ "id": "bio_torsionratchet", "chance": 100 }
]
},
{
"type": "npc_class",
"id": "NC_CYBORG_RESCUE",
"name": { "str": "Cyborg" },
"job_description": "I'm transhuman above and beyond.",
"traits": [ { "group": "BG_survival_story_CYBORG" }, { "group": "NPC_starting_traits" }, { "group": "Appearance_demographics" } ],
"skills": [
{ "skill": "ALL", "level": { "mul": [ { "one_in": 3 }, { "sum": [ { "dice": [ 4, 2 ] }, { "rng": [ -4, -1 ] } ] } ] } }
],
"common": false,
"worn_override": "NC_ANCILLA_GRUNT_worn",
"carry_override": "NC_ANCILLA_GRUNT_carry",
"weapon_override": "EMPTY_GROUP",
"bionics": [
{ "id": "bio_armor_head", "chance": 100 },
{ "id": "bio_armor_torso", "chance": 100 },
{ "id": "bio_armor_arms", "chance": 100 },
{ "id": "bio_armor_legs", "chance": 100 },
{ "id": "bio_armor_eyes", "chance": 100 },
{ "id": "bio_power_storage", "chance": 100 },
{ "id": "bio_painkiller", "chance": 16 },
{ "id": "bio_power_storage_mkII", "chance": 90 }
]
},
{
"type": "npc_class",
"id": "NC_CITY_COP",
Expand Down
35 changes: 35 additions & 0 deletions data/json/npcs/exodii/exodii_merchant_itemlist.json
Original file line number Diff line number Diff line change
Expand Up @@ -324,6 +324,41 @@
[ "bio_geiger", 5 ]
]
},
{
"id": "bionics_pulled_out_prototype",
"type": "item_group",
"items": [
{ "item": "bio_power_storage", "prob": 100, "count": [ 1, 5 ] },
{ "item": "bio_power_storage_mkII", "prob": 8, "count": [ 1, 2 ] },
{ "item": "bio_armor_arms", "prob": 60, "count": 1 },
{ "item": "bio_armor_eyes", "prob": 60, "count": 1 },
{ "item": "bio_armor_head", "prob": 60, "count": 1 },
{ "item": "bio_armor_legs", "prob": 60, "count": 1 },
{ "item": "bio_armor_torso", "prob": 60, "count": 1 },
{ "item": "bio_batteries", "prob": 11, "count": 1 },
{ "item": "bio_blood_anal", "prob": 4, "count": 1 },
{ "item": "bio_blood_filter", "prob": 5, "count": 1 },
{ "item": "bio_cable", "prob": 30, "count": 1 },
{ "item": "bio_climate", "prob": 10, "count": 1 },
{ "item": "bio_dex_enhancer", "prob": 8, "count": 1 },
{ "item": "bio_ears", "prob": 17, "count": 1 },
{ "item": "bio_sonar", "prob": 2, "count": 1 },
{ "item": "bio_evap", "prob": 8, "count": 1 },
{ "item": "bio_eye_enhancer", "prob": 2, "count": 1 },
{ "item": "bio_eye_optic", "prob": 2, "count": 1 },
{ "item": "bio_fitnessband", "prob": 16, "count": 1 },
{ "item": "bio_geiger", "prob": 18, "count": 1 },
{ "item": "bio_gills", "prob": 10, "count": 1 },
{ "item": "bio_ground_sonar", "prob": 9, "count": 1 },
{ "item": "bio_heat_absorb", "prob": 4, "count": 1 },
{ "item": "bio_heatsink", "prob": 6, "count": 1 },
{ "item": "bio_radio", "prob": 11, "count": 1 },
{ "item": "bio_sunglasses", "prob": 11, "count": 1 },
{ "item": "bio_ar", "prob": 22, "count": 1 },
{ "item": "bio_alarm", "prob": 26, "count": 1 },
{ "item": "bio_painkiller", "prob": 12, "count": 1 }
]
},
{
"type": "item_group",
"id": "EXODII_CBM_tier1_fun",
Expand Down
245 changes: 245 additions & 0 deletions data/json/npcs/exodii/exodii_merchant_talk.json
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,42 @@
"text": "Just popping in to say hi. See you later, alligator.",
"condition": { "u_has_var": "general_meeting_u_met_Rubik", "value": "yes" },
"topic": "TALK_DONE"
},
{
"text": "How is my buddy doing?",
"condition": {
"and": [
{ "math": [ "time_since(u_timer_exodii_cybor_rescue_operating)", "<", "time('1 d')" ] },
{ "u_has_var": "dialogue_exodii_cybor_rescue_ongoing", "value": "yes" }
]
},
"topic": "TALK_EXODII_MERCHANT_Experiment_Cyborg_Rescue_Ongoing"
},
{
"text": "How is my buddy doing?",
"condition": {
"and": [
{ "math": [ "time_since(u_timer_exodii_cybor_rescue_operating)", ">", "time('1 d')" ] },
{ "u_has_var": "dialogue_exodii_cybor_rescue_ongoing", "value": "yes" }
]
},
"topic": "TALK_EXODII_MERCHANT_Experiment_Cyborg_Rescue_Complete"
},
{
"text": "Fast, can you help this lad?",
"condition": {
"and": [
{ "u_has_var": "general_meeting_u_met_Rubik", "value": "yes" },
{ "not": { "u_has_var": "dialogue_exodii_cybor_rescue_ongoing", "value": "yes" } },
{
"or": [
{ "u_has_items": { "item": "bot_broken_cyborg", "count": 1 } },
{ "u_has_items": { "item": "bot_prototype_cyborg", "count": 1 } }
]
}
]
},
"topic": "TALK_EXODII_MERCHANT_Experiment_Cyborg_Rescue"
}
]
},
Expand Down Expand Up @@ -402,6 +438,215 @@
{ "text": "Actually, I changed my mind. I have to go.", "topic": "TALK_DONE" }
]
},
{
"id": "TALK_EXODII_MERCHANT_Experiment_Cyborg_Rescue_Ongoing",
"type": "talk_topic",
"dynamic_line": { "//~": "Nay, mate, still operating", "str": "Nah, mate, still operatin" },
"responses": [
{ "text": "Never mind, I want to ask you something.", "topic": "TALK_EXODII_MERCHANT_Talk" },
{ "text": "Ok. See you later then.", "topic": "TALK_DONE" }
]
},
{
"id": "TALK_EXODII_MERCHANT_Experiment_Cyborg_Rescue_Complete",
"type": "talk_topic",
"dynamic_line": { "//~": "Give me a second, and I'll bring them here.", "str": "Gimme spek, 'n fetch 'em 'ere." },
"responses": [
{
"text": "Of course, it is time for us to talk.",
"condition": { "u_has_var": "dialogue_exodii_cybor_rescue_ongoing_current_type", "value": "yank_out_all_bionics_from_prototype" },
"effect": [
{ "u_add_var": "dialogue_exodii_cybor_rescue_ongoing", "value": "no" },
{ "u_add_var": "dialogue_exodii_cybor_rescue_ongoing_current_type", "value": "none" },
{ "u_spawn_item": "bionics_pulled_out_prototype", "use_item_group": true },
{
"u_spawn_npc": "BEM_prototype_cyborg_with_yonked_bionics",
"real_count": 1,
"outdoor_only": false,
"min_radius": 1,
"max_radius": 3,
"spawn_message": "Rubic leads a person to you."
}
],
"topic": "TALK_DONE"
},
{
"text": "Of course, it is time for us to talk.",
"condition": { "u_has_var": "dialogue_exodii_cybor_rescue_ongoing_current_type", "value": "repair_and_rescue_prototype" },
"effect": [
{ "u_add_var": "dialogue_exodii_cybor_rescue_ongoing", "value": "no" },
{ "u_add_var": "dialogue_exodii_cybor_rescue_ongoing_current_type", "value": "none" },
{
"u_spawn_npc": "BEM_prototype_cyborg_with_bionics",
"real_count": 1,
"outdoor_only": false,
"min_radius": 1,
"max_radius": 3,
"spawn_message": "Rubic leads a person to you."
}
],
"topic": "TALK_DONE"
},
{
"text": "Of course, it is time for us to talk.",
"condition": { "u_has_var": "dialogue_exodii_cybor_rescue_ongoing_current_type", "value": "reverse_cybernization_prototype" },
"effect": [
{ "u_add_var": "dialogue_exodii_cybor_rescue_ongoing", "value": "no" },
{ "u_add_var": "dialogue_exodii_cybor_rescue_ongoing_current_type", "value": "none" },
{
"u_spawn_npc": "BEM_prototype_cyborg_with_yonked_bionics",
"real_count": 1,
"outdoor_only": false,
"min_radius": 1,
"max_radius": 3,
"spawn_message": "Rubic leads a person to you."
}
],
"topic": "TALK_DONE"
},
{
"text": "Let's see what I get.",
"condition": { "u_has_var": "dialogue_exodii_cybor_rescue_ongoing_current_type", "value": "pull_out_from_rotten_cyborg" },
"effect": [
{ "u_add_var": "dialogue_exodii_cybor_rescue_ongoing", "value": "no" },
{ "u_add_var": "dialogue_exodii_cybor_rescue_ongoing_current_type", "value": "none" },
{ "u_spawn_item": "ruined_chunks", "count": 20 },
{ "u_spawn_item": "bionics_pulled_out_prototype", "use_item_group": true }
],
"topic": "TALK_DONE"
},
{
"text": "It is time to put this body to rest.",
"condition": { "u_has_var": "dialogue_exodii_cybor_rescue_ongoing_current_type", "value": "dress_up_rotten_cyborg" },
"effect": [
{ "u_add_var": "dialogue_exodii_cybor_rescue_ongoing", "value": "no" },
{ "u_add_var": "dialogue_exodii_cybor_rescue_ongoing_current_type", "value": "none" },
{ "u_spawn_item": "corpse_generic_human" }
],
"topic": "TALK_DONE"
},
{ "text": "Never mind, I want to ask you something.", "topic": "TALK_EXODII_MERCHANT_Talk" },
{ "text": "Actually, forget it.", "topic": "TALK_DONE" }
]
},
{
"id": "TALK_EXODII_MERCHANT_Experiment_Cyborg_Rescue",
"type": "talk_topic",
"dynamic_line": { "//~": "Let me see. Will do what I can for a coin.", "str": "Lemme poke. Will tass what ye can for a shiny." },
"responses": [
{
"text": "[Prototype Cyborg] Can you help this guy it seems like they have lost their mind?",
"condition": { "u_has_items": { "item": "bot_prototype_cyborg", "count": 1 } },
"topic": "TALK_EXODII_MERCHANT_Experiment_Prototype_Cyborg_Rescue"
},
{
"text": "[Broken Cyborg] Can you save my buddy who looks a bit rough around the edges, but they still haven't flatlined?",
"condition": { "u_has_items": { "item": "bot_broken_cyborg", "count": 1 } },
"topic": "TALK_EXODII_MERCHANT_Experiment_Broken_Cyborg_Rescue"
},
{ "text": "Actually, forget it's not my problem.", "topic": "TALK_DONE" }
]
},
{
"id": "TALK_EXODII_MERCHANT_Experiment_Prototype_Cyborg_Rescue",
"type": "talk_topic",
"dynamic_line": {
"//~": "For this one I can pull out their cbm and give any working to you, or I can just take out broken bits so that they will still be able to use the rest of stuff in them. Alternatively why don't you just give them to me I surely can help them adjust to life as a cyborg.'",
"str": "Fer this 'un, I can yank out their bits 'n give 'em to ya, or I can jus' take out the busted pieces so they can still use th' rest o' stuff in 'em. Elsewise, why don't ya jest give 'im to me? I reckon I can turn 'im into a right useful worker."
},
"responses": [
{
"text": "[$300] Take everything from him and if there is something useful, put it aside for me.",
"condition": { "u_are_owed": 30000 },
"effect": [
{ "u_consume_item": "bot_prototype_cyborg", "count": 1, "popup": true },
{ "u_spend_cash": 30000 },
{ "u_add_var": "dialogue_exodii_cybor_rescue_ongoing", "value": "yes" },
{ "math": [ "u_timer_exodii_cybor_rescue_operating", "=", "time('now')" ] },
{
"u_add_var": "dialogue_exodii_cybor_rescue_ongoing_current_type",
"value": "yank_out_all_bionics_from_prototype"
}
],
"topic": "TALK_EXODII_MERCHANT_Talk"
},
{
"text": "[200$] Just remove broken bits so they can control themselves.",
"condition": { "u_are_owed": 20000 },
"effect": [
{ "u_consume_item": "bot_prototype_cyborg", "count": 1, "popup": true },
{ "u_spend_cash": 20000 },
{ "u_add_var": "dialogue_exodii_cybor_rescue_ongoing", "value": "yes" },
{ "math": [ "u_timer_exodii_cybor_rescue_operating", "=", "time('now')" ] },
{ "u_add_var": "dialogue_exodii_cybor_rescue_ongoing_current_type", "value": "repair_and_rescue_prototype" }
],
"topic": "TALK_EXODII_MERCHANT_Talk"
},
{
"text": "[95$] Pull everything out, you can keep what works. Just bring my buddy back.",
"condition": { "u_are_owed": 9500 },
"effect": [
{ "u_consume_item": "bot_prototype_cyborg", "count": 1, "popup": true },
{ "u_spend_cash": 9500 },
{ "u_add_var": "dialogue_exodii_cybor_rescue_ongoing", "value": "yes" },
{ "math": [ "u_timer_exodii_cybor_rescue_operating", "=", "time('now')" ] },
{
"u_add_var": "dialogue_exodii_cybor_rescue_ongoing_current_type",
"value": "reverse_cybernization_prototype"
}
],
"topic": "TALK_EXODII_MERCHANT_Talk"
},
{
"text": "They are all yours. [Adds 200$]",
"effect": [ { "u_consume_item": "bot_prototype_cyborg", "count": 1, "popup": true }, { "u_spend_cash": -20000 } ],
"condition": { "u_has_items": { "item": "bot_prototype_cyborg", "count": 1 } },
"topic": "TALK_DONE"
},
{ "text": "Actually, forget it's not my problem.", "topic": "TALK_DONE" }
]
},
{
"id": "TALK_EXODII_MERCHANT_Experiment_Broken_Cyborg_Rescue",
"type": "talk_topic",
"dynamic_line": {
"//~": "This one can't be saved too much brain rotted but i can salvage bits from them or repurpose them for walker, or just cut out rot and neural interface so you can bury them proper",
"str": "This 'unwon't be twitching', too much grey lost to dead. But ye can salvage bits from 'em or born 'em for a walker, or just cut out the rot 'n grey link so ya can miss 'em proper."
},
"responses": [
{
"text": "[200$] Pull out CBM if he can't use it, I can.",
"condition": { "u_are_owed": 20000 },
"effect": [
{ "u_consume_item": "bot_prototype_cyborg", "count": 1, "popup": true },
{ "u_spend_cash": 20000 },
{ "u_add_var": "dialogue_exodii_cybor_rescue_ongoing", "value": "yes" },
{ "math": [ "u_timer_exodii_cybor_rescue_operating", "=", "time('now')" ] },
{ "u_add_var": "dialogue_exodii_cybor_rescue_ongoing_current_type", "value": "pull_out_from_rotten_cyborg" }
],
"topic": "TALK_EXODII_MERCHANT_Talk"
},
{
"text": "[25$] Pull everything out, you can keep what works. He deserves a burial.",
"condition": { "u_are_owed": 2500 },
"effect": [
{ "u_consume_item": "bot_prototype_cyborg", "count": 1, "popup": true },
{ "u_spend_cash": 2500 },
{ "u_add_var": "dialogue_exodii_cybor_rescue_ongoing", "value": "yes" },
{ "math": [ "u_timer_exodii_cybor_rescue_operating", "=", "time('now')" ] },
{ "u_add_var": "dialogue_exodii_cybor_rescue_ongoing_current_type", "value": "dress_up_rotten_cyborg" }
],
"topic": "TALK_EXODII_MERCHANT_Talk"
},
{
"text": "They are all yours. [Adds 150$]",
"effect": [ { "u_consume_item": "bot_prototype_cyborg", "count": 1, "popup": true }, { "u_spend_cash": -15000 } ],
"condition": { "u_has_items": { "item": "bot_prototype_cyborg", "count": 1 } },
"topic": "TALK_DONE"
},
{ "text": "Actually, forget it's not my problem.", "topic": "TALK_DONE" }
]
},
{
"id": "TALK_EXODII_MERCHANT_Talk_Intro1a",
"type": "talk_topic",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,28 @@
"chat": "BEM_GUNRUNNER_1",
"faction": "robofac_auxiliaries"
},
{
"type": "npc",
"id": "BEM_prototype_cyborg_with_yonked_bionics",
"//": "EOC-specific, should not spawn outside of trigger events.",
"name_suffix": "cyborg rescue",
"class": "NC_ANCILLA_GRUNT",
"attitude": 0,
"mission": 7,
"chat": "BGSS_CYBORG_1_STORY1",
"faction": "your_followers"
},
{
"type": "npc",
"id": "BEM_prototype_cyborg_with_bionics",
"//": "EOC-specific, should not spawn outside of trigger events.",
"name_suffix": "kicking cyborg",
"class": "NC_CYBORG_RESCUE",
"attitude": 0,
"mission": 7,
"chat": "BGSS_CYBORG_1_STORY1",
"faction": "your_followers"
},
{
"type": "npc",
"id": "BEM_silent_veteran",
Expand Down

0 comments on commit b84853d

Please sign in to comment.