Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[CR] Possibility to fix experimental cyborgs at Rubic's Castle #74054

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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 @@ -322,6 +322,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 @@ -165,6 +165,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 @@ -383,6 +419,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 },
{
Vgoloshivskiy marked this conversation as resolved.
Show resolved Hide resolved
"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
Loading