diff --git a/data/json/items/armor/cloaks.json b/data/json/items/armor/cloaks.json index f2abbf7edc2c9..d5b8ea01b145a 100644 --- a/data/json/items/armor/cloaks.json +++ b/data/json/items/armor/cloaks.json @@ -193,7 +193,7 @@ "looks_like": "optical_cloak", "type": "TOOL_ARMOR", "name": { "str": "FB51 optical cloak (on)", "str_pl": "FB51 optical cloaks (on)" }, - "description": "A plastic cloak embedded with cameras and LEDs that will render you fully invisible to normal vision when powered and worn. It is turned on, and continually draining power from an UPS. Use it to turn it off. ", + "description": "A plastic cloak embedded with cameras and LEDs that will render you fully invisible to normal vision when powered and worn. It is turned on, and continually draining power from an UPS. Use it to turn it off.", "flags": [ "USE_UPS", "OVERSIZE", "HOOD", "WATERPROOF", "OUTER", "VARSIZE", "ACTIVE_CLOAKING", "TRADER_AVOID" ], "power_draw": 20000000, "revert_to": "optical_cloak", diff --git a/data/json/items/book/cooking.json b/data/json/items/book/cooking.json index 0dea9a3b93685..1dd460a4e96e3 100644 --- a/data/json/items/book/cooking.json +++ b/data/json/items/book/cooking.json @@ -368,10 +368,7 @@ { "id": "distilling_cookbook", "type": "BOOK", - "name": { - "str": "Out of the Holler and into the Home: A guide to home distillation. ", - "str_pl": "copies of Out of the Holler" - }, + "name": { "str": "Out of the Holler and into the Home: A guide to home distillation", "str_pl": "copies of Out of the Holler" }, "description": "A book describing the history of at home distillation by liquor. Each chapter contains a complete recipe for its namesake.", "weight": "454 g", "volume": "619 ml", diff --git a/data/json/items/book/misc.json b/data/json/items/book/misc.json index 7b088e40b53d3..c992b90b8b71b 100644 --- a/data/json/items/book/misc.json +++ b/data/json/items/book/misc.json @@ -390,7 +390,7 @@ "id": "paperback_romance_grue", "type": "BOOK", "name": { "str": "Tall, Dark, and Gruesome", "str_pl": "copies of Tall, Dark, and Gruesome" }, - "description": "Fatima's obsession with the dead threatens to consume her when she falls in love with a restless ghost. In this provocative romp celebrated author Kea Dekker gently lifts the thin veil separating cold bodies from warm. ", + "description": "Fatima's obsession with the dead threatens to consume her when she falls in love with a restless ghost. In this provocative romp celebrated author Kea Dekker gently lifts the thin veil separating cold bodies from warm.", "copy-from": "paperback_romance_lnl" }, { diff --git a/data/json/items/book/misc_pulp.json b/data/json/items/book/misc_pulp.json index be19badcc1162..b3d554adba822 100644 --- a/data/json/items/book/misc_pulp.json +++ b/data/json/items/book/misc_pulp.json @@ -33,8 +33,10 @@ "id": "book_fict_soft_pulp_nogod", "type": "BOOK", "name": { "str": "No God From a Corpse", "str_pl": "copies of No God" }, - "description": "This is a weatherworn paperback written by some skirt named \"Lee Racket.\" It tells how rage and jealousy can turn a man, or a woman, into a monster. This story is hard-boiled enough to break a spoon.", - "//translator": "'Hard-boiled enough to break a spoon' means melodramatic, exaggerated, emotional but simple, and possessing a general lack of literary pretense. Weatherworn means damaged by age. Skirt means woman.", + "description": { + "str": "This is a weatherworn paperback written by some skirt named \"Lee Racket.\" It tells how rage and jealousy can turn a man, or a woman, into a monster. This story is hard-boiled enough to break a spoon.", + "//~": "'Hard-boiled enough to break a spoon' means melodramatic, exaggerated, emotional but simple, and possessing a general lack of literary pretense. Weatherworn means damaged by age. Skirt means woman." + }, "//isbn13": 9781627551144, "weight": "225 g", "volume": "408 ml", @@ -45,8 +47,10 @@ "id": "book_fict_soft_pulp_ddive", "type": "BOOK", "name": { "str": "The Deep Dive", "str_pl": "copies of Deep Dive" }, - "description": "This dimestore short story about space travel is written by a broad named \"Lee Racket.\"", - "//translator": "Broad is a dismissive and outdated term that simply means \"woman.\" The term is used because it evokes the (decidedly misogynistic) era in which the pulp genre gained popularity within the United States.", + "description": { + "str": "This dimestore short story about space travel is written by a broad named \"Lee Racket.\"", + "//~": "Broad is a dismissive and outdated term that simply means \"woman.\" The term is used because it evokes the (decidedly misogynistic) era in which the pulp genre gained popularity within the United States." + }, "//isbn13": 9781612420530, "//genre": "this is also scifi", "weight": "154 g", diff --git a/data/json/items/containers.json b/data/json/items/containers.json index 0d4279447e36d..390785bb7542e 100644 --- a/data/json/items/containers.json +++ b/data/json/items/containers.json @@ -1509,8 +1509,10 @@ "id": "wrapper_pr", "type": "GENERIC", "name": { "str": "wrapper" }, - "//desc": "Daizu is Japanese for soy, hence DaiZoom", - "description": "\"DaiZoom Protein Bar, brought to you by SoyPelusa\" is emblazoned proudly upon this greaseproof wrapper.", + "description": { + "//~": "Daizu is Japanese for soy, hence DaiZoom", + "str": "\"DaiZoom Protein Bar, brought to you by SoyPelusa\" is emblazoned proudly upon this greaseproof wrapper." + }, "copy-from": "wrapper", "pocket_data": [ { "pocket_type": "CONTAINER", "max_contains_volume": "225 ml", "max_contains_weight": "1 kg" } ] }, diff --git a/data/json/items/tool/explosives.json b/data/json/items/tool/explosives.json index bca9900191be9..1e6da141814c7 100644 --- a/data/json/items/tool/explosives.json +++ b/data/json/items/tool/explosives.json @@ -1380,7 +1380,7 @@ "category": "weapons", "name": { "str": "small bootleg frag device" }, "looks_like": "tool_black_powder_charge", - "description": "This is a home-made explosive device, consisting of a large plastic jug filled with military explosives and scrap metal, equipped with a delayed fuse. Use this item to pull the pin. Once you do it should explode in about 20 seconds. ", + "description": "This is a home-made explosive device, consisting of a large plastic jug filled with military explosives and scrap metal, equipped with a delayed fuse. Use this item to pull the pin. Once you do it should explode in about 20 seconds.", "weight": "6500 g", "volume": "4 L", "price": 20000, @@ -1429,7 +1429,7 @@ "category": "weapons", "name": { "str": "small improvised frag device" }, "looks_like": "tool_black_powder_charge", - "description": "This is a home-made explosive device, consisting of a large plastic jug filled with stable explosives and scrap metal, equipped with a long fuse. Use this item to light the fuse. Once you do it should explode in about 20 seconds. ", + "description": "This is a home-made explosive device, consisting of a large plastic jug filled with stable explosives and scrap metal, equipped with a long fuse. Use this item to light the fuse. Once you do it should explode in about 20 seconds.", "weight": "6500 g", "volume": "4 L", "price": 20000, @@ -1484,7 +1484,7 @@ "category": "weapons", "name": { "str": "small primitive frag device" }, "looks_like": "tool_black_powder_charge", - "description": "This is a home-made explosive device, consisting of a large plastic jug filled with volatile explosives and scrap metal, equipped with a long fuse. Use this item to light the fuse. Once you do it should explode in about 20 seconds. ", + "description": "This is a home-made explosive device, consisting of a large plastic jug filled with volatile explosives and scrap metal, equipped with a long fuse. Use this item to light the fuse. Once you do it should explode in about 20 seconds.", "weight": "6500 g", "volume": "4 L", "price": 20000, diff --git a/data/json/npcs/Backgrounds/gung_ho_3.json b/data/json/npcs/Backgrounds/gung_ho_3.json index 6305c477a68de..47b61d24f84e2 100644 --- a/data/json/npcs/Backgrounds/gung_ho_3.json +++ b/data/json/npcs/Backgrounds/gung_ho_3.json @@ -24,7 +24,7 @@ { "id": "BGSS_GUNG_HO_3_FEMA1", "type": "talk_topic", - "dynamic_line": "Lord no. I'll be fucked if I let a kid in a too-big uniform tell me what the hell to do. I had my Hummer loaded out and ready to go offroading, I had a ton of gas, and I even had as many rifles as the border was gonna let me bring over. I didn't know what I was supposed to be running from, but I sure as shit didn't run. ", + "dynamic_line": "Lord no. I'll be fucked if I let a kid in a too-big uniform tell me what the hell to do. I had my Hummer loaded out and ready to go offroading, I had a ton of gas, and I even had as many rifles as the border was gonna let me bring over. I didn't know what I was supposed to be running from, but I sure as shit didn't run.", "responses": [ { "text": "Where did you go then?", "topic": "BGSS_GUNG_HO_3_STORY2" }, { "text": "Tell me about your son.", "topic": "BGSS_GUNG_HO_3_SON1" }, diff --git a/data/json/npcs/Kindred/NPC_Brigitte_LaCroix.json b/data/json/npcs/Kindred/NPC_Brigitte_LaCroix.json index d82cbe387e3cd..b850b5c2c1737 100644 --- a/data/json/npcs/Kindred/NPC_Brigitte_LaCroix.json +++ b/data/json/npcs/Kindred/NPC_Brigitte_LaCroix.json @@ -399,7 +399,7 @@ { "id": "TALK_MISSION_OFFER_SEER", "type": "talk_topic", - "dynamic_line": "If you wish to be set on the path to enlightenment, first you must learn to listen and hear the song. Go out, butcher an untainted creature and feel the power between your fingertips. Then bring me the bones and I shall carve them for you. ", + "dynamic_line": "If you wish to be set on the path to enlightenment, first you must learn to listen and hear the song. Go out, butcher an untainted creature and feel the power between your fingertips. Then bring me the bones and I shall carve them for you.", "responses": [ { "text": "Well, I guess I oughta see where this goes. I'm in.", diff --git a/data/json/npcs/isherwood_farm/NPC_Barry_Isherwood.json b/data/json/npcs/isherwood_farm/NPC_Barry_Isherwood.json index e27ddee290dfa..727d776988e95 100644 --- a/data/json/npcs/isherwood_farm/NPC_Barry_Isherwood.json +++ b/data/json/npcs/isherwood_farm/NPC_Barry_Isherwood.json @@ -64,7 +64,7 @@ { "type": "talk_topic", "id": "TALK_ISHERWOOD_BARRY_TOWER", - "dynamic_line": [ "Yeah, I think we need to talk about it, but I'm not ready yet. Let me reclaim my life for a while. " ], + "dynamic_line": [ "Yeah, I think we need to talk about it, but I'm not ready yet. Let me reclaim my life for a while." ], "responses": [ { "text": "Sounds good, Barry.", "topic": "TALK_DONE" } ] }, { diff --git a/data/json/npcs/missiondef.json b/data/json/npcs/missiondef.json index 447a991801dd1..ac1809f7afd48 100644 --- a/data/json/npcs/missiondef.json +++ b/data/json/npcs/missiondef.json @@ -380,7 +380,7 @@ "dialogue": { "describe": "St. Michael the archangel defend me in battle…", "offer": "I have another task if you are feeling up to it. There is a prisoner that the priest made special mention of. I was wondering if you could see what may have happened to him or if he left anything in his cell. The priest admits the individual is rather unstable, to put it lightly, but the priest personally believed the man was some kind of repentant visionary. I'm not in a position to cast out the account just yet… it seems the man has prophesied events accurately before concerning the Church of Starry Wisdom.", - "accepted": "I wish you the best of luck, may whatever god you please guide your path… I can only imagine that the prison will be a little slice of hell. I'm not sure what they would have decided to do with the inmates when they knew death was almost certain. ", + "accepted": "I wish you the best of luck, may whatever god you please guide your path… I can only imagine that the prison will be a little slice of hell. I'm not sure what they would have decided to do with the inmates when they knew death was almost certain.", "rejected": "Ya, I guess the stress may just be getting to me…", "advice": "The worst case scenario will probably be that the prisoners have escaped their cells and turned the building into their own little fortress. Best case, the building went into lock-down and secured the prisoners in their cells. Either way, navigating the building will pose its own difficulties.", "inquire": "Any luck?", diff --git a/data/json/npcs/necropolis/NPC_Old_Guard_Captain.json b/data/json/npcs/necropolis/NPC_Old_Guard_Captain.json index 081b560483908..8fab9a6b54ea2 100644 --- a/data/json/npcs/necropolis/NPC_Old_Guard_Captain.json +++ b/data/json/npcs/necropolis/NPC_Old_Guard_Captain.json @@ -98,7 +98,7 @@ "origins": [ "ORIGIN_SECONDARY" ], "dialogue": { "describe": "We need help…", - "offer": "Your assistance is greatly appreciated, we need to clear out the more ruthless monsters that are wandering up from the lower levels. If you could cull twenty or so of what we refer to as 'nightmares' my men would be much safer. If you've cleared out most of this floor then the lower levels should be your next target. ", + "offer": "Your assistance is greatly appreciated, we need to clear out the more ruthless monsters that are wandering up from the lower levels. If you could cull twenty or so of what we refer to as 'nightmares' my men would be much safer. If you've cleared out most of this floor then the lower levels should be your next target.", "accepted": "Good luck, finding a clear passage to the second level may be tricky.", "rejected": "I don't know why you would bother wasting your time down here if you can't handle a few small tasks…", "advice": "These creatures can swing their appendages surprisingly far.", diff --git a/data/json/npcs/necropolis/NPC_Old_Guard_Commo.json b/data/json/npcs/necropolis/NPC_Old_Guard_Commo.json index d1fd1530083ae..cc3831fe4884e 100644 --- a/data/json/npcs/necropolis/NPC_Old_Guard_Commo.json +++ b/data/json/npcs/necropolis/NPC_Old_Guard_Commo.json @@ -113,7 +113,7 @@ "followup": "MISSION_OLD_GUARD_NEC_COMMO_3", "dialogue": { "describe": "We need help…", - "offer": "I guess I could use your skills once again. There are small transmitters located in the nearby evacuation shelters; if we don't separate them from the power grid their power systems will rapidly deteriorate over the next few weeks. The task is rather simple but the shelters offer us a place to redirect refugees until this vault can be secured. ", + "offer": "I guess I could use your skills once again. There are small transmitters located in the nearby evacuation shelters; if we don't separate them from the power grid their power systems will rapidly deteriorate over the next few weeks. The task is rather simple but the shelters offer us a place to redirect refugees until this vault can be secured.", "accepted": "Thanks, I should be ready for you to install the radio repeater mods by the time you get back.", "rejected": "I don't know why you would bother wasting your time down here if you can't handle a few small tasks…", "advice": "Try searching on the outskirts of towns.", diff --git a/data/json/npcs/robofac/NPC_ROBOFAC_MERC_1.json b/data/json/npcs/robofac/NPC_ROBOFAC_MERC_1.json index 77ec92aa4fc67..6b9cc59afab4b 100644 --- a/data/json/npcs/robofac/NPC_ROBOFAC_MERC_1.json +++ b/data/json/npcs/robofac/NPC_ROBOFAC_MERC_1.json @@ -197,7 +197,7 @@ { "id": "TALK_ROBOFAC_MERC_1_COINS", "type": "talk_topic", - "dynamic_line": "Have you noticed they pay us in tiny little gold coins, it's bizarre I say. One would think they have a gold mine in there, but no, they don't, so they make me cross the damned world grabbing gold bars. ", + "dynamic_line": "Have you noticed they pay us in tiny little gold coins, it's bizarre I say. One would think they have a gold mine in there, but no, they don't, so they make me cross the damned world grabbing gold bars.", "responses": [ { "text": "I guess I could help with that…", "topic": "TALK_ROBOFAC_MERC_1_GOLD_MISSION" }, { "text": "Now that you mention it, it does seem rather strange.", "topic": "TALK_ROBOFAC_MERC_1_MAIN" } diff --git a/data/json/npcs/tacoma_ranch/NPC_ranch_foreman.json b/data/json/npcs/tacoma_ranch/NPC_ranch_foreman.json index bf995c956e7ed..61644001a8c86 100644 --- a/data/json/npcs/tacoma_ranch/NPC_ranch_foreman.json +++ b/data/json/npcs/tacoma_ranch/NPC_ranch_foreman.json @@ -91,7 +91,7 @@ "followup": "MISSION_RANCH_FOREMAN_2", "dialogue": { "describe": "We need help…", - "offer": "Our first project is to enclose the barn so that new refugees have a safe place to sleep. Before we can begin serious improvements we need lumber to work with. Enclosing the four barn entrances will take nearly 400 2x4's… if you could provide half of that we should be able to take care of the other half and construction. If you don't have a truck, I'd make finding one your first priority. ", + "offer": "Our first project is to enclose the barn so that new refugees have a safe place to sleep. Before we can begin serious improvements we need lumber to work with. Enclosing the four barn entrances will take nearly 400 2x4's… if you could provide half of that we should be able to take care of the other half and construction. If you don't have a truck, I'd make finding one your first priority.", "accepted": "The more men we can bring to the camp the quicker improvements can be made.", "rejected": "Come back when you get a chance. We need skilled survivors.", "advice": "Avoid destroying the furniture, we'll be needing it.", @@ -269,7 +269,7 @@ "dialogue": { "describe": "We need help…", "offer": "I'm sure you've noticed the new workers that have started trickling in. The Free Merchant counsel is demanding that we immediately begin projects to become self-sufficient due to limited supplies. We are going to need to rapidly setup an agricultural industry before winter and starvation catches us unprepared and unsupported. In order to get a half dozen shovels and a couple of bags of seeds, we are going to have to trade for it. I've already got the deal lined up but the only thing they are willing to trade it for is salt. I negotiated them down from 500 units to 300… we were hoping you might have access to a source.", - "accepted": "Salt is key to preserving meat and other perishables… without any excess food it wouldn't do us much good now but I imagine we'll need to send you out to get more in the future. ", + "accepted": "Salt is key to preserving meat and other perishables… without any excess food it wouldn't do us much good now but I imagine we'll need to send you out to get more in the future.", "rejected": "Come back when you get a chance. We need skilled survivors.", "advice": "If you can find a source of salt water you should be able to boil it down.", "inquire": "Do you have the salt?", @@ -332,7 +332,7 @@ "followup": "MISSION_RANCH_FOREMAN_6", "dialogue": { "describe": "We need help…", - "offer": "Well, our first crop will be planted shortly but I'm starting to suspect that our profit margin is going to be much smaller than we expect. With limited seed for our original crop our next course of action is to increase the soil's fertility. Is there any way you could find or produce a basic liquid fertilizer for us? We'd need at least 30 units to make a significant improvement in our output. ", + "offer": "Well, our first crop will be planted shortly but I'm starting to suspect that our profit margin is going to be much smaller than we expect. With limited seed for our original crop our next course of action is to increase the soil's fertility. Is there any way you could find or produce a basic liquid fertilizer for us? We'd need at least 30 units to make a significant improvement in our output.", "accepted": "I don't know the exact recipe but I'm sure you could make it from a commercial fertilizer or produce it from bonemeal.", "rejected": "Come back when you get a chance. We need skilled survivors.", "advice": "I'd look through a few basic chemistry books to find a simple recipe.", @@ -377,7 +377,7 @@ "followup": "MISSION_RANCH_FOREMAN_7", "dialogue": { "describe": "We need help…", - "offer": "Our current assessment for survivability has increased significantly thanks to your efforts. The next priority issue is securing a cleaner water source. Drinking from the pond on the back end of the ranch has led to an outbreak of dysentery. As quickly as possible we need to improve the sanitary conditions in the camp. To do so the first step is to dig a well and construct stone fireplaces in the barn for the migrants to boil water. We are going to need at least 75 rocks from you if we hope to accomplish the task before we all get sick. After we have them installed you will have free access to them, guaranteed. ", + "offer": "Our current assessment for survivability has increased significantly thanks to your efforts. The next priority issue is securing a cleaner water source. Drinking from the pond on the back end of the ranch has led to an outbreak of dysentery. As quickly as possible we need to improve the sanitary conditions in the camp. To do so the first step is to dig a well and construct stone fireplaces in the barn for the migrants to boil water. We are going to need at least 75 rocks from you if we hope to accomplish the task before we all get sick. After we have them installed you will have free access to them, guaranteed.", "accepted": "If you take a shovel to a pile of rubble you should be able to pull out structural grade stone.", "rejected": "Come back when you get a chance. We need skilled survivors.", "advice": "Mining would always be an option if you had the resources.", @@ -475,7 +475,7 @@ "dialogue": { "describe": "We need help…", "offer": "With the well's completion we are rapidly closing the sustainability gap. In order to expand from here we will need massive quantities of lumber to construct fortifications and new buildings. We have already begun work on a manually operated sawmill but we will need two motors to control the actual blades. We were hoping you might be able to secure the motors for us.", - "accepted": "Power for the motors will be provided by a salvaged truck battery, you need not bring additional mechanical components. ", + "accepted": "Power for the motors will be provided by a salvaged truck battery, you need not bring additional mechanical components.", "rejected": "Come back when you get a chance. We need skilled survivors.", "advice": "Mining would always be an option if you had the resources.", "inquire": "Do you have the motors?", diff --git a/data/json/npcs/tacoma_ranch/NPC_ranch_scavenger.json b/data/json/npcs/tacoma_ranch/NPC_ranch_scavenger.json index d3ea627c516e5..85a5daea3435b 100644 --- a/data/json/npcs/tacoma_ranch/NPC_ranch_scavenger.json +++ b/data/json/npcs/tacoma_ranch/NPC_ranch_scavenger.json @@ -127,7 +127,7 @@ "followup": "MISSION_RANCH_SCAVENGER_4", "dialogue": { "describe": "We need help…", - "offer": "When outnumbered or forced to pull back my scavengers have been taught to throw Molotov cocktails to keep monsters from chasing them. We go through one or two on every mission so we can always use a few more. Would you be willing to make us a dozen? I'm willing to pay you what I can for your assistance. ", + "offer": "When outnumbered or forced to pull back my scavengers have been taught to throw Molotov cocktails to keep monsters from chasing them. We go through one or two on every mission so we can always use a few more. Would you be willing to make us a dozen? I'm willing to pay you what I can for your assistance.", "accepted": "I'm counting on you.", "rejected": "Come back when you get a chance. We need skilled survivors.", "advice": "Alcohol or lamp oil is probably easier to refine rather than find in large quantities.", diff --git a/data/json/overmap/overmap_land_use_codes.json b/data/json/overmap/overmap_land_use_codes.json index fca81250d761d..2e653fdd7adac 100644 --- a/data/json/overmap/overmap_land_use_codes.json +++ b/data/json/overmap/overmap_land_use_codes.json @@ -146,7 +146,7 @@ "id": "industrial", "land_use_code": 16, "name": "Industrial", - "detailed_definition": "Light and heavy industry, including buildings, equipment and parking areas. ", + "detailed_definition": "Light and heavy industry, including buildings, equipment and parking areas.", "sym": "#", "color": "white" }, diff --git a/data/json/professions.json b/data/json/professions.json index b5622b1f355d7..962f04476b5c2 100644 --- a/data/json/professions.json +++ b/data/json/professions.json @@ -3663,7 +3663,7 @@ "type": "profession", "id": "demolition_expert", "name": "Demolition Expert", - "description": "Before this all began, you were having the time of your life at your dream job: blowing stuff up. The Cataclysm means you're finally allowed to do it full time. ", + "description": "Before this all began, you were having the time of your life at your dream job: blowing stuff up. The Cataclysm means you're finally allowed to do it full time.", "skills": [ { "level": 2, "name": "fabrication" } ], "points": 3, "items": { diff --git a/data/mods/Aftershock/items/ammo.json b/data/mods/Aftershock/items/ammo.json index 2ff9d094ccfe0..5eefbf7a1cc36 100644 --- a/data/mods/Aftershock/items/ammo.json +++ b/data/mods/Aftershock/items/ammo.json @@ -7,7 +7,7 @@ "name": { "str": "acidic bore" }, "symbol": "=", "color": "red", - "description": "This wriggling nodule of resin and flesh appears to be secreting a pungent fluid. You'd probably best feed it into the bioblaster. ", + "description": "This wriggling nodule of resin and flesh appears to be secreting a pungent fluid. You'd probably best feed it into the bioblaster.", "material": [ "alien_resin" ], "volume": "250 ml", "weight": "1 g", diff --git a/data/mods/Aftershock/items/frankenstein_items.json b/data/mods/Aftershock/items/frankenstein_items.json index 5829f3a037897..3ce255a96c35e 100644 --- a/data/mods/Aftershock/items/frankenstein_items.json +++ b/data/mods/Aftershock/items/frankenstein_items.json @@ -3,7 +3,7 @@ "id": "inactive_frankenstein", "type": "TOOL", "name": "inactive frankenstein", - "description": "This stitched together abomination in human form lies still and waiting for you to give it the spark of life. In all likelihood you are the monster. ", + "description": "This stitched together abomination in human form lies still and waiting for you to give it the spark of life. In all likelihood you are the monster.", "weight": "68 kg", "volume": "62 L", "price": 600000, diff --git a/data/mods/Aftershock/mutations/mutations.json b/data/mods/Aftershock/mutations/mutations.json index b46957c49af10..404c33d75720a 100644 --- a/data/mods/Aftershock/mutations/mutations.json +++ b/data/mods/Aftershock/mutations/mutations.json @@ -216,7 +216,7 @@ "name": "Detachment", "points": 2, "flags": [ "PRED1" ], - "description": "When were you ever like these creatures, helpless before the changes ravaging this world. ", + "description": "When were you ever like these creatures, helpless before the changes ravaging this world.", "purifiable": false, "changes_to": [ "PRED2" ], "prereqs": [ "THRESH_YUGGOTH" ], @@ -254,7 +254,7 @@ "id": "MIGO_SCENT", "name": "Fetid scent", "points": 6, - "description": "Your sweat now smells otherworldly, and not in a good way. The mi-go still hate you but at least they aren't offended by your smell. ", + "description": "Your sweat now smells otherworldly, and not in a good way. The mi-go still hate you but at least they aren't offended by your smell.", "valid": false, "purifiable": false, "types": [ "LEGS" ], diff --git a/data/mods/Aftershock/npcs/milly_whately_dialogue.json b/data/mods/Aftershock/npcs/milly_whately_dialogue.json index 107d1c4f55810..ba65464a9a43e 100644 --- a/data/mods/Aftershock/npcs/milly_whately_dialogue.json +++ b/data/mods/Aftershock/npcs/milly_whately_dialogue.json @@ -179,7 +179,7 @@ "origins": [ "ORIGIN_SECONDARY" ], "followup": "MISSION_FIND_CYRUS", "dialogue": { - "describe": "Parts, parts, parts. Bring me some hearts. ", + "describe": "Parts, parts, parts. Bring me some hearts.", "offer": "The Whately's are known in these parts for gathering body parts. Ha! That's just rumors and hearsay. But I do need two humming hearts.", "accepted": "I have some relatives you should meet, if you don't mind hard work for the advancement of science.", "rejected": "Even I understand this is dangerous.", diff --git a/data/mods/CRT_EXPANSION/items/crt_armor.json b/data/mods/CRT_EXPANSION/items/crt_armor.json index 7f1fcc15296fb..ec2d30c4e2c5d 100644 --- a/data/mods/CRT_EXPANSION/items/crt_armor.json +++ b/data/mods/CRT_EXPANSION/items/crt_armor.json @@ -185,7 +185,7 @@ "type": "ARMOR", "category": "armor", "name": "CRIT Armored Anomaly Suit", - "description": "A relatively simple suit of armor. A suit of woven composite fibers combined with a cleansuit core and strategically placed segmented Kevlar plates keep the suit light-weight and the one wearing it alive while offering superb resistance to the elements and ambient radiation. ", + "description": "A relatively simple suit of armor. A suit of woven composite fibers combined with a cleansuit core and strategically placed segmented Kevlar plates keep the suit light-weight and the one wearing it alive while offering superb resistance to the elements and ambient radiation.", "weight": "11460 g", "volume": "11250 ml", "price": 900000000, diff --git a/data/mods/CRT_EXPANSION/items/crt_clothes.json b/data/mods/CRT_EXPANSION/items/crt_clothes.json index 2c004cd3ea9ed..8cc97601e9a26 100644 --- a/data/mods/CRT_EXPANSION/items/crt_clothes.json +++ b/data/mods/CRT_EXPANSION/items/crt_clothes.json @@ -74,7 +74,7 @@ "id": "crt_rec_gloves", "type": "ARMOR", "name": { "str": "pair of CRIT rec gloves", "str_pl": "pairs of CRIT rec gloves" }, - "description": "A pair of standard-issue rec gloves. Skin-hugging and sleek, these gloves are made with cotton with a neoprene lining for grip-pads and warmth. ", + "description": "A pair of standard-issue rec gloves. Skin-hugging and sleek, these gloves are made with cotton with a neoprene lining for grip-pads and warmth.", "weight": "558 g", "volume": "250 ml", "price": 100000, diff --git a/data/mods/Generic_Guns/firearms/rifle.json b/data/mods/Generic_Guns/firearms/rifle.json index bfb9f1f249876..08dc34b7fab72 100644 --- a/data/mods/Generic_Guns/firearms/rifle.json +++ b/data/mods/Generic_Guns/firearms/rifle.json @@ -39,7 +39,7 @@ "type": "GUN", "name": "sniper rifle", "ammo": [ "ammo_rifle" ], - "description": "Sniper rifles fill military, police and civilian needs for precise, accurate fire. Modern examples feature detachable magazines and various mounting interfaces for optics and supports. With care and practice, all should be quite capable of eliminating bipedal threats from very safe ranges. ", + "description": "Sniper rifles fill military, police and civilian needs for precise, accurate fire. Modern examples feature detachable magazines and various mounting interfaces for optics and supports. With care and practice, all should be quite capable of eliminating bipedal threats from very safe ranges.", "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", diff --git a/data/mods/Magiclysm/professions.json b/data/mods/Magiclysm/professions.json index 2915d19889487..6da96012102bb 100644 --- a/data/mods/Magiclysm/professions.json +++ b/data/mods/Magiclysm/professions.json @@ -243,7 +243,7 @@ "type": "profession", "id": "ranger", "name": "Introspectionist", - "description": "You segregated yourself from society because you wanted to concentrate on improving yourself. It was you and your best friend, but now the apocalypse won't leave you alone. ", + "description": "You segregated yourself from society because you wanted to concentrate on improving yourself. It was you and your best friend, but now the apocalypse won't leave you alone.", "spells": [ { "id": "magic_missile", "level": 4 } ], "points": 4, "skills": [ { "level": 2, "name": "survival" }, { "level": 1, "name": "firstaid" } ], diff --git a/data/mods/Magiclysm/traits/attunements.json b/data/mods/Magiclysm/traits/attunements.json index 596e5b73f6361..af8dcf3f2defa 100644 --- a/data/mods/Magiclysm/traits/attunements.json +++ b/data/mods/Magiclysm/traits/attunements.json @@ -656,7 +656,7 @@ "starting_trait": false, "purifiable": false, "valid": false, - "description": "Through the fine manipulation of light, an Illusionist might craft deceptively convincing and dangerous illusions. An Illusionist excels at avoiding direct confrontation, instead relying on decoys and traps to slip by undetected. ", + "description": "Through the fine manipulation of light, an Illusionist might craft deceptively convincing and dangerous illusions. An Illusionist excels at avoiding direct confrontation, instead relying on decoys and traps to slip by undetected.", "spells_learned": [ [ "spear_of_light", 5 ] ], "prereqs": [ "MAGUS", "TECHNOMANCER" ], "cancels": [ diff --git a/data/mods/National_Guard_Camp/military.json b/data/mods/National_Guard_Camp/military.json index 3161a47cd4278..4dc09ad18304c 100644 --- a/data/mods/National_Guard_Camp/military.json +++ b/data/mods/National_Guard_Camp/military.json @@ -44,7 +44,7 @@ "copy-from": "mon_w11b10", "type": "MONSTER", "name": "W11B10B4", - "description": "Wraitheon (11B) Infantry 20 Level (B4) Sniper. Part of Wraitheon's series of one-to-one auxiliaries designed to seamlessly integrate with more traditional forces. ", + "description": "Wraitheon (11B) Infantry 20 Level (B4) Sniper. Part of Wraitheon's series of one-to-one auxiliaries designed to seamlessly integrate with more traditional forces.", "color": "green", "vision_night": 10, "special_attacks": [ diff --git a/doc/TRANSLATING.md b/doc/TRANSLATING.md index 5803eaa09144a..7e09ccefbe113 100644 --- a/doc/TRANSLATING.md +++ b/doc/TRANSLATING.md @@ -302,57 +302,12 @@ of the entries does not matter): } ``` -Do note that currently the JSON syntax is only supported for some JSON values, -which are listed below. If you want other json strings to use this format, -refer to `translations.h|cpp` and migrate the corresponding code. Afterwards -you may also want to test `update_pot.sh` to ensure that the strings are -correctly extracted for translation, and run the unit test to fix text styling -issues reported by the `translation` class. - -| Supported JSON values -|--- -| Effect names -| Item action names -| Item category names -| Activity verbs -| Gate action messages -| Spell names and descriptions -| Terrain/furniture descriptions -| Monster melee attack messages -| Morale effect descriptions -| Mutation names/descriptions -| NPC class names/descriptions -| Tool quality names -| Score descriptions -| Skill names/descriptions -| Bionic names/descriptions -| Terrain bash sound descriptions -| Trap-vehicle collision sound descriptions -| Vehicle part names/descriptions -| Skill display type names -| NPC dialogue u_buy_monster unique names -| Spell messages and monster spell messages -| Martial art names and descriptions -| Mission names and descriptions -| Fault names and descriptions -| Plant names in item seed data -| Transform use action messages and menu text -| Template NPC names and name suffixes -| NPC talk response text -| Relic name overrides -| Speech text -| Tutorial messages -| Vitamin names -| Recipe blueprint names -| Recipe group recipe descriptions -| Item names (plural supported) and descriptions -| Recipe descriptions -| Inscribe use action verbs/gerunds -| Monster names (plural supported) and descriptions -| Snippets -| Bodypart names -| Keybinding action names -| Field level names +Do note that the JSON syntax is only supported if a JSON value is read using +`translation`. If you want new json values to use this format, refer to +`translations.h|cpp` and read the strings with `translation`. Afterwards +you also need to update `extract_json_strings.py` and run `lang/update_pot.sh` +to ensure that the strings are correctly extracted for translation, and run the +unit test to fix text styling issues reported by the `translation` class. ### Recommendations diff --git a/src/faction.cpp b/src/faction.cpp index 36eef52dba68c..54ec0b0a2e27c 100644 --- a/src/faction.cpp +++ b/src/faction.cpp @@ -100,12 +100,12 @@ faction_template::faction_template( const JsonObject &jsobj ) , respects_u( jsobj.get_int( "respects_u" ) ) , known_by_u( jsobj.get_bool( "known_by_u" ) ) , id( faction_id( jsobj.get_string( "id" ) ) ) - , desc( jsobj.get_string( "description" ) ) , size( jsobj.get_int( "size" ) ) , power( jsobj.get_int( "power" ) ) , food_supply( jsobj.get_int( "food_supply" ) ) , wealth( jsobj.get_int( "wealth" ) ) { + jsobj.get_member( "description" ).read( desc ); if( jsobj.has_string( "currency" ) ) { jsobj.read( "currency", currency, true ); } else { @@ -123,7 +123,7 @@ faction_template::faction_template( const JsonObject &jsobj ) std::string faction::describe() const { - std::string ret = _( desc ); + std::string ret = desc.translated(); return ret; } @@ -490,7 +490,8 @@ void faction::faction_display( const catacurses::window &fac_w, const int width int y = 2; mvwprintz( fac_w, point( width, ++y ), c_light_gray, _( "Attitude to you: %s" ), fac_ranking_text( likes_u ) ); - fold_and_print( fac_w, point( width, ++y ), getmaxx( fac_w ) - width - 2, c_light_gray, _( desc ) ); + fold_and_print( fac_w, point( width, ++y ), getmaxx( fac_w ) - width - 2, c_light_gray, + "%s", desc ); } int npc::faction_display( const catacurses::window &fac_w, const int width ) const diff --git a/src/faction.h b/src/faction.h index a04a953a3542e..7cccd9f122163 100644 --- a/src/faction.h +++ b/src/faction.h @@ -16,6 +16,7 @@ #include "color.h" #include "cursesdef.h" #include "string_id.h" +#include "translations.h" #include "type_id.h" // TODO: Redefine? @@ -80,7 +81,7 @@ class faction_template int respects_u; bool known_by_u; faction_id id; - std::string desc; + translation desc; int size; // How big is our sphere of influence? int power; // General measure of our power int food_supply; //Total nutritional value held diff --git a/src/handle_action.cpp b/src/handle_action.cpp index 05e466360e5f8..5d01c1a3b9502 100644 --- a/src/handle_action.cpp +++ b/src/handle_action.cpp @@ -971,7 +971,8 @@ static void wait() } } - as_m.text = ( has_watch ) ? string_format( _( "It's %s now. " ), + // NOLINTNEXTLINE(cata-text-style): spaces required for concatenation + as_m.text = ( has_watch ) ? string_format( _( "It's %s now. " ), to_string_time_of_day( calendar::turn ) ) : ""; as_m.text += setting_alarm ? _( "Set alarm for when?" ) : _( "Wait for how long?" ); as_m.query(); /* calculate key and window variables, generate window, and loop until we get a valid answer */ diff --git a/src/iuse.cpp b/src/iuse.cpp index c8d51948b35d5..dec62594772b1 100644 --- a/src/iuse.cpp +++ b/src/iuse.cpp @@ -6841,32 +6841,36 @@ static std::string effects_description_for_creature( Creature *const creature, s status( status ), intensity_lower_limit( 0 ) {} }; static const std::unordered_map vec_effect_status = { - { effect_onfire, ef_con( to_translation( " is on fire. " ) ) }, - { effect_bleed, ef_con( to_translation( " is bleeding. " ), 1 ) }, - { effect_happy, ef_con( to_translation( " looks happy. " ), 13 ) }, + { effect_onfire, ef_con( to_translation( " is on fire. " ) ) }, + { effect_bleed, ef_con( to_translation( " is bleeding. " ), 1 ) }, + { effect_happy, ef_con( to_translation( " looks happy. " ), 13 ) }, { effect_downed, ef_con( translation(), to_translation( "downed" ) ) }, { effect_in_pit, ef_con( translation(), to_translation( "stuck" ) ) }, - { effect_stunned, ef_con( to_translation( " is stunned. " ) ) }, - { effect_dazed, ef_con( to_translation( " is dazed. " ) ) }, - { effect_beartrap, ef_con( to_translation( " is stuck in beartrap. " ) ) }, - { effect_laserlocked, ef_con( to_translation( " have tiny red dot on body. " ) ) }, - { effect_boomered, ef_con( to_translation( " is covered in bile. " ) ) }, - { effect_glowing, ef_con( to_translation( " is covered in glowing goo. " ) ) }, - { effect_slimed, ef_con( to_translation( " is covered in thick goo. " ) ) }, - { effect_corroding, ef_con( to_translation( " is covered in acid. " ) ) }, - { effect_sap, ef_con( to_translation( " is coated in sap. " ) ) }, - { effect_webbed, ef_con( to_translation( " is covered in webs. " ) ) }, - { effect_spores, ef_con( to_translation( " is covered in spores. " ), 1 ) }, - { effect_crushed, ef_con( to_translation( " lies under collapsed debris. " ), to_translation( "lies" ) ) }, - { effect_lack_sleep, ef_con( to_translation( " looks very tired. " ) ) }, - { effect_lying_down, ef_con( to_translation( " is sleeping. " ), to_translation( "lies" ) ) }, - { effect_sleep, ef_con( to_translation( " is sleeping. " ), to_translation( "lies" ) ) }, - { effect_haslight, ef_con( to_translation( " is lit. " ) ) }, - { effect_monster_saddled, ef_con( to_translation( " is saddled. " ) ) }, - { effect_harnessed, ef_con( to_translation( " is being harnessed by a vehicle. " ) ) }, - { effect_monster_armor, ef_con( to_translation( " is wearing armor. " ) ) }, - { effect_has_bag, ef_con( to_translation( " have bag attached. " ) ) }, - { effect_tied, ef_con( to_translation( " is tied. " ) ) }, + { effect_stunned, ef_con( to_translation( " is stunned. " ) ) }, + { effect_dazed, ef_con( to_translation( " is dazed. " ) ) }, + // NOLINTNEXTLINE(cata-text-style): spaces required for concatenation + { effect_beartrap, ef_con( to_translation( " is stuck in beartrap. " ) ) }, + // NOLINTNEXTLINE(cata-text-style): spaces required for concatenation + { effect_laserlocked, ef_con( to_translation( " have tiny red dot on body. " ) ) }, + { effect_boomered, ef_con( to_translation( " is covered in bile. " ) ) }, + { effect_glowing, ef_con( to_translation( " is covered in glowing goo. " ) ) }, + { effect_slimed, ef_con( to_translation( " is covered in thick goo. " ) ) }, + { effect_corroding, ef_con( to_translation( " is covered in acid. " ) ) }, + { effect_sap, ef_con( to_translation( " is coated in sap. " ) ) }, + { effect_webbed, ef_con( to_translation( " is covered in webs. " ) ) }, + { effect_spores, ef_con( to_translation( " is covered in spores. " ), 1 ) }, + { effect_crushed, ef_con( to_translation( " lies under collapsed debris. " ), to_translation( "lies" ) ) }, + { effect_lack_sleep, ef_con( to_translation( " looks very tired. " ) ) }, + { effect_lying_down, ef_con( to_translation( " is sleeping. " ), to_translation( "lies" ) ) }, + { effect_sleep, ef_con( to_translation( " is sleeping. " ), to_translation( "lies" ) ) }, + { effect_haslight, ef_con( to_translation( " is lit. " ) ) }, + { effect_monster_saddled, ef_con( to_translation( " is saddled. " ) ) }, + // NOLINTNEXTLINE(cata-text-style): spaces required for concatenation + { effect_harnessed, ef_con( to_translation( " is being harnessed by a vehicle. " ) ) }, + { effect_monster_armor, ef_con( to_translation( " is wearing armor. " ) ) }, + // NOLINTNEXTLINE(cata-text-style): spaces required for concatenation + { effect_has_bag, ef_con( to_translation( " have bag attached. " ) ) }, + { effect_tied, ef_con( to_translation( " is tied. " ) ) }, { effect_bouldering, ef_con( translation(), to_translation( "balancing" ) ) } }; @@ -6885,26 +6889,26 @@ static std::string effects_description_for_creature( Creature *const creature, s if( creature->has_effect( effect_sad ) ) { int intensity = creature->get_effect_int( effect_sad ); if( intensity > 500 && intensity <= 950 ) { - figure_effects += pronoun_sex + pgettext( "Someone", " looks sad. " ); + figure_effects += pronoun_sex + pgettext( "Someone", " looks sad. " ); } else if( intensity > 950 ) { - figure_effects += pronoun_sex + pgettext( "Someone", " looks depressed. " ); + figure_effects += pronoun_sex + pgettext( "Someone", " looks depressed. " ); } } float pain = creature->get_pain() / 10.f; if( pain > 3 ) { - figure_effects += pronoun_sex + pgettext( "Someone", " is writhing in pain. " ); + figure_effects += pronoun_sex + pgettext( "Someone", " is writhing in pain. " ); } if( creature->has_effect( effect_riding ) ) { pose = _( "rides" ); monster *const mon = g->critter_at( creature->pos(), false ); - figure_effects += pronoun_sex + string_format( _( " is riding %s. " ), + figure_effects += pronoun_sex + string_format( _( " is riding %s. " ), colorize( mon->name(), c_light_blue ) ); } if( creature->has_effect( effect_glowy_led ) ) { - figure_effects += _( "A bionic LED is glowing softly. " ); + figure_effects += _( "A bionic LED is glowing softly. " ); } } - if( !figure_effects.empty() && figure_effects.back() == ' ' ) { // remove last space + while( !figure_effects.empty() && figure_effects.back() == ' ' ) { // remove last spaces figure_effects.erase( figure_effects.end() - 1 ); } return figure_effects; diff --git a/src/text_style_check.h b/src/text_style_check.h index 0ade18229c0da..7ed7ecc7f8e55 100644 --- a/src/text_style_check.h +++ b/src/text_style_check.h @@ -74,7 +74,7 @@ void text_style_check( Iter beg, Iter end, { U"!=", U"", { false, }, { false, } }, { U"\r\n", U"", { false, }, { true, R"(\n)", R"(\n)", "carriage return", "new line" } }, { U"\u2026", U"", { true, 0, 1, 0, 0, 0, 2, 2, 2, 2, 0 }, { false, } }, - { U".", U"", { true, 0, 3, 1, 3, 2, 0, 2, 0, 0, 0 }, { false, } }, + { U".", U"", { true, 0, 3, 1, 3, 2, 2, 2, 0, 0, 0 }, { false, } }, { U";", U"", { true, 0, 1, 1, 2, 1, 1, 1, 0, 0, 1 }, { false, } }, { U"!", U"!?", { true, 0, 1, 1, 3, 2, 2, 2, 0, 0, 1 }, { false, } }, { U"?", U"!?", { true, 0, 1, 1, 3, 2, 2, 2, 0, 0, 1 }, { false, } }, diff --git a/tests/fold_string_test.cpp b/tests/fold_string_test.cpp index cdf2e37cc3d61..3ec6dedceb897 100644 --- a/tests/fold_string_test.cpp +++ b/tests/fold_string_test.cpp @@ -33,7 +33,7 @@ TEST_CASE( "fold-string" ) "Lorem ipsum dolor", "sit amet, ", "consectetur ", - "adipiscing elit. ", + "adipiscing elit. ", // NOLINT(cata-text-style) "Pellentesque a.", }; check_equal( folded.begin(), folded.end(), expected.begin(), expected.end() );