From 98478ebbd24091422115bc9754d0d3f89dc3a90d Mon Sep 17 00:00:00 2001 From: szapp Date: Sun, 5 May 2024 16:22:39 +0200 Subject: [PATCH] Update files to align with new patch-template --- .gitattributes | 52 ++ .github/FUNDING.yml | 1 + .github/dependabot.yml | 8 + .github/release.yml | 8 + .github/workflows/build.yml | 54 ++ .github/workflows/scripts.yml | 27 + .github/workflows/validation.yml | 29 + .validator.yml | 8 + LICENSE | 268 +++++- Ninja/Stamina/Content/localization.d | 2 +- .../System/MENU_OPT_CONTROLS_STAMINA.D | 12 +- README.md | 159 +++- Stamina.vm | 51 +- init.bat | 777 ------------------ tool.cfg | 3 + 15 files changed, 618 insertions(+), 841 deletions(-) create mode 100644 .gitattributes create mode 100644 .github/FUNDING.yml create mode 100644 .github/dependabot.yml create mode 100644 .github/release.yml create mode 100644 .github/workflows/build.yml create mode 100644 .github/workflows/scripts.yml create mode 100644 .github/workflows/validation.yml create mode 100644 .validator.yml delete mode 100644 init.bat diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..614bd63 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,52 @@ +# Checkout line endings based on OS (do not force crlf where not necessary) +* text=auto + +# Checkout Windows-style line endings and ensure correct encoding +# Encoding is not localization but fixed zSTRING::Upper code page handling! +# See https://forum.worldofplayers.de/forum/threads/1537187/page3 +# and https://forum.worldofplayers.de/forum/threads/759496 +*.[dD] text working-tree-encoding=CP1252 eol=crlf +*.[cC][sS][lL] text working-tree-encoding=CP1252 linguist-detectable=false + +# Exclude (semi-) binary resources from linguist stats + +# Output units +*.[bB][iI][nN] binary linguist-detectable=false + +# Animation files +*.[aA][sS][cC] text linguist-detectable=false +*.[mM][dD][sS] text linguist-detectable=false +*.[mM][aA][nN] binary linguist-detectable=false +*.[mM][dD][hH] binary linguist-detectable=false +*.[mM][dD][lL] binary linguist-detectable=false +*.[mM][dD][mM] binary linguist-detectable=false +*.[mM][mM][bB] binary linguist-detectable=false +*.[mM][sS][bB] binary linguist-detectable=false +*.[sS][sS][cC] binary linguist-detectable=false + +# Graphic files +*.[tT][gG][aA] binary linguist-detectable=false +*.[tT][eE][xX] binary linguist-detectable=false +*.[fF][nN][tT] binary linguist-detectable=false + +# Mesh files (ZEN might be ASCII or binary) +*.3[dD][sS] binary linguist-detectable=false +*.[mM][rR][mM] binary linguist-detectable=false +*.[mM][sS][hH] binary linguist-detectable=false +*.[zZ][eE][nN] text=auto linguist-detectable=false + +# Music files +*.[dD][lL][sS] binary linguist-detectable=false +*.[sS][tT][yY] binary linguist-detectable=false +*.[sS][gG][tT] binary linguist-detectable=false + +# Sound files +*.[wW][aA][vV] binary linguist-detectable=false +*.[oO][gG][gG] binary linguist-detectable=false +*.[mM][pP]3 binary linguist-detectable=false + +# Video files +*.[bB][iI][kK] binary linguist-detectable=false + +# VDF in case committed (mixed binary and text) +*.[vV][dD][fF] binary linguist-detectable=false diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..aa3d62b --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1 @@ +ko_fi: szapp diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..d3bfdc1 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,8 @@ +# This file is keeps the GitHub Actions up-to-date +# For more information, visit https://docs.github.com/en/code-security/dependabot +version: 2 +updates: +- package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" diff --git a/.github/release.yml b/.github/release.yml new file mode 100644 index 0000000..58fb532 --- /dev/null +++ b/.github/release.yml @@ -0,0 +1,8 @@ +# This file excludes bot authors from the automatically generated release notes +# For more information, visit https://docs.github.com/en/repositories/releasing-projects-on-github/automatically-generated-release-notes#configuring-automatically-generated-release-notes + +changelog: + exclude: + authors: + - dependabot + - github-actions diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..4a028b6 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,54 @@ +name: build + +on: + push: + tags: + - "[Vv]?[0-9]+.[0-9]+*" + release: + types: [published] + workflow_dispatch: + +permissions: + contents: write + +jobs: + vdfsbuilder: + name: Create VDF + runs-on: ubuntu-latest + steps: + - name: Get patch name from repository name + run: | + echo "PATCH_NAME=${GITHUB_REPOSITORY#*/}" >> $GITHUB_ENV + echo "VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV + + - name: Get short SHA + if: (!startsWith(github.ref, 'refs/tags/')) + run: echo "VERSION=${GITHUB_SHA::7}" >> $GITHUB_ENV + + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Build VDF + uses: kirides/vdfsbuilder@aaf901f0c98245af54102a1946d8be0e2e17ba36 + with: + in: ${{ env.PATCH_NAME }}.vm + + - name: Create release with assests (if tag pushed) + if: startsWith(github.ref, 'refs/tags/') && github.event_name != 'release' + run: gh release create ${{ env.VERSION }} --generate-notes "${{ env.PATCH_NAME }}.vdf" || exit 0 + env: + GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} + + - name: Upload release assests (if release published) + if: github.event_name == 'release' + run: gh release upload ${{ env.VERSION }} "${{ env.PATCH_NAME }}.vdf" || exit 0 + env: + GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} + + - name: Upload artifacts + if: github.event_name == 'workflow_dispatch' + uses: actions/upload-artifact@v4 + with: + name: ${{ env.PATCH_NAME }}-${{ env.VERSION }} + path: "${{ env.PATCH_NAME }}.vdf" + overwrite: true diff --git a/.github/workflows/scripts.yml b/.github/workflows/scripts.yml new file mode 100644 index 0000000..53be788 --- /dev/null +++ b/.github/workflows/scripts.yml @@ -0,0 +1,27 @@ +name: scripts + +# Trigger workflow on push events with changes in SRC or D files +on: + push: + paths: + - "Ninja/**/*.src" + - "Ninja/**/*.d" + +# These permissions are necessary for creating the check runs +permissions: + checks: write + contents: read + +# The checkout action needs to be run first +jobs: + parsiphae: + name: Run Parsiphae + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Check scripts + uses: szapp/parsiphae-action@v1 + with: + # Adjust these if changing the directory in the repository + # For more information on the configuration, visit https://github.com/szapp/parsiphae-action/#configuration + file: Ninja/*/*.src diff --git a/.github/workflows/validation.yml b/.github/workflows/validation.yml new file mode 100644 index 0000000..c7d19e4 --- /dev/null +++ b/.github/workflows/validation.yml @@ -0,0 +1,29 @@ +name: validation + +# Trigger workflow on push events with changes in SRC or D files +on: + push: + paths: + - "Ninja/**/*.src" + - "Ninja/**/*.d" + - "_work/Data/**/*" + +# These permissions are necessary for creating the check runs +permissions: + checks: write + contents: read + +# The checkout action needs to be run first +jobs: + patch-validator: + name: Run patch validator + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Check for validity + uses: szapp/patch-validator@v1 + with: + # Adjust these if changing the patch name or its root directory in the repository + # For more information on the configuration, visit https://github.com/szapp/patch-validator/#configuration + patchName: + rootPath: diff --git a/.validator.yml b/.validator.yml new file mode 100644 index 0000000..2e34e4b --- /dev/null +++ b/.validator.yml @@ -0,0 +1,8 @@ +# This file is required for the patch-validator to work and may contain advanced configuration options +# For more information, visit https://github.com/szapp/patch-validator/#configuration + +prefix: + # Re-definitions of the breath scripts: https://forum.worldofplayers.de/forum/threads/1558616 + - Breath +ignore-declaration: +ignore-resource: diff --git a/LICENSE b/LICENSE index dc76a5d..02e85fc 100644 --- a/LICENSE +++ b/LICENSE @@ -1,21 +1,247 @@ -MIT License - -Copyright (c) 2018-2019 mud-freak (@szapp) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. + + Lizenz für die nichtkommerzielle Nutzung von Modifikationen + (GothicMOD Lizenz) + + Version 1.0 - April 2004 + Copyright (c) 2004 Pluto 13 GmbH (Piranha Bytes) + + +Präambel + +Ziel der Lizenzierung eines Werkes unter der GothicMOD Lizenz ist es, die +Verwendung von Inhalten zum Zwecke der unentgeltlichen und nichtkommerziellen +Nutzung von Modifikationen zu ermöglichen. Die Lizenz richtet sich an +diejenigen, die ihre urheberrechtlich geschützten Leistungen zum Zwecke der +unentgeltlichen und nichtkommerziellen Nutzung von Modifikationen zur Verfügung +stellen wollen, ohne dass für einzelne Nutzungen oder Änderungen gesondert +Rechte eingeholt werden müssen. + +Durch die GothicMOD Lizenz werden dem Lizenznehmer die Nutzungsrechte für alle +bekannten Nutzungsarten eingeräumt und auch die Bearbeitung des Werkes in jeder +beliebigen Form gestattet. Die ideellen Interessen der Urheber am Werk werden +von der Lizenz dabei beachtet, denn es ist eines der Ziele der Lizenz, die +kreativen Leistungen der Urheber und anderen Leistungsschutzberechtigten in +angemessener Weise anzuerkennen und ihre geistigen Belange zu schützen. Der +Urheber soll mit seinem Werk in Verbindung gebracht werden, indem sein Name +genannt wird oder - für den Fall, dass das Werk bearbeitet wurde - ein +angemessener Hinweis auf ihn erfolgt. + +Die GothicMOD Lizenz schützt die Lizenzgeber davor, dass Lizenznehmer die +Nutzung des Werkes - auch in bearbeiteter Form - nachträglich beschränken +können. Dazu dient der "Copyleft"-Effekt, der gewährleistet, dass ein Werk, +welches dieser Lizenz unterstellt wurde, sowie alle darauf beruhenden +Bearbeitungen nur gemäß den Bestimmungen dieser Lizenz genutzt werden dürfen. + + +1. Abschluss der Lizenz + +(a) Dieser Lizenztext stellt ein Angebot auf Abschluss eines Lizenzvertrages + unter den nachfolgenden Bedingungen dar. Das Angebot richtet sich an + jedermann. Der Lizenzvertrag kommt durch die Ausübung der in Ziffer 2 und 3 + genannten Rechte zustande, insbesondere durch die Vervielfältigung oder + Verbreitung des Werkes. Der Erwerber dieser Rechte wird im Folgenden als + Lizenznehmer bezeichnet. + +(b) Für eine bloße Benutzung des Werkes muss dieser Lizenzvertrag nicht + abgeschlossen werden. Dies gilt auch für Befugnisse zur Nutzung des Werkes, + die sich aus einer gesetzlichen Beschränkung des Urheberrechts ergeben, + etwa für das Anfertigen einer Sicherungskopie oder für die Weitergabe eines + rechtmäßig erworbenen Vervielfältigungsstückes. + +2. Nutzungsrechte + +(a) Der Lizenznehmer erwirbt mit Abschluss der Lizenz das zeitlich und räumlich + unbeschränkte Recht, das unveränderte Werk in unentgeltlicher und + nichtkommerzieller Form zu nutzen. Dies beinhaltet das Recht, das Werk in + digitaler und analoger Form, online und offline, körperlich und + unkörperlich zu verwenden. Die Nutzung zu anderen Zwecken, insbesondere zur + entgeltlichen Verwendung oder Weitergabe, wird durch diese Lizenz nicht + gestattet. Die Nutzungserlaubnis erfolgt lizenzgebührenfrei. + +(b) Zur Nutzung wird insbesondere das Recht eingeräumt, das Werk zu + vervielfältigen, zu verbreiten, zum Download bereitzuhalten oder in anderer + Weise öffentlich zugänglich zu machen, vorzutragen, aufzuführen oder in + anderer Form öffentlich wiederzugeben. + +(c) Wer das Werk nutzt, darf von anderen Lizenznehmern keine Lizenzgebühren + oder sonstige Forderungen für das Werk verlangen. + +(d) Die durch diese Lizenz erworbenen Nutzungsrechte dürfen nicht an Dritte + weiterübertragen werden. Dritte können die Nutzungsrechte durch den + Abschluss dieser Lizenz nur direkt von den Urhebern oder sonstigen Inhabern + der ausschließlichen Nutzungsrechte erwerben. Dafür genügt es, dass Dritte + das Werk mit dieser Lizenz von einer beliebigen Person erhalten und gemäß + Ziffer 1 den Lizenzvertrag abschließen. + +(e) Der Lizenzgeber räumt mit Veröffentlichung seines Werks den Firmen Pluto 13 + GmbH, Essen, Deutschland und JoWood Productions AG, Österreich das + gemeinsame und zeitlich und räumlich unbeschränkte Recht ein, die Rechte an + seinem Werk unter Nennung seines Namens einzeln oder gemeinsam mit anderen + Werken zu nutzen, dies abweichend von Ziffer 2 (a) auch in entgeltlicher + Form. Pluto 13 GmbH und JoWood werden für die Veröffentlichung jedoch keine + Lizenzgebühren für das Werk verlangen, außer dies wird mit dem jeweiligen + Lizenzgeber im Einzelnen vereinbart. Die Einräumung eines zu Ziffer 2 (e) + ähnlichen Rechts an andere Parteien als die beiden genannten ist + ausgeschlossen. + +3. Bearbeitungsrecht + +(a) Der Lizenznehmer hat das Recht, das Werk zu bearbeiten und das bearbeitete + Werk nach Maßgabe der Ziffer 2 zu nutzen. Dies umfasst die Befugnis das + Werk zu kürzen, neue Bestandteile hinzuzufügen, Teile des Werkes + auszutauschen oder es auf andere Weise zu verändern. Das Werk darf in einen + anderen Kontext gestellt und seine Aussagen inhaltlich verändert werden. + +(b) Veränderungen dürfen die geistigen oder persönlichen Interessen der Urheber + nicht beeinträchtigen. Hierbei ist zu berücksichtigen, dass durch die + Lizenzierung unter dieser Lizenz auch substantielle Veränderungen des + Werkes bewusst in Kauf genommen werden, da die Freiheit zur Veränderung des + Werkes eines der Hauptziele dieser Lizenz ist. + +(c) Bei einer Bearbeitung des Werkes muss sein Titel verändert werden. Der + Titel des Werkes darf nicht verändert werden, wenn das Werk ansonsten + inhaltlich unverändert genutzt wird. + +(d) Es wird empfohlen, für jede Bearbeitung des Werkes einen Urhebervermerk zu + den bereits bestehenden Vermerken hinzuzufügen. + +4. Freigabe von Bearbeitungen und verwandten Schutzrechten ("Copyleft") + +(a) Wer bei der Bearbeitung des Werkes ein Urheberrecht erwirbt, muss dieses + Recht den Bestimmungen dieser Lizenz unterstellen, wenn er das bearbeitete + Werk verbreitet, zum Download bereithält oder in anderer Weise öffentlich + zugänglich macht, vorträgt, aufführt oder in anderer Form öffentlich + wiedergibt. + +(b) Eine Bearbeitung in diesem Sinne liegt nicht vor, wenn das unveränderte + Werk + - mit einem anderen selbständigen Werk verbunden wird. Dies gilt auch dann, + wenn die verbundenen Werke als ein Gesamtwerk genutzt werden; + - in eine Datenbank oder ein sonstiges Sammelwerk eingefügt wird; + - eine Datenbank oder ein sonstiges Sammelwerk ist und weitere Elemente + eingefügt werden. + In diesen Fällen muss ein deutlicher Hinweis darauf erfolgen, welche Teile + des Gesamtwerkes oder Sammelwerkes dieser Lizenz unterstehen. + +(c) Ein selbständiges Werk ist ein Werk, das alleine in sinnvoller Weise + genutzt werden kann oder das von der Verkehrsanschauung als selbständiges + Werk angesehen wird. + +(d) Wer bei der Nutzung oder Bearbeitung des Werkes ein verwandtes Schutzrecht + erwirbt, zum Beispiel ein Datenbankherstellerrecht oder ein Recht an einer + Interpretation des Werkes, muss dieses Recht den Bestimmungen dieser Lizenz + unterstellen, wenn er das Werk verbreitet, zum Download bereithält oder in + anderer Weise öffentlich zugänglich macht, vorträgt, aufführt oder in + anderer Form öffentlich wiedergibt und das verwandte Schutzrecht für diese + Nutzungen erforderlich ist. + +5. Namensnennung + +(a) Wird das Werk in unveränderter Form verbreitet, zum Download bereitgehalten + oder in anderer Weise öffentlich zugänglich gemacht, vorgetragen, + aufgeführt oder in anderer Form öffentlich wiedergegeben, müssen + Namensnennungen von Urhebern und Interpreten in der vorgefundenen Art und + Weise übernommen werden. Die Namensnennung hat dann in einer angemessenen + und für die jeweilige Nutzungsart üblichen Form zu erfolgen. + +(b) Wird das Werk in inhaltlich veränderter Form verbreitet, zum Download + bereitgehalten oder in anderer Weise öffentlich zugänglich gemacht, + vorgetragen, aufgeführt oder in anderer Form öffentlich wiedergegeben, darf + keine Namensnennung von Urhebern oder Interpreten ohne deren ausdrückliche + Zustimmung erfolgen. Übersetzungen gelten als inhaltliche Veränderung in + diesem Sinne. Bei bloß formalen Änderungen muss die Namensnennung + entsprechend der Nutzung in unveränderter Form erfolgen. + Rechtschreibkorrekturen, Formatierungen oder Digitalisierungen sind im + Regelfall als bloß formale Änderungen anzusehen. + +(c) Dürfen Urheber oder Interpreten wegen einer inhaltlichen Veränderung des + Werkes nicht genannt werden, muss bei jeder Nutzung des Werkes ein Hinweis + auf die Urheber oder Interpreten des ursprünglichen Werkes in angemessener + Form erfolgen. Ein Hinweis in angemessener Form ist jedenfalls dann + gegeben, wenn in die Namensnennung mit dem Zusatz "basierend auf einem Werk + von" erfolgt. + +(d) Die vorstehenden Ausführungen zur Namensnennung gelten entsprechend für die + Inhaber der ausschließlichen Nutzungsrechte, sofern diese im Zusammenhang + mit dem Werk genannt werden. + +6. Sonstige Verpflichtungen + +(a) Bei einer Nutzung in körperlicher Form muss eine Kopie dieser Lizenz + beigefügt oder eine Internetadresse angegeben werden, bei der der + Lizenztext dauerhaft abrufbar ist. Bei unkörperlicher Wiedergabe des Werkes + darf eine Wiedergabe der Lizenz unterbleiben, wenn dies untunlich ist. Dies + kann der Fall sein bei Vorträgen und Aufführungen, sowie Fernseh- und + Rundfunksendungen. + +(b) Hinweise auf die Geltung dieser Lizenz und Urheberrechtsvermerke dürfen + nicht verändert oder gelöscht werden. Wo ein solcher Hinweis nach der + konkreten Art der Nutzung unzumutbar ist, kann er unterbleiben, so etwa in + Rundfunksendungen, die nur terrestrisch, via Kabel oder Satellit übertragen + werden oder bei der Nutzung des Werkes in der Fernsehwerbung. + +(c) Die Nutzung des Werkes darf nicht von der Erfüllung von Verpflichtungen + abhängig gemacht werden, die nicht in dieser Lizenz genannt sind. + +(d) Wer im Zusammenhang mit der Nutzung des Werkes sonstige Schutzrechte + erwirbt, insbesondere Patente, Marken, Geschmacksmuster und + Gebrauchsmuster, darf mittels dieser Schutzrechte keine zusätzlichen + Verpflichtungen für die Nutzung des Werkes aufstellen. So ist es etwa nicht + zulässig, für eine fortentwickelte Version des Werkes ein Patent anzumelden + und für die Nutzung des fortentwickelten Werkes mittels der Patentlizenz + Bedingungen aufzustellen, die über die Bedingungen dieser Lizenz + hinausgehen. + +7. Beendigung der Rechte bei Zuwiderhandlung + +(a) Jede Verletzung der Verpflichtungen aus dieser Lizenz beendet automatisch + die Nutzungsrechte des Zuwiderhandelnden. + +(b) Die Nutzungsrechte Dritter, die das Werk oder Rechte an dem Werk von dem + Zuwiderhandelnden erworben haben, bestehen weiter. + +8. Haftung und Gewährleistung + +(a) Die Haftung der Lizenzgeber ist auf das arglistige Verschweigen von + Rechtsmängeln beschränkt. + +(b) Dieser Haftungshinweis bezieht sich ausschließlich auf die Einräumung von + Rechten durch diese Lizenz. Die Haftung und Gewährleistung für andere + Leistungen, etwa die Verbreitung von Werkstücken, richtet sich nach den + gesetzlichen Bestimmungen oder individuellen Vereinbarungen. + +9. Neue Versionen dieser Lizenz + +Die Pluto 13 GmbH kann diese Lizenz aktualisieren, soweit eine Veränderung der +rechtlichen oder tatsächlichen Umstände dies erfordert. Der Lizenzgeber +überlässt der Pluto13 GmbH die Bestimmung des Inhalts künftiger Versionen +dieser Lizenz. Die Bestimmung erfolgt durch öffentliche Bekanntgabe des +Lizenztextes. Künftige Versionen müssen den Grundprinzipien dieser Lizenz +entsprechen. Soweit ein Werk nicht ausdrücklich einer bestimmten Version dieser +Lizenz unterstellt ist, gilt die jeweils aktuellste Version. + +Anhang: Wie unterstelle ich ein Werk der GothicMOD Lizenz? + +Um ein Werk nach den Bestimmungen dieser Lizenz zur freien Nutzung durch +jedermann zur Verfügung zu stellen, muss dem Werk der folgende Hinweis in gut +wahrnehmbarer Weise beigefügt werden. Es wird darüber hinaus empfohlen, einen +Urhebervermerk aufzunehmen, der das Jahr der ersten Veröffentlichung sowie den +Inhaber der ausschließlichen Nutzungsrechte (Name oder allgemein verständliche +Abkürzung) enthält. + + Copyright (c) 2020-2024 Sören Zapp. + Dieses Werk kann durch jedermann in nichtkommerzieller Form + gemäß den Bestimmungen der GothicMOD Lizenz genutzt werden. + Die Lizenzbedingungen können unter http://www.gothic2.de/mod + oder unter http://www.piranha-bytes.com/mod abgerufen werden. + + +GOTHIC MOD DEVELOPMENT-KIT +--------------------------- +2001 + +Nutzungsbedingungen +--------------------------------- +- Die Nutzung des MOD PLAYER-KIT und des MOD DEVELOPMENT-KIT ist ausschliesslich für nichtkommerzielle Zwecke gestattet. +- Alle im PLAYER-KIT und DEVELOPMENT-KIT enthaltenen Programme und Daten, sowie alle damit erstellten, + bzw. modifizierten Daten dürfen nicht kommerziell genutzt werden. diff --git a/Ninja/Stamina/Content/localization.d b/Ninja/Stamina/Content/localization.d index fd2b85e..2dd01c7 100644 --- a/Ninja/Stamina/Content/localization.d +++ b/Ninja/Stamina/Content/localization.d @@ -11,7 +11,7 @@ func int Patch_Stamina_GuessLocalization() { return 1; } else if (Hlp_StrCmp(panName, "Patelnia")) { // PL return 2; - } else if (Hlp_StrCmp(panName, "")) { // RU + } else if (Hlp_StrCmp(panName, "Ñêîâîðîäà")) { // RU return 3; }; }; diff --git a/Ninja/Stamina/System/MENU_OPT_CONTROLS_STAMINA.D b/Ninja/Stamina/System/MENU_OPT_CONTROLS_STAMINA.D index 11393b1..e91bda1 100644 --- a/Ninja/Stamina/System/MENU_OPT_CONTROLS_STAMINA.D +++ b/Ninja/Stamina/System/MENU_OPT_CONTROLS_STAMINA.D @@ -23,7 +23,7 @@ INSTANCE MENUITEM_INP_EN_PATCH_STAMINA(C_MENU_ITEM_DEF) INSTANCE MENUITEM_KEY_DE_PATCH_STAMINA(C_MENU_ITEM_DEF) { text[0] = "Sprinten"; - text[1] = "Taste ENTF zum Lschen und RETURN zum definieren"; + text[1] = "Taste ENTF zum Löschen und RETURN zum definieren"; onSelAction[0] = /*SEL_ACTION_EXECCOMMANDS*/ 7; onSelAction_S[0] = "RUN MENUITEM_INP_DE_PATCH_STAMINA"; @@ -32,7 +32,7 @@ INSTANCE MENUITEM_KEY_DE_PATCH_STAMINA(C_MENU_ITEM_DEF) INSTANCE MENUITEM_INP_DE_PATCH_STAMINA(C_MENU_ITEM_DEF) { type = /*MENU_ITEM_INPUT*/ 3; - text[1] = "Gewnschte Taste bettigen."; + text[1] = "Gewünschte Taste betätigen."; onChgSetOption = "keyIntSprint"; onChgSetOptionSection = "KEYS"; @@ -53,7 +53,7 @@ INSTANCE MENUITEM_KEY_PL_PATCH_STAMINA(C_MENU_ITEM_DEF) INSTANCE MENUITEM_INP_PL_PATCH_STAMINA(C_MENU_ITEM_DEF) { type = /*MENU_ITEM_INPUT*/ 3; - text[1] = "Nacinij dany klawisz."; + text[1] = "Naci¶nij ¿±dany klawisz."; onChgSetOption = "keyIntSprint"; onChgSetOptionSection = "KEYS"; @@ -64,8 +64,8 @@ INSTANCE MENUITEM_INP_PL_PATCH_STAMINA(C_MENU_ITEM_DEF) // Russian INSTANCE MENUITEM_KEY_RU_PATCH_STAMINA(C_MENU_ITEM_DEF) { - text[0] = ""; - text[1] = " DEL, ENTER, "; + text[0] = "ñïðèíò"; + text[1] = "íàæìèòå DEL, ÷òîáû î÷èñòèòü ñëîò èëè ENTER, ÷òîáû ïåðåîïðåäåëèòü"; onSelAction[0] = /*SEL_ACTION_EXECCOMMANDS*/ 7; onSelAction_S[0] = "RUN MENUITEM_INP_RU_PATCH_STAMINA"; @@ -74,7 +74,7 @@ INSTANCE MENUITEM_KEY_RU_PATCH_STAMINA(C_MENU_ITEM_DEF) INSTANCE MENUITEM_INP_RU_PATCH_STAMINA(C_MENU_ITEM_DEF) { type = /*MENU_ITEM_INPUT*/ 3; - text[1] = ", ."; + text[1] = "Ïîæàëóéñòà, íàæìèòå êëàâèøó äëÿ ýòîãî äåéñòâèÿ."; onChgSetOption = "keyIntSprint"; onChgSetOptionSection = "KEYS"; diff --git a/README.md b/README.md index 7b5d2c0..8152496 100644 --- a/README.md +++ b/README.md @@ -1,35 +1,154 @@ - -![Ninja](https://user-images.githubusercontent.com/20203034/42415261-92bed2ae-8248-11e8-875c-5f7408588af8.png) - Patch Template +

