From e0b57bdddf2d22e507d40e48f7c0042bcbbf43a3 Mon Sep 17 00:00:00 2001 From: Marisa Kirisame Date: Fri, 14 May 2021 23:12:09 +0200 Subject: [PATCH] Added notes for localization. Some polishing up of tool code. --- LOCALIZATION.md | 21 ++++++++ language.def_lore | 2 +- language.es_lore | 2 +- language.version | 4 +- lore/default/quadravol.txt | 2 +- lore/es/quadravol.txt | 2 +- tools/mkfontblock.c | 33 +++++++++---- tools/mkfontsingle.c | 4 +- tools/mklang.c | 99 +++++++++++++++++++++----------------- tools/mkpk3.sh | 3 +- tools/mkpk7.sh | 3 +- tools/mkstartup.c | 7 +-- zscript.txt | 2 +- 13 files changed, 117 insertions(+), 67 deletions(-) create mode 100644 LOCALIZATION.md diff --git a/LOCALIZATION.md b/LOCALIZATION.md new file mode 100644 index 000000000..d8c33c48f --- /dev/null +++ b/LOCALIZATION.md @@ -0,0 +1,21 @@ +# Notes on localizing SWWM GZ + +There are two parts to this: + +## Basic language files *(base/menu/mission/voice)* + +Just make a copy and change the language code at the top *(the string between brackets)* to whatever language you're translating it to *(don't forget to also set it in the file extension too, for the sake of easier organization)*. + +In regards to what should and should not be localized, this will be noted in comments in the file itself. + +**Note:** For the sake of cleanness, if you've left any language strings untouched, remove them in your file. + +## Specialized lore files *(located in lore folder)* + +**DO NOT manipulate the generated language file for these directly**, use the individual source files in their subfolders, creating one folder first for the language you'll cover. + +Each entry must have only one of each TAG, TAB and REL section, and at least one TXT section. When localizing, DO NOT copy the TAB and REL sections, as these are for internal use and mustn't be translated, instead handle only the TAG and TXT sections. + +## Language codes + +For a list of these, consult the ZDoom wiki article for [LANGUAGE](https://zdoom.org/wiki/LANGUAGE#Language_codes). \ No newline at end of file diff --git a/language.def_lore b/language.def_lore index a2c98b22f..9a7e02016 100644 --- a/language.def_lore +++ b/language.def_lore @@ -386,7 +386,7 @@ SWWM_LORETXT_PUSHERWEAPON = "\cxDesignation:\c-\n\cf \"Pusher\" Microfusion Rota SWWM_LORETAG_QUADRAVOL = "Quadravol"; SWWM_LORETAB_QUADRAVOL = "Item"; SWWM_LOREREL_QUADRAVOL = "Kmonn;Xekke"; -SWWM_LORETXT_QUADRAVOL = "\cxDesignation:\c-\n\cf Quadravol (\"Ardent Cross\")\c-\n\cxManufacturer:\c-\n\cf Eushura Kmonn Jr.\c-\n\cxClassification:\c-\n\cf Igneous Projectile Launcher\c-\n\nA powerful incendiary weapon coming from \cfKmonn Shuna\c-, prized among \cfXekkian\c- commanders. The \cfQuadravol\c- shoots blazing balls of fire that explode spectacularly in contact with anything, releasing intense heat and kinetic force. It is seen to be very useful against crowds as the force of impact is potent enough to disperse them quickly. One very distinctive trait of the weapon is the fact that the flames that burst out of it will burn brightly even underwater.\n\nThe name of the weapon comes from the \cfXekkas\c- language, and it stands for \cf\"Ardent Cross\"\c-. This name is taken from a verse of the old legend of the heroic general \cfAntikalapsus\c-, who in 17381 BC defeated the \cfInshta Ereuma\c- and his \cfMinistry of Destruction\c-. As the verse narrates:\n\n\cf\"Saida shuna hoskaxar ter quadravol sundara vostoshakera serai, doro ultirukoda bos naaxakka ter usosmodu bura tasaskil.\"\c-\n\n\cf(For the flames of the ardent cross spread throughout the horde, and cleansed this holy land of the corruption they had brought.)\c-\n\nThe Ardent Cross was the name of the general's sword which, when imbued with magic, would release deadly cross slashes of burning flame.\n\n\cfPrimary Fire:\c- Single, large fireball shot. Very minor drift, so its effective range is quite long. Ignites nearby targets on impact.\n\n\cfSecondary Fire:\c- Scatter shot of lesser fireballs. Increased drift and lower effective range, but very useful against multiple targets.\n\n\cfTertiary Fire:\c- Pumps additional fuel, increasing the strength of your shots, but also their drift, making them less accurate. Excess overcharge will result in a wildly inaccurate misfire, but even this has its uses.\n\n\cfReloading:\c- Each fuel box allows for ten shots (less if boosted), after which it must be reloaded. The weapon firmly locks the box in place until it's fully depleted, however.\n\n\cfTechniques:\c- The weapon has a certain \"extra effective\" special move should you be close enough to your target. Plunging the four bayonets into an enemy and immediately pulling the trigger afterwards will result in a potent point blank explosion that will send them flying, covered in flames.\n\n\cxSaya's Notes:\c-\n\cfTypical overly dramatic Xekkian stuff. The \"Ardent Cross\", really... But it's as badass as it sounds, at least.\c-\n\n\cfAnd of course it's huge af too, even if the grip is supposedly adapted. It honestly weirds me out how you can do that thing of... making your hands bigger, but at least it lets you use stuff like that easily.\c-\n\n\cfAnyway, motherfucking fireballs, that work underwater??? Gonna need to see the science behind this because that makes no fucking sense and yet... it's there.\c-"; +SWWM_LORETXT_QUADRAVOL = "\cxDesignation:\c-\n\cf Quadravol (\"Ardent Cross\")\c-\n\cxManufacturer:\c-\n\cf Eushura Kmonn Jr.\c-\n\cxClassification:\c-\n\cf Igneous Projectile Launcher\c-\n\nA powerful incendiary weapon coming from \cfKmonn Shuna\c-, prized among \cfXekkian\c- commanders. The \cfQuadravol\c- shoots blazing balls of fire that explode spectacularly in contact with anything, releasing intense heat and kinetic force. It is seen to be very useful against crowds as the force of impact is potent enough to disperse them quickly. One very distinctive trait of the weapon is the fact that the flames that burst out of it will burn brightly even underwater.\n\nThe name of the weapon comes from the \cfXekkas\c- language, and it stands for \cf\"Ardent Cross\"\c-. This name is taken from a verse of the old legend of the heroic general \cfAntikalapsus\c-, who in 17381 BC defeated the \cfInshta Ereuma\c- and his \cfMinistry of Destruction\c-. As the verse narrates:\n\n\cf\"Saida shuna hoskaxar ter quadravol sundara vostoshakera serai, doro ultirukoda bos naaxakka ter usosmodu bura tasaskil.\"\c-\n\n\cf(For the flames of the ardent cross spread throughout the horde, and cleansed this holy land of the corruption they had brought.)\c-\n\nThe Ardent Cross was the name of the general's sword which, when imbued with magic, would release deadly cross slashes of burning flame.\n\n\cfPrimary Fire:\c- Single, large fireball shot. Very minor drift, so its effective range is quite long. Ignites nearby targets on impact.\n\n\cfSecondary Fire:\c- Scatter shot of lesser fireballs. Increased drift and lower effective range, but very useful against multiple targets.\n\n\cfTertiary Fire:\c- Pumps additional fuel, increasing the strength of your shots, but also their drift, making them less accurate. Excess overcharge will result in a wildly inaccurate misfire, but even this has its uses. Forcibly pumping in the middle of primary or secondary fire engages slamfire, allowing you to shoot rapid low-charge bursts.\n\n\cfReloading:\c- Each fuel box allows for ten shots (less if boosted), after which it must be reloaded. The weapon firmly locks the box in place until it's fully depleted, however.\n\n\cfTechniques:\c- The weapon has a certain \"extra effective\" special move should you be close enough to your target. Plunging the four bayonets into an enemy and immediately pulling the trigger afterwards will result in a potent point blank explosion that will send them flying, covered in flames.\n\n\cxSaya's Notes:\c-\n\cfTypical overly dramatic Xekkian stuff. The \"Ardent Cross\", really... But it's as badass as it sounds, at least.\c-\n\n\cfAnd of course it's huge af too, even if the grip is supposedly adapted. It honestly weirds me out how you can do that thing of... making your hands bigger, but at least it lets you use stuff like that easily.\c-\n\n\cfAnyway, motherfucking fireballs, that work underwater??? Gonna need to see the science behind this because that makes no fucking sense and yet... it's there.\c-"; SWWM_LORETAG_RAGEKIT = "Ragekit"; SWWM_LORETAB_RAGEKIT = "Item"; SWWM_LOREREL_RAGEKIT = "AkariLabs;Demolitionist;Saya;DecadeMech"; diff --git a/language.es_lore b/language.es_lore index d638438c3..5ba6031f8 100644 --- a/language.es_lore +++ b/language.es_lore @@ -162,7 +162,7 @@ SWWM_LORETXT_PROPULSOR = "\cxDesignación:\c-\n\cf Impulsor JetBurst™ Forx\c-\ SWWM_LORETXT_PUNTZERBETA = "\cxDesignación:\c-\n\cf Revólver Puntzer \"Beta\"\c-\n\cxFabricante:\c-\n\cf Blackmann Arms S.L.\c-\n\cxClasificación:\c-\n\cf Revólver de Acción Simple\c-\n\nLa serie \cfPuntzer\c- de armas de \cfBlackmann Arms\c- son el principal ejemplo del potencial de su patentada munición perforadora \cfSpin Motion Wedge (SMW)\c-.\n\nEl \cfPuntzer Beta\c- es un revólver de acción simple con cañón basculante de seis disparos, equipado con partes muy robustas, ideales para fanáticos del disparo en abanico.\n\n\cfFuego Primario:\c- Disparos lentos y precisos.\n\n\cfFuego Secundario:\c- Mantén para entrar en modo abanico, suelta para salir. En este modo, puedes pulsar/mantener el fuego primario para disparar mucho más rápido, pero con menor precisión.\n\n\cfFuego Terciario:\c- Gira el arma desenfrenadamente, por diversión.\n\n\cfRecarga:\c- Recarga el arma. Gracias al sistema de recarga rápida provisto por tu \cfContenedor de Hammerspace™\c-, simplemente tienes que mantener la palma abierta sobre el tambor, las balas serán cargadas automáticamente.\n\n\cxNotas de Saya:\c-\n\cfAh, el revólver, un arma muy clásica, famoso por todas esas películas americanas del \"salvaje oeste\". Pero este es especial, oh sí. Esas putas balas espirales son un puto desmadre, girando a lo bestia y taladrando a través de todo. Hermann-senpai nos manda las de tipo \".05\" específicamente, que son las más potentes de todas, y supuestamente pueden taladrar a través de las paredes y todo. Eso va a ser divertido.\c-"; SWWM_LORETXT_PUNTZERGAMMA = "\cxDesignación:\c-\n\cf Carabina de Asalto Puntzer \"Gamma\"\c-\n\cxFabricante:\c-\n\cf Blackmann Arms S.L.\c-\n\cxClasificación:\c-\n\cf Subfusil\c-\n\nLa serie \cfPuntzer\c- de armas de \cfBlackmann Arms\c- son el principal ejemplo del potencial de su patentada munición perforadora \cfSpin Motion Wedge (SMW)\c-.\n\nEl \cfPuntzer Gamma\c- es un subfusil bullpup mayormente compacto con un sistema de cargador horizontal similar a clásicos del siglo 21 como el \cfBreakerTek P90\c-. El arma es adicionalmente capaz de ejecutar un modo \"Súper-Automático\" de disparo ultrarrápido, visto también en otras armas automáticas fabricadas por Blackmann Arms.\n\n\cfFuego Primario:\c- Dispara el arma.\n\n\cfFuego Secundario:\c- Alterna modos de disparo, entre simple, ráfaga de tres, automático y súper-automático.\n\n\cfRecarga:\c- Recarga, obviamente. Los autocargadores de tu \cfContenedor de Hammerspace™\c- te proveerán de un cargador nuevo en cada momento.\n\n\cxNotas de Saya:\c-\n\cfMis piernas están OK.\c-\n\n\cfAhora en serio, eso mola mucho. Arma rapidísima que dispara balas taladradoras giradísimas. ¿Que clase de licencia necesitas para usar algo así en cualquier situación que no sea una invasión demoníaca? No hay manera de que algo tan ridículo sea legal de otro modo.\c-\n\n\cfPor cierto me acabo de dar cuenta de algo: Las balas SMW son de 6.9mm.\c-\n\n\cfNice.\c-"; SWWM_LORETXT_PUSHERWEAPON = "\cxDesignación:\c-\n\cf Taladro Percutor de Microfusión \"Pusher\"\c-\n\cxFabricante:\c-\n\cf Instituto Tecnológico Tach-Engine\c-\n\cxClasificación:\c-\n\cf Herramienta de Minería\c-\n\nEl \cfPusher\c- es un taladro percutor relativamente portátil hecho para tareas de minería y construcción. Su portabilidad viene en parte por el uso de una batería interna de microfusión, también cortesía de \cfTecnologías Tach-Engine\c-, ofreciendo suficiente potencia para 300 horas de uso constante. Tecnologías Tach-Engine no se hace responsable por el uso indebido de esta herramienta.\n\n\cfFuego Primario:\c- Operación normal. Apunta la broca hacia lo que necesites romper, y mantén pulsado el gatillo superior.\n\n\cfFuego Secundario:\c- Para aquellos casos en los que encuentres un material realmente duro y difícil de romper. Gira el mango lateral hasta que la broca haya retrocedido hasta una distancia que consideres adecuada, y luego pulsa el gatillo principal para golpear el objetivo, con la fuerza cargada.\n\n\cfADVERTENCIA:\c- La sujeción indebida durante la operación secundaria puede causar que la herramienta se resbale, mantén siempre el área libre para evitar daños colaterales.\n\n\cxNotas de Saya:\c-\n\cfSí, las motosierras son lo típico en cuanto a \"herramienta hecha arma\", todos lo sabemos, pero, ¿y un puto martillo neumático?\c-\n\n\cfAhora que lo pienso, eso me recuerda a aquella metedura de pata tremenda de Mixom. Los frikis de la UAC pidieron un monte de martillos neumáticos para Mars City una vez, y los burros esos van y mandan motosierras. Pues vaya lío ese, ¿no crees?\c-"; -SWWM_LORETXT_QUADRAVOL = "\cxDesignación:\c-\n\cf Quadravol (\"Cruz Ardiente\")\c-\n\cxFabricante:\c-\n\cf Eushura Kmonn Jr.\c-\n\cxClasificación:\c-\n\cf Lanzadora de Proyectiles Ígneos\c-\n\nUna poderosa arma incendiaria proveniente de \cfKmonn Shuna\c-, preciada por comandantes \cfXekkian\c-. La \cfQuadravol\c- dispara bolas de fuego abrasador que explotan espectacularmente en contacto con cualquier cosa, liberando un intenso calor y fuerza cinética. Es considerada muy útil contra grupos ya que la fuerza de impacto es lo suficientemente potente para dispersarlos rápidamente. Un rasgo muy característico del arma es el hecho de que las llamas que salen de ella arderán con fuerza incluso bajo el agua.\n\nEl nombre del arma viene del idioma \cfXekkas\c-, y se traduce como \cfCruz Ardiente\c-. Este nombre fue tomado de un verso de la vieja leyenda del heroico general \cfAntikalapsus\c-, quien en el 17381 AC derrotó al \cfInshta Ereuma\c- y su \cfMinisterio de la Destrucción\c-. Tal como narra el verso:\n\n\cf\"Saida shuna hoskaxar ter quadravol sundara vostoshakera serai, doro ultirukoda bos naaxakka ter usosmodu bura tasaskil.\"\c-\n\n\cf(Así las llamas de la cruz ardiente se propagaron a través de la horda, y limpiaron esta tierra santa de la corrupción que trajeron consigo.)\c-\n\nLa Cruz Ardiente era el nombre de la espada del general la cual, al ser imbuida de magia, podía liberar mortíferos cortes cruzados de llamas fulminantes.\n\n\cfFuego Primario:\c- Disparo de gran bola de fuego. Desvío mucho menor, por lo que su rango efectivo es muy largo. Incendia objetivos cercanos al impactar.\n\n\cfFuego Secundario:\c- Disparo disperso de bolas de fuego menores. Desvío incrementado y rango efectivo menor, pero muy útil contra múltiples objetivos.\n\n\cfFuego Terciario:\c- Bombea combustible adicional, incrementando la potencia de tus disparos, pero también su desvío, haciéndolos menos precisos. La sobrecarga excesiva puede resultar en una imprecisa descarga accidental, pero incluso esto tiene sus usos.\n\n\cfRecarga:\c- Cada caja de combustible permite diez disparos (menos si potenciados), tras lo cual debe ser recargada. El arma mantiene la caja acoplada firmemente hasta que está completamente vacía, sin embargo.\n\n\cfTécnicas:\c- El arma tiene un cierto movimiento especial \"extra efectivo\" si te encuentras a poca distancia de tu objetivo. Hundiendo las cuatro bayonetas en el enemigo e inmediatamente después apretando el gatillo resultará en una potente explosión a bocajarro que lo enviará volando, cubierto en llamas.\n\n\cxNotas de Saya:\c-\n\cfTípicas ñoñerías superdramáticas de los Xekkian. La \"Cruz Ardiente\", en serio... Pero mola tanto como suena, al menos.\c-\n\n\cfY por supuesto es jodidamente enorme, también, aunque la empuñadura está supuestamente adaptada. En serio que se me hace rarísimo como puedes hacer eso de... agrandar las manos, pero al menos te permite usar cosas así fácilmente.\c-\n\n\cfEn fin, putas bolas de fuego, ¿¿¿que funcionan bajo el agua??? Voy a tener que echarle un ojo a la ciencia detrás de esto porque eso no tiene puto sentido y aun así... está ahí.\c-"; +SWWM_LORETXT_QUADRAVOL = "\cxDesignación:\c-\n\cf Quadravol (\"Cruz Ardiente\")\c-\n\cxFabricante:\c-\n\cf Eushura Kmonn Jr.\c-\n\cxClasificación:\c-\n\cf Lanzadora de Proyectiles Ígneos\c-\n\nUna poderosa arma incendiaria proveniente de \cfKmonn Shuna\c-, preciada por comandantes \cfXekkian\c-. La \cfQuadravol\c- dispara bolas de fuego abrasador que explotan espectacularmente en contacto con cualquier cosa, liberando un intenso calor y fuerza cinética. Es considerada muy útil contra grupos ya que la fuerza de impacto es lo suficientemente potente para dispersarlos rápidamente. Un rasgo muy característico del arma es el hecho de que las llamas que salen de ella arderán con fuerza incluso bajo el agua.\n\nEl nombre del arma viene del idioma \cfXekkas\c-, y se traduce como \cfCruz Ardiente\c-. Este nombre fue tomado de un verso de la vieja leyenda del heroico general \cfAntikalapsus\c-, quien en el 17381 AC derrotó al \cfInshta Ereuma\c- y su \cfMinisterio de la Destrucción\c-. Tal como narra el verso:\n\n\cf\"Saida shuna hoskaxar ter quadravol sundara vostoshakera serai, doro ultirukoda bos naaxakka ter usosmodu bura tasaskil.\"\c-\n\n\cf(Así las llamas de la cruz ardiente se propagaron a través de la horda, y limpiaron esta tierra santa de la corrupción que trajeron consigo.)\c-\n\nLa Cruz Ardiente era el nombre de la espada del general la cual, al ser imbuida de magia, podía liberar mortíferos cortes cruzados de llamas fulminantes.\n\n\cfFuego Primario:\c- Disparo de gran bola de fuego. Desvío mucho menor, por lo que su rango efectivo es muy largo. Incendia objetivos cercanos al impactar.\n\n\cfFuego Secundario:\c- Disparo disperso de bolas de fuego menores. Desvío incrementado y rango efectivo menor, pero muy útil contra múltiples objetivos.\n\n\cfFuego Terciario:\c- Bombea combustible adicional, incrementando la potencia de tus disparos, pero también su desvío, haciéndolos menos precisos. La sobrecarga excesiva puede resultar en una imprecisa descarga accidental, pero incluso esto tiene sus usos. Forzar el bombeo mientras se usa el fuego primario o secundario realizará disparos en cadena rápidos de baja potencia.\n\n\cfRecarga:\c- Cada caja de combustible permite diez disparos (menos si potenciados), tras lo cual debe ser recargada. El arma mantiene la caja acoplada firmemente hasta que está completamente vacía, sin embargo.\n\n\cfTécnicas:\c- El arma tiene un cierto movimiento especial \"extra efectivo\" si te encuentras a poca distancia de tu objetivo. Hundiendo las cuatro bayonetas en el enemigo e inmediatamente después apretando el gatillo resultará en una potente explosión a bocajarro que lo enviará volando, cubierto en llamas.\n\n\cxNotas de Saya:\c-\n\cfTípicas ñoñerías superdramáticas de los Xekkian. La \"Cruz Ardiente\", en serio... Pero mola tanto como suena, al menos.\c-\n\n\cfY por supuesto es jodidamente enorme, también, aunque la empuñadura está supuestamente adaptada. En serio que se me hace rarísimo como puedes hacer eso de... agrandar las manos, pero al menos te permite usar cosas así fácilmente.\c-\n\n\cfEn fin, putas bolas de fuego, ¿¿¿que funcionan bajo el agua??? Voy a tener que echarle un ojo a la ciencia detrás de esto porque eso no tiene puto sentido y aun así... está ahí.\c-"; SWWM_LORETXT_RAGEKIT = "\cxDesignación:\c-\n\cf Ragekit\c-\n\cxFabricante:\c-\n\cf Akari Labs\c-\n\cxClasificación:\c-\n\cf Esteroides para Robot\c-\n\nEl \cfRagekit\c- es un dispositivo de potenciado experimental para uso de \cfDemolicionistas\c-. Está parcialmente basado en materiales de investigación de la difunta \cfDecade Mechanics\c-, y permite estimular la velocidad, resistencia y habilidad de combate cuerpo a cuerpo de la unidad.\n\nHa de tenerse en cuenta que mientras esté bajo sus efectos, el potenciado de velocidad puede dificultar el movimiento en lugares cerrados al colisionar la unidad contra todas paredes por el camino. Adicionalmente, ya que incrementa la fuerza de impacto, es posible echar abajo puertas y otros obstáculos al esprintar.\n\nDebido a ciertos aspectos inestables del dispositivo, mientras duren sus efectos la unidad puede experimentar cierta incomodidad, y el deseo de gritar. Esto es completamente seguro, y es de notar que la unidad no siente ningún dolor, solo ira.\n\n\cxNotas de Saya:\c-\n\cfOK, a ver, no sé lo que causa los gritos. Es un efecto secundario completamente no intencionado que en serio no sé como puñetas arreglar. Perdón mucho por eso, Demo-chan. Por eso esta cosa está clasificada como \"experimental\", supongo.\c-\n\n\cfMira, sé que te preocupa, pero confía en mí, no pasa nada. Aunque vayas por ahí partiendo crismas mientras sueltas tacos cada medio segundo, para mí, sigues siendo Demo-chan, mi robotita bonita.\c-"; SWWM_LORETXT_RAGEKIT2 = "\cxDesignación:\c-\n\cf Ragekit\c-\n\cxFabricante:\c-\n\cf Akari Labs\c-\n\cxClasificación:\c-\n\cf Esteroides para Robot\c-\n\nEl \cfRagekit\c- es un dispositivo de potenciado experimental para uso de \cfDemolicionistas\c-. Está parcialmente basado en materiales de investigación de la difunta \cfDecade Mechanics\c-, y permite estimular la velocidad, resistencia y habilidad de combate cuerpo a cuerpo de la unidad.\n\nHa de tenerse en cuenta que mientras esté bajo sus efectos, el potenciado de velocidad puede dificultar el movimiento en lugares cerrados al colisionar la unidad contra todas paredes por el camino. Adicionalmente, ya que incrementa la fuerza de impacto, es posible echar abajo puertas y otros obstáculos al esprintar.\n\nDebido a ciertos aspectos inestables del dispositivo, mientras duren sus efectos la unidad puede experimentar cierta incomodidad, y el deseo de gritar. Esto es completamente seguro, y es de notar que la unidad no siente ningún dolor, solo ira.\n\n\cxNotas de Saya:\c-\n\cfOK, a ver, no sé lo que causa los gritos. Es un efecto secundario completamente no intencionado que en serio no sé como puñetas arreglar. Perdón mucho por eso, Demo-chan. Por eso esta cosa está clasificada como \"experimental\", supongo.\c-\n\n\cfMira, sé que te preocupa, pero confía en mí, no pasa nada. Aunque vayas por ahí partiendo crismas mientras sueltas tacos cada medio segundo, para mí, sigues siendo Demo-chan, mi robotita bonita.\c-\n\n\cfAunque... Kirin-kun si que se preocupa mucho por esto. Le he dicho que no hay problema, que no sientes dolor ni nada, pero es que no puede soportar ver el directo cuando usas uno de estos. Pobrecito...\c-\n\n\cfJe... aun así, se queja de todos los tacos, como si él fuera mejor. He oído todo lo que suelta cuando se cabrea con un juego. Los tacos en Anarukonokxhaai suenan ridículamente violentos, y es jodidamente gracioso oír todo eso salir de su boca. Si es que es tan puñeteramente mono...\c-"; SWWM_LORETXT_RAYKHOM = "\cxDesignación:\c-\n\cf Ray-Khom (\"Arma de Plasma\")\c-\n\cxFabricante:\c-\n\cf Eushura Kmonn Jr.\c-\n\cxClasificación:\c-\n\cf Pistola de Bobina de Alta Reacción\c-\n\nDesde su creación por el \cfProfesor Eushura Kmonn Jr.\c-, la \cfRay-Khom\c- se ha quedado con un puesto permanente en el equipamiento de cada soldado \cfXekkian\c-. Fiable, eficiente, necesitando casi ningún mantenimiento al carecer de partes móviles a excepción de su mecanismo de carga. La munición es adicionalmente muy fácil de conseguir, al menos localmente, ya que la exportación lleva consigo severos impuestos.\n\nEl arma es potenciada en su totalidad por un compacto paquete de batería de cuatro celdas de Korberon-Eneiebium, fácil de reemplazar cuando se necesite. La munición viene en cargadores de 20. La munición en sí, proyectiles magnetizados sin casquillo de 40mm, incrustados de una carga de ignición hiperdensa de Dyratin, liberando potentes descargas de plasma ultracaliente, capaz de derretir rápidamente cualquier cosa a excepción de blindaje de Almacero de alta resonancia y causando potentes, urticantes quemaduras en piel Xekkian (o corrosión severa de tejido muscular y óseo en cualquier cosa más débil).\n\n\cfFuego Primario:\c- Fuego continuo, rápido y preciso. Retroceso mínimo dada la operación electromagnética, mayormente silencioso ya que los proyectiles son disparados a una velocidad poco menor que la del sonido. Tus enemigos tienen la garantía de no enterarse de tu ataque hasta ser demasiado tarde.\n\n\cfFuego Secundario:\c- Emplea los emisores de pulsos concentrados a lo largo de los filos del arma, emitiendo una potente descarga eléctrica delante del usuario, aturdiendo temporalmente todo lo que se acerque. Puede causar la muerte de objetivos débiles. Se recomienda usar con moderación, ya que consume rápidamente la batería.\n\n\cfRecarga Primaria:\c- Recarga el arma.\n\n\cfRecarga Secundaria:\c- Cambia la batería. Esta acción solo puede hacerse en cuanto la carga sea lo suficientemente baja, ya que sería un derroche de otro modo.\n\n\cfTécnicas:\c- El fuego secundario incrementa en letalidad al usarse en líquidos conductivos tales como el agua. Simplemente asegúrate de no estar en contacto con ella.\n\n\cfNotas de Saya:\c-\n\cf¡ES JODIDAMENTE ENORME, HOSTIA PUTA!\c-\n\n\cfAsí que según los Xekkian esto es un \"arma ligera\", ¿¿¿en serio??? Menos mal que tus manos se pueden adaptar no se como a la empuñadura de la cosa esta, porque hostia putísima...\c-\n\n\cfEsta mierda es como, no se por donde empezar. Es en serio un puto revientaculos, eso es lo que es. De todo lo que hay en tu arsenal, yo diría que esta es la segunda arma más fuerte que tenemos. Misa aparte la trajo ella misma entonces, y luego hablamos con el viejales de Tach-Engine para poder meterla en la tienda, ya que tiene el trato ese con Kmonn y tal (Estoy segura de que esos dos son algo mas que compañeros de negocios, si sabes a lo que me refiero).\c-\n\n\cfCuando entró por la puerta cargando a hombros con esa cosa supe entonces que tenía que ser nuestra.\c-"; diff --git a/language.version b/language.version index 836317c19..d98e74a49 100644 --- a/language.version +++ b/language.version @@ -1,3 +1,3 @@ [default] -SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r480 \cu(Thu 13 May 23:25:43 CEST 2021)\c-"; -SWWM_SHORTVER="\cw0.9.11b-pre r480 \cu(2021-05-13 23:25:43)\c-"; +SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r481 \cu(Fri 14 May 23:12:09 CEST 2021)\c-"; +SWWM_SHORTVER="\cw0.9.11b-pre r481 \cu(2021-05-14 23:12:09)\c-"; diff --git a/lore/default/quadravol.txt b/lore/default/quadravol.txt index 2abb849d0..1ea881127 100644 --- a/lore/default/quadravol.txt +++ b/lore/default/quadravol.txt @@ -26,7 +26,7 @@ The Ardent Cross was the name of the general's sword which, when imbued with mag \cfSecondary Fire:\c- Scatter shot of lesser fireballs. Increased drift and lower effective range, but very useful against multiple targets. -\cfTertiary Fire:\c- Pumps additional fuel, increasing the strength of your shots, but also their drift, making them less accurate. Excess overcharge will result in a wildly inaccurate misfire, but even this has its uses. +\cfTertiary Fire:\c- Pumps additional fuel, increasing the strength of your shots, but also their drift, making them less accurate. Excess overcharge will result in a wildly inaccurate misfire, but even this has its uses. Forcibly pumping in the middle of primary or secondary fire engages slamfire, allowing you to shoot rapid low-charge bursts. \cfReloading:\c- Each fuel box allows for ten shots (less if boosted), after which it must be reloaded. The weapon firmly locks the box in place until it's fully depleted, however. diff --git a/lore/es/quadravol.txt b/lore/es/quadravol.txt index 19f1bba32..11540d01f 100644 --- a/lore/es/quadravol.txt +++ b/lore/es/quadravol.txt @@ -20,7 +20,7 @@ La Cruz Ardiente era el nombre de la espada del general la cual, al ser imbuida \cfFuego Secundario:\c- Disparo disperso de bolas de fuego menores. Desvío incrementado y rango efectivo menor, pero muy útil contra múltiples objetivos. -\cfFuego Terciario:\c- Bombea combustible adicional, incrementando la potencia de tus disparos, pero también su desvío, haciéndolos menos precisos. La sobrecarga excesiva puede resultar en una imprecisa descarga accidental, pero incluso esto tiene sus usos. +\cfFuego Terciario:\c- Bombea combustible adicional, incrementando la potencia de tus disparos, pero también su desvío, haciéndolos menos precisos. La sobrecarga excesiva puede resultar en una imprecisa descarga accidental, pero incluso esto tiene sus usos. Forzar el bombeo mientras se usa el fuego primario o secundario realizará disparos en cadena rápidos de baja potencia. \cfRecarga:\c- Cada caja de combustible permite diez disparos (menos si potenciados), tras lo cual debe ser recargada. El arma mantiene la caja acoplada firmemente hasta que está completamente vacía, sin embargo. diff --git a/tools/mkfontblock.c b/tools/mkfontblock.c index c101adcd5..19f482eb1 100644 --- a/tools/mkfontblock.c +++ b/tools/mkfontblock.c @@ -2,10 +2,8 @@ mkfontblock.c : Make font pngs for gzdoom, in an ugly cheap way. This code is a mess but I keep it here so people know how much I had to suffer to get this done. - (C)2020 Marisa Kirisame, UnSX Team. - Released under the MIT license: - Copyright (c) 2020 Marisa Kirisame + Copyright (c) 2020-2021 Marisa Kirisame, UnSX Team Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the @@ -113,8 +111,8 @@ int draw_glyph( FT_Bitmap *bmp, uint8_t v, uint32_t px, uint32_t py, uint8_t ox, if ( v == 255 ) { float a = (j+oy-upshift)/(float)h; - if ( gradient == 1 ) rv = lerpg(1.-a); - else if ( gradient == 2 ) rv = lerpg(a); + if ( (gradient&3) == 1 ) rv = lerpg(1.-a); + else if ( (gradient&3) == 2 ) rv = lerpg(a); } for ( i=0; iwidth; i++ ) { @@ -143,7 +141,7 @@ int main( int argc, char **argv ) if ( argc < 4 ) { fprintf(stderr,"usage: mkfontblock " - " [gradient type]\n"); + " [gradient type] [upshift]\n"); return 1; } if ( FT_Init_FreeType(&ftlib) ) @@ -173,9 +171,26 @@ int main( int argc, char **argv ) FT_Render_Glyph(fnt->glyph,FT_RENDER_MODE_NORMAL); int xx = x*w; int yy = y*h-upshift; - // draw drop shadow first - draw_glyph(&fnt->glyph->bitmap,0,xx+1,yy+1,fnt->glyph->bitmap_left,pxsiz-fnt->glyph->bitmap_top); - int valid = draw_glyph(&fnt->glyph->bitmap,255,xx,yy,fnt->glyph->bitmap_left,pxsiz-fnt->glyph->bitmap_top); + int valid; + if ( gradient&4 ) + { + // draw outline first + draw_glyph(&fnt->glyph->bitmap,0,xx,yy,fnt->glyph->bitmap_left,pxsiz-fnt->glyph->bitmap_top); + draw_glyph(&fnt->glyph->bitmap,0,xx+1,yy,fnt->glyph->bitmap_left,pxsiz-fnt->glyph->bitmap_top); + draw_glyph(&fnt->glyph->bitmap,0,xx+2,yy,fnt->glyph->bitmap_left,pxsiz-fnt->glyph->bitmap_top); + draw_glyph(&fnt->glyph->bitmap,0,xx,yy+1,fnt->glyph->bitmap_left,pxsiz-fnt->glyph->bitmap_top); + draw_glyph(&fnt->glyph->bitmap,0,xx+2,yy+1,fnt->glyph->bitmap_left,pxsiz-fnt->glyph->bitmap_top); + draw_glyph(&fnt->glyph->bitmap,0,xx,yy+2,fnt->glyph->bitmap_left,pxsiz-fnt->glyph->bitmap_top); + draw_glyph(&fnt->glyph->bitmap,0,xx+1,yy+2,fnt->glyph->bitmap_left,pxsiz-fnt->glyph->bitmap_top); + draw_glyph(&fnt->glyph->bitmap,0,xx+2,yy+2,fnt->glyph->bitmap_left,pxsiz-fnt->glyph->bitmap_top); + valid = draw_glyph(&fnt->glyph->bitmap,255,xx+1,yy+1,fnt->glyph->bitmap_left,pxsiz-fnt->glyph->bitmap_top); + } + else + { + // draw drop shadow first + draw_glyph(&fnt->glyph->bitmap,0,xx+1,yy+1,fnt->glyph->bitmap_left,pxsiz-fnt->glyph->bitmap_top); + valid = draw_glyph(&fnt->glyph->bitmap,255,xx,yy,fnt->glyph->bitmap_left,pxsiz-fnt->glyph->bitmap_top); + } if ( !validrow ) validrow = valid; } x++; diff --git a/tools/mkfontsingle.c b/tools/mkfontsingle.c index 2e5e8115a..868543d2c 100644 --- a/tools/mkfontsingle.c +++ b/tools/mkfontsingle.c @@ -2,10 +2,8 @@ mkfontsingle.c : Make font pngs for gzdoom, in an ugly cheap way. This code is a mess but I keep it here so people know how much I had to suffer to get this done. - (C)2020 Marisa Kirisame, UnSX Team. - Released under the MIT license: - Copyright (c) 2020 Marisa Kirisame + Copyright (c) 2020-2021 Marisa Kirisame, UnSX Team Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the diff --git a/tools/mklang.c b/tools/mklang.c index 6478b2c57..1e435f4bd 100644 --- a/tools/mklang.c +++ b/tools/mklang.c @@ -1,10 +1,9 @@ /* mklang.c : Generate LANGUAGE files for lore library entries. - This code is a mess lol. - (C)2020 Marisa Kirisame, UnSX Team. - Released under the MIT license: + This code is a mess and it's full of hacks, but that's to be expected + when it's all really just for personal use. - Copyright (c) 2020 Marisa Kirisame + Copyright (c) 2020-2021 Marisa Kirisame, UnSX Team Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the @@ -25,20 +24,20 @@ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -#define _POSIX_C_SOURCE 200809L +#define _XOPEN_SOURCE 700 #include #include #include #include #include +#include char *lang = 0; FILE *lf = 0; char *txt = 0; long txtlen = 0; -char entname[256]; -void processentry() +void processentry( char *entname ) { int gottag = 0; long txtpos = 0; @@ -130,12 +129,12 @@ processtxt: goto gettag; } -void readentry( const char *path ) +void readentry( char *mpath, char *entpath, char *entname ) { - FILE *f = fopen(path,"rb"); + FILE *f = fopen(mpath,"rb"); if ( !f ) { - fprintf(stderr," \033[31mcannot open file \033[1m'%s'\033[22m: \033[1m%s\033[0m\n",path,strerror(errno)); + fprintf(stderr," \033[31mcannot open file \033[1m'%s'\033[22m: \033[1m%s\033[0m\n",entpath,strerror(errno)); return; } fseek(f,0,SEEK_END); @@ -146,10 +145,7 @@ void readentry( const char *path ) memset(txt,0,txtlen+1); fread(txt,1,txtlen,f); fclose(f); - // copy over path, set to basename and strip extension - char *slash = strrchr(path,'/'); - if ( slash ) strncpy(entname,slash+1,256); - else strncpy(entname,path,256); + // strip extension from entname and set to allcaps char *ext = strchr(entname,'.'); if ( ext ) *ext = '\0'; printf(" \033[1;32m%s\033[22m:\033[0m",entname); @@ -161,7 +157,7 @@ void readentry( const char *path ) *c -= 0x20; c++; } - processentry(); + processentry(entname); free(txt); txt = 0; } @@ -177,28 +173,32 @@ int invalphasort( const struct dirent **a, const struct dirent **b ) return strcoll((*b)->d_name,(*a)->d_name); } -void loopdir( const char *dname ) +void loopdir( char *mpath, char *appendto, int ofs, int lim ) { - char fpath[256]; - int nbase = snprintf(fpath,256,"%s/",dname); struct dirent **e; - int ne = scandir(dname,&e,txtonly,invalphasort); + int ne = scandir(mpath,&e,txtonly,invalphasort); if ( ne == -1 ) { - fprintf(stderr,"\033[31mcannot scan directory \033[1m'%s'\033[22m: \033[1m%s\033[0m\n",dname,strerror(errno)); + fprintf(stderr,"\033[31mcannot scan directory \033[1m'%s'\033[22m: \033[1m%s\033[0m\n",appendto,strerror(errno)); return; } while ( ne-- ) { - snprintf(fpath+nbase,256-nbase,"%s",e[ne]->d_name); - readentry(fpath); + if ( snprintf(appendto+ofs,lim-ofs,"/%s",e[ne]->d_name) >= lim-ofs ) + { + fprintf(stderr,"\033[31mpath length exceeded (over %u bytes).\033[0m\n",PATH_MAX); + free(e[ne]); + continue; + } + readentry(mpath,appendto,appendto+ofs+1); free(e[ne]); } free(e); } -int main( void ) +int main( int argc, char **argv ) { + (void)argc; // shush, compiler const char langs[][16] = { "default", @@ -212,31 +212,39 @@ int main( void ) }; const char langfiles[][32] = { - "../language.def_lore", - "../language.es_lore", -/* "../language.jp_lore", - "../language.ru_lore", - "../language.fr_lore", - "../language.it_lore", - "../language.de_lore", - "../language.pl_lore",*/ + "language.def_lore", + "language.es_lore", +/* "language.jp_lore", + "language.ru_lore", + "language.fr_lore", + "language.it_lore", + "language.de_lore", + "language.pl_lore",*/ }; int nlangs = sizeof(langs)/16; // hacky, but works + char mpath[PATH_MAX+1]; + if ( !realpath(argv[0],mpath) ) + { + fprintf(stderr,"\033[31merror getting full path: %s\033[0m\n",strerror(errno)); + return 1; + } + char* appendto = strstr(mpath,"/swwmgz_m/"); + if ( !appendto ) + { + fprintf(stderr,"\033[31mbase swwmgz_m path could not be detected.\033[0m\n"); + return 1; + } + appendto += 10; + int lim = PATH_MAX-(appendto-mpath); for ( int i=0; i= lim ) { - fclose(ign); - printf("\033[33mskipping language \033[1m'%s'\033[0m\n",langs[i]); + fprintf(stderr,"\033[31mpath length exceeded (over %u bytes).\033[0m\n",PATH_MAX); continue; } printf("\033[33mprocessing language \033[1m'%s'\033[0m\n",langs[i]); - lf = fopen(langfiles[i],"wb"); + lf = fopen(mpath,"wb"); if ( !lf ) { fprintf(stderr,"\033[31mcannot open \033[1m'%s'\033[22m for writing: \033[1m%s\033[0m\n",langfiles[i],strerror(errno)); @@ -244,9 +252,14 @@ int main( void ) } fprintf(lf,"// this file was generated by mklang, do not edit directly\n"); fprintf(lf,"[%s]\n",langs[i]); - char langpath[256]; - snprintf(langpath,256,"../lore/%s",langs[i]); - loopdir(langpath); + int nb = snprintf(appendto,lim,"lore/%s",langs[i]); + if ( nb >= lim ) + { + fprintf(stderr,"\033[31mpath length exceeded (over %u bytes).\033[0m\n",PATH_MAX); + fclose(lf); + continue; + } + loopdir(mpath,appendto,nb,lim); fclose(lf); } return 0; diff --git a/tools/mkpk3.sh b/tools/mkpk3.sh index bda3b7c72..59e326830 100755 --- a/tools/mkpk3.sh +++ b/tools/mkpk3.sh @@ -1,4 +1,5 @@ #!/bin/sh -pushd .. +WORKDIR=$(readlink -f $0 | sed 's/\(swwmgz_m\)\(.*\)/\1/') +pushd "$WORKDIR" 7z a -tzip -mx=9 -x@tools/excl.lst -up0q0r2x2y2z1w2 ../swwmgz_m.pk3 . popd diff --git a/tools/mkpk7.sh b/tools/mkpk7.sh index c95981622..fe5889304 100755 --- a/tools/mkpk7.sh +++ b/tools/mkpk7.sh @@ -1,4 +1,5 @@ #!/bin/sh -pushd .. +WORKDIR=$(readlink -f $0 | sed 's/\(swwmgz_m\)\(.*\)/\1/') +pushd "$WORKDIR" 7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=off -x@tools/excl.lst -up0q0r2x2y2z1w2 ../swwmgz_m.pk7 . popd diff --git a/tools/mkstartup.c b/tools/mkstartup.c index 71665e942..fb92097f9 100644 --- a/tools/mkstartup.c +++ b/tools/mkstartup.c @@ -1,10 +1,11 @@ /* mkstartup.c : Makes a Hexen startup screen from provided images. Requires all the files to be in the same folder it's executed in. - (C)2020 Marisa Kirisame, UnSX Team. - Released under the MIT license: + I didn't bother adding any checks so if this thing catches on fire it's + your own damn fault. Add them yourself if you want, this tool was made + for personal use anyway. - Copyright (c) 2020 Marisa Kirisame + Copyright (c) 2020-2021 Marisa Kirisame, UnSX Team Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the diff --git a/zscript.txt b/zscript.txt index 95806acc8..29e5d42a9 100644 --- a/zscript.txt +++ b/zscript.txt @@ -3,7 +3,7 @@ version "4.5" /* SWWM GZ Main Codebase (C)2020-2021 Marisa Kirisame, UnSX Team - This copyright and the attached LICENSE.zscript file apply to all files + This copyright and the attached LICENSE.code file apply to all files included from here, with the exception of the Gutamatics library */