diff --git a/datafiles/lang/en.json b/datafiles/lang/en.json index eb29d61b3b..ac3b7da5d2 100644 --- a/datafiles/lang/en.json +++ b/datafiles/lang/en.json @@ -15,9 +15,7 @@ "Save": "Save", "Settings": "Settings", "Update: {0}\nClick to open download page": "Update: {0}\nClick to open download page", - "Version: {0}": "Version: {0}" - -, + "Version: {0}": "Version: {0}", "(Hold Ctrl to decrease by 10)": "(Hold Ctrl to decrease by 10)", "(Hold Ctrl to increase by 10)": "(Hold Ctrl to increase by 10)", "A special challenge is needed for Aspirants to be judged worthy of becoming Astartes. After completing the Trial they then become a Neophyte, beginning implantation and training. (This can be changed once in game, but the chosen trial here will affect the spawn characteristics of your starting Space Marines).": "A special challenge is needed for Aspirants to be judged worthy of becoming Astartes. After completing the Trial they then become a Neophyte, beginning implantation and training. (This can be changed once in game, but the chosen trial here will affect the spawn characteristics of your starting Space Marines).", @@ -77,9 +75,7 @@ "Strength": "Strength", "Strength: {0} ({1})": "Strength: {0} ({1})", "Trusted": "Trusted", - "Uncooperative": "Uncooperative" - -, + "Uncooperative": "Uncooperative", "Adeptus Astartes ({0})": "Adeptus Astartes ({0})", "Adeptus Mechanicus ({0})": "Adeptus Mechanicus ({0})", "After every battle the Astartes have a chance to feast upon their fallen enemies, or seldom, their allies.": "After every battle the Astartes have a chance to feast upon their fallen enemies, or seldom, their allies.", @@ -137,9 +133,7 @@ "Your Astartes' Mucranoid cannot be turned off; the slime lowers most dispositions and occasionally damages their armour.": "Your Astartes' Mucranoid cannot be turned off; the slime lowers most dispositions and occasionally damages their armour.", "Your Chapter": "Your Chapter", "Your Chapter cannot make more Astartes until enough research is generated. Counts as four mutations and decreases Imperium disposition while increasing that of other Astartes.": "Your Chapter cannot make more Astartes until enough research is generated. Counts as four mutations and decreases Imperium disposition while increasing that of other Astartes.", - "Your Chapter's icon. Click to edit.": "Your Chapter's icon. Click to edit." - -, + "Your Chapter's icon. Click to edit.": "Your Chapter's icon. Click to edit.", " Disposition Gains : {0}\n": " Disposition Gains : {0}\n", " Disposition Multiplyers x{0}\n": " Disposition Multiplyers x{0}\n", " Disposition Start {0}\n": " Disposition Start {0}\n", @@ -157,9 +151,7 @@ "Insufficient Points": "Insufficient Points", "None": "None", "Select a {0}": "Select a {0}", - "Suspicion: {0}\n": "Suspicion: {0}\n" - -, + "Suspicion: {0}\n": "Suspicion: {0}\n", "A recent siege in aid of the Imperium has reduced the number of your Marines greatly. You retain a normal amount of equipment, but some is damaged.": "A recent siege in aid of the Imperium has reduced the number of your Marines greatly. You retain a normal amount of equipment, but some is damaged.", "A recent string of unfortunate events has left your Chapter decimated. You have very little left, will your story continue?": "A recent string of unfortunate events has left your Chapter decimated. You have very little left, will your story continue?", "Ambushers": "Ambushers", @@ -254,9 +246,7 @@ "Your Chapter views artifacts as sacred; you start with better gear and maintain all equipment with more ease.": "Your Chapter views artifacts as sacred; you start with better gear and maintain all equipment with more ease.", "Your Chapter's style of warfare is built around the speedy execution of battle. Infantry have boosted attack at the cost of defence as well as two additional Land speeders and Biker squads.": "Your Chapter's style of warfare is built around the speedy execution of battle. Infantry have boosted attack at the cost of defence as well as two additional Land speeders and Biker squads.", "Your Marines are susceptible to the Black Rage, having a chance each battle to become Death Company. These units are locked as Assault Marines and are fairly suicidal.": "Your Marines are susceptible to the Black Rage, having a chance each battle to become Death Company. These units are locked as Assault Marines and are fairly suicidal.", - "Your Marines are unorganized and splintered. Your forces are initially spread out across the sector and will take time to regroup.": "Your Marines are unorganized and splintered. Your forces are initially spread out across the sector and will take time to regroup." - -, + "Your Marines are unorganized and splintered. Your forces are initially spread out across the sector and will take time to regroup.": "Your Marines are unorganized and splintered. Your forces are initially spread out across the sector and will take time to regroup.", "Advanced": "Advanced", "Advanced options for colouring": "Advanced options for colouring", "Breastplate": "Breastplate", @@ -311,9 +301,7 @@ "Veteran Sergeant": "Veteran Sergeant", "Veteran Sergeant Markers": "Veteran Sergeant Markers", "Weapon": "Weapon", - "Weapon: {0}": "Weapon: {0}" - -, + "Weapon: {0}": "Weapon: {0}", "Battle Barge": "Battle Barge", "Flagship": "Flagship", "Homeworld Rule": "Homeworld Rule", @@ -326,9 +314,7 @@ "The world that your Chapter selects recruits from. More harsh worlds provide recruits with more grit and warrior mentality. If you are a homeworld-based Chapter, you may uncheck 'Recruiting World' to recruit from your homeworld instead.": "The world that your Chapter selects recruits from. More harsh worlds provide recruits with more grit and warrior mentality. If you are a homeworld-based Chapter, you may uncheck 'Recruiting World' to recruit from your homeworld instead.", "The world that your Chapter's Fortress Monastery is located upon. More civilized worlds are more easily defensible but the citizens may pose a risk or be a nuisance.": "The world that your Chapter's Fortress Monastery is located upon. More civilized worlds are more easily defensible but the citizens may pose a risk or be a nuisance.", "You personally take the rule of the Planetary Governer, ruling over your homeworld with an iron fist. Your every word and directive, be they good or bad, are absolute law.": "You personally take the rule of the Planetary Governer, ruling over your homeworld with an iron fist. Your every word and directive, be they good or bad, are absolute law.", - "Your Chapter's homeworld is ruled by a single Planetary Governer, who does with the planet mostly as they see fit. While heavily influenced by your Astartes the planet is sovereign.": "Your Chapter's homeworld is ruled by a single Planetary Governer, who does with the planet mostly as they see fit. While heavily influenced by your Astartes the planet is sovereign." - -, + "Your Chapter's homeworld is ruled by a single Planetary Governer, who does with the planet mostly as they see fit. While heavily influenced by your Astartes the planet is sovereign.": "Your Chapter's homeworld is ruled by a single Planetary Governer, who does with the planet mostly as they see fit. While heavily influenced by your Astartes the planet is sovereign.", "Advisor Names": "Advisor Names", "Chief Apothecary: ": "Chief Apothecary: ", "Chief Librarian: ": "Chief Librarian: ", @@ -351,9 +337,7 @@ "Roles": "Roles", "Scout Distribution\nCheck if you wish for Scouts to be distributed equally across your Battle Companies rather than concentrated in the 10th.": "Scout Distribution\nCheck if you wish for Scouts to be distributed equally across your Battle Companies rather than concentrated in the 10th.", "Specialist Distribution\nCheck if you wish for your Companies to be uniform and each contain {0}s and {1}s.": "Specialist Distribution\nCheck if you wish for your Companies to be uniform and each contain {0}s and {1}s.", - "The names of your main Advisors. They provide useful information and reports on the divisions of your Chapter.": "The names of your main Advisors. They provide useful information and reports on the divisions of your Chapter." - -, + "The names of your main Advisors. They provide useful information and reports on the divisions of your Chapter.": "The names of your main Advisors. They provide useful information and reports on the divisions of your Chapter.", "Ancient": "Ancient", "Apothecary": "Apothecary", "Assault": "Assault", @@ -375,9 +359,7 @@ "Scout": "Scout", "Tactical": "Tactical", "Techmarine": "Techmarine", - "Terminator": "Terminator" - -, + "Terminator": "Terminator", "{0} is selected as the new {1} {2}.": "{0} is selected as the new {1} {2}.", "A few have raised questions over his experience.": "A few have raised questions over his experience.", "Do Nothing": "Do Nothing", @@ -405,9 +387,7 @@ "With your full support the so called 'heretics' who have seen through the lies of the bureaucracy of Mars eliminate those who will not be swayed to see the truth.": "With your full support the so called 'heretics' who have seen through the lies of the bureaucracy of Mars eliminate those who will not be swayed to see the truth.", "You Recive an Urgent Transmision A serious breakdown in culture has coccured causing believers in tech heresy to demand that they are given preseidence and assurance to continue their practises": "You Recive an Urgent Transmision A serious breakdown in culture has coccured causing believers in tech heresy to demand that they are given preseidence and assurance to continue their practises", "Your choice Is almost unanimously respected": "Your choice Is almost unanimously respected", - "Your supporters are more than our detractors but many are unhappy": "Your supporters are more than our detractors but many are unhappy" - -, + "Your supporters are more than our detractors but many are unhappy": "Your supporters are more than our detractors but many are unhappy", "Adeptus Mechanicus": "Adeptus Mechanicus", "Chaos": "Chaos", "Ecclesiarchy": "Ecclesiarchy", @@ -420,9 +400,7 @@ "Orks": "Orks", "Tau Empire": "Tau Empire", "Tech-Brothers": "Tech-Brothers", - "Tyranid Hive": "Tyranid Hive" - -, + "Tyranid Hive": "Tyranid Hive", "Agri": "Agri", "Dead": "Dead", "Death": "Death", @@ -433,9 +411,7 @@ "Ice": "Ice", "Lava": "Lava", "Shrine": "Shrine", - "Temperate": "Temperate" - -, + "Temperate": "Temperate", "Boltstorm Gauntlet": "Boltstorm Gauntlet", "Eviscerator": "Eviscerator", "Force Staff": "Force Staff", @@ -450,9 +426,7 @@ "Storm Shield": "Storm Shield", "Thunder Hammer": "Thunder Hammer", "Twin Lightning Claws": "Twin Lightning Claws", - "Twin Power Fists": "Twin Power Fists" - -, + "Twin Power Fists": "Twin Power Fists", "Black": "Black", "Blue": "Blue", "Bone": "Bone", @@ -492,10 +466,769 @@ "Turqoise": "Turqoise", "Ultramarine": "Ultramarine", "White": "White", - "Yellow": "Yellow" - -, + "Yellow": "Yellow", "Error Loading Chapter": "Error Loading Chapter", - "No json file exists for chapter id {0} and name {1}": "No json file exists for chapter id {0} and name {1}" - + "No json file exists for chapter id {0} and name {1}": "No json file exists for chapter id {0} and name {1}", + "System": "System", + "Attack": "Attack", + "Raid": "Raid", + "Bombard": "Bombard", + "Purge": "Purge", + "Cyclonic Torpedo": "Cyclonic Torpedo", + "Build": "Build", + "Base": "Base", + "Arsenal": "Arsenal", + "Gene-Vault": "Gene-Vault", + "+Recruiting": "+Recruiting", + "Select Destination": "Select Destination", + "Garrison Report": "Garrison Report", + "Garrison Leader {0}": "Garrison Leader {0}", + "Planetary Defence : {0}": "Planetary Defence : {0}", + "Garrison Disposition Effect : Positive": "Garrison Disposition Effect : Positive", + "Garrison Disposition Effect : Neutral": "Garrison Disposition Effect : Neutral", + "Garrison Disposition Effect : Negative": "Garrison Disposition Effect : Negative", + "Population Report": "Population Report", + "Select Fleet Combat": "Select Fleet Combat", + "{0} Management": "{0} Management", + "Manage Units": "Manage Units", + "Debug": "Debug", + "Debug options": "Debug options", + "Edit Forces": "Edit Forces", + "Add Problem": "Add Problem", + "Add Feature": "Add Feature", + "Request Colonists": "Request Colonists", + "Recruiting": "Recruiting", + "Recruitment Type": "Recruitment Type", + "RQD": "RQD", + "RQU": "RQU", + "Enable recruiting": "Enable recruiting", + "Change recruitment type": "Change recruitment type", + "Deaccelerate recruitment": "Deaccelerate recruitment", + "Accelerate recruitment with req": "Accelerate recruitment with req", + "Planets with higher populations can provide more recruits both for your chapter and to keep a planets PDF bolstered, however colonists from other planets bring with them their home planets influences and evils \nREQ : 1000": "Planets with higher populations can provide more recruits both for your chapter and to keep a planets PDF bolstered, however colonists from other planets bring with them their home planets influences and evils \nREQ : 1000", + "Marine Garrison in system": "Marine Garrison in system", + "Disposition: {0}/100": "Disposition: {0}/100", + "Disposition: ???/100": "Disposition: ???/100", + "Disposition: N/A": "Disposition: N/A", + "War of _Succession": "War of _Succession", + "Population Influence": "Population Influence", + "{0} {1} ({2})": "{0} {1} ({2})", + "{0} (Craftworld)": "{0} (Craftworld)", + "Space Hulk": "Space Hulk", + "Population: {0}": "Population: {0}", + "population data toggle with 'P'": "population data toggle with 'P'", + "Imperial Guard: {0}": "Imperial Guard: {0}", + "Defense Force: {0}": "Defense Force: {0}", + "Gue'Vesa Force: {0}": "Gue'Vesa Force: {0}", + "Defenses: {0}": "Defenses: {0}", + "Integrity: {0}%": "Integrity: {0}%", + "Corruption: {0}": "Corruption: {0}", + "Planetary Presence": "Planetary Presence", + "Planetary Features": "Planetary Features", + "DEBUG: Heresy below 0!": "DEBUG: Heresy below 0!", + "DEBUG: Heresy above 100!": "DEBUG: Heresy above 100!", + "DEBUG: Heresy somehow unknown value!": "DEBUG: Heresy somehow unknown value!", + "Can't garrison on non-friendly planet or planet with no friendly PDF": "Can't garrison on non-friendly planet or planet with no friendly PDF", + "Abduct": "Abduct", + "Open: Voluntery": "Open: Voluntery", + "Covert: Voluntery": "Covert: Voluntery", + "Req:{0}": "Req:{0}", + "Craftworld": "Craftworld", + "Sparse": "Sparse", + "Light": "Light", + "Moderate": "Moderate", + "Heavy": "Heavy", + "Major": "Major", + "Extreme": "Extreme", + "Little": "Little", + "Maximum": "Maximum", + "Adeptas": "Adeptas", + "Tau": "Tau", + "Tyranids": "Tyranids", + "Daemons": "Daemons", + "Necrons": "Necrons", + "Minima": "Minima", + "Parvus": "Parvus", + "Moderatus": "Moderatus", + "Significus": "Significus", + "Enormicus": "Enormicus", + "Extremis": "Extremis", + "Small": "Small", + "Large": "Large", + "{0} Chapter Forge": "{0} Chapter Forge", + "{0} Audience": "{0} Audience", + "{0}: {1} ({2})\n": "{0}: {1} ({2})\n", + "All of the successors for {0} are removed or otherwise made indisposed. Paperwork is slightly altered. Rather than any sort of offical one of your Chapter Serfs is installed as the Planetary Governor. The planet is effectively under your control.": "All of the successors for {0} are removed or otherwise made indisposed. Paperwork is slightly altered. Rather than any sort of offical one of your Chapter Serfs is installed as the Planetary Governor. The planet is effectively under your control.", + "Many of the successors for {0} are removed or otherwise made indisposed. Your chapter ensures that the new Planetary Governor is sympathetic to your plight and more than willing to heed your advice. A powerful new ally may be in the making.": "Many of the successors for {0} are removed or otherwise made indisposed. Your chapter ensures that the new Planetary Governor is sympathetic to your plight and more than willing to heed your advice. A powerful new ally may be in the making.", + "Planetary Governor of {0} assassinated. A more suitable Governor is installed.": "Planetary Governor of {0} assassinated. A more suitable Governor is installed.", + "Planetary Governor of {0} assassinated. One of your Chapter Serfs take their position.": "Planetary Governor of {0} assassinated. One of your Chapter Serfs take their position.", + "Your Astartes descend upon the surface of {0} and plot the movements and schedule of the governor. ": "Your Astartes descend upon the surface of {0} and plot the movements and schedule of the governor. ", + "in their home": "in their home", + "in the streets": "in the streets", + "while driving": "while driving", + "taking a piss": "taking a piss", + "They are brought to the already-prepared facilities for Fallen, tortured to make {0} appear a heretic, and then incinerated. ": "They are brought to the already-prepared facilities for Fallen, tortured to make {0} appear a heretic, and then incinerated. ", + "{0} is tossed to the Fenrisian Wolves and viciously mauled, torn apart, and eaten. The beasts leave nothing but bloody scraps. ": "{0} is tossed to the Fenrisian Wolves and viciously mauled, torn apart, and eaten. The beasts leave nothing but bloody scraps. ", + "{0} is stuck in with the other criminals, and scum, to be turned into a servitor. Soon nothing remains that could be likened to the former Governor. ": "{0} is stuck in with the other criminals, and scum, to be turned into a servitor. Soon nothing remains that could be likened to the former Governor. ", + "Things get out of hand, and the Governor is torn limb from limb and consumed. {0}flesh is torn off and eaten, bone pulverized, and marrow sucked free. ": "Things get out of hand, and the Governor is torn limb from limb and consumed. {0}flesh is torn off and eaten, bone pulverized, and marrow sucked free. ", + "Your battle brother chops apart the Governor and eats a sizeable portion of {0} flesh, focusing upon the eyes, teeth, and fingers. Once full the rest is disposed of. ": "Your battle brother chops apart the Governor and eats a sizeable portion of {0} flesh, focusing upon the eyes, teeth, and fingers. Once full the rest is disposed of. ", + "Their still-living body is disintegrated by acid. ": "Their still-living body is disintegrated by acid. ", + "The Governor is jettisoned into the local star at the first opportunity. ": "The Governor is jettisoned into the local star at the first opportunity. ", + "{0} is burned as fuel for one of your vessels. ": "{0} is burned as fuel for one of your vessels. ", + "A few grenades is all it takes to blow {0} body to smithereens. ": "A few grenades is all it takes to blow {0} body to smithereens. ", + "{0} is executed in a mundane fashion and buried. ": "{0} is executed in a mundane fashion and buried. ", + "What is thy will?": "What is thy will?", + "Planetary Governor Assassinated": "Planetary Governor Assassinated", + "Allow the official successor to become Planetary Governor.": "Allow the official successor to become Planetary Governor.", + "Ensure that a sympathetic successor will be the one to rule.": "Ensure that a sympathetic successor will be the one to rule.", + "Remove all successors and install a loyal Chapter Serf.": "Remove all successors and install a loyal Chapter Serf.", + "sabotage force on {0} disrupts ork forces": "sabotage force on {0} disrupts ork forces", + "{0} departs {1} as his waaagh gains momentum": "{0} departs {1} as his waaagh gains momentum", + "The Chapter has run out of gene-seed!": "The Chapter has run out of gene-seed!", + "Recruitment on {0} halted due to insufficient apothecary rescources": "Recruitment on {0} halted due to insufficient apothecary rescources", + "Ancient ship repairs {0}% complete": "Ancient ship repairs {0}% complete", + "{0} Requision spent on Ancient Ship repairs in materials and outfitting (outfitting {1}%)": "{0} Requision spent on Ancient Ship repairs in materials and outfitting (outfitting {1}%)", + "Ancient Ship Restored": "Ancient Ship Restored", + "The ancient ship within the ruins of {0} has been fully repaired. It is determined to be a Gloriana Class vessel and is bristling with golden age weaponry and armour. Your {1}s are excited; the Slaughtersong is ready for it's maiden voyage, at your command.": "The ancient ship within the ruins of {0} has been fully repaired. It is determined to be a Gloriana Class vessel and is bristling with golden age weaponry and armour. Your {1}s are excited; the Slaughtersong is ready for it's maiden voyage, at your command.", + "sabotage force on {0} disrupts necron forces": "sabotage force on {0} disrupts necron forces", + "A hidden Genestealer Cult on {0} Has suddenly burst forth from hiding!": "A hidden Genestealer Cult on {0} Has suddenly burst forth from hiding!", + "A hidden Genestealer Cult on {0} Has been discovered by marine garrisons!": "A hidden Genestealer Cult on {0} Has been discovered by marine garrisons!", + "System Lost": "System Lost", + "A hidden Genestealer Cult on {0} has Started a revolt.": "A hidden Genestealer Cult on {0} has Started a revolt.", + "{0} has fallen to heretics!": "{0} has fallen to heretics!", + "{0} PDF killed in a rebellion on {1}.": "{0} PDF killed in a rebellion on {1}.", + "Heretic cults have appeared in {0}.": "Heretic cults have appeared in {0}.", + "Marine garrisons prevents rebellion on {0}": "Marine garrisons prevents rebellion on {0}", + "Heretic cults have spread around {0}.": "Heretic cults have spread around {0}.", + "Heretic Revolt": "Heretic Revolt", + "A massive heretic uprising on {0} threatens to plunge the star system into chaos.": "A massive heretic uprising on {0} threatens to plunge the star system into chaos.", + "Massive heretic uprising on {0}.": "Massive heretic uprising on {0}.", + "Daemonic incursion on {0}!": "Daemonic incursion on {0}!", + "War of Succession": "War of Succession", + "The planetary governor of {0} has died. Several subordinates and other parties each claim to be the true heir and successor- war has erupted across the planet as a result. Heresy thrives in chaos.": "The planetary governor of {0} has died. Several subordinates and other parties each claim to be the true heir and successor- war has erupted across the planet as a result. Heresy thrives in chaos.", + "War of Succession on {0}": "War of Succession on {0}", + "Hunt the Fallen": "Hunt the Fallen", + "Sources indicate one of the Fallen may be upon {0}. We have {1} months to send out a strike team and scour the planet. Any longer and any Fallen that might be there will have escaped.": "Sources indicate one of the Fallen may be upon {0}. We have {1} months to send out a strike team and scour the planet. Any longer and any Fallen that might be there will have escaped.", + "Sources indicate one of the Fallen may be upon {0}. We have {1} months to investigate.": "Sources indicate one of the Fallen may be upon {0}. We have {1} months to investigate.", + "Capitals": "Capitals", + "Frigates": "Frigates", + "Escorts": "Escorts", + "Location": "Location", + "Lost": "Lost", + "Crusading": "Crusading", + "Warp Travel": "Warp Travel", + "left click to view": "left click to view", + "forge point\ntotal": "forge point\ntotal", + "forge point\nuse": "forge point\nuse", + "apothecary\npoint total": "apothecary\npoint total", + "apothecary\npoint use": "apothecary\npoint use", + "Orbiting": "Orbiting", + "Deliver Trophy Guard": "Deliver Trophy Guard", + "Mission": "Mission", + "Time\nRemaining": "Time\nRemaining", + "Troops": "Troops", + "Healers": "Healers", + "Techies": "Techies", + "Manage": "Manage", + "Fleets": "Fleets", + "System Troops": "System Troops", + "Missions": "Missions", + "Show": "Show", + "Hide": "Hide", + "View {0}": "View {0}", + "Planets": "Planets", + "Planets\nRequesting Help": "Planets\nRequesting Help", + "View fleet at {0}": "View fleet at {0}", + "View fleet": "View fleet", + "Remaining\nGuard": "Remaining\nGuard", + "click to view {0} system": "click to view {0} system", + "Name": "Name", + " Owner ": " Owner ", + " Owner\nStatus ": " Owner\nStatus ", + "Help Requests": "Help Requests", + "Navy Fleets": "Navy Fleets", + "Forge Worlds": "Forge Worlds", + "You are to have {0} deliver trophy hunted on {1} to the {1} regiments\n\nLeft click to see target fleet intercept system right click to view the trophy bearing marine {0}": "You are to have {0} deliver trophy hunted on {1} to the {1} regiments\n\nLeft click to see target fleet intercept system right click to view the trophy bearing marine {0}", + "Hail My lord.##": "Hail My lord.##", + "Report for garrison on {0} {1} is as follows#": "Report for garrison on {0} {1} is as follows#", + "The garrison is comprised of {0} squads,": "The garrison is comprised of {0} squads,", + "The garrison is comprised of a single squad,": "The garrison is comprised of a single squad,", + " with a total man count of {0}.#": " with a total man count of {0}.#", + "Our Relationship with the Rulers of the planet is {0}#": "Our Relationship with the Rulers of the planet is {0}#", + "Rule of the planet is going well": "Rule of the planet is going well", + "Your rule of the the planet is being undermined by hostile forces": "Your rule of the the planet is being undermined by hostile forces", + "DEBUG: planet owner check failed": "DEBUG: planet owner check failed", + "Ruled": "Ruled", + "DEBUG: Numbers lower than -100 detected, this shouldn't happen!": "DEBUG: Numbers lower than -100 detected, this shouldn't happen!", + "Extremely Hostile": "Extremely Hostile", + "Very Hostile": "Very Hostile", + "Hostile": "Hostile", + "Uneasy": "Uneasy", + "Friendly": "Friendly", + "Very Friendly": "Very Friendly", + "Excellent": "Excellent", + "Unquestionable": "Unquestionable", + "DEBUG: Numbers higher than 100, this shouldn't happen!": "DEBUG: Numbers higher than 100, this shouldn't happen!", + "Planet Defences:X{0}#": "Planet Defences:X{0}#", + "Garrison Bonus:X{0}#": "Garrison Bonus:X{0}#", + " Siege Masters:X2#": " Siege Masters:X2#", + " Garrison Leader Bonus:X{0}(WIS/30)#": " Garrison Leader Bonus:X{0}(WIS/30)#", + "PDF Defence: {0}#": "PDF Defence: {0}#", + "SELECT DESTINATION": "SELECT DESTINATION", + "Garrison forces on......": "Garrison forces on......", + "Held breach": "Held breach", + "Single Handedly held a breach in the {0} during the {1} {2} of {3} {4} from the Orks": "Single Handedly held a breach in the {0} during the {1} {2} of {3} {4} from the Orks", + "Was pullled from beneath the carcesses of his slain {0} during the {1} {2} of {3} {4} from the Orks": "Was pullled from beneath the carcesses of his slain {0} during the {1} {2} of {3} {4} from the Orks", + "Player": "Player", + "Imperium": "Imperium", + "Mechanicus": "Mechanicus", + "Ork": "Ork", + "Genestealers": "Genestealers", + "Allied": "Allied", + "Antagonism": "Antagonism", + "War": "War", + "Chapter Management": "Chapter Management", + "Chapter Settings": "Chapter Settings", + "Apothecarium": "Apothecarium", + "Reclusium": "Reclusium", + "Librarium": "Librarium", + "Armamentarium": "Armamentarium", + "Recruitment": "Recruitment", + "Fleet": "Fleet", + "Diplomacy": "Diplomacy", + "Event Log": "Event Log", + "End Turn": "End Turn", + "Help": "Help", + "Sector {0}": "Sector {0}", + "Loyal": "Loyal", + "{0}% Penitent": "{0}% Penitent", + "Renegade": "Renegade", + "Sector Fleet Strength {0}/{1}": "Sector Fleet Strength {0}/{1}", + "The relative strength of the imperial navy and defence fleet forces and their max supported strength. Increase The number of imperial aligned planets and active forge worlds to increase the limit": "The relative strength of the imperial navy and defence fleet forces and their max supported strength. Increase The number of imperial aligned planets and active forge worlds to increase the limit", + "DEBUG MODE": "DEBUG MODE", + "Ships Repaired": "Ships Repaired", + "In accordance with the Imperial Repair License, all {0} ships orbiting friendly planets have been repaired. Note that repaired ships, and their fleets, are unable to act further this turn.": "In accordance with the Imperial Repair License, all {0} ships orbiting friendly planets have been repaired. Note that repaired ships, and their fleets, are unable to act further this turn.", + "Flagship Bridge": "Flagship Bridge", + "Master of the Fleet {0}": "Master of the Fleet {0}", + "Greetings, Chapter Master.\n\nYou requested a report? Our fleet contains ": "Greetings, Chapter Master.\n\nYou requested a report? Our fleet contains ", + "Adept {0}": "Adept {0}", + "Your fleet contains ": "Your fleet contains ", + "{0} Capital Ships, ": "{0} Capital Ships, ", + "{0} Frigates, and ": "{0} Frigates, and ", + "{0} Escorts": "{0} Escorts", + ", none of which are damaged.": ", none of which are damaged.", + ". Our most damaged vessel is the {0} - it has {1}% Hull Integrity.": ". Our most damaged vessel is the {0} - it has {1}% Hull Integrity.", + " Two of our ships are highly damaged. You may wish to purchase a Repair License from the Sector Governerner.": " Two of our ships are highly damaged. You may wish to purchase a Repair License from the Sector Governerner.", + " Several of our ships are highly damaged. It is advisable that you purchase a Repair License from the Sector Governer.": " Several of our ships are highly damaged. It is advisable that you purchase a Repair License from the Sector Governer.", + "\n\nHere are the current positions of our ships and their contents:": "\n\nHere are the current positions of our ships and their contents:", + "Class": "Class", + "HP": "HP", + "Carrying": "Carrying", + "Carrying ({0}): {1}": "Carrying ({0}): {1}", + "Health: {0}/{1}": "Health: {0}/{1}", + "Shields: {0}": "Shields: {0}", + "Armour: {0},{1}": "Armour: {0},{1}", + "Speed: {0}": "Speed: {0}", + "Turrets: {0}": "Turrets: {0}", + "-{0} ({1})": "-{0} ({1})", + "Strike Cruiser": "Strike Cruiser", + "Gladius": "Gladius", + "Hunter": "Hunter", + "Squad has no current assignments": "Squad has no current assignments", + "Assignment : {0}": "Assignment : {0}", + "Cancel Assignment": "Cancel Assignment", + "View Garrison": "View Garrison", + "Squad Leader : {0}": "Squad Leader : {0}", + "Squad Members : {0}": "Squad Members : {0}", + "Squad Location : {0}": "Squad Location : {0}", + "Squad will deploy in the": "Squad will deploy in the", + "column": "column", + "Garrison Duty": "Garrison Duty", + "Having squads assigned to Garrison Duty will increase relations with a planet over time, it will also bolster planet defence forces in case of attack, and reduce corruption growth. Press G to toggle": "Having squads assigned to Garrison Duty will increase relations with a planet over time, it will also bolster planet defence forces in case of attack, and reduce corruption growth. Press G to toggle", + "Sabotage": "Sabotage", + "Sabotage missions can reduce enemy growth while avoiding direct enemy contact however they are not without risk.": "Sabotage missions can reduce enemy growth while avoiding direct enemy contact however they are not without risk.", + "Reset Squad Loadout": "Reset Squad Loadout", + "Allow mass equip": "Allow mass equip", + "Select Squad": "Select Squad", + "De-select Squad": "De-select Squad", + "Press Left arrow to toggle": "Press Left arrow to toggle", + "Press tab to toggle": "Press tab to toggle", + "garrison": "garrison", + "sabotage": "sabotage", + "Health damage taken by the marine is reduced by this percentage. This happens after the flat reduction from armor.\n\nContributing factors:\n": "Health damage taken by the marine is reduced by this percentage. This happens after the flat reduction from armor.\n\nContributing factors:\n", + "{0}: {1}%\n": "{0}: {1}%\n", + "CON: {0}%": "CON: {0}%", + "A measure of how much punishment the creature can take. Marines can go into the negatives and still survive, but they'll require a bionic to become fighting fit once more.\n\nContributing factors:\n": "A measure of how much punishment the creature can take. Marines can go into the negatives and still survive, but they'll require a bionic to become fighting fit once more.\n\nContributing factors:\n", + "CON: {0}\n": "CON: {0}\n", + "Reduces incoming damage at a flat rate. Certain enemies may attack in ways that may bypass your armor entirely, for example power weapons and some warp sorceries.\n\nContributing factors:\n": "Reduces incoming damage at a flat rate. Certain enemies may attack in ways that may bypass your armor entirely, for example power weapons and some warp sorceries.\n\nContributing factors:\n", + "STC Bonus: x1.05\n": "STC Bonus: x1.05\n", + "==Experience==\nA measurement of how battle-hardened the unit is. Provides various bonuses across the board. Every 15 EXP, a new stat is assigned. Hover over the unit's stats in the marine profile to see projected growth over time.": "==Experience==\nA measurement of how battle-hardened the unit is. Provides various bonuses across the board. Every 15 EXP, a new stat is assigned. Hover over the unit's stats in the marine profile to see projected growth over time.", + "==Melee Attack==\n{0}": "==Melee Attack==\n{0}", + "==Melee Burden==\n{0}": "==Melee Burden==\n{0}", + "==Ranged Attack==\n{0}": "==Ranged Attack==\n{0}", + "==Ranged Burden==\n{0}": "==Ranged Burden==\n{0}", + "Bionic Augmentation is something a unit can do to both enhance their capabilities, but also replace a missing limb to get back into the fight.": "Bionic Augmentation is something a unit can do to both enhance their capabilities, but also replace a missing limb to get back into the fight.", + "\nThere is a limit of 10 Bionic augmentations. After that the damage is so extensive that a marine requires a dreadnought to keep going.": "\nThere is a limit of 10 Bionic augmentations. After that the damage is so extensive that a marine requires a dreadnought to keep going.", + "\nFor everyone else? It's time for the emperor's mercy.": "\nFor everyone else? It's time for the emperor's mercy.", + "\n\nCurrent Bionic Augmentations:\n": "\n\nCurrent Bionic Augmentations:\n", + "Bionic {0}": "Bionic {0}", + " (CON: +2 STR: +1 DEX: -2)\n": " (CON: +2 STR: +1 DEX: -2)\n", + " (CON: +1 WIS: +1 DEX: +1)\n": " (CON: +1 WIS: +1 DEX: +1)\n", + " (CON: +2 STR: +2 WS: -1)\n": " (CON: +2 STR: +2 WS: -1)\n", + " (CON: +4 STR: +1 DEX: -1)\n": " (CON: +4 STR: +1 DEX: -1)\n", + " (CHA: -1)\n": " (CHA: -1)\n", + " (CON: +1)\n": " (CON: +1)\n", + "Left Leg": "Left Leg", + "Right Leg": "Right Leg", + "Left Eye": "Left Eye", + "Right Eye": "Right Eye", + "Left Arm": "Left Arm", + "Right Arm": "Right Arm", + "Torso": "Torso", + "Throat": "Throat", + "Jaw": "Jaw", + "Head": "Head", + "{0} Company": "{0} Company", + "Headquarters": "Headquarters", + "Unknown": "Unknown", + "{0}, {1}": "{0}, {1}", + "Make Sgt": "Make Sgt", + "{0} Company Captain Candidates": "{0} Company Captain Candidates", + "New Captain Required": "New Captain Required", + "{0} Company Champion Candidates": "{0} Company Champion Candidates", + "Champion Required": "Champion Required", + "{0} Company Ancient Candidates": "{0} Company Ancient Candidates", + "Ancient Required": "Ancient Required", + "{0} Company Chaplain Candidates": "{0} Company Chaplain Candidates", + "Chaplain Required": "Chaplain Required", + "{0} Company Apothecary Candidates": "{0} Company Apothecary Candidates", + "Apothecary Required": "Apothecary Required", + "{0} Company Tech Marine Candidates": "{0} Company Tech Marine Candidates", + "Tech Marine Required": "Tech Marine Required", + "{0} Company Librarian Candidates": "{0} Company Librarian Candidates", + "Librarian Required": "Librarian Required", + "{0} {1}": "{0} {1}", + "''{0}''": "''{0}''", + "{0} / {1} Space Used": "{0} / {1} Space Used", + "Click a Ship to Load Selection (Req. {0} Space)": "Click a Ship to Load Selection (Req. {0} Space)", + "Re-equip": "Re-equip", + "Promote": "Promote", + "Jail": "Jail", + "Add Bionics": "Add Bionics", + "Set Boarder": "Set Boarder", + "Reset": "Reset", + "Transfer": "Transfer", + "Move Ship": "Move Ship", + "Manage Tags": "Manage Tags", + "Unload": "Unload", + "Reload": "Reload", + "Selection: {0} space": "Selection: {0} space", + "Select All": "Select All", + "Filter Mode": "Filter Mode", + "All Infantry": "All Infantry", + "All Vehicles": "All Vehicles", + "Press Shift E": "Press Shift E", + "Press Shift P": "Press Shift P", + "Press Shift J": "Press Shift J", + "Press Shift B": "Press Shift B", + "Press Shift Q": "Press Shift Q", + "Press Shift R": "Press Shift R", + "Press Shift T": "Press Shift T", + "Press Shift M": "Press Shift M", + "Press Shift F": "Press Shift F", + "Press Shift L": "Press Shift L", + "==Psychic Stats==\n{0}": "==Psychic Stats==\n{0}", + "{0}\n{1}% Corruption.": "{0}\n{1}% Corruption.", + "Ship Management": "Ship Management", + "Squad View": "Squad View", + "Company View": "Company View", + "Show Profile": "Show Profile", + "Hide Profile": "Hide Profile", + "Show Bio": "Show Bio", + "Hide Bio": "Hide Bio", + "DIPLOMATIC DISASTER": "DIPLOMATIC DISASTER", + "Apothecaries at {0} has been spotted doing suspicious activities!": "Apothecaries at {0} has been spotted doing suspicious activities!", + "Blood Duels are efficient in time, but costly in risk with gene material. Gene-seed has been lost.": "Blood Duels are efficient in time, but costly in risk with gene material. Gene-seed has been lost.", + "THE BLOOD DUEL? HA DO I EVEN NEED TO EXPLAIN, CHAPTER MASTER? ASPIRANTS ENTER. NEOPHYTES LEAVE. Those worthy of serving the Emperor are rewarded justly and those merely pretending at glory are lost in the BLOOD AND THUNDER of the dome. Do not be alarmed at the carnage. The Apothecarium has become quite adept at rebuilding those fit to serve. The others are given to the {0}s. The mind is a terrible thing to waste and the Emperor does hate waste. Not every man is useful as an Astartes but every man is useful.": "THE BLOOD DUEL? HA DO I EVEN NEED TO EXPLAIN, CHAPTER MASTER? ASPIRANTS ENTER. NEOPHYTES LEAVE. Those worthy of serving the Emperor are rewarded justly and those merely pretending at glory are lost in the BLOOD AND THUNDER of the dome. Do not be alarmed at the carnage. The Apothecarium has become quite adept at rebuilding those fit to serve. The others are given to the {0}s. The mind is a terrible thing to waste and the Emperor does hate waste. Not every man is useful as an Astartes but every man is useful.", + "To be an Astartes is to be a hunter of xenos, of traitors, of heretics, and of all those that dare defy the Emperor. What better way to test the worthiness of Aspirants than to have to them hunt the most dangerous predator to be found on their planet? Such a task requires a combination of wits and cunning, in addition to raw martial skill. When they have received the blessed geneseed and become full battle brothers, they will hunt across the stars with bolter and chainsword. For now, let them hunt with nothing more than a spear and their wits.": "To be an Astartes is to be a hunter of xenos, of traitors, of heretics, and of all those that dare defy the Emperor. What better way to test the worthiness of Aspirants than to have to them hunt the most dangerous predator to be found on their planet? Such a task requires a combination of wits and cunning, in addition to raw martial skill. When they have received the blessed geneseed and become full battle brothers, they will hunt across the stars with bolter and chainsword. For now, let them hunt with nothing more than a spear and their wits.", + "To become one of the Imperium’s finest warriors, the Space Marines, is the greatest glory that any human can aspire to. And is glory not worth fighting, bleeding or even dying for? It must be, for whole worlds of ice, ash and sand have buried generations of sons in pursuit of this glory and never once called the price too dear. To ensure the necessary bloodshed, lies, paranoia and psychosis-inducing drugs have been introduced to . This trial will seperate the weak from the strong and the chaff from the wheat.": "To become one of the Imperium’s finest warriors, the Space Marines, is the greatest glory that any human can aspire to. And is glory not worth fighting, bleeding or even dying for? It must be, for whole worlds of ice, ash and sand have buried generations of sons in pursuit of this glory and never once called the price too dear. To ensure the necessary bloodshed, lies, paranoia and psychosis-inducing drugs have been introduced to . This trial will seperate the weak from the strong and the chaff from the wheat.", + "Few worlds of the Imperium are free from the adversity of pollution or toxic waste. Still others are bequeathed with flows of lava and choking atmosphere. The glory of rising to astartes is only granted to those that can tackle and overcome these dangerous environments. Aspirants are placed upon the most hellish of planet in the sector, and then expected to traverse the continent with only himself to rely upon. Those who face the impossible without faltering and survive past the point they should have perished are recovered by {0}s, judged worthy of becoming a Neophyte.": "Few worlds of the Imperium are free from the adversity of pollution or toxic waste. Still others are bequeathed with flows of lava and choking atmosphere. The glory of rising to astartes is only granted to those that can tackle and overcome these dangerous environments. Aspirants are placed upon the most hellish of planet in the sector, and then expected to traverse the continent with only himself to rely upon. Those who face the impossible without faltering and survive past the point they should have perished are recovered by {0}s, judged worthy of becoming a Neophyte.", + "An Aspirant’s spiritual and mental capability is every bit as important as his physical characteristics. It is wise to impose Trials not upon their body, but on the mind. Either through psychic powers, chemical agents, or endurance trials, the Aspirant’s willpower is tested. Those unworthy do not survive the stress and trauma placed upon their hearts- only those whose minds are proven to be unbreakable are welcomed into our ranks.": "An Aspirant’s spiritual and mental capability is every bit as important as his physical characteristics. It is wise to impose Trials not upon their body, but on the mind. Either through psychic powers, chemical agents, or endurance trials, the Aspirant’s willpower is tested. Those unworthy do not survive the stress and trauma placed upon their hearts- only those whose minds are proven to be unbreakable are welcomed into our ranks.", + "What better gauge of an Aspirant than in a duel with our astartes? Our brother, unarmed and unarmoured, will face against the armed challenger until one cannot continue. It is impossible for the Aspirant to actually succeed these trials, but demonstrates how far they can possibly go, and allow us to judge him accordingly. As with most trials the Aspirant’s life is in their own hands. He who has failed the duel- yet proven himself worthy- is rescued from the jaws of death by {0} and allowed to progress to the rank of Neophyte.": "What better gauge of an Aspirant than in a duel with our astartes? Our brother, unarmed and unarmoured, will face against the armed challenger until one cannot continue. It is impossible for the Aspirant to actually succeed these trials, but demonstrates how far they can possibly go, and allow us to judge him accordingly. As with most trials the Aspirant’s life is in their own hands. He who has failed the duel- yet proven himself worthy- is rescued from the jaws of death by {0} and allowed to progress to the rank of Neophyte.", + "What better way to cultivate astartes than to raise them from youth? The capable children of our recruitment targets are apprenticed to our battle brothers. Beneath their steady guidance the Aspirants spend several years learning the art of the smith. The most able are judged by our Chapter’s {0}s and {1} to deem if they are compatible with gene-seed implantation. If so, the Aspirant’s trial culminates in hunting and slaying a massive beast. Only the brightest and bravest are added to our ranks.": "What better way to cultivate astartes than to raise them from youth? The capable children of our recruitment targets are apprenticed to our battle brothers. Beneath their steady guidance the Aspirants spend several years learning the art of the smith. The most able are judged by our Chapter’s {0}s and {1} to deem if they are compatible with gene-seed implantation. If so, the Aspirant’s trial culminates in hunting and slaying a massive beast. Only the brightest and bravest are added to our ranks.", + "Years training : {0}\n": "Years training : {0}\n", + " {0} : {1}\n": " {0} : {1}\n", + "Recruit Success Chance : X{0}\n": "Recruit Success Chance : X{0}\n", + " {0} : X{1}\n": " {0} : X{1}\n", + "Experience Bonus : {0}\n": "Experience Bonus : {0}\n", + "{0}% of gene-seed wastage per turn\n": "{0}% of gene-seed wastage per turn\n", + "Corruption Effect : ~{0}\n": "Corruption Effect : ~{0}\n", + "Favoured Traits: ": "Favoured Traits: ", + "Dis-Favoured Traits: ": "Dis-Favoured Traits: ", + "Neophytes": "Neophytes", + "Neophyte {0}": "Neophyte {0}", + "Starting EXP: {0}": "Starting EXP: {0}", + "ETA: {0}": "ETA: {0}", + "World {0}": "World {0}", + "First Sergeant {0}": "First Sergeant {0}", + "Hail {0}! You asked for a report?\n\n": "Hail {0}! You asked for a report?\n\n", + "Our Chapter currently has no Neophytes - we are at maximum strength and do not require more marines.": "Our Chapter currently has no Neophytes - we are at maximum strength and do not require more marines.", + "Our Chapter currently has no Neophytes. Without training more our chapter is doomed to a slow death.": "Our Chapter currently has no Neophytes. Without training more our chapter is doomed to a slow death.", + "Our Chapter currently has no Neophytes. We are doing our utmost best to find suitable recruits.": "Our Chapter currently has no Neophytes. We are doing our utmost best to find suitable recruits.", + "Our Chapter currently has one recruit being trained. The Neophyte's name is {0} and they are scheduled to become a battle brother in {1} months' time.": "Our Chapter currently has one recruit being trained. The Neophyte's name is {0} and they are scheduled to become a battle brother in {1} months' time.", + "Our Chapter currently has {0} recruits being trained. {1} is the next scheduled Neophyte to become a battle brother in {2} months' time.": "Our Chapter currently has {0} recruits being trained. {1} is the next scheduled Neophyte to become a battle brother in {2} months' time.", + "The recruitment is {0}": "The recruitment is {0}", + "\n{0}. You must only give me the word and I can begin further increasing our numbers... though this would violate the Codex Astartes.": "\n{0}. You must only give me the word and I can begin further increasing our numbers... though this would violate the Codex Astartes.", + "\n{0}. You must only give me the word and I can begin further increasing our numbers.": "\n{0}. You must only give me the word and I can begin further increasing our numbers.", + "\n{0}.": "\n{0}.", + "\nMutation of our gene-seed currently makes us unable to recruit new Neophytes. We are doomed to a slow demise unless the Apothecaries can fix it.": "\nMutation of our gene-seed currently makes us unable to recruit new Neophytes. We are doomed to a slow demise unless the Apothecaries can fix it.", + "\nThere is no more gene-seed in our vaults and we cannot create more neophytes as a result. Something must be done, Chapter Master.": "\nThere is no more gene-seed in our vaults and we cannot create more neophytes as a result. Something must be done, Chapter Master.", + "\nWe're recruiting from one world - {0}.": "\nWe're recruiting from one world - {0}.", + "\nWe're recruiting from two worlds. Finding recruits is vastly accelerated.": "\nWe're recruiting from two worlds. Finding recruits is vastly accelerated.", + "\nWe're recruiting from several worlds.": "\nWe're recruiting from several worlds.", + "Space Marine Recruiting: {0}": "Space Marine Recruiting: {0}", + "Apothecary Training: {0}": "Apothecary Training: {0}", + "Chaplain Training: {0}": "Chaplain Training: {0}", + "Psyker Training: {0}": "Psyker Training: {0}", + "Techmarine Training: {0}": "Techmarine Training: {0}", + "Blood Duel": "Blood Duel", + "Hunting the Hunter": "Hunting the Hunter", + "Survival of the Fittest": "Survival of the Fittest", + "Exposure": "Exposure", + "Knowledge of self": "Knowledge of self", + "Combat Challange": "Combat Challange", + "Apprenticeship": "Apprenticeship", + "HALTED": "HALTED", + "SLUGGISH": "SLUGGISH", + "SLOW": "SLOW", + "MODERATE": "MODERATE", + "FAST": "FAST", + "FRENETIC": "FRENETIC", + "MAXIMUM": "MAXIMUM", + "ONGOING": "ONGOING", + "halted": "halted", + "ongoing": "ongoing", + "Marines": "Marines", + "Target Company": "Target Company", + "Promoting": "Promoting", + "HQ": "HQ", + "{0} Company {1}": "{0} Company {1}", + "Target Role:": "Target Role:", + "{0} [{1}]": "{0} [{1}]", + "Required Gear:": "Required Gear:", + "{0} {1} (Have {2})": "{0} {1} (Have {2})", + "[[Trade Accepted. Shipment initialized.]]": "[[Trade Accepted. Shipment initialized.]]", + "[[Trade Refused]]": "[[Trade Refused]]", + "You would offer me scraps for the keys to a kingdom? You are foolish and, worse, you are unaware of your own incompetence.": "You would offer me scraps for the keys to a kingdom? You are foolish and, worse, you are unaware of your own incompetence.", + "Do not attempt exchanges with those so far above you, lapdog of the Corpse Emperor, it makes you look even more idiotic than you already do.": "Do not attempt exchanges with those so far above you, lapdog of the Corpse Emperor, it makes you look even more idiotic than you already do.", + "I would spit upon this ‘offer' you bring before me but I find myself too amused by it.": "I would spit upon this ‘offer' you bring before me but I find myself too amused by it.", + "You may consider my response to be a ‘no' and assume my attitude to be whatever you like, Chapter Master.": "You may consider my response to be a ‘no' and assume my attitude to be whatever you like, Chapter Master.", + "Have a care that you do not overstep the mark, Chapter Master, I see no reason to accept such a trade.": "Have a care that you do not overstep the mark, Chapter Master, I see no reason to accept such a trade.", + "An unreasonable trade, whatever our working relationship might be. I refuse.": "An unreasonable trade, whatever our working relationship might be. I refuse.", + "{0} wanted?": "{0} wanted?", + "{0} offered?": "{0} offered?", + "{0}\nItems": "{0}\nItems", + "[{0}]": "[{0}]", + "{0} : {1}": "{0} : {1}", + "{0}:": "{0}:", + "{0} disposition required": "{0} disposition required", + "Xeno Trade": "Xeno Trade", + "Clear": "Clear", + "Offer": "Offer", + "Requisition": "Requisition", + "Recruiting Planet": "Recruiting Planet", + "License: Repair": "License: Repair", + "License: Crusade": "License: Crusade", + "Minor Artifact": "Minor Artifact", + "Artifact": "Artifact", + "Skitarii": "Skitarii", + "Techpriest": "Techpriest", + "Crusader": "Crusader", + "Exterminatus": "Exterminatus", + "Inferno Bolts": "Inferno Bolts", + "Sister of Battle": "Sister of Battle", + "Sister Hospitaler": "Sister Hospitaler", + "Eldar Power Sword": "Eldar Power Sword", + "Archeotech Laspistol": "Archeotech Laspistol", + "Ranger": "Ranger", + "Useful Information": "Useful Information", + "Power Klaw": "Power Klaw", + "Ork Sniper": "Ork Sniper", + "Flash Git": "Flash Git", + "IOU": "IOU", + "Gene Seed": "Gene Seed", + "Gene-Seed": "Gene-Seed", + "STC Fragment": "STC Fragment", + "Info Chip": "Info Chip", + "Master Crafted Power Sword": "Master Crafted Power Sword", + "Impossible": "Impossible", + "Very Unlikely": "Very Unlikely", + "Unlikely": "Unlikely", + "Moderate Chance": "Moderate Chance", + "Likely": "Likely", + "Very Likely": "Very Likely", + "Unrefusable": "Unrefusable", + "WAR": "WAR", + "DECLARE WAR": "DECLARE WAR", + "Unfinished": "Unfinished", + "Declare War": "Declare War", + " (Imperium)": " (Imperium)", + "Disposition: {0}": "Disposition: {0}", + "Disposition: {0} ({1})": "Disposition: {0} ({1})", + "Consorting with heretics will cause your disposition with the Imperium to plummet.": "Consorting with heretics will cause your disposition with the Imperium to plummet.", + "Consorting with xenos will cause your disposition with the Imperium to lower.": "Consorting with xenos will cause your disposition with the Imperium to lower.", + "Meet Chaos Emissary": "Meet Chaos Emissary", + "The Emmmisary": "The Emmmisary", + "Trade": "Trade", + "Demand": "Demand", + "Discuss": "Discuss", + "Denounce": "Denounce", + "Praise": "Praise", + "Propose\nAlliance": "Propose\nAlliance", + "Request Audience": "Request Audience", + "Ignore": "Ignore", + "Unignore": "Unignore", + "Click here or press B to Toggle Unit Biography.": "Click here or press B to Toggle Unit Biography.", + "Sir! You requested a report? Currently, we have deployed {0} {1}s to watch over the health of our Battle-Brothers in the field. We have an additional {2} {1}s who await only your order to carry the word to the troops.": "Sir! You requested a report? Currently, we have deployed {0} {1}s to watch over the health of our Battle-Brothers in the field. We have an additional {2} {1}s who await only your order to carry the word to the troops.", + "Sir! You requested a report? Currently, we have {0} {1}s who await only your order to carry the word to the troops.": "Sir! You requested a report? Currently, we have {0} {1}s who await only your order to carry the word to the troops.", + "##Currently, we are training additional {0} at a ": "##Currently, we are training additional {0} at a ", + " rate": " rate", + " and expect to see a new one in {0} month's time.": " and expect to see a new one in {0} month's time.", + "We can increase this rate, but it will require us to requisition additional facilities, as well as upkeep, Sir.": "We can increase this rate, but it will require us to requisition additional facilities, as well as upkeep, Sir.", + "##Our men have been behaving as they should. Not a single one is scheduled for corrective action of any type.": "##Our men have been behaving as they should. Not a single one is scheduled for corrective action of any type.", + "Penitorium": "Penitorium", + "Never": "Never", + "[Execute] [Release]": "[Execute] [Release]", + "Your Chapter contains {0} {1}s.##": "Your Chapter contains {0} {1}s.##", + "Training of further {0}s": "Training of further {0}s", + " The next {0} is expected in {1} months.": " The next {0} is expected in {1} months.", + "Chapter Revelry": "Chapter Revelry", + "As our bolters are charged with death for the Emperor's enemies, our thoughts are charged with his wisdom. As our bodies are armoured with Adamantium, our souls are protected with our loyalty- loyalty to Him, and loyalty to our brothers. The bonds of this brotherhood are worth revering, even if a lull in duty invites doubt and heresy. Should you wish to schedule a rousing event, or challenge, I will make it so. Under the careful watch of our {0}s, our brothers' spirits may be lifted.": "As our bolters are charged with death for the Emperor's enemies, our thoughts are charged with his wisdom. As our bodies are armoured with Adamantium, our souls are protected with our loyalty- loyalty to Him, and loyalty to our brothers. The bonds of this brotherhood are worth revering, even if a lull in duty invites doubt and heresy. Should you wish to schedule a rousing event, or challenge, I will make it so. Under the careful watch of our {0}s, our brothers' spirits may be lifted.", + "A {0} has been scheduled on ": "A {0} has been scheduled on ", + "Chapter Relic construction has been scheduled on ": "Chapter Relic construction has been scheduled on ", + ". ": ". ", + " in your name. ": " in your name. ", + " in honor of the ": " in honor of the ", + " in honor of ": " in honor of ", + "{0} {1} Company). ": "{0} {1} Company). ", + ", honoring ": ", honoring ", + ", giving praise to The Emperor. ": ", giving praise to The Emperor. ", + " to honor our chapter. ": " to honor our chapter. ", + "Very little requisiton has been set aside for the event": "Very little requisiton has been set aside for the event", + "A minor amount of requisition has been dedicated for the event": "A minor amount of requisition has been dedicated for the event", + "Moderate expenses are being made for the event": "Moderate expenses are being made for the event", + "A great amount of requisiton is set aside for the event": "A great amount of requisiton is set aside for the event", + "The event is set to be lavish and excessive, with maximum requisition spent": "The event is set to be lavish and excessive, with maximum requisition spent", + ". It is set to run for {0} month.": ". It is set to run for {0} month.", + ". It is set to run for {0} months.": ". It is set to run for {0} months.", + " The feast will be made up entirely of a banquet.": " The feast will be made up entirely of a banquet.", + " The feast will primarily be made up of a banquet, although ": " The feast will primarily be made up of a banquet, although ", + "drugs and alcohol will be present for those who wish to partake.": "drugs and alcohol will be present for those who wish to partake.", + "alcohol will also be present.": "alcohol will also be present.", + "drugs will also be present.": "drugs will also be present.", + " The feast will only be such in name, and actually primarily be composed of alcohol consumption and roudy behavior.": " The feast will only be such in name, and actually primarily be composed of alcohol consumption and roudy behavior.", + " The feast will only be such in name, and actually primarily be composed of lines of drugs and roudy behavior.": " The feast will only be such in name, and actually primarily be composed of lines of drugs and roudy behavior.", + " Other Chapters have been invited to partake in the event, although it is not known who, if any, might show.": " Other Chapters have been invited to partake in the event, although it is not known who, if any, might show.", + " Spectators are encouraged, with efforts made to keep attending simple.": " Spectators are encouraged, with efforts made to keep attending simple.", + " Smaller, similar deathmatches will be held for Imperial citizens who wish to partake.": " Smaller, similar deathmatches will be held for Imperial citizens who wish to partake.", + " Our {0}s aim to create a weapon.": " Our {0}s aim to create a weapon.", + " Our {0}s aim to create a suit of armour.": " Our {0}s aim to create a suit of armour.", + " Our {0}s aim to hone and strengthen an already existing relic.": " Our {0}s aim to hone and strengthen an already existing relic.", + " An Ecclesiarchy priest has been requested to lead the sermons.": " An Ecclesiarchy priest has been requested to lead the sermons.", + " Adepta Sororita presence has been requested, to share in praising the Emperor.": " Adepta Sororita presence has been requested, to share in praising the Emperor.", + " The Chapter Cult Sermon is pointedly sanctioned within the bounds of the Codex Astartes and Imperial tradition.": " The Chapter Cult Sermon is pointedly sanctioned within the bounds of the Codex Astartes and Imperial tradition.", + " The Chapter Cult Sermon contains some radical or questionable practices, but such is allowed, as our traditions.": " The Chapter Cult Sermon contains some radical or questionable practices, but such is allowed, as our traditions.", + " Blood sacrifices are a primary focus with the sermon, celebrating martial prowess and our semi-divinity.": " Blood sacrifices are a primary focus with the sermon, celebrating martial prowess and our semi-divinity.", + " Drugs will also be present for the ceremony.": " Drugs will also be present for the ceremony.", + " Mind-altering drugs will be a primary focus of the sermon.": " Mind-altering drugs will be a primary focus of the sermon.", + " Local Imperials will be required to attend our march- those that attempt to avoid our revelry are clearly heretics and will be dealt with as such.": " Local Imperials will be required to attend our march- those that attempt to avoid our revelry are clearly heretics and will be dealt with as such.", + " Cadences and battle cries will honor our closest allies, giving them due credit where it is needed.": " Cadences and battle cries will honor our closest allies, giving them due credit where it is needed.", + " Bloody trophies of our conquests will be brandished to the populance.": " Bloody trophies of our conquests will be brandished to the populance.", + "Scheduling Event": "Scheduling Event", + "Event Type: ": "Event Type: ", + "Event Location: ": "Event Location: ", + "Grandoise: ": "Grandoise: ", + "Features: ": "Features: ", + "Display: ": "Display: ", + "Repeat: ": "Repeat: ", + "Honoring: ": "Honoring: ", + "Attendees: ": "Attendees: ", + "Public: ": "Public: ", + "Planet": "Planet", + "Ship": "Ship", + "Schedule": "Schedule", + "Equipment:": "Equipment:", + "Kills:": "Kills:", + "Current Location: {0} {1}#Health: {2}%": "Current Location: {0} {1}#Health: {2}%", + "Current Location: Onboard {0}#Health: {1}%": "Current Location: Onboard {0}#Health: {1}%", + "Current Location:#Health:": "Current Location:#Health:", + "{0} (Press Any Key)": "{0} (Press Any Key)", + "{0} Chapter Organization": "{0} Chapter Organization", + "Great Feast": "Great Feast", + "Tournament": "Tournament", + "Deathmatch": "Deathmatch", + "Chapter Relic": "Chapter Relic", + "Chapter Sermon": "Chapter Sermon", + "Imperial Mass": "Imperial Mass", + "Triumphal March": "Triumphal March", + "Banquet": "Banquet", + "Internal": "Internal", + "Chapter Only": "Chapter Only", + "Create Wargear": "Create Wargear", + "Sanctioned": "Sanctioned", + "Local": "Local", + "Mandatory Attendance": "Mandatory Attendance", + "Alcohol": "Alcohol", + "Spectators": "Spectators", + "Create Armour": "Create Armour", + "Request Ecclesiarchy": "Request Ecclesiarchy", + "Blood Sacrifices": "Blood Sacrifices", + "Honor to Allies": "Honor to Allies", + "Drugs": "Drugs", + "Upgrade Existing": "Upgrade Existing", + "Invite Other Chapters": "Invite Other Chapters", + "Allow Other Competitors": "Allow Other Competitors", + "Request Sororitas": "Request Sororitas", + "Brandish Bloody Trophies": "Brandish Bloody Trophies", + "sluggish": "sluggish", + "slow": "slow", + "moderate": "moderate", + "fast": "fast", + "frenetic": "frenetic", + "heretically fast": "heretically fast", + " is currently halted": " is currently halted", + " is advancing sluggishly": " is advancing sluggishly", + " is advancing slowly": " is advancing slowly", + " is advancing moderately fast": " is advancing moderately fast", + " is advancing fast": " is advancing fast", + " is advancing frenetically": " is advancing frenetically", + " is advancing as fast as possible": " is advancing as fast as possible", + "Secret Lair ({0} {1})": "Secret Lair ({0} {1})", + "Select a Secret Lair style.": "Select a Secret Lair style.", + "Build ({0} {1})": "Build ({0} {1})", + "Secret Arsenal ({0} {1})": "Secret Arsenal ({0} {1})", + "Secret Gene-Vault ({0} {1})": "Secret Gene-Vault ({0} {1})", + "This feature will be constructed in {0} months.": "This feature will be constructed in {0} months.", + "Hippodrome": "Hippodrome", + "Beastarium": "Beastarium", + "Torture Chamber": "Torture Chamber", + "Narcotics": "Narcotics", + "Relic Room": "Relic Room", + "Cookery": "Cookery", + "Vox Casters": "Vox Casters", + "Throne": "Throne", + "Stasis Pods": "Stasis Pods", + "Swimming Pool": "Swimming Pool", + "A modest, less elaborate forge able to employ a handful of Astartes or Techpriest.": "A modest, less elaborate forge able to employ a handful of Astartes or Techpriest.", + "A moderate sized garage fit to hold, service, and display vehicles.": "A moderate sized garage fit to hold, service, and display vehicles.", + "An enclosure with simulated greenery and foilage meant to hold beasts.": "An enclosure with simulated greenery and foilage meant to hold beasts.", + "Only the best for the best. A room full of torture tools and devices.": "Only the best for the best. A room full of torture tools and devices.", + "Several boxes worth of Obscura, Black Lethe, Kyxa... line it up.": "Several boxes worth of Obscura, Black Lethe, Kyxa... line it up.", + "A room meant for displaying trophies. May be purchased successive times.": "A room meant for displaying trophies. May be purchased successive times.", + "A larger, well-stocked cookery, complete with a number of Imperial Chef servants.": "A larger, well-stocked cookery, complete with a number of Imperial Chef servants.", + "All the bass one could ever imaginably need.": "All the bass one could ever imaginably need.", + "A study fit to hold a staggering amount of tomes and scrolls.": "A study fit to hold a staggering amount of tomes and scrolls.", + "A massive, ego boosting throne.": "A massive, ego boosting throne.", + "Though they start empty, you may capture and display your foes in these.": "Though they start empty, you may capture and display your foes in these.", + "A large body of water meant for excersize or relaxation.": "A large body of water meant for excersize or relaxation.", + "Deep beneath the surface of {0} {1} lays your ": "Deep beneath the surface of {0} {1} lays your ", + "secret lair. ": "secret lair. ", + "previously discovered lair. ": "previously discovered lair. ", + "It is massive": "It is massive", + ", the walls decorated with animal hides and leather. Among the copius body-trophies and bones are torches that hiss and spit. ": ", the walls decorated with animal hides and leather. Among the copius body-trophies and bones are torches that hiss and spit. ", + "- the main attraction is the rainbow-colored, lit up grid flooring which quickly change color. Far overhead are metal rafters. ": "- the main attraction is the rainbow-colored, lit up grid flooring which quickly change color. Far overhead are metal rafters. ", + ", the walls made up of sturdy blocks of stones. It is heavily decorated with wooden furniture, banners, and medieval weaponry. ": ", the walls made up of sturdy blocks of stones. It is heavily decorated with wooden furniture, banners, and medieval weaponry. ", + ", the walls made up of lightly-dusty stone. Mosaics and statues are abundant throughout, giving it that comfortable gothic feel. ": ", the walls made up of lightly-dusty stone. Mosaics and statues are abundant throughout, giving it that comfortable gothic feel. ", + "- at a glance it appears decorated like a factory. Those with a neural network see the lair as brightly colored and lit, full of knowledge, learning, and chapter iconography. ": "- at a glance it appears decorated like a factory. Those with a neural network see the lair as brightly colored and lit, full of knowledge, learning, and chapter iconography. ", + ", the walls made up of polished sandstone or marble. All throughout are chapter iconography and ancient symbols, wrought in gold. ": ", the walls made up of polished sandstone or marble. All throughout are chapter iconography and ancient symbols, wrought in gold. ", + " but nearly pitch-black inside. The only illumination is provided by loopy neon lux-casters, and strobes, which blast out light in random, flickering patterns. ": " but nearly pitch-black inside. The only illumination is provided by loopy neon lux-casters, and strobes, which blast out light in random, flickering patterns. ", + ". All of the surfaces are made up of highly polished stainless steel. An occasional small water fountain or plant decorates the place. ": ". All of the surfaces are made up of highly polished stainless steel. An occasional small water fountain or plant decorates the place. ", + " and almost civilian looking in nature- the walls are up of simple concrete or plaster. A thick carpet covers much of the floor.": " and almost civilian looking in nature- the walls are up of simple concrete or plaster. A thick carpet covers much of the floor.", + " The center chamber is dominated by ": " The center chamber is dominated by ", + "a massive throne, which you are currently seated upon. ": "a massive throne, which you are currently seated upon. ", + "a massive throne, though it is currently vacant. ": "a massive throne, though it is currently vacant. ", + "Heretical music blasts from the vox-casters, shaking the walls. ": "Heretical music blasts from the vox-casters, shaking the walls. ", + " Many of the tables have lines of white powder set on paper or bunches of needles. Plastic straws lay close by. ": " Many of the tables have lines of white powder set on paper or bunches of needles. Plastic straws lay close by. ", + "Imperial Chefs are currently bustling to and from the kitchen, cooking savory treats and food for those present. ": "Imperial Chefs are currently bustling to and from the kitchen, cooking savory treats and food for those present. ", + "The Imperial Chefs are mostly idle, making use of the other rooms and facilities. ": "The Imperial Chefs are mostly idle, making use of the other rooms and facilities. ", + " One of the chambers is hollowed out to display war trophies and gear. ": " One of the chambers is hollowed out to display war trophies and gear. ", + " One of the chambers holds war trophies from recent conquests. ": " One of the chambers holds war trophies from recent conquests. ", + " War trophies taken from several Xeno races are displayed in the Relic Room. ": " War trophies taken from several Xeno races are displayed in the Relic Room. ", + " Your Relic Room contains trophies and skulls, taken from every Xeno race. ": " Your Relic Room contains trophies and skulls, taken from every Xeno race. ", + " Your Relic Room contains trophies, skulls, and suits of armour taken from Xenos races. ": " Your Relic Room contains trophies, skulls, and suits of armour taken from Xenos races. ", + " Your Relic Room contains wargear and suits of armour from all races, several Adeptus Astartes suits included. ": " Your Relic Room contains wargear and suits of armour from all races, several Adeptus Astartes suits included. ", + " One of the chambers holds wargear and suits of armour from all races. A suit of Terminator armour is included, half of the armour taken off to reveal the inner workings.": " One of the chambers holds wargear and suits of armour from all races. A suit of Terminator armour is included, half of the armour taken off to reveal the inner workings.", + " Your Relic Room's trophies, skulls, and armours now spill out into the hallways, such is their number. ": " Your Relic Room's trophies, skulls, and armours now spill out into the hallways, such is their number. ", + " Many of the xenos war trophies and suits of armour are placed around the Lair, filling out spare surfaces. ": " Many of the xenos war trophies and suits of armour are placed around the Lair, filling out spare surfaces. ", + " In addition to the many war trophies your Relic Room also has small amounts of gold coins. ": " In addition to the many war trophies your Relic Room also has small amounts of gold coins. ", + " In addition to the many war trophies your Relic Room also has small piles of gold coins and clutter. ": " In addition to the many war trophies your Relic Room also has small piles of gold coins and clutter. ", + " In addition to the many war trophies your Relic Room also has sizeable piles of gold. ": " In addition to the many war trophies your Relic Room also has sizeable piles of gold. ", + " In addition to the many war trophies your Relic Room also has chests and cabinets full of gold. ": " In addition to the many war trophies your Relic Room also has chests and cabinets full of gold. ", + " In addition to the many war trophies your Relic Room also has chests full to the brim of gold and many precious gems. ": " In addition to the many war trophies your Relic Room also has chests full to the brim of gold and many precious gems. ", + " War trophies, chests of gold, precious gems, your lair has it all. ": " War trophies, chests of gold, precious gems, your lair has it all. ", + " War trophies, chests of gold, precious gems, your lair has it all, and in abundance. ": " War trophies, chests of gold, precious gems, your lair has it all, and in abundance. ", + " The abundant gold and gem piles have begun to spill out into the hallway. ": " The abundant gold and gem piles have begun to spill out into the hallway. ", + " The abundant gold and gems spill out into the hallway, your forces idly stepping across it. ": " The abundant gold and gems spill out into the hallway, your forces idly stepping across it. ", + " A sizeable portion of your lair is carelessly covered in gold coins, objects, and gems. ": " A sizeable portion of your lair is carelessly covered in gold coins, objects, and gems. ", + " Much of your lair is carelessly covered in gold coins, objects, and gems. ": " Much of your lair is carelessly covered in gold coins, objects, and gems. ", + " Your abundant wealth is evident in your lair- every surface and much of the floor smothered by gold or gems. ": " Your abundant wealth is evident in your lair- every surface and much of the floor smothered by gold or gems. ", + " Gold and gems are everywhere, occasionally attached to the walls and ceiling where able. ": " Gold and gems are everywhere, occasionally attached to the walls and ceiling where able. ", + " Gold and gems are EVERYWHERE. The main chamber in particular is a sea of gold and gems, especially deep at the corners. In all it is nearly three feet deep. Coins clink and settle as your forces walk through the room. ": " Gold and gems are EVERYWHERE. The main chamber in particular is a sea of gold and gems, especially deep at the corners. In all it is nearly three feet deep. Coins clink and settle as your forces walk through the room. ", + " Your lair has a forge, fit to be used by several astartes at once. ": " Your lair has a forge, fit to be used by several astartes at once. ", + " Your lair has a hippodrome, or garage, that holds luxury vehicles. ": " Your lair has a hippodrome, or garage, that holds luxury vehicles. ", + " One of the rooms is a well-stocked torture chamber. ": " One of the rooms is a well-stocked torture chamber. ", + " A large librarium makes up one of the wings, holding countless novels, books, scrolls, and documents on various topics. ": " A large librarium makes up one of the wings, holding countless novels, books, scrolls, and documents on various topics. ", + " Your lair has a beastarium, animals native to your homeworld living within. ": " Your lair has a beastarium, animals native to your homeworld living within. ", + " A large swimming pool with chapter-themed floaties is emplaced near the entrance. ": " A large swimming pool with chapter-themed floaties is emplaced near the entrance. ", + " One of the chambers holds several stasis pods for display. They are currently empty. ": " One of the chambers holds several stasis pods for display. They are currently empty. ", + "Cost:#": "Cost:#", + "A moderate sized secret Arsenal, this structure has ample holding area to store any number of artifacts and wargear. Chaos and Daemonic items will be sent here by your Master of Relics, and due to the secret nature of its existance, the Inquisition will not find them during routine inspections.": "A moderate sized secret Arsenal, this structure has ample holding area to store any number of artifacts and wargear. Chaos and Daemonic items will be sent here by your Master of Relics, and due to the secret nature of its existance, the Inquisition will not find them during routine inspections.", + "A moderate sized Arsenal, this structure has ample holding area to store any number of artifacts and wargear. Since being discovered it may no longer hide Chaos and Daemonic wargear from routine Inquisition inspections. You may wish to construct another Arsenal on a different planet.": "A moderate sized Arsenal, this structure has ample holding area to store any number of artifacts and wargear. Since being discovered it may no longer hide Chaos and Daemonic wargear from routine Inquisition inspections. You may wish to construct another Arsenal on a different planet.", + "A large facility with Gene-Vaults and additional spare rooms, this structure safely stores the majority of your Gene-Seed and is ran by servitors. Due to its secret nature you may amass Gene-Seed and Test-Slave Incubators without fear of Inquisition reprisal or taking offense.": "A large facility with Gene-Vaults and additional spare rooms, this structure safely stores the majority of your Gene-Seed and is ran by servitors. Due to its secret nature you may amass Gene-Seed and Test-Slave Incubators without fear of Inquisition reprisal or taking offense.", + "A large facility with Gene-Vaults and additional spare rooms, this structure safely stores the majority of your Gene-Seed and is ran by servitors. Since being discovered all the contents are known to the Inquisition. Your Gene-Seed remains protected but you may wish to build a new, secret one.": "A large facility with Gene-Vaults and additional spare rooms, this structure safely stores the majority of your Gene-Seed and is ran by servitors. Since being discovered all the contents are known to the Inquisition. Your Gene-Seed remains protected but you may wish to build a new, secret one.", + "Lair": "Lair", + "Customizable hideout that your forces may garrison into. The Lair may be upgraded further.": "Customizable hideout that your forces may garrison into. The Lair may be upgraded further.", + "Hidden armoury that stores unused Chaos and Daemonic artifacts, preventing them from discovery.": "Hidden armoury that stores unused Chaos and Daemonic artifacts, preventing them from discovery.", + "Hidden gene-vault that off-sources the majority of your Gene-Seed and Test-Slave Incubators.": "Hidden gene-vault that off-sources the majority of your Gene-Seed and Test-Slave Incubators.", + "Barbarian": "Barbarian", + "Disco": "Disco", + "Gothic": "Gothic", + "Prospero": "Prospero", + "Rave Club": "Rave Club", + "Steel": "Steel", + "Utilitarian": "Utilitarian", + "Heavy on leather, hides, and trophy body parts.": "Heavy on leather, hides, and trophy body parts.", + "Rainbow colored dance floor and steel rafters.": "Rainbow colored dance floor and steel rafters.", + "Lots of stone, metal filigree, and statues.": "Lots of stone, metal filigree, and statues.", + "Lightly-dusty stone, mosaics, and statues throughout.": "Lightly-dusty stone, mosaics, and statues throughout.", + "Grates, tubes, gears, and augmented reality.": "Grates, tubes, gears, and augmented reality.", + "Marble or sandstone surfaces and gold filigree.": "Marble or sandstone surfaces and gold filigree.", + "Large, open area with neon or strobe lights.": "Large, open area with neon or strobe lights.", + "Stainless steel surfaces and water fountains.": "Stainless steel surfaces and water fountains.", + "Plaster or concrete surfaces with carpeting.": "Plaster or concrete surfaces with carpeting.", + "{0} {1} {2}": "{0} {1} {2}", + "Once the time is right their target is ambushed {0} and tranquilized. ": "Once the time is right their target is ambushed {0} and tranquilized. ", + "Apothecarion": "Apothecarion", + ". Your most damaged vessel is the {0} - it has {1}% Hull Integrity.": ". Your most damaged vessel is the {0} - it has {1}% Hull Integrity.", + " Two of your ships are highly damaged. You may wish to purchase a Repair License from the Sector Governerner.": " Two of your ships are highly damaged. You may wish to purchase a Repair License from the Sector Governerner.", + " Several of your ships are highly damaged. It is advisable that you purchase a Repair License from the Sector Governer.": " Several of your ships are highly damaged. It is advisable that you purchase a Repair License from the Sector Governer.", + "\n\nHere are the current positions of your ships and their contents:": "\n\nHere are the current positions of your ships and their contents:", + "Your Chapter currently has no Neophytes - you are at maximum strength and do not require more marines.": "Your Chapter currently has no Neophytes - you are at maximum strength and do not require more marines.", + "Your Chapter currently has no Neophytes. Without training more your chapter is doomed to a slow death.": "Your Chapter currently has no Neophytes. Without training more your chapter is doomed to a slow death.", + "Your Chapter currently has no Neophytes. You are doing your utmost best to find suitable recruits.": "Your Chapter currently has no Neophytes. You are doing your utmost best to find suitable recruits.", + "Your Chapter currently has one recruit being trained. The Neophyte's name is {0} and they are scheduled to become a battle brother in {1} months' time.": "Your Chapter currently has one recruit being trained. The Neophyte's name is {0} and they are scheduled to become a battle brother in {1} months' time.", + "Your Chapter currently has {0} recruits being trained. {1} is the next scheduled Neophyte to become a battle brother in {2} months' time.": "Your Chapter currently has {0} recruits being trained. {1} is the next scheduled Neophyte to become a battle brother in {2} months' time.", + "\n{0}. You must only give me the word and I can begin further increasing your numbers... though this would violate the Codex Astartes.": "\n{0}. You must only give me the word and I can begin further increasing your numbers... though this would violate the Codex Astartes.", + "\n{0}. You must only give me the word and I can begin further increasing your numbers.": "\n{0}. You must only give me the word and I can begin further increasing your numbers.", + "\nMutation of your gene-seed currently makes you unable to recruit new Neophytes. You are doomed to a slow demise unless the Apothecaries can fix it.": "\nMutation of your gene-seed currently makes you unable to recruit new Neophytes. You are doomed to a slow demise unless the Apothecaries can fix it.", + "\nThere is no more gene-seed in your vaults and you cannot create more neophytes as a result. Something must be done, Chapter Master.": "\nThere is no more gene-seed in your vaults and you cannot create more neophytes as a result. Something must be done, Chapter Master.", + "\nYou're recruiting from one world - {0}.": "\nYou're recruiting from one world - {0}.", + "\nYou're recruiting from two worlds. Finding recruits is vastly accelerated.": "\nYou're recruiting from two worlds. Finding recruits is vastly accelerated.", + "\nYou're recruiting from several worlds.": "\nYou're recruiting from several worlds.", + "Scattered": "Scattered", + "aboard {0}": "aboard {0}", + "various ships orbiting {0}": "various ships orbiting {0}", + "various planets in {0}": "various planets in {0}", + "system {0}": "system {0}", + "Medium": "Medium" } diff --git a/datafiles/lang/zh.json b/datafiles/lang/zh.json index b755b97252..6e270c5b2e 100644 --- a/datafiles/lang/zh.json +++ b/datafiles/lang/zh.json @@ -54,7 +54,7 @@ "Homeworld\nYour Chapter has a homeworld that they base on. Contained upon it is a massive Fortress Monastery, which provides high levels of defense and automated weapons.": "母星\n你的战团拥有一座作为根据地的母星。其上建有宏伟的修道院堡垒,提供高水平的防御和自动化武器。", "Horrible": "极差", "How diplomatic your Chapter is. \nA low score will lower starting dispositions of Imperial factions and make disposition increases less likely to occur.": "你的战团的外交手腕。\n低分值会降低帝国内各势力的初始好感度,并使好感度更难提升。", - "How easily new mutations and corruption can occur with your Chapter's gene-seed. \nAffects the amount of random mutations your existing Space Marines have, and the amount new Aspirants get after the implantation is finished.": "你的战团基因种子发生新突变与腐化的容易程度。\n影响现有星际战士的随机突变数量,以及新试炼者在完成植入后获得的突变数量。", + "How easily new mutations and corruption can occur with your Chapter's gene-seed. \nAffects the amount of random mutations your existing Space Marines have, and the amount new Aspirants get after the implantation is finished.": "你的战团基因种子发生新突变与腐化的几率。\n影响现有星际战士的随机突变数量,以及新试炼者在完成植入后获得的突变数量。", "How many inherent mutations your gene-seed has. \nEach score below ten requires one mutation to be chosen.": "你的基因种子自带多少突变。\n每低于十分一点的属性都要求选择一项突变。", "How many Space Marines your Chapter has. \nFor every score below five a company will be removed; conversely, each score higher grants 50 additional Astartes.": "你的战团拥有多少星际战士。\n每低于五分一点即减少一个连队;反之,每超过一分即额外获得 50 名阿斯塔特。", "Increase": "提升", @@ -302,14 +302,14 @@ "Veteran Sergeant Markers": "老兵士官标记", "Weapon": "武器", "Weapon: {0}": "武器:{0}", - "Battle Barge": "战列舰", + "Battle Barge": "战斗驳船", "Flagship": "旗舰", "Homeworld Rule": "母星统治方式", "Instead of a Planetary Governer the planet is broken up into many countries or clans. The people are less united but happier, and see your illusive Astartes as semi-divine beings.": "这颗星球并非由行星总督统治,而是分裂为众多国家或部族。民众虽不那么团结,却更为快乐,并将神出鬼没的阿斯塔特们视为半神。", "Passive Supervision": "被动监管", "Personal Rule": "个人统治", "Planetary Governer": "行星总督", - "Recruiting World": "招募世界", + "Recruiting World": "征兵世界", "The name of your Flagship Battle Barge.": "你的旗舰战斗驳船的名称。", "The world that your Chapter selects recruits from. More harsh worlds provide recruits with more grit and warrior mentality. If you are a homeworld-based Chapter, you may uncheck 'Recruiting World' to recruit from your homeworld instead.": "你的战团选择招募新兵的世界。更严酷的世界会为招募者提供更多坚韧与战士心性。如果你是母星型战团,可以取消勾选“招募世界”改为从母星招募。", "The world that your Chapter's Fortress Monastery is located upon. More civilized worlds are more easily defensible but the citizens may pose a risk or be a nuisance.": "你的战团修道院堡垒所在的世界。越文明的世界越易于防御,但公民可能构成威胁或带来麻烦。", @@ -468,5 +468,767 @@ "White": "白色", "Yellow": "黄色", "Error Loading Chapter": "战团加载错误", - "No json file exists for chapter id {0} and name {1}": "不存在战团 id 为 {0}、名称为 {1} 的 JSON 文件" + "No json file exists for chapter id {0} and name {1}": "不存在战团 id 为 {0}、名称为 {1} 的 JSON 文件", + "System": "星系", + "Attack": "进攻", + "Raid": "掠夺", + "Bombard": "轰炸", + "Purge": "净化", + "Cyclonic Torpedo": "旋风鱼雷", + "Build": "建造", + "Base": "基地", + "Arsenal": "军械库", + "Gene-Vault": "基因宝库", + "+Recruiting": "+招募", + "Select Destination": "选择目的地", + "Garrison Report": "驻军报告", + "Garrison Leader {0}": "驻军领袖 {0}", + "Planetary Defence : {0}": "行星防御 :{0}", + "Garrison Disposition Effect : Positive": "驻军好感度影响 :正面", + "Garrison Disposition Effect : Neutral": "驻军好感度影响 :中立", + "Garrison Disposition Effect : Negative": "驻军好感度影响 :负面", + "Population Report": "人口报告", + "Select Fleet Combat": "选择舰队交战", + "{0} Management": "{0} 管理", + "Manage Units": "管理部队", + "Debug": "调试", + "Debug options": "调试选项", + "Edit Forces": "编辑部队", + "Add Problem": "添加问题", + "Add Feature": "添加特性", + "Request Colonists": "请求殖民者", + "Recruiting": "招募", + "Recruitment Type": "招募类型", + "RQD": "降低招募", + "RQU": "提高招募", + "Enable recruiting": "启用招募", + "Change recruitment type": "更改招募类型", + "Deaccelerate recruitment": "减缓招募", + "Accelerate recruitment with req": "消耗征用点加速招募", + "Planets with higher populations can provide more recruits both for your chapter and to keep a planets PDF bolstered, however colonists from other planets bring with them their home planets influences and evils \nREQ : 1000": "人口越多的星球能为你战团提供更多新兵,\n也能维持该星球防御部队的规模。然而,来自\n其他星球的殖民者会带来他们母星的影响\n征用 :1000", + "Marine Garrison in system": "星系中有星际战士驻军", + "Disposition: {0}/100": "好感度:{0}/100", + "Disposition: ???/100": "好感度:???/100", + "Disposition: N/A": "好感度:不适用", + "War of _Succession": "继承战争(进行中)", + "Population Influence": "人口影响力", + "{0} {1} ({2})": "{0} {1} ({2})", + "{0} (Craftworld)": "{0}(方舟世界)", + "Space Hulk": "太空废船", + "Population: {0}": "人口:{0}", + "population data toggle with 'P'": "按 'P' 切换人口数据", + "Imperial Guard: {0}": "星界军:{0}", + "Defense Force: {0}": "防御部队:{0}", + "Gue'Vesa Force: {0}": "钛协军: {0}", + "Defenses: {0}": "防御:{0}", + "Integrity: {0}%": "结构完整性:{0}%", + "Corruption: {0}": "腐化值:{0}", + "Planetary Presence": "行星兵力", + "Planetary Features": "行星特征", + "DEBUG: Heresy below 0!": "调试:异端值低于 0!", + "DEBUG: Heresy above 100!": "调试:异端值高于 100!", + "DEBUG: Heresy somehow unknown value!": "调试:异端值未知!", + "Can't garrison on non-friendly planet or planet with no friendly PDF": "无法在非友好星球或无友军防御部队的星球驻军", + "Abduct": "绑架", + "Open: Voluntery": "公开 :自愿", + "Covert: Voluntery": "秘密 :自愿", + "Req:{0}": "征用:{0}", + "Craftworld": "方舟世界", + "Sparse": "稀疏", + "Light": "轻微", + "Moderate": "中等", + "Heavy": "严重", + "Major": "重大", + "Extreme": "极端", + "Little": "少许", + "Maximum": "最大", + "Adeptas": "战斗修女", + "Tau": "钛族", + "Tyranids": "泰伦虫族", + "Daemons": "恶魔", + "Necrons": "太空死灵", + "Minima": "最少", + "Parvus": "较少", + "Moderatus": "中等", + "Significus": "较多", + "Enormicus": "巨大", + "Extremis": "极大", + "Small": "小型", + "Large": "大型", + "{0} Chapter Forge": "{0} 战团锻炉", + "{0} Audience": "{0} 觐见", + "{0}: {1} ({2})\n": "{0}:{1}({2})\n", + "All of the successors for {0} are removed or otherwise made indisposed. Paperwork is slightly altered. Rather than any sort of offical one of your Chapter Serfs is installed as the Planetary Governor. The planet is effectively under your control.": "{0} 的所有继任者均被清除或以其他方式失去资格。公文被稍加改动。行星总督由你的一名战团仆役接任,而非任何官方人选。这颗星球实际上已处于你的掌控之下。", + "Many of the successors for {0} are removed or otherwise made indisposed. Your chapter ensures that the new Planetary Governor is sympathetic to your plight and more than willing to heed your advice. A powerful new ally may be in the making.": "{0} 的众多继任者均被清除或以其他方式失去资格。你的战团确保新任行星总督对你的处境抱有同情,并乐于听从你的建议。一位强大的新盟友也许正在崛起。", + "Planetary Governor of {0} assassinated. A more suitable Governor is installed.": "{0} 的行星总督遭刺杀。一位更合适的总督走马上任。", + "Planetary Governor of {0} assassinated. One of your Chapter Serfs take their position.": "{0} 的行星总督遭刺杀。你的一名战团仆役接替其职位。", + "Your Astartes descend upon the surface of {0} and plot the movements and schedule of the governor. ": "你的阿斯塔特降临 {0} 地表,暗中刺探总督的行踪与日程。 ", + "in their home": "在家中", + "in the streets": "在街头", + "while driving": "乘车途中", + "taking a piss": "如厕之际", + "They are brought to the already-prepared facilities for Fallen, tortured to make {0} appear a heretic, and then incinerated. ": "他们被带到为堕天使准备的设施中,经酷刑折磨使 {0} 看起来像一名异端,随后被焚化。 ", + "{0} is tossed to the Fenrisian Wolves and viciously mauled, torn apart, and eaten. The beasts leave nothing but bloody scraps. ": "{0} 被抛给芬里斯群狼,惨遭撕咬、撕碎并吞噬。野兽们只留下一片血肉模糊的残渣。 ", + "{0} is stuck in with the other criminals, and scum, to be turned into a servitor. Soon nothing remains that could be likened to the former Governor. ": "{0} 与其他罪犯和渣滓一同被投入改造,即将变成一名伺服机械奴工。用不了多久,就再找不到任何能与昔日总督相似之处。 ", + "Things get out of hand, and the Governor is torn limb from limb and consumed. {0}flesh is torn off and eaten, bone pulverized, and marrow sucked free. ": "事态失去控制,总督被生撕四肢、分而食之。{0}的皮肉被撕下吞食,骨骼被碾碎,骨髓被吸干。 ", + "Your battle brother chops apart the Governor and eats a sizeable portion of {0} flesh, focusing upon the eyes, teeth, and fingers. Once full the rest is disposed of. ": "你的战斗兄弟将总督大卸八块,大快朵颐地享用 {0} 的血肉,专挑眼睛、牙齿与手指下口。饱餐之后,残躯便被处理掉了。 ", + "Their still-living body is disintegrated by acid. ": "他们尚存一息的身躯被酸液溶解殆尽。 ", + "The Governor is jettisoned into the local star at the first opportunity. ": "总督被第一时间抛入当地的恒星之中。 ", + "{0} is burned as fuel for one of your vessels. ": "{0} 被当作燃料,烧给麾下的一艘舰船。 ", + "A few grenades is all it takes to blow {0} body to smithereens. ": "只需几枚手雷,就能把 {0} 的身体炸成碎片。 ", + "{0} is executed in a mundane fashion and buried. ": "{0} 被以寻常的方式处决并埋葬。 ", + "What is thy will?": "汝意如何?", + "Planetary Governor Assassinated": "行星总督遭刺杀", + "Allow the official successor to become Planetary Governor.": "允许官方继任者成为行星总督。", + "Ensure that a sympathetic successor will be the one to rule.": "确保一位抱持同情的继任者上台统治。", + "Remove all successors and install a loyal Chapter Serf.": "清除所有继任者,扶植一名忠诚的战团仆役。", + "sabotage force on {0} disrupts ork forces": "{0} 上的破坏部队扰乱了兽人部队", + "{0} departs {1} as his waaagh gains momentum": "{0} 乘着Waaagh!声势正盛之际离开 {1}", + "The Chapter has run out of gene-seed!": "战团的基因种子已耗尽!", + "Recruitment on {0} halted due to insufficient apothecary rescources": "因药剂师资源不足,{0} 上的招募已中止", + "Ancient ship repairs {0}% complete": "古代舰船修复进度 {0}%", + "{0} Requision spent on Ancient Ship repairs in materials and outfitting (outfitting {1}%)": "已花费 {0} 征用点用于古代舰船的材料与装配修复(装备进度 {1}%)", + "Ancient Ship Restored": "古代舰船修复完毕", + "The ancient ship within the ruins of {0} has been fully repaired. It is determined to be a Gloriana Class vessel and is bristling with golden age weaponry and armour. Your {1}s are excited; the Slaughtersong is ready for it's maiden voyage, at your command.": "{0} 废墟中的古代舰船已完全修复。经鉴定,这是一艘荣光女王级战列舰,满载着黄金时代的武器与装甲。你的{1}们兴奋不已;「屠戮之歌」已备好首航,听候你的号令。", + "sabotage force on {0} disrupts necron forces": "{0} 上的破坏部队扰乱了死灵部队", + "A hidden Genestealer Cult on {0} Has suddenly burst forth from hiding!": "{0} 上一个隐藏的基因窃取者教团突然自藏身处爆发!", + "A hidden Genestealer Cult on {0} Has been discovered by marine garrisons!": "{0} 上一个隐藏的基因窃取者教团被星际战士驻军发现!", + "System Lost": "星系沦陷", + "A hidden Genestealer Cult on {0} has Started a revolt.": "{0} 上一个隐藏的基因窃取者教团发动了叛乱。", + "{0} has fallen to heretics!": "{0} 已落入异端之手!", + "{0} PDF killed in a rebellion on {1}.": "{0} 名防御部队士兵在 {1} 上的叛乱中阵亡。", + "Heretic cults have appeared in {0}.": "{0} 上出现了异端教团。", + "Marine garrisons prevents rebellion on {0}": "星际战士驻军阻止了 {0} 上的叛乱", + "Heretic cults have spread around {0}.": "异端教团已在 {0} 各地蔓延。", + "Heretic Revolt": "异端叛乱", + "A massive heretic uprising on {0} threatens to plunge the star system into chaos.": "{0} 上爆发的大规模异端起义,恐将整个星系拖入混乱。", + "Massive heretic uprising on {0}.": "{0} 上爆发大规模异端起义。", + "Daemonic incursion on {0}!": "{0} 遭到恶魔入侵!", + "War of Succession": "继承战争", + "The planetary governor of {0} has died. Several subordinates and other parties each claim to be the true heir and successor- war has erupted across the planet as a result. Heresy thrives in chaos.": "{0} 的行星总督已经去世。多名下属与其他势力均宣称自己是真正的继承人与继任者——一场战争由此席卷整个星球。混乱之中,异端滋生蔓延。", + "War of Succession on {0}": "{0} 爆发继承战争", + "Hunt the Fallen": "追猎堕天使", + "Sources indicate one of the Fallen may be upon {0}. We have {1} months to send out a strike team and scour the planet. Any longer and any Fallen that might be there will have escaped.": "情报显示,一名堕天使可能就在 {0} 上。我们只有 {1} 个月的时间派出突击队彻底搜查该星球。再拖下去,那里可能存在的堕天使就会逃之夭夭。", + "Sources indicate one of the Fallen may be upon {0}. We have {1} months to investigate.": "情报显示,一名堕天使可能就在 {0} 上。我们有 {1} 个月的时间展开调查。", + "Capitals": "主力舰", + "Frigates": "巡洋舰", + "Escorts": "护航舰", + "Location": "位置", + "Lost": "失联", + "Crusading": "远征中", + "Warp Travel": "亚空间航行", + "left click to view": "左键查看", + "forge point\ntotal": "锻造点\n总量", + "forge point\nuse": "锻造点\n已用", + "apothecary\npoint total": "药剂师\n点总量", + "apothecary\npoint use": "药剂师\n点已用", + "Orbiting": "环绕中", + "Deliver Trophy Guard": "护送战利品", + "Mission": "任务", + "Time\nRemaining": "剩余\n时间", + "Troops": "部队", + "Healers": "治疗者", + "Techies": "技师", + "Manage": "管理", + "Fleets": "舰队", + "System Troops": "星系部队", + "Missions": "任务", + "Show": "显示", + "Hide": "隐藏", + "View {0}": "查看 {0}", + "Planets": "行星", + "Planets\nRequesting Help": "请求援助的\n行星", + "View fleet at {0}": "查看位于 {0} 的舰队", + "View fleet": "查看舰队", + "Remaining\nGuard": "剩余\n卫队", + "click to view {0} system": "点击查看 {0} 星系", + "Name": "名称", + " Owner ": "归属方", + " Owner\nStatus ": "归属方\n状态", + "Help Requests": "求助请求", + "Navy Fleets": "帝国海军舰队", + "Forge Worlds": "铸造世界", + "You are to have {0} deliver trophy hunted on {1} to the {1} regiments\n\nLeft click to see target fleet intercept system right click to view the trophy bearing marine {0}": "你将派遣 {0} 将在 {1} 猎得的战利品送往 {1} 团\n\n左键查看目标舰队的拦截星系,右键查看携带战利品的战士 {0}", + "Hail My lord.##": "领主万岁。##", + "Report for garrison on {0} {1} is as follows#": "关于驻军于 {0} {1} 的报告如下#", + "The garrison is comprised of {0} squads,": "驻军由 {0} 支战斗小队组成,", + "The garrison is comprised of a single squad,": "驻军由一支战斗小队组成,", + " with a total man count of {0}.#": "总兵力达 {0} 人。#", + "Our Relationship with the Rulers of the planet is {0}#": "我们与该星球统治者的关系:{0}#", + "Rule of the planet is going well": "星球的统治状况良好", + "Your rule of the the planet is being undermined by hostile forces": "你对这颗星球的统治正遭敌对势力暗中破坏", + "DEBUG: planet owner check failed": "调试:星球所有者检查失败", + "Ruled": "已被统治", + "DEBUG: Numbers lower than -100 detected, this shouldn't happen!": "调试:检测到低于 -100 的数值,这不应发生!", + "Extremely Hostile": "极度敌对", + "Very Hostile": "非常敌对", + "Hostile": "敌对", + "Uneasy": "警惕不安", + "Friendly": "友好", + "Very Friendly": "非常友好", + "Excellent": "十分融洽", + "Unquestionable": "绝对忠诚", + "DEBUG: Numbers higher than 100, this shouldn't happen!": "调试:数值高于 100,这不应发生!", + "Planet Defences:X{0}#": "行星防御:X{0}#", + "Garrison Bonus:X{0}#": "驻军加成:X{0}#", + " Siege Masters:X2#": " 攻城大师:X2#", + " Garrison Leader Bonus:X{0}(WIS/30)#": " 驻军领袖加成:X{0}(WIS/30)#", + "PDF Defence: {0}#": "行星防御部队:{0}#", + "SELECT DESTINATION": "选择目的地", + "Garrison forces on......": "驻军部队概要……", + "Held breach": "独守缺口", + "Single Handedly held a breach in the {0} during the {1} {2} of {3} {4} from the Orks": "在{0}与兽人的战斗中,于{3} {4}的{1} {2}中,他独自一人死守一处缺口", + "Was pullled from beneath the carcesses of his slain {0} during the {1} {2} of {3} {4} from the Orks": "在{0}与兽人的战斗中,{3} {4}的{1} {2}之后,他被从阵亡的{0}将士尸骸堆下拖了出来", + "Player": "玩家", + "Imperium": "帝国", + "Mechanicus": "机械神教", + "Ork": "兽人", + "Genestealers": "基因窃取者", + "Allied": "同盟", + "Antagonism": "敌对", + "War": "战争", + "Chapter Management": "战团管理", + "Chapter Settings": "战团设置", + "Apothecarium": "药剂师修会", + "Reclusium": "隐修室", + "Librarium": "智库", + "Armamentarium": "军械库", + "Recruitment": "招募", + "Fleet": "舰队", + "Diplomacy": "外交", + "Event Log": "事件日志", + "End Turn": "结束回合", + "Help": "帮助", + "Sector {0}": "星区 {0}", + "Loyal": "忠诚", + "{0}% Penitent": "{0}% 赎罪", + "Renegade": "变节", + "Sector Fleet Strength {0}/{1}": "星区舰队实力 {0}/{1}", + "The relative strength of the imperial navy and defence fleet forces and their max supported strength. Increase The number of imperial aligned planets and active forge worlds to increase the limit": "帝国海军与防御舰队当前的实力及其最大可支撑实力。增加帝国控制的行星与活跃铸造世界的数量可提升上限", + "DEBUG MODE": "调试模式", + "Ships Repaired": "舰船已修复", + "In accordance with the Imperial Repair License, all {0} ships orbiting friendly planets have been repaired. Note that repaired ships, and their fleets, are unable to act further this turn.": "依据帝国修复许可,所有环绕友好行星的 {0} 舰船均已修复。请注意,修复后的舰船及其舰队本回合将无法再行动。", + "Flagship Bridge": "旗舰舰桥", + "Master of the Fleet {0}": "舰队统领 {0}", + "Greetings, Chapter Master.\n\nYou requested a report? Our fleet contains ": "战团长您好。\n\n您要求一份报告?我方舰队现拥有 ", + "Adept {0}": "贤者 {0}", + "Your fleet contains ": "您的舰队现拥有 ", + "{0} Capital Ships, ": "{0} 艘主力舰,", + "{0} Frigates, and ": "{0} 艘护卫舰,以及", + "{0} Escorts": "{0} 艘护航舰", + ", none of which are damaged.": ",均未受损。", + ". Our most damaged vessel is the {0} - it has {1}% Hull Integrity.": "。我方受损最严重的舰船是 {0}——其船体完整度为 {1}%。", + " Two of our ships are highly damaged. You may wish to purchase a Repair License from the Sector Governerner.": " 我方有两艘舰船受损严重。您或可向星区总督购买修复许可。", + " Several of our ships are highly damaged. It is advisable that you purchase a Repair License from the Sector Governer.": " 我方有多艘舰船受损严重。建议您向星区总督购买修复许可。", + "\n\nHere are the current positions of our ships and their contents:": "\n\n以下是我方各舰船的当前位置及载员情况:", + "Class": "舰级", + "HP": "生命", + "Carrying": "载员", + "Carrying ({0}): {1}": "载员({0}):{1}", + "Health: {0}/{1}": "生命:{0}/{1}", + "Shields: {0}": "护盾:{0}", + "Armour: {0},{1}": "装甲:{0},{1}", + "Speed: {0}": "航速:{0}", + "Turrets: {0}": "炮塔:{0}", + "-{0} ({1})": "-{0}({1})", + "Strike Cruiser": "打击巡洋舰", + "Gladius": "格拉迪乌斯级", + "Hunter": "猎手级", + "Squad has no current assignments": "小队当前无任何任务", + "Assignment : {0}": "任务 :{0}", + "Cancel Assignment": "取消任务", + "View Garrison": "查看驻军", + "Squad Leader : {0}": "小队队长 :{0}", + "Squad Members : {0}": "小队成员 :{0}", + "Squad Location : {0}": "小队位置 :{0}", + "Squad will deploy in the": "小队将部署为", + "column": "纵队", + "Garrison Duty": "驻军任务", + "Having squads assigned to Garrison Duty will increase relations with a planet over time, it will also bolster planet defence forces in case of attack, and reduce corruption growth. Press G to toggle": "将小队指派为驻军任务会随时间提升与该星球的关系,遇袭时也会增强行星防御力量,并降低腐化增长。按 G 切换", + "Sabotage": "破坏任务", + "Sabotage missions can reduce enemy growth while avoiding direct enemy contact however they are not without risk.": "破坏任务可在避免与敌军直接接触的同时削弱敌军发展,但并非毫无风险。", + "Reset Squad Loadout": "重置小队装备", + "Allow mass equip": "允许批量装备", + "Select Squad": "选择小队", + "De-select Squad": "取消选择小队", + "Press Left arrow to toggle": "按左箭头键切换", + "Press tab to toggle": "按 Tab 键切换", + "garrison": "驻守", + "sabotage": "破坏", + "Health damage taken by the marine is reduced by this percentage. This happens after the flat reduction from armor.\n\nContributing factors:\n": "星际战士受到的伤害会按此百分比减免,计算发生在护甲固定减伤之后。\n\n影响因素:\n", + "{0}: {1}%\n": "{0}:{1}%\n", + "CON: {0}%": "体质:{0}%", + "A measure of how much punishment the creature can take. Marines can go into the negatives and still survive, but they'll require a bionic to become fighting fit once more.\n\nContributing factors:\n": "衡量生物能够承受的伤害程度。星际战士的生命值可为负并仍存活,但需要仿生改造才能再次达到作战状态。\n\n影响因素:\n", + "CON: {0}\n": "体质:{0}\n", + "Reduces incoming damage at a flat rate. Certain enemies may attack in ways that may bypass your armor entirely, for example power weapons and some warp sorceries.\n\nContributing factors:\n": "以固定数值减免受到的伤害。某些敌人可能以完全绕过护甲的方式攻击,例如动力武器和部分亚空间巫术。\n\n影响因素:\n", + "STC Bonus: x1.05\n": "STC 加成:x1.05\n", + "==Experience==\nA measurement of how battle-hardened the unit is. Provides various bonuses across the board. Every 15 EXP, a new stat is assigned. Hover over the unit's stats in the marine profile to see projected growth over time.": "==经验==\n衡量该单位身经百战的程度。全面提供各种加成。每积累 15 点经验,便会分配一项新属性。将鼠标悬停在星际战士档案中的属性上,可查看预期的成长趋势。", + "==Melee Attack==\n{0}": "==近战攻击==\n{0}", + "==Melee Burden==\n{0}": "==近战负重==\n{0}", + "==Ranged Attack==\n{0}": "==远程攻击==\n{0}", + "==Ranged Burden==\n{0}": "==远程负重==\n{0}", + "Bionic Augmentation is something a unit can do to both enhance their capabilities, but also replace a missing limb to get back into the fight.": "仿生改造既能增强单位的能力,也能替换缺失的肢体,使其重返战场。", + "\nThere is a limit of 10 Bionic augmentations. After that the damage is so extensive that a marine requires a dreadnought to keep going.": "\n仿生改造上限为 10 处。超过之后,损伤已严重到需要无畏机甲才能继续战斗的程度。", + "\nFor everyone else? It's time for the emperor's mercy.": "\n至于其他人?是时候接受帝皇的仁慈了。", + "\n\nCurrent Bionic Augmentations:\n": "\n\n当前仿生改造部位:\n", + "Bionic {0}": "仿生{0}", + " (CON: +2 STR: +1 DEX: -2)\n": "(体质:+2 力量:+1 敏捷:-2)\n", + " (CON: +1 WIS: +1 DEX: +1)\n": "(体质:+1 智慧:+1 敏捷:+1)\n", + " (CON: +2 STR: +2 WS: -1)\n": "(体质:+2 力量:+2 武技:-1)\n", + " (CON: +4 STR: +1 DEX: -1)\n": "(体质:+4 力量:+1 敏捷:-1)\n", + " (CHA: -1)\n": "(魅力:-1)\n", + " (CON: +1)\n": "(体质:+1)\n", + "Left Leg": "左腿", + "Right Leg": "右腿", + "Left Eye": "左眼", + "Right Eye": "右眼", + "Left Arm": "左臂", + "Right Arm": "右臂", + "Torso": "躯干", + "Throat": "喉咙", + "Jaw": "下颌", + "Head": "头部", + "{0} Company": "{0}连", + "Headquarters": "总部", + "Unknown": "未知", + "{0}, {1}": "{0},{1}", + "Make Sgt": "任命士官", + "{0} Company Captain Candidates": "{0}连连长候选", + "New Captain Required": "需要新连长", + "{0} Company Champion Candidates": "{0}连冠军候选", + "Champion Required": "需要冠军", + "{0} Company Ancient Candidates": "{0}连旗手候选", + "Ancient Required": "需要旗手", + "{0} Company Chaplain Candidates": "{0}连牧师候选", + "Chaplain Required": "需要牧师", + "{0} Company Apothecary Candidates": "{0}连药剂师候选", + "Apothecary Required": "需要药剂师", + "{0} Company Tech Marine Candidates": "{0}连技术军士候选", + "Tech Marine Required": "需要技术军士", + "{0} Company Librarian Candidates": "{0}连智库馆长候选", + "Librarian Required": "需要智库馆长", + "{0} {1}": "{0} {1}", + "''{0}''": "「{0}」", + "{0} / {1} Space Used": "已用空间 {0} / {1}", + "Click a Ship to Load Selection (Req. {0} Space)": "点击舰船装载所选单位(需 {0} 空间)", + "Re-equip": "重新装备", + "Promote": "晋升", + "Jail": "监禁", + "Add Bionics": "添加仿生", + "Set Boarder": "设为登舰队", + "Reset": "重置", + "Transfer": "调动", + "Move Ship": "移动舰船", + "Manage Tags": "管理标签", + "Unload": "卸载", + "Reload": "重载", + "Selection: {0} space": "选择:{0} 空间", + "Select All": "全选", + "Filter Mode": "过滤模式", + "All Infantry": "全部步兵", + "All Vehicles": "全部载具", + "Press Shift E": "按 Shift+E", + "Press Shift P": "按 Shift+P", + "Press Shift J": "按 Shift+J", + "Press Shift B": "按 Shift+B", + "Press Shift Q": "按 Shift+Q", + "Press Shift R": "按 Shift+R", + "Press Shift T": "按 Shift+T", + "Press Shift M": "按 Shift+M", + "Press Shift F": "按 Shift+F", + "Press Shift L": "按 Shift+L", + "==Psychic Stats==\n{0}": "==灵能属性==\n{0}", + "{0}\n{1}% Corruption.": "{0}\n腐化值 {1}%。", + "Ship Management": "舰船管理", + "Squad View": "小队视图", + "Company View": "连队视图", + "Show Profile": "显示档案", + "Hide Profile": "隐藏档案", + "Show Bio": "显示生平", + "Hide Bio": "隐藏生平", + "DIPLOMATIC DISASTER": "外交灾难", + "Apothecaries at {0} has been spotted doing suspicious activities!": "{0} 上的药剂师被发现正在进行可疑活动!", + "Blood Duels are efficient in time, but costly in risk with gene material. Gene-seed has been lost.": "血斗在时间上高效,但代价是基因物质的损失风险。部分基因种子已丢失。", + "THE BLOOD DUEL? HA DO I EVEN NEED TO EXPLAIN, CHAPTER MASTER? ASPIRANTS ENTER. NEOPHYTES LEAVE. Those worthy of serving the Emperor are rewarded justly and those merely pretending at glory are lost in the BLOOD AND THUNDER of the dome. Do not be alarmed at the carnage. The Apothecarium has become quite adept at rebuilding those fit to serve. The others are given to the {0}s. The mind is a terrible thing to waste and the Emperor does hate waste. Not every man is useful as an Astartes but every man is useful.": "血斗?!战团长,这还需要我解释吗?候选者入内,新兵出关。\n那些配得上侍奉帝皇之人将得到公正的奖赏,\n而那些只图虚名之辈,则陨落于角斗场的血与雷之中。\n勿为这场屠戮惊惶——药剂师室已精于此道,\n能将堪用之人重新拼装。其余人则交由{0}处理。\n浪费头脑是可怕之事,而帝皇最憎恶浪费。\n并非人人堪当阿斯塔特,但人人皆有用武之地。", + "To be an Astartes is to be a hunter of xenos, of traitors, of heretics, and of all those that dare defy the Emperor. What better way to test the worthiness of Aspirants than to have to them hunt the most dangerous predator to be found on their planet? Such a task requires a combination of wits and cunning, in addition to raw martial skill. When they have received the blessed geneseed and become full battle brothers, they will hunt across the stars with bolter and chainsword. For now, let them hunt with nothing more than a spear and their wits.": "成为一名阿斯塔特,即是成为异形、叛徒、异端,\n以及一切胆敢违逆帝皇之人的猎手。还有什么比让候选者\n去猎杀其母星上最危险的掠食者,更能考验其资格的呢?\n此等任务既需智谋与狡黠,亦需纯粹的战斗技巧。\n待他们获得受祝福的基因种子、成为真正的战斗兄弟之后,\n将携爆弹枪与链锯剑纵横星海。而如今,只让他们以一根\n长矛与自身才智去猎杀吧。", + "To become one of the Imperium’s finest warriors, the Space Marines, is the greatest glory that any human can aspire to. And is glory not worth fighting, bleeding or even dying for? It must be, for whole worlds of ice, ash and sand have buried generations of sons in pursuit of this glory and never once called the price too dear. To ensure the necessary bloodshed, lies, paranoia and psychosis-inducing drugs have been introduced to . This trial will seperate the weak from the strong and the chaff from the wheat.": "成为帝皇麾下最精锐的战士——星际战士,\n是任何人都能企望的最高荣耀。而荣耀难道不值得为之奋战、\n流血甚至牺牲吗?必定值得,因为无数冰原、灰烬与沙海世界,\n为了追寻这份荣耀埋葬了一代又一代的儿子,\n却从未嫌代价过高。为确保必要的杀戮,谎言、偏执与诱发\n精神错乱的药物被引入……此试炼将弱者与强者、\n糟粕与精华区分开来。", + "Few worlds of the Imperium are free from the adversity of pollution or toxic waste. Still others are bequeathed with flows of lava and choking atmosphere. The glory of rising to astartes is only granted to those that can tackle and overcome these dangerous environments. Aspirants are placed upon the most hellish of planet in the sector, and then expected to traverse the continent with only himself to rely upon. Those who face the impossible without faltering and survive past the point they should have perished are recovered by {0}s, judged worthy of becoming a Neophyte.": "帝国内鲜有世界能免于污染或剧毒废料的磨难,\n更有世界被熔岩之流与窒息大气所笼罩。\n唯有能够克服这些险恶环境的勇士,\n才配获准晋升阿斯塔特的荣耀。\n候选者被置于星区内最如炼狱般的星球之上,\n仅能依靠自身徒步穿越大陆。那些面对不可能之事毫不动摇,\n于本该死去的绝境中幸存下来的人,将被{0}接回,\n并获准成为新兵。", + "An Aspirant’s spiritual and mental capability is every bit as important as his physical characteristics. It is wise to impose Trials not upon their body, but on the mind. Either through psychic powers, chemical agents, or endurance trials, the Aspirant’s willpower is tested. Those unworthy do not survive the stress and trauma placed upon their hearts- only those whose minds are proven to be unbreakable are welcomed into our ranks.": "候选者的精神与心智能力与其身体素质同样重要。\n明智的做法是考验其心智而非肉身。\n无论是通过灵能、化学药剂还是耐力试炼,\n候选者的意志都会受到考验。不配者无法承受施加于心头的\n压力与创伤,唯有心智被证明坚不可摧者,\n才被接纳加入我们的行列。", + "What better gauge of an Aspirant than in a duel with our astartes? Our brother, unarmed and unarmoured, will face against the armed challenger until one cannot continue. It is impossible for the Aspirant to actually succeed these trials, but demonstrates how far they can possibly go, and allow us to judge him accordingly. As with most trials the Aspirant’s life is in their own hands. He who has failed the duel- yet proven himself worthy- is rescued from the jaws of death by {0} and allowed to progress to the rank of Neophyte.": "还有比与我们的阿斯塔特对决更能衡量候选者的方式吗?\n我们的兄弟赤手空拳、不披甲胄,\n与全副武装的挑战者交手,直至一方无法继续。\n候选者实际上不可能通过此试炼,\n但这能展现出其能达到的极限,让我们得以据此评判。\n与大多数试炼一样,候选者的性命掌握在自己手中。\n在决斗中落败却已证明自身价值者,\n会被{0}从死亡边缘救回,并获准晋升为新兵。", + "What better way to cultivate astartes than to raise them from youth? The capable children of our recruitment targets are apprenticed to our battle brothers. Beneath their steady guidance the Aspirants spend several years learning the art of the smith. The most able are judged by our Chapter’s {0}s and {1} to deem if they are compatible with gene-seed implantation. If so, the Aspirant’s trial culminates in hunting and slaying a massive beast. Only the brightest and bravest are added to our ranks.": "还有什么比自幼培养更佳的培育阿斯塔特之法?\n我们征兵目标中资质出众的孩子被收为战斗兄弟的学徒。\n在稳步的指导下,候选者花费数年学习锻造之艺。\n其中最出色者,将由战团的{0}与{1}评判其是否适合\n植入基因种子。若合适,候选者的试炼将以猎杀并斩除\n一头巨兽告终。唯有最聪慧勇敢者得以加入我们的行列。", + "Years training : {0}\n": "训练年限:{0}\n", + " {0} : {1}\n": " {0}:{1}\n", + "Recruit Success Chance : X{0}\n": "招募成功率:X{0}\n", + " {0} : X{1}\n": " {0}:X{1}\n", + "Experience Bonus : {0}\n": "经验加成:{0}\n", + "{0}% of gene-seed wastage per turn\n": "每回合 {0}% 的基因种子损耗\n", + "Corruption Effect : ~{0}\n": "腐化效果:~{0}\n", + "Favoured Traits: ": "偏好特性:", + "Dis-Favoured Traits: ": "排斥特性:", + "Neophytes": "新兵", + "Neophyte {0}": "新兵 {0}", + "Starting EXP: {0}": "起始经验:{0}", + "ETA: {0}": "预计完成:{0}", + "World {0}": "征兵世界 {0}", + "First Sergeant {0}": "首席士官 {0}", + "Hail {0}! You asked for a report?\n\n": "向{0}致敬!您要一份报告?\n\n", + "Our Chapter currently has no Neophytes - we are at maximum strength and do not require more marines.": "我方战团目前没有新兵——我们已满编,无需更多星际战士。", + "Our Chapter currently has no Neophytes. Without training more our chapter is doomed to a slow death.": "我方战团目前没有新兵。若不培养新人,战团注定走向缓慢的灭亡。", + "Our Chapter currently has no Neophytes. We are doing our utmost best to find suitable recruits.": "我方战团目前没有新兵。我们正竭尽全力寻觅合适的候选者。", + "Our Chapter currently has one recruit being trained. The Neophyte's name is {0} and they are scheduled to become a battle brother in {1} months' time.": "我方战团目前有一名候选者正在训练。这位新兵名叫 {0},预计将在 {1} 个月后成为战斗兄弟。", + "Our Chapter currently has {0} recruits being trained. {1} is the next scheduled Neophyte to become a battle brother in {2} months' time.": "我方战团目前有 {0} 名候选者正在训练。下一名将晋升为战斗兄弟的新兵是 {1},预计还需 {2} 个月。", + "The recruitment is {0}": "招募工作现正{0}", + "\n{0}. You must only give me the word and I can begin further increasing our numbers... though this would violate the Codex Astartes.": "\n{0}。您只需一声令下,我便可着手进一步扩充兵员……尽管这有违阿斯塔特圣典。", + "\n{0}. You must only give me the word and I can begin further increasing our numbers.": "\n{0}。您只需一声令下,我便可着手进一步扩充兵员。", + "\n{0}.": "\n{0}。", + "\nMutation of our gene-seed currently makes us unable to recruit new Neophytes. We are doomed to a slow demise unless the Apothecaries can fix it.": "\n目前基因种子的突变使我们无法招募新的新兵。除非药剂师能够修复,否则我们注定缓慢消亡。", + "\nThere is no more gene-seed in our vaults and we cannot create more neophytes as a result. Something must be done, Chapter Master.": "\n我们的宝库中已再无基因种子,因此无法培养更多新兵。战团长,必须采取行动了。", + "\nWe're recruiting from one world - {0}.": "\n我们正从一个世界征兵——{0}。", + "\nWe're recruiting from two worlds. Finding recruits is vastly accelerated.": "\n我们正从两个世界征兵。寻觅候选者的速度大大加快。", + "\nWe're recruiting from several worlds.": "\n我们正从多个世界征兵。", + "Space Marine Recruiting: {0}": "星际战士招募:{0}", + "Apothecary Training: {0}": "药剂师训练:{0}", + "Chaplain Training: {0}": "牧师训练:{0}", + "Psyker Training: {0}": "灵能者训练:{0}", + "Techmarine Training: {0}": "技术军士训练:{0}", + "Blood Duel": "血斗", + "Hunting the Hunter": "猎杀猎手", + "Survival of the Fittest": "适者生存", + "Exposure": "暴露考验", + "Knowledge of self": "自知之明", + "Combat Challange": "战斗挑战", + "Apprenticeship": "学徒制", + "HALTED": "已停止", + "SLUGGISH": "缓慢", + "SLOW": "慢速", + "MODERATE": "中等", + "FAST": "快速", + "FRENETIC": "狂热", + "MAXIMUM": "极限", + "ONGOING": "进行中", + "halted": "已停止", + "ongoing": "进行中", + "Marines": "星际战士", + "Target Company": "目标连队", + "Promoting": "晋升中", + "HQ": "总部", + "{0} Company {1}": "{0}连 {1}", + "Target Role:": "目标职位:", + "{0} [{1}]": "{0} [{1}]", + "Required Gear:": "所需装备:", + "{0} {1} (Have {2})": "{0} {1}(已有 {2})", + "[[Trade Accepted. Shipment initialized.]]": "[[交易已接受。货物已发出。]]", + "[[Trade Refused]]": "[[交易被拒绝]]", + "You would offer me scraps for the keys to a kingdom? You are foolish and, worse, you are unaware of your own incompetence.": "你竟想用这些废铜烂铁换取王国的钥匙?你愚蠢至极,更可悲的是你对自己的一无所知浑然不觉。", + "Do not attempt exchanges with those so far above you, lapdog of the Corpse Emperor, it makes you look even more idiotic than you already do.": "别试图与远高于你之人交易,尸皇的走狗,这只会让你显得比现在更加愚蠢。", + "I would spit upon this ‘offer' you bring before me but I find myself too amused by it.": "我本应唾弃你带来的这份‘提议',但我不禁为它感到好笑。", + "You may consider my response to be a ‘no' and assume my attitude to be whatever you like, Chapter Master.": "你可以把我的答复当作‘不',战团长,至于我的态度,随你怎么想。", + "Have a care that you do not overstep the mark, Chapter Master, I see no reason to accept such a trade.": "小心不要越界,战团长,我看不出有任何理由接受这样的交易。", + "An unreasonable trade, whatever our working relationship might be. I refuse.": "无论我们的工作关系如何,这都是不合理的交易。我拒绝。", + "{0} wanted?": "想要多少{0}?", + "{0} offered?": "愿意提供多少{0}?", + "{0}\nItems": "{0}\n物品", + "[{0}]": "[{0}]", + "{0} : {1}": "{0}:{1}", + "{0}:": "{0}:", + "{0} disposition required": "需要 {0} 好感度", + "Xeno Trade": "异形贸易", + "Clear": "清除", + "Offer": "提出", + "Requisition": "装备征用", + "Recruiting Planet": "征兵星球", + "License: Repair": "修复许可", + "License: Crusade": "远征许可", + "Minor Artifact": "小型文物", + "Artifact": "文物", + "Skitarii": "护教军", + "Techpriest": "技术牧师", + "Crusader": "十字军", + "Exterminatus": "灭绝令", + "Inferno Bolts": "炼狱爆弹", + "Sister of Battle": "战斗修女", + "Sister Hospitaler": "医护修女", + "Eldar Power Sword": "艾达灵族动力剑", + "Archeotech Laspistol": "远古科技激光手枪", + "Ranger": "游侠", + "Useful Information": "有用情报", + "Power Klaw": "动力爪", + "Ork Sniper": "兽人狙击手", + "Flash Git": "闪光阔佬", + "IOU": "欠条", + "Gene Seed": "基因种子", + "Gene-Seed": "基因种子", + "STC Fragment": "STC 碎片", + "Info Chip": "信息芯片", + "Master Crafted Power Sword": "大师级动力剑", + "Impossible": "不可能", + "Very Unlikely": "极不可能", + "Unlikely": "不太可能", + "Moderate Chance": "中等概率", + "Likely": "很可能", + "Very Likely": "极有可能", + "Unrefusable": "无法拒绝", + "WAR": "战争", + "DECLARE WAR": "宣战", + "Unfinished": "尚未完成", + "Declare War": "宣战", + " (Imperium)": "(帝国)", + "Disposition: {0}": "好感度:{0}", + "Disposition: {0} ({1})": "好感度:{0}({1})", + "Consorting with heretics will cause your disposition with the Imperium to plummet.": "与异端勾结将导致您与帝国的好感度暴跌。", + "Consorting with xenos will cause your disposition with the Imperium to lower.": "与异形勾结将导致您与帝国的好感度下降。", + "Meet Chaos Emissary": "会见混沌特使", + "The Emmmisary": "混沌特使", + "Trade": "交易", + "Demand": "索取", + "Discuss": "商谈", + "Denounce": "谴责", + "Praise": "赞誉", + "Propose\nAlliance": "提议\n结盟", + "Request Audience": "请求会面", + "Ignore": "无视", + "Unignore": "不再无视", + "Click here or press B to Toggle Unit Biography.": "点击此处或按 B 键切换单位生平。", + "Sir! You requested a report? Currently, we have deployed {0} {1}s to watch over the health of our Battle-Brothers in the field. We have an additional {2} {1}s who await only your order to carry the word to the troops.": "大人!您要一份报告?目前,我们已部署 {0} 名{1}驻守战场,照看战斗兄弟们的健康。另有 {2} 名{1}正待您一声令下,向部队传达神谕。", + "Sir! You requested a report? Currently, we have {0} {1}s who await only your order to carry the word to the troops.": "大人!您要一份报告?目前,我们有 {0} 名{1}正待您一声令下,向部队传达神谕。", + "##Currently, we are training additional {0} at a ": "##目前正训练更多{0},速率为", + " rate": "。", + " and expect to see a new one in {0} month's time.": " 预计{0}个月后将有新成员诞生。", + "We can increase this rate, but it will require us to requisition additional facilities, as well as upkeep, Sir.": "我们可以提高这一速率,\n但这需要征用额外的设施并支付维护费用,大人。", + "##Our men have been behaving as they should. Not a single one is scheduled for corrective action of any type.": "##我部将士表现如常,无一人被安排任何形式的惩戒。", + "Penitorium": "惩教所", + "Never": "永不会", + "[Execute] [Release]": "[处决] [释放]", + "Your Chapter contains {0} {1}s.##": "您的战团现拥有 {0} 名{1}。##", + "Training of further {0}s": "正在训练更多{0}", + " The next {0} is expected in {1} months.": " 下一名{0}预计将在 {1} 个月后出现。", + "Chapter Revelry": "战团欢庆", + "As our bolters are charged with death for the Emperor's enemies, our thoughts are charged with his wisdom. As our bodies are armoured with Adamantium, our souls are protected with our loyalty- loyalty to Him, and loyalty to our brothers. The bonds of this brotherhood are worth revering, even if a lull in duty invites doubt and heresy. Should you wish to schedule a rousing event, or challenge, I will make it so. Under the careful watch of our {0}s, our brothers' spirits may be lifted.": "正如我们的爆弹枪为帝皇之敌灌注死亡,我们的思想也为其智慧\n所充盈。正如我们的躯体披上精金甲胄,我们的灵魂亦以忠诚为护\n——忠诚于祂,忠诚于我们的兄弟。这份手足情谊值得敬奉,纵然职\n责的间歇会招致疑虑与异端。若您希望安排一场振奋人心的庆典或\n挑战,我必使之成行。在{0}们的悉心守望下,兄弟们的士气必将\n高涨。", + "A {0} has been scheduled on ": "已安排{0}活动于", + "Chapter Relic construction has been scheduled on ": "战团圣物建造已安排于", + ". ": "。 ", + " in your name. ": ",以您的名义。 ", + " in honor of the ": ",以纪念", + " in honor of ": ",以纪念", + "{0} {1} Company). ": "{0} {1}连)。 ", + ", honoring ": ",致敬", + ", giving praise to The Emperor. ": ",颂扬帝皇。 ", + " to honor our chapter. ": ",以表彰我战团。 ", + "Very little requisiton has been set aside for the event": "为此次活动拨出的征用极少", + "A minor amount of requisition has been dedicated for the event": "为此次活动拨出了少量征用", + "Moderate expenses are being made for the event": "为此次活动投入了中等开销", + "A great amount of requisiton is set aside for the event": "为此次活动拨出了大量征用", + "The event is set to be lavish and excessive, with maximum requisition spent": "此次活动将极尽奢华铺张,投入最大限额的征用", + ". It is set to run for {0} month.": "。 活动将延续 {0} 个月。", + ". It is set to run for {0} months.": "。 活动将延续 {0} 个月。", + " The feast will be made up entirely of a banquet.": " 这场盛宴将完全由宴席组成。", + " The feast will primarily be made up of a banquet, although ": " 这场盛宴主要以宴席为主,不过", + "drugs and alcohol will be present for those who wish to partake.": "在场者若有兴致,可尽情享用药物与酒类。", + "alcohol will also be present.": "酒类亦将供应。", + "drugs will also be present.": "药物亦将供应。", + " The feast will only be such in name, and actually primarily be composed of alcohol consumption and roudy behavior.": " 这场盛宴名不副实,实际上主要由豪饮与喧闹狂欢组成。", + " The feast will only be such in name, and actually primarily be composed of lines of drugs and roudy behavior.": " 这场盛宴名不副实,实际上主要由药物与喧闹狂欢组成。", + " Other Chapters have been invited to partake in the event, although it is not known who, if any, might show.": " 其他战团已受邀参加此次活动,不过尚不知谁会到场,或是否有人会来。", + " Spectators are encouraged, with efforts made to keep attending simple.": " 欢迎观众观战,并将尽力简化入场流程。", + " Smaller, similar deathmatches will be held for Imperial citizens who wish to partake.": " 将面向有意参与的帝国公民举办小型的类似生死决斗。", + " Our {0}s aim to create a weapon.": " 我们的{0}们旨在打造一件武器。", + " Our {0}s aim to create a suit of armour.": " 我们的{0}们旨在打造一套装甲。", + " Our {0}s aim to hone and strengthen an already existing relic.": " 我们的{0}们旨在磨砺并强化一件现有圣物。", + " An Ecclesiarchy priest has been requested to lead the sermons.": " 已请求一位国教牧师主持布道。", + " Adepta Sororita presence has been requested, to share in praising the Emperor.": " 已请求修女会到场,一同颂扬帝皇。", + " The Chapter Cult Sermon is pointedly sanctioned within the bounds of the Codex Astartes and Imperial tradition.": " 这场战团教团布道严格限定在阿斯塔特圣典与帝国传统允许的范围内。", + " The Chapter Cult Sermon contains some radical or questionable practices, but such is allowed, as our traditions.": " 这场战团教团布道包含一些激进或可疑的仪式,但作为我们的传统,这是被允许的。", + " Blood sacrifices are a primary focus with the sermon, celebrating martial prowess and our semi-divinity.": " 血祭是布道的主要内容,以此颂扬尚武精神与我们半神般的本质。", + " Drugs will also be present for the ceremony.": " 仪式上也将提供药物。", + " Mind-altering drugs will be a primary focus of the sermon.": " 致幻药物将成为布道的核心内容。", + " Local Imperials will be required to attend our march- those that attempt to avoid our revelry are clearly heretics and will be dealt with as such.": " 当地帝国居民将被强制参加我们的游行——那些试图逃避我们欢庆之人显然是异端,将按异端论处。", + " Cadences and battle cries will honor our closest allies, giving them due credit where it is needed.": " 号令与战吼将致敬我们最亲密的盟友,在需要之时给予他们应有的赞誉。", + " Bloody trophies of our conquests will be brandished to the populance.": " 我们将向民众炫耀征战得来的染血战利品。", + "Scheduling Event": "安排庆典", + "Event Type: ": "庆典类型:", + "Event Location: ": "庆典地点:", + "Grandoise: ": "规模:", + "Features: ": "特色:", + "Display: ": "展示:", + "Repeat: ": "重复:", + "Honoring: ": "致敬对象:", + "Attendees: ": "参与者:", + "Public: ": "公开:", + "Planet": "行星", + "Ship": "舰船", + "Schedule": "安排", + "Equipment:": "装备:", + "Kills:": "击杀:", + "Current Location: {0} {1}#Health: {2}%": "当前位置:{0} {1}#生命:{2}%", + "Current Location: Onboard {0}#Health: {1}%": "当前位置:在{0}上#生命:{1}%", + "Current Location:#Health:": "当前位置:#生命:", + "{0} (Press Any Key)": "{0}(按任意键继续)", + "{0} Chapter Organization": "{0} 战团组织", + "Great Feast": "盛宴", + "Tournament": "比武大会", + "Deathmatch": "生死决斗", + "Chapter Relic": "战团圣物", + "Chapter Sermon": "战团布道", + "Imperial Mass": "帝国弥撒", + "Triumphal March": "凯旋游行", + "Banquet": "宴席", + "Internal": "内部", + "Chapter Only": "仅战团", + "Create Wargear": "打造装备", + "Sanctioned": "官方许可", + "Local": "本地", + "Mandatory Attendance": "强制出席", + "Alcohol": "酒类", + "Spectators": "观众", + "Create Armour": "打造装甲", + "Request Ecclesiarchy": "请求国教", + "Blood Sacrifices": "血祭", + "Honor to Allies": "致敬盟友", + "Drugs": "药物", + "Upgrade Existing": "升级现有", + "Invite Other Chapters": "邀请其他战团", + "Allow Other Competitors": "允许其他参赛者", + "Request Sororitas": "请求修女会", + "Brandish Bloody Trophies": "炫耀染血战利品", + "sluggish": "缓慢", + "slow": "慢速", + "moderate": "中等", + "fast": "快速", + "frenetic": "狂热", + "heretically fast": "异端般的快速", + " is currently halted": "目前处于停止状态", + " is advancing sluggishly": "正缓慢推进", + " is advancing slowly": "正迟缓推进", + " is advancing moderately fast": "正以中等速度推进", + " is advancing fast": "正快速推进", + " is advancing frenetically": "正狂热推进", + " is advancing as fast as possible": "正以最快速度推进", + "Secret Lair ({0} {1})": "秘密基地({0} {1})", + "Select a Secret Lair style.": "选择秘密基地风格。", + "Build ({0} {1})": "建造({0} {1})", + "Secret Arsenal ({0} {1})": "秘密军械库({0} {1})", + "Secret Gene-Vault ({0} {1})": "秘密基因宝库({0} {1})", + "This feature will be constructed in {0} months.": "该设施将在 {0} 个月后建成。", + "Hippodrome": "赛马场", + "Beastarium": "兽栏", + "Torture Chamber": "刑讯室", + "Narcotics": "毒品室", + "Relic Room": "圣物室", + "Cookery": "厨房", + "Vox Casters": "音阵扩音器", + "Throne": "王座", + "Stasis Pods": "静滞舱", + "Swimming Pool": "游泳池", + "A modest, less elaborate forge able to employ a handful of Astartes or Techpriest.": "一座简朴而朴素的锻造间,可供数名阿斯塔特或技术牧师使用。", + "A moderate sized garage fit to hold, service, and display vehicles.": "一座中等规模的机库,适合停放、维修并展示载具。", + "An enclosure with simulated greenery and foilage meant to hold beasts.": "一片模拟绿植的围场,用于圈养野兽。", + "Only the best for the best. A room full of torture tools and devices.": "最好的给最好的人。一间摆满刑讯工具与器械的房间。", + "Several boxes worth of Obscura, Black Lethe, Kyxa... line it up.": "足有数箱的奥布库拉、黑忘河、凯萨……全都摆好。", + "A room meant for displaying trophies. May be purchased successive times.": "一间用于展示战利品的房间。可多次购买扩建。", + "A larger, well-stocked cookery, complete with a number of Imperial Chef servants.": "一座规模更大、储备充足的厨房,配有若干帝国厨师仆从。", + "All the bass one could ever imaginably need.": "各种想象得到的重低音,应有尽有。", + "A study fit to hold a staggering amount of tomes and scrolls.": "一间足以容纳海量典籍与卷轴的书房。", + "A massive, ego boosting throne.": "一座巨大无比、极能满足虚荣心的王座。", + "Though they start empty, you may capture and display your foes in these.": "虽然最初空空如也,但你可以在其中囚禁并展示你的敌人。", + "A large body of water meant for excersize or relaxation.": "一片用于锻炼或放松的大型水域。", + "Deep beneath the surface of {0} {1} lays your ": "在{0} {1}地表深处,便是您的", + "secret lair. ": "秘密基地。 ", + "previously discovered lair. ": "曾被发现的基地。 ", + "It is massive": "它规模宏大", + ", the walls decorated with animal hides and leather. Among the copius body-trophies and bones are torches that hiss and spit. ": ",墙壁缀满兽皮与皮革。在众多战利品骸骨之间,火把嘶嘶喷吐着火焰。 ", + "- the main attraction is the rainbow-colored, lit up grid flooring which quickly change color. Far overhead are metal rafters. ": "——最引人注目的是彩虹色、亮起的网格地板,色彩瞬息万变。高悬头顶的是金属桁架。 ", + ", the walls made up of sturdy blocks of stones. It is heavily decorated with wooden furniture, banners, and medieval weaponry. ": ",墙壁由坚固的巨石砌成。屋内摆满木制家具、旗帜与中世纪兵器,装饰繁复。 ", + ", the walls made up of lightly-dusty stone. Mosaics and statues are abundant throughout, giving it that comfortable gothic feel. ": ",墙壁由微蒙灰尘的石材砌成。马赛克与雕像随处可见,营造出惬意的哥特氛围。 ", + "- at a glance it appears decorated like a factory. Those with a neural network see the lair as brightly colored and lit, full of knowledge, learning, and chapter iconography. ": "——乍看之下装饰得像一座工厂。拥有神经网络者眼中的基地则色彩明亮、灯火辉煌,满溢知识、学问与战团纹章。 ", + ", the walls made up of polished sandstone or marble. All throughout are chapter iconography and ancient symbols, wrought in gold. ": ",墙壁由抛光砂岩或大理石砌成。四处可见以黄金打造的战团纹章与古老符号。 ", + " but nearly pitch-black inside. The only illumination is provided by loopy neon lux-casters, and strobes, which blast out light in random, flickering patterns. ": ",但内部几乎漆黑一片。仅有的照明来自环绕的霓虹灯与频闪灯,它们以随机闪烁的图案喷泻光芒。 ", + ". All of the surfaces are made up of highly polished stainless steel. An occasional small water fountain or plant decorates the place. ": "。所有表面均由高度抛光的钢材制成。偶有小型喷泉或绿植点缀其间。 ", + " and almost civilian looking in nature- the walls are up of simple concrete or plaster. A thick carpet covers much of the floor.": ",外观近乎平民居所——墙壁由朴素的水泥或灰泥砌成。厚实的地毯覆盖了大半地面。", + " The center chamber is dominated by ": " 中央大厅的焦点是", + "a massive throne, which you are currently seated upon. ": "一座巨大的王座,您此刻正端坐其上。 ", + "a massive throne, though it is currently vacant. ": "一座巨大的王座,不过目前空置。 ", + "Heretical music blasts from the vox-casters, shaking the walls. ": "异端音乐从音阵扩音器中轰然奏响,震得墙壁微微颤抖。 ", + " Many of the tables have lines of white powder set on paper or bunches of needles. Plastic straws lay close by. ": " 许多桌上铺着纸张,上面列着一道道白色粉末,或摆放着一捆捆针具。塑料吸管散落一旁。 ", + "Imperial Chefs are currently bustling to and from the kitchen, cooking savory treats and food for those present. ": "帝国厨师正穿梭于厨房,为在场众人烹制美味佳肴。 ", + "The Imperial Chefs are mostly idle, making use of the other rooms and facilities. ": "帝国厨师大多无所事事,转而在其他房间与设施中消磨时间。 ", + " One of the chambers is hollowed out to display war trophies and gear. ": " 其中一个房间被腾空用于展示战利品与装备。 ", + " One of the chambers holds war trophies from recent conquests. ": " 其中一个房间陈列着近期征战的战利品。 ", + " War trophies taken from several Xeno races are displayed in the Relic Room. ": " 圣物室中展示着从数个异形种族那里缴获的战利品。 ", + " Your Relic Room contains trophies and skulls, taken from every Xeno race. ": " 您的圣物室中陈列着取自每个异形种族的战利品与颅骨。 ", + " Your Relic Room contains trophies, skulls, and suits of armour taken from Xenos races. ": " 您的圣物室中陈列着取自异形种族的战利品、颅骨与甲胄。 ", + " Your Relic Room contains wargear and suits of armour from all races, several Adeptus Astartes suits included. ": " 您的圣物室中陈列着来自所有种族的装备与甲胄,其中包含数套阿斯塔特甲胄。 ", + " One of the chambers holds wargear and suits of armour from all races. A suit of Terminator armour is included, half of the armour taken off to reveal the inner workings.": " 其中一个房间存放着来自所有种族的装备与甲胄。其中包含一套终结者甲胄,半数装甲被卸下,露出内部结构。", + " Your Relic Room's trophies, skulls, and armours now spill out into the hallways, such is their number. ": " 您的圣物室中的战利品、颅骨与甲胄数量之多,如今已漫溢到走廊之中。 ", + " Many of the xenos war trophies and suits of armour are placed around the Lair, filling out spare surfaces. ": " 许多异形战利品与甲胄被摆放在基地各处,填满一切空余的表面。 ", + " In addition to the many war trophies your Relic Room also has small amounts of gold coins. ": " 除了众多战利品,您的圣物室中还存放着少量金币。 ", + " In addition to the many war trophies your Relic Room also has small piles of gold coins and clutter. ": " 除了众多战利品,您的圣物室中还有成堆的金币与杂物。 ", + " In addition to the many war trophies your Relic Room also has sizeable piles of gold. ": " 除了众多战利品,您的圣物室中还有成堆的金子。 ", + " In addition to the many war trophies your Relic Room also has chests and cabinets full of gold. ": " 除了众多战利品,您的圣物室中还有装满金子的箱柜。 ", + " In addition to the many war trophies your Relic Room also has chests full to the brim of gold and many precious gems. ": " 除了众多战利品,您的圣物室中还有装满至溢出的金子和无数珍贵宝石。 ", + " War trophies, chests of gold, precious gems, your lair has it all. ": " 战利品、成箱的黄金、珍贵宝石,您的基地应有尽有。 ", + " War trophies, chests of gold, precious gems, your lair has it all, and in abundance. ": " 战利品、成箱的黄金、珍贵宝石,您的基地应有尽有,且极为充裕。 ", + " The abundant gold and gem piles have begun to spill out into the hallway. ": " 堆积如山的黄金与宝石已开始漫溢到走廊中。 ", + " The abundant gold and gems spill out into the hallway, your forces idly stepping across it. ": " 成堆的黄金与宝石漫溢到走廊中,您的部队漫不经心地踏行其上。 ", + " A sizeable portion of your lair is carelessly covered in gold coins, objects, and gems. ": " 您的基地中有相当一部分被随意铺满了金币、器物与宝石。 ", + " Much of your lair is carelessly covered in gold coins, objects, and gems. ": " 您的基地大部分被随意铺满了金币、器物与宝石。 ", + " Your abundant wealth is evident in your lair- every surface and much of the floor smothered by gold or gems. ": " 您殷实的财富在基地中一目了然——每个表面和大部分地面都被黄金或宝石覆盖。 ", + " Gold and gems are everywhere, occasionally attached to the walls and ceiling where able. ": " 黄金与宝石无处不在,偶尔还被镶嵌在墙壁与天花板上。 ", + " Gold and gems are EVERYWHERE. The main chamber in particular is a sea of gold and gems, especially deep at the corners. In all it is nearly three feet deep. Coins clink and settle as your forces walk through the room. ": " 黄金与宝石遍布各处。中央大厅更是一片金与宝石的海洋,角落尤为深厚,整体几乎达三英尺深。您的部队穿行其间,钱币叮当作响。 ", + " Your lair has a forge, fit to be used by several astartes at once. ": " 您的基地拥有一座锻造间,可同时供数名阿斯塔特使用。 ", + " Your lair has a hippodrome, or garage, that holds luxury vehicles. ": " 您的基地拥有一座赛马场(或称车库),用于存放豪华载具。 ", + " One of the rooms is a well-stocked torture chamber. ": " 其中一个房间是储备充足的刑讯室。 ", + " A large librarium makes up one of the wings, holding countless novels, books, scrolls, and documents on various topics. ": " 一侧翼楼是一座大型智库,藏有无数小说、书籍、卷轴与各类文献。 ", + " Your lair has a beastarium, animals native to your homeworld living within. ": " 您的基地拥有一座兽栏,其中豢养着母星特有的动物。 ", + " A large swimming pool with chapter-themed floaties is emplaced near the entrance. ": " 入口附近建有一座大型游泳池,配有战团主题的充气浮具。 ", + " One of the chambers holds several stasis pods for display. They are currently empty. ": " 其中一个房间陈列着数具静滞舱。它们目前是空的。 ", + "Cost:#": "费用:#", + "A moderate sized secret Arsenal, this structure has ample holding area to store any number of artifacts and wargear. Chaos and Daemonic items will be sent here by your Master of Relics, and due to the secret nature of its existance, the Inquisition will not find them during routine inspections.": "一座中等规模的秘密军械库,拥有充足的储存空间,可存放任意数量的文物与装备。混沌与恶魔物品将由您的圣物司命送往此处,由于它的隐秘性质,审判庭在例行检查中不会发现它们。", + "A moderate sized Arsenal, this structure has ample holding area to store any number of artifacts and wargear. Since being discovered it may no longer hide Chaos and Daemonic wargear from routine Inquisition inspections. You may wish to construct another Arsenal on a different planet.": "一座中等规模的军械库,拥有充足的储存空间,可存放任意数量的文物与装备。自被发现以来,它再也无法将混沌与恶魔装备藏匿于审判庭的例行检查之外。您或许应当在另一颗星球上另建一座军械库。", + "A large facility with Gene-Vaults and additional spare rooms, this structure safely stores the majority of your Gene-Seed and is ran by servitors. Due to its secret nature you may amass Gene-Seed and Test-Slave Incubators without fear of Inquisition reprisal or taking offense.": "一座配备基因宝库与额外备用房间的大型设施,由机仆运转,可安全储存您的大部分基因种子。由于其隐秘性质,您可以囤积基因种子与试体培育舱,无需担心审判庭的报复或不满。", + "A large facility with Gene-Vaults and additional spare rooms, this structure safely stores the majority of your Gene-Seed and is ran by servitors. Since being discovered all the contents are known to the Inquisition. Your Gene-Seed remains protected but you may wish to build a new, secret one.": "一座配备基因宝库与额外备用房间的大型设施,由机仆运转,可安全储存您的大部分基因种子。自被发现以来,其全部内容已为审判庭所知。您的基因种子仍受保护,但您或许应当另建一座全新的秘密宝库。", + "Lair": "基地", + "Customizable hideout that your forces may garrison into. The Lair may be upgraded further.": "一座可自定义的藏身处,您的部队可驻防其中。基地还可进一步升级。", + "Hidden armoury that stores unused Chaos and Daemonic artifacts, preventing them from discovery.": "一座隐秘军械库,用于存放闲置的混沌与恶魔文物,防止它们被发现。", + "Hidden gene-vault that off-sources the majority of your Gene-Seed and Test-Slave Incubators.": "一座隐秘基因宝库,用于转移存放您的大部分基因种子与试体培育舱。", + "Barbarian": "蛮族", + "Disco": "迪斯科", + "Gothic": "哥特", + "Prospero": "普罗斯佩罗", + "Rave Club": "锐舞俱乐部", + "Steel": "钢铁", + "Utilitarian": "实用主义", + "Heavy on leather, hides, and trophy body parts.": "皮革、毛皮与战利品残肢堆积如山。", + "Rainbow colored dance floor and steel rafters.": "彩虹色的舞池与钢制桁架。", + "Lots of stone, metal filigree, and statues.": "大量石材、金属饰纹与雕像。", + "Lightly-dusty stone, mosaics, and statues throughout.": "微蒙灰尘的石材,马赛克与雕像遍布。", + "Grates, tubes, gears, and augmented reality.": "格栅、管道、齿轮与增强现实。", + "Marble or sandstone surfaces and gold filigree.": "大理石或砂岩表面与金色饰纹。", + "Large, open area with neon or strobe lights.": "开阔的大型区域,配以霓虹或频闪灯。", + "Stainless steel surfaces and water fountains.": "不锈钢表面与喷泉。", + "Plaster or concrete surfaces with carpeting.": "灰泥或水泥表面,铺有地毯。", + "{0} {1} {2}": "{0} {1} {2}", + "Once the time is right their target is ambushed {0} and tranquilized. ": "时机成熟时,目标将{0}遭到伏击并被麻醉。 ", + "Apothecarion": "药剂师修会", + ". Your most damaged vessel is the {0} - it has {1}% Hull Integrity.": "。您的舰队中受损最严重的舰船是 {0}——其船体完整度为 {1}%。", + " Two of your ships are highly damaged. You may wish to purchase a Repair License from the Sector Governerner.": " 您的两艘舰船受损严重。您或可向星区总督购买修复许可。", + " Several of your ships are highly damaged. It is advisable that you purchase a Repair License from the Sector Governer.": " 您的多艘舰船受损严重。建议您向星区总督购买修复许可。", + "\n\nHere are the current positions of your ships and their contents:": "\n\n以下是您的各舰船当前位置及载员情况:", + "Your Chapter currently has no Neophytes - you are at maximum strength and do not require more marines.": "您的战团目前没有新兵——已满编,无需更多星际战士。", + "Your Chapter currently has no Neophytes. Without training more your chapter is doomed to a slow death.": "您的战团目前没有新兵。若不培养新人,战团注定走向缓慢的灭亡。", + "Your Chapter currently has no Neophytes. You are doing your utmost best to find suitable recruits.": "您的战团目前没有新兵。您正竭尽全力寻觅合适的候选者。", + "Your Chapter currently has one recruit being trained. The Neophyte's name is {0} and they are scheduled to become a battle brother in {1} months' time.": "您的战团目前有一名候选者正在训练。这位新兵名叫 {0},预计将在 {1} 个月后成为战斗兄弟。", + "Your Chapter currently has {0} recruits being trained. {1} is the next scheduled Neophyte to become a battle brother in {2} months' time.": "您的战团目前有 {0} 名候选者正在训练。下一名将晋升为战斗兄弟的新兵是 {1},预计还需 {2} 个月。", + "\n{0}. You must only give me the word and I can begin further increasing your numbers... though this would violate the Codex Astartes.": "\n{0}。您只需一声令下,我便可着手进一步扩充兵员……尽管这有违阿斯塔特圣典。", + "\n{0}. You must only give me the word and I can begin further increasing your numbers.": "\n{0}。您只需一声令下,我便可着手进一步扩充兵员。", + "\nMutation of your gene-seed currently makes you unable to recruit new Neophytes. You are doomed to a slow demise unless the Apothecaries can fix it.": "\n目前您的基因种子突变使您无法招募新的新兵。除非药剂师能够修复,否则您注定缓慢消亡。", + "\nThere is no more gene-seed in your vaults and you cannot create more neophytes as a result. Something must be done, Chapter Master.": "\n您的宝库中已再无基因种子,因此无法培养更多新兵。战团长,必须采取行动了。", + "\nYou're recruiting from one world - {0}.": "\n您正从一个世界征兵——{0}。", + "\nYou're recruiting from two worlds. Finding recruits is vastly accelerated.": "\n您正从两个世界征兵。寻觅候选者的速度大大加快。", + "\nYou're recruiting from several worlds.": "\n您正从多个世界征兵。", + "Scattered": "分散", + "aboard {0}": "在{0}上", + "various ships orbiting {0}": "环绕{0}的多艘舰船", + "various planets in {0}": "{0}的多个行星", + "system {0}": "星系 {0}", + "Medium": "中型" } diff --git a/objects/obj_controller/Draw_64.gml b/objects/obj_controller/Draw_64.gml index 8ee7b22803..444e3ffddd 100644 --- a/objects/obj_controller/Draw_64.gml +++ b/objects/obj_controller/Draw_64.gml @@ -83,19 +83,19 @@ if (!zoomed && !zui) { draw_set_color(c_white); if (!instance_exists(obj_popup)) { - menu_buttons.chapter_manage.draw(34, 838 + y_slide, "Chapter Management", 1, 1, 145); - menu_buttons.chapter_settings.draw(179, 838 + y_slide, "Chapter Settings", 1, 1, 145); - menu_buttons.apoth.draw(357, 838 + y_slide, "Apothecarium"); - menu_buttons.reclu.draw(473, 838 + y_slide, "Reclusium"); - menu_buttons.lib.draw(590, 838 + y_slide, "Librarium"); - menu_buttons.arm.draw(706, 838 + y_slide, "Armamentarium"); - menu_buttons.recruit.draw(822, 838 + y_slide, "Recruitment"); - menu_buttons.fleet.draw(938, 838 + y_slide, "Fleet"); - menu_buttons.diplo.draw(1130, 838 + y_slide, "Diplomacy", 1, 1, 145); - menu_buttons.event.draw(1275, 838 + y_slide, "Event Log", 1, 1, 145); - menu_buttons.end_turn.draw(1420, 838 + y_slide, "End Turn", 1, 1, 145); - menu_buttons.help.draw(1374, 8 + y_slide, "Help"); - menu_buttons.menu.draw(1484, 8 + y_slide, "Menu"); + menu_buttons.chapter_manage.draw(34, 838 + y_slide, localize("Chapter Management"), 1, 1, 145); + menu_buttons.chapter_settings.draw(179, 838 + y_slide, localize("Chapter Settings"), 1, 1, 145); + menu_buttons.apoth.draw(357, 838 + y_slide, localize("Apothecarium")); + menu_buttons.reclu.draw(473, 838 + y_slide, localize("Reclusium")); + menu_buttons.lib.draw(590, 838 + y_slide, localize("Librarium")); + menu_buttons.arm.draw(706, 838 + y_slide, localize("Armamentarium")); + menu_buttons.recruit.draw(822, 838 + y_slide, localize("Recruitment")); + menu_buttons.fleet.draw(938, 838 + y_slide, localize("Fleet")); + menu_buttons.diplo.draw(1130, 838 + y_slide, localize("Diplomacy"), 1, 1, 145); + menu_buttons.event.draw(1275, 838 + y_slide, localize("Event Log"), 1, 1, 145); + menu_buttons.end_turn.draw(1420, 838 + y_slide, localize("End Turn"), 1, 1, 145); + menu_buttons.help.draw(1374, 8 + y_slide, localize("Help")); + menu_buttons.menu.draw(1484, 8 + y_slide, localize("Menu")); } if (y_slide > 0) { @@ -113,19 +113,20 @@ if (!zoomed && !zui) { } draw_set_color(CM_GREEN_COLOR); - draw_set_font(fnt_menu); + draw_set_font(cjk_font(fnt_menu)); draw_set_halign(fa_center); draw_set_valign(fa_top); // Draws the sector name - var _sector_string = $"Sector {obj_ini.sector_name ?? "Terra Nova"}"; + var _sector_string = localize("Sector {0}", [obj_ini.sector_name ?? "Terra Nova"]); draw_text(775, 17, _sector_string); draw_text(775.5, 17.5, _sector_string); // Checks if you are penitent if (faction_status[eFACTION.IMPERIUM] != "War") { if (penitent_max == 0) { - draw_text(998, 17, "Loyal"); - draw_text(998, 17.5, "Loyal"); + var _loyal_text = localize("Loyal"); + draw_text(998, 17, _loyal_text); + draw_text(998, 17.5, _loyal_text); } if (penitent_max > 0) { var endb2 = ""; @@ -134,8 +135,9 @@ if (!zoomed && !zui) { endb2 = " " + string(endb); } draw_set_color(c_red); - draw_text(998, 17, string(min(100, floor((penitent_current / penitent_max) * 100))) + "% Penitent"); - draw_text(998, 17.5, string(min(100, floor((penitent_current / penitent_max) * 100))) + "% Penitent"); + var _penitent_text = localize("{0}% Penitent", [string(min(100, floor((penitent_current / penitent_max) * 100)))]); + draw_text(998, 17, _penitent_text); + draw_text(998, 17.5, _penitent_text); draw_set_color(CM_GREEN_COLOR); // TODO Need a tooltip for here to display the actual amounts } @@ -143,17 +145,18 @@ if (!zoomed && !zui) { // Sets you to renegade if (faction_status[eFACTION.IMPERIUM] == "War") { draw_set_color(255); - draw_text(998, 17, "Renegade"); - draw_text(998, 17.5, "Renegade"); + var _renegade_text = localize("Renegade"); + draw_text(998, 17, _renegade_text); + draw_text(998, 17.5, _renegade_text); draw_set_color(CM_GREEN_COLOR); } if (menu == eMENU.DEFAULT || menu == eMENU.TURN_END) { if (imp_ships == 0 && turn < 2) { sector_imperial_fleet_strength(); } - draw_text(850, 60, $"Sector Fleet Strength {imp_ships}/{max_fleet_strength}"); + draw_text(850, 60, localize("Sector Fleet Strength {0}/{1}", [imp_ships, max_fleet_strength])); if (scr_hit([700, 60, 1000, 80])) { - tooltip_draw("The relative strength of the imperial navy and defence fleet forces and their max supported strength. Increase The number of imperial aligned planets and active forge worlds to increase the limit"); + tooltip_draw(localize("The relative strength of the imperial navy and defence fleet forces and their max supported strength. Increase The number of imperial aligned planets and active forge worlds to increase the limit")); } } // Checks if the chapter name is less than 140 chars, adjusts chapter_master_name_width accordingly var chapter_master_name_width = 1; @@ -175,7 +178,7 @@ if (!zoomed && !zui) { if (income_last < 0) { inc = string(round(income_last)); } - draw_set_font(fnt_40k_14); + draw_set_font(cjk_font(fnt_40k_14)); draw_set_halign(fa_left); // Draws the requisition amount draw_sprite(spr_new_resource, 0, 14, 16); @@ -208,13 +211,13 @@ if (!zoomed && !zui) { draw_text(485.5, 16.5, string(marines) + "/" + string(command)); pop_draw_return_values(); } -draw_set_font(fnt_40k_14b); +draw_set_font(cjk_font(fnt_40k_14b)); draw_set_color(c_red); draw_set_halign(fa_left); draw_set_alpha(1); // Sets up debut mode if (global.cheat_debug) { - draw_text(1124, 7, "DEBUG MODE"); + draw_text(1124, 7, localize("DEBUG MODE")); } function draw_line(x1, y1, y_slide, variable) { diff --git a/objects/obj_controller/Step_0.gml b/objects/obj_controller/Step_0.gml index 70d844ece9..a5e8ea2da7 100644 --- a/objects/obj_controller/Step_0.gml +++ b/objects/obj_controller/Step_0.gml @@ -402,8 +402,8 @@ try { repair_ships = 0; var pip = instance_create(0, 0, obj_popup); - pip.title = "Ships Repaired"; - pip.text = "In accordance with the Imperial Repair License, all " + string(obj_ini.chapter_name) + " ships orbiting friendly planets have been repaired. Note that repaired ships, and their fleets, are unable to act further this turn."; + pip.title = localize("Ships Repaired"); + pip.text = localize("In accordance with the Imperial Repair License, all {0} ships orbiting friendly planets have been repaired. Note that repaired ships, and their fleets, are unable to act further this turn.", [obj_ini.chapter_name]); pip.image = "shipyard"; pip.cooldown = 15; diff --git a/objects/obj_popup/Draw_64.gml b/objects/obj_popup/Draw_64.gml index 58c1963ec6..b0815a2b87 100644 --- a/objects/obj_popup/Draw_64.gml +++ b/objects/obj_popup/Draw_64.gml @@ -25,10 +25,10 @@ try { } if (type == ePOPUP_TYPE.FLEET_MOVE) { - draw_set_font(fnt_large); + draw_set_font(cjk_font(fnt_large)); draw_set_halign(fa_center); draw_set_color(CM_GREEN_COLOR); - draw_text_transformed(320, 60, "SELECT DESTINATION", 0.5, 0.5, 0); + draw_text_transformed(320, 60, localize("SELECT DESTINATION"), 0.5, 0.5, 0); draw_set_halign(fa_left); } else if (type == 10) { target_comp += 1; @@ -52,12 +52,12 @@ try { x1 = (1600 - sprite_width) / 2; y1 = (900 - sprite_height * y_scale_mod) / 2; - draw_set_font(fnt_40k_14b); + draw_set_font(cjk_font(fnt_40k_14b)); draw_set_halign(fa_center); draw_set_color(CM_GREEN_COLOR); if (fancy_title == 1) { - draw_set_font(fnt_fancy); + draw_set_font(cjk_font(fnt_fancy)); if (type == 1) { draw_set_color(255); } @@ -65,7 +65,7 @@ try { draw_text_transformed(x1 + (sprite_width / 2), y1 + (sprite_height * 0.07), string_hash_to_newline(string(title)), 1.1, 1.1, 0); // draw_text(xx+320.5,yy+123.5,string(title)); - draw_set_font(fnt_40k_14); + draw_set_font(cjk_font(fnt_40k_14)); draw_set_halign(fa_left); draw_set_color(CM_GREEN_COLOR); diff --git a/objects/obj_star/Draw_0.gml b/objects/obj_star/Draw_0.gml index 187422bbae..a2d2ecc8cc 100644 --- a/objects/obj_star/Draw_0.gml +++ b/objects/obj_star/Draw_0.gml @@ -33,14 +33,14 @@ if (storm > 0) { //ad hoc way of determining whether stuff is in view or not...needs work draw_set_halign(fa_center); -draw_set_font(fnt_cul_14); +draw_set_font(cjk_font(fnt_cul_14)); draw_set_alpha(1); if (global.load == -1 && (obj_controller.zoomed || in_camera_view(star_box_shape()))) { if (garrison) { draw_sprite(spr_new_resource, 3, x - 30, y + 15); if (scr_hit(x - 40, y + 10, x - 10, y + 35)) { - tooltip_draw("Marine Garrison in system"); + tooltip_draw(localize("Marine Garrison in system")); } } if (point_in_rectangle(mouse_x, mouse_y, x - 128, y, x + 128, y + 80) && obj_controller.zoomed) { diff --git a/objects/obj_star_select/Create_0.gml b/objects/obj_star_select/Create_0.gml index 4308626a24..3833c00342 100644 --- a/objects/obj_star_select/Create_0.gml +++ b/objects/obj_star_select/Create_0.gml @@ -38,7 +38,7 @@ debug_options = new RadioSet([ { str1: "Add Feature", }, -], "Debug options", { +], localize("Debug options"), { x1: 36, y1: 129, max_width: 300, @@ -61,7 +61,7 @@ garrison = ""; population = false; garrison_data_slate = new DataSlate(); -garrison_data_slate.title = "Garrison Report"; +garrison_data_slate.title = localize("Garrison Report"); main_data_slate = new DataSlate(); potential_donors = []; diff --git a/objects/obj_star_select/Draw_64.gml b/objects/obj_star_select/Draw_64.gml index 7e719d21ae..b6578fc642 100644 --- a/objects/obj_star_select/Draw_64.gml +++ b/objects/obj_star_select/Draw_64.gml @@ -13,7 +13,7 @@ if (obj_controller.menu == 60) { } add_draw_return_values(); -draw_set_font(fnt_40k_14b); +draw_set_font(cjk_font(fnt_40k_14b)); draw_set_halign(fa_center); draw_set_valign(fa_top); draw_set_color(0); @@ -95,7 +95,7 @@ try { draw_sprite_ext(spr_servo_right_arm, 0, 27, 165 + _screen_height / 3, 2, 2, 0, c_white, 1); draw_sprite_ext(spr_servo_skull_head, 0, 27 + _screen_width / 2, 165, 2, 2, 0, c_white, 1); - var system_string = $"{target.name} System"; + var system_string = target.name + " " + localize("System"); draw_set_color(target.owner == eFACTION.PLAYER ? c_blue : 0); @@ -116,7 +116,7 @@ try { var _unit_dispersement = _viewer.garrison_log; var _sys_name = target.name; if (struct_exists(_unit_dispersement, target.name)) { - group_selection(_unit_dispersement[$ _sys_name].units, {purpose: $"{target.name} Management", purpose_code: "manage", number: 0, system: target.id, feature: "none", planet: 0, selections: []}); + group_selection(_unit_dispersement[$ _sys_name].units, {purpose: localize("{0} Management", [target.name]), purpose_code: "manage", number: 0, system: target.id, feature: "none", planet: 0, selections: []}); instance_destroy(); pop_draw_return_values(); exit; @@ -125,9 +125,9 @@ try { } if (loading != 0) { - draw_set_font(fnt_40k_14); + draw_set_font(cjk_font(fnt_40k_14)); draw_set_color(CM_GREEN_COLOR); - draw_text(184, 202, "Select Destination"); + draw_text(184, 202, localize("Select Destination")); } //the draw and click on planets logic @@ -135,7 +135,7 @@ try { planet_selection_action(); } - draw_set_font(fnt_40k_14b); + draw_set_font(cjk_font(fnt_40k_14b)); var _planet = obj_controller.selecting_planet; if (_planet != 0) { @@ -236,13 +236,13 @@ try { } } else if (garrison != "" && !population && garrison.planet == obj_controller.selecting_planet) { if (garrison.garrison_force) { - draw_set_font(fnt_40k_14); + draw_set_font(cjk_font(fnt_40k_14)); - garrison_data_slate.sub_title = $"Garrison Leader {garrison.garrison_leader.name_role()}"; + garrison_data_slate.sub_title = localize("Garrison Leader {0}", [garrison.garrison_leader.name_role()]); garrison_data_slate.body_text = garrison.garrison_report(); garrison_data_slate.inside_method = function() { - garrison_data_slate.title = "Garrison Report"; + garrison_data_slate.title = localize("Garrison Report"); draw_set_color(c_gray); var xx = garrison_data_slate.XX; var yy = garrison_data_slate.YY; @@ -251,7 +251,7 @@ try { draw_set_halign(fa_left); draw_line(xx + 10, half_way, garrison_data_slate.width - 10, half_way); var defence_data = determine_pdf_defence(target.p_pdf[cur_planet], garrison, target.p_fortified[cur_planet]); - var defence_string = $"Planetary Defence : {defence_data[0]}"; + var defence_string = localize("Planetary Defence : {0}", [defence_data[0]]); draw_text(xx + 20, half_way, defence_string); if (scr_hit(xx + 20, half_way + 10, xx + 20 + string_width(defence_string), half_way + 10 + 20)) { tooltip_draw(defence_data[1], 400); @@ -259,17 +259,17 @@ try { var _dispo_change = garrison.dispo_change; if (_dispo_change > 55) { - draw_text(xx + 20, half_way + 30, $"Garrison Disposition Effect : Positive"); + draw_text(xx + 20, half_way + 30, localize("Garrison Disposition Effect : Positive")); } else if (_dispo_change > 44 || _dispo_change == 0) { - draw_text(xx + 20, half_way + 30, $"Garrison Disposition Effect : Neutral"); + draw_text(xx + 20, half_way + 30, localize("Garrison Disposition Effect : Neutral")); } else { - draw_text(xx + 20, half_way + 30, $"Garrison Disposition Effect : Negative"); + draw_text(xx + 20, half_way + 30, localize("Garrison Disposition Effect : Negative")); } }; garrison_data_slate.draw(340 + main_data_slate.width, 160, 0.6, 0.6); } } else if (population) { - garrison_data_slate.title = "Population Report"; + garrison_data_slate.title = localize("Population Report"); garrison_data_slate.inside_method = function() { p_data.draw_planet_population_controls(); }; @@ -283,7 +283,7 @@ try { var shutter_y = 296 + 165; if (!debug) { for (var i = 0; i < array_length(buttons); i++) { - if (shutters[i].draw_shutter(shutter_x, shutter_y + (47 * i), buttons[i], 0.5, true)) { + if (shutters[i].draw_shutter(shutter_x, shutter_y + (47 * i), localize(buttons[i]), 0.5, true)) { current_button = buttons[i]; } } @@ -382,12 +382,12 @@ try { draw_set_halign(fa_left); draw_set_color(0); - draw_set_font(fnt_40k_14b); - draw_text(37, 413, "Select Fleet Combat"); + draw_set_font(cjk_font(fnt_40k_14b)); + draw_text(37, 413, localize("Select Fleet Combat")); draw_set_color(CM_GREEN_COLOR); - draw_set_font(fnt_40k_14b); - draw_text(37.5, 413.5, "Select Fleet Combat"); + draw_set_font(cjk_font(fnt_40k_14b)); + draw_text(37.5, 413.5, localize("Select Fleet Combat")); var x3 = 49, y3 = 441; diff --git a/scripts/LocalizationManager/LocalizationManager.gml b/scripts/LocalizationManager/LocalizationManager.gml index 25c8950db8..38e0a74630 100644 --- a/scripts/LocalizationManager/LocalizationManager.gml +++ b/scripts/LocalizationManager/LocalizationManager.gml @@ -165,23 +165,14 @@ function LocalizationManager() constructor { /// English always restores the original English names. Call from /// SettingsManager.apply_language(). static refresh_locale_globals = function() { - for (var i = 0; i < array_length(global.faction_names_en); i++) { - global.faction_names[i] = self.translate(global.faction_names_en[i]); - } - - // Rebuild each live rating array from its pristine English source, exactly like - // faction_names above. Writes go directly through each global accessor so the live - // array CoW-copies away from the shared _en source; translating from English each time - // keeps the call idempotent and round-trip safe. - for (var i = 0; i < array_length(global.chapter_strength_ratings_en); i++) { - global.chapter_strength_ratings[i] = self.translate(global.chapter_strength_ratings_en[i]); - } - for (var i = 0; i < array_length(global.chapter_cooperation_ratings_en); i++) { - global.chapter_cooperation_ratings[i] = self.translate(global.chapter_cooperation_ratings_en[i]); - } - for (var i = 0; i < array_length(global.chapter_geneseed_ratings_en); i++) { - global.chapter_geneseed_ratings[i] = self.translate(global.chapter_geneseed_ratings_en[i]); - } + global.faction_names = self.localize_array(global.faction_names_en); + global.chapter_strength_ratings = self.localize_array(global.chapter_strength_ratings_en); + global.chapter_cooperation_ratings = self.localize_array(global.chapter_cooperation_ratings_en); + global.chapter_geneseed_ratings = self.localize_array(global.chapter_geneseed_ratings_en); + global.planet_forti = self.localize_array(global.planet_forti_en); + global.presence_factions = self.localize_array(global.presence_factions_en); + global.presence_blurbs = self.localize_array(global.presence_blurbs_en); + global.planet_size = self.localize_array(global.planet_size_en); }; /// @param {Real} _base_font The font asset intended for this text. @@ -314,6 +305,7 @@ function localize_array(_keys) { /// @returns {Real} function cjk_font(_base_font) { if (!variable_global_exists("localization_manager") || !global.localization_manager.needs_cjk) { + return _base_font; } diff --git a/scripts/globals/globals.gml b/scripts/globals/globals.gml index 4aa8e4b25a..fbb8e978ff 100644 --- a/scripts/globals/globals.gml +++ b/scripts/globals/globals.gml @@ -86,6 +86,48 @@ global.chapter_strength_ratings = global.chapter_strength_ratings_en; global.chapter_cooperation_ratings = global.chapter_cooperation_ratings_en; global.chapter_geneseed_ratings = global.chapter_geneseed_ratings_en; +// Planet info screen labels, rebuilt on language change in refresh_locale_globals(). +// Same pristine-English-source / live-localized-array pattern as faction_names so the +// draw path never allocates or translates per frame. +global.planet_forti_en = [ + "None", + "Sparse", + "Light", + "Moderate", + "Heavy", + "Major", + "Extreme", +]; +global.presence_factions_en = [ + "Adeptas", + "Orks", + "Tau", + "Tyranids", + "Chaos", + "Heretics", + "Daemons", + "Necrons", +]; +global.presence_blurbs_en = [ + "Minima", + "Parvus", + "Moderatus", + "Significus", + "Enormicus", + "Extremis", +]; +global.planet_size_en = [ + "", + "Small", + "Medium", + "Large", +]; + +global.planet_forti = global.planet_forti_en; +global.presence_factions = global.presence_factions_en; +global.presence_blurbs = global.presence_blurbs_en; +global.planet_size = global.planet_size_en; + global.xenos_factions = [ eFACTION.ELDAR, eFACTION.ORK, diff --git a/scripts/scr_DataSlate/scr_DataSlate.gml b/scripts/scr_DataSlate/scr_DataSlate.gml index 4f832ff321..f7e5650bd5 100644 --- a/scripts/scr_DataSlate/scr_DataSlate.gml +++ b/scripts/scr_DataSlate/scr_DataSlate.gml @@ -399,6 +399,9 @@ function ShutterButton() constructor { cover_text = ""; tooltip = ""; text_color = c_red; + loc_lang = ""; + loc_key = ""; + loc_cover_text = ""; right_rack = new RackAndPinion(); left_rack = new RackAndPinion("backward"); @@ -497,15 +500,22 @@ function ShutterButton() constructor { if (time_open < 2) { draw_sprite_ext(spr_shutter_button, main_sprite, xx, yy, scale, scale, 0, c_white, 1); if (cover_text != "") { + var _loc_lang = variable_global_exists("localization_manager") ? global.localization_manager.language : ""; + if (_loc_lang != loc_lang || loc_key != cover_text) { + loc_lang = _loc_lang; + loc_key = cover_text; + loc_cover_text = localize(cover_text); + } draw_set_valign(fa_top); draw_set_font(cjk_font(fnt_Embossed_metal)); + var _cover_text = loc_cover_text; var _cover_scale = 3 * scale; - while (string_width(cover_text) * _cover_scale > width - (5 * scale)) { + while (string_width(_cover_text) * _cover_scale > width - (5 * scale)) { _cover_scale -= 0.1; } - var text_draw = xx + (width / 2) - ((string_width(cover_text) * _cover_scale) / 2); + var text_draw = xx + (width / 2) - ((string_width(_cover_text) * _cover_scale) / 2); draw_set_color(c_black); - draw_text_transformed(text_draw, yy + (_cover_scale * 1), cover_text, _cover_scale, _cover_scale, 0); + draw_text_transformed(text_draw, yy + (_cover_scale * 1), _cover_text, _cover_scale, _cover_scale, 0); } } else if (time_open >= 2) { main_sprite = floor(time_open / 6) + 1; diff --git a/scripts/scr_PlanetData/scr_PlanetData.gml b/scripts/scr_PlanetData/scr_PlanetData.gml index 43edd8acc1..bb355050e2 100644 --- a/scripts/scr_PlanetData/scr_PlanetData.gml +++ b/scripts/scr_PlanetData/scr_PlanetData.gml @@ -349,22 +349,22 @@ function PlanetData(_planet, _system) constructor { static assasinate_governor = function(assaination_type, discovery_modifier) { var _discovery_threshold = roll_dice(1, 100); - var _text = $"All of the successors for {name()} are removed or otherwise made indisposed. Paperwork is slightly altered. Rather than any sort of offical one of your Chapter Serfs is installed as the Planetary Governor. The planet is effectively under your control."; + var _text = localize("All of the successors for {0} are removed or otherwise made indisposed. Paperwork is slightly altered. Rather than any sort of offical one of your Chapter Serfs is installed as the Planetary Governor. The planet is effectively under your control.", [name()]); var _discovery_rate = 25; //type 1 is install a sympathectic else it's a straight serf installation if (assaination_type == 1) { _discovery_rate = 10; set_player_disposition(70 + floor(random_range(5, 15)) + 1); - _text = $"Many of the successors for {name()} are removed or otherwise made indisposed. Your chapter ensures that the new Planetary Governor is sympathetic to your plight and more than willing to heed your advice. A powerful new ally may be in the making."; - scr_event_log("", $"Planetary Governor of {name()} assassinated. A more suitable Governor is installed."); + _text = localize("Many of the successors for {0} are removed or otherwise made indisposed. Your chapter ensures that the new Planetary Governor is sympathetic to your plight and more than willing to heed your advice. A powerful new ally may be in the making.", [name()]); + scr_event_log("", localize("Planetary Governor of {0} assassinated. A more suitable Governor is installed.", [name()])); } else { if (origional_owner != 3) { set_new_owner(eFACTION.PLAYER); system.p_first[planet] = eFACTION.PLAYER; } set_player_disposition(100); - scr_event_log("", $"Planetary Governor of {name()} assassinated. One of your Chapter Serfs take their position."); + scr_event_log("", localize("Planetary Governor of {0} assassinated. One of your Chapter Serfs take their position.", [name()])); } if (_discovery_threshold <= (_discovery_rate * discovery_modifier)) { @@ -399,9 +399,9 @@ function PlanetData(_planet, _system) constructor { // TODO consider making it a battle with Planetary governor's guards var spec1 = 0; var spec2 = 0; - var txt = $"Your Astartes descend upon the surface of {name()} and plot the movements and schedule of the governor. "; - txt += "Once the time is right their target is ambushed "; - txt += choose("in their home", "in the streets", "while driving", "taking a piss") + " and tranquilized. "; + var txt = localize("Your Astartes descend upon the surface of {0} and plot the movements and schedule of the governor. ", [name()]); + var _ambush_place = choose("in their home", "in the streets", "while driving", "taking a piss"); + txt += localize("Once the time is right their target is ambushed {0} and tranquilized. ", [localize(_ambush_place)]); if (scr_has_disadv("Never Forgive")) { spec1 = 1; @@ -420,60 +420,60 @@ function PlanetData(_planet, _system) constructor { var _gender_pronouns = string_gender_pronouns(_gov_gender); if (spec1 == 1) { - txt += $"They are brought to the already-prepared facilities for Fallen, tortured to make {_gender_pronouns} appear a heretic, and then incinerated. "; + txt += localize("They are brought to the already-prepared facilities for Fallen, tortured to make {0} appear a heretic, and then incinerated. ", [_gender_pronouns]); } if (spec1 == 3) { - txt += $"{_gender_third} is tossed to the Fenrisian Wolves and viciously mauled, torn apart, and eaten. The beasts leave nothing but bloody scraps. "; + txt += localize("{0} is tossed to the Fenrisian Wolves and viciously mauled, torn apart, and eaten. The beasts leave nothing but bloody scraps. ", [_gender_third]); } if (spec1 == 6) { - txt += $"{_gender_third} is stuck in with the other criminals, and scum, to be turned into a servitor. Soon nothing remains that could be likened to the former Governor. "; + txt += localize("{0} is stuck in with the other criminals, and scum, to be turned into a servitor. Soon nothing remains that could be likened to the former Governor. ", [_gender_third]); } if (spec1 == 20) { if (action_score > 1) { - txt += $"Things get out of hand, and the Governor is torn limb from limb and consumed. {_gender_pronouns}flesh is torn off and eaten, bone pulverized, and marrow sucked free. "; + txt += localize("Things get out of hand, and the Governor is torn limb from limb and consumed. {0}flesh is torn off and eaten, bone pulverized, and marrow sucked free. ", [_gender_pronouns]); } if (action_score == 1) { - txt += $"Your battle brother chops apart the Governor and eats a sizeable portion of {_gender_pronouns} flesh, focusing upon the eyes, teeth, and fingers. Once full the rest is disposed of. "; + txt += localize("Your battle brother chops apart the Governor and eats a sizeable portion of {0} flesh, focusing upon the eyes, teeth, and fingers. Once full the rest is disposed of. ", [_gender_pronouns]); } } if (spec1 == 0) { spec2 = choose(1, 2, 3, 4, 5, 5, 5); if (spec2 == 1) { - txt += $"Their still-living body is disintegrated by acid. "; + txt += localize("Their still-living body is disintegrated by acid. "); } if (spec2 == 2) { - txt += $"The Governor is jettisoned into the local star at the first opportunity. "; + txt += localize("The Governor is jettisoned into the local star at the first opportunity. "); } if (spec2 == 3) { - txt += $"{_gender_third} is burned as fuel for one of your vessels. "; + txt += localize("{0} is burned as fuel for one of your vessels. ", [_gender_third]); } if (spec2 == 4) { - txt += $"A few grenades is all it takes to blow {_gender_pronouns} body to smithereens. "; + txt += localize("A few grenades is all it takes to blow {0} body to smithereens. ", [_gender_pronouns]); } if (spec2 == 5) { - txt += $"{_gender_third} is executed in a mundane fashion and buried. "; + txt += localize("{0} is executed in a mundane fashion and buried. ", [_gender_third]); } } - txt += "What is thy will?"; + txt += localize("What is thy will?"); var pip = instance_create(0, 0, obj_popup); - pip.title = "Planetary Governor Assassinated"; + pip.title = localize("Planetary Governor Assassinated"); pip._text = txt; pip.planet = planet; pip.p_data = self; var options = [ { - str1: "Allow the official successor to become Planetary Governor.", + str1: localize("Allow the official successor to become Planetary Governor."), choice_func: allow_governor_successor, }, { - str1: "Ensure that a sympathetic successor will be the one to rule.", + str1: localize("Ensure that a sympathetic successor will be the one to rule."), choice_func: install_sympathetic_successor, }, { - str1: "Remove all successors and install a loyal Chapter Serf.", + str1: localize("Remove all successors and install a loyal Chapter Serf."), choice_func: install_chapter_surf, }, ]; @@ -533,7 +533,7 @@ function PlanetData(_planet, _system) constructor { var _grow_orks = true; if (sabatours.garrison_force) { if (irandom(3) < 2) { - scr_event_log("green", $"sabotage force on {name()} disrupts ork forces", name); + scr_event_log("green", localize("sabotage force on {0} disrupts ork forces", [name()]), name); _grow_orks = false; } } @@ -723,7 +723,7 @@ function PlanetData(_planet, _system) constructor { _ork_fleet.cargo_data.ork_warboss = _warboss; delete_feature(eP_FEATURES.ORKWARBOSS); if (!_warboss.player_hidden || !irandom(5)) { - scr_alert("red", "ork", $"{_warboss.name} departs {name()} as his waaagh gains momentum", 0, 0); + scr_alert("red", "ork", localize("{0} departs {1} as his waaagh gains momentum", [_warboss.name, name()]), 0, 0); } } } @@ -854,14 +854,14 @@ function PlanetData(_planet, _system) constructor { if (has_feature(eP_FEATURES.RECRUITING_WORLD)) { if (obj_controller.gene_seed == 0 && obj_controller.recruiting > 0) { obj_controller.recruiting = 0; - scr_alert("red", "recruiting", "The Chapter has run out of gene-seed!", 0, 0); + scr_alert("red", "recruiting", localize("The Chapter has run out of gene-seed!"), 0, 0); } else if (obj_controller.recruiting > 0) { if (local_screening_points > 0) { marine_training(local_screening_points); _training_happend = true; } else { - scr_alert("red", "recruiting", $"Recruitment on {name()} halted due to insufficient apothecary rescources", 0, 0); + scr_alert("red", "recruiting", localize("Recruitment on {0} halted due to insufficient apothecary rescources", [name()]), 0, 0); } } } @@ -879,7 +879,7 @@ function PlanetData(_planet, _system) constructor { for (var v = 0; v < engineer_count; v++) { _starship.engineer_score += techs[v].technology / 2; } - scr_alert("green", "owner", $"Ancient ship repairs {min((_starship.engineer_score / 2000) * 100, 100)}% complete", system.x, system.y); + scr_alert("green", "owner", localize("Ancient ship repairs {0}% complete", [string(min((_starship.engineer_score / 2000) * 100, 100))]), system.x, system.y); } var _target_spend = 10000; @@ -890,7 +890,7 @@ function PlanetData(_planet, _system) constructor { _starship.funds_spent += _requisition_spend; if (_requisition_spend > 0 && _starship.funds_spent < _target_spend) { - scr_alert("green", "owner", $"{_requisition_spend} Requision spent on Ancient Ship repairs in materials and outfitting (outfitting {(_starship.funds_spent / _target_spend) * 100}%)", system.x, system.y); + scr_alert("green", "owner", localize("{0} Requision spent on Ancient Ship repairs in materials and outfitting (outfitting {1}%)", [_requisition_spend, string((_starship.funds_spent / _target_spend) * 100)]), system.x, system.y); } if (_starship.funds_spent >= _target_spend && _starship.engineer_score >= 2000) { //TODO refactor into general new ship logic @@ -901,7 +901,7 @@ function PlanetData(_planet, _system) constructor { var _slaughter = new_player_ship("Gloriana", system.name, "Slaughtersong"); var flit = create_player_fleet(system.x, system.y, [_slaughter]); - scr_popup($"Ancient Ship Restored", $"The ancient ship within the ruins of {locy} has been fully repaired. It is determined to be a Gloriana Class vessel and is bristling with golden age weaponry and armour. Your {string(obj_ini.player_role_data[eROLE.TECHMARINE].role)}s are excited; the Slaughtersong is ready for it's maiden voyage, at your command.", "", ""); + scr_popup(localize("Ancient Ship Restored"), localize("The ancient ship within the ruins of {0} has been fully repaired. It is determined to be a Gloriana Class vessel and is bristling with golden age weaponry and armour. Your {1}s are excited; the Slaughtersong is ready for it's maiden voyage, at your command.", [locy, obj_ini.player_role_data[eROLE.TECHMARINE].role]), "", ""); } } } catch (_exception) { @@ -1132,7 +1132,7 @@ function PlanetData(_planet, _system) constructor { draw_set_halign(fa_center); draw_set_valign(fa_top); - draw_set_font(fnt_40k_14); + draw_set_font(cjk_font(fnt_40k_14)); if ((current_owner <= 5) && (!_xenos_and_heretics)) { if (planet_forces[eFACTION.PLAYER] > 0 || system.present_fleet[eFACTION.PLAYER] > 0) { @@ -1152,20 +1152,20 @@ function PlanetData(_planet, _system) constructor { if (!_succession) { if ((player_disposition >= 0) && (origional_owner <= eFACTION.ECCLESIARCHY) && (current_owner <= eFACTION.ECCLESIARCHY) && (population > 0)) { - draw_text(xx + 534, yy + 176, "Disposition: " + string(min(100, player_disposition)) + "/100"); + draw_text(xx + 534, yy + 176, localize("Disposition: {0}/100", [string(min(100, player_disposition))])); } if ((player_disposition > -30) && (player_disposition < 0) && (current_owner <= eFACTION.ECCLESIARCHY) && (population > 0)) { - draw_text(xx + 534, yy + 176, "Disposition: ???/100"); + draw_text(xx + 534, yy + 176, localize("Disposition: ???/100")); } if (((player_disposition >= 0) && (origional_owner <= eFACTION.ECCLESIARCHY) && (current_owner > eFACTION.ECCLESIARCHY)) || (population <= 0)) { draw_text(xx + 534, yy + 176, "-------------"); } if (player_disposition <= -3000) { - draw_text(xx + 534, yy + 176, "Disposition: N/A"); + draw_text(xx + 534, yy + 176, localize("Disposition: N/A")); } } else if (_succession) { - draw_text(xx + 534, yy + 176, "War of _Succession"); + draw_text(xx + 534, yy + 176, localize("War of _Succession")); } // End draw disposition draw_set_color(c_gray); @@ -1192,25 +1192,25 @@ function PlanetData(_planet, _system) constructor { } draw_set_color(c_white); - draw_text(xx + 534, yy + 194, "Population Influence"); + draw_text(xx + 534, yy + 194, localize("Population Influence")); yy += 20; - draw_set_font(fnt_40k_14b); + draw_set_font(cjk_font(fnt_40k_14b)); draw_set_halign(fa_left); if (!is_craftworld && !is_hulk) { - draw_text(xx + 480, yy + 196, $"{system.name} {nm} ({planet_type})"); + draw_text(xx + 480, yy + 196, localize("{0} {1} ({2})", [system.name, nm, localize(planet_type)])); } if (is_craftworld) { - draw_text(xx + 480, yy + 196, $"{system.name} (Craftworld)"); + draw_text(xx + 480, yy + 196, localize("{0} (Craftworld)", [system.name])); } if (is_hulk) { - draw_text(xx + 480, yy + 196, "Space Hulk"); + draw_text(xx + 480, yy + 196, localize("Space Hulk")); } scr_image("ui/planet", scr_planet_image_numbers(planet_type), xx + 349, yy + 194, 128, 128); draw_rectangle(xx + 349, yy + 194, xx + 477, yy + 322, 1); - draw_set_font(fnt_40k_14); + draw_set_font(cjk_font(fnt_40k_14)); - var pop_string = $"Population: {display_population()}"; + var pop_string = localize("Population: {0}", [display_population()]); var _button_manager = obj_star_select.button_manager; _button_manager.update({label: pop_string, tooltip: "population data toggle with 'P'", keystroke: press_exclusive(ord("P")), x1: xx + 480, y1: yy + 217, w: 200, h: 22}); @@ -1226,15 +1226,15 @@ function PlanetData(_planet, _system) constructor { var y7 = 240; var temp3 = string(scr_display_number(guardsmen)); if (guardsmen > 0) { - draw_text(xx + 480, yy + y7, $"Imperial Guard: {temp3}"); + draw_text(xx + 480, yy + y7, localize("Imperial Guard: {0}", [temp3])); y7 += 20; } var temp4 = string(scr_display_number(pdf)); if (current_owner != 8) { - draw_text(xx + 480, yy + y7, $"Defense Force: {temp4}"); + draw_text(xx + 480, yy + y7, localize("Defense Force: {0}", [temp4])); } if (current_owner == 8) { - draw_text(xx + 480, yy + y7, $"Gue'Vesa Force: {temp4}"); + draw_text(xx + 480, yy + y7, localize("Gue'Vesa Force: {0}", [temp4])); } } @@ -1270,16 +1270,8 @@ function PlanetData(_planet, _system) constructor { draw_set_alpha(1); draw_set_color(c_black); } - var forti_string = [ - "None", - "Sparse", - "Light", - "Moderate", - "Heavy", - "Major", - "Extreme", - ]; - var planet_forti = $"Defenses: {forti_string[fortification_level]}"; + var forti_string = global.planet_forti; + var planet_forti = localize("Defenses: {0}", [forti_string[fortification_level]]); draw_text(xx + 480, yy + 280, planet_forti); } @@ -1287,7 +1279,7 @@ function PlanetData(_planet, _system) constructor { draw_set_color(c_gray); if (is_hulk) { - temp5 = "Integrity: " + string(floor(fortification_level * 20)) + "%"; + temp5 = localize("Integrity: {0}%", [string(floor(fortification_level * 20))]); draw_text(xx + 480, yy + 280, temp5); } @@ -1295,43 +1287,34 @@ function PlanetData(_planet, _system) constructor { var target_planet_heresy = corruption; if (target_planet_heresy < 0) { - temp6 = "DEBUG: Heresy below 0!"; + temp6 = localize("DEBUG: Heresy below 0!"); } else if (target_planet_heresy <= 10) { - temp6 = "None"; + temp6 = localize("None"); } else if (target_planet_heresy <= 30) { - temp6 = "Little"; + temp6 = localize("Little"); } else if (target_planet_heresy <= 50) { - temp6 = "Major"; + temp6 = localize("Major"); } else if (target_planet_heresy <= 70) { - temp6 = "Heavy"; + temp6 = localize("Heavy"); } else if (target_planet_heresy <= 96) { - temp6 = "Extreme"; + temp6 = localize("Extreme"); } else if (target_planet_heresy <= 100) { - temp6 = "Maximum"; + temp6 = localize("Maximum"); } else if (target_planet_heresy > 100) { - temp6 = "DEBUG: Heresy above 100!"; + temp6 = localize("DEBUG: Heresy above 100!"); } else { - temp6 = "DEBUG: Heresy somehow unknown value!"; + temp6 = localize("DEBUG: Heresy somehow unknown value!"); } - draw_text(xx + 480, yy + 300, $"Corruption: {temp6}"); + draw_text(xx + 480, yy + 300, localize("Corruption: {0}", [temp6])); - draw_set_font(fnt_40k_14b); - draw_text(xx + 349, yy + 326, "Planetary Presence"); - draw_text(xx + 535, yy + 326, "Planetary Features"); - draw_set_font(fnt_40k_14); + draw_set_font(cjk_font(fnt_40k_14b)); + draw_text(xx + 349, yy + 326, localize("Planetary Presence")); + draw_text(xx + 535, yy + 326, localize("Planetary Features")); + draw_set_font(cjk_font(fnt_40k_14)); var presence_text = ""; - var faction_names = [ - "Adeptas", - "Orks", - "Tau", - "Tyranids", - "Chaos", - "Heretics", - "Daemons", - "Necrons", - ]; + var faction_names = global.presence_factions; var faction_ids = [ "p_sisters", "p_orks", @@ -1342,14 +1325,7 @@ function PlanetData(_planet, _system) constructor { "p_demons", "p_necrons", ]; - var blurbs = [ - "Minima", - "Parvus", - "Moderatus", - "Significus", - "Enormicus", - "Extremis", - ]; + var blurbs = global.presence_blurbs; for (var t = 0; t < array_length(faction_names); t++) { var faction = faction_names[t]; @@ -1359,7 +1335,7 @@ function PlanetData(_planet, _system) constructor { // Special condition for "Cultists" -> "Daemons" if (faction_id == "p_chaos" && level > 6) { - faction = "Daemons"; + faction = localize("Daemons"); } if (level >= 1 && level <= 6) { @@ -1369,7 +1345,7 @@ function PlanetData(_planet, _system) constructor { } if (faction != "" && level > 0) { - presence_text += $"{faction}: {blurb} ({level})\n"; + presence_text += localize("{0}: {1} ({2})\n", [faction, blurb, level]); } } @@ -1378,12 +1354,7 @@ function PlanetData(_planet, _system) constructor { var planet_displays = []; var feat_count = array_length(features); var upgrade_count = array_length(upgrades); - var size = [ - "", - "Small", - "", - "Large", - ]; + var size = global.planet_size; if (feat_count > 0) { for (var i = 0; i < feat_count; i++) { var cur_feature = features[i]; @@ -1401,7 +1372,7 @@ function PlanetData(_planet, _system) constructor { if (cur_feature.f_type == eP_FEATURES.MONASTERY) { if (cur_feature.forge > 0) { var forge = cur_feature.forge_data; - var size_string = $"{size[forge.size]} Chapter Forge"; + var size_string = localize("{0} Chapter Forge", [size[forge.size]]); array_push(planet_displays, [size_string, forge]); } } @@ -1418,7 +1389,7 @@ function PlanetData(_planet, _system) constructor { if (_upgrade.f_type == eP_FEATURES.SECRET_BASE) { if (_upgrade.forge > 0) { var forge = _upgrade.forge_data; - var size_string = $"{size[forge.size]} Chapter Forge"; + var size_string = localize("{0} Chapter Forge", [size[forge.size]]); array_push(planet_displays, [size_string, forge]); } } @@ -1432,7 +1403,7 @@ function PlanetData(_planet, _system) constructor { var problem_data = problems_data[i]; if (struct_exists(problem_data, "stage")) { if (problem_data.stage == "preliminary") { - var mission_string = $"{problem_data.applicant} Audience"; + var mission_string = localize("{0} Audience", [problem_data.applicant]); problem_data.f_type = eP_FEATURES.MISSION; problem_data.time = problem_timers[i]; problem_data.problem = problems[i]; @@ -1580,7 +1551,7 @@ function PlanetData(_planet, _system) constructor { var garrison_assignment = obj_controller.view_squad && _loading; if (garrison_assignment && (garrison_issue && _mission == "garrison")) { planet_draw = c_red; - tooltip_draw("Can't garrison on non-friendly planet or planet with no friendly PDF", 150); + tooltip_draw(localize("Can't garrison on non-friendly planet or planet with no friendly PDF"), 150); } if (!mouse_check_button_pressed(mb_left)) { return; @@ -1664,11 +1635,11 @@ function PlanetData(_planet, _system) constructor { } var _recruit_world = get_features(eP_FEATURES.RECRUITING_WORLD)[0]; - var _recruit_string = "Abduct"; + var _recruit_string = localize("Abduct"); if ((_recruit_world.recruit_type == 0) && (owner_status() != "War" && owner_status() != "Antagonism" || player_disposition >= 50)) { - _recruit_string = "Open: Voluntery"; + _recruit_string = localize("Open: Voluntery"); } else if (_recruit_world.recruit_type == 0 && player_disposition <= 50) { - _recruit_string = "Covert: Voluntery"; + _recruit_string = localize("Covert: Voluntery"); } draw_text(xx + (spacing_x * 3) + 35, _half_way - 20, _recruit_string); @@ -1678,7 +1649,7 @@ function PlanetData(_planet, _system) constructor { _type_button.draw(true); - draw_text(xx + (spacing_x * 3) - 15, _half_way + spacing_y - 20, $"Req:{_recruit_world.recruit_cost * 2}"); + draw_text(xx + (spacing_x * 3) - 15, _half_way + spacing_y - 20, localize("Req:{0}", [_recruit_world.recruit_cost * 2])); if (_recruit_world.recruit_cost > 0) { obj_star_select.recruitment_costdown_button.update({x1: xx + (spacing_x * 2) + 35, y1: _half_way + spacing_y, allow_click: true}); @@ -1716,7 +1687,7 @@ function PlanetData(_planet, _system) constructor { } if (sabotage_force && irandom(2) < 2) { planet_forces[eFACTION.NECRONS]--; - scr_event_log("green", $"sabotage force on {name()} disrupts necron forces", name); + scr_event_log("green", localize("sabotage force on {0} disrupts necron forces", [name()]), name); } if (has_awake_tomb) { @@ -1866,16 +1837,16 @@ function PlanetData(_planet, _system) constructor { if (cult.hiding) { if (population_influences[eFACTION.TYRANIDS] > 50) { var find_cult_chance = irandom(50); - var alert_text = $"A hidden Genestealer Cult on {name()} Has suddenly burst forth from hiding!"; + var alert_text = localize("A hidden Genestealer Cult on {0} Has suddenly burst forth from hiding!", [name()]); if (planet_garrison.garrison_force) { - alert_text = $"A hidden Genestealer Cult on {name()} Has been discovered by marine garrisons!"; + alert_text = localize("A hidden Genestealer Cult on {0} Has been discovered by marine garrisons!", [name()]); find_cult_chance -= 25; } if (find_cult_chance < 1) { cult.hiding = false; - scr_popup("System Lost", alert_text, "Genestealer Cult", ""); + scr_popup(localize("System Lost"), alert_text, "Genestealer Cult", ""); set_new_owner(eFACTION.TYRANIDS); - scr_event_log("red", $"A hidden Genestealer Cult on {name()} has Started a revolt.", system.name); + scr_event_log("red", localize("A hidden Genestealer Cult on {0} has Started a revolt.", [name()]), system.name); edit_forces(eFACTION.TYRANIDS, 1); } } @@ -1934,7 +1905,7 @@ function PlanetData(_planet, _system) constructor { if (success && (pdf == 0) && (guardsmen == 0) && (planet_forces[eFACTION.TAU] == 0) && (planet_forces[eFACTION.ORK] == 0)) { set_new_owner(eFACTION.HERETICS); - scr_alert("red", "owner", $"{name()} has fallen to heretics!", x, y); + scr_alert("red", "owner", localize("{0} has fallen to heretics!", [name()]), x, y); if (system.visited == 1) { //visited variable check whether the star has been visited or not 1 for true 0 for false @@ -1983,16 +1954,16 @@ function PlanetData(_planet, _system) constructor { if (planet_forces[eFACTION.HERETICS] == 0) { if (pdf > 0) { - tixt = $"{scr_display_number(lost)} PDF killed in a rebellion on {name()}."; + tixt = localize("{0} PDF killed in a rebellion on {1}.", [scr_display_number(lost), name()]); } else if (pdf == 0) { - tixt = $"Heretic cults have appeared in {name()}."; + tixt = localize("Heretic cults have appeared in {0}.", [name()]); } scr_alert("purple", "owner", tixt, x, y); scr_event_log("purple", tixt, system.name); } } else { - tixt = $"Marine garrisons prevents rebellion on {name()}"; + tixt = localize("Marine garrisons prevents rebellion on {0}", [name()]); scr_alert("green", "owner", tixt, x, y); scr_event_log("green", tixt, system.name); corruption -= irandom(5); @@ -2006,7 +1977,7 @@ function PlanetData(_planet, _system) constructor { } edit_forces(eFACTION.HERETICS, traitor_mod); - tixt = $"Heretic cults have appeared in {name()}."; + tixt = localize("Heretic cults have appeared in {0}.", [name()]); } else if ((_rando >= 81) && (_rando < 91) && (planet_forces[eFACTION.HERETICS] < 3)) { // Minor uprising if (is_garrison_force) { @@ -2015,7 +1986,7 @@ function PlanetData(_planet, _system) constructor { traitor_mod = 3; } edit_forces(eFACTION.HERETICS, traitor_mod); - tixt = $"Heretic cults have spread around {name()}."; + tixt = localize("Heretic cults have spread around {0}.", [name()]); } // Major uprising // major and huge uprisings are impossible as long as a garrisons of at least 10 marines is present @@ -2028,9 +1999,9 @@ function PlanetData(_planet, _system) constructor { } var n_name = name(); - scr_popup("Heretic Revolt", $"A massive heretic uprising on {n_name} threatens to plunge the star system into chaos.", "chaos_cultist", ""); - scr_alert("red", "owner", $"Massive heretic uprising on {n_name}.", x, y); - scr_event_log("purple", $"Massive heretic uprising on {n_name}.", system.name); + scr_popup(localize("Heretic Revolt"), localize("A massive heretic uprising on {0} threatens to plunge the star system into chaos.", [n_name]), "chaos_cultist", ""); + scr_alert("red", "owner", localize("Massive heretic uprising on {0}.", [n_name]), x, y); + scr_event_log("purple", localize("Massive heretic uprising on {0}.", [n_name]), system.name); } // Huge uprising if ((_rando >= 100) && (planet_forces[eFACTION.HERETICS] < 5)) { @@ -2040,7 +2011,7 @@ function PlanetData(_planet, _system) constructor { set_corruption(corruption < 80 ? 80 : 95); - tixt = $"Daemonic incursion on {name()}!"; + tixt = localize("Daemonic incursion on {0}!", [name()]); } // Oh god what if ((_rando >= 41) && (!notixt) && tixt != "") { @@ -2060,12 +2031,12 @@ function PlanetData(_planet, _system) constructor { add_problem("succession", irandom(6) + 4); set_player_disposition(-5000); - scr_popup("War of Succession", $"The planetary governor of {name()} has died. Several subordinates and other parties each claim to be the true heir and successor- war has erupted across the planet as a result. Heresy thrives in chaos.", "succession", ""); + scr_popup(localize("War of Succession"), localize("The planetary governor of {0} has died. Several subordinates and other parties each claim to be the true heir and successor- war has erupted across the planet as a result. Heresy thrives in chaos.", [name()]), "succession", ""); var _star_alert = create_alert(); _star_alert.image_alpha = 1; _star_alert.image_speed = 1; _star_alert.col = "red"; - scr_event_log("red", $"War of Succession on {name()}"); + scr_event_log("red", localize("War of Succession on {0}", [name()])); }; static init_fallen_marines = function() { @@ -2078,9 +2049,9 @@ function PlanetData(_planet, _system) constructor { return; } - var _text = $"Sources indicate one of the Fallen may be upon {name()}. We have {_eta} months to send out a strike team and scour the planet. Any longer and any Fallen that might be there will have escaped."; - scr_popup("Hunt the Fallen", _text, "fallen", ""); - scr_event_log("", $"Sources indicate one of the Fallen may be upon {name()}. We have {_eta} months to investigate."); + var _text = localize("Sources indicate one of the Fallen may be upon {0}. We have {1} months to send out a strike team and scour the planet. Any longer and any Fallen that might be there will have escaped.", [name(), _eta]); + scr_popup(localize("Hunt the Fallen"), _text, "fallen", ""); + scr_event_log("", localize("Sources indicate one of the Fallen may be upon {0}. We have {1} months to investigate.", [name(), _eta])); var star_alert = create_alert(); star_alert.image_alpha = 1; star_alert.image_speed = 1; diff --git a/scripts/scr_Table/scr_Table.gml b/scripts/scr_Table/scr_Table.gml index f22134b707..6fd0d4e69c 100644 --- a/scripts/scr_Table/scr_Table.gml +++ b/scripts/scr_Table/scr_Table.gml @@ -10,6 +10,10 @@ function Table(data) constructor { row_key_draw = []; + localize_values = false; + + localize_headings = false; + halign = fa_center; colour = CM_GREEN_COLOR; @@ -30,10 +34,13 @@ function Table(data) constructor { for (var i = 0; i < array_length(headings); i++) { var _col_width = 0; var _heading = headings[i]; + var _localize_heading = localize_headings; if (is_string(_heading)) { - headings[i] = new ReactiveString(_heading, 0, 0, { + var _heading_key = _heading; + headings[i] = new ReactiveString(_localize_heading ? localize(_heading_key) : _heading_key, 0, 0, { scale_text: true, }); + headings[i].loc_key = _heading_key; } _heading = headings[i]; @@ -49,7 +56,8 @@ function Table(data) constructor { } } - _heading.update({max_width: column_widths[i], x1: x1 + w + (column_widths[i] / 2), y1: y1, halign: halign}); + var _heading_text = struct_exists(_heading, "loc_key") && _localize_heading ? localize(_heading.loc_key) : _heading.text; + _heading.update({text: _heading_text, max_width: column_widths[i], x1: x1 + w + (column_widths[i] / 2), y1: y1, halign: halign}); if (_heading.h > header_h) { header_h = _heading.h; @@ -93,7 +101,7 @@ function Table(data) constructor { draw_set_halign(halign); draw_set_valign(fa_top); draw_set_color(colour); - draw_set_font(font); + draw_set_font(cjk_font(font)); row_h = max(row_h, string_height("a") + 1); @@ -123,7 +131,11 @@ function Table(data) constructor { } else if (is_struct(_row)) { for (var d = 0; d < array_length(row_key_draw) && d < _cols; d++) { var _key = row_key_draw[d]; - var _scale_edits = calc_text_scale_confines(_row[$ _key], column_widths[d], 0); + var _value = _row[$ _key]; + if (localize_values && is_string(_value)) { + _value = localize(_value); + } + var _scale_edits = calc_text_scale_confines(_value, column_widths[d], 0); var _scale = min(1, _scale_edits.scale); var _text = _scale_edits.text; draw_text_transformed(_col_draw_x + (column_widths[d] / 2), _row_level, _text, _scale, _scale, 0); diff --git a/scripts/scr_company_struct/scr_company_struct.gml b/scripts/scr_company_struct/scr_company_struct.gml index a2b3b899c3..264f3de27a 100644 --- a/scripts/scr_company_struct/scr_company_struct.gml +++ b/scripts/scr_company_struct/scr_company_struct.gml @@ -302,7 +302,7 @@ function CompanyStruct(comp) constructor { var _squad_sys = squad_loc.system; var _cur_squad = grab_current_squad(); if (_cur_squad.assignment == "none") { - draw_text_transformed(xx + bound_width[0] + 5, yy + bound_height[0] + 125, $"Squad has no current assignments", 1, 1, 0); + draw_text_transformed(xx + bound_width[0] + 5, yy + bound_height[0] + 125, localize("Squad has no current assignments"), 1, 1, 0); var send_on_mission = false, mission_type; if (squad_loc.same_system && (_squad_sys != "Warp" && _squad_sys != "Lost")) { @@ -328,8 +328,8 @@ function CompanyStruct(comp) constructor { return; } var cur_assignment = _cur_squad.assignment; - draw_text_transformed(xx + bound_width[0] + 5, yy + bound_height[0] + 125, $"Assignment : {cur_assignment.type}", 1, 1, 0); - var tooltip_text = "Cancel Assignment"; + draw_text_transformed(xx + bound_width[0] + 5, yy + bound_height[0] + 125, localize("Assignment : {0}", [localize(cur_assignment.type)]), 1, 1, 0); + var tooltip_text = localize("Cancel Assignment"); var cancel_but = draw_unit_buttons([xx + bound_width[0] + 5, yy + bound_height[0] + 150], tooltip_text, [1, 1], c_red,,,, true); if (point_and_click(cancel_but) || keyboard_check_pressed(ord("C"))) { var cancel_system = noone; @@ -353,7 +353,7 @@ function CompanyStruct(comp) constructor { } bound_height[0] += 180; if (cur_assignment.type == "garrison") { - var garrison_but = draw_unit_buttons([cancel_but[2] + 10, cancel_but[1]], "View Garrison", [1, 1], c_red,,,, true); + var garrison_but = draw_unit_buttons([cancel_but[2] + 10, cancel_but[1]], localize("View Garrison"), [1, 1], c_red,,,, true); if (point_and_click(garrison_but)) { var garrrison_star = find_star_by_name(cur_assignment.location); obj_controller.view_squad = false; @@ -551,12 +551,12 @@ function CompanyStruct(comp) constructor { //should be moved elsewhere for efficiency var _squad_leader = _cur_squad.determine_leader(); if (is_struct(_squad_leader)) { - var leader_text = $"Squad Leader : {_squad_leader.name_role()}"; + var leader_text = localize("Squad Leader : {0}", [localized_name_role(_squad_leader)]); draw_text_transformed(xx + bound_width[0] + 5, yy + bound_height[0] + 50, leader_text, 1, 1, 0); } squad_loc = _cur_squad.squad_loci(); - draw_text_transformed(xx + bound_width[0] + 5, yy + bound_height[0] + 75, $"Squad Members : {_cur_squad.life_members}", 1, 1, 0); - draw_text_transformed(xx + bound_width[0] + 5, yy + bound_height[0] + 100, $"Squad Location : {squad_loc.text}", 1, 1, 0); + draw_text_transformed(xx + bound_width[0] + 5, yy + bound_height[0] + 75, localize("Squad Members : {0}", [_cur_squad.life_members]), 1, 1, 0); + draw_text_transformed(xx + bound_width[0] + 5, yy + bound_height[0] + 100, localize("Squad Location : {0}", [squad_loc.text]), 1, 1, 0); if (!squad_selection_mode()) { draw_squad_assignment_options(); @@ -588,13 +588,13 @@ function CompanyStruct(comp) constructor { previous_squad_button.keystroke = press_exclusive(vk_left); next_squad_button.keystroke = press_exclusive(vk_tab); //TODO compartmentalise drop down option logic - var deploy_text = "Squad will deploy in the"; + var deploy_text = localize("Squad will deploy in the"); if (_cur_squad.formation_place != "") { - //draw_set_font(fnt_40k_14b) + //draw_set_font(cjk_font(fnt_40k_14b)) draw_text_transformed(xx + bound_width[0] + 5, yy + bound_height[0], deploy_text, 1, 1, 0); button = draw_unit_buttons([xx + bound_width[0] + 5 + string_width(deploy_text), yy + bound_height[0] - 2], _cur_squad.formation_place, [1, 1], c_green,,,, true); draw_set_color(c_red); - draw_text_transformed(xx + bound_width[0] + 5 + string_width(deploy_text) + string_width(_cur_squad.formation_place) + 9, yy + bound_height[0], "column", 1, 1, 0); + draw_text_transformed(xx + bound_width[0] + 5 + string_width(deploy_text) + string_width(_cur_squad.formation_place) + 9, yy + bound_height[0], localize("column"), 1, 1, 0); draw_set_color(c_gray); if (array_length(_cur_squad.formation_options) > 1) { if (scr_hit(button)) { diff --git a/scripts/scr_fleet_advisor/scr_fleet_advisor.gml b/scripts/scr_fleet_advisor/scr_fleet_advisor.gml index 9e6311d9fd..136af8d50d 100644 --- a/scripts/scr_fleet_advisor/scr_fleet_advisor.gml +++ b/scripts/scr_fleet_advisor/scr_fleet_advisor.gml @@ -34,58 +34,54 @@ function scr_fleet_advisor() { } draw_set_halign(fa_left); draw_set_color(c_gray); - draw_set_font(fnt_40k_30b); - draw_text_transformed(xx + 352, yy + 66, "Flagship Bridge", 1, 1, 0); - draw_text_transformed(xx + 352, yy + 100, $"Master of the Fleet {ini.lord_admiral_name}", 0.6, 0.6, 0); - draw_set_font(fnt_40k_14); - _blurp = "Greetings, Chapter Master.\n\nYou requested a report? Our fleet contains "; + draw_set_font(cjk_font(fnt_40k_30b)); + draw_text_transformed(xx + 352, yy + 66, localize("Flagship Bridge"), 1, 1, 0); + draw_text_transformed(xx + 352, yy + 100, localize("Master of the Fleet {0}", [ini.lord_admiral_name]), 0.6, 0.6, 0); + draw_set_font(cjk_font(fnt_40k_14)); + _blurp = localize("Greetings, Chapter Master.\n\nYou requested a report? Our fleet contains "); } if (menu_adept == 1) { scr_image("advisor/splash", 1, xx + 16, yy + 43, 310, 828); draw_set_halign(fa_left); draw_set_color(c_gray); - draw_set_font(fnt_40k_30b); - draw_text_transformed(xx + 352, yy + 40, "Flagship Bridge", 1, 1, 0); - draw_text_transformed(xx + 352, yy + 100, $"Adept {cn.adept_name}", 0.6, 0.6, 0); - draw_set_font(fnt_40k_14); - _blurp = "Your fleet contains "; + draw_set_font(cjk_font(fnt_40k_30b)); + draw_text_transformed(xx + 352, yy + 40, localize("Flagship Bridge"), 1, 1, 0); + draw_text_transformed(xx + 352, yy + 100, localize("Adept {0}", [cn.adept_name]), 0.6, 0.6, 0); + draw_set_font(cjk_font(fnt_40k_14)); + _blurp = localize("Your fleet contains "); } - _blurp += string(temp[37]) + " Capital Ships, "; - _blurp += string(temp[38]) + " Frigates, and "; - _blurp += string(temp[39]) + " Escorts"; + var _adept = menu_adept == 1; + + _blurp += localize("{0} Capital Ships, ", [string(temp[37])]); + _blurp += localize("{0} Frigates, and ", [string(temp[38])]); + _blurp += localize("{0} Escorts", [string(temp[39])]); var _hull_normalized = real(temp[41]); if (_hull_normalized >= 1) { - _blurp += ", none of which are damaged."; + _blurp += localize(", none of which are damaged."); } else if (_hull_normalized < 1) { - _blurp += $". Our most damaged vessel is the {temp[40]} - it has {min(99, round(_hull_normalized * 100))}% Hull Integrity."; + _blurp += localize(_adept ? ". Your most damaged vessel is the {0} - it has {1}% Hull Integrity." : ". Our most damaged vessel is the {0} - it has {1}% Hull Integrity.", [temp[40], string(min(99, round(_hull_normalized * 100)))]); } var _crippled_ships = real(temp[42]); if (_crippled_ships == 2) { - _blurp += " Two of our ships are highly damaged. You may wish to purchase a Repair License from the Sector Governerner."; + _blurp += localize(_adept ? " Two of your ships are highly damaged. You may wish to purchase a Repair License from the Sector Governerner." : " Two of our ships are highly damaged. You may wish to purchase a Repair License from the Sector Governerner."); } else if (_crippled_ships > 2) { - _blurp += " Several of our ships are highly damaged. It is advisable that you purchase a Repair License from the Sector Governer."; + _blurp += localize(_adept ? " Several of your ships are highly damaged. It is advisable that you purchase a Repair License from the Sector Governer." : " Several of our ships are highly damaged. It is advisable that you purchase a Repair License from the Sector Governer."); } - _blurp += "\n\nHere are the current positions of our ships and their contents:"; - - if (menu_adept == 1) { - _blurp = string_replace(_blurp, "Our", "Your"); - _blurp = string_replace(_blurp, " our", " your"); - _blurp = string_replace(_blurp, "We", "You"); - } + _blurp += localize(_adept ? "\n\nHere are the current positions of your ships and their contents:" : "\n\nHere are the current positions of our ships and their contents:"); draw_text_ext(xx + 352, yy + 130, _blurp, -1, 536); - draw_set_font(fnt_40k_30b); + draw_set_font(cjk_font(fnt_40k_30b)); draw_set_halign(fa_center); - draw_text_transformed(xx + 1262, yy + 40, "Fleet", 0.6, 0.6, 0); + draw_text_transformed(xx + 1262, yy + 40, localize("Fleet"), 0.6, 0.6, 0); - draw_set_font(fnt_40k_14); + draw_set_font(cjk_font(fnt_40k_14)); draw_set_halign(fa_left); // TODO: Probably a good idea to turn this whole interactive list/sheet generating logic into a constructor, that can be reused on many screens. @@ -94,27 +90,27 @@ function scr_fleet_advisor() { var _columns = { name: { w: 176, - text: "Name", + text: localize("Name"), h_align: fa_left, }, class: { w: 154, - text: "Class", + text: localize("Class"), h_align: fa_left, }, location: { w: 130, - text: "Location", + text: localize("Location"), h_align: fa_left, }, hp: { w: 44, - text: "HP", + text: localize("HP"), h_align: fa_right, }, carrying: { w: 84, - text: "Carrying", + text: localize("Carrying"), h_align: fa_right, }, }; @@ -182,7 +178,7 @@ function scr_fleet_advisor() { with (_columns) { name.contents = string_truncate(ini.ship[i], _columns.name.w - 6); - class.contents = ini.ship_class[i]; + class.contents = localize(ini.ship_class[i]); location.contents = ini.ship_location[i]; hp.contents = $"{round(ini.ship_hp[i] / ini.ship_maxhp[i] * 100)}%"; carrying.contents = $"{ini.ship_carrying[i]}/{ini.ship_capacity[i]}"; @@ -237,7 +233,7 @@ function scr_fleet_advisor() { cn.temp[119] = scr_ship_occupants(i); } } - tooltip_draw($"Carrying ({cn.temp[118]}): {cn.temp[119]}"); + tooltip_draw(localize("Carrying ({0}): {1}", [cn.temp[118], cn.temp[119]])); if (_goto_button.click()) { with (obj_p_fleet) { var _fleet_ships = fleet_full_ship_array(); @@ -257,10 +253,10 @@ function scr_fleet_advisor() { } if (cn.temp[101] != "") { - draw_set_font(fnt_40k_30b); + draw_set_font(cjk_font(fnt_40k_30b)); draw_set_halign(fa_center); draw_text_transformed(xx + 622, yy + 434, cn.temp[101], 0.75, 0.75, 0); - draw_text_transformed(xx + 622, yy + 464, cn.temp[102], 0.5, 0.5, 0); + draw_text_transformed(xx + 622, yy + 464, localize(cn.temp[102]), 0.5, 0.5, 0); draw_set_color(c_gray); draw_rectangle(xx + 488, yy + 492, xx + 756, yy + 634, 1); @@ -281,31 +277,25 @@ function scr_fleet_advisor() { draw_sprite(spr_ship_back_white, ship_im, xx + 488, yy + 492); draw_set_color(c_gray); - draw_set_font(fnt_40k_14); + draw_set_font(cjk_font(fnt_40k_14)); draw_set_halign(fa_left); - draw_text(xx + 383, yy + 655, $"Health: {cn.temp[103]}/{cn.temp[104]}"); - draw_text(xx + 588, yy + 655, $"Shields: {cn.temp[105]}"); - draw_text(xx + 768, yy + 655, $"Armour: {cn.temp[107]},{cn.temp[108]}"); + draw_text(xx + 383, yy + 655, localize("Health: {0}/{1}", [cn.temp[103], cn.temp[104]])); + draw_text(xx + 588, yy + 655, localize("Shields: {0}", [cn.temp[105]])); + draw_text(xx + 768, yy + 655, localize("Armour: {0},{1}", [cn.temp[107], cn.temp[108]])); - draw_text(xx + 495, yy + 675, $"Speed: {cn.temp[106]}"); - draw_text(xx + 680, yy + 675, $"Turrets: {cn.temp[109]}"); + draw_text(xx + 495, yy + 675, localize("Speed: {0}", [cn.temp[106]])); + draw_text(xx + 680, yy + 675, localize("Turrets: {0}", [cn.temp[109]])); - if (cn.temp[110] != "") { - draw_text(xx + 383, yy + 705, $"-{cn.temp[110]} ({cn.temp[111]})"); - } - if (cn.temp[112] != "") { - draw_text(xx + 383, yy + 725, $"-{cn.temp[112]} ({cn.temp[113]})"); - } - if (cn.temp[114] != "") { - draw_text(xx + 383, yy + 745, $"-{cn.temp[114]} ({cn.temp[115]})"); - } - if (cn.temp[116] != "") { - draw_text(xx + 383, yy + 765, $"-{cn.temp[116]} ({cn.temp[117]})"); + for (var s = 0; s < 4; s++) { + var _wep = 110 + (s * 2); + if (cn.temp[_wep] != "") { + draw_text(xx + 383, yy + 705 + (s * 20), localize("-{0} ({1})", [localize(cn.temp[_wep]), cn.temp[_wep + 1]])); + } } - draw_set_font(fnt_40k_12); - draw_set_font(fnt_40k_14); + draw_set_font(cjk_font(fnt_40k_12)); + draw_set_font(cjk_font(fnt_40k_14)); } } // 31 wide diff --git a/scripts/scr_garrison/scr_garrison.gml b/scripts/scr_garrison/scr_garrison.gml index 51495b5f18..4b2d560c03 100644 --- a/scripts/scr_garrison/scr_garrison.gml +++ b/scripts/scr_garrison/scr_garrison.gml @@ -2,29 +2,29 @@ function disposition_description_chart(dispo) { if (global.cheat_debug) { return $"{dispo}"; } else if (dispo < -4000) { - return "Ruled"; + return localize("Ruled"); } else if (dispo < -100) { - return "DEBUG: Numbers lower than -100 detected, this shouldn't happen!"; + return localize("DEBUG: Numbers lower than -100 detected, this shouldn't happen!"); } else if (dispo <= 0) { - return "Extremely Hostile"; + return localize("Extremely Hostile"); } else if (dispo < 10) { - return "Very Hostile"; + return localize("Very Hostile"); } else if (dispo < 30) { - return "Hostile"; + return localize("Hostile"); } else if (dispo < 50) { - return "Uneasy"; + return localize("Uneasy"); } else if (dispo < 60) { - return "Neutral"; + return localize("Neutral"); } else if (dispo < 70) { - return "Friendly"; + return localize("Friendly"); } else if (dispo < 80) { - return "Very Friendly"; + return localize("Very Friendly"); } else if (dispo < 90) { - return "Excellent"; + return localize("Excellent"); } else if (dispo <= 100) { - return "Unquestionable"; + return localize("Unquestionable"); } else { - return "DEBUG: Numbers higher than 100, this shouldn't happen!"; + return localize("DEBUG: Numbers higher than 100, this shouldn't happen!"); } } @@ -181,26 +181,26 @@ function GarrisonForce(system, planet, type = "garrison") constructor { static garrison_report = function() { var system = obj_star_select.target; var planet = obj_controller.selecting_planet; - var report_string = "Hail My lord.##"; - report_string += $"Report for garrison on {system.name} {scr_roman_numerals()[planet - 1]} is as follows#"; + var report_string = localize("Hail My lord.##"); + report_string += localize("Report for garrison on {0} {1} is as follows#", [system.name, scr_roman_numerals()[planet - 1]]); if (array_length(garrison_squads) > 1) { - report_string += $"The garrison is comprised of {array_length(garrison_squads)} squads,"; + report_string += localize("The garrison is comprised of {0} squads,", [string(array_length(garrison_squads))]); } else { - report_string += "The garrison is comprised of a single squad,"; + report_string += localize("The garrison is comprised of a single squad,"); } - report_string += $" with a total man count of {total_garrison}.#"; + report_string += localize(" with a total man count of {0}.#", [total_garrison]); if (system.p_owner[planet] != eFACTION.PLAYER && system.dispo[planet] >= -100) { var disposition = disposition_description_chart(system.dispo[planet]); - report_string += $"Our Relationship with the Rulers of the planet is {disposition}#"; + report_string += localize("Our Relationship with the Rulers of the planet is {0}#", [disposition]); } else if (system.dispo[planet] < -1000) { if (system.p_owner[planet] == eFACTION.PLAYER) { - report_string += $"Rule of the planet is going well"; + report_string += localize("Rule of the planet is going well"); } else { - report_string += $"Your rule of the the planet is being undermined by hostile forces"; + report_string += localize("Your rule of the the planet is being undermined by hostile forces"); } } else { - report_string += $"DEBUG: planet owner check failed"; + report_string += localize("DEBUG: planet owner check failed"); //report_string+=$"There is no clear chain of command on the planet we suspect the existence of Xenos or Heretic Forces"; // TODO LOW GARRISON_XENO // Readd when this actually gets implented } @@ -318,10 +318,10 @@ function GarrisonForce(system, planet, type = "garrison") constructor { //equally a feat does not be stored anywhere you can just makeem up on the fly where as a trait has to be stored in teh global trait list //this may all be subject to change but in my head it's coming together case "hold_breach": - _unit.add_feat({ident: "hold_breach", title: "Held breach", planet: planet, grade: 5, location: "location", text: $"Single Handedly held a breach in the {alligience} during the {effort} {attack_defend} of {location} {scr_roman_numeral[planet - 1]} from the Orks"}); + _unit.add_feat({ident: "hold_breach", title: localize("Held breach"), planet: planet, grade: 5, location: "location", text: localize("Single Handedly held a breach in the {0} during the {1} {2} of {3} {4} from the Orks", [alligience, effort, attack_defend, location, scr_roman_numeral[planet - 1]])}); break; case "still_standing": - _unit.add_feat({ident: "still_standing", planet: planet, location: "location", text: $"Was pullled from beneath the carcesses of his slain {alligience} during the {effort} {attack_defend} of {location} {scr_roman_numeral[planet - 1]} from the Orks"}); + _unit.add_feat({ident: "still_standing", planet: planet, location: "location", text: localize("Was pullled from beneath the carcesses of his slain {0} during the {1} {2} of {3} {4} from the Orks", [alligience, effort, attack_defend, location, scr_roman_numeral[planet - 1]])}); } } } else { @@ -336,7 +336,7 @@ function GarrisonForce(system, planet, type = "garrison") constructor { } } } - scr_popup("Garrison Report", "Garrison forces on......", "imperial", ""); + scr_popup(localize("Garrison Report"), localize("Garrison forces on......"), "imperial", ""); break; } } @@ -347,7 +347,7 @@ function determine_pdf_defence(pdf, garrison = noone, planet_forti = 0, enemy = var explanations = ""; var defence_mult = planet_forti * 0.1; var pdf_score = 0; - explanations += $"Planet Defences:X{defence_mult + 1}#"; + explanations += localize("Planet Defences:X{0}#", [defence_mult + 1]); if (garrison != noone) { //if player supports give garrison bonus var garrison_mult = garrison.viable_garrison * (0.008 + (0.001 * planet_forti)); @@ -355,9 +355,9 @@ function determine_pdf_defence(pdf, garrison = noone, planet_forti = 0, enemy = if (siege_masters) { garrison_mult *= 2; } - explanations += $"Garrison Bonus:X{garrison_mult + 1}#"; + explanations += localize("Garrison Bonus:X{0}#", [garrison_mult + 1]); if (siege_masters) { - explanations += $" Siege Masters:X2#"; + explanations += localize(" Siege Masters:X2#"); } if (!garrison.garrison_leader) { garrison.find_leader(); @@ -365,7 +365,7 @@ function determine_pdf_defence(pdf, garrison = noone, planet_forti = 0, enemy = defence_mult += garrison_mult; var leader_bonus = garrison.garrison_leader.wisdom / 30; defence_mult *= leader_bonus; //modified by how good a commander the garrison _leader is - explanations += $" Garrison Leader Bonus:X{leader_bonus}(WIS/30)#"; + explanations += localize(" Garrison Leader Bonus:X{0}(WIS/30)#", [leader_bonus]); //makes pdf more effective if planet has defences or marines present } @@ -386,7 +386,7 @@ function determine_pdf_defence(pdf, garrison = noone, planet_forti = 0, enemy = } else if (pdf <= 500) { pdf_score = 0.1; } - explanations += $"PDF Defence: {pdf_score}#"; + explanations += localize("PDF Defence: {0}#", [pdf_score]); pdf_score *= 1 + defence_mult; return [ pdf_score, diff --git a/scripts/scr_marine_struct/scr_marine_struct.gml b/scripts/scr_marine_struct/scr_marine_struct.gml index 439afa3421..5f66fd67c1 100644 --- a/scripts/scr_marine_struct/scr_marine_struct.gml +++ b/scripts/scr_marine_struct/scr_marine_struct.gml @@ -1854,12 +1854,15 @@ function TTRPG_stats(faction, comp, mar, class = "marine", other_spawn_data = {} }; //quick way of getting name and role combined in string - static name_role = function(include_epithet = true, include_role = true) { + static name_role = function(include_epithet = true, include_role = true, localize_role = false) { var _name = name(); var _epithet = ""; if (include_role) { var _temp_role = squad_role(); + if (localize_role) { + _temp_role = localize(_temp_role); + } _name = string("{0} {1}", _temp_role, _name); } @@ -2384,3 +2387,11 @@ function fetch_unit_uid(uuid) { return undefined; } + +/// @desc Localizes a unit's role and appends its name and first epithet, mirroring +/// name_role()'s display order while keeping the role translatable. +/// @param {Struct} _unit A marine unit struct. +/// @returns {string} +function localized_name_role(_unit) { + return _unit.name_role(true, true, true); +} diff --git a/scripts/scr_promote/scr_promote.gml b/scripts/scr_promote/scr_promote.gml index 314cf6e589..44f214a92c 100644 --- a/scripts/scr_promote/scr_promote.gml +++ b/scripts/scr_promote/scr_promote.gml @@ -131,7 +131,7 @@ function target_company_radio(min_exp = 0) { array_push(_company_options, {str1: int_to_roman(i), font: fnt_40k_14b, val: i}); } } - companies_select = new RadioSet(_company_options, "Target Company", { + companies_select = new RadioSet(_company_options, localize("Target Company"), { max_width: 500, x1: 1040, y1: 210, @@ -151,20 +151,20 @@ function draw_popup_promotion() { draw_set_color(0); main_slate.draw_with_dimensions(); - draw_set_font(fnt_40k_14b); + draw_set_font(cjk_font(fnt_40k_14b)); draw_set_halign(fa_center); draw_set_color(CM_GREEN_COLOR); - draw_text(1292, 150, "Promoting"); + draw_text(1292, 150, localize("Promoting")); var romanNumerals = scr_roman_numerals(); - draw_set_font(fnt_40k_12); + draw_set_font(cjk_font(fnt_40k_12)); var comp = ""; if (company <= 10 && company > 0) { comp = romanNumerals[company - 1]; } else if (company > 10) { - comp = "HQ"; + comp = localize("HQ"); } - draw_text(1292, 175, $"{comp} Company {unit_role}"); + draw_text(1292, 175, localize("{0} Company {1}", [comp, localize(unit_role)])); companies_select.draw(); if (companies_select.changed) { @@ -173,7 +173,7 @@ function draw_popup_promotion() { get_unit_promotion_options(); } draw_set_halign(fa_left); - draw_text(1020, 290, "Target Role:"); //choose new role + draw_text(1020, 290, localize("Target Role:")); //choose new role var role_x = 0; role_y = 0; if (target_comp != -1) { @@ -187,7 +187,7 @@ function draw_popup_promotion() { if (min_exp < role_exp[r]) { draw_set_alpha(0.25); } - draw_text(1030 + role_x, 310 + role_y, $"{role_name[r]} [{check}]"); + draw_text(1030 + role_x, 310 + role_y, localize("{0} [{1}]", [localize(role_name[r]), check])); if (point_and_click([1030 + role_x, 310 + role_y, 1180 + role_x, 330 + role_y])) { if (min_exp >= role_exp[r]) { target_role = r; @@ -206,7 +206,7 @@ function draw_popup_promotion() { draw_set_alpha(1); - draw_text(1020, 370, string_hash_to_newline("Required Gear:")); + draw_text(1020, 370, string_hash_to_newline(localize("Required Gear:"))); var gr = 0, tox = ""; if (target_role > 0) { @@ -218,7 +218,7 @@ function draw_popup_promotion() { } else { draw_set_color(CM_GREEN_COLOR); } - draw_text(1030, 390, $"{req_armour_num} {req_armour} (Have {have_armour_num})"); + draw_text(1030, 390, localize("{0} {1} (Have {2})", [req_armour_num, localize(req_armour), have_armour_num])); } if (req_gear != "") { gr = req_gear_num - have_gear_num; @@ -228,7 +228,7 @@ function draw_popup_promotion() { } else { draw_set_color(CM_GREEN_COLOR); } - draw_text(1030, 410, $"{req_gear_num} {req_gear} (Have {have_gear_num})"); + draw_text(1030, 410, localize("{0} {1} (Have {2})", [req_gear_num, localize(req_gear), have_gear_num])); } if (req_mobi != "") { gr = req_mobi_num - have_mobi_num; @@ -238,7 +238,7 @@ function draw_popup_promotion() { } else { draw_set_color(CM_GREEN_COLOR); } - draw_text(1030, 430, $"{req_mobi_num} {req_mobi} (Have {have_mobi_num})"); + draw_text(1030, 430, localize("{0} {1} (Have {2})", [req_mobi_num, localize(req_mobi), have_mobi_num])); } if (req_wep1 != "") { gr = req_wep1_num - have_wep1_num; @@ -248,7 +248,7 @@ function draw_popup_promotion() { } else { draw_set_color(CM_GREEN_COLOR); } - draw_text(1280, 390, $"{req_wep1_num} {req_wep1} (Have {have_wep1_num})"); + draw_text(1280, 390, localize("{0} {1} (Have {2})", [req_wep1_num, localize(req_wep1), have_wep1_num])); } if (req_wep2 != "") { gr = req_wep2_num - have_wep2_num; @@ -258,7 +258,7 @@ function draw_popup_promotion() { } else { draw_set_color(CM_GREEN_COLOR); } - draw_text(1280, 410, $"{req_wep2_num} {req_wep2} (Have {have_wep2_num})"); + draw_text(1280, 410, localize("{0} {1} (Have {2})", [req_wep2_num, localize(req_wep2), have_wep2_num])); } } diff --git a/scripts/scr_recruit_data/scr_recruit_data.gml b/scripts/scr_recruit_data/scr_recruit_data.gml index bd1255b89a..d8ce764be2 100644 --- a/scripts/scr_recruit_data/scr_recruit_data.gml +++ b/scripts/scr_recruit_data/scr_recruit_data.gml @@ -130,8 +130,8 @@ function find_recruit_success_chance(local_apothecary_points, system, planet, ui if (droll == 0) { var _planet_name = p_data.name; - scr_alert(#FF9900, "DIPLOMATIC DISASTER", $"Apothecaries at {_planet_name} has been spotted doing suspicious activities!", system.x, system.y); - scr_event_log(#FF9900, $"Apothecaries at {_planet_name} has been spotted doing suspicious activities!", system.name); + scr_alert(#FF9900, localize("DIPLOMATIC DISASTER"), localize("Apothecaries at {0} has been spotted doing suspicious activities!", [_planet_name]), system.x, system.y); + scr_event_log(#FF9900, localize("Apothecaries at {0} has been spotted doing suspicious activities!", [_planet_name]), system.name); p_data.add_disposition(-25); if (p_data.current_owner != eFACTION.PLAYER) { obj_controller.disposition[p_data.current_owner] -= 5; @@ -297,7 +297,7 @@ function planet_training_sequence(local_apothecary_points) { if (random(1) < recruit_type.seed_waste) { obj_controller.gene_seed--; //TODO make more informative - scr_alert("red", "owner", "Blood Duels are efficient in time, but costly in risk with gene material. Gene-seed has been lost.", 0, 0); + scr_alert("red", "owner", localize("Blood Duels are efficient in time, but costly in risk with gene material. Gene-seed has been lost."), 0, 0); } } } @@ -387,7 +387,7 @@ function scr_trial_data(wanted = -1) { 10, 2, ], - long_description: $"THE BLOOD DUEL? HA DO I EVEN NEED TO EXPLAIN, CHAPTER MASTER? ASPIRANTS ENTER. NEOPHYTES LEAVE. Those worthy of serving the Emperor are rewarded justly and those merely pretending at glory are lost in the BLOOD AND THUNDER of the dome. Do not be alarmed at the carnage. The Apothecarium has become quite adept at rebuilding those fit to serve. The others are given to the {role_data[eROLE.TECHMARINE]}s. The mind is a terrible thing to waste and the Emperor does hate waste. Not every man is useful as an Astartes but every man is useful.", + long_description: localize("THE BLOOD DUEL? HA DO I EVEN NEED TO EXPLAIN, CHAPTER MASTER? ASPIRANTS ENTER. NEOPHYTES LEAVE. Those worthy of serving the Emperor are rewarded justly and those merely pretending at glory are lost in the BLOOD AND THUNDER of the dome. Do not be alarmed at the carnage. The Apothecarium has become quite adept at rebuilding those fit to serve. The others are given to the {0}s. The mind is a terrible thing to waste and the Emperor does hate waste. Not every man is useful as an Astartes but every man is useful.", [role_data[eROLE.TECHMARINE]]), }, { name: "Hunting the Hunter", @@ -426,7 +426,7 @@ function scr_trial_data(wanted = -1) { Feudal: 1.5, }, }, - long_description: $"To be an Astartes is to be a hunter of xenos, of traitors, of heretics, and of all those that dare defy the Emperor. What better way to test the worthiness of Aspirants than to have to them hunt the most dangerous predator to be found on their planet? Such a task requires a combination of wits and cunning, in addition to raw martial skill. When they have received the blessed geneseed and become full battle brothers, they will hunt across the stars with bolter and chainsword. For now, let them hunt with nothing more than a spear and their wits.", + long_description: localize("To be an Astartes is to be a hunter of xenos, of traitors, of heretics, and of all those that dare defy the Emperor. What better way to test the worthiness of Aspirants than to have to them hunt the most dangerous predator to be found on their planet? Such a task requires a combination of wits and cunning, in addition to raw martial skill. When they have received the blessed geneseed and become full battle brothers, they will hunt across the stars with bolter and chainsword. For now, let them hunt with nothing more than a spear and their wits."), }, { name: "Survival of the Fittest", @@ -455,7 +455,7 @@ function scr_trial_data(wanted = -1) { 5, 1, ], - long_description: $"To become one of the Imperium’s finest warriors, the Space Marines, is the greatest glory that any human can aspire to. And is glory not worth fighting, bleeding or even dying for? It must be, for whole worlds of ice, ash and sand have buried generations of sons in pursuit of this glory and never once called the price too dear. To ensure the necessary bloodshed, lies, paranoia and psychosis-inducing drugs have been introduced to . This trial will seperate the weak from the strong and the chaff from the wheat.", + long_description: localize("To become one of the Imperium’s finest warriors, the Space Marines, is the greatest glory that any human can aspire to. And is glory not worth fighting, bleeding or even dying for? It must be, for whole worlds of ice, ash and sand have buried generations of sons in pursuit of this glory and never once called the price too dear. To ensure the necessary bloodshed, lies, paranoia and psychosis-inducing drugs have been introduced to . This trial will seperate the weak from the strong and the chaff from the wheat."), }, { name: "Exposure", @@ -510,7 +510,7 @@ function scr_trial_data(wanted = -1) { recruit_count_modifier: { base: 1.0, }, - long_description: $"Few worlds of the Imperium are free from the adversity of pollution or toxic waste. Still others are bequeathed with flows of lava and choking atmosphere. The glory of rising to astartes is only granted to those that can tackle and overcome these dangerous environments. Aspirants are placed upon the most hellish of planet in the sector, and then expected to traverse the continent with only himself to rely upon. Those who face the impossible without faltering and survive past the point they should have perished are recovered by {role_data[eROLE.APOTHECARY]}s, judged worthy of becoming a Neophyte.", + long_description: localize("Few worlds of the Imperium are free from the adversity of pollution or toxic waste. Still others are bequeathed with flows of lava and choking atmosphere. The glory of rising to astartes is only granted to those that can tackle and overcome these dangerous environments. Aspirants are placed upon the most hellish of planet in the sector, and then expected to traverse the continent with only himself to rely upon. Those who face the impossible without faltering and survive past the point they should have perished are recovered by {0}s, judged worthy of becoming a Neophyte.", [role_data[eROLE.APOTHECARY]]), }, { name: "Knowledge of self", @@ -545,7 +545,7 @@ function scr_trial_data(wanted = -1) { -5, 1, ], - long_description: $"An Aspirant’s spiritual and mental capability is every bit as important as his physical characteristics. It is wise to impose Trials not upon their body, but on the mind. Either through psychic powers, chemical agents, or endurance trials, the Aspirant’s willpower is tested. Those unworthy do not survive the stress and trauma placed upon their hearts- only those whose minds are proven to be unbreakable are welcomed into our ranks.", + long_description: localize("An Aspirant’s spiritual and mental capability is every bit as important as his physical characteristics. It is wise to impose Trials not upon their body, but on the mind. Either through psychic powers, chemical agents, or endurance trials, the Aspirant’s willpower is tested. Those unworthy do not survive the stress and trauma placed upon their hearts- only those whose minds are proven to be unbreakable are welcomed into our ranks."), }, { name: "Combat Challange", @@ -572,7 +572,7 @@ function scr_trial_data(wanted = -1) { 5, 1, ], - long_description: $"What better gauge of an Aspirant than in a duel with our astartes? Our brother, unarmed and unarmoured, will face against the armed challenger until one cannot continue. It is impossible for the Aspirant to actually succeed these trials, but demonstrates how far they can possibly go, and allow us to judge him accordingly. As with most trials the Aspirant’s life is in their own hands. He who has failed the duel- yet proven himself worthy- is rescued from the jaws of death by {role_data[eROLE.APOTHECARY]} and allowed to progress to the rank of Neophyte.", + long_description: localize("What better gauge of an Aspirant than in a duel with our astartes? Our brother, unarmed and unarmoured, will face against the armed challenger until one cannot continue. It is impossible for the Aspirant to actually succeed these trials, but demonstrates how far they can possibly go, and allow us to judge him accordingly. As with most trials the Aspirant’s life is in their own hands. He who has failed the duel- yet proven himself worthy- is rescued from the jaws of death by {0} and allowed to progress to the rank of Neophyte.", [role_data[eROLE.APOTHECARY]]), }, { name: "Apprenticeship", @@ -604,7 +604,7 @@ function scr_trial_data(wanted = -1) { -10, 1, ], - long_description: $"What better way to cultivate astartes than to raise them from youth? The capable children of our recruitment targets are apprenticed to our battle brothers. Beneath their steady guidance the Aspirants spend several years learning the art of the smith. The most able are judged by our Chapter’s {role_data[eROLE.APOTHECARY]}s and {role_data[eROLE.CHAPLAIN]} to deem if they are compatible with gene-seed implantation. If so, the Aspirant’s trial culminates in hunting and slaying a massive beast. Only the brightest and bravest are added to our ranks.", + long_description: localize("What better way to cultivate astartes than to raise them from youth? The capable children of our recruitment targets are apprenticed to our battle brothers. Beneath their steady guidance the Aspirants spend several years learning the art of the smith. The most able are judged by our Chapter’s {0}s and {1} to deem if they are compatible with gene-seed implantation. If so, the Aspirant’s trial culminates in hunting and slaying a massive beast. Only the brightest and bravest are added to our ranks.", [role_data[eROLE.APOTHECARY], role_data[eROLE.CHAPLAIN]]), }, ]; if (wanted > -1) { @@ -697,44 +697,44 @@ function scr_compile_trial_bonus_string(trial_data) { }; if (struct_exists(trial_data, "train_time")) { var train_time_data = trial_data.train_time; - bonus_string += $"Years training : {train_time_string(train_time_data.base)}\n"; + bonus_string += localize("Years training : {0}\n", [train_time_string(train_time_data.base)]); if (struct_exists(train_time_data, "planets")) { var planets = struct_get_names(train_time_data.planets); for (var i = 0; i < array_length(planets); i++) { - bonus_string += $" {planets[i]} : {train_time_string(train_time_data.planets[$ planets[i]])}\n"; + bonus_string += localize(" {0} : {1}\n", [localize(planets[i]), train_time_string(train_time_data.planets[$ planets[i]])]); } } bonus_string += "\n"; } if (struct_exists(trial_data, "recruit_count_modifier")) { var recruit_count_data = trial_data.recruit_count_modifier; - bonus_string += $"Recruit Success Chance : X{recruit_count_data.base}\n"; + bonus_string += localize("Recruit Success Chance : X{0}\n", [recruit_count_data.base]); if (struct_exists(recruit_count_data, "planets")) { var planets = struct_get_names(recruit_count_data.planets); for (var i = 0; i < array_length(planets); i++) { - bonus_string += $" {planets[i]} : X{recruit_count_data.planets[$ planets[i]]}\n"; + bonus_string += localize(" {0} : X{1}\n", [localize(planets[i]), recruit_count_data.planets[$ planets[i]]]); } } bonus_string += "\n"; } if (struct_exists(trial_data, "exp_bonus")) { var exp_bonus = trial_data.exp_bonus; - bonus_string += $"Experience Bonus : {exp_bonus_string(exp_bonus.base)}\n"; + bonus_string += localize("Experience Bonus : {0}\n", [exp_bonus_string(exp_bonus.base)]); if (struct_exists(exp_bonus, "planets")) { var planets = struct_get_names(exp_bonus.planets); for (var i = 0; i < array_length(planets); i++) { - bonus_string += $" {planets[i]} : {exp_bonus_string(exp_bonus.planets[$ planets[i]])}\n"; + bonus_string += localize(" {0} : {1}\n", [localize(planets[i]), exp_bonus_string(exp_bonus.planets[$ planets[i]])]); } } bonus_string += "\n"; } if (struct_exists(trial_data, "seed_waste")) { - bonus_string += $"{trial_data.seed_waste * 100}% of gene-seed wastage per turn\n"; + bonus_string += localize("{0}% of gene-seed wastage per turn\n", [trial_data.seed_waste * 100]); bonus_string += "\n"; } if (struct_exists(trial_data, "corruption_bonus")) { var corruption_bonus = trial_data[$ "corruption_bonus"]; - bonus_string += $"Corruption Effect : ~{corruption_bonus[0]}\n"; + bonus_string += localize("Corruption Effect : ~{0}\n", [corruption_bonus[0]]); /* if (struct_exists(corruption_bonus, "planets")){ var planets = struct_get_names(corruption_bonus.planets); for (var i=0;i= 1000) { - blurp += "Our Chapter currently has no Neophytes - we are at maximum strength and do not require more marines."; + blurp += localize(_adept ? "Your Chapter currently has no Neophytes - you are at maximum strength and do not require more marines." : "Our Chapter currently has no Neophytes - we are at maximum strength and do not require more marines."); } if ((marines < 1000) && (recruiting == 0)) { - blurp += "Our Chapter currently has no Neophytes. Without training more our chapter is doomed to a slow death."; + blurp += localize(_adept ? "Your Chapter currently has no Neophytes. Without training more your chapter is doomed to a slow death." : "Our Chapter currently has no Neophytes. Without training more our chapter is doomed to a slow death."); } if ((marines < 1000) && (recruiting > 0)) { - blurp += "Our Chapter currently has no Neophytes. We are doing our utmost best to find suitable recruits."; + blurp += localize(_adept ? "Your Chapter currently has no Neophytes. You are doing your utmost best to find suitable recruits." : "Our Chapter currently has no Neophytes. We are doing our utmost best to find suitable recruits."); } } else if (recruits == 1) { - blurp += $"Our Chapter currently has one recruit being trained. The Neophyte's name is {recruit_name[0]} and they are scheduled to become a battle brother in {recruit_training[0] + recruit_distance[0]} months' time."; + blurp += localize(_adept ? "Your Chapter currently has one recruit being trained. The Neophyte's name is {0} and they are scheduled to become a battle brother in {1} months' time." : "Our Chapter currently has one recruit being trained. The Neophyte's name is {0} and they are scheduled to become a battle brother in {1} months' time.", [recruit_name[0], recruit_training[0] + recruit_distance[0]]); } else if (recruits > 1) { - blurp += $"Our Chapter currently has {recruits} recruits being trained. {recruit_name[0]} is the next scheduled Neophyte to become a battle brother in {recruit_training[0] + recruit_distance[0]} months' time."; + blurp += localize(_adept ? "Your Chapter currently has {0} recruits being trained. {1} is the next scheduled Neophyte to become a battle brother in {2} months' time." : "Our Chapter currently has {0} recruits being trained. {1} is the next scheduled Neophyte to become a battle brother in {2} months' time.", [recruits, recruit_name[0], recruit_training[0] + recruit_distance[0]]); } if (gene_seed > 0) { var _recruit_rates = global.neophyte_rates; - var _cur_recruit_rate = $"The recruitment is {_recruit_rates[recruiting]}"; + var _cur_recruit_rate = localize("The recruitment is {0}", [localize(_recruit_rates[recruiting])]); if ((recruiting == 0) && (marines >= 1000)) { - blurp += $"\n{_cur_recruit_rate}. You must only give me the word and I can begin further increasing our numbers... though this would violate the Codex Astartes."; + blurp += localize(_adept ? "\n{0}. You must only give me the word and I can begin further increasing your numbers... though this would violate the Codex Astartes." : "\n{0}. You must only give me the word and I can begin further increasing our numbers... though this would violate the Codex Astartes.", [_cur_recruit_rate]); } else if ((recruiting == 0) && (marines < 1000)) { - blurp += $"\n{_cur_recruit_rate}. You must only give me the word and I can begin further increasing our numbers."; + blurp += localize(_adept ? "\n{0}. You must only give me the word and I can begin further increasing your numbers." : "\n{0}. You must only give me the word and I can begin further increasing our numbers.", [_cur_recruit_rate]); } else if (recruiting == 1) { - blurp += $"\n{_cur_recruit_rate}."; + blurp += localize("\n{0}.", [_cur_recruit_rate]); } } } if (obj_ini.doomed == 1) { - blurp += "\nMutation of our gene-seed currently makes us unable to recruit new Neophytes. We are doomed to a slow demise unless the Apothecaries can fix it."; + blurp += localize(_adept ? "\nMutation of your gene-seed currently makes you unable to recruit new Neophytes. You are doomed to a slow demise unless the Apothecaries can fix it." : "\nMutation of our gene-seed currently makes us unable to recruit new Neophytes. We are doomed to a slow demise unless the Apothecaries can fix it."); } if (gene_seed == 0) { - blurp += "\nThere is no more gene-seed in our vaults and we cannot create more neophytes as a result. Something must be done, Chapter Master."; + blurp += localize(_adept ? "\nThere is no more gene-seed in your vaults and you cannot create more neophytes as a result. Something must be done, Chapter Master." : "\nThere is no more gene-seed in our vaults and we cannot create more neophytes as a result. Something must be done, Chapter Master."); } if (recruiting > 0) { if (string_count("|", obj_controller.recruiting_worlds) == 1) { - blurp += $"\nWe're recruiting from one world - {obj_ini.recruiting_name}."; + blurp += localize(_adept ? "\nYou're recruiting from one world - {0}." : "\nWe're recruiting from one world - {0}.", [obj_ini.recruiting_name]); } else if (string_count("|", obj_controller.recruiting_worlds) == 2) { - blurp += "\nWe're recruiting from two worlds. Finding recruits is vastly accelerated."; + blurp += localize(_adept ? "\nYou're recruiting from two worlds. Finding recruits is vastly accelerated." : "\nWe're recruiting from two worlds. Finding recruits is vastly accelerated."); } else if (string_count("|", obj_controller.recruiting_worlds) > 2) { - blurp += "\nWe're recruiting from several worlds."; + blurp += localize(_adept ? "\nYou're recruiting from several worlds." : "\nWe're recruiting from several worlds."); } } - if (menu_adept == 1) { - blurp = string_replace(blurp, "Our", "Your"); - blurp = string_replace(blurp, " our", " your"); - blurp = string_replace(blurp, "We", "You"); - } - draw_text_ext(xx + 336 + 16, yy + 130, string_hash_to_newline(string(blurp)), -1, 536); // draw_line(xx+216,yy+252,xx+597,yy+252);draw_line(xx+216,yy+292,xx+597,yy+292); @@ -943,9 +938,9 @@ function scr_draw_recruit_advisor() { draw_set_color(16291875); draw_set_color(c_gray); if ((recruiting >= 0) && (recruiting <= 1)) { - blur = _neophyte_rate[recruiting]; + blur = localize(_neophyte_rate[recruiting]); } - draw_text(xx + 407, yy + 354, string_hash_to_newline("Space Marine Recruiting: " + string(blur))); + draw_text(xx + 407, yy + 354, string_hash_to_newline(localize("Space Marine Recruiting: {0}", [blur]))); draw_text(xx + 728, yy + 354, string_hash_to_newline("[-] [+]")); amo = 0; @@ -977,9 +972,9 @@ function scr_draw_recruit_advisor() { } draw_set_color(c_gray); if ((training_apothecary >= 0) && (training_apothecary <= 6)) { - blur = _recruit_rate[training_apothecary]; + blur = localize(_recruit_rate[training_apothecary]); } - draw_text(xx + 407, yy + 394, string_hash_to_newline("Apothecary Training: " + string(blur))); + draw_text(xx + 407, yy + 394, string_hash_to_newline(localize("Apothecary Training: {0}", [blur]))); draw_text(xx + 728, yy + 394, string_hash_to_newline("[-] [+]")); // TODO implement Spave Wolves and Iron Hands cases @@ -1013,9 +1008,9 @@ function scr_draw_recruit_advisor() { } draw_set_color(c_gray); if ((training_chaplain >= 0) && (training_chaplain <= 6)) { - blur = _recruit_rate[training_chaplain]; + blur = localize(_recruit_rate[training_chaplain]); } - draw_text(xx + 407, yy + 414, string_hash_to_newline("Chaplain Training: " + string(blur))); + draw_text(xx + 407, yy + 414, string_hash_to_newline(localize("Chaplain Training: {0}", [blur]))); draw_text(xx + 728, yy + 414, string_hash_to_newline("[-] [+]")); } @@ -1048,9 +1043,9 @@ function scr_draw_recruit_advisor() { } draw_set_color(c_gray); if ((training_psyker >= 0) && (training_psyker <= 6)) { - blur = _recruit_rate[training_psyker]; + blur = localize(_recruit_rate[training_psyker]); } - draw_text(xx + 407, yy + 434, string_hash_to_newline("Psyker Training: " + string(blur))); + draw_text(xx + 407, yy + 434, string_hash_to_newline(localize("Psyker Training: {0}", [blur]))); draw_text(xx + 728, yy + 434, string_hash_to_newline("[-] [+]")); // ** Techmarine recruitment ** @@ -1082,9 +1077,9 @@ function scr_draw_recruit_advisor() { } draw_set_color(c_gray); if ((training_techmarine >= 0) && (training_techmarine <= 6)) { - blur = _recruit_rate[training_techmarine]; + blur = localize(_recruit_rate[training_techmarine]); } - draw_text(xx + 407, yy + 454, $"Techmarine Training: {blur}"); + draw_text(xx + 407, yy + 454, localize("Techmarine Training: {0}", [blur])); draw_text(xx + 728, yy + 454, "[-] [+]"); // ** Neophyte Training types ** @@ -1093,13 +1088,13 @@ function scr_draw_recruit_advisor() { var cur_trial = trial_data[recruit_trial]; draw_set_halign(fa_center); - draw_set_font(fnt_40k_30b); - draw_text_transformed(xx + 622, yy + 491, "Aspirant Trial", 0.6, 0.6, 0); - draw_set_font(fnt_40k_14b); + draw_set_font(cjk_font(fnt_40k_30b)); + draw_text_transformed(xx + 622, yy + 491, localize("Aspirant Trial"), 0.6, 0.6, 0); + draw_set_font(cjk_font(fnt_40k_14b)); - draw_text_ext(xx + 622, yy + 522, cur_trial.name, -1, 536); + draw_text_ext(xx + 622, yy + 522, localize(cur_trial.name), -1, 536); draw_set_halign(fa_left); - draw_set_font(fnt_40k_14); + draw_set_font(cjk_font(fnt_40k_14)); yyy = string_height_ext(string_hash_to_newline(cur_trial.long_description), -1, 536) + yy + 545; @@ -1112,7 +1107,7 @@ function scr_draw_recruit_advisor() { var xx = camera_get_view_x(view_camera[0]); var yy = camera_get_view_y(view_camera[0]); draw_set_halign(fa_left); - draw_set_font(fnt_40k_14); + draw_set_font(cjk_font(fnt_40k_14)); if (left_panel.percent_cut > 90) { var trial_data = scr_trial_data(); var cur_trial = trial_data[recruit_trial]; diff --git a/scripts/scr_secret_lair_view/scr_secret_lair_view.gml b/scripts/scr_secret_lair_view/scr_secret_lair_view.gml index b288d6525b..b989acc655 100644 --- a/scripts/scr_secret_lair_view/scr_secret_lair_view.gml +++ b/scripts/scr_secret_lair_view/scr_secret_lair_view.gml @@ -8,7 +8,7 @@ function scr_secret_lair_view() { add_draw_return_values(); draw_sprite(spr_popup_large, 1, xx, yy); draw_set_color(c_gray); - draw_set_font(fnt_40k_30b); + draw_set_font(cjk_font(fnt_40k_30b)); draw_set_halign(fa_center); var planet_upgrades = obj_temp_build.target.p_upgrades[obj_controller.selecting_planet]; @@ -35,11 +35,11 @@ function scr_secret_lair_view() { var lair_exists = gene_vault || arsenal || secret_base; if (obj_temp_build.isnew) { - title = "Secret Lair (" + string(obj_temp_build.target.name) + " " + scr_roman(obj_temp_build.planet) + ")"; + title = localize("Secret Lair ({0} {1})", [obj_temp_build.target.name, scr_roman(obj_temp_build.planet)]); draw_text_transformed(xx + 312, yy + 10, title, 0.7, 0.7, 0); - draw_set_font(fnt_40k_14b); - draw_text(xx + 312, yy + 45, "Select a Secret Lair style."); + draw_set_font(cjk_font(fnt_40k_14b)); + draw_text(xx + 312, yy + 45, localize("Select a Secret Lair style.")); draw_set_halign(fa_left); var base_x1 = xx + 21; @@ -72,23 +72,23 @@ function scr_secret_lair_view() { } draw_set_color(c_black); - draw_set_font(fnt_40k_14b); - draw_text_transformed(text_x1, base_y1 + 2 + y_offset, style.name, 1, 0.8, 0); - draw_set_font(fnt_40k_14); - draw_text_transformed(text_x2, base_y1 + 2 + y_offset, style.description, 1, 0.8, 0); + draw_set_font(cjk_font(fnt_40k_14b)); + draw_text_transformed(text_x1, base_y1 + 2 + y_offset, localize(style.name), 1, 0.8, 0); + draw_set_font(cjk_font(fnt_40k_14)); + draw_text_transformed(text_x2, base_y1 + 2 + y_offset, localize(style.description), 1, 0.8, 0); } } //TODO add a PlanetData object to obj_temp_build so that planet nae can be generated with PlanetData.name() if (!lair_exists) { - title = "Build (" + string(obj_temp_build.target.name) + " " + scr_roman(obj_temp_build.planet) + ")"; + title = localize("Build ({0} {1})", [obj_temp_build.target.name, scr_roman(obj_temp_build.planet)]); } else { if (secret_base) { - title = "Secret Lair (" + string(obj_temp_build.target.name) + " " + scr_roman(obj_temp_build.planet) + ")"; + title = localize("Secret Lair ({0} {1})", [obj_temp_build.target.name, scr_roman(obj_temp_build.planet)]); } else if (arsenal) { - title = "Secret Arsenal (" + string(obj_temp_build.target.name) + " " + scr_roman(obj_temp_build.planet) + ")"; + title = localize("Secret Arsenal ({0} {1})", [obj_temp_build.target.name, scr_roman(obj_temp_build.planet)]); } else if (gene_vault) { - title = "Secret Gene-Vault (" + string(obj_temp_build.target.name) + " " + scr_roman(obj_temp_build.planet) + ")"; + title = localize("Secret Gene-Vault ({0} {1})", [obj_temp_build.target.name, scr_roman(obj_temp_build.planet)]); } } @@ -101,8 +101,8 @@ function scr_secret_lair_view() { if (array_length(search_list) > 0) { lair_struct = planet_upgrades[search_list[0]]; if (lair_struct.built > obj_controller.turn) { - draw_set_font(fnt_40k_14b); - draw_text(xx + 21, yy + 65, $"This feature will be constructed in {lair_struct.built - obj_controller.turn} months."); + draw_set_font(cjk_font(fnt_40k_14b)); + draw_text(xx + 21, yy + 65, localize("This feature will be constructed in {0} months.", [lair_struct.built - obj_controller.turn])); } else if (lair_struct.built <= obj_controller.turn) { var button_label = ""; var button_desc = ""; @@ -122,8 +122,8 @@ function scr_secret_lair_view() { } cost = 1000; - button_label = "Forge"; - button_desc = "A modest, less elaborate forge able to employ a handful of Astartes or Techpriest."; + button_label = localize("Forge"); + button_desc = localize("A modest, less elaborate forge able to employ a handful of Astartes or Techpriest."); break; case 2: if (lair_struct.hippo) { @@ -131,8 +131,8 @@ function scr_secret_lair_view() { } cost = 1000; - button_label = "Hippodrome"; - button_desc = "A moderate sized garage fit to hold, service, and display vehicles."; + button_label = localize("Hippodrome"); + button_desc = localize("A moderate sized garage fit to hold, service, and display vehicles."); break; case 3: if (lair_struct.beastarium) { @@ -140,8 +140,8 @@ function scr_secret_lair_view() { } cost = 1000; - button_label = "Beastarium"; - button_desc = "An enclosure with simulated greenery and foilage meant to hold beasts."; + button_label = localize("Beastarium"); + button_desc = localize("An enclosure with simulated greenery and foilage meant to hold beasts."); break; case 4: if (lair_struct.torture) { @@ -149,8 +149,8 @@ function scr_secret_lair_view() { } cost = 500; - button_label = "Torture Chamber"; - button_desc = "Only the best for the best. A room full of torture tools and devices."; + button_label = localize("Torture Chamber"); + button_desc = localize("Only the best for the best. A room full of torture tools and devices."); break; case 5: if (lair_struct.narcotics) { @@ -158,8 +158,8 @@ function scr_secret_lair_view() { } cost = 500; - button_label = "Narcotics"; - button_desc = "Several boxes worth of Obscura, Black Lethe, Kyxa... line it up."; + button_label = localize("Narcotics"); + button_desc = localize("Several boxes worth of Obscura, Black Lethe, Kyxa... line it up."); break; case 6: if (lair_struct.relic > 0) { @@ -167,8 +167,8 @@ function scr_secret_lair_view() { } cost = 500; - button_label = "Relic Room"; - button_desc = "A room meant for displaying trophies. May be purchased successive times."; + button_label = localize("Relic Room"); + button_desc = localize("A room meant for displaying trophies. May be purchased successive times."); break; case 7: if (lair_struct.cookery) { @@ -176,8 +176,8 @@ function scr_secret_lair_view() { } cost = 250; - button_label = "Cookery"; - button_desc = "A larger, well-stocked cookery, complete with a number of Imperial Chef servants."; + button_label = localize("Cookery"); + button_desc = localize("A larger, well-stocked cookery, complete with a number of Imperial Chef servants."); break; case 8: if (lair_struct.vox) { @@ -185,8 +185,8 @@ function scr_secret_lair_view() { } cost = 250; - button_label = "Vox Casters"; - button_desc = "All the bass one could ever imaginably need."; + button_label = localize("Vox Casters"); + button_desc = localize("All the bass one could ever imaginably need."); break; case 9: if (lair_struct.librarium) { @@ -194,8 +194,8 @@ function scr_secret_lair_view() { } cost = 250; - button_label = "Librarium"; - button_desc = "A study fit to hold a staggering amount of tomes and scrolls."; + button_label = localize("Librarium"); + button_desc = localize("A study fit to hold a staggering amount of tomes and scrolls."); break; case 10: if (lair_struct.throne) { @@ -203,8 +203,8 @@ function scr_secret_lair_view() { } cost = 250; - button_label = "Throne"; - button_desc = "A massive, ego boosting throne."; + button_label = localize("Throne"); + button_desc = localize("A massive, ego boosting throne."); break; case 11: if (lair_struct.stasis) { @@ -212,8 +212,8 @@ function scr_secret_lair_view() { } cost = 200; - button_label = "Stasis Pods"; - button_desc = "Though they start empty, you may capture and display your foes in these."; + button_label = localize("Stasis Pods"); + button_desc = localize("Though they start empty, you may capture and display your foes in these."); break; case 12: if (lair_struct.swimming) { @@ -221,15 +221,15 @@ function scr_secret_lair_view() { } cost = 100; - button_label = "Swimming Pool"; - button_desc = "A large body of water meant for excersize or relaxation."; + button_label = localize("Swimming Pool"); + button_desc = localize("A large body of water meant for excersize or relaxation."); break; } button_y1 = yy + 12 + ((r - 1) * 22); button_y2 = yy + 32 + ((r - 1) * 22); - draw_set_font(fnt_40k_14); + draw_set_font(cjk_font(fnt_40k_14)); draw_set_alpha(button_alpha); draw_set_color(c_gray); draw_rectangle(button_x1, button_y1, button_x2, button_y2, 0); @@ -294,186 +294,186 @@ function scr_secret_lair_view() { } } - lair_window_description_text = "Deep beneath the surface of " + string(obj_temp_build.target.name) + " " + scr_roman(obj_controller.selecting_planet) + " lays your "; + lair_window_description_text = localize("Deep beneath the surface of {0} {1} lays your ", [obj_temp_build.target.name, scr_roman(obj_controller.selecting_planet)]); if (lair_struct.inquis_hidden == 1) { - lair_window_description_text += "secret lair. "; + lair_window_description_text += localize("secret lair. "); } else { - lair_window_description_text += "previously discovered lair. "; + lair_window_description_text += localize("previously discovered lair. "); } - lair_window_description_text += "It is massive"; + lair_window_description_text += localize("It is massive"); switch (lair_struct.style) { case "BRB": - lair_window_description_text += ", the walls decorated with animal hides and leather. Among the copius body-trophies and bones are torches that hiss and spit. "; + lair_window_description_text += localize(", the walls decorated with animal hides and leather. Among the copius body-trophies and bones are torches that hiss and spit. "); break; case "DIS": - lair_window_description_text += "- the main attraction is the rainbow-colored, lit up grid flooring which quickly change color. Far overhead are metal rafters. "; + lair_window_description_text += localize("- the main attraction is the rainbow-colored, lit up grid flooring which quickly change color. Far overhead are metal rafters. "); break; case "FEU": - lair_window_description_text += ", the walls made up of sturdy blocks of stones. It is heavily decorated with wooden furniture, banners, and medieval weaponry. "; + lair_window_description_text += localize(", the walls made up of sturdy blocks of stones. It is heavily decorated with wooden furniture, banners, and medieval weaponry. "); break; case "GTH": - lair_window_description_text += ", the walls made up of lightly-dusty stone. Mosaics and statues are abundant throughout, giving it that comfortable gothic feel. "; + lair_window_description_text += localize(", the walls made up of lightly-dusty stone. Mosaics and statues are abundant throughout, giving it that comfortable gothic feel. "); break; case "MCH": - lair_window_description_text += "- at a glance it appears decorated like a factory. Those with a neural network see the lair as brightly colored and lit, full of knowledge, learning, and chapter iconography. "; + lair_window_description_text += localize("- at a glance it appears decorated like a factory. Those with a neural network see the lair as brightly colored and lit, full of knowledge, learning, and chapter iconography. "); break; case "PRS": - lair_window_description_text += ", the walls made up of polished sandstone or marble. All throughout are chapter iconography and ancient symbols, wrought in gold. "; + lair_window_description_text += localize(", the walls made up of polished sandstone or marble. All throughout are chapter iconography and ancient symbols, wrought in gold. "); break; case "RAV": - lair_window_description_text += " but nearly pitch-black inside. The only illumination is provided by loopy neon lux-casters, and strobes, which blast out light in random, flickering patterns. "; + lair_window_description_text += localize(" but nearly pitch-black inside. The only illumination is provided by loopy neon lux-casters, and strobes, which blast out light in random, flickering patterns. "); break; case "STL": - lair_window_description_text += ". All of the surfaces are made up of highly polished stainless steel. An occasional small water fountain or plant decorates the place. "; + lair_window_description_text += localize(". All of the surfaces are made up of highly polished stainless steel. An occasional small water fountain or plant decorates the place. "); break; case "UTL": - lair_window_description_text += " and almost civilian looking in nature- the walls are up of simple concrete or plaster. A thick carpet covers much of the floor."; + lair_window_description_text += localize(" and almost civilian looking in nature- the walls are up of simple concrete or plaster. A thick carpet covers much of the floor."); break; } if (lair_struct.throne == 1) { - lair_window_description_text += " The center chamber is dominated by "; + lair_window_description_text += localize(" The center chamber is dominated by "); if (obj_controller.temp[104]) { - lair_window_description_text += "a massive throne, which you are currently seated upon. "; + lair_window_description_text += localize("a massive throne, which you are currently seated upon. "); } else { - lair_window_description_text += "a massive throne, though it is currently vacant. "; + lair_window_description_text += localize("a massive throne, though it is currently vacant. "); } } if ((lair_struct.vox > 0) && (obj_temp_build.target.p_player[obj_controller.selecting_planet] > 0)) { - lair_window_description_text += "Heretical music blasts from the vox-casters, shaking the walls. "; + lair_window_description_text += localize("Heretical music blasts from the vox-casters, shaking the walls. "); } if (lair_struct.narcotics > 0) { - lair_window_description_text += " Many of the tables have lines of white powder set on paper or bunches of needles. Plastic straws lay close by. "; + lair_window_description_text += localize(" Many of the tables have lines of white powder set on paper or bunches of needles. Plastic straws lay close by. "); } if (lair_struct.cookery == 1) { if (obj_temp_build.target.p_player[obj_controller.selecting_planet] > 0) { - lair_window_description_text += "Imperial Chefs are currently bustling to and from the kitchen, cooking savory treats and food for those present. "; + lair_window_description_text += localize("Imperial Chefs are currently bustling to and from the kitchen, cooking savory treats and food for those present. "); } if (obj_temp_build.target.p_player[obj_controller.selecting_planet] == 0) { - lair_window_description_text += "The Imperial Chefs are mostly idle, making use of the other rooms and facilities. "; + lair_window_description_text += localize("The Imperial Chefs are mostly idle, making use of the other rooms and facilities. "); } } switch (lair_struct.stock) { case 1: - lair_window_description_text += " One of the chambers is hollowed out to display war trophies and gear. "; + lair_window_description_text += localize(" One of the chambers is hollowed out to display war trophies and gear. "); break; case 2: - lair_window_description_text += " One of the chambers holds war trophies from recent conquests. "; + lair_window_description_text += localize(" One of the chambers holds war trophies from recent conquests. "); break; case 3: - lair_window_description_text += " War trophies taken from several Xeno races are displayed in the Relic Room. "; + lair_window_description_text += localize(" War trophies taken from several Xeno races are displayed in the Relic Room. "); break; case 4: - lair_window_description_text += " Your Relic Room contains trophies and skulls, taken from every Xeno race. "; + lair_window_description_text += localize(" Your Relic Room contains trophies and skulls, taken from every Xeno race. "); break; case 5: - lair_window_description_text += " Your Relic Room contains trophies, skulls, and suits of armour taken from Xenos races. "; + lair_window_description_text += localize(" Your Relic Room contains trophies, skulls, and suits of armour taken from Xenos races. "); break; case 6: - lair_window_description_text += " Your Relic Room contains wargear and suits of armour from all races, several Adeptus Astartes suits included. "; + lair_window_description_text += localize(" Your Relic Room contains wargear and suits of armour from all races, several Adeptus Astartes suits included. "); break; case 7: - lair_window_description_text += " One of the chambers holds wargear and suits of armour from all races. A suit of Terminator armour is included, half of the armour taken off to reveal the inner workings."; + lair_window_description_text += localize(" One of the chambers holds wargear and suits of armour from all races. A suit of Terminator armour is included, half of the armour taken off to reveal the inner workings."); break; case 8: - lair_window_description_text += " Your Relic Room's trophies, skulls, and armours now spill out into the hallways, such is their number. "; + lair_window_description_text += localize(" Your Relic Room's trophies, skulls, and armours now spill out into the hallways, such is their number. "); break; case 9: - lair_window_description_text += " Many of the xenos war trophies and suits of armour are placed around the Lair, filling out spare surfaces. "; + lair_window_description_text += localize(" Many of the xenos war trophies and suits of armour are placed around the Lair, filling out spare surfaces. "); break; case 10: - lair_window_description_text += " In addition to the many war trophies your Relic Room also has small amounts of gold coins. "; + lair_window_description_text += localize(" In addition to the many war trophies your Relic Room also has small amounts of gold coins. "); break; case 11: - lair_window_description_text += " In addition to the many war trophies your Relic Room also has small piles of gold coins and clutter. "; + lair_window_description_text += localize(" In addition to the many war trophies your Relic Room also has small piles of gold coins and clutter. "); break; case 12: - lair_window_description_text += " In addition to the many war trophies your Relic Room also has sizeable piles of gold. "; + lair_window_description_text += localize(" In addition to the many war trophies your Relic Room also has sizeable piles of gold. "); break; case 13: - lair_window_description_text += " In addition to the many war trophies your Relic Room also has chests and cabinets full of gold. "; + lair_window_description_text += localize(" In addition to the many war trophies your Relic Room also has chests and cabinets full of gold. "); break; case 14: - lair_window_description_text += " In addition to the many war trophies your Relic Room also has chests full to the brim of gold and many precious gems. "; + lair_window_description_text += localize(" In addition to the many war trophies your Relic Room also has chests full to the brim of gold and many precious gems. "); break; case 15: - lair_window_description_text += " War trophies, chests of gold, precious gems, your lair has it all. "; + lair_window_description_text += localize(" War trophies, chests of gold, precious gems, your lair has it all. "); break; case 16: - lair_window_description_text += " War trophies, chests of gold, precious gems, your lair has it all, and in abundance. "; + lair_window_description_text += localize(" War trophies, chests of gold, precious gems, your lair has it all, and in abundance. "); break; case 17: - lair_window_description_text += " The abundant gold and gem piles have begun to spill out into the hallway. "; + lair_window_description_text += localize(" The abundant gold and gem piles have begun to spill out into the hallway. "); break; case 18: - lair_window_description_text += " The abundant gold and gems spill out into the hallway, your forces idly stepping across it. "; + lair_window_description_text += localize(" The abundant gold and gems spill out into the hallway, your forces idly stepping across it. "); break; case 19: - lair_window_description_text += " A sizeable portion of your lair is carelessly covered in gold coins, objects, and gems. "; + lair_window_description_text += localize(" A sizeable portion of your lair is carelessly covered in gold coins, objects, and gems. "); break; case 20: - lair_window_description_text += " Much of your lair is carelessly covered in gold coins, objects, and gems. "; + lair_window_description_text += localize(" Much of your lair is carelessly covered in gold coins, objects, and gems. "); break; case 21: case 22: case 23: case 24: - lair_window_description_text += " Your abundant wealth is evident in your lair- every surface and much of the floor smothered by gold or gems. "; + lair_window_description_text += localize(" Your abundant wealth is evident in your lair- every surface and much of the floor smothered by gold or gems. "); break; case 25: case 26: case 27: case 28: case 29: - lair_window_description_text += " Gold and gems are everywhere, occasionally attached to the walls and ceiling where able. "; + lair_window_description_text += localize(" Gold and gems are everywhere, occasionally attached to the walls and ceiling where able. "); break; default: if (lair_struct.stock >= 30) { - lair_window_description_text += " Gold and gems are EVERYWHERE. The main chamber in particular is a sea of gold and gems, especially deep at the corners. In all it is nearly three feet deep. Coins clink and settle as your forces walk through the room. "; + lair_window_description_text += localize(" Gold and gems are EVERYWHERE. The main chamber in particular is a sea of gold and gems, especially deep at the corners. In all it is nearly three feet deep. Coins clink and settle as your forces walk through the room. "); } break; } if (lair_struct.forge > 0) { - lair_window_description_text += " Your lair has a forge, fit to be used by several astartes at once. "; + lair_window_description_text += localize(" Your lair has a forge, fit to be used by several astartes at once. "); } if (lair_struct.hippo > 0) { - lair_window_description_text += " Your lair has a hippodrome, or garage, that holds luxury vehicles. "; + lair_window_description_text += localize(" Your lair has a hippodrome, or garage, that holds luxury vehicles. "); } if (lair_struct.torture > 0) { - lair_window_description_text += " One of the rooms is a well-stocked torture chamber. "; + lair_window_description_text += localize(" One of the rooms is a well-stocked torture chamber. "); } if (lair_struct.librarium > 0) { - lair_window_description_text += " A large librarium makes up one of the wings, holding countless novels, books, scrolls, and documents on various topics. "; + lair_window_description_text += localize(" A large librarium makes up one of the wings, holding countless novels, books, scrolls, and documents on various topics. "); } if (lair_struct.beastarium > 0) { - lair_window_description_text += " Your lair has a beastarium, animals native to your homeworld living within. "; + lair_window_description_text += localize(" Your lair has a beastarium, animals native to your homeworld living within. "); } if (lair_struct.swimming > 0) { - lair_window_description_text += " A large swimming pool with chapter-themed floaties is emplaced near the entrance. "; + lair_window_description_text += localize(" A large swimming pool with chapter-themed floaties is emplaced near the entrance. "); } if (lair_struct.stasis > 0) { - lair_window_description_text += " One of the chambers holds several stasis pods for display. They are currently empty. "; + lair_window_description_text += localize(" One of the chambers holds several stasis pods for display. They are currently empty. "); } button_x1 = xx + 12; button_y1 = yy + 45; draw_set_color(c_gray); - draw_set_font(fnt_40k_14); + draw_set_font(cjk_font(fnt_40k_14)); draw_set_halign(fa_left); draw_rectangle(button_x1, yy + 45, xx + 486, yy + 378, 1); @@ -495,130 +495,130 @@ function scr_secret_lair_view() { if (scr_hit(button_x1, yy + 12, button_x2, yy + 32)) { // + ((1 - 1) * 22) tooltip_rp_cost = 1000; - tooltip_header = "Forge"; - tooltip_desc = "A modest, less elaborate forge able to employ a handful of Astartes or Techpriest."; - tooltip_draw(tooltip_desc, 350, return_mouse_consts(), #50a076, fnt_40k_14, tooltip_header, fnt_40k_14b, false, "Cost:#", fnt_40k_12, tooltip_rp_cost); + tooltip_header = localize("Forge"); + tooltip_desc = localize("A modest, less elaborate forge able to employ a handful of Astartes or Techpriest."); + tooltip_draw(tooltip_desc, 350, return_mouse_consts(), #50a076, fnt_40k_14, tooltip_header, fnt_40k_14b, false, localize("Cost:#"), fnt_40k_12, tooltip_rp_cost); } // Hippodrome if (scr_hit(button_x1, yy + 34, button_x2, yy + 54)) { // + ((2 - 1) * 22) tooltip_rp_cost = 1000; - tooltip_header = "Hippodrome"; - tooltip_desc = "A moderate sized garage fit to hold, service, and display vehicles."; - tooltip_draw(tooltip_desc, 350, return_mouse_consts(), #50a076, fnt_40k_14, tooltip_header, fnt_40k_14b, false, "Cost:#", fnt_40k_12, tooltip_rp_cost); + tooltip_header = localize("Hippodrome"); + tooltip_desc = localize("A moderate sized garage fit to hold, service, and display vehicles."); + tooltip_draw(tooltip_desc, 350, return_mouse_consts(), #50a076, fnt_40k_14, tooltip_header, fnt_40k_14b, false, localize("Cost:#"), fnt_40k_12, tooltip_rp_cost); } // Beastarium if (scr_hit(button_x1, yy + 56, button_x2, yy + 76)) { // + ((3 - 1) * 22) tooltip_rp_cost = 1000; - tooltip_header = "Beastarium"; - tooltip_desc = "An enclosure with simulated greenery and foilage meant to hold beasts."; - tooltip_draw(tooltip_desc, 350, return_mouse_consts(), #50a076, fnt_40k_14, tooltip_header, fnt_40k_14b, false, "Cost:#", fnt_40k_12, tooltip_rp_cost); + tooltip_header = localize("Beastarium"); + tooltip_desc = localize("An enclosure with simulated greenery and foilage meant to hold beasts."); + tooltip_draw(tooltip_desc, 350, return_mouse_consts(), #50a076, fnt_40k_14, tooltip_header, fnt_40k_14b, false, localize("Cost:#"), fnt_40k_12, tooltip_rp_cost); } // Torture Chamber if (scr_hit(button_x1, yy + 78, button_x2, yy + 98)) { // + ((4 - 1) * 22) tooltip_rp_cost = 500; - tooltip_header = "Torture Chamber"; - tooltip_desc = "Only the best for the best. A room full of torture tools and devices."; - tooltip_draw(tooltip_desc, 350, return_mouse_consts(), #50a076, fnt_40k_14, tooltip_header, fnt_40k_14b, false, "Cost:#", fnt_40k_12, tooltip_rp_cost); + tooltip_header = localize("Torture Chamber"); + tooltip_desc = localize("Only the best for the best. A room full of torture tools and devices."); + tooltip_draw(tooltip_desc, 350, return_mouse_consts(), #50a076, fnt_40k_14, tooltip_header, fnt_40k_14b, false, localize("Cost:#"), fnt_40k_12, tooltip_rp_cost); } // Narcotics if (scr_hit(button_x1, yy + 100, button_x2, yy + 120)) { // + ((5 - 1) * 22) tooltip_rp_cost = 500; - tooltip_header = "Narcotics"; - tooltip_desc = "Several boxes worth of Obscura, Black Lethe, Kyxa... line it up."; - tooltip_draw(tooltip_desc, 350, return_mouse_consts(), #50a076, fnt_40k_14, tooltip_header, fnt_40k_14b, false, "Cost:#", fnt_40k_12, tooltip_rp_cost); + tooltip_header = localize("Narcotics"); + tooltip_desc = localize("Several boxes worth of Obscura, Black Lethe, Kyxa... line it up."); + tooltip_draw(tooltip_desc, 350, return_mouse_consts(), #50a076, fnt_40k_14, tooltip_header, fnt_40k_14b, false, localize("Cost:#"), fnt_40k_12, tooltip_rp_cost); } // Relic Room if (scr_hit(button_x1, yy + 122, button_x2, yy + 142)) { // + ((6 - 1) * 22) tooltip_rp_cost = 500; - tooltip_header = "Relic Room"; - tooltip_desc = "A room meant for displaying trophies. May be purchased successive times."; - tooltip_draw(tooltip_desc, 350, return_mouse_consts(), #50a076, fnt_40k_14, tooltip_header, fnt_40k_14b, false, "Cost:#", fnt_40k_12, tooltip_rp_cost); + tooltip_header = localize("Relic Room"); + tooltip_desc = localize("A room meant for displaying trophies. May be purchased successive times."); + tooltip_draw(tooltip_desc, 350, return_mouse_consts(), #50a076, fnt_40k_14, tooltip_header, fnt_40k_14b, false, localize("Cost:#"), fnt_40k_12, tooltip_rp_cost); } // Cookery if (scr_hit(button_x1, yy + 144, button_x2, yy + 164)) { // + ((7 - 1) * 22) tooltip_rp_cost = 250; - tooltip_header = "Cookery"; - tooltip_desc = "A larger, well-stocked cookery, complete with a number of Imperial Chef servants."; - tooltip_draw(tooltip_desc, 350, return_mouse_consts(), #50a076, fnt_40k_14, tooltip_header, fnt_40k_14b, false, "Cost:#", fnt_40k_12, tooltip_rp_cost); + tooltip_header = localize("Cookery"); + tooltip_desc = localize("A larger, well-stocked cookery, complete with a number of Imperial Chef servants."); + tooltip_draw(tooltip_desc, 350, return_mouse_consts(), #50a076, fnt_40k_14, tooltip_header, fnt_40k_14b, false, localize("Cost:#"), fnt_40k_12, tooltip_rp_cost); } // Vox Casters if (scr_hit(button_x1, yy + 166, button_x2, yy + 186)) { // + ((8 - 1) * 22) tooltip_rp_cost = 250; - tooltip_header = "Vox Casters"; - tooltip_desc = "All the bass one could ever imaginably need."; - tooltip_draw(tooltip_desc, 350, return_mouse_consts(), #50a076, fnt_40k_14, tooltip_header, fnt_40k_14b, false, "Cost:#", fnt_40k_12, tooltip_rp_cost); + tooltip_header = localize("Vox Casters"); + tooltip_desc = localize("All the bass one could ever imaginably need."); + tooltip_draw(tooltip_desc, 350, return_mouse_consts(), #50a076, fnt_40k_14, tooltip_header, fnt_40k_14b, false, localize("Cost:#"), fnt_40k_12, tooltip_rp_cost); } // Librarium if (scr_hit(button_x1, yy + 188, button_x2, yy + 206)) { // + ((9 - 1) * 22) tooltip_rp_cost = 250; - tooltip_header = "Librarium"; - tooltip_desc = "A study fit to hold a staggering amount of tomes and scrolls."; - tooltip_draw(tooltip_desc, 350, return_mouse_consts(), #50a076, fnt_40k_14, tooltip_header, fnt_40k_14b, false, "Cost:#", fnt_40k_12, tooltip_rp_cost); + tooltip_header = localize("Librarium"); + tooltip_desc = localize("A study fit to hold a staggering amount of tomes and scrolls."); + tooltip_draw(tooltip_desc, 350, return_mouse_consts(), #50a076, fnt_40k_14, tooltip_header, fnt_40k_14b, false, localize("Cost:#"), fnt_40k_12, tooltip_rp_cost); } // Throne if (scr_hit(button_x1, yy + 210, button_x2, yy + 228)) { // + ((10 - 1) * 22) tooltip_rp_cost = 250; - tooltip_header = "Throne"; - tooltip_desc = "A massive, ego boosting throne."; - tooltip_draw(tooltip_desc, 350, return_mouse_consts(), #50a076, fnt_40k_14, tooltip_header, fnt_40k_14b, false, "Cost:#", fnt_40k_12, tooltip_rp_cost); + tooltip_header = localize("Throne"); + tooltip_desc = localize("A massive, ego boosting throne."); + tooltip_draw(tooltip_desc, 350, return_mouse_consts(), #50a076, fnt_40k_14, tooltip_header, fnt_40k_14b, false, localize("Cost:#"), fnt_40k_12, tooltip_rp_cost); } // Stasis Pods if (scr_hit(button_x1, yy + 232, button_x2, yy + 250)) { // + ((11 - 1) * 22) tooltip_rp_cost = 200; - tooltip_header = "Stasis Pods"; - tooltip_desc = "Though they start empty, you may capture and display your foes in these."; - tooltip_draw(tooltip_desc, 350, return_mouse_consts(), #50a076, fnt_40k_14, tooltip_header, fnt_40k_14b, false, "Cost:#", fnt_40k_12, tooltip_rp_cost); + tooltip_header = localize("Stasis Pods"); + tooltip_desc = localize("Though they start empty, you may capture and display your foes in these."); + tooltip_draw(tooltip_desc, 350, return_mouse_consts(), #50a076, fnt_40k_14, tooltip_header, fnt_40k_14b, false, localize("Cost:#"), fnt_40k_12, tooltip_rp_cost); } // Swimming Pool if (scr_hit(button_x1, yy + 254, button_x2, yy + 272)) { // + ((12 - 1) * 22) tooltip_rp_cost = 100; - tooltip_header = "Swimming Pool"; - tooltip_desc = "A large body of water meant for excersize or relaxation."; - tooltip_draw(tooltip_desc, 350, return_mouse_consts(), #50a076, fnt_40k_14, tooltip_header, fnt_40k_14b, false, "Cost:#", fnt_40k_12, tooltip_rp_cost); + tooltip_header = localize("Swimming Pool"); + tooltip_desc = localize("A large body of water meant for excersize or relaxation."); + tooltip_draw(tooltip_desc, 350, return_mouse_consts(), #50a076, fnt_40k_14, tooltip_header, fnt_40k_14b, false, localize("Cost:#"), fnt_40k_12, tooltip_rp_cost); } } } } - draw_set_font(fnt_40k_14b); + draw_set_font(cjk_font(fnt_40k_14b)); lair_window_description_text = ""; if (planet_feature_bool(planet_upgrades, eP_FEATURES.ARSENAL) == 1) { lair_struct = planet_upgrades[search_planet_features(planet_upgrades, eP_FEATURES.ARSENAL)[0]]; if (lair_struct.inquis_hidden == 1) { - lair_window_description_text = "A moderate sized secret Arsenal, this structure has ample holding area to store any number of artifacts and wargear. Chaos and Daemonic items will be sent here by your Master of Relics, and due to the secret nature of its existance, the Inquisition will not find them during routine inspections."; + lair_window_description_text = localize("A moderate sized secret Arsenal, this structure has ample holding area to store any number of artifacts and wargear. Chaos and Daemonic items will be sent here by your Master of Relics, and due to the secret nature of its existance, the Inquisition will not find them during routine inspections."); } else { - lair_window_description_text = "A moderate sized Arsenal, this structure has ample holding area to store any number of artifacts and wargear. Since being discovered it may no longer hide Chaos and Daemonic wargear from routine Inquisition inspections. You may wish to construct another Arsenal on a different planet."; + lair_window_description_text = localize("A moderate sized Arsenal, this structure has ample holding area to store any number of artifacts and wargear. Since being discovered it may no longer hide Chaos and Daemonic wargear from routine Inquisition inspections. You may wish to construct another Arsenal on a different planet."); } } if (planet_feature_bool(planet_upgrades, eP_FEATURES.GENE_VAULT) == 1) { lair_struct = planet_upgrades[search_planet_features(planet_upgrades, eP_FEATURES.GENE_VAULT)[0]]; if (lair_struct.inquis_hidden == 1) { - lair_window_description_text = "A large facility with Gene-Vaults and additional spare rooms, this structure safely stores the majority of your Gene-Seed and is ran by servitors. Due to its secret nature you may amass Gene-Seed and Test-Slave Incubators without fear of Inquisition reprisal or taking offense."; + lair_window_description_text = localize("A large facility with Gene-Vaults and additional spare rooms, this structure safely stores the majority of your Gene-Seed and is ran by servitors. Due to its secret nature you may amass Gene-Seed and Test-Slave Incubators without fear of Inquisition reprisal or taking offense."); } else { - lair_window_description_text = "A large facility with Gene-Vaults and additional spare rooms, this structure safely stores the majority of your Gene-Seed and is ran by servitors. Since being discovered all the contents are known to the Inquisition. Your Gene-Seed remains protected but you may wish to build a new, secret one."; + lair_window_description_text = localize("A large facility with Gene-Vaults and additional spare rooms, this structure safely stores the majority of your Gene-Seed and is ran by servitors. Since being discovered all the contents are known to the Inquisition. Your Gene-Seed remains protected but you may wish to build a new, secret one."); } } @@ -627,20 +627,20 @@ function scr_secret_lair_view() { } if (!lair_exists && !obj_temp_build.isnew) { - draw_set_font(fnt_40k_14b); + draw_set_font(cjk_font(fnt_40k_14b)); if (!secret_base) { - draw_text(xx + 21, yy + 45, "Lair"); + draw_text(xx + 21, yy + 45, localize("Lair")); } if (!arsenal) { - draw_text(xx + 21, yy + 110, "Arsenal"); + draw_text(xx + 21, yy + 110, localize("Arsenal")); } if (!gene_vault) { - draw_text(xx + 21, yy + 175, "Gene-Vault"); + draw_text(xx + 21, yy + 175, localize("Gene-Vault")); } - draw_set_font(fnt_40k_14); + draw_set_font(cjk_font(fnt_40k_14)); draw_sprite(spr_requisition, 0, xx + 160, yy + 47); if (obj_controller.requisition < 1000) { @@ -651,12 +651,12 @@ function scr_secret_lair_view() { draw_text(xx + 180, yy + 47, "1000"); draw_set_color(c_gray); - draw_text_ext(xx + 21, yy + 65, "Customizable hideout that your forces may garrison into. The Lair may be upgraded further.", -6, 600); + draw_text_ext(xx + 21, yy + 65, localize("Customizable hideout that your forces may garrison into. The Lair may be upgraded further."), -6, 600); draw_rectangle(xx + 300, yy + 45, xx + 400, yy + 65, 0); draw_set_halign(fa_center); draw_set_color(c_black); - draw_text(xx + 350, yy + 47, "Build"); - draw_text(xx + 351, yy + 48, "Build"); + draw_text(xx + 350, yy + 47, localize("Build")); + draw_text(xx + 351, yy + 48, localize("Build")); if (scr_hit(xx + 300, yy + 45, xx + 400, yy + 65)) { draw_set_alpha(0.2); draw_rectangle(xx + 300, yy + 45, xx + 400, yy + 65, 0); @@ -679,12 +679,12 @@ function scr_secret_lair_view() { draw_text(xx + 180, yy + 112, "1500"); draw_set_color(c_gray); - draw_text_ext(xx + 21, yy + 130, "Hidden armoury that stores unused Chaos and Daemonic artifacts, preventing them from discovery.", -1, 600); + draw_text_ext(xx + 21, yy + 130, localize("Hidden armoury that stores unused Chaos and Daemonic artifacts, preventing them from discovery."), -1, 600); draw_rectangle(xx + 300, yy + 110, xx + 400, yy + 130, 0); draw_set_halign(fa_center); draw_set_color(c_black); - draw_text(xx + 350, yy + 112, "Build"); - draw_text(xx + 351, yy + 113, "Build"); + draw_text(xx + 350, yy + 112, localize("Build")); + draw_text(xx + 351, yy + 113, localize("Build")); if (scr_hit(xx + 300, yy + 110, xx + 400, yy + 130)) { draw_set_alpha(0.2); draw_rectangle(xx + 300, yy + 110, xx + 400, yy + 130, 0); @@ -707,12 +707,12 @@ function scr_secret_lair_view() { draw_text(xx + 180, yy + 177, "4000"); draw_set_color(c_gray); - draw_text_ext(xx + 21, yy + 195, "Hidden gene-vault that off-sources the majority of your Gene-Seed and Test-Slave Incubators.", -1, 600); + draw_text_ext(xx + 21, yy + 195, localize("Hidden gene-vault that off-sources the majority of your Gene-Seed and Test-Slave Incubators."), -1, 600); draw_rectangle(xx + 300, yy + 175, xx + 400, yy + 195, 0); draw_set_halign(fa_center); draw_set_color(c_black); - draw_text(xx + 350, yy + 177, "Build"); - draw_text(xx + 351, yy + 178, "Build"); + draw_text(xx + 350, yy + 177, localize("Build")); + draw_text(xx + 351, yy + 178, localize("Build")); if (scr_hit(xx + 300, yy + 175, xx + 400, yy + 195)) { draw_set_alpha(0.2); draw_rectangle(xx + 300, yy + 175, xx + 400, yy + 195, 0); @@ -727,12 +727,12 @@ function scr_secret_lair_view() { draw_set_halign(fa_left); } - draw_set_font(fnt_40k_30b); + draw_set_font(cjk_font(fnt_40k_30b)); draw_set_color(c_gray); draw_rectangle(xx + 252, yy + 388, xx + 372, yy + 420, 0); draw_set_halign(fa_center); draw_set_color(c_black); - draw_text(xx + 312, yy + 388, "Back"); + draw_text(xx + 312, yy + 388, localize("Back")); if (scr_hit(xx + 252, yy + 388, xx + 372, yy + 420)) { draw_set_alpha(0.2); draw_rectangle(xx + 252, yy + 388, xx + 372, yy + 420, 0); diff --git a/scripts/scr_squads/scr_squads.gml b/scripts/scr_squads/scr_squads.gml index 7553f08cd5..157e00bb1f 100644 --- a/scripts/scr_squads/scr_squads.gml +++ b/scripts/scr_squads/scr_squads.gml @@ -538,23 +538,23 @@ function UnitSquad(squad_type = undefined, company = 0) constructor { } var final_loc_status = ""; if (!same_system) { - final_loc_status = "Scattered"; + final_loc_status = localize("Scattered"); } else if (same_loc_type) { if (loc_type == eLOCATION_TYPES.SHIP) { if (exact_loc) { - final_loc_status = $"aboard {obj_ini.ship[loc_id]}"; + final_loc_status = localize("aboard {0}", [obj_ini.ship[loc_id]]); } else if (in_orbit) { - final_loc_status = $"various ships orbiting {system}"; + final_loc_status = localize("various ships orbiting {0}", [system]); } } else if (loc_type == eLOCATION_TYPES.PLANET) { if (exact_loc) { final_loc_status = $"{system} {scr_roman_numerals()[loc_id - 1]}"; } else if (planet_side) { - final_loc_status = $"various planets in {system}"; + final_loc_status = localize("various planets in {0}", [system]); } } } else { - final_loc_status = $"system {system}"; + final_loc_status = localize("system {0}", [system]); } return { text: final_loc_status, diff --git a/scripts/scr_trade/scr_trade.gml b/scripts/scr_trade/scr_trade.gml index abf279b229..48d73ce0a4 100644 --- a/scripts/scr_trade/scr_trade.gml +++ b/scripts/scr_trade/scr_trade.gml @@ -60,7 +60,7 @@ function TradeAttempt(diplomacy) constructor { if (_opt.number == 0) { continue; } - var _type = _opt.label; + var _type = _opt.data_label; if (_opt.trade_type == "equip") { if (!struct_exists(trading_object, "items")) { trading_object.items = {}; @@ -70,7 +70,7 @@ function TradeAttempt(diplomacy) constructor { number: _opt.number, }; } else if (_opt.trade_type == "license") { - switch (_opt.label) { + switch (_opt.data_label) { case "Recruiting Planet": obj_controller.recruiting_worlds_bought++; obj_controller.liscensing = 5; @@ -118,9 +118,9 @@ function TradeAttempt(diplomacy) constructor { if (_opt.number == 0) { continue; } - var _type = _opt.label; + var _type = _opt.data_label; if (_opt.trade_type == "equip") { - scr_add_item(_opt.label, -_opt.label); + scr_add_item(_opt.data_label, -_opt.number); } else if (_opt.trade_type == "req") { obj_controller.requisition -= _opt.number; if (_opt.number > 500 && diplomacy_faction == 6) { @@ -273,7 +273,7 @@ function TradeAttempt(diplomacy) constructor { LOGGER.debug("trade_success"); if (_success) { successful_trade_attempt(); - scr_dialogue("agree", {prepend: "[[Trade Accepted. Shipment initialized.]]"}); + scr_dialogue("agree", {prepend: localize("[[Trade Accepted. Shipment initialized.]]")}); //force_goodbye=1; obj_controller.trading = 0; if ((diplomacy_faction == 6) || (diplomacy_faction == 7) || (diplomacy_faction == 8)) { @@ -287,33 +287,33 @@ function TradeAttempt(diplomacy) constructor { with (obj_controller) { var _rela = relationship_hostility_matrix(diplomacy); if (trading_artifact == 0) { - diplo_text = "[[Trade Refused]]##"; + diplo_text = localize("[[Trade Refused]]") + "##"; } else { diplo_text = ""; } annoyed[_dip] += 1; - scr_dialogue("disagree", {prepend: "[[Trade Refused]]"}); + scr_dialogue("disagree", {prepend: localize("[[Trade Refused]]")}); rando = choose(1, 2, 3); if (_rela == "hostile") { force_goodbye = 1; if (rando == 1) { - diplo_text += "You would offer me scraps for the keys to a kingdom? You are foolish and, worse, you are unaware of your own incompetence."; + diplo_text += localize("You would offer me scraps for the keys to a kingdom? You are foolish and, worse, you are unaware of your own incompetence."); } if (rando == 2) { - diplo_text += "Do not attempt exchanges with those so far above you, lapdog of the Corpse Emperor, it makes you look even more idiotic than you already do."; + diplo_text += localize("Do not attempt exchanges with those so far above you, lapdog of the Corpse Emperor, it makes you look even more idiotic than you already do."); } if (rando == 3) { - diplo_text += "I would spit upon this ‘offer' you bring before me but I find myself too amused by it."; + diplo_text += localize("I would spit upon this ‘offer' you bring before me but I find myself too amused by it."); } } else if (_rela != "hostile") { if (rando == 1) { - diplo_text += "You may consider my response to be a ‘no' and assume my attitude to be whatever you like, Chapter Master."; + diplo_text += localize("You may consider my response to be a ‘no' and assume my attitude to be whatever you like, Chapter Master."); } if (rando == 2) { - diplo_text += "Have a care that you do not overstep the mark, Chapter Master, I see no reason to accept such a trade."; + diplo_text += localize("Have a care that you do not overstep the mark, Chapter Master, I see no reason to accept such a trade."); } if (rando == 3) { - diplo_text += "An unreasonable trade, whatever our working relationship might be. I refuse."; + diplo_text += localize("An unreasonable trade, whatever our working relationship might be. I refuse."); } } if (annoyed[_dip] >= 10) { @@ -368,18 +368,19 @@ function TradeAttempt(diplomacy) constructor { number_last: 0, diplomacy_faction, }); + _option.data_label = name; with (_option) { bind_method = function() { if (max_take == 1) { variable_struct_set(self, "number", 1); } else { - get_diag_integer($"{label} wanted?", max_take, self, diplomacy_faction); + get_diag_integer(localize("{0} wanted?", [label]), max_take, self, diplomacy_faction); } }; } if (trader_disp < trade_disp) { _option.disabled = true; - _option.tooltip = $"{trade_disp} disposition required"; + _option.tooltip = localize("{0} disposition required", [trade_disp]); } array_push(demand_options, _option); }; @@ -440,12 +441,13 @@ function TradeAttempt(diplomacy) constructor { number_last: 0, diplomacy_faction, }); + _option.data_label = name; with (_option) { bind_method = function() { if (max_number == 1) { number = 1; } else { - get_diag_integer($"{label} offered?", max_number, self, diplomacy_faction); + get_diag_integer(localize("{0} offered?", [label]), max_number, self, diplomacy_faction); } }; } @@ -484,13 +486,13 @@ function TradeAttempt(diplomacy) constructor { draw_rectangle(342, 326, 486, 371, 1); // Left Title Panel draw_rectangle(759, 326, 903, 371, 1); // Right Title Panel - draw_set_font(fnt_40k_14b); + draw_set_font(cjk_font(fnt_40k_14b)); draw_set_halign(fa_center); - draw_text(411, 330, $"{obj_controller.faction[diplomacy_faction]}\nItems"); - draw_text(829, 330, $"{global.chapter_name}\nItems"); + draw_text(411, 330, localize("{0}\nItems", [localize(obj_controller.faction[diplomacy_faction])])); + draw_text(829, 330, localize("{0}\nItems", [global.chapter_name])); if (trade_likely != "") { - draw_text(623, 348, $"[{trade_likely}]"); + draw_text(623, 348, localize("[{0}]", [localize(trade_likely)])); } clear_button.draw(); @@ -498,7 +500,7 @@ function TradeAttempt(diplomacy) constructor { exit_button.draw(); draw_set_halign(fa_left); - draw_set_font(fnt_40k_14); + draw_set_font(cjk_font(fnt_40k_14)); draw_set_color(CM_GREEN_COLOR); var _requested_count = 0; for (var i = 0; i < array_length(demand_options); i++) { @@ -521,16 +523,16 @@ function TradeAttempt(diplomacy) constructor { } if (_opt.max_take > 1) { - draw_text(530, _y_offset, $"{_opt.label} : {_opt.number}"); + draw_text(530, _y_offset, localize("{0} : {1}", [_opt.label, _opt.number])); } else { - draw_text(530, _y_offset, $"{_opt.label}"); + draw_text(530, _y_offset, _opt.label); } _requested_count++; } } _requested_count = 0; - draw_text(507, 529, $"{global.chapter_name}:"); + draw_text(507, 529, localize("{0}:", [global.chapter_name])); for (var i = 0; i < array_length(offer_options); i++) { var _opt = offer_options[i]; if (_opt.number != _opt.number_last) { @@ -549,9 +551,9 @@ function TradeAttempt(diplomacy) constructor { recalc_values = true; } if (_opt.max_number > 1) { - draw_text(530, _y_offset, $"{_opt.label} : {_opt.number}"); + draw_text(530, _y_offset, localize("{0} : {1}", [_opt.label, _opt.number])); } else { - draw_text(530, _y_offset, $"{_opt.label}"); + draw_text(530, _y_offset, _opt.label); } _requested_count++; } @@ -576,9 +578,9 @@ function TradeAttempt(diplomacy) constructor { for (var i = 0; i < array_length(demand_options); i++) { var _opt = demand_options[i]; - if (_opt.number > 0 && struct_exists(relative_trade_values, _opt.label)) { - their_worth += _opt.number * relative_trade_values[$ _opt.label]; - if (_opt.label == "Artifact") { + if (_opt.number > 0 && struct_exists(relative_trade_values, _opt.data_label)) { + their_worth += _opt.number * relative_trade_values[$ _opt.data_label]; + if (_opt.data_label == "Artifact") { var _faction_barrier = 0; switch (diplomacy_faction) { case 2: @@ -610,9 +612,9 @@ function TradeAttempt(diplomacy) constructor { if (_opt.number <= 0) { continue; } - if (_opt.label == "Requisition") { + if (_opt.data_label == "Requisition") { my_worth += _opt.number; - } else if (_opt.label == "Gene-Seed") { + } else if (_opt.data_label == "Gene-Seed") { if ((diplomacy_faction == 3) || (diplomacy_faction == 4)) { my_worth += _opt.number * 30; } @@ -622,7 +624,7 @@ function TradeAttempt(diplomacy) constructor { if ((diplomacy_faction == 8) || (diplomacy_faction == 10)) { my_worth += _opt.number * 50; } - } else if (_opt.label == "Info Chip") { + } else if (_opt.data_label == "Info Chip") { if (diplomacy_faction == eFACTION.MECHANICUS) { my_worth += _opt.number * 100; // 20% bonus } else { @@ -631,7 +633,7 @@ function TradeAttempt(diplomacy) constructor { my_worth += _opt.number * 80; } - if (_opt.label == "STC Fragment") { + if (_opt.data_label == "STC Fragment") { if (diplomacy_faction == 2) { my_worth += _opt.number * 900; } diff --git a/scripts/scr_ui_advisors/scr_ui_advisors.gml b/scripts/scr_ui_advisors/scr_ui_advisors.gml index aab8475baa..2da07c256c 100644 --- a/scripts/scr_ui_advisors/scr_ui_advisors.gml +++ b/scripts/scr_ui_advisors/scr_ui_advisors.gml @@ -62,54 +62,54 @@ function scr_ui_advisors() { } draw_set_halign(fa_left); draw_set_color(c_gray); - draw_set_font(fnt_40k_30b); - draw_text_transformed(xx + 336 + 16, yy + 66, "Reclusium", 1, 1, 0); - draw_text_transformed(xx + 336 + 16, yy + 100, _head.name_role(), 0.6, 0.6, 0); + draw_set_font(cjk_font(fnt_40k_30b)); + draw_text_transformed(xx + 336 + 16, yy + 66, localize("Reclusium"), 1, 1, 0); + draw_text_transformed(xx + 336 + 16, yy + 100, localized_name_role(_head), 0.6, 0.6, 0); } else { scr_image("advisor/splash", 1, xx + 16, yy + 43, 310, 828); draw_set_halign(fa_left); draw_set_color(c_gray); - draw_set_font(fnt_40k_30b); - draw_text_transformed(xx + 336 + 16, yy + 66, "Reclusium", 1, 1, 0); - draw_text_transformed(xx + 336 + 16, yy + 100, $"Adept {obj_controller.adept_name}", 0.6, 0.6, 0); + draw_set_font(cjk_font(fnt_40k_30b)); + draw_text_transformed(xx + 336 + 16, yy + 66, localize("Reclusium"), 1, 1, 0); + draw_text_transformed(xx + 336 + 16, yy + 100, localize("Adept {0}", [obj_controller.adept_name]), 0.6, 0.6, 0); } - draw_set_font(fnt_40k_14); + draw_set_font(cjk_font(fnt_40k_14)); draw_set_alpha(1); draw_set_color(c_gray); var _active_roles = active_roles(); var _chap_role = _active_roles[eROLE.CHAPLAIN]; if (temp[36] != "0") { - blurp = $"Sir! You requested a report? Currently, we have deployed {temp[36]} {_chap_role}s to watch over the health of our Battle-Brothers in the field. We have an additional {temp[37]} {_chap_role}s who await only your order to carry the word to the troops."; + blurp = localize("Sir! You requested a report? Currently, we have deployed {0} {1}s to watch over the health of our Battle-Brothers in the field. We have an additional {2} {1}s who await only your order to carry the word to the troops.", [temp[36], localize(_chap_role), temp[37]]); } if (temp[36] == "0") { - blurp = $"Sir! You requested a report? Currently, we have {temp[37]} {_chap_role}s who await only your order to carry the word to the troops."; + blurp = localize("Sir! You requested a report? Currently, we have {0} {1}s who await only your order to carry the word to the troops.", [temp[37], localize(_chap_role)]); } if ((global.chapter_name != "Space Wolves") && (global.chapter_name != "Iron Hands")) { - blurp += $"##Currently, we are training additional {_chap_role} at a "; + blurp += localize("##Currently, we are training additional {0} at a ", [localize(_chap_role)]); var _recruit_rates = global.recruitment_rates; - blurp += _recruit_rates[training_chaplain]; + blurp += localize(_recruit_rates[training_chaplain]); if (training_chaplain > 0 && training_chaplain <= 6) { var training_points_values = global.chaplain_training_tiers; eta = floor((47 - chaplain_points) / training_points_values[training_chaplain]) + 1; } - blurp += " rate"; + blurp += localize(" rate"); if (training_chaplain > 0) { - blurp += " and expect to see a new one in {eta} month's time."; + blurp += localize(" and expect to see a new one in {0} month's time.", [eta]); } if (training_chaplain < 5) { - blurp += "We can increase this rate, but it will require us to requisition additional facilities, as well as upkeep, Sir."; + blurp += localize("We can increase this rate, but it will require us to requisition additional facilities, as well as upkeep, Sir."); } if (penitorium == 0) { - blurp += "##Our men have been behaving as they should. Not a single one is scheduled for corrective action of any type."; + blurp += localize("##Our men have been behaving as they should. Not a single one is scheduled for corrective action of any type."); } - draw_set_font(fnt_40k_30b); + draw_set_font(cjk_font(fnt_40k_30b)); draw_set_halign(fa_center); - draw_text_transformed(xx + 1262, yy + 70, "Penitorium", 0.6, 0.6, 0); + draw_text_transformed(xx + 1262, yy + 70, localize("Penitorium"), 0.6, 0.6, 0); if (penitorium > 0) { - draw_set_font(fnt_40k_14); + draw_set_font(cjk_font(fnt_40k_14)); draw_set_halign(fa_left); for (var qp = 1; qp <= min(36, penitorium); qp++) { @@ -121,34 +121,34 @@ function scr_ui_advisors() { if (unit.corruption > 0) { r_eta = string(round((unit.corruption * unit.corruption) / 50)); if (unit.corruption >= 90) { - r_eta = "Never"; + r_eta = localize("Never"); } } else if (unit.corruption <= 0) { r_eta = "0"; } draw_rectangle(xx + 947, yy + 100 + ((qp - 1) * 20), xx + 1577, yy + 100 + (qp * 20), 1); - draw_text(xx + 950, yy + 100 + ((qp - 1) * 20), string_hash_to_newline(unit.name_role())); - draw_text(xx + 1200, yy + 100 + ((qp - 1) * 20), string_hash_to_newline("ETA: " + r_eta)); - draw_text(xx + 1432, yy + 100 + ((qp - 1) * 20), string_hash_to_newline("[Execute] [Release]")); + draw_text(xx + 950, yy + 100 + ((qp - 1) * 20), string_hash_to_newline(localized_name_role(unit))); + draw_text(xx + 1200, yy + 100 + ((qp - 1) * 20), string_hash_to_newline(localize("ETA: {0}", [r_eta]))); + draw_text(xx + 1432, yy + 100 + ((qp - 1) * 20), string_hash_to_newline(localize("[Execute] [Release]"))); } } - draw_set_font(fnt_40k_14); + draw_set_font(cjk_font(fnt_40k_14)); } - draw_set_font(fnt_40k_14); + draw_set_font(cjk_font(fnt_40k_14)); draw_set_alpha(1); draw_set_color(c_gray); if (menu_adept == 1) { - blurp = "Your Chapter contains " + string(temp[36]) + " " + string(obj_ini.player_role_data[eROLE.CHAPLAIN].role) + "s.##"; + blurp = localize("Your Chapter contains {0} {1}s.##", [temp[36], localize(obj_ini.player_role_data[eROLE.CHAPLAIN].role)]); if ((global.chapter_name != "Space Wolves") && (global.chapter_name != "Iron Hands")) { - blurp += "Training of further " + string(obj_ini.player_role_data[eROLE.CHAPLAIN].role) + "s"; + blurp += localize("Training of further {0}s", [localize(obj_ini.player_role_data[eROLE.CHAPLAIN].role)]); if (training_chaplain >= 0 && training_chaplain <= 6) { var _recruit_pace = global.recruitment_pace_descriptions; - blurp += _recruit_pace[training_chaplain]; + blurp += localize(_recruit_pace[training_chaplain]); } if (training_chaplain > 0) { - blurp += " The next " + string(obj_ini.player_role_data[eROLE.CHAPLAIN].role) + " is expected in " + string(eta) + " months."; + blurp += localize(" The next {0} is expected in {1} months.", [localize(obj_ini.player_role_data[eROLE.CHAPLAIN].role), eta]); } } } @@ -158,18 +158,18 @@ function scr_ui_advisors() { draw_set_halign(fa_center); draw_set_color(c_gray); - draw_set_font(fnt_40k_30b); - draw_text_transformed(xx + 622, yy + 440, string_hash_to_newline("Chapter Revelry"), 0.6, 0.6, 0); + draw_set_font(cjk_font(fnt_40k_30b)); + draw_text_transformed(xx + 622, yy + 440, string_hash_to_newline(localize("Chapter Revelry")), 0.6, 0.6, 0); draw_set_halign(fa_left); draw_set_color(c_gray); - draw_set_font(fnt_40k_14); + draw_set_font(cjk_font(fnt_40k_14)); var blurp2 = ""; // TODO rename fest_type and fest_scheduled into feast_type and feast_schedule and refactor scripts if (menu_adept == 0) { if (fest_scheduled == 0) { if ((global.chapter_name != "Space Wolves") && (global.chapter_name != "Iron Hands")) { - blurp2 = "As our bolters are charged with death for the Emperor's enemies, our thoughts are charged with his wisdom. As our bodies are armoured with Adamantium, our souls are protected with our loyalty- loyalty to Him, and loyalty to our brothers. The bonds of this brotherhood are worth revering, even if a lull in duty invites doubt and heresy. Should you wish to schedule a rousing event, or challenge, I will make it so. Under the careful watch of our " + string(obj_ini.player_role_data[eROLE.CHAPLAIN].role) + "s, our brothers' spirits may be lifted."; + blurp2 = localize("As our bolters are charged with death for the Emperor's enemies, our thoughts are charged with his wisdom. As our bodies are armoured with Adamantium, our souls are protected with our loyalty- loyalty to Him, and loyalty to our brothers. The bonds of this brotherhood are worth revering, even if a lull in duty invites doubt and heresy. Should you wish to schedule a rousing event, or challenge, I will make it so. Under the careful watch of our {0}s, our brothers' spirits may be lifted.", [localize(obj_ini.player_role_data[eROLE.CHAPLAIN].role)]); } if (global.chapter_name == "Space Wolves") { blurp2 = ""; @@ -180,10 +180,10 @@ function scr_ui_advisors() { } if (fest_scheduled == 1) { if (fest_type != "Chapter Relic") { - blurp2 = "A " + string(fest_type) + " has been scheduled on "; + blurp2 = localize("A {0} has been scheduled on ", [localize(fest_type)]); } if (fest_type == "Chapter Relic") { - blurp2 = "Chapter Relic construction has been scheduled on "; + blurp2 = localize("Chapter Relic construction has been scheduled on "); } if (fest_planet == 0) { @@ -194,141 +194,141 @@ function scr_ui_advisors() { } if (fest_honoring == 0) { - blurp2 += ". "; + blurp2 += localize(". "); } if (fest_honoring == 1) { - blurp2 += " in your name. "; + blurp2 += localize(" in your name. "); } // Specific company if (fest_honoring == 2) { - blurp2 += " in honor of the "; + blurp2 += localize(" in honor of the "); } if (fest_honoring == 3) { - blurp2 += " in honor of "; + blurp2 += localize(" in honor of "); var _unit = fetch_unit([fest_honor_co, fest_honor_id]); - blurp2 += $"{_unit.role()} "; - blurp2 += $"{_unit.name()} {romanNumerals[fest_honor_co]} Company). "; + blurp2 += $"{localize(_unit.role())} "; + blurp2 += localize("{0} {1} Company). ", [_unit.name(), romanNumerals[fest_honor_co]]); } if (fest_honoring == 4) { // faction - blurp2 += ", honoring "; + blurp2 += localize(", honoring "); } if (fest_honoring == 5) { - blurp2 += ", giving praise to The Emperor. "; + blurp2 += localize(", giving praise to The Emperor. "); } if (fest_honoring == 6) { - blurp2 += " to honor our chapter. "; + blurp2 += localize(" to honor our chapter. "); } if (fest_lav <= 1) { - blurp2 += "Very little requisiton has been set aside for the event"; + blurp2 += localize("Very little requisiton has been set aside for the event"); } if (fest_lav == 2) { - blurp2 += "A minor amount of requisition has been dedicated for the event"; + blurp2 += localize("A minor amount of requisition has been dedicated for the event"); } if (fest_lav == 3) { - blurp2 += "Moderate expenses are being made for the event"; + blurp2 += localize("Moderate expenses are being made for the event"); } if (fest_lav == 4) { - blurp2 += "A great amount of requisiton is set aside for the event"; + blurp2 += localize("A great amount of requisiton is set aside for the event"); } if (fest_lav == 5) { - blurp2 += "The event is set to be lavish and excessive, with maximum requisition spent"; + blurp2 += localize("The event is set to be lavish and excessive, with maximum requisition spent"); } if (fest_repeats <= 1) { - blurp2 += ". It is set to run for " + string(fest_repeats) + " month."; + blurp2 += localize(". It is set to run for {0} month.", [fest_repeats]); } if (fest_repeats > 1) { - blurp2 += ". It is set to run for " + string(fest_repeats) + " months."; + blurp2 += localize(". It is set to run for {0} months.", [fest_repeats]); } if (fest_type == "Great Feast") { if ((fest_feature1 == 1) && (fest_feature2 + fest_feature3 == 0)) { - blurp2 += " The feast will be made up entirely of a banquet."; + blurp2 += localize(" The feast will be made up entirely of a banquet."); } if ((fest_feature1 == 1) && (fest_feature2 + fest_feature3 > 0)) { - blurp2 += " The feast will primarily be made up of a banquet, although "; + blurp2 += localize(" The feast will primarily be made up of a banquet, although "); if (fest_feature2 + fest_feature3 == 2) { - blurp2 += "drugs and alcohol will be present for those who wish to partake."; + blurp2 += localize("drugs and alcohol will be present for those who wish to partake."); } if ((fest_feature2 == 1) && (fest_feature3 == 0)) { - blurp2 += "alcohol will also be present."; + blurp2 += localize("alcohol will also be present."); } if ((fest_feature2 == 0) && (fest_feature3 == 1)) { - blurp2 += "drugs will also be present."; + blurp2 += localize("drugs will also be present."); } } if (fest_feature1 == 0) { if ((fest_feature2 == 1) && (fest_feature3 == 0)) { - blurp2 = " The feast will only be such in name, and actually primarily be composed of alcohol consumption and roudy behavior."; + blurp2 = localize(" The feast will only be such in name, and actually primarily be composed of alcohol consumption and roudy behavior."); } if ((fest_feature2 == 0) && (fest_feature3 == 1)) { - blurp2 = " The feast will only be such in name, and actually primarily be composed of lines of drugs and roudy behavior."; + blurp2 = localize(" The feast will only be such in name, and actually primarily be composed of lines of drugs and roudy behavior."); } } } if (fest_type == "Tournament") { if (fest_feature3 == 1) { - blurp2 += " Other Chapters have been invited to partake in the event, although it is not known who, if any, might show."; + blurp2 += localize(" Other Chapters have been invited to partake in the event, although it is not known who, if any, might show."); } if (fest_feature2 == 1) { - blurp2 += " Spectators are encouraged, with efforts made to keep attending simple."; + blurp2 += localize(" Spectators are encouraged, with efforts made to keep attending simple."); } } if (fest_type == "Deathmatch") { if (fest_feature2 == 1) { - blurp2 += " Spectators are encouraged, with efforts made to keep attending simple."; + blurp2 += localize(" Spectators are encouraged, with efforts made to keep attending simple."); } if (fest_feature3 == 1) { - blurp2 += " Smaller, similar deathmatches will be held for Imperial citizens who wish to partake."; + blurp2 += localize(" Smaller, similar deathmatches will be held for Imperial citizens who wish to partake."); } } if (fest_type == "Chapter Relic") { if (fest_feature1 == 1) { - blurp2 += " Our " + string(obj_ini.player_role_data[eROLE.TECHMARINE].role) + "s aim to create a weapon."; + blurp2 += localize(" Our {0}s aim to create a weapon.", [localize(obj_ini.player_role_data[eROLE.TECHMARINE].role)]); } if (fest_feature2 == 1) { - blurp2 += " Our " + string(obj_ini.player_role_data[eROLE.TECHMARINE].role) + "s aim to create a suit of armour."; + blurp2 += localize(" Our {0}s aim to create a suit of armour.", [localize(obj_ini.player_role_data[eROLE.TECHMARINE].role)]); } if (fest_feature3 == 1) { - blurp2 += " Our " + string(obj_ini.player_role_data[eROLE.TECHMARINE].role) + "s aim to hone and strengthen an already existing relic."; + blurp2 += localize(" Our {0}s aim to hone and strengthen an already existing relic.", [localize(obj_ini.player_role_data[eROLE.TECHMARINE].role)]); } } if (fest_type == "Imperial Mass") { if (fest_feature2 == 1) { - blurp2 += " An Ecclesiarchy priest has been requested to lead the sermons."; + blurp2 += localize(" An Ecclesiarchy priest has been requested to lead the sermons."); } if (fest_feature3 == 1) { - blurp2 += " Adepta Sororita presence has been requested, to share in praising the Emperor."; + blurp2 += localize(" Adepta Sororita presence has been requested, to share in praising the Emperor."); } } if (fest_type == "Chapter Sermon") { if ((fest_feature1 == 1) && (fest_feature2 + fest_feature3 == 0)) { - blurp2 += " The Chapter Cult Sermon is pointedly sanctioned within the bounds of the Codex Astartes and Imperial tradition."; + blurp2 += localize(" The Chapter Cult Sermon is pointedly sanctioned within the bounds of the Codex Astartes and Imperial tradition."); } if ((fest_feature1 == 0) && (fest_feature2 + fest_feature3 == 0)) { - blurp2 += " The Chapter Cult Sermon contains some radical or questionable practices, but such is allowed, as our traditions."; + blurp2 += localize(" The Chapter Cult Sermon contains some radical or questionable practices, but such is allowed, as our traditions."); } if (fest_feature2 == 1) { - blurp2 += " Blood sacrifices are a primary focus with the sermon, celebrating martial prowess and our semi-divinity."; + blurp2 += localize(" Blood sacrifices are a primary focus with the sermon, celebrating martial prowess and our semi-divinity."); } if ((fest_feature2 > 0) && (fest_feature3 == 1)) { - blurp2 += " Drugs will also be present for the ceremony."; + blurp2 += localize(" Drugs will also be present for the ceremony."); } if ((fest_feature2 == 0) && (fest_feature3 > 1)) { - blurp2 += " Mind-altering drugs will be a primary focus of the sermon."; + blurp2 += localize(" Mind-altering drugs will be a primary focus of the sermon."); } } if (fest_type == "Triumphal March") { if (fest_feature1 == 1) { - blurp2 += " Local Imperials will be required to attend our march- those that attempt to avoid our revelry are clearly heretics and will be dealt with as such."; + blurp2 += localize(" Local Imperials will be required to attend our march- those that attempt to avoid our revelry are clearly heretics and will be dealt with as such."); } if (fest_feature2 == 1) { - blurp2 += " Cadences and battle cries will honor our closest allies, giving them due credit where it is needed."; + blurp2 += localize(" Cadences and battle cries will honor our closest allies, giving them due credit where it is needed."); } if (fest_feature3 == 1) { - blurp2 += " Bloody trophies of our conquests will be brandished to the populance."; + blurp2 += localize(" Bloody trophies of our conquests will be brandished to the populance."); } } } @@ -337,28 +337,28 @@ function scr_ui_advisors() { draw_text_ext(xx + 336 + 16, yy + 477, string_hash_to_newline(string(blurp2)), -1, 536); draw_set_alpha(1); - draw_set_font(fnt_40k_14); + draw_set_font(cjk_font(fnt_40k_14)); } // ** Festivals ** if (menu == eMENU.FESTIVAL) { var _checkbox_sprite_index = 0; - draw_set_font(fnt_40k_14b); + draw_set_font(cjk_font(fnt_40k_14b)); draw_set_color(c_gray); - draw_text_transformed(xx + 1262, yy + 70, "Scheduling Event", 0.6, 0.6, 0); - draw_text_transformed(xx + 962, yy + 126, string_hash_to_newline("Event Type: "), 1, 1, 0); - draw_text_transformed(xx + 962, yy + 185, string_hash_to_newline("Event Location: "), 1, 1, 0); - draw_text_transformed(xx + 962, yy + 266, string_hash_to_newline("Grandoise: "), 1, 1, 0); - draw_text_transformed(xx + 962, yy + 324, string_hash_to_newline("Features: "), 1, 1, 0); - draw_text_transformed(xx + 962, yy + 379, string_hash_to_newline("Display: "), 1, 1, 0); + draw_text_transformed(xx + 1262, yy + 70, localize("Scheduling Event"), 0.6, 0.6, 0); + draw_text_transformed(xx + 962, yy + 126, string_hash_to_newline(localize("Event Type: ")), 1, 1, 0); + draw_text_transformed(xx + 962, yy + 185, string_hash_to_newline(localize("Event Location: ")), 1, 1, 0); + draw_text_transformed(xx + 962, yy + 266, string_hash_to_newline(localize("Grandoise: ")), 1, 1, 0); + draw_text_transformed(xx + 962, yy + 324, string_hash_to_newline(localize("Features: ")), 1, 1, 0); + draw_text_transformed(xx + 962, yy + 379, string_hash_to_newline(localize("Display: ")), 1, 1, 0); - draw_text_transformed(xx + 962, yy + 434, string_hash_to_newline("Repeat: "), 1, 1, 0); - draw_text_transformed(xx + 1225, yy + 434, string_hash_to_newline("Honoring: "), 1, 1, 0); + draw_text_transformed(xx + 962, yy + 434, string_hash_to_newline(localize("Repeat: ")), 1, 1, 0); + draw_text_transformed(xx + 1225, yy + 434, string_hash_to_newline(localize("Honoring: ")), 1, 1, 0); - draw_text_transformed(xx + 962, yy + 527, string_hash_to_newline("Attendees: "), 1, 1, 0); - draw_text_transformed(xx + 1246, yy + 527, string_hash_to_newline("Public: "), 1, 1, 0); + draw_text_transformed(xx + 962, yy + 527, string_hash_to_newline(localize("Attendees: ")), 1, 1, 0); + draw_text_transformed(xx + 1246, yy + 527, string_hash_to_newline(localize("Public: ")), 1, 1, 0); - draw_set_font(fnt_40k_14); + draw_set_font(cjk_font(fnt_40k_14)); // Attendees if (fest_attend != "") { @@ -376,7 +376,7 @@ function scr_ui_advisors() { var cx = xx + 990; var cy = yy + 212; - draw_text(cx, cy, string_hash_to_newline("Planet")); + draw_text(cx, cy, string_hash_to_newline(localize("Planet"))); cx -= 35; cy -= 4; @@ -411,7 +411,7 @@ function scr_ui_advisors() { cx = xx + 1100; cy = yy + 212; - draw_text(cx, cy, string_hash_to_newline("Ship")); + draw_text(cx, cy, string_hash_to_newline(localize("Ship"))); cx -= 35; cy -= 4; @@ -473,7 +473,7 @@ function scr_ui_advisors() { cx = xx + 1090; cy = yy + 326; - draw_text_transformed(cx, cy, string_hash_to_newline(string(fet_text)), fet_scale, 1, 0); + draw_text_transformed(cx, cy, string_hash_to_newline(localize(fet_text)), fet_scale, 1, 0); cx -= 35; cy -= 4; @@ -540,7 +540,7 @@ function scr_ui_advisors() { cx = xx + 1250; cy = yy + 326; - draw_text_transformed(cx, cy, string_hash_to_newline(string(fet_text)), fet_scale, 1, 0); + draw_text_transformed(cx, cy, string_hash_to_newline(localize(fet_text)), fet_scale, 1, 0); cx -= 35; cy -= 4; draw_sprite(spr_creation_check, _checkbox_sprite_index + 1, cx, cy); @@ -603,7 +603,7 @@ function scr_ui_advisors() { cx = xx + 1388 + 22; cy = yy + 326; - draw_text_transformed(cx, cy, string_hash_to_newline(string(fet_text)), fet_scale, 1, 0); + draw_text_transformed(cx, cy, string_hash_to_newline(localize(fet_text)), fet_scale, 1, 0); cx -= 35; cy -= 4; draw_sprite(spr_creation_check, _checkbox_sprite_index + 1, cx, cy); @@ -639,7 +639,7 @@ function scr_ui_advisors() { // determine attendants } - draw_set_font(fnt_40k_14); + draw_set_font(cjk_font(fnt_40k_14)); var doable = true; if (requisition < fest_cost) { @@ -661,7 +661,7 @@ function scr_ui_advisors() { draw_rectangle(xx + 1302, yy + 780, xx + 1433, yy + 805, 0); draw_set_alpha(1); draw_set_color(c_black); - draw_text(xx + 1305, yy + 784, string_hash_to_newline("Schedule")); + draw_text(xx + 1305, yy + 784, string_hash_to_newline(localize("Schedule"))); draw_sprite_ext(spr_requisition, 0, xx + 1374, yy + 787, 1, 1, 0, c_white, 1); draw_set_color(c_blue); @@ -694,7 +694,7 @@ function scr_ui_advisors() { draw_set_color(c_gray); draw_rectangle(xx + 1132, yy + 780, xx + 1253, yy + 805, 0); draw_set_color(c_black); - draw_text(xx + 1192, yy + 783, string_hash_to_newline("Cancel")); + draw_text(xx + 1192, yy + 783, string_hash_to_newline(localize("Cancel"))); if (scr_hit(xx + 1132, yy + 780, xx + 1253, yy + 805) == true) { draw_set_color(c_white); draw_set_alpha(0.2); @@ -747,37 +747,37 @@ function scr_ui_advisors() { draw_rectangle(xx + 217, yy + 199, xx + 617, yy + 367, 1); draw_rectangle(xx + 217, yy + 380, xx + 617, yy + 411, 1); - draw_set_font(fnt_large); - draw_text_transformed(xx + 410, yy + 29, obj_ini.player_role_data[eROLE.CHAPTERMASTER].role, 0.5, 0.5, 0); + draw_set_font(cjk_font(fnt_large)); + draw_text_transformed(xx + 410, yy + 29, localize(obj_ini.player_role_data[eROLE.CHAPTERMASTER].role), 0.5, 0.5, 0); - draw_set_font(fnt_fancy); + draw_set_font(cjk_font(fnt_fancy)); draw_text_transformed(xx + 410, yy + 40, string_hash_to_newline(string(obj_ini.master_name)), 1.5, 1.5, 0); - draw_set_font(fnt_small); + draw_set_font(cjk_font(fnt_small)); draw_set_halign(fa_left); var eqp = "", tempe = ""; - draw_text(xx + 222, yy + 83, "Equipment:"); - draw_text(xx + 222.5, yy + 83.5, "Equipment:"); + draw_text(xx + 222, yy + 83, localize("Equipment:")); + draw_text(xx + 222.5, yy + 83.5, localize("Equipment:")); - draw_set_font(fnt_tiny); + draw_set_font(cjk_font(fnt_tiny)); draw_text_ext(xx + 222, yy + 99, string_hash_to_newline(string(eqp)), -1, 396); - draw_set_font(fnt_small); - draw_text(xx + 222, yy + 200, "Kills:"); - draw_text(xx + 222.5, yy + 200.5, "Kills:"); + draw_set_font(cjk_font(fnt_small)); + draw_text(xx + 222, yy + 200, localize("Kills:")); + draw_text(xx + 222.5, yy + 200.5, localize("Kills:")); // draw_text_ext(xx + 222, yy + 216, string_hash_to_newline(string(tot_ki)), -1, 396); var unit = fetch_unit([0, 1]); if (is_struct(unit)) { if (unit.ship_location == -1) { - draw_text(xx + 222, yy + 380, string_hash_to_newline($"Current Location: {unit.location_string} {unit.planet_location}#Health: {unit.hp()}%")); + draw_text(xx + 222, yy + 380, string_hash_to_newline(localize("Current Location: {0} {1}#Health: {2}%", [unit.location_string, unit.planet_location, unit.hp()]))); } else if (unit.ship_location > -1) { - draw_text(xx + 222, yy + 380, string_hash_to_newline($"Current Location: Onboard {obj_ini.ship[unit.ship_location]}#Health: {unit.hp()}%")); + draw_text(xx + 222, yy + 380, string_hash_to_newline(localize("Current Location: Onboard {0}#Health: {1}%", [obj_ini.ship[unit.ship_location], unit.hp()]))); } } - draw_text(xx + 222.5, yy + 380.5, string_hash_to_newline("Current Location:#Health:")); + draw_text(xx + 222.5, yy + 380.5, string_hash_to_newline(localize("Current Location:#Health:"))); draw_sprite(spr_arrow, 0, xx + 217, yy + 32); } @@ -788,7 +788,7 @@ function scr_ui_advisors() { scr_image("advisor/splash", 1, xx + 16, yy + 16, 310, 828); draw_set_halign(fa_left); draw_set_color(0); - draw_set_font(fnt_40k_14); + draw_set_font(cjk_font(fnt_40k_14)); if (menu == eMENU.WELCOME_SCREEN1) { draw_text_ext(xx + 370, yy + 72, string_hash_to_newline(string(temp[65])), -1, 660); @@ -803,7 +803,7 @@ function scr_ui_advisors() { draw_text_ext(xx + 370, yy + 72, string_hash_to_newline(string(temp[68])), -1, 660); } draw_set_halign(fa_center); - draw_text(xx + 702, yy + 695, $"{menu - 2} (Press Any Key)"); + draw_text(xx + 702, yy + 695, localize("{0} (Press Any Key)", [menu - 2])); draw_set_halign(fa_left); } @@ -811,9 +811,9 @@ function scr_ui_advisors() { if ((menu == eMENU.MANAGE) && (managing == 0)) { draw_set_alpha(1); draw_sprite(spr_rock_bg, 0, xx, yy); - draw_set_font(fnt_40k_30b); + draw_set_font(cjk_font(fnt_40k_30b)); draw_set_halign(fa_center); draw_set_color(c_gray); - draw_text(xx + 800, yy + 74, $"{global.chapter_name} Chapter Organization"); + draw_text(xx + 800, yy + 74, localize("{0} Chapter Organization", [global.chapter_name])); } } diff --git a/scripts/scr_ui_diplomacy/scr_ui_diplomacy.gml b/scripts/scr_ui_diplomacy/scr_ui_diplomacy.gml index fe98d9b98d..e18bd01206 100644 --- a/scripts/scr_ui_diplomacy/scr_ui_diplomacy.gml +++ b/scripts/scr_ui_diplomacy/scr_ui_diplomacy.gml @@ -9,7 +9,7 @@ function draw_character_diplomacy_base_page() { alliance.draw(); denounce.draw(); praise.draw(); - declare_war.draw_shutter(praise.x1, alliance.y2, "WAR", 0.4); + declare_war.draw_shutter(praise.x1, alliance.y2, localize("WAR"), 0.4); } } else { if (!valid_diplomacy_options()) { @@ -133,7 +133,7 @@ function exit_diplomacy_dialogue() { /// @self Asset.GMObject.obj_controller function draw_diplomacy_diplo_text() { - draw_set_font(fnt_40k_14); + draw_set_font(cjk_font(fnt_40k_14)); draw_set_alpha(1); draw_set_color(CM_GREEN_COLOR); draw_set_halign(fa_left); @@ -251,8 +251,8 @@ function set_up_diplomacy_buttons() { var _war = diplo_buttons.declare_war; _war.XX = 640; _war.YY = diplo_buttons.alliance.y2; - _war.label = "DECLARE WAR"; - _war.tooltip = "Unfinished"; + _war.label = localize("DECLARE WAR"); + _war.tooltip = localize("Unfinished"); _war.color = CM_RED_COLOR; _war.cover_text = "Declare War"; _war.bind_scope = id; @@ -389,20 +389,20 @@ function set_up_diplomacy_persons() { inside_method = function() { var yy = YY; var xx = XX; - draw_set_font(fnt_40k_14b); + draw_set_font(cjk_font(fnt_40k_14b)); draw_set_halign(fa_left); - draw_text(xx + 169, yy + 35, obj_controller.faction[_faction_enum]); + draw_text(xx + 169, yy + 35, localize(obj_controller.faction[_faction_enum])); management_buttons.screen_slate.draw_with_dimensions(xx + 5, yy + 5); - draw_set_font(fnt_40k_14); + draw_set_font(cjk_font(fnt_40k_14)); draw_set_halign(fa_right); - draw_text_transformed(xx + 420, yy + 20, obj_controller.faction_status[_faction_enum], 0.7, 0.7, 0); + draw_text_transformed(xx + 420, yy + 20, localize(obj_controller.faction_status[_faction_enum]), 0.7, 0.7, 0); draw_set_halign(fa_left); var txt = "????"; if (obj_controller.known[_faction_enum] > 0) { - txt = $"{obj_controller.faction_title[_faction_enum]} {obj_controller.faction_leader[_faction_enum]}"; + txt = localize("{0} {1}", [localize(obj_controller.faction_title[_faction_enum]), obj_controller.faction_leader[_faction_enum]]); } draw_text_transformed(xx + 169, yy + 50, txt, 0.7, 0.7, 0); - draw_text_transformed(xx + 169, yy + 65, $"Disposition: {obj_controller.disposition[_faction_enum]}", 0.7, 0.7, 0); + draw_text_transformed(xx + 169, yy + 65, localize("Disposition: {0}", [obj_controller.disposition[_faction_enum]]), 0.7, 0.7, 0); scr_draw_rainbow(xx + 250, yy + 66, xx + 400, yy + 76, (obj_controller.disposition[_faction_enum] / 200) + 0.5); if (((obj_controller.known[_faction_enum] > 0.7) && (obj_controller.faction_defeated[_faction_enum] == 0)) || global.cheat_debug) { @@ -461,9 +461,9 @@ function scr_ui_diplomacy() { // Main diplomacy screen draw_set_color(CM_GREEN_COLOR); - draw_set_font(fnt_40k_30b); + draw_set_font(cjk_font(fnt_40k_30b)); draw_set_halign(fa_center); - draw_text(xx + 800, yy + 74, string_hash_to_newline("Diplomacy")); + draw_text(xx + 800, yy + 74, string_hash_to_newline(localize("Diplomacy"))); xx += 55; yy -= 20; @@ -489,12 +489,12 @@ function scr_ui_diplomacy() { scr_image("symbol", 2, xx + 1147, yy + 174, 217, 107); //draw the meet chaos button - draw_set_font(fnt_40k_14b); + draw_set_font(cjk_font(fnt_40k_14b)); draw_set_halign(fa_left); draw_set_color(CM_GREEN_COLOR); draw_rectangle(xx + 688, yy + 240, xx + 1028, yy + 281, 0); draw_set_color(c_black); - draw_text_transformed(xx + 688, yy + 241, "Meet Chaos Emissary", 0.7, 0.7, 0); + draw_text_transformed(xx + 688, yy + 241, localize("Meet Chaos Emissary"), 0.7, 0.7, 0); //color blending stuff if hovering over the meeting chaos icon if (point_in_rectangle(mouse_x, mouse_y, xx + 688, yy + 240, xx + 1028, yy + 281)) { draw_set_alpha(0.2); @@ -549,7 +549,7 @@ function scr_ui_diplomacy() { draw_set_halign(fa_center); draw_set_color(CM_GREEN_COLOR); - draw_set_font(fnt_40k_30b); + draw_set_font(cjk_font(fnt_40k_30b)); var _diplomacy_faction_name = ""; var _diplomacy_faction_alligience = " (Imperium)"; @@ -564,15 +564,15 @@ function scr_ui_diplomacy() { draw_text_transformed(xx + 622, yy + 66, _diplomacy_faction_name, 1, 1, 0); if (daemon) { - draw_text_transformed(xx + 622, yy + 104, "The Emmmisary", 0.6, 0.6, 0); + draw_text_transformed(xx + 622, yy + 104, localize("The Emmmisary"), 0.6, 0.6, 0); show_stuff = true; } else { - draw_text_transformed(xx + 622, yy + 104, $"{faction_title[diplomacy]} {faction_leader[diplomacy]} {_diplomacy_faction_alligience}", 0.6, 0.6, 0); + draw_text_transformed(xx + 622, yy + 104, localize("{0} {1} {2}", [localize(faction_title[diplomacy]), faction_leader[diplomacy], localize(_diplomacy_faction_alligience)]), 0.6, 0.6, 0); } - draw_set_font(fnt_40k_14); + draw_set_font(cjk_font(fnt_40k_14)); if (!daemon) { - _disposition_rating = $"Disposition: {faction_disposition_rating_string(diplomacy)} ({disposition[diplomacy]})"; + _disposition_rating = localize("Disposition: {0} ({1})", [localize(faction_disposition_rating_string(diplomacy)), disposition[diplomacy]]); draw_text(xx + 622, yy + 144, _disposition_rating); scr_draw_rainbow(xx + 366, yy + 165, xx + 871, yy + 175, (disposition[diplomacy] / 200) + 0.5); } @@ -584,9 +584,9 @@ function scr_ui_diplomacy() { } if (warning == 1 || diplomacy >= 6) { - var warn = "Consorting with heretics will cause your disposition with the Imperium to plummet."; + var warn = localize("Consorting with heretics will cause your disposition with the Imperium to plummet."); if (array_contains(global.xenos_factions, diplomacy)) { - warn = "Consorting with xenos will cause your disposition with the Imperium to lower."; + warn = localize("Consorting with xenos will cause your disposition with the Imperium to lower."); } draw_set_halign(fa_left); diff --git a/scripts/scr_ui_manage/scr_ui_manage.gml b/scripts/scr_ui_manage/scr_ui_manage.gml index cc6bd69d1d..533ac79617 100644 --- a/scripts/scr_ui_manage/scr_ui_manage.gml +++ b/scripts/scr_ui_manage/scr_ui_manage.gml @@ -162,17 +162,17 @@ function reset_manage_unit_constants(unit) { // Corruption if ((obj_controller.chaos_rating > 0) && (_psionic != "")) { - _psionic = $"{_psionic}\n{max(0, unit.corruption())}% Corruption."; + _psionic = localize("{0}\n{1}% Corruption.", [_psionic, max(0, unit.corruption())]); } unit_manage_constants.psy = new LabeledIcon(spr_icon_psyker, _psionic, 0, 0, { icon_width: 24, icon_height: 24, - tooltip: $"==Psychic Stats==\n{_tooltip}", + tooltip: localize("==Psychic Stats==\n{0}", [_tooltip]), }); // Damage Resistance - var _res_tool = "Health damage taken by the marine is reduced by this percentage. This happens after the flat reduction from armor.\n\nContributing factors:\n"; + var _res_tool = localize("Health damage taken by the marine is reduced by this percentage. This happens after the flat reduction from armor.\n\nContributing factors:\n"); var equipment_types = [ "armour", "weapon_one", @@ -208,10 +208,10 @@ function reset_manage_unit_constants(unit) { break; } if (dr != 0) { - _res_tool += $"{name}: {dr}%\n"; + _res_tool += localize("{0}: {1}%\n", [localize(name), dr]); } } - _res_tool += $"CON: {round(unit.constitution / 2)}%"; + _res_tool += localize("CON: {0}%", [round(unit.constitution / 2)]); unit_manage_constants.damage_res = new LabeledIcon(spr_icon_iron_halo, $"{_damage_res}%", 0, 0, { icon_width: 24, @@ -219,8 +219,8 @@ function reset_manage_unit_constants(unit) { tooltip: _res_tool, }); var _hp_val = $"{round(unit.hp())}/{unit.max_health()}"; - var _hp_tool = "A measure of how much punishment the creature can take. Marines can go into the negatives and still survive, but they'll require a bionic to become fighting fit once more.\n\nContributing factors:\n"; - _hp_tool += $"CON: {unit.constitution * 3}\n"; + var _hp_tool = localize("A measure of how much punishment the creature can take. Marines can go into the negatives and still survive, but they'll require a bionic to become fighting fit once more.\n\nContributing factors:\n"); + _hp_tool += localize("CON: {0}\n", [unit.constitution * 3]); for (var i = 0; i < array_length(equipment_types); i++) { var equipment_type = equipment_types[i]; @@ -249,7 +249,7 @@ function reset_manage_unit_constants(unit) { break; } if (hp_mod != 0) { - _hp_tool += $"{name}: {format_number_with_sign(hp_mod)}%\n"; + _hp_tool += localize("{0}: {1}%\n", [localize(name), format_number_with_sign(hp_mod)]); } } @@ -263,7 +263,7 @@ function reset_manage_unit_constants(unit) { // Armour Rating // ------------------------- var _armour_val = $"{unit.armour_calc()}"; - var _armour_tool = "Reduces incoming damage at a flat rate. Certain enemies may attack in ways that may bypass your armor entirely, for example power weapons and some warp sorceries.\n\nContributing factors:\n"; + var _armour_tool = localize("Reduces incoming damage at a flat rate. Certain enemies may attack in ways that may bypass your armor entirely, for example power weapons and some warp sorceries.\n\nContributing factors:\n"); for (var i = 0; i < array_length(equipment_types); i++) { var equipment_type = equipment_types[i]; @@ -292,12 +292,12 @@ function reset_manage_unit_constants(unit) { break; } if (ac != 0) { - _armour_tool += $"{name}: {ac}\n"; + _armour_tool += localize("{0}: {1}\n", [localize(name), ac]); } } if (obj_controller.stc_bonus[1] == 5 || obj_controller.stc_bonus[2] == 3) { - _armour_tool += "STC Bonus: x1.05\n"; + _armour_tool += localize("STC Bonus: x1.05\n"); } unit_manage_constants.armour = new LabeledIcon(spr_icon_shield2, _armour_val, 0, 0, { @@ -309,7 +309,7 @@ function reset_manage_unit_constants(unit) { unit_manage_constants.exp = new LabeledIcon(spr_icon_veteran, string(floor(unit.experience)), 0, 0, { icon_width: 24, icon_height: 24, - tooltip: $"==Experience==\nA measurement of how battle-hardened the unit is. Provides various bonuses across the board. Every 15 EXP, a new stat is assigned. Hover over the unit’s stats in the marine profile to see projected growth over time.", + tooltip: localize("==Experience==\nA measurement of how battle-hardened the unit is. Provides various bonuses across the board. Every 15 EXP, a new stat is assigned. Hover over the unit's stats in the marine profile to see projected growth over time."), }); // Melee Attack @@ -317,7 +317,7 @@ function reset_manage_unit_constants(unit) { unit_manage_constants.melee_attack = new LabeledIcon(spr_icon_weapon_skill, $"{round(_melee[0])}", 0, 0, { icon_width: 24, icon_height: 24, - tooltip: $"==Melee Attack==\n{_melee[1]}", + tooltip: localize("==Melee Attack==\n{0}", [_melee[1]]), colour: unit.encumbered_melee ? #bf4040 : CM_GREEN_COLOR, }); @@ -325,7 +325,7 @@ function reset_manage_unit_constants(unit) { unit_manage_constants.melee_burden = new LabeledIcon(spr_icon_weight, $"{_carry[0]}/{_carry[1]}", 0, 0, { icon_width: 24, icon_height: 24, - tooltip: $"==Melee Burden==\n{_carry[2]}", + tooltip: localize("==Melee Burden==\n{0}", [_carry[2]]), colour: unit.encumbered_melee ? #bf4040 : CM_GREEN_COLOR, }); @@ -334,7 +334,7 @@ function reset_manage_unit_constants(unit) { unit_manage_constants.ranged_attack = new LabeledIcon(spr_icon_ballistic_skill, $"{round(_range[0])}", 0, 0, { icon_width: 24, icon_height: 24, - tooltip: $"==Ranged Attack==\n{_range[1]}", + tooltip: localize("==Ranged Attack==\n{0}", [_range[1]]), colour: unit.encumbered_ranged ? #bf4040 : CM_GREEN_COLOR, }); @@ -342,7 +342,7 @@ function reset_manage_unit_constants(unit) { unit_manage_constants.ranged_burden = new LabeledIcon(spr_icon_weight, $"{_carry[0]}/{_carry[1]}", 0, 0, { icon_width: 24, icon_height: 24, - tooltip: $"==Ranged Burden==\n{_carry[2]}", + tooltip: localize("==Ranged Burden==\n{0}", [_carry[2]]), colour: unit.encumbered_ranged ? #bf4040 : CM_GREEN_COLOR, }); @@ -350,10 +350,10 @@ function reset_manage_unit_constants(unit) { // Bionics // ------------------------- var _bionic_val = $"{unit.bionics}"; - var _bionic_tool = "Bionic Augmentation is something a unit can do to both enhance their capabilities, but also replace a missing limb to get back into the fight."; - _bionic_tool += "\nThere is a limit of 10 Bionic augmentations. After that the damage is so extensive that a marine requires a dreadnought to keep going."; - _bionic_tool += "\nFor everyone else? It's time for the emperor's mercy."; - _bionic_tool += "\n\nCurrent Bionic Augmentations:\n"; + var _bionic_tool = localize("Bionic Augmentation is something a unit can do to both enhance their capabilities, but also replace a missing limb to get back into the fight."); + _bionic_tool += localize("\nThere is a limit of 10 Bionic augmentations. After that the damage is so extensive that a marine requires a dreadnought to keep going."); + _bionic_tool += localize("\nFor everyone else? It's time for the emperor's mercy."); + _bionic_tool += localize("\n\nCurrent Bionic Augmentations:\n"); var _body_parts = global.unit_body_parts; var _body_parts_display = global.unit_body_parts_display; @@ -361,29 +361,29 @@ function reset_manage_unit_constants(unit) { for (var part = 0; part < array_length(_body_parts); part++) { if (struct_exists(unit.body[$ _body_parts[part]], "bionic")) { var part_display = _body_parts_display[part]; - _bionic_tool += $"Bionic {part_display}"; + _bionic_tool += localize("Bionic {0}", [localize(part_display)]); switch (part_display) { case "Left Leg": case "Right Leg": - _bionic_tool += " (CON: +2 STR: +1 DEX: -2)\n"; + _bionic_tool += localize(" (CON: +2 STR: +1 DEX: -2)\n"); break; case "Left Eye": case "Right Eye": - _bionic_tool += " (CON: +1 WIS: +1 DEX: +1)\n"; + _bionic_tool += localize(" (CON: +1 WIS: +1 DEX: +1)\n"); break; case "Left Arm": case "Right Arm": - _bionic_tool += " (CON: +2 STR: +2 WS: -1)\n"; + _bionic_tool += localize(" (CON: +2 STR: +2 WS: -1)\n"); break; case "Torso": - _bionic_tool += " (CON: +4 STR: +1 DEX: -1)\n"; + _bionic_tool += localize(" (CON: +4 STR: +1 DEX: -1)\n"); break; case "Throat": - _bionic_tool += " (CHA: -1)\n"; + _bionic_tool += localize(" (CHA: -1)\n"); break; case "Jaw": case "Head": - _bionic_tool += " (CON: +1)\n"; + _bionic_tool += localize(" (CON: +1)\n"); break; } } @@ -425,13 +425,13 @@ function reset_manage_unit_constants(unit) { var _comp_string = ""; if (unit.company <= 0) { - _role_name = $"{unit.squad_role()}"; + _role_name = localize(unit.squad_role()); } else if (unit.IsSpecialist()) { - _comp_string = $"{unit.company_roman()} Company"; - _role_name = $"{unit.role()}"; + _comp_string = localize("{0} Company", [unit.company_roman()]); + _role_name = localize(unit.role()); } else { - _comp_string = $"{unit.company_roman()} Company"; - _role_name = $"{unit.squad_role()}"; + _comp_string = localize("{0} Company", [unit.company_roman()]); + _role_name = localize(unit.squad_role()); } _string_data = { @@ -466,7 +466,7 @@ function reset_manage_unit_constants(unit) { /// @self Asset.GMObject.obj_controller function company_specific_management() { add_draw_return_values(); - draw_set_font(fnt_40k_30b); + draw_set_font(cjk_font(fnt_40k_30b)); draw_set_halign(fa_center); draw_set_color(c_gray); // CM_GREEN_COLOR var _allow_shorts = false; @@ -474,29 +474,29 @@ function company_specific_management() { if (managing > 20) { _comp = managing - 10; } else if ((managing >= 1) && (managing <= 10)) { - _company_name = int_to_roman(managing) + " Company"; + _company_name = localize("{0} Company", [int_to_roman(managing)]); _comp = managing; } else if (managing > 10) { switch (managing) { case 11: - _company_name = "Headquarters"; + _company_name = localize("Headquarters"); break; case 12: - _company_name = "Apothecarion"; + _company_name = localize("Apothecarion"); break; case 13: - _company_name = "Librarium"; + _company_name = localize("Librarium"); break; case 14: - _company_name = "Reclusium"; + _company_name = localize("Reclusium"); break; case 15: - _company_name = "Armamentarium"; + _company_name = localize("Armamentarium"); break; } } // Draw the company followed by chapters name - draw_text(800, 64, $"{_company_name}, {global.chapter_name}"); + draw_text(800, 64, localize("{0}, {1}", [_company_name, global.chapter_name])); if (managing <= 10) { var _text_input = management_buttons.company_namer; @@ -610,7 +610,7 @@ function alternative_manage_views(x1, y1) { /// @self Asset.GMObject.obj_controller function draw_sprite_and_unit_equip_data() { - draw_set_font(fnt_40k_14); + draw_set_font(cjk_font(fnt_40k_14)); draw_set_halign(fa_left); // Swap between squad view and normal view company_data.unit_ui_panel.inside_method = function() { @@ -619,7 +619,7 @@ function draw_sprite_and_unit_equip_data() { var xx = company_data.unit_ui_panel.XX; var yy = company_data.unit_ui_panel.YY; // draw_line(xx+1005,yy+519,xx+1576,yy+519); - draw_set_font(fnt_40k_14b); + draw_set_font(cjk_font(fnt_40k_14b)); if (is_struct(obj_controller.unit_focus)) { var selected_unit = obj_controller.unit_focus; //unit struct if (selected_unit.uid != unit_manage_constants.current_data) { @@ -673,7 +673,7 @@ function draw_sprite_and_unit_equip_data() { var cur_squad = company_data.grab_current_squad(); var sgt_possible = cur_squad.type != "command_squad" && !selected_unit.IsSpecialist(SPECIALISTS_SQUAD_LEADERS); if (!is_struct(cur_squad.squad_leader) || selected_unit.uid != cur_squad.squad_leader.uid) { - if (point_and_click(draw_unit_buttons([xx + 200 + 50, yy + 329], "Make Sgt", [1, 1], #50a076,,, sgt_possible ? 1 : 0.5)) && sgt_possible) { + if (point_and_click(draw_unit_buttons([xx + 200 + 50, yy + 329], localize("Make Sgt"), [1, 1], #50a076,,, sgt_possible ? 1 : 0.5)) && sgt_possible) { cur_squad.change_sgt(selected_unit); } } @@ -697,7 +697,7 @@ function draw_sprite_and_unit_equip_data() { unit_manage_constants.company_string.draw(); // Draw unit info - draw_set_font(fnt_40k_14); + draw_set_font(cjk_font(fnt_40k_14)); // Left side of the screen draw_set_halign(fa_left); var x_left = xx + 22; @@ -833,7 +833,7 @@ function scr_ui_manage() { // Draw BG draw_set_alpha(1); draw_sprite(spr_rock_bg, 0, xx, yy); - draw_set_font(fnt_40k_30b); + draw_set_font(cjk_font(fnt_40k_30b)); draw_set_halign(fa_center); draw_set_color(c_gray); // CM_GREEN_COLOR @@ -845,14 +845,14 @@ function scr_ui_manage() { if (managing < 0 && selection_data != false) { if (struct_exists(selection_data, "purpose")) { - draw_text(xx + 800, yy + 74, $"{selection_data.purpose}"); + draw_text(xx + 800, yy + 74, localize(selection_data.purpose)); } if (selection_data.select_type == eMISSION_SELECT_TYPE.SQUADS) { view_squad = true; } } - draw_set_font(fnt_40k_14); + draw_set_font(cjk_font(fnt_40k_14)); if (managing >= 0) { // Draw arrows @@ -909,9 +909,9 @@ function scr_ui_manage() { location: "", opposite: false, }, - purpose: $"{int_to_roman(managing)} Company Captain Candidates", + purpose: localize("{0} Company Captain Candidates", [int_to_roman(managing)]), purpose_code: "captain_promote", - button_text: "New Captain Required", + button_text: localize("New Captain Required"), unit_check: "captain", }, { @@ -930,9 +930,9 @@ function scr_ui_manage() { location: "", opposite: false, }, - purpose: $"{int_to_roman(managing)} Company Champion Candidates", + purpose: localize("{0} Company Champion Candidates", [int_to_roman(managing)]), purpose_code: "champion_promote", - button_text: "Champion Required", + button_text: localize("Champion Required"), unit_check: "champion", }, { @@ -944,9 +944,9 @@ function scr_ui_manage() { location: "", opposite: false, }, - purpose: $"{int_to_roman(managing)} Company Ancient Candidates", + purpose: localize("{0} Company Ancient Candidates", [int_to_roman(managing)]), purpose_code: "ancient_promote", - button_text: "Ancient Required", + button_text: localize("Ancient Required"), unit_check: "ancient", }, { @@ -965,9 +965,9 @@ function scr_ui_manage() { location: "", opposite: false, }, - purpose: $"{int_to_roman(managing)} Company Chaplain Candidates", + purpose: localize("{0} Company Chaplain Candidates", [int_to_roman(managing)]), purpose_code: "chaplain_promote", - button_text: "Chaplain Required", + button_text: localize("Chaplain Required"), unit_check: "chaplain", }, { @@ -986,9 +986,9 @@ function scr_ui_manage() { location: "", opposite: false, }, - purpose: $"{int_to_roman(managing)} Company Apothecary Candidates", + purpose: localize("{0} Company Apothecary Candidates", [int_to_roman(managing)]), purpose_code: "apothecary_promote", - button_text: "Apothecary Required", + button_text: localize("Apothecary Required"), unit_check: "apothecary", }, { @@ -1007,15 +1007,15 @@ function scr_ui_manage() { location: "", opposite: false, }, - purpose: $"{int_to_roman(managing)} Company Tech Marine Candidates", + purpose: localize("{0} Company Tech Marine Candidates", [int_to_roman(managing)]), purpose_code: "tech_marine_promote", - button_text: "Tech Marine Required", + button_text: localize("Tech Marine Required"), unit_check: "tech_marine", }, ]; if (!scr_has_disadv("Psyker Intolerant")) { - array_push(_command_slots_data, {search_params: {companies: [managing, 0]}, role_group_params: {group: [SPECIALISTS_LIBRARIANS, false, false], location: "", opposite: false}, purpose: $"{int_to_roman(managing)} Company Librarian Candidates", purpose_code: "librarian_promote", button_text: "Librarian Required", unit_check: "lib"}); + array_push(_command_slots_data, {search_params: {companies: [managing, 0]}, role_group_params: {group: [SPECIALISTS_LIBRARIANS, false, false], location: "", opposite: false}, purpose: localize("{0} Company Librarian Candidates", [int_to_roman(managing)]), purpose_code: "librarian_promote", button_text: localize("Librarian Required"), unit_check: "lib"}); } return _command_slots_data; @@ -1026,7 +1026,7 @@ function scr_ui_manage() { man_count = 0; var _command_slots_data = get_command_slots_data(); - draw_set_font(fnt_40k_14); + draw_set_font(cjk_font(fnt_40k_14)); if (managing > 0 && managing <= 10) { for (var r = 0; r < array_length(_command_slots_data); r++) { var role = _command_slots_data[r]; @@ -1046,7 +1046,7 @@ function scr_ui_manage() { var _only_display_selected = instance_exists(obj_popup) && (obj_popup.type == 5 || obj_popup.type == 5.1 || obj_popup.type == 6); for (var i = 0; i < max(0, repetitions); i++) { - draw_set_font(fnt_40k_14); + draw_set_font(cjk_font(fnt_40k_14)); if (sel >= array_length(display_unit)) { break; } @@ -1156,7 +1156,7 @@ function scr_ui_manage() { // BG draw_set_alpha(1); draw_sprite(spr_rock_bg, 0, xx, yy); - draw_set_font(fnt_40k_30b); + draw_set_font(cjk_font(fnt_40k_30b)); draw_set_halign(fa_center); draw_set_color(c_gray); // CM_GREEN_COLOR @@ -1173,37 +1173,37 @@ function scr_ui_manage() { // Draw companies if (managing > 0) { if (managing >= 1 && managing <= 10) { - fx = int_to_roman(managing) + " Company"; + fx = localize("{0} Company", [int_to_roman(managing)]); } else if (managing > 10) { switch (managing) { case 11: - fx = "Headquarters"; + fx = localize("Headquarters"); break; case 12: - fx = "Apothecarion"; + fx = localize("Apothecarion"); break; case 13: - fx = "Librarium"; + fx = localize("Librarium"); break; case 14: - fx = "Reclusium"; + fx = localize("Reclusium"); break; case 15: - fx = "Armamentarium"; + fx = localize("Armamentarium"); break; default: - fx = "Unknown"; + fx = localize("Unknown"); break; } } } - draw_text(xx + 800, yy + 74, $"{global.chapter_name} {fx}"); + draw_text(xx + 800, yy + 74, localize("{0} {1}", [global.chapter_name, fx])); if (managing >= 0 && managing <= 10) { if (obj_ini.company_title[managing] != "") { - draw_set_font(fnt_fancy); - draw_text(xx + 800, yy + 110, $"''{obj_ini.company_title[managing]}''"); + draw_set_font(cjk_font(fnt_fancy)); + draw_text(xx + 800, yy + 110, localize("''{0}''", [obj_ini.company_title[managing]])); } } @@ -1219,7 +1219,7 @@ function scr_ui_manage() { var top, temp1 = "", temp2 = "", temp3 = "", temp4 = "", temp5 = ""; top = ship_current; - draw_set_font(fnt_40k_14); + draw_set_font(cjk_font(fnt_40k_14)); draw_set_halign(fa_left); yy += 77; var main_rect; @@ -1227,10 +1227,10 @@ function scr_ui_manage() { for (var sel = top; sel < repetitions && sel < array_length(sh_name); sel++) { if (sh_name[sel] != "") { - temp1 = string(sh_name[sel]) + " (" + string(sh_class[sel]) + ")"; + temp1 = string(sh_name[sel]) + " (" + localize(string(sh_class[sel])) + ")"; temp2 = string(sh_loc[sel]); temp3 = sh_hp[sel]; - temp4 = string(sh_cargo[sel]) + " / " + string(sh_cargo_max[sel]) + " Space Used"; + temp4 = localize("{0} / {1} Space Used", [string(sh_cargo[sel]), string(sh_cargo_max[sel])]); main_rect = [ xx + 25, @@ -1256,8 +1256,8 @@ function scr_ui_manage() { } // Load to selected - draw_set_font(fnt_40k_14b); - draw_text_transformed(xx + 320, yy + 402, $"Click a Ship to Load Selection (Req. {man_size} Space)", 1, 1, 0); + draw_set_font(cjk_font(fnt_40k_14b)); + draw_text_transformed(xx + 320, yy + 402, localize("Click a Ship to Load Selection (Req. {0} Space)", [man_size]), 1, 1, 0); xx = camera_get_view_x(view_camera[0]); yy = camera_get_view_y(view_camera[0]); @@ -1339,7 +1339,7 @@ function draw_manage_selection_buttons() { gen_tooltip(health_tooltip); // Draw interaction and selection buttons - draw_set_font(fnt_40k_14b); + draw_set_font(cjk_font(fnt_40k_14b)); draw_set_color(#50a076); var button = new UnitButtonObject(); //new load/unload having its own row now, calculated from Y first @@ -1356,11 +1356,11 @@ function draw_manage_selection_buttons() { button.y2 = button.y1 + button.h; // // Re equip button - button.label = "Re-equip"; + button.label = localize("Re-equip"); var equip_possible = !_non_control_loc && man_size > 0; button.alpha = equip_possible ? 1 : 0.5; button.keystroke = keyboard_check(vk_shift) && keyboard_check_pressed(ord("E")); - button.tooltip = "Press Shift E"; + button.tooltip = localize("Press Shift E"); if (button.draw() && equip_possible) { set_up_equip_popup(); @@ -1369,9 +1369,9 @@ function draw_manage_selection_buttons() { // // Promote button button.x1 = action_button_x; - button.label = "Promote"; + button.label = localize("Promote"); button.keystroke = keyboard_check(vk_shift) && keyboard_check_pressed(ord("P")); - button.tooltip = "Press Shift P"; + button.tooltip = localize("Press Shift P"); var promote_possible = sel_promoting > 0 && !_non_control_loc && man_size > 0; button.alpha = promote_possible ? 1 : 0.5; if (button.draw()) { @@ -1383,9 +1383,9 @@ function draw_manage_selection_buttons() { // // Put in jail button button.x1 = action_button_x; - button.label = "Jail"; + button.label = localize("Jail"); button.keystroke = keyboard_check(vk_shift) && keyboard_check_pressed(ord("J")); - button.tooltip = "Press Shift J"; + button.tooltip = localize("Press Shift J"); var jail_possible = man_size > 0; button.alpha = jail_possible ? 1 : 0.5; if (button.draw()) { @@ -1397,9 +1397,9 @@ function draw_manage_selection_buttons() { // // Add bionics button button.x1 = action_button_x; - button.label = "Add Bionics"; + button.label = localize("Add Bionics"); button.keystroke = keyboard_check(vk_shift) && keyboard_check_pressed(ord("B")); - button.tooltip = "Press Shift B"; + button.tooltip = localize("Press Shift B"); var bionics_possible = man_size > 0; button.alpha = bionics_possible ? 1 : 0.5; if (button.draw()) { @@ -1417,9 +1417,9 @@ function draw_manage_selection_buttons() { // // Designate as boarder unit button.x1 = action_button_x; - button.label = "Set Boarder"; + button.label = localize("Set Boarder"); button.keystroke = keyboard_check(vk_shift) && keyboard_check_pressed(ord("Q")); - button.tooltip = "Press Shift Q"; + button.tooltip = localize("Press Shift Q"); var boarder_possible = sel_loading != -1 && man_size > 0; button.alpha = boarder_possible ? 1 : 0.5; if (button.draw() && boarder_possible) { @@ -1431,9 +1431,9 @@ function draw_manage_selection_buttons() { // // Reset changes button button.x1 = action_button_x; - button.label = "Reset"; + button.label = localize("Reset"); button.keystroke = keyboard_check(vk_shift) && keyboard_check_pressed(ord("R")); - button.tooltip = "Press Shift R"; + button.tooltip = localize("Press Shift R"); var reset_possible = !_non_control_loc && man_size > 0; if (reset_possible) { button.alpha = 1; @@ -1451,9 +1451,9 @@ function draw_manage_selection_buttons() { // // Transfer to another company button button.x1 = action_button_x; - button.label = "Transfer"; + button.label = localize("Transfer"); button.keystroke = keyboard_check(vk_shift) && keyboard_check_pressed(ord("T")); - button.tooltip = "Press Shift T"; + button.tooltip = localize("Press Shift T"); var transfer_possible = !_non_control_loc && man_size > 0; if (transfer_possible) { button.alpha = 1; @@ -1468,9 +1468,9 @@ function draw_manage_selection_buttons() { // // Move Ship button button.x1 = action_button_x; - button.label = "Move Ship"; + button.label = localize("Move Ship"); button.keystroke = keyboard_check(vk_shift) && keyboard_check_pressed(ord("M")); - button.tooltip = "Press Shift M"; + button.tooltip = localize("Press Shift M"); var moveship_possible = !_non_control_loc && man_size > 0 && selecting_ship > -1; if (moveship_possible) { button.alpha = 1; @@ -1485,9 +1485,9 @@ function draw_manage_selection_buttons() { // // Manage Tags button button.x1 = action_button_x; - button.label = "Manage Tags"; + button.label = localize("Manage Tags"); button.keystroke = keyboard_check(vk_shift) && keyboard_check_pressed(ord("F")); - button.tooltip = "Press Shift F"; //Press Shift F"; + button.tooltip = localize("Press Shift F"); //Press Shift F"; button.alpha = 1; if (button.draw()) { if (!instance_exists(obj_popup)) { @@ -1501,10 +1501,10 @@ function draw_manage_selection_buttons() { button.y1 = action_button_bottom_y + 30 + _load_button_h_gap; button.x2 = button.x1 + button.w; button.y2 = button.y1 + button.h; - button.label = "Load"; + button.label = localize("Load"); var load_unload_possible = man_size > 0; button.keystroke = keyboard_check(vk_shift) && keyboard_check_pressed(ord("L")); - button.tooltip = "Press Shift L"; + button.tooltip = localize("Press Shift L"); if (load_unload_possible) { button.alpha = 1; if (sel_loading == -1) { @@ -1512,7 +1512,7 @@ function draw_manage_selection_buttons() { load_selection(); } } else if (sel_loading != -1) { - button.label = "Unload"; + button.label = localize("Unload"); if (button.draw()) { unload_selection(); } @@ -1524,7 +1524,7 @@ function draw_manage_selection_buttons() { button.move("right", true); - button.label = "Reload"; + button.label = localize("Reload"); button.keystroke = false; if (instance_exists(obj_controller) && is_struct(_unit_focus)) { button.tooltip = $"{_unit_focus.last_ship.name}"; @@ -1548,10 +1548,18 @@ function draw_manage_selection_buttons() { var _filter_next_y = top_y; if (sel_uni[1] != "") { - draw_set_font(fnt_40k_30b); - draw_text_transformed(actions_block.x1 + 26, actions_block.y1 + 6, $"Selection: {man_size} space", 0.5, 0.5, 0); - draw_set_font(fnt_40k_14); + // How much space the selected unit takes + draw_set_font(cjk_font(fnt_40k_30b)); + draw_text_transformed(actions_block.x1 + 26, actions_block.y1 + 6, localize("Selection: {0} space", [man_size]), 0.5, 0.5, 0); + // List of selected units + draw_set_font(cjk_font(fnt_40k_14)); draw_text_ext(actions_block.x1 + 26, actions_block.y1 + 30, selecting_dudes, -1, 550); + // Options for the selected unit + // draw_set_font(cjk_font(fnt_40k_30b)); + // draw_text_transformed(actions_block.x1 + 4, actions_block.x1 + 64,"Options:",0.5,0.5,0); + + // Select all units button + // button reset code button.set_width = false; button.w = 0; @@ -1559,7 +1567,7 @@ function draw_manage_selection_buttons() { button.font = fnt_40k_14b; button.text_scale = 1; - button.label = "Select All"; + button.label = localize("Select All"); button.x1 = top_x; button.y1 = top_y; button.update_loc(); @@ -1572,17 +1580,19 @@ function draw_manage_selection_buttons() { button.x1 = top_x + button.w + button.h_gap; button.update_loc(); - button.label = "Filter Mode"; + button.label = localize("Filter Mode"); button.alpha = filter_mode ? 1 : 0.5; if (button.draw()) { filter_mode = !filter_mode; } button.font = fnt_40k_12; + _filter_next_y = draw_selection_filter_group(button, "All Infantry", "man", sel_uni, top_x, top_y + button.h + button.v_gap + 4, _filter_right); } if (sel_veh[1] != "") { + button.font = fnt_40k_12; draw_selection_filter_group(button, "All Vehicles", "vehicle", sel_veh, top_x, _filter_next_y + 4, _filter_right); } diff --git a/scripts/scr_unit_quick_find_pane/scr_unit_quick_find_pane.gml b/scripts/scr_unit_quick_find_pane/scr_unit_quick_find_pane.gml index 1b5e0b365e..de2efc327e 100644 --- a/scripts/scr_unit_quick_find_pane/scr_unit_quick_find_pane.gml +++ b/scripts/scr_unit_quick_find_pane/scr_unit_quick_find_pane.gml @@ -39,6 +39,7 @@ function UnitQuickFindPanel() constructor { row_key_draw: ["capitals", "frigates", "escorts", "location"], set_column_widths: [70, 70, 70, 100], row_h: 20, + localize_headings: true, }); static has_troops = function(name) { @@ -170,13 +171,13 @@ function UnitQuickFindPanel() constructor { var _point_data = _cur_fleet.point_breakdown; if (_cur_fleet.action == "Lost") { - _loc = "Lost"; + _loc = localize("Lost"); _zoomable = false; } else if (string_count("crusade", _cur_fleet.action)) { - _loc = "Crusading"; + _loc = localize("Crusading"); _zoomable = false; } else if (_cur_fleet.action == "move") { - _loc = "Warp Travel"; + _loc = localize("Warp Travel"); } else { var _near_star = instance_nearest(_cur_fleet.x, _cur_fleet.y, obj_star); _loc = _near_star.name; @@ -199,7 +200,7 @@ function UnitQuickFindPanel() constructor { _row.hover = method(_row, function() { obj_controller.location_viewer.hovered_fleet_data = point_data; - tooltip_draw("left click to view"); + tooltip_draw(localize("left click to view")); }); // Click to pan camera — only when location is meaningful @@ -215,6 +216,16 @@ function UnitQuickFindPanel() constructor { fleet_table.update({row_data: _rows}); }; + static draw_specialist_point_headers = function(_x, _y) { + draw_set_font(cjk_font(fnt_40k_12i)); + draw_set_halign(fa_center); + draw_text(_x + 160, _y + 10, localize("forge point\ntotal")); + draw_text(_x + 240, _y + 10, localize("forge point\nuse")); + draw_text(_x + 320, _y + 10, localize("apothecary\npoint total")); + draw_text(_x + 400, _y + 10, localize("apothecary\npoint use")); + draw_text(_x + 60, _y + 50, localize("Orbiting")); + }; + static draw_fleet_area = function() { var xx = main_panel.XX; var yy = main_panel.YY; @@ -234,15 +245,7 @@ function UnitQuickFindPanel() constructor { var _sy = yy + 108; detail_slate.draw(_sx, _sy, 1.5, 1.5); - draw_set_font(fnt_40k_12i); - draw_set_halign(fa_center); - - // Headers - draw_text(_sx + 160, _sy + 10, "forge point\ntotal"); - draw_text(_sx + 240, _sy + 10, "forge point\nuse"); - draw_text(_sx + 320, _sy + 10, "apothecary\npoint total"); - draw_text(_sx + 400, _sy + 10, "apothecary\npoint use"); - draw_text(_sx + 60, _sy + 50, "Orbiting"); + draw_specialist_point_headers(_sx, _sy); // Values var _vy = _sy + 50; @@ -295,7 +298,7 @@ function UnitQuickFindPanel() constructor { switch (_event.turn_end) { //this is being pre seeded for a later coming feature set case "deliver_trophy_end_turn_check": - var _mission = $"Deliver Trophy Guard"; + var _mission = localize("Deliver Trophy Guard"); var _sys = fleets_next_location(); var _mission_data = { mission: _mission, @@ -314,7 +317,7 @@ function UnitQuickFindPanel() constructor { }); _mission_data.hover = method(_mission_data, function() { - tooltip_draw($"You are to have {person_name} deliver trophy hunted on {start_system} to the {start_system} regiments\n\nLeft click to see target fleet intercept system right click to view the trophy bearing marine {person_name}"); + tooltip_draw(localize("You are to have {0} deliver trophy hunted on {1} to the {1} regiments\n\nLeft click to see target fleet intercept system right click to view the trophy bearing marine {0}", [person_name, start_system])); }); _mission_data.click_right = method(_mission_data, function() { @@ -354,6 +357,7 @@ function UnitQuickFindPanel() constructor { "mission", "time", ], + localize_headings: true, }; mission_table = new Table(_data); }; @@ -368,11 +372,12 @@ function UnitQuickFindPanel() constructor { } else if (view_area == "garrisons") { var system_data; draw_set_color(c_white); + draw_set_font(cjk_font(fnt_40k_14)); draw_set_halign(fa_center); - draw_text(xx + 80, yy + 50, "System"); - draw_text(xx + 160, yy + 50, "Troops"); - draw_text(xx + 240, yy + 50, "Healers"); - draw_text(xx + 310, yy + 50, "Techies"); + draw_text(xx + 80, yy + 50, localize("System")); + draw_text(xx + 160, yy + 50, localize("Troops")); + draw_text(xx + 240, yy + 50, localize("Healers")); + draw_text(xx + 310, yy + 50, localize("Techies")); var i = start_system; var registered_hover = false; var system_names = struct_get_names(garrison_log); @@ -410,12 +415,7 @@ function UnitQuickFindPanel() constructor { var _system_point_data = _special_points[$ _sys_name]; var _xx = xx + main_panel.width - 10; var _yy = _sys_item_y - 20; - draw_set_font(fnt_40k_12i); - draw_text(_xx + 160, _yy + 10, "forge point\ntotal"); - draw_text(_xx + 240, _yy + 10, "forge point\nuse"); - draw_text(_xx + 320, _yy + 10, "apothecary\npoint total"); - draw_text(_xx + 400, _yy + 10, "apothecary\npoint use"); - draw_text(_xx + 60, _yy + 50, "Orbiting"); + draw_specialist_point_headers(_xx, _yy); for (var s = 1; s <= 4; s++) { draw_text(_xx + 60, _yy + 50 + (50 * s), scr_roman(s)); } @@ -468,8 +468,8 @@ function UnitQuickFindPanel() constructor { hover_count = 0; hover_item = noone; } else if (hover_item != noone) { - if (point_and_click(hover_item.draw(xx + 10, yy + 90 + (20 * hover_item.root_item), "Manage"))) { - group_selection(garrison_log[$ system_names[hover_item.root_item]].units, {purpose: $"{system_names[hover_item.root_item]} Management", purpose_code: "manage", number: 0, system: find_star_by_name(system_names[hover_item.root_item]).id, feature: "none", planet: 0, selections: []}); + if (point_and_click(hover_item.draw(xx + 10, yy + 90 + (20 * hover_item.root_item), localize("Manage")))) { + group_selection(garrison_log[$ system_names[hover_item.root_item]].units, {purpose: localize("{0} Management", [system_names[hover_item.root_item]]), purpose_code: "manage", number: 0, system: find_star_by_name(system_names[hover_item.root_item]).id, feature: "none", planet: 0, selections: []}); } } } else if (view_area == "missions") { @@ -498,27 +498,27 @@ function UnitQuickFindPanel() constructor { } if (hide_sequence > 15 || hide_sequence < 15) { main_panel.draw(x_draw, 110, 0.46, 0.75); - if (tab_buttons.fleets.draw(x_draw, 79, "Fleets")) { + if (tab_buttons.fleets.draw(x_draw, 79, localize("Fleets"))) { view_area = "fleets"; update_fleet_table(); } - if (tab_buttons.garrisons.draw(115 + x_draw, 79, "System Troops")) { + if (tab_buttons.garrisons.draw(115 + x_draw, 79, localize("System Troops"))) { view_area = "garrisons"; update_garrison_log(); } - if (tab_buttons.missions.draw(230 + x_draw, 79, "Missions")) { + if (tab_buttons.missions.draw(230 + x_draw, 79, localize("Missions"))) { view_area = "missions"; update_mission_log(); } if (x_draw < 0) { - tab_buttons.hider.draw(0, lower_draw, "Show"); + tab_buttons.hider.draw(0, lower_draw, localize("Show")); } else { - if (tab_buttons.hider.draw(x_draw + 280, lower_draw, "Hide")) { + if (tab_buttons.hider.draw(x_draw + 280, lower_draw, localize("Hide"))) { hide_sequence++; } } } else if (hide_sequence == 15) { - if (tab_buttons.hider.draw(0, lower_draw, "Show")) { + if (tab_buttons.hider.draw(0, lower_draw, localize("Show"))) { hide_sequence++; } } @@ -826,7 +826,7 @@ function HelpfulPlaces() constructor { _data.help_requests = _helps; _data.hover = method(_data, function() { - tooltip_draw($"View {name}"); + tooltip_draw(localize("View {0}", [name])); }); _data.click_left = method(_data, function() { @@ -849,6 +849,7 @@ function HelpfulPlaces() constructor { row_key_draw: ["name", "system_count", "help_requests"], headings: ["System", "Planets", "Planets\nRequesting Help"], row_data: _help_requests, + localize_headings: true, }); var _navy_fleets = []; @@ -871,9 +872,9 @@ function HelpfulPlaces() constructor { _data.hover = method(_data, function() { if (location != "Warp") { - tooltip_draw($"View fleet at {location}"); + tooltip_draw(localize("View fleet at {0}", [location])); } else { - tooltip_draw($"View fleet"); + tooltip_draw(localize("View fleet")); } }); @@ -888,6 +889,8 @@ function HelpfulPlaces() constructor { row_key_draw: ["location", "remaining_guard"], headings: ["Location", "Remaining\nGuard"], row_data: _navy_fleets, + localize_values: true, + localize_headings: true, }); var _forges = []; @@ -911,7 +914,7 @@ function HelpfulPlaces() constructor { }); _data.hover = method(_data, function() { - tooltip_draw($"click to view {system.name} system"); + tooltip_draw(localize("click to view {0} system", [system.name])); }); var _name_length = string_width(_data.name); @@ -929,6 +932,8 @@ function HelpfulPlaces() constructor { headings: ["Name", " Owner ", " Owner\nStatus "], row_data: _forges, set_column_widths: _columns, + localize_values: true, + localize_headings: true, }); places_radio = new RadioSet(