-You can find the original repository of the patch template at -[szapp/NinjaPatchTemplate](https://github.com/szapp/NinjaPatchTemplate). +
Disable sprinting (e.g. if another mod already supplies it) and to disable stamina cost for weapon blocking (click to expand) +

+ +```ini +[STAMINA] +sprintTotalSec=0 +supplySprintAni=1 +fistFirstHitCost=10 +fistComboCost=7 +fistParadeCost=0 +1hFirstHitCost=18 +1hComboCost=10 +1hParadeCost=0 +2hFirstHitCost=25 +2hComboCost=15 +2hParadeCost=0 +``` + +

+
+ +## Notes + +- The patch is based on a simple endurance system that was introduced here: https://forum.worldofplayers.de/forum/thread/1558616 +- For more information, visit https://forum.worldofplayers.de/forum/threads/1558617 + +## Installation + +1. Download the latest release of `Stamina.vdf` from the [releases page](https://github.com/szapp/Stamina/releases/latest). + +2. Copy the file `Stamina.vdf` to `[Gothic]\Data\`. To uninstall, remove the file again. + +The patch is also available on +- [World of Gothic](https://www.worldofgothic.de/dl/download_639.htm) | [Forum thread](https://forum.worldofplayers.de/forum/threads/1558617) +- [Spine Mod-Manager](https://clockwork-origins.com/spine/) +- [Steam Workshop Gothic 1](https://steamcommunity.com/sharedfiles/filedetails/?id=2788242828) +- [Steam Workshop Gothic 2](https://steamcommunity.com/sharedfiles/filedetails/?id=2788242942) + +### Requirements + + + +
GothicGothic SequelGothic II (Classic)Gothic II: NotR
Version 1.08k_modVersion 1.12fReport version 1.30.0.0Report version 2.6.0.0
Ninja 2 (or higher)
+ + diff --git a/Stamina.vm b/Stamina.vm index a0a7d4e..6fd0598 100644 --- a/Stamina.vm +++ b/Stamina.vm @@ -1,32 +1,51 @@ [BEGINVDF] -Comment=This patch extends the native dive bar to a wider range of stamina decreasing actions like fighting and sprinting.%%NFor adjustments see Gothic.ini +Comment=Extend the native dive bar to a wider range of stamina decreasing actions like fighting and sprinting.%%NFor adjustments see Gothic.ini BaseDir=.\ VDFName=.\Stamina.vdf [FILES] -; Resources (list the specific files from _work here) -_work\Data\Anims\_compiled\STAMINA_HUMANS_DISABLE_MELEE_G1.MDH -_work\Data\Anims\_compiled\STAMINA_HUMANS_DISABLE_MELEE_G2.MDH -_work\Data\Anims\_compiled\STAMINA_HUMANS_DISABLE_MELEE_G2.MSB -_work\Data\Anims\_compiled\STAMINA_HUMANS_SPRINT_CLEAN-S_RUNL.MAN -_work\Data\Anims\_compiled\STAMINA_HUMANS_SPRINT_CLEAN-T_RUN_2_RUNL.MAN -_work\Data\Anims\_compiled\STAMINA_HUMANS_SPRINT_CLEAN-T_RUNL_2_RUN.MAN -_work\Data\Anims\_compiled\STAMINA_HUMANS_SPRINT_CLEAN.MDH -_work\Data\Anims\_compiled\STAMINA_HUMANS_SPRINT_CLEAN.MSB -_work\Data\Anims\MDS_Overlay\STAMINA_HUMANS_DISABLE_MELEE_G1.MDS -_work\Data\Anims\MDS_Overlay\STAMINA_HUMANS_DISABLE_MELEE_G2.MDS -_work\Data\Anims\MDS_Overlay\STAMINA_HUMANS_SPRINT_CLEAN.MDS - -; Script files +; Modular resources +_work\Data\Anims\_compiled\*.MAN +_work\Data\Anims\_compiled\*.MDH +_work\Data\Anims\_compiled\*.MDL +_work\Data\Anims\_compiled\*.MDM +_work\Data\Anims\_compiled\*.MMB +_work\Data\Anims\_compiled\*.MSB +_work\Data\Meshes\_compiled\*.MRM +_work\Data\Meshes\_compiled\*.MSH +_work\Data\Presets\*.ZEN +_work\Data\Sound\SFX\*.WAV +_work\Data\Sound\Speech\*.WAV +_work\Data\Textures\_compiled\*-C.TEX +_work\Data\Textures\_compiled\*.FNT +_work\Data\Worlds\*.ZEN + +; Ninja resources Ninja\Stamina\* -r +; License and README +LICENSE +README.md + [EXCLUDE] +; Exclude sub-directories +*\Ninja\* -r +*\_work\* -r + +; Exclude source scripts _work\Data\Scripts\* -r -empty -r + +; Exclude metadata +.empty -r *.vm *.vdf *.bat +*.cfg +.* [INCLUDE] +; License and README +LICENSE +README.md [ENDVDF] diff --git a/init.bat b/init.bat deleted file mode 100644 index fba560f..0000000 --- a/init.bat +++ /dev/null @@ -1,777 +0,0 @@ -:: Initialize new patch with Ninja -@ECHO OFF -SET PAGE=0 -SET PAGES_MAX=4 - -TITLE New Patch with Ninja -MODE CON:COLS=64 LINES=43 -SET "TAB= " - -CALL :SHOWHEADER -ECHO Patch Properties -ECHO ================ -ECHO/ - -ECHO Name -ECHO ---- -ECHO First, the most imporant thing is the name of the patch. The -ECHO patch will be identified by this name and it determines the -ECHO name of the VDF. Allowed are alpha numercial characters only. -ECHO/ - -:PROMPT_NAME -SET NAME= -SET /P NAME="Patch name: " -IF "%NAME%" == "" ( - ECHO Input must not be empty! - ECHO/ - GOTO PROMPT_NAME -) -ECHO %NAME%| findstr /XR "^[0-9a-z][0-9a-z]*$" > NUL || ( - ECHO Input must be alpha numeric [0-9a-zA-Z] - ECHO/ - GOTO PROMPT_NAME -) -:: Check if directory already exists -IF EXIST "%~dp0Ninja\%NAME%" ( - ECHO Directory \Ninja\%NAME% already exists. Please choose - ECHO another patch name or rename/remove the directory. - ECHO/ - GOTO PROMPT_NAME -) - -:: Get length of name -SET NAME_LEN=0 -SET NAME_UNDERLINE= -SET NAME_TMP=%NAME% -:GETLEN -IF NOT DEFINED NAME_TMP GOTO RESULT -:: Remove first letter until empty -SET NAME_TMP=%NAME_TMP:~1% -SET /A NAME_LEN+=1 -SET NAME_UNDERLINE=%NAME_UNDERLINE%^= -GOTO GETLEN -:RESULT -IF %NAME_LEN% GEQ 60 ( - ECHO Input too long! - ECHO/ - GOTO PROMPT_NAME -) - -ECHO/ -ECHO/ -ECHO Description -ECHO ----------- -ECHO Please supply a brief sentence describing the patch. It serves -ECHO as basic information for players in the ingame console and in- -ECHO side the VDF. Maximum length is 250 characters. Illegal char- -ECHO acters: ^>^<^|^& -ECHO You may use %%%%N for line breaks. No more than three lines are -ECHO supported. -ECHO/ - -:PROMPT_SHORT_DESCR -SET SHORT_DESCR= -SET /P SHORT_DESCR="Short description: " -IF "%SHORT_DESCR%" == "" ( - ECHO Input must not be empty! - ECHO/ - GOTO PROMPT_SHORT_DESCR -) -ECHO "%SHORT_DESCR%"| findstr /R "[><|&]" > NUL && ( - ECHO Input contains illegal characters: ^>^<^|^& - ECHO/ - GOTO PROMPT_SHORT_DESCR -) -SET SHORT_DESCR=%SHORT_DESCR:(=^^^(% -SET SHORT_DESCR=%SHORT_DESCR:)=^^^)% -:: Get length of description -SET DESC_LEN=0 -SET NAME_TMP=%SHORT_DESCR% -:GETLEN_D -IF NOT DEFINED NAME_TMP GOTO RESULT_D -:: Remove first letter until empty -SET NAME_TMP=%NAME_TMP:~1% -SET /A DESC_LEN+=1 -GOTO GETLEN_D -:RESULT_D -IF %DESC_LEN% GEQ 250 ( - ECHO Input too long! - ECHO/ - GOTO PROMPT_SHORT_DESCR -) - -::=============================================== PAGE BREAK =========================================================:: - -CALL :SHOWHEADER -ECHO Changes to Inject -ECHO ================= -ECHO/ -ECHO A patch can change various resources (see documentation). Here -ECHO you may choose which resources you want to change. -ECHO/ -ECHO Because, by default, patches are compatible with both Gothic 1 -ECHO and Gothic 2, you can choose to make changes to both games or -ECHO separate changes for each game; for each resource. -ECHO/ -ECHO/ - -::--------------------------------------------------------------------------------------------------------------------:: - -ECHO Content Scripts -ECHO --------------- -ECHO/ -ECHO 0) Not needed -ECHO 1) Gothic 1 -ECHO 2) Gothic 2 -ECHO 3) Both -ECHO/ - -:PROMPT_CONTENT -SET CONTENT= -SET /P CONTENT="Please choose (0/1/2/3): " -IF "%CONTENT%" == "" SET CONTENT=0 -IF "%CONTENT%" == "0" GOTO INIT_MENU_CONT -IF "%CONTENT%" == "1" GOTO CONTENT_CONT -IF "%CONTENT%" == "2" GOTO CONTENT_CONT -IF "%CONTENT%" == "3" GOTO CONTENT_CONT -ECHO Invalid input! -ECHO/ -GOTO PROMPT_CONTENT -:CONTENT_CONT - -ECHO/ -:PROMPT_IKARUS -SET IKARUS= -SET /P IKARUS="Patch needs Ikarus (Y/N/?): " -IF "%IKARUS%" == "Y" SET IKARUS=y -IF "%IKARUS%" == "y" GOTO IKARUS_CONT -IF "%IKARUS%" == "N" GOTO LEGO_CONT -IF "%IKARUS%" == "n" GOTO LEGO_CONT -IF "%IKARUS%" == "?" ( - ECHO/ - ECHO If you do not know what Ikarus is you are not ready for Ninja. - ECHO You should start with basic modding first. Bye. - ECHO/ - GOTO QUIT -) ELSE ( - ECHO Please supply a valid answer. - ECHO/ - GOTO PROMPT_IKARUS -) -:IKARUS_CONT - -:PROMPT_LeGo -SET LEGO= -SET /P LEGO="Patch needs LeGo (Y/N/?): " -IF "%LEGO%" == "Y" SET LEGO=y -IF "%LEGO%" == "y" GOTO LEGO_CONT -IF "%LEGO%" == "N" GOTO LEGO_CONT -IF "%LEGO%" == "n" GOTO LEGO_CONT -IF "%LEGO%" == "?" ( - ECHO/ - ECHO If you do not know what LeGo is you are not ready for Ninja. - ECHO You should start with basic modding first. Bye. - ECHO/ - GOTO QUIT -) ELSE ( - ECHO Please supply a valid answer. - ECHO/ - GOTO PROMPT_LEGO -) -:LEGO_CONT - -ECHO/ -ECHO Ninja offers to call a patch-specific initialzation function -ECHO after 'Init_Global' (G2) / 'Init_^' (G1) was called. -IF "%IKARUS%" == "y" ( - ECHO This is useful to add your own initializations especially since - IF "%LEGO%" == "y" ( - ECHO you use Ikarus and LeGo. - ) ELSE ( - ECHO you use Ikarus. - ) -) ELSE ( - ECHO This is useful to add your own initializations. -) -:PROMPT_INIT_CONTENT -SET INIT_CONTENT= -SET /P INIT_CONTENT="Patch needs content initialization function (Y/N): " -IF "%INIT_CONTENT%" == "Y" SET INIT_CONTENT=y -IF "%INIT_CONTENT%" == "y" GOTO INIT_CONTENT_CONT -IF "%INIT_CONTENT%" == "N" GOTO INIT_CONTENT_CONT -IF "%INIT_CONTENT%" == "n" GOTO INIT_CONTENT_CONT -ECHO Please supply a valid answer. -ECHO/ -GOTO PROMPT_INIT_CONTENT -:INIT_CONTENT_CONT - -ECHO/ -ECHO Ninja also offers a patch-specific initialization function for -ECHO menus. It is called whenever a menu is opened, including the -ECHO main menu, before the game even started. -:PROMPT_INIT_MENU -SET INIT_MENU= -SET /P INIT_MENU="Patch needs menu initialization function (Y/N): " -IF "%INIT_MENU%" == "Y" SET INIT_MENU=y -IF "%INIT_MENU%" == "y" GOTO INIT_MENU_CONT -IF "%INIT_MENU%" == "N" GOTO INIT_MENU_CONT -IF "%INIT_MENU%" == "n" GOTO INIT_MENU_CONT -ECHO Please supply a valid answer. -ECHO/ -GOTO PROMPT_INIT_MENU -:INIT_MENU_CONT - -::--------------------------------------------------------------------------------------------------------------------:: - -ECHO/ -ECHO/ -ECHO Menu Scritps -ECHO ------------ -ECHO/ -ECHO 0) Not needed -ECHO 1) Gothic 1 -ECHO 2) Gothic 2 -ECHO 3) Both -ECHO/ - -:PROMPT_MENU -SET MENU= -SET /P MENU="Please choose (0/1/2/3): " -IF "%MENU%" == "" SET MENU=0 -IF "%MENU%" == "0" GOTO MENU_CONT -IF "%MENU%" == "1" GOTO MENU_CONT -IF "%MENU%" == "2" GOTO MENU_CONT -IF "%MENU%" == "3" GOTO MENU_CONT -ECHO Invalid input! -ECHO/ -GOTO PROMPT_MENU -:MENU_CONT - -::--------------------------------------------------------------------------------------------------------------------:: - -ECHO/ -ECHO/ -ECHO Particle FX Scripts -ECHO ------------------- -ECHO/ -ECHO 0) Not needed -ECHO 1) Gothic 1 -ECHO 2) Gothic 2 -ECHO 3) Both -ECHO/ - -:PROMPT_PFX -SET PFX= -SET /P PFX="Please choose (0/1/2/3): " -IF "%PFX%" == "" SET PFX=0 -IF "%PFX%" == "0" GOTO PFX_CONT -IF "%PFX%" == "1" GOTO PFX_CONT -IF "%PFX%" == "2" GOTO PFX_CONT -IF "%PFX%" == "3" GOTO PFX_CONT -ECHO Invalid input! -ECHO/ -GOTO PROMPT_PFX -:PFX_CONT - -::--------------------------------------------------------------------------------------------------------------------:: - -ECHO/ -ECHO/ -ECHO Visual FX Scripts -ECHO ----------------- -ECHO/ -ECHO 0) Not needed -ECHO 1) Gothic 1 -ECHO 2) Gothic 2 -ECHO 3) Both -ECHO/ - -:PROMPT_VFX -SET VFX= -SET /P VFX="Please choose (0/1/2/3): " -IF "%VFX%" == "" SET VFX=0 -IF "%VFX%" == "0" GOTO VFX_CONT -IF "%VFX%" == "1" GOTO VFX_CONT -IF "%VFX%" == "2" GOTO VFX_CONT -IF "%VFX%" == "3" GOTO VFX_CONT -ECHO Invalid input! -ECHO/ -GOTO PROMPT_VFX -:VFX_CONT - -::--------------------------------------------------------------------------------------------------------------------:: - -ECHO/ -ECHO/ -ECHO Sound FX Scripts -ECHO ---------------- -ECHO/ -ECHO 0) Not needed -ECHO 1) Gothic 1 -ECHO 2) Gothic 2 -ECHO 3) Both -ECHO/ - -:PROMPT_SFX -SET SFX= -SET /P SFX="Please choose (0/1/2/3): " -IF "%SFX%" == "" SET SFX=0 -IF "%SFX%" == "0" GOTO SFX_CONT -IF "%SFX%" == "1" GOTO SFX_CONT -IF "%SFX%" == "2" GOTO SFX_CONT -IF "%SFX%" == "3" GOTO SFX_CONT -ECHO Invalid input! -ECHO/ -GOTO PROMPT_SFX -:SFX_CONT - -::--------------------------------------------------------------------------------------------------------------------:: - -ECHO/ -ECHO/ -ECHO Music Scripts -ECHO ------------- -ECHO/ -ECHO 0) Not needed -ECHO 1) Gothic 1 -ECHO 2) Gothic 2 -ECHO 3) Both -ECHO/ - -:PROMPT_MUSIC -SET MUSIC= -SET /P MUSIC="Please choose (0/1/2/3): " -IF "%MUSIC%" == "" SET MUSIC=0 -IF "%MUSIC%" == "0" GOTO MUSIC_CONT -IF "%MUSIC%" == "1" GOTO MUSIC_CONT -IF "%MUSIC%" == "2" GOTO MUSIC_CONT -IF "%MUSIC%" == "3" GOTO MUSIC_CONT -ECHO Invalid input! -ECHO/ -GOTO PROMPT_MUSIC -:MUSIC_CONT - -::--------------------------------------------------------------------------------------------------------------------:: - -ECHO/ -ECHO/ -ECHO Camera Scripts -ECHO -------------- -ECHO/ -ECHO 0) Not needed -ECHO 1) Gothic 1 -ECHO 2) Gothic 2 -ECHO 3) Both -ECHO/ - -:PROMPT_CAMERA -SET CAMERA= -SET /P CAMERA="Please choose (0/1/2/3): " -IF "%CAMERA%" == "" SET CAMERA=0 -IF "%CAMERA%" == "0" GOTO CAMERA_CONT -IF "%CAMERA%" == "1" GOTO CAMERA_CONT -IF "%CAMERA%" == "2" GOTO CAMERA_CONT -IF "%CAMERA%" == "3" GOTO CAMERA_CONT -ECHO Invalid input! -ECHO/ -GOTO PROMPT_CAMERA -:CAMERA_CONT - -::--------------------------------------------------------------------------------------------------------------------:: - -ECHO/ -ECHO/ -ECHO Fight AI Scripts -ECHO ---------------- -ECHO/ -ECHO 0) Not needed -ECHO 1) Gothic 1 -ECHO 2) Gothic 2 -ECHO 3) Both -ECHO/ - -:PROMPT_FIGHT -SET FIGHT= -SET /P FIGHT="Please choose (0/1/2/3): " -IF "%FIGHT%" == "" SET FIGHT=0 -IF "%FIGHT%" == "0" GOTO FIGHT_CONT -IF "%FIGHT%" == "1" GOTO FIGHT_CONT -IF "%FIGHT%" == "2" GOTO FIGHT_CONT -IF "%FIGHT%" == "3" GOTO FIGHT_CONT -ECHO Invalid input! -ECHO/ -GOTO PROMPT_FIGHT -:FIGHT_CONT - -::--------------------------------------------------------------------------------------------------------------------:: - -ECHO/ -ECHO/ -ECHO Output Units (Dialog Lines) -ECHO --------------------------- -ECHO/ -ECHO 0) Not needed -ECHO 1) Gothic 1 -ECHO 2) Gothic 2 -ECHO 3) Both -ECHO/ - -:PROMPT_OU -SET OU= -SET /P OU="Please choose (0/1/2/3): " -IF "%OU%" == "" SET OU=0 -IF "%OU%" == "0" GOTO OU_CONT -IF "%OU%" == "1" GOTO OU_CONT -IF "%OU%" == "2" GOTO OU_CONT -IF "%OU%" == "3" GOTO OU_CONT -ECHO Invalid input! -ECHO/ -GOTO PROMPT_OU -:OU_CONT - -::--------------------------------------------------------------------------------------------------------------------:: - -ECHO/ -ECHO/ -ECHO Animations -ECHO ---------- -ECHO/ -ECHO 0) Not needed -ECHO 1) Gothic 1 -ECHO 2) Gothic 2 -ECHO 3) Both -ECHO/ - -:PROMPT_ANIMATION -SET ANIMATION= -SET /P ANIMATION="Please choose (0/1/2/3): " -IF "%ANIMATION%" == "" SET ANIMATION=0 -IF "%ANIMATION%" == "0" GOTO ANIMATION_CONT -IF "%ANIMATION%" == "1" GOTO ANIMATION_CONT -IF "%ANIMATION%" == "2" GOTO ANIMATION_CONT -IF "%ANIMATION%" == "3" GOTO ANIMATION_CONT -ECHO Invalid input! -ECHO/ -GOTO PROMPT_ANIMATION -:ANIMATION_CONT - -::=============================================== PAGE BREAK =========================================================:: - -CALL :SHOWHEADER - -ECHO Survey Complete -ECHO =============== -ECHO/ -ECHO All necessary information has been gathered. No actions have -ECHO been performed yet. You may press CTRL+C to abort the process. -ECHO Press any key to create all files to initialize your new -ECHO patch '%NAME%' . . . -PAUSE > NUL -ECHO/ - -:START - -:: Directory structure -ECHO Create patch directory -MKDIR "%~dp0Ninja\%NAME%" || GOTO ERR - -ECHO Create subdirectories in '_work' -IF NOT EXIST "%~dp0_work\Data\Anims\_compiled" MKDIR "%~dp0_work\Data\Anims\_compiled" || GOTO ERR -IF NOT EXIST "%~dp0_work\Data\Meshes\_compiled" MKDIR "%~dp0_work\Data\Meshes\_compiled" || GOTO ERR -IF NOT EXIST "%~dp0_work\Data\Textures\_compiled" MKDIR "%~dp0_work\Data\Textures\_compiled" || GOTO ERR - -SET CONTENT_ONCE= -IF "%CONTENT%" == "1" CALL :MAKE_CONTENT 1 -IF "%CONTENT%" == "2" CALL :MAKE_CONTENT 2 -IF "%CONTENT%" == "3" CALL :MAKE_CONTENT 1 && CALL :MAKE_CONTENT 2 - -CALL :MAKE_SRC Menu %MENU% 1 -CALL :MAKE_SRC PFX %PFX% 1 -CALL :MAKE_SRC VFX %VFX% 1 -CALL :MAKE_SRC SFX %SFX% 1 -CALL :MAKE_SRC Music %MUSIC% -CALL :MAKE_SRC Fight %FIGHT% -CALL :MAKE_SRC Camera %CAMERA% - -IF "%OU%" GTR "0" ( - IF "%OU%" == "3" ( - SET OUF="%~dp0Ninja\%NAME%\OU.csl" - ECHO Create empty output unit file - ) ELSE ( - SET OUF="%~dp0Ninja\%NAME%\OU_G%OU%.csl" - ECHO Create empty output unit file ^(G%OU%^) - ) -) -:: Separate IF because of delayed extension -IF "%OU%" GTR "0" ( - (ECHO ZenGin Archive)> "%OUF%" || GOTO ERR - (ECHO ver 1)>> "%OUF%" || GOTO ERR - (ECHO zCArchiverGeneric)>> "%OUF%" || GOTO ERR - (ECHO ASCII)>> "%OUF%" || GOTO ERR - (ECHO saveGame 0)>> "%OUF%" || GOTO ERR - (ECHO date 01/01/1970 00:00:00 AM)>> "%OUF%" || GOTO ERR - (ECHO user Ninja)>> "%OUF%" || GOTO ERR - (ECHO END)>> "%OUF%" || GOTO ERR - (ECHO objects 4)>> "%OUF%" || GOTO ERR - (ECHO END)>> "%OUF%" || GOTO ERR - (ECHO/)>> "%OUF%" || GOTO ERR - (ECHO [%% zCCSLib 0 0])>> "%OUF%" || GOTO ERR - (ECHO %TAB%NumOfItems=int:1)>> "%OUF%" || GOTO ERR - (ECHO %TAB%[%% zCCSBlock 0 1])>> "%OUF%" || GOTO ERR - (ECHO %TAB%%TAB%blockName=string:NINJA_NONE_15_01)>> "%OUF%" || GOTO ERR - (ECHO %TAB%%TAB%numOfBlocks=int:1)>> "%OUF%" || GOTO ERR - (ECHO %TAB%%TAB%subBlock0=float:0)>> "%OUF%" || GOTO ERR - (ECHO %TAB%%TAB%[%% zCCSAtomicBlock 0 2])>> "%OUF%" || GOTO ERR - (ECHO %TAB%%TAB%%TAB%[%% oCMsgConversation:oCNpcMessage:^ -zCEventMessage 0 3])>> "%OUF%" || GOTO ERR - (ECHO %TAB%%TAB%%TAB%%TAB%subType=enum:0)>> "%OUF%" || GOTO ERR - (ECHO %TAB%%TAB%%TAB%%TAB%text=string:Dialog line shown in-game)>> "%OUF%" || GOTO ERR - (ECHO %TAB%%TAB%%TAB%%TAB%name=string:NINJA_NONE_15_01.WAV)>> "%OUF%" || GOTO ERR - (ECHO %TAB%%TAB%%TAB%[])>> "%OUF%" || GOTO ERR - (ECHO %TAB%%TAB%[])>> "%OUF%" || GOTO ERR - (ECHO %TAB%[])>> "%OUF%" || GOTO ERR - (ECHO [])>> "%OUF%" || GOTO ERR -) - -IF "%ANIMATION%" GTR "0" ( - IF "%ANIMATION%" == "3" ( - SET ANIMF="%~dp0Ninja\%NAME%\Anims_Humans.mds" - ECHO Write animation file - ) ELSE ( - SET ANIMF="%~dp0Ninja\%NAME%\Anims_Humans_G%ANIMATION%.mds" - ECHO Write animation file ^(G%ANIMATION%^) - ) -) -:: Separate IF because of delayed extension -IF "%ANIMATION%" GTR "0" ( - (ECHO Model ^("HuS"^))> "%ANIMF%" || GOTO ERR - (ECHO {)>> "%ANIMF%" || GOTO ERR - (ECHO/)>> "%ANIMF%" || GOTO ERR - (ECHO ^/^/ REGISTER NEW ARMOR HERE)>> "%ANIMF%" || GOTO ERR - (ECHO/)>> "%ANIMF%" || GOTO ERR - (ECHO aniEnum)>> "%ANIMF%" || GOTO ERR - (ECHO {)>> "%ANIMF%" || GOTO ERR - (ECHO/)>> "%ANIMF%" || GOTO ERR - (ECHO ^/^/ ADD NEW ANIMATIONS HERE)>> "%ANIMF%" || GOTO ERR - (ECHO/)>> "%ANIMF%" || GOTO ERR - (ECHO })>> "%ANIMF%" || GOTO ERR - (ECHO })>> "%ANIMF%" || GOTO ERR -) - -ECHO Write VDFS VM script -(ECHO [BEGINVDF])> "%~dp0%NAME%.vm" || GOTO ERR -(ECHO Comment=%SHORT_DESCR%)>> "%~dp0%NAME%.vm" || GOTO ERR -(ECHO BaseDir=.\)>> "%~dp0%NAME%.vm" || GOTO ERR -(ECHO VDFName=.\%NAME%.vdf)>> "%~dp0%NAME%.vm" || GOTO ERR -(ECHO/)>> "%~dp0%NAME%.vm" || GOTO ERR -(ECHO [FILES])>> "%~dp0%NAME%.vm" || GOTO ERR -(ECHO ; Resources ^(list the specific files from _work here^))>> "%~dp0%NAME%.vm" || GOTO ERR -(ECHO ; _work\* -r)>> "%~dp0%NAME%.vm" || GOTO ERR -(ECHO/)>> "%~dp0%NAME%.vm" || GOTO ERR -(ECHO ; Script files)>> "%~dp0%NAME%.vm" || GOTO ERR -(ECHO Ninja\%NAME%\* -r)>> "%~dp0%NAME%.vm" || GOTO ERR -(ECHO/)>> "%~dp0%NAME%.vm" || GOTO ERR -(ECHO [EXCLUDE])>> "%~dp0%NAME%.vm" || GOTO ERR -(ECHO _work\Data\Scripts\* -r)>> "%~dp0%NAME%.vm" || GOTO ERR -(ECHO *.vm)>> "%~dp0%NAME%.vm" || GOTO ERR -(ECHO *.vdf)>> "%~dp0%NAME%.vm" || GOTO ERR -(ECHO *.bat)>> "%~dp0%NAME%.vm" || GOTO ERR -(ECHO/)>> "%~dp0%NAME%.vm" || GOTO ERR -(ECHO [INCLUDE])>> "%~dp0%NAME%.vm" || GOTO ERR -(ECHO/)>> "%~dp0%NAME%.vm" || GOTO ERR -(ECHO [ENDVDF])>> "%~dp0%NAME%.vm" || GOTO ERR - -ECHO/ -ECHO Initialization successful -ECHO/ -ECHO Press any key to continue . . . -PAUSE > NUL - -::=============================================== PAGE BREAK =========================================================:: - -:DONE -CALL :SHOWHEADER - -ECHO A VM script was created with which you can create the VDF using -ECHO GothicVDFS, see ^. -ECHO/ -ECHO/ -SET ITER=1 -ECHO Next Steps -ECHO ========== -ECHO/ -ECHO %ITER%. Add Scripts -SET /A ITER+=1 -ECHO Add any necessary scripts in the subdirectories 'Content' -ECHO and 'System' and register them in the respective SRC files. -ECHO/ -IF "%OU%" GTR "0" ( - ECHO %ITER%. Add Output Units - SET /A ITER+=1 - ECHO The OU files are empty place holders. Replace them with your - ECHO compiled versions ^(e.g. using Redefix^). Either the CSL or - ECHO the BIN file will suffice. Not both of them are required. - ECHO/ -) -IF "%ANIMATION%" GTR "0" ( - ECHO %ITER%. Add Animations - SET /A ITER+=1 - ECHO The MDS file is an empty place holder. Copy/rename it to the - ECHO desired model name and fill in your new armor/animations. - ECHO/ -) -ECHO %ITER%. Add Resources -SET /A ITER+=1 -ECHO If you have further resources like textures, meshes or ani- -ECHO mations, add them in the respective directory ^('_compiled'^) -ECHO in the directory '_work' and add their paths to the VM -ECHO script. See the comments inside the VM script. -ECHO/ -ECHO %ITER%. Build the Patch -SET /A ITER+=1 -ECHO In GothicVDFS click '^(Builder^)' and then 'Open Script'. -ECHO Navigate to and open -ECHO %~dp0%NAME%.vm -ECHO Adjust 'Root Path' to the same directory. -ECHO Confirm the contents of the fields and click 'Build volume'. -ECHO/ -ECHO %ITER%. Test the Patch -SET /A ITER+=1 -ECHO Throughly test your patch in Gothic with different mods. -IF "%IKARUS%" == "y" ( - IF "%LEGO%" == "y" ( - ECHO It is important to try various mods that ^[don't^] use LeGo! - ) ELSE ( - ECHO It is important to try various mods that ^[don't^] use Ikarus! - ) -) -ECHO/ - -:QUIT -ECHO Press any key to quit . . . -PAUSE > NUL -CLS -EXIT /B 0 - -:ERR -ECHO ERROR: Operation failed -PAUSE > NUL -CLS -EXIT /B 1 - -:MAKE_CONTENT GOTHIC_BASE_VERSION -IF NOT EXIST "%~dp0Ninja\%NAME%\Content" ( - ECHO Create subdirectory 'Content' - MKDIR "%~dp0Ninja\%NAME%\Content" || GOTO ERR -) - -IF "%IKARUS%" == "y" ( - ECHO Write content SRC ^(G%1^) - (ECHO Ikarus)> "%~dp0Ninja\%NAME%\Content_G%1.src" || GOTO ERR - IF "%LEGO%" == "y" ( - (ECHO LeGo)>> "%~dp0Ninja\%NAME%\Content_G%1.src" || GOTO ERR - ) - (ECHO/)>> "%~dp0Ninja\%NAME%\Content_G%1.src" || GOTO ERR - (ECHO // LIST YOUR FILES HERE)>> "%~dp0Ninja\%NAME%\Content_G%1.src" || GOTO ERR - (ECHO/)>> "%~dp0Ninja\%NAME%\Content_G%1.src" || GOTO ERR -) ELSE ( - ECHO Create empty content SRC ^(G%1^) - COPY /Y NUL "%~dp0Ninja\%NAME%\Content_G%1.src" > NUL || GOTO ERR -) -IF "%INIT_CONTENT%" == "y" GOTO INIT_D -IF "%INIT_MENU%" == "y" GOTO INIT_D -EXIT /B 0 - -:INIT_D -IF NOT "%IKARUS%" == "y" ( - (ECHO/)>> "%~dp0Ninja\%NAME%\Content_G%1.src" || GOTO ERR - (ECHO // LIST YOUR FILES HERE)>> "%~dp0Ninja\%NAME%\Content_G%1.src" || GOTO ERR - (ECHO/)>> "%~dp0Ninja\%NAME%\Content_G%1.src" || GOTO ERR -) -(ECHO Content\NinjaInit.d)>> "%~dp0Ninja\%NAME%\Content_G%1.src" || GOTO ERR -IF NOT EXIST "%~dp0Ninja\%NAME%\Content\NinjaInit.d" ( - ECHO Create empty content init file - COPY /Y NUL "%~dp0Ninja\%NAME%\Content\NinjaInit.d" > NUL || GOTO ERR -) -IF "%INIT_MENU%" == "y" ( - IF NOT DEFINED CONTENT_ONCE ( - ECHO Write content init file - (ECHO /*)>> "%~dp0Ninja\%NAME%\Content\NinjaInit.d" || GOTO ERR - (ECHO * Menu initialization function called by Ninja every ^ -time a menu is opened)>> "%~dp0Ninja\%NAME%\Content\NinjaInit.d" || GOTO ERR - (ECHO */)>> "%~dp0Ninja\%NAME%\Content\NinjaInit.d" || GOTO ERR - (ECHO func void Ninja_%NAME%_Menu^(var int menuPtr^) {)>> "%~dp0Ninja\%NAME%\Content\NinjaInit.d" || GOTO ERR - IF "%IKARUS%" == "y" ( - (ECHO MEM_InitAll^(^);)>> "%~dp0Ninja\%NAME%\Content\NinjaInit.d" || GOTO ERR - (ECHO/)>> "%~dp0Ninja\%NAME%\Content\NinjaInit.d" || GOTO ERR - ) - (ECHO/)>> "%~dp0Ninja\%NAME%\Content\NinjaInit.d" || GOTO ERR - (ECHO // WRITE YOUR INITIALIZATIONS HERE)>> "%~dp0Ninja\%NAME%\Content\NinjaInit.d" || GOTO ERR - (ECHO/)>> "%~dp0Ninja\%NAME%\Content\NinjaInit.d" || GOTO ERR - (ECHO };)>> "%~dp0Ninja\%NAME%\Content\NinjaInit.d" || GOTO ERR - (ECHO/)>> "%~dp0Ninja\%NAME%\Content\NinjaInit.d" || GOTO ERR - (ECHO/)>> "%~dp0Ninja\%NAME%\Content\NinjaInit.d" || GOTO ERR - ) -) -IF "%INIT_CONTENT%" == "y" ( - IF NOT DEFINED CONTENT_ONCE ( - (ECHO /*)>> "%~dp0Ninja\%NAME%\Content\NinjaInit.d" || GOTO ERR - (ECHO * Initialization function called by Ninja ^ -after "Init_Global" ^(G2^) / "Init_" ^(G1^))>> "%~dp0Ninja\%NAME%\Content\NinjaInit.d" || GOTO ERR - (ECHO */)>> "%~dp0Ninja\%NAME%\Content\NinjaInit.d" || GOTO ERR - (ECHO func void Ninja_%NAME%_Init^(^) {)>> "%~dp0Ninja\%NAME%\Content\NinjaInit.d" || GOTO ERR - IF "%LEGO%" == "y" ( - (ECHO // Wrapper for "LeGo_Init" to ensure correct ^ -LeGo initialization without breaking the mod)>> "%~dp0Ninja\%NAME%\Content\NinjaInit.d" || GOTO ERR - (ECHO LeGo_MergeFlags^( /* DESIRED LEGO PACKAGES ^ -*/ ^);)>> "%~dp0Ninja\%NAME%\Content\NinjaInit.d" || GOTO ERR - (ECHO/)>> "%~dp0Ninja\%NAME%\Content\NinjaInit.d" || GOTO ERR - ) ELSE ( - IF "%IKARUS%" == "y" ( - (ECHO MEM_InitAll^(^);)>> "%~dp0Ninja\%NAME%\Content\NinjaInit.d" || GOTO ERR - (ECHO/)>> "%~dp0Ninja\%NAME%\Content\NinjaInit.d" || GOTO ERR - ) - ) - (ECHO/)>> "%~dp0Ninja\%NAME%\Content\NinjaInit.d" || GOTO ERR - (ECHO // WRITE YOUR INITIALIZATIONS HERE)>> "%~dp0Ninja\%NAME%\Content\NinjaInit.d" || GOTO ERR - (ECHO/)>> "%~dp0Ninja\%NAME%\Content\NinjaInit.d" || GOTO ERR - (ECHO };)>> "%~dp0Ninja\%NAME%\Content\NinjaInit.d" || GOTO ERR - ) -) -SET CONTENT_ONCE=1 -EXIT /B 0 - -:MAKE_SRC SRC_NAME GOTHIC_BASE_VERSION -IF "%2" == "0" EXIT /B 0 -IF "%3" == "1" ( - IF NOT EXIST "%~dp0Ninja\%NAME%\System" ( - ECHO Create subdirectory 'System' - MKDIR "%~dp0Ninja\%NAME%\System" || GOTO ERR - ) -) -IF "%2" == "3" ( - ECHO Create empty %1 SRC - COPY /Y NUL "%~dp0Ninja\%NAME%\%1.src" > NUL || GOTO ERR -) ELSE ( - ECHO Create empty %1 SRC ^(G%2^) - COPY /Y NUL "%~dp0Ninja\%NAME%\%1_G%2.src" > NUL || GOTO ERR -) -EXIT /B 0 - - -:SHOWHEADER -SET /A PAGE+=1 -CLS -ECHO ________________________________________________________________ -ECHO New Patch with Ninja -ECHO/ -ECHO This script will aid you in setting up a new patch. You should -ECHO be familiar with the documentation of Ninja, that is available -ECHO at ^. You may abort this process at -ECHO any time by pressing CTRL+C or by closing this command window. -ECHO/ -ECHO PAGE %PAGE%/%PAGES_MAX% -ECHO ________________________________________________________________ -ECHO/ -EXIT /B 0 diff --git a/tool.cfg b/tool.cfg index cb42eb5..3f55381 100644 --- a/tool.cfg +++ b/tool.cfg @@ -1,2 +1,5 @@ +; This file adds dependencies for Spine +; For more information, visit https://clockwork-origins.com/spine-tutorial-tool-cfg/ + [DEPENDENCIES] Required=314