aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ammo.json4
-rw-r--r--armor.json43
-rw-r--r--book.json3
-rw-r--r--martial_arts_manuals.json6
-rw-r--r--martialarts.json84
-rw-r--r--modinfo.json5
-rw-r--r--monster_drops.json4
-rw-r--r--monsters.json4
-rw-r--r--mutation_category.json14
-rw-r--r--mutations.json251
-rw-r--r--npcs/NC_SHOGGOTH_MAID.json8
-rw-r--r--npcs/TALK_MAID_ALLY.json434
-rw-r--r--npcs/classes.json34
-rw-r--r--npcs/npcs.json13
-rw-r--r--talk_tags.json43
-rw-r--r--techniques.json113
-rw-r--r--tools.json46
17 files changed, 985 insertions, 124 deletions
diff --git a/ammo.json b/ammo.json
index 60ebd3c..5a7a5d2 100644
--- a/ammo.json
+++ b/ammo.json
@@ -3,7 +3,7 @@
"type": "AMMO",
"id": "assassins_throwing_dagger",
"category": "weapons",
- "price": 9000,
+ "price": "90 USD",
"name": { "str": "assassin's throwing knife" },
"symbol": "/",
"color": "light_gray",
@@ -23,7 +23,7 @@
"type": "AMMO",
"id": "makeshift_throwing_knife",
"category": "weapons",
- "price": 5200,
+ "price": "52 USD",
"name": { "str": "makeshift throwing knife" },
"symbol": ";",
"color": "light_gray",
diff --git a/armor.json b/armor.json
index d04c1ad..50818d1 100644
--- a/armor.json
+++ b/armor.json
@@ -92,6 +92,27 @@
"flags": ["VARSIZE", "SUPER_FANCY"]
},
{
+ "id": "maid_dress_french_shoggoth",
+ "type": "ARMOR",
+ "category": "clothing",
+ "looks_like": "maid_dress_french",
+ "name": { "str": "strange French maid dress", "str_pl": "strange French maid dresses" },
+ "description": "A French maid dress in the modern style, black with a frilly white apron. Doesn't cover much past the thigh or shoulder. Something seems off about it.",
+ "weight": "100 g",
+ "volume": "250 ml",
+ "price": "50 USD",
+ "material": [ "cotton" ],
+ "symbol": "[",
+ "color": "blue",
+ "covers": ["TORSO", "ARMS", "LEGS"],
+ "coverage": 0,
+ "encumbrance": 0,
+ "storage": "0",
+ "warmth": 20,
+ "material_thickness": 1,
+ "flags": [ "VARSIZE", "SUPER_FANCY", "OVERSIZE", "STURDY" ]
+ },
+ {
"id": "kawaii_maid_dress",
"type": "ARMOR",
"name": { "str": "maid dress" },
@@ -198,13 +219,33 @@
"flags": [ "VARSIZE", "HELMET_COMPAT" ]
},
{
+ "id": "maid_cap_shoggoth",
+ "type": "ARMOR",
+ "looks_like": "kawaii_maid_hat",
+ "category": "armor",
+ "name": { "str": "strange maid headband" },
+ "description": "A black headband with white lace trim, worn by maids. Something seems off about it.",
+ "weight": "50 g",
+ "volume": "250 ml",
+ "price": "20 USD",
+ "material": [ "cotton" ],
+ "symbol": "[",
+ "color": "white",
+ "covers": [ "head" ],
+ "coverage": 0,
+ "encumbrance": 0,
+ "warmth": 15,
+ "material_thickness": 1,
+ "flags": [ "VARSIZE", "FANCY", "SKINTIGHT" ]
+ },
+ {
"id": "kawaii_maid_hat",
"type": "ARMOR",
"name": { "str": "maid headband" },
"description": "A black headband with white lace trim, worn by maids.",
"weight": "150 g",
"volume": "250 ml",
- "price": 2500,
+ "price": "25 USD",
"material": [ "cotton" ],
"symbol": "[",
"color": "white",
diff --git a/book.json b/book.json
index 5aa0b5c..7ad2d07 100644
--- a/book.json
+++ b/book.json
@@ -2,11 +2,12 @@
{
"id": "book_shoggoth",
"type": "BOOK",
+ "category": "books",
"name": { "str": "impossible scribbles", "str_pl": "impossible scribbles" },
"description": "A thin leaflet that's filled with chaotic handwriting, disturbing visuals, impossible mathematical equations, languages not known to anyone on Earth and lists of what appears to be names with all of them crossed out. The leaflet has more pages than possible, each and every one of them getting more and more chaotic and giving you a splitting headache as the fabric of reality seems to collapse around your vision. Suddenly, it's all clear to you. On the final page, you read a complex formula on how to summon a shoggoth, seemingly written in your handwriting.",
"weight": "150 g",
"volume": "250 ml",
- "price": 20000,
+ "price": "200 USD",
"material": [ "paper" ],
"symbol": "?",
"color": "green",
diff --git a/martial_arts_manuals.json b/martial_arts_manuals.json
index f6c3993..ec57367 100644
--- a/martial_arts_manuals.json
+++ b/martial_arts_manuals.json
@@ -5,9 +5,9 @@
"category": "books",
"symbol": "?",
"color": "green",
- "name": { "str": "101 ways to protect my Mistress" },
- "description": "A manual penned by different maids, listing all of their ideas on physical ways to protect their Mistresses.",
- "price": 20000,
+ "name": { "str": "A Maid's Memoirs" },
+ "description": "A collection of letters written by various maids, detailing the things they do for their Mistresses.",
+ "price": "200 USD",
"material": [ "paper" ],
"weight": "150 g",
"volume": "250 ml",
diff --git a/martialarts.json b/martialarts.json
index 0a840b9..170f689 100644
--- a/martialarts.json
+++ b/martialarts.json
@@ -2,57 +2,83 @@
{
"type": "martial_art",
"id": "style_maid",
- "name": { "str": "Servant's fighting technique" },
- "description": "A secret assassination technique taught to first-class servants. It gives you an elegant appearance, allowing you to dodge and counterattack with style.",
+ "name": { "str": "L'art du Nettoyage" },
+ "description": "It is the servant's duty to take out the trash. Pause to consider your offensive options.",
"initiate": [ "You steady yourself, ready to strike with poise and grace.", "%s appears more steady and composed." ],
"arm_block": 99,
- "leg_block": 99,
"static_buffs": [
{
- "id": "maid_evade",
- "name": "Silent presence",
- "description": "By staying still, you get +2 to dodging.",
+ "id": "maid_defense",
+ "name": "For Another",
+ "description": "A servant stands between their mistress and the world.\n\nBlocked damage reduced by 100% of Dexterity, +1 Block attempt",
"unarmed_allowed": true,
"melee_allowed": true,
- "flat_bonuses": [ [ "dodge", 2.0 ] ]
+ "bonus_blocks": 1,
+ "flat_bonuses": [ { "stat": "block", "scaling-stat": "dex", "scale": 1.0 } ]
+ },
+ {
+ "id": "maid_defense_2",
+ "name": "Silent Presence",
+ "description": "A servant must carry out their duties with the appropriate poise and grace.\n\n+2 Dodge skill, +1 Dodge attempts.",
+ "skill_requirements": [ { "name": "melee", "level": 3 } ],
+ "bonus_dodges": 1,
+ "unarmed_allowed": true,
+ "melee_allowed": true,
+ "flat_bonuses": [ { "stat": "dodge", "scale": 2.0 } ]
}
],
"onmove_buffs": [
{
"id": "maid_moved",
- "name": "Assault",
- "description": "You receive a penalty to dodging when moving, but your chances of hitting and damage dealt are increased in accordance with your perception.",
+ "name": "Rush",
+ "description": "Somebody needs you. Steady yourself and hurry to their side.\n\n-1 to Hit, +2 Dodge skill, -30% damage\nLasts 1 turn",
"unarmed_allowed": true,
"melee_allowed": true,
- "min_unarmed": 0,
- "buff_duration": 2,
- "flat_bonuses": [
- [ "hit", "per", 1],
- [ "damage", "bash", "per", 0.2 ],
- [ "damage", "cut", "per", 0.2 ],
- [ "damage", "stab", "per", 0.2 ],
- [ "dodge", -4.0 ]
+ "skill_requirements": [ { "name": "unarmed", "level": 0 } ],
+ "buff_duration": 1,
+ "max_stacks": 1,
+ "flat_bonuses": [ { "stat": "hit", "scale": -1 }, { "stat": "dodge", "scale": 2.0 } ],
+ "mult_bonuses": [
+ { "stat": "damage", "type": "bash", "scale": 0.7 },
+ { "stat": "damage", "type": "cut", "scale": 0.7 },
+ { "stat": "damage", "type": "stab", "scale": 0.7 }
]
}
],
- "ondodge_buffs": [
+ "onpause_buffs": [
{
- "id": "maid_evaded_bonus",
- "name": "Counterattack",
- "description": "Avoided attacks with minimal movement. You have a chance of landing a counterattack.",
+ "id": "maid_pause_bonus",
+ "name": "Collected Miscellany",
+ "description": "A moment to compose yourself is all you need.\n\nEnables certain techniques. -2 Blocks, -1 Dodge. Lasts one turn",
"unarmed_allowed": true,
"melee_allowed": true,
- "min_unarmed": 0,
- "buff_duration": 2,
+ "skill_requirements": [ { "name": "unarmed", "level": 0 } ],
+ "buff_duration": 1,
"max_stacks": 1,
- "mult_bonuses": [
- [ "damage", "bash", 1.2 ],
- [ "damage", "cut", 1.2 ],
- [ "damage", "stab", 1.2 ]
- ]
+ "bonus_blocks": -2,
+ "bonus_dodges": -1
}
],
- "techniques": [ "tec_maid_precise", "tec_maid_counter", "tec_maid_meleecounter", "tec_maid_miyage", "tec_maid_kyusyu" ],
+ "ongethit_buffs": [
+ {
+ "id": "maid_gethit",
+ "name": "Flustered",
+ "description": "Ah! N-not there!\n\n-1 Dodge attempts, -2 Dodge skill.",
+ "unarmed_allowed": true,
+ "melee_allowed": true,
+ "buff_duration": 1,
+ "bonus_dodges": -1,
+ "flat_bonuses": [ { "stat": "dodge", "scale": -2.0 } ]
+ }
+ ],
+ "techniques": [
+ "tec_maid_precise",
+ "tec_maid_counter",
+ "tec_maid_meleecounter",
+ "tec_maid_miyage",
+ "tec_maid_kyusyu",
+ "tec_maid_grab"
+ ],
"weapons": [
"mop",
"battle_mop",
diff --git a/modinfo.json b/modinfo.json
index 72279d8..ce915a8 100644
--- a/modinfo.json
+++ b/modinfo.json
@@ -3,9 +3,10 @@
"type": "MOD_INFO",
"ident": "battle_maid_redone",
"name": "Battle Maid Redone",
+ "authors": [ "Vermillon" ],
+ "maintainers": [ "jc_gargma" ],
"description": "Translated and tweaked version of the original Battle Maid mod. Conflicts with Battle Maid Redux, Kawaii Maid Mod, Project Kawaii.",
- "authors": [ "jc_gargma" ],
- "category": "misc_additions",
+ "category": "content",
"dependencies": [ "dda" ]
}
]
diff --git a/monster_drops.json b/monster_drops.json
index ccfe712..0c4ae42 100644
--- a/monster_drops.json
+++ b/monster_drops.json
@@ -3,9 +3,7 @@
"type": "item_group",
"id": "mon_shoggoth_death_drops",
"subtype": "collection",
- "entries": [
- { "item": "meat_shoggoth", "prob": 40 }
- ]
+ "entries": [ { "item": "meat_shoggoth", "prob": 40 } ]
},
{
"type": "item_group",
diff --git a/monsters.json b/monsters.json
index 02d49ef..ad48074 100644
--- a/monsters.json
+++ b/monsters.json
@@ -32,7 +32,7 @@
"death_function": [ "MELT" ],
"regenerates": 50,
"regen_morale": true,
- "flags": [ "SEES", "SMELLS", "HEARS", "SWIMS", "WARM", "NOGIB", "CAN_OPEN_DOORS", "HUMAN", "PATH_AVOID_DANGER_1" ],
+ "flags": [ "SEES", "SMELLS", "HEARS", "SWIMS", "WARM", "NOGIB", "CAN_OPEN_DOORS", "HUMAN", "PATH_AVOID_DANGER_1", "REVIVES" ],
"anger_triggers": [ "FRIEND_ATTACKED" ]
},
{
@@ -99,7 +99,7 @@
"death_function": [ "MELT" ],
"regenerates": 10,
"regen_morale": true,
- "flags": [ "SEES", "SMELLS", "HEARS", "SWIMS", "WARM", "NOGIB", "CAN_OPEN_DOORS", "HUMAN", "PATH_AVOID_DANGER_1" ],
+ "flags": [ "SEES", "SMELLS", "HEARS", "SWIMS", "WARM", "NOGIB", "CAN_OPEN_DOORS", "HUMAN", "PATH_AVOID_DANGER_1", "REVIVES" ],
"anger_triggers": [ "FRIEND_ATTACKED" ]
}
]
diff --git a/mutation_category.json b/mutation_category.json
new file mode 100644
index 0000000..58b6d03
--- /dev/null
+++ b/mutation_category.json
@@ -0,0 +1,14 @@
+[
+ {
+ "type": "mutation_category",
+ "id": "SHOGGOTH",
+ "name": "Horror",
+ "threshold_mut": "THRESH_SHOGGOTH",
+ "mutagen_message": "Another eye opens in your mind.",
+ "iv_message": "You feel the stars overtaking you.",
+ "memorial_message": "Embraced the unknowable.",
+ "iv_min_mutations": 8,
+ "iv_additional_mutations": 2,
+ "iv_additional_mutations_chance": 50
+ }
+]
diff --git a/mutations.json b/mutations.json
index fbae8dc..ad8c7eb 100644
--- a/mutations.json
+++ b/mutations.json
@@ -4,7 +4,7 @@
"id": "MARTIAL_ARTS_maid",
"name": { "str": "Servant's fighting technique" },
"points": 3,
- "description": "You have learned the secret assassination techniques of a first-class servant.",
+ "description": "Your Mistress was more hated than most, forcing you to learn some unorthodox combat techniques.",
"starting_trait": true,
"initial_ma_styles": [ "style_maid" ],
"valid": false
@@ -12,9 +12,9 @@
{
"type": "mutation",
"id": "PROF_MA_MAID",
- "name": { "str": "Battle Servant" },
+ "name": { "str": "Servant's fighting technique" },
"points": 0,
- "description": "You have learned the secret assassination techniques of a first-class servant.",
+ "description": "Your Mistress was more hated than most, forcing you to learn some unorthodox combat techniques.",
"initial_ma_styles": [ "style_maid" ],
"valid": false,
"purifiable": false,
@@ -23,9 +23,11 @@
{
"type": "mutation",
"id": "PROF_NEKOMIMI",
- "name": { "str": "Cat characteristics" },
+ "name": { "str": "Nekomimi" },
"points": 0,
- "description": "You have grown features that of a cat.",
+ "description": "You have grown features resembling those of a catgirl.",
+ "visibility": 10,
+ "ugliness": -5,
"valid": false,
"purifiable": false,
"profession": true
@@ -35,5 +37,244 @@
"id": "FELINE_EARS",
"copy-from": "FELINE_EARS",
"points": 0
+ },
+ {
+ "type": "mutation",
+ "id": "MAID_RESTRICT",
+ "name": { "str": "Summoned Maid" },
+ "points": 0,
+ "description": "Summoned maids cannot use items. NPC only trait - if you have this, something went wrong.",
+ "valid": false,
+ "purifiable": false,
+ "profession": true
+ },
+ {
+ "type": "mutation",
+ "id": "SHOGGOTH_BUFF_OK",
+ "name": { "str": "Polymorphic Structure" },
+ "points": 5,
+ "visibility": 10,
+ "ugliness": 10,
+ "purifiable": false,
+ "description": "Muscle, chitin, and bone splinter and mend into the optimal shape for the task at hand. Dexterity + 2, Strength + 4",
+ "prereqs": [ "SHOGGOTH_BUFF" ],
+ "threshreq": [ "THRESH_SHOGGOTH" ],
+ "category": [ "SHOGGOTH" ],
+ "passive_mods": { "dex_mod": 2, "str_mod": 4 }
+ },
+ {
+ "type": "mutation",
+ "id": "SHOGGOTH_BUFF",
+ "name": { "str": "Unstable Structure" },
+ "points": 4,
+ "visibility": 10,
+ "ugliness": 10,
+ "description": "Your skeletal structure spontaneously shifts into alien forms. This will take some getting used to. Dexterity -4",
+ "threshreq": [ "THRESH_SHOGGOTH" ],
+ "category": [ "SHOGGOTH" ],
+ "changes_to": [ "SHOGGOTH_BUFF_OK" ],
+ "passive_mods": { "dex_mod": -4 }
+ },
+ {
+ "type": "mutation",
+ "id": "PER_SLIME_OK",
+ "name": { "str": "Distributed Senses" },
+ "points": 7,
+ "visibility": 10,
+ "ugliness": 10,
+ "description": "You can now extend and reabsorb sensory organs at will, and can therefore ignore most shocks that would overwhelm lesser beings.",
+ "valid": false,
+ "purifiable": false,
+ "leads_to": [ "SLIMESPAWNER" ],
+ "prereqs": [ "PER_SLIME" ],
+ "prereqs2": [ "AMORPHOUS" ],
+ "threshreq": [ "THRESH_SLIME", "THRESH_SHOGGOTH" ],
+ "category": [ "SLIME", "SHOGGOTH" ],
+ "passive_mods": { "per_mod": 5 }
+ },
+ {
+ "type": "mutation",
+ "id": "SHOGGOTH_BODY",
+ "name": { "str": "Unbound Flesh" },
+ "points": -2,
+ "visibility": 10,
+ "ugliness": 10,
+ "consume_time_modifier": 1.1,
+ "mixed_effect": true,
+ "description": "Your twisted, crackling flesh roils with new vigor. External damage pales in comparison to the chaotic knitting and reknitting taking place just beneath the surface.\n\nGain +4 cut armor, reduced move cost, and improved healing",
+ "purifiable": false,
+ "threshreq": [ "THRESH_SHOGGOTH" ],
+ "category": [ "SHOGGOTH" ],
+ "armor": [
+ {
+ "parts": [ "torso", "head", "arm_l", "arm_r", "hand_l", "hand_r", "leg_l", "leg_r", "foot_l", "foot_r", "mouth", "eyes" ],
+ "cut": 4
+ }
+ ],
+ "movecost_modifier": 0.8,
+ "healing_awake": 1.0,
+ "healing_resting": 0.75,
+ "mending_modifier": 32.0
+ },
+ {
+ "type": "mutation",
+ "id": "SHOGGOTH_BODY_NPC",
+ "name": { "str": "Eldritch Doppelgänger" },
+ "points": -2,
+ "visibility": 10,
+ "ugliness": 10,
+ "mixed_effect": true,
+ "description": "Alien flesh and bone inhabits a human frame. This fell abomination once was, and still is, an eldritch being beyond our understanding.\n\nNPC version of Unbound Flesh, approx. 3x as strong.",
+ "purifiable": false,
+ "valid": false,
+ "threshreq": [ "THRESH_SHOGGOTH" ],
+ "armor": [
+ {
+ "parts": [ "torso", "head", "arm_l", "arm_r", "hand_l", "hand_r", "leg_l", "leg_r", "foot_l", "foot_r", "mouth", "eyes" ],
+ "cut": 12,
+ "bash": 8
+ }
+ ],
+ "movecost_modifier": 0.8,
+ "healing_awake": 3.0,
+ "healing_resting": 2.25,
+ "mending_modifier": 100.0
+ },
+ {
+ "type": "mutation",
+ "id": "PER_SLIME",
+ "name": { "str": "Sensory Disintegration" },
+ "points": -7,
+ "visibility": 10,
+ "ugliness": 10,
+ "description": "Your sense organs are all over the place: eyes extending and retracting, 'ears' of various shapes migrating about, and taste & smell are uncontrollable. The world is a horrible mixup. Ugh!",
+ "valid": false,
+ "purifiable": false,
+ "changes_to": [ "PER_SLIME_OK" ],
+ "prereqs": [ "PER_UP" ],
+ "prereqs2": [ "AMORPHOUS" ],
+ "threshreq": [ "THRESH_SLIME", "THRESH_SHOGGOTH" ],
+ "category": [ "SLIME", "SHOGGOTH" ],
+ "passive_mods": { "per_mod": -8 }
+ },
+ {
+ "type": "mutation",
+ "id": "AMORPHOUS",
+ "name": { "str": "Amorphous Body" },
+ "points": -2,
+ "visibility": 10,
+ "ugliness": 10,
+ "consume_time_modifier": 1.1,
+ "description": "Your flesh is a pleasing gel-like consistency. Your bodily functions seem to be moving around, and your leg-equivalents flow comfortably - if a little slower than your old meat-legs.",
+ "purifiable": false,
+ "leads_to": [ "INT_SLIME", "PER_SLIME" ],
+ "threshreq": [ "THRESH_SLIME", "THRESH_SHOGGOTH" ],
+ "category": [ "SLIME", "SHOGGOTH" ],
+ "armor": [
+ {
+ "parts": [ "torso", "head", "arm_l", "arm_r", "hand_l", "hand_r", "leg_l", "leg_r", "foot_l", "foot_r", "mouth", "eyes" ],
+ "bash": 4
+ }
+ ],
+ "movecost_modifier": 1.25
+ },
+ {
+ "type": "mutation",
+ "id": "SHUFFLING_HORROR",
+ "name": { "str": "Shuffling Horror" },
+ "points": 6,
+ "visibility": 10,
+ "ugliness": 20,
+ "mixed_effect": true,
+ "purifiable": false,
+ "description": "Your limbs are a nightmare of splintered bone, gaping maws, and jagged fangs. You can make devastating bonus attacks, but basically everyone will attempt to kill you on sight. Also prevents wearing gloves and shoes, though you wish you could.",
+ "prereqs": [ "SHOGGOTH_BUFF_OK" ],
+ "threshreq": [ "THRESH_SHOGGOTH" ],
+ "category": [ "SHOGGOTH" ],
+ "restricts_gear": [ "hand_r", "hand_l", "foot_l", "foot_r" ],
+ "destroys_gear": true,
+ "social_modifiers": { "intimidate": -30, "persuade": -50 },
+ "attacks": {
+ "attack_text_u": "You rend %s with nightmare made flesh",
+ "attack_text_npc": "%1$s tears into %2$s with their monstrous limbs",
+ "chance": 20,
+ "base_damage": { "damage_type": "stab", "amount": 25 },
+ "strength_damage": { "damage_type": "cut", "amount": 2 }
+ }
+ },
+ {
+ "type": "mutation",
+ "id": "HUNGER3",
+ "name": { "str": "Extreme Metabolism" },
+ "points": -2,
+ "description": "You consume three times as much food as the average human to maintain your truly superhuman endurance.",
+ "prereqs": [ "HUNGER2" ],
+ "leads_to": [ "EATHEALTH" ],
+ "types": [ "METABOLISM" ],
+ "category": [ "CHIMERA", "SHOGGOTH" ],
+ "metabolism_modifier": 2.0,
+ "stamina_regen_modifier": 0.5
+ },
+ {
+ "type": "mutation",
+ "id": "EATHEALTH",
+ "name": { "str": "Hyper-Metabolism" },
+ "points": 15,
+ "description": "Your particular metabolism allows you to burn calories at a prodigious rate to regenerate tissues in a matter of minutes, this is however a very wasteful process. Activate to start healing.",
+ "prereqs": [ "HUNGER3" ],
+ "types": [ "METABOLISM" ],
+ "threshreq": [ "THRESH_CHIMERA", "THRESH_SHOGGOTH" ],
+ "category": [ "CHIMERA", "SHOGGOTH" ],
+ "valid": false,
+ "active": true,
+ "transform": {
+ "target": "EATHEALTH_active",
+ "msg_transform": "Your hyper-metabolism starts burning up calories.",
+ "active": true,
+ "moves": 0
+ }
+ },
+ {
+ "type": "mutation",
+ "id": "MUT_TOUGH",
+ "name": { "str": "Resilient" },
+ "points": 2,
+ "description": "You can survive injuries that would incapacitate humans: you get a 20% bonus to all hit points. Stacks with Tough, etc.",
+ "social_modifiers": { "intimidate": 2 },
+ "prereqs": [ "LARGE_OK", "HUGE_OK", "STR_UP_3", "STR_UP_4", "MASOCHIST_MED", "SHOGGOTH_BUFF_OK" ],
+ "threshreq": [
+ "THRESH_URSINE",
+ "THRESH_CATTLE",
+ "THRESH_CHIMERA",
+ "THRESH_MEDICAL",
+ "THRESH_LIZARD",
+ "THRESH_BEAST",
+ "THRESH_SHOGGOTH"
+ ],
+ "cancels": [ "FLIMSY", "FLIMSY2", "FLIMSY3", "GLASSJAW" ],
+ "changes_to": [ "MUT_TOUGH2" ],
+ "category": [ "URSINE", "CATTLE", "CHIMERA", "BEAST", "LIZARD", "MEDICAL", "SHOGGOTH" ],
+ "hp_modifier_secondary": 0.2
+ },
+ {
+ "type": "mutation",
+ "id": "THRESH_SHOGGOTH",
+ "name": { "str": "Tekeli-li?" },
+ "points": 1,
+ "description": "Tekeli-li.",
+ "valid": false,
+ "purifiable": false,
+ "threshold": true
+ },
+ {
+ "type": "mutation",
+ "id": "SHOGGOTH_PRECURSOR",
+ "name": { "str": "Eldritch Precursor" },
+ "points": 0,
+ "description": "Something feels off. Your brain itches, and you swear you can feel your bones twitching.",
+ "visibility": 0,
+ "ugliness": 0,
+ "category": [ "SHOGGOTH", "SHOGGOTH", "SHOGGOTH", "SHOGGOTH", "SHOGGOTH", "SHOGGOTH", "SHOGGOTH", "SHOGGOTH", "SHOGGOTH" ],
+ "purifiable": false
}
]
diff --git a/npcs/NC_SHOGGOTH_MAID.json b/npcs/NC_SHOGGOTH_MAID.json
new file mode 100644
index 0000000..8d0e022
--- /dev/null
+++ b/npcs/NC_SHOGGOTH_MAID.json
@@ -0,0 +1,8 @@
+[
+ {
+ "type": "item_group",
+ "id": "NC_SHOGGOTH_MAID_worn",
+ "subtype": "collection",
+ "entries": [ { "item": "maid_dress_french_shoggoth", "prob": 100 }, { "item": "maid_cap_shoggoth", "prob": 100 } ]
+ }
+]
diff --git a/npcs/TALK_MAID_ALLY.json b/npcs/TALK_MAID_ALLY.json
new file mode 100644
index 0000000..50a6025
--- /dev/null
+++ b/npcs/TALK_MAID_ALLY.json
@@ -0,0 +1,434 @@
+[
+ {
+ "id": [ "TALK_MAID_ALLY" ],
+ "type": "talk_topic",
+ "dynamic_line": {
+ "is_by_radio": " *pshhhttt* I'm reading you Mistress, over.",
+ "no": { "has_reason": { "use_reason": true }, "no": "What is it, Mistress?" }
+ },
+ "speaker_effect": {
+ "sentinel": "maid_init",
+ "condition": { "npc_rule": "allow_pick_up" },
+ "effect": { "toggle_npc_rule": "allow_pick_up", "opinion": { "trust": 5, "value": 5, "anger": -5, "fear": -5 } }
+ },
+ "responses": [
+ { "text": "I want to give you some commands for combat.", "topic": "TALK_COMBAT_COMMANDS" },
+ { "text": "I want to set some miscellaneous rules.", "topic": "TALK_MISC_RULES_MAID" },
+ {
+ "text": "I'd like to know a bit more about your abilities.",
+ "topic": "TALK_MAID_ALLY",
+ "effect": "reveal_stats"
+ },
+ { "text": "There's something I want you to do.", "topic": "TALK_MAID_ORDERS" },
+ { "text": "I just wanted to talk for a bit.", "topic": "TALK_MAID_SOCIAL" },
+ { "text": "I'm going to go my own way for a while.", "topic": "TALK_LEAVE" },
+ { "text": "Let's go.", "topic": "TALK_DONE" }
+ ]
+ },
+ {
+ "id": [ "TALK_MAID_SOCIAL" ],
+ "type": "talk_topic",
+ "dynamic_line": {
+ "is_by_radio": " *tshk* Whatever you desire, Mistress. Though perhaps we should meet up first?",
+ "no": "Is there something you need help with, Mistress?"
+ },
+ "responses": [
+ {
+ "text": "Mind if we just chat for a bit about your history?",
+ "topic": "TALK_MAID_CONVERSATION",
+ "condition": {
+ "and": [ "at_safe_space", { "or": [ { "npc_has_trait_flag": "BG_SURVIVAL_STORY" }, { "npc_has_trait": "NPC_STATIC_NPC" } ] } ]
+ },
+ "//": "If the NPC already has a BG story, or started out as a static NPC (and so probably doesn't need a random bg story), then go on.",
+ "switch": true
+ },
+ {
+ "text": "Mind if we just chat for a bit about your history?",
+ "topic": "TALK_MAID_CONVERSATION",
+ "condition": "at_safe_space",
+ "switch": true,
+ "effect": { "npc_add_trait": "BGSS_Confused_1" },
+ "//": "If the NPC doesn't have a BG survival story flagged trait, and didn't start the game as a static NPC, give them a BG story.",
+ "//2": "This is a stand-in for some kind of better system to add a random trait."
+ },
+ {
+ "text": "Mind if we just chat for a bit about your history?",
+ "topic": "TALK_CONVERSATION_DANGER_MAID",
+ "condition": { "not": "at_safe_space" },
+ "switch": true
+ },
+ {
+ "text": "Mind if we just chat for a bit about your history?",
+ "topic": "TALK_MAID_CONVERSATION",
+ "condition": { "not": "is_by_radio" },
+ "switch": true
+ },
+ {
+ "text": "Let's just chitchat for a while, I could use some relaxation.",
+ "topic": "TALK_FRIEND_CHAT",
+ "condition": { "not": { "or": [ { "npc_has_effect": "asked_to_socialize" }, { "npc_has_trait": "THRESH_SHOGGOTH" } ] } }
+ },
+ {
+ "text": "Let's just chitchat for a while, I could use some relaxation.",
+ "topic": "TALK_SHOGGOTH_CHAT",
+ "condition": { "not": { "or": [ { "npc_has_effect": "asked_to_socialize" }, { "not": { "npc_has_trait": "THRESH_SHOGGOTH" } } ] } }
+ },
+ { "text": "Can I do anything for you?", "topic": "TALK_MISSION_LIST" },
+ {
+ "text": "I don't want to ever be apart from you.",
+ "topic": "TALK_SHOGGOTH_HEART",
+ "condition": { "npc_has_trait": "THRESH_SHOGGOTH" }
+ },
+ { "text": "I changed my mind, wanted to ask you something else.", "topic": "TALK_MAID_ALLY" },
+ { "text": "Let's go.", "topic": "TALK_DONE" }
+ ]
+ },
+ {
+ "id": "TALK_SHOGGOTH_HEART",
+ "type": "talk_topic",
+ "dynamic_line": "Oh Mistress...♪ I feel the same way! But you know, there is a way we can be together forever, no matter how cold or cruel this world is...",
+ "responses": [ { "text": "Tell me more.", "topic": "TALK_SHOGGOTH_HEART2" } ]
+ },
+ {
+ "id": "TALK_SHOGGOTH_HEART2",
+ "type": "talk_topic",
+ "dynamic_line": "Take my heart and eat it. Ah, don't worry♪ I won't die. My strength will become our strength, and nobody will be able to separate us then!",
+ "responses": [
+ { "text": "This...let's do it. Now.", "topic": "TALK_SHOGGOTH_HEART3" },
+ { "text": "You know what? Never mind.", "topic": "TALK_DONE" }
+ ]
+ },
+ {
+ "id": "TALK_SHOGGOTH_HEART3",
+ "type": "talk_topic",
+ "dynamic_line": "For my beloved Mistress, I would do anything! Oh, if you ever change your mind, just put my heart back in the flask - I'll be back in no time!",
+ "speaker_effect": { "effect": [ { "u_buy_item": "meat_shoggoth", "count": 2 }, "npc_die" ] },
+ "responses": [ { "text": "...", "topic": "TALK_DONE" } ]
+ },
+ {
+ "id": [ "TALK_MAID_ORDERS" ],
+ "type": "talk_topic",
+ "dynamic_line": [ "As you command, my Mistress.", "Do you have orders for me?", "How can I serve you?", "Just say the word." ],
+ "responses": [
+ {
+ "text": "Can you teach me anything?",
+ "condition": { "not": "is_by_radio" },
+ "trial": {
+ "type": "CONDITION",
+ "condition": {
+ "or": [
+ { "npc_need": "thirst", "amount": 80 },
+ { "npc_need": "hunger", "amount": 160 },
+ { "npc_need": "fatigue", "level": "TIRED" },
+ { "npc_has_effect": "asked_to_train" },
+ "u_driving",
+ "npc_driving"
+ ]
+ }
+ },
+ "success": { "topic": "TALK_DENY_TRAIN" },
+ "failure": { "topic": "TALK_TRAIN_PERSUADE_MAID" }
+ },
+ {
+ "text": "Let's trade items.",
+ "condition": { "not": { "or": [ "is_by_radio", { "npc_has_trait": "MAID_RESTRICT" } ] } },
+ "topic": "TALK_MAID_ALLY",
+ "effect": "start_trade",
+ "switch": true,
+ "default": true
+ },
+ {
+ "text": "Let's trade items",
+ "topic": "TRADE_HALLU",
+ "condition": { "npc_has_trait": "HALLUCINATION" },
+ "switch": true,
+ "default": false
+ },
+ {
+ "text": "I want you to use this item.",
+ "condition": { "not": { "or": [ "is_by_radio", { "npc_has_trait": "MAID_RESTRICT" } ] } },
+ "topic": "TALK_MAID_ALLY",
+ "effect": "npc_gets_item_to_use"
+ },
+ {
+ "text": "Hold on to this item.",
+ "condition": { "not": { "or": [ "is_by_radio", { "npc_has_trait": "MAID_RESTRICT" } ] } },
+ "topic": "TALK_MAID_ALLY",
+ "effect": "npc_gets_item"
+ },
+ {
+ "text": "Guard this position.",
+ "condition": { "not": "is_by_radio" },
+ "topic": "TALK_MAID_GUARD",
+ "effect": "assign_guard"
+ },
+ {
+ "text": "I want to assign you to work at this camp.",
+ "condition": { "npc_at_om_location": "FACTION_CAMP_ANY" },
+ "topic": "TALK_MAID_GUARD",
+ "effect": "assign_camp"
+ },
+ {
+ "text": "Find a horse and mount up!",
+ "condition": { "not": "npc_is_riding" },
+ "topic": "TALK_DONE",
+ "effect": "find_mount"
+ },
+ {
+ "text": "Get off your mount, please.",
+ "condition": "npc_is_riding",
+ "topic": "TALK_DONE",
+ "effect": "dismount"
+ },
+ {
+ "text": "Please go to this location.",
+ "topic": "TALK_GOTO_LOCATION",
+ "condition": { "or": [ "is_by_radio", "u_has_camp" ] },
+ "effect": "goto_location"
+ },
+ {
+ "text": "I want you to build a camp here.",
+ "topic": "TALK_HALLU_CAMP",
+ "condition": { "npc_has_trait": "HALLUCINATION" },
+ "switch": true
+ },
+ {
+ "text": "I want you to build a camp here.",
+ "topic": "TALK_DONE",
+ "effect": "start_camp",
+ "condition": { "npc_at_om_location": "FACTION_CAMP_START" },
+ "switch": true,
+ "default": true
+ },
+ {
+ "text": "Since we can't build a camp here, I want you to tell me where can we build a camp?",
+ "topic": "TALK_CAMP_SITES",
+ "condition": { "not": { "npc_at_om_location": "FACTION_CAMP_START" } },
+ "switch": true,
+ "default": true
+ },
+ {
+ "text": "We need to abandon this camp.",
+ "condition": { "npc_at_om_location": "FACTION_CAMP_ANY" },
+ "topic": "TALK_DONE",
+ "effect": "abandon_camp"
+ },
+ {
+ "text": "Show me what needs to be done at the camp.",
+ "topic": "TALK_DONE",
+ "effect": "basecamp_mission",
+ "condition": { "npc_at_om_location": "FACTION_CAMP_ANY" }
+ },
+ { "text": "Let's talk about your current activity.", "topic": "TALK_ACTIVITIES" },
+ { "text": "Let's go.", "topic": "TALK_DONE" }
+ ]
+ },
+ {
+ "id": "TALK_MAID_GUARD",
+ "type": "talk_topic",
+ "dynamic_line": "With my life, Mistress!",
+ "responses": [
+ { "text": "I need you to come with me.", "topic": "TALK_MAID_ALLY", "effect": "stop_guard" },
+ { "text": "See you around.", "topic": "TALK_DONE" }
+ ]
+ },
+ {
+ "id": "TALK_TRAIN_PERSUADE_MAID",
+ "type": "talk_topic",
+ "dynamic_line": "But Mistress...you can just leave everything to me!",
+ "responses": [
+ {
+ "text": "Come on, we're friends.",
+ "trial": { "type": "PERSUADE", "difficulty": 0, "mod": [ [ "TRUST", 6 ], [ "VALUE", 2 ], [ "ANGER", -6 ] ] },
+ "success": { "topic": "TALK_TRAIN" },
+ "failure": { "topic": "TALK_DENY_PERSONAL", "effect": { "npc_add_effect": "asked_to_train", "duration": 3600 } }
+ },
+ { "text": "Forget it, let's get going.", "topic": "TALK_DONE" }
+ ]
+ },
+ {
+ "id": "TALK_CONVERSATION_DANGER_MAID",
+ "type": "talk_topic",
+ "dynamic_line": "Are you sure? This doesn't seem like a particularly safe place for small talk…",
+ "responses": [
+ { "text": "It's fine, we've got a moment.", "topic": "TALK_MAID_CONVERSATION" },
+ { "text": "You're right. Forget I said anything, let's get moving.", "topic": "TALK_DONE" }
+ ]
+ },
+ {
+ "id": "TALK_MAID_CONVERSATION",
+ "type": "talk_topic",
+ "dynamic_line": "My history? You mean before I served you? ...I'm sorry, but...",
+ "responses": [ { "text": "Actually, never mind.", "topic": "TALK_DONE" } ]
+ },
+ {
+ "id": "TALK_SHOGGOTH_CHAT",
+ "type": "talk_topic",
+ "dynamic_line": "<shoggoth_chat>",
+ "responses": [
+ {
+ "text": "<chitchat_player_responses>",
+ "topic": "TALK_DONE",
+ "switch": true,
+ "effect": [ "morale_chat_activity", { "npc_add_effect": "asked_to_socialize", "duration": 7000 } ]
+ }
+ ]
+ },
+ {
+ "id": "TALK_MISC_RULES_MAID",
+ "type": "talk_topic",
+ "dynamic_line": {
+ "and": [
+ {
+ "and": [
+ { "npc_override": "allow_pick_up", "yes": "OVERRIDE: " },
+ {
+ "npc_rule": "allow_pick_up",
+ "yes": { "has_pickup_list": "<ally_rule_allow_pick_up_true_list_text>", "no": "<ally_rule_allow_pick_up_true_text>" },
+ "no": "<ally_rule_allow_pick_up_false_text>"
+ }
+ ]
+ },
+ {
+ "and": [
+ { "npc_override": "allow_bash", "yes": " OVERRIDE: ", "no": " " },
+ {
+ "npc_rule": "allow_bash",
+ "yes": "<ally_rule_allow_bash_true_text>",
+ "no": "<ally_rule_allow_bash_false_text>"
+ }
+ ]
+ },
+ {
+ "and": [
+ { "npc_override": "allow_sleep", "yes": " OVERRIDE: ", "no": " " },
+ {
+ "npc_rule": "allow_sleep",
+ "yes": "<ally_rule_allow_sleep_true_text>",
+ "no": "<ally_rule_allow_sleep_false_text>"
+ }
+ ]
+ },
+ {
+ "and": [
+ { "npc_override": "allow_complain", "yes": " OVERRIDE: ", "no": " " },
+ {
+ "npc_rule": "allow_complain",
+ "yes": "<ally_rule_allow_complain_true_text>",
+ "no": "<ally_rule_allow_complain_false_text>"
+ }
+ ]
+ },
+ {
+ "and": [
+ { "npc_override": "allow_pulp", "yes": " OVERRIDE: ", "no": " " },
+ {
+ "npc_rule": "allow_pulp",
+ "yes": "<ally_rule_allow_pulp_true_text>",
+ "no": "<ally_rule_allow_pulp_false_text>"
+ }
+ ]
+ },
+ {
+ "and": [
+ { "npc_override": "close_doors", "yes": " OVERRIDE: ", "no": " " },
+ {
+ "npc_rule": "close_doors",
+ "yes": "<ally_rule_close_doors_true_text>",
+ "no": "<ally_rule_close_doors_false_text>"
+ }
+ ]
+ },
+ {
+ "and": [
+ { "npc_override": "ignore_noise", "yes": " OVERRIDE: ", "no": " " },
+ {
+ "npc_rule": "ignore_noise",
+ "yes": "<ally_rule_ignore_noise_true_text>",
+ "no": "<ally_rule_ignore_noise_false_text>"
+ }
+ ]
+ },
+ {
+ "and": [
+ { "npc_override": "avoid_doors", "yes": " OVERRIDE: ", "no": " " },
+ {
+ "npc_rule": "avoid_doors",
+ "yes": "<ally_rule_avoid_doors_true_text>",
+ "no": "<ally_rule_avoid_doors_false_text>"
+ }
+ ]
+ },
+ {
+ "and": [
+ { "npc_override": "forbid_engage", "yes": " OVERRIDE: ", "no": " " },
+ {
+ "npc_rule": "forbid_engage",
+ "yes": "<ally_rule_forbid_engage_true_text>",
+ "no": "<ally_rule_forbid_engage_false_text>"
+ }
+ ]
+ }
+ ]
+ },
+ "responses": [
+ {
+ "truefalsetext": { "condition": { "npc_rule": "allow_pick_up" }, "true": "Don't pick up items.", "false": "You can pick up items now." },
+ "topic": "TALK_MISC_RULES_MAID",
+ "condition": { "not": { "npc_has_trait": "MAID_RESTRICT" } },
+ "effect": { "toggle_npc_rule": "allow_pick_up" }
+ },
+ {
+ "truefalsetext": { "condition": { "npc_rule": "allow_bash" }, "true": "Don't bash obstacles.", "false": "You can bash obstacles." },
+ "topic": "TALK_MISC_RULES_MAID",
+ "effect": { "toggle_npc_rule": "allow_bash" }
+ },
+ {
+ "truefalsetext": { "condition": { "npc_rule": "allow_sleep" }, "true": "Stay awake.", "false": "Sleep when you feel tired." },
+ "topic": "TALK_MISC_RULES_MAID",
+ "effect": { "toggle_npc_rule": "allow_sleep" }
+ },
+ {
+ "truefalsetext": { "condition": { "npc_rule": "allow_complain" }, "true": "Stay quiet.", "false": "Tell me when you need something." },
+ "topic": "TALK_MISC_RULES_MAID",
+ "effect": { "toggle_npc_rule": "allow_complain" }
+ },
+ {
+ "truefalsetext": { "condition": { "npc_rule": "allow_pulp" }, "true": "Leave corpses alone.", "false": "Smash zombie corpses." },
+ "topic": "TALK_MISC_RULES_MAID",
+ "effect": { "toggle_npc_rule": "allow_pulp" }
+ },
+ {
+ "truefalsetext": { "condition": { "npc_rule": "close_doors" }, "true": "Leave doors open.", "false": "Close the doors." },
+ "topic": "TALK_MISC_RULES_MAID",
+ "effect": { "toggle_npc_rule": "close_doors" }
+ },
+ {
+ "truefalsetext": {
+ "condition": { "npc_rule": "avoid_doors" },
+ "true": "Open doors to get where you're going.",
+ "false": "Don't walk through closed doors."
+ },
+ "topic": "TALK_MISC_RULES_MAID",
+ "effect": { "toggle_npc_rule": "avoid_doors" }
+ },
+ {
+ "truefalsetext": {
+ "condition": { "npc_rule": "ignore_noise" },
+ "true": "If you hear a noise but can't see the source, move to investigate it.",
+ "false": "Don't investigate noises that you can't see."
+ },
+ "topic": "TALK_MISC_RULES_MAID",
+ "effect": { "toggle_npc_rule": "ignore_noise" }
+ },
+ {
+ "text": "Set up pickup rules.",
+ "topic": "TALK_MISC_RULES_MAID",
+ "condition": { "not": { "npc_has_trait": "MAID_RESTRICT" } },
+ "effect": "set_npc_pickup"
+ },
+ { "text": "Clear all overrides.", "topic": "TALK_MISC_RULES_MAID", "effect": "clear_overrides" },
+ { "text": "Never mind.", "topic": "TALK_DONE" }
+ ]
+ }
+]
diff --git a/npcs/classes.json b/npcs/classes.json
new file mode 100644
index 0000000..f5a900e
--- /dev/null
+++ b/npcs/classes.json
@@ -0,0 +1,34 @@
+[
+ {
+ "type": "npc_class",
+ "id": "NC_SHOGGOTH_MAID",
+ "name": { "str": "shoggoth maid" },
+ "job_description": "I'm your loyal slave, master!",
+ "common": false,
+ "bonus_str": { "rng": [ 4, 4 ] },
+ "bonus_dex": { "rng": [ 2, 2 ] },
+ "bonus_int": { "rng": [ -2, -2 ] },
+ "skills": [ { "skill": "melee", "bonus": { "rng": [ 5, 7 ] } }, { "skill": "unarmed", "bonus": { "rng": [ 5, 7 ] } } ],
+ "traits": [
+ [ "MUT_TOUGH3", 100 ],
+ [ "SHOGGOTH_BUFF_OK", 100 ],
+ [ "SHUFFLING_HORROR", 100 ],
+ [ "AMORPHOUS", 100 ],
+ [ "PER_SLIME_OK", 100 ],
+ [ "HUNGER", 100 ],
+ [ "THRESH_SHOGGOTH", 100 ],
+ [ "SHOGGOTH_BODY_NPC", 100 ],
+ [ "NOPAIN", 100 ],
+ [ "INFIMMUNE", 100 ],
+ [ "hair_black_long", 50 ],
+ [ "hair_red_long", 25 ],
+ [ "hair_blond_long", 25 ],
+ [ "hair_brown_long", 25 ],
+ [ "MAID_RESTRICT", 100 ],
+ [ "PRETTY", 100 ]
+ ],
+ "worn_override": "NC_SHOGGOTH_MAID_worn",
+ "carry_override": "naked_prisoner",
+ "weapon_override": "naked_prisoner"
+ }
+]
diff --git a/npcs/npcs.json b/npcs/npcs.json
new file mode 100644
index 0000000..19962a9
--- /dev/null
+++ b/npcs/npcs.json
@@ -0,0 +1,13 @@
+[
+ {
+ "type": "npc",
+ "id": "shoggoth_maid",
+ "name_suffix": "Shoggoth Maid",
+ "class": "NC_SHOGGOTH_MAID",
+ "gender": "female",
+ "attitude": 3,
+ "mission": 0,
+ "chat": "TALK_MAID_ALLY",
+ "faction": "no_faction"
+ }
+]
diff --git a/talk_tags.json b/talk_tags.json
new file mode 100644
index 0000000..6fee2d6
--- /dev/null
+++ b/talk_tags.json
@@ -0,0 +1,43 @@
+[
+ {
+ "type": "snippet",
+ "category": "<shoggoth_chat>",
+ "text": [
+ "\"We'll have a lot of fun when you feel better!\"",
+ "\"Mistress! A-ah, my Mistress's thing... Kya!\"",
+ "\"I am a maid♪ Your maid♪ Cleaning, washing, cooking... why didn't you let me continue?\"",
+ "\"I will continue talking as much as Mistress desires! I will continue talking even if you don't want me to!\"",
+ "\"We'll have as much fun as Mistress wants♪\"",
+ "\"Mistress! Mistress! Are you going to play with the me?\"",
+ "\"This feeling of Mistress having me is becoming addictive...♪\"",
+ "\"This uniform is the most suitable for service work! How is it?\"",
+ "\"Blobs, Triffids, Mycus... they are too diffcult for humans to counter.\"",
+ "\"Please allow me to give many things their death.\"",
+ "\"Mistress Mistress Mistress Mistress Mistress Mistress Mistress Mistress Mistress Mistress Mistress Mistress Mistress Mistress Mistress Mistress Mistress Mistress Mistress Mistress Mistress Mistress Mistress Mistress Mistress Mistress Mistress Mistress Mistress Mistress Mistress...\"",
+ "\"Don't worry, I'm not wearing anything under♪\"",
+ "\"The future may be dark, but I have my Mistress by my side. So, please... please... don't leave me alone.\"",
+ "\"Those who try to take my Mistress away will turn into minchi!♪\"",
+ "\"Mistress, are you a lolicon? Or do you like big breasts? If you tell me, I can become more to your liking!♪\"",
+ "\"I dream about us a lot!\"",
+ "\"Please let me know if you need a bath. I can wrap you up in my body and clean everything from sweat to dirt and make you smell good♪\"",
+ "\"You've worked really hard! As a reward, I will take you out on a date...\"",
+ "\"Is it okay for me to die? Yeah, right!♪ Ah, I will fully recover even from the most mortal wounds. That's why you don't have to be worried about me, Mistress♪\"",
+ "\"Is it okay to love a maid? Ah, I don't mind at all! I will always be by my Mistress's side♪\"",
+ "\"When I first met Mistress, I thought, I wonder if this is love at first sight? What?\"",
+ "\"Hello, Mistress♪\"",
+ "\"I am a slave to my Mistress's love♪\"",
+ "\"I'm sorry, Mistress, but... I want to lick it♪\"",
+ "\"Mistress, cheating is not okay. Just me, alright?\"",
+ "\"I like that I can talk to my Mistress, to be able to walk hand in hand with my Mistress, and to give my body for my Mistress to... nevermind!\"",
+ "\"Do you want to lay your head on my lap? It would make me comfortable, too♪\"",
+ "\"Please use me! Why don't you want to use me? Please use me! Use me!\"",
+ "\"Mistress! Do you want to hold hands?\"",
+ "\"It's okay if Mistress tied me up! That way I can't get away... Ufufu...\"",
+ "\"No matter the weather, my heart beats on if I'm with my Mistress♪\"",
+ "\"Please use me as a shield in an emergency. I want to be useful and not be like the other maids.\"",
+ "\"I will do my best!\"",
+ "\"Mistress's smell... it's intoxicating... haa, Mistress...♪\"",
+ "\"It's okay if you touch me more♪\""
+ ]
+ }
+]
diff --git a/techniques.json b/techniques.json
index ed4e989..9398179 100644
--- a/techniques.json
+++ b/techniques.json
@@ -2,82 +2,87 @@
{
"type": "technique",
"id": "tec_maid_precise",
- "name": "Assassination",
- "min_melee": 3,
- "unarmed_allowed": true,
+ "name": "Coup de Grâce",
+ "skill_requirements": [ { "name": "melee", "level": 5 } ],
+ "weighting": 4,
"melee_allowed": true,
- "crit_tec": true,
- "messages": [ "You strike %s from the shadows", "<npcname> strikes %s from the shadows" ],
- "stun_dur": 2,
+ "crit_ok": true,
+ "downed_target": true,
+ "req_buffs": [ "maid_pause_bonus" ],
+ "messages": [ "You strike %s with an elegant coup de grâce", "<npcname> strikes %s in one elegant motion" ],
"mult_bonuses": [
- [ "damage", "bash", 1.2 ],
- [ "damage", "cut", 1.2 ],
- [ "damage", "stab", 1.2 ]
+ { "stat": "movecost", "scale": 1.5 },
+ { "stat": "damage", "type": "bash", "scale": 2.0 },
+ { "stat": "damage", "type": "cut", "scale": 2.0 },
+ { "stat": "damage", "type": "stab", "scale": 2.0 }
]
},
{
"type": "technique",
"id": "tec_maid_counter",
- "name": "Abandonment",
- "min_unarmed": 5,
- "dodge_counter": true,
- "unarmed_allowed": true,
- "stun_dur": 1,
- "messages": [ "You cancelled the strike from %s", "<npcname> cancles the strike from %s" ],
- "mult_bonuses": [ [ "movecost", 0.0 ] ],
- "flat_bonuses": [ [ "movecost", 33 ] ]
+ "name": "Desperate Counter",
+ "skill_requirements": [ { "name": "melee", "level": 1 } ],
+ "block_counter": true,
+ "melee_allowed": true,
+ "knockback_dist": 1,
+ "messages": [ "You block %s's attack and shove them back. Back!", "<npcname> struggles and forces %s back" ],
+ "mult_bonuses": [
+ { "stat": "movecost", "scale": 0.0 },
+ { "stat": "damage", "type": "bash", "scale": 0.25 },
+ { "stat": "damage", "type": "cut", "scale": 0.25 },
+ { "stat": "damage", "type": "stab", "scale": 0.25 }
+ ],
+ "flat_bonuses": [ { "stat": "movecost", "scale": 50 } ]
},
{
"type": "technique",
"id": "tec_maid_meleecounter",
- "name": "Removal",
- "min_melee": 5,
+ "name": "Spurn",
+ "skill_requirements": [ { "name": "melee", "level": 5 } ],
+ "req_buffs": [ "maid_pause_bonus" ],
"dodge_counter": true,
- "block_counter": true,
"melee_allowed": true,
"down_dur": 1,
- "knockback_dist": 1,
- "aoe": "spin",
- "messages": [
- "You dodged the strike and hit %s and everything around it",
- "<npcname> dodges the strike from %s and hits everything around it"
- ],
- "mult_bonuses": [ [ "movecost", 0.0 ] ],
- "flat_bonuses": [ [ "movecost", 50 ] ]
+ "messages": [ "You whirl away and strike %s", "<npcname> strikes with a malice that surprises you" ],
+ "mult_bonuses": [ { "stat": "movecost", "scale": 0.0 } ],
+ "flat_bonuses": [ { "stat": "movecost", "scale": 50 } ]
},
{
"type": "technique",
"id": "tec_maid_miyage",
- "name": "Maid's Offering",
- "min_melee": 6,
+ "name": "Measured Strike",
+ "skill_requirements": [ { "name": "melee", "level": 3 } ],
"melee_allowed": true,
- "req_buffs": [ "maid_evaded_bonus" ],
- "crit_tec": true,
- "down_dur": 1,
- "knockback_dist": 1,
- "messages": [ "%s receives the offering of pain", "<npcname> offers %s pain" ],
- "mult_bonuses": [
- [ "damage", "bash", 2.5 ],
- [ "damage", "cut", 2.5 ],
- [ "damage", "stab", 2.5 ]
- ]
+ "req_buffs": [ "maid_pause_bonus" ],
+ "stun_dur": 1,
+ "messages": [ "Your carefully placed strike sunders %s's guard", "<npcname> lands a measured strike on %s" ],
+ "mult_bonuses": [ { "stat": "damage", "type": "bash", "scale": 1.33 }, { "stat": "damage", "type": "cut", "scale": 1.33 } ]
},
{
"type": "technique",
"id": "tec_maid_kyusyu",
- "name": "Assault",
- "min_unarmed": 6,
- "unarmed_allowed": true,
- "crit_tec": true,
- "req_buffs": [ "maid_moved" ],
- "down_dur": 3,
- "knockback_dist": 2,
- "messages": [ "You assault %s", "<npcname> assaults %s" ],
- "flat_bonuses": [ [ "arpen", "bash", 5 ] ],
- "mult_bonuses": [
- [ "damage", "bash", 1.75 ],
- [ "damage", "cut", 1.75 ],
- [ "damage", "stab", 1.75 ]
- ]
+ "name": "Measured Assault",
+ "skill_requirements": [ { "name": "melee", "level": 3 } ],
+ "req_buffs": [ "maid_pause_bonus" ],
+ "down_dur": 2,
+ "melee_allowed": true,
+ "knockback_dist": 1,
+ "messages": [ "You assault %s with fury and dedication", "<npcname> assaults %s with fury and dedication" ],
+ "flat_bonuses": [
+ { "stat": "arpen", "type": "bash", "scale": 5 },
+ { "stat": "arpen", "type": "cut", "scale": 5 },
+ { "stat": "arpen", "type": "stab", "scale": 5 }
+ ],
+ "mult_bonuses": [ { "stat": "damage", "type": "bash", "scale": 1.66 }, { "stat": "damage", "type": "cut", "scale": 1.66 } ]
+ },
+ {
+ "type": "technique",
+ "id": "tec_maid_grab",
+ "name": "Anti-Molestation Technique No.15",
+ "messages": [ "You dodge %s's groping lunge. Only mistress can touch that!", "The %s tries to grab <npcname>, but they slip away!" ],
+ "skill_requirements": [ { "name": "melee", "level": 1 } ],
+ "melee_allowed": true,
+ "defensive": true,
+ "grab_break": true
}
]
diff --git a/tools.json b/tools.json
index eb3ed7d..aed5f31 100644
--- a/tools.json
+++ b/tools.json
@@ -1,16 +1,18 @@
[
{
- "type": "GENERIC",
+ "type": "COMESTIBLE",
+ "comestible_type": "MED",
"id": "meat_shoggoth",
- "name": { "str": "shoggoth meat", "str_pl": "shoggoth meats" },
- "description": "A piece of meat left behind by a shoggoth. It sometimes twitches around, but it doesn't seem hostile.",
+ "name": { "str": "shoggoth heart", "str_pl": "shoggoth meats" },
+ "description": "The heart of a shoggoth. You could eat it to master the beast's morphogenic prowess, or you could use it to 'master' the beast in another way.",
"weight": "1000 g",
"symbol": ")",
"color": "dark_gray",
- "price": 5000,
+ "price": "50 USD",
"material": [ "maid" ],
"volume": "250 ml",
- "category": "tools"
+ "category": "tools",
+ "use_action": { "type": "mutagen_iv", "mutation_category": "SHOGGOTH" }
},
{
"type": "GENERIC",
@@ -21,7 +23,7 @@
"weight": "1200 g",
"symbol": "M",
"color": "dark_gray",
- "price": 5000,
+ "price": "50 USD",
"material": [ "glass", "maid" ],
"volume": "250 ml",
"use_action": {
@@ -40,15 +42,15 @@
"symbol": "M",
"color": "dark_gray",
"name": { "str": "growing shoggoth maid" },
- "description": "The meat inside this flask glow with iridescent colors. It's lightly shivering.",
- "price": 60000,
+ "description": "The meat inside this flask glows with iridescent colors. It's lightly shivering.",
+ "price": "600 USD",
"material": [ "glass", "maid" ],
"weight": "1200 g",
"volume": "250 ml",
"use_action": {
- "type": "place_monster",
- "monster_id": "mon_shoggoth_maid",
- "friendly_msg": "The odd meat is released from its glass flask prison and begins to rapidly and violently expand, extending numerous disjointed tentacles in every direction. The tentacles intertwine with each other and transform into an organism, resembling a beautiful woman, not quite like the horrible nightmare creature it used to be. She suddenly speaks up: 'Finally, I am able to meet you like this! Thank you for helping me, mistress!'",
+ "type": "place_npc",
+ "npc_class_id": "shoggoth_maid",
+ "summon_msg": "The odd meat is released from its glass flask prison and begins to rapidly and violently expand, extending numerous disjointed tentacles in every direction. The tentacles intertwine with each other and transform into an organism, resembling a beautiful woman, not quite like the horrible nightmare creature it used to be. She suddenly speaks up: 'Finally, I am able to meet you like this! Thank you for helping me, mistress!'",
"place_randomly": true
}
},
@@ -61,7 +63,7 @@
"weight": "200 g",
"symbol": "m",
"color": "white",
- "price": 5000,
+ "price": "50 USD",
"material": [ "maid" ],
"volume": "250 ml",
"use_action": {
@@ -81,14 +83,14 @@
"color": "white",
"name": { "str": "Revitalized Cute Maid" },
"description": "'What's up? Why haven't you put me on the ground yet? Ah, you want me to stay tiny for a little while longer? Ehh... I suppose it can't be helped.'",
- "price": 60000,
+ "price": "600 USD",
"material": [ "maid" ],
"weight": "1200 g",
"volume": "250 ml",
"use_action": {
- "type": "place_monster",
- "monster_id": "mon_shoggoth_maid",
- "friendly_msg": "'Sorry I kept you waiting, Mistress! I will do my best to serve you and support you to the best of my abilities!'",
+ "type": "place_npc",
+ "npc_class_id": "shoggoth_maid",
+ "summon_msg": "'Sorry I kept you waiting, Mistress! I will do my best to serve you and support you to the best of my abilities!'",
"place_randomly": true
}
},
@@ -100,7 +102,7 @@
"color": "brown",
"name": { "str": "Mistress" },
"description": "A girl entrusted to you by the owner of the house you served at. There's a deep feeling of fear in your stomach as you embrace the cataclysm, but protecting this girl gives you purpose and makes you feel less alone.",
- "price": 60000,
+ "price": "600 USD",
"material": [ "flesh" ],
"weight": "1200 g",
"volume": "250 ml",
@@ -119,7 +121,7 @@
"color": "brown",
"name": { "str": "Mistress doll" },
"description": "This is a doll in the shape of your beloved Mistress. By keeping it close, you are comforted by thoughts of your Mistress.",
- "price": 5400,
+ "price": "54 USD",
"material": [ "cotton" ],
"weight": "300 g",
"volume": "500 ml"
@@ -132,7 +134,7 @@
"color": "white",
"name": { "str": "scroll (Summon Little Maid)" },
"description": "A set of scrolls and sacrifices used to summon a different kind of maid. Pour the sacrificial sugar in the middle of the magic circle and cast the correct spell.",
- "price": 60000,
+ "price": "600 USD",
"material": [ "paper" ],
"weight": "1200 g",
"volume": "250 ml",
@@ -152,7 +154,7 @@
"weight": "150 g",
"symbol": "m",
"color": "white",
- "price": 5000,
+ "price": "50 USD",
"material": [ "maid" ],
"volume": "250 ml",
"use_action": {
@@ -172,7 +174,7 @@
"color": "white",
"name": { "str": "Revitalized Little Maid" },
"description": "Your little maid seems to have made a complete recovery.",
- "price": 60000,
+ "price": "600 USD",
"material": [ "maid" ],
"weight": "1200 g",
"volume": "250 ml",
@@ -191,7 +193,7 @@
"color": "brown",
"name": { "str": "maid's cookware kit" },
"description": "A set of secret maid cookware.",
- "price": 2000,
+ "price": "20 USD",
"material": [ "steel" ],
"techniques": [ "BRUTAL", "WBLOCK_1" ],
"flags" : [ "CHOP", "DURABLE_MELEE", "ALLOWS_REMOTE_USE" ],