diff --git a/Demos/Demo_IWDEE/Create_and_Distribute.bat b/Demos/Demo_IWDEE/Create_and_Distribute.bat new file mode 100644 index 0000000..c85d8f2 --- /dev/null +++ b/Demos/Demo_IWDEE/Create_and_Distribute.bat @@ -0,0 +1,458 @@ +@echo off +REM Never Forget: Comments can "lie", but code not so much ;P +REM --------------------------- +REM Disables the "!" as keyword +REM --------------------------- +REM https://stackoverflow.com/questions/3288552/how-can-i-escape-an-exclamation-mark-in-cmd-scripts +setlocal DISABLEDELAYEDEXPANSION + +REM ------------------------ +REM INIT Soundset File Names +REM ------------------------ +Set soundsetName[0]=!_DEMO +Set soundsetName[1]=!_DEMB +REM -------------- +REM INIT Languages +REM -------------- +REM (en_US = English, de_DE = German) +Set languages[0]=en_US +Set languages[1]=de_DE +REM -------------------------- +REM INIT Soundset Custom Names +REM -------------------------- +Set en_US[0]=!_Demo(Complete):Female Robot +Set en_US[1]=!_Demo(Incomplete):Female Robot +Set de_DE[0]=!_Demo(Vollständig):Weiblich Roboter +Set de_DE[1]=!_Demo(Unvollständig):Weiblich Roboter +REM ----------------- +REM INIT Folder Paths +REM ----------------- +REM https://ss64.com/nt/syntax-args.html +Set MOD_FOLDER="%~dp0" +Set VOX_FOLDER="%~dp0vox\" +REM ------------- +REM INIT Counters +REM ------------- +Set nameNumbers=0 +Set slotNumbers=0 +REM -------------- +REM INIT Positions +REM -------------- +REM ---Baldur's Gate Enhanced Edition & Siege of Dragonspear & Icewind Dale Enhanced Edition +Set positionsListBGEE[0]=6 +Set positionsListBGEE[1]=7 +Set positionsListBGEE[2]=8 +Set positionsListBGEE[3]=9 +Set positionsListBGEE[4]=10 +Set positionsListBGEE[5]=11 +Set positionsListBGEE[6]=12 +Set positionsListBGEE[7]=13 +Set positionsListBGEE[8]=18 +Set positionsListBGEE[9]=19 +Set positionsListBGEE[10]=20 +Set positionsListBGEE[11]=21 +Set positionsListBGEE[12]=22 +Set positionsListBGEE[13]=23 +Set positionsListBGEE[14]=24 +Set positionsListBGEE[15]=25 +Set positionsListBGEE[16]=26 +Set positionsListBGEE[17]=27 +Set positionsListBGEE[18]=28 +Set positionsListBGEE[19]=29 +Set positionsListBGEE[20]=30 +Set positionsListBGEE[21]=31 +Set positionsListBGEE[22]=32 +Set positionsListBGEE[23]=33 +Set positionsListBGEE[24]=34 +Set positionsListBGEE[25]=35 +Set positionsListBGEE[26]=36 +Set positionsListBGEE[27]=37 +Set positionsListBGEE[28]=38 +Set positionsListBGEE[29]=53 +Set positionsListBGEE[30]=65 +Set positionsListBGEE[31]=66 +Set positionsListBGEE[32]=67 +Set positionsListBGEE[33]=68 +Set positionsListBGEE[34]=69 +Set positionsListBGEE[35]=70 +Set positionsListBGEE[36]=71 +Set positionsListBGEE[37]=72 +Set positionsListBGEE[38]=79 +Set positionsListBGEE[39]=80 +Set positionsListBGEE[40]=81 +Set positionsListBGEE[41]=82 +REM ---Baldur's Gate II Enhanced Edition +Set positionsListBGIIEE[0]=6 +Set positionsListBGIIEE[1]=7 +Set positionsListBGIIEE[2]=8 +Set positionsListBGIIEE[3]=9 +Set positionsListBGIIEE[4]=10 +Set positionsListBGIIEE[5]=11 +Set positionsListBGIIEE[6]=12 +Set positionsListBGIIEE[7]=13 +Set positionsListBGIIEE[8]=18 +Set positionsListBGIIEE[9]=19 +Set positionsListBGIIEE[10]=20 +Set positionsListBGIIEE[11]=21 +Set positionsListBGIIEE[12]=22 +Set positionsListBGIIEE[13]=23 +Set positionsListBGIIEE[14]=24 +Set positionsListBGIIEE[15]=25 +Set positionsListBGIIEE[16]=26 +Set positionsListBGIIEE[17]=27 +Set positionsListBGIIEE[18]=28 +Set positionsListBGIIEE[19]=29 +Set positionsListBGIIEE[20]=30 +Set positionsListBGIIEE[21]=31 +Set positionsListBGIIEE[22]=32 +Set positionsListBGIIEE[23]=33 +Set positionsListBGIIEE[24]=34 +Set positionsListBGIIEE[25]=35 +Set positionsListBGIIEE[26]=36 +Set positionsListBGIIEE[27]=37 +Set positionsListBGIIEE[28]=38 +Set positionsListBGIIEE[29]=53 +Set positionsListBGIIEE[30]=65 +Set positionsListBGIIEE[31]=66 +Set positionsListBGIIEE[32]=67 +Set positionsListBGIIEE[33]=68 +Set positionsListBGIIEE[34]=69 +Set positionsListBGIIEE[35]=70 +Set positionsListBGIIEE[36]=71 +Set positionsListBGIIEE[37]=72 +Set positionsListBGIIEE[38]=75 +Set positionsListBGIIEE[39]=76 +Set positionsListBGIIEE[40]=77 +Set positionsListBGIIEE[41]=78 +REM ------------------- +REM INIT Comments en_US +REM ------------------- +Set commentsListen_US[b]=Becoming Leader +Set commentsListen_US[c]=Tired +Set commentsListen_US[d]=Bored +Set commentsListen_US[a]=Battle Cry 1 +Set commentsListen_US[8]=Battle Cry 2 +Set commentsListen_US[9]=Battle Cry 3 +Set commentsListen_US[g_]=Battle Cry 4 +Set commentsListen_US[h_]=Battle Cry 5 +Set commentsListen_US[l]=Beeing Hit +Set commentsListen_US[m]=Dying +Set commentsListen_US[e]=Badly Wounded +Set commentsListen_US[n]=In Forest +Set commentsListen_US[o]=In City +Set commentsListen_US[p]=In Dungeon +Set commentsListen_US[q]=Daytime +Set commentsListen_US[r]=Nighttime +Set commentsListen_US[f]=Selected 1 +Set commentsListen_US[g]=Selected 2 +Set commentsListen_US[h]=Selected 3 +Set commentsListen_US[0]=Selected 4 +Set commentsListen_US[k_]=Selected 5 +Set commentsListen_US[l_]=Selected 6 +Set commentsListen_US[i]=Action Acknowledgement 1 +Set commentsListen_US[j]=Action Acknowledgement 2 +Set commentsListen_US[k]=Action Acknowledgement 3 +Set commentsListen_US[0_]=Action Acknowledgement 4 for SoD/BGEE/IWDEE or else BGEE2 Select Rare 1 +Set commentsListen_US[1_]=Action Acknowledgement 5 for SoD/BGEE/IWDEE or else BGEE2 Select Rare 2 +Set commentsListen_US[2_]=Action Acknowledgement 6 for SoD/BGEE/IWDEE or else BGEE2 Select Rare 3 +Set commentsListen_US[3_]=Action Acknowledgement 7 for SoD/BGEE/IWDEE or else BGEE2 Select Rare 4 +Set commentsListen_US[w]=Reaction to Party Member Death +Set commentsListen_US[z]=Critical Hit +Set commentsListen_US[1]=Critical Miss +Set commentsListen_US[2]=Target Immune +Set commentsListen_US[3]=Inventory Full +Set commentsListen_US[4]=Picked Pocked +Set commentsListen_US[5]=Hidden in Shadow +Set commentsListen_US[6]=Spell Disrupted +Set commentsListen_US[7]=Set a Trap +Set commentsListen_US[s]=BGEE[IWDEE] Action Acknowledgement 4 or Action Acknowledgement 4 for BGEE2 +Set commentsListen_US[t]=BGEE[IWDEE] Action Acknowledgement 5 or Action Acknowledgement 5 for BGEE2 +Set commentsListen_US[u]=BGEE[IWDEE] Action Acknowledgement 6 or Action Acknowledgement 6 for BGEE2 +Set commentsListen_US[v]=BGEE[IWDEE] Action Acknowledgement 7 or Action Acknowledgement 7 for BGEE2 +REM ------------------- +REM INIT Comments de_DE +REM ------------------- +Set commentsListde_DE[b]=Anführer werden +Set commentsListde_DE[c]=Müde +Set commentsListde_DE[d]=Gelangweilt +Set commentsListde_DE[a]=Schlachtruf 1 +Set commentsListde_DE[8]=Schlachtruf 2 +Set commentsListde_DE[9]=Schlachtruf 3 +Set commentsListde_DE[g_]=Schlachtruf 4 +Set commentsListde_DE[h_]=Schlachtruf 5 +Set commentsListde_DE[l]=Getroffen werden +Set commentsListde_DE[m]=Sterben +Set commentsListde_DE[e]=Schwer verwundet +Set commentsListde_DE[n]=Im Wald +Set commentsListde_DE[o]=In der Stadt +Set commentsListde_DE[p]=Im Kerker +Set commentsListde_DE[q]=Tagsüber +Set commentsListde_DE[r]=Nachts +Set commentsListde_DE[f]=Ausgewählt 1 +Set commentsListde_DE[g]=Ausgewählt 2 +Set commentsListde_DE[h]=Ausgewählt 3 +Set commentsListde_DE[0]=Ausgewählt 4 +Set commentsListde_DE[k_]=Ausgewählt 5 +Set commentsListde_DE[l_]=Ausgewählt 6 +Set commentsListde_DE[i]=Aktionsbestätigung 1 +Set commentsListde_DE[j]=Aktionsbestätigung 2 +Set commentsListde_DE[k]=Aktionsbestätigung 3 +Set commentsListde_DE[0_]=Aktionsbestätigung 4 für SoD/BGEE/IWDEE ansonsten BGEE2 Aktionsbestätigung selten 1 +Set commentsListde_DE[1_]=Aktionsbestätigung 5 für SoD/BGEE/IWDEE ansonsten BGEE2 Aktionsbestätigung selten 2 +Set commentsListde_DE[2_]=Aktionsbestätigung 6 für SoD/BGEE/IWDEE ansonsten BGEE2 Aktionsbestätigung selten 3 +Set commentsListde_DE[3_]=Aktionsbestätigung 7 für SoD/BGEE/IWDEE ansonsten BGEE2 Aktionsbestätigung selten 4 +Set commentsListde_DE[w]=Reaktion auf den Tod eines Gruppenmitglieds +Set commentsListde_DE[z]=Kritischer Treffer +Set commentsListde_DE[1]=Kritischer Fehlschlag +Set commentsListde_DE[2]=Ziel ist immun +Set commentsListde_DE[3]=Inventar voll +Set commentsListde_DE[4]=Taschendiebstahl +Set commentsListde_DE[5]=Versteckt im Schaten +Set commentsListde_DE[6]=Zauber unterbrochen +Set commentsListde_DE[7]=Falle stellen +Set commentsListde_DE[s]=BGEE[IWDEE] Aktionsbestätigung 4 oder Aktionsbestätigung 4 für BGEE2 +Set commentsListde_DE[t]=BGEE[IWDEE] Aktionsbestätigung 5 oder Aktionsbestätigung 5 für BGEE2 +Set commentsListde_DE[u]=BGEE[IWDEE] Aktionsbestätigung 6 oder Aktionsbestätigung 6 für BGEE2 +Set commentsListde_DE[v]=BGEE[IWDEE] Aktionsbestätigung 7 oder Aktionsbestätigung 7 für BGEE2 +REM -------------- +REM INIT LAM Names +REM -------------- +Set texts=!_Texts +Set voxNames=!_VoxNames +Set voxSelectNames=!_VoxSelectNames +Set sounds=!_Sounds +Set positions=!_Positions + + +REM --------------------- +REM Main Loop (Languages) +REM --------------------- +REM https://stackoverflow.com/questions/18462169/how-to-loop-through-array-in-batch +for /F "tokens=2 delims==" %%l in ('Set languages[') do ( + echo ----------------------------- + echo Preparing files for language: %%l + echo ----------------------------- + REM https://ss64.com/nt/delayedexpansion.html + Setlocal ENABLEDELAYEDEXPANSION + + REM ----------------------------- + REM Counts Custome Names for Loop + REM ----------------------------- + Set countedCustomNames=0 + for /F "tokens=2 delims==" %%t in ('Set %%l[') do ( + + Set /a countedCustomNames+=1 + ) + Set /a countedCustomNames-=1 + + REM -------------------------------- + REM Changes path to read sound files + REM -------------------------------- + REM https://ss64.com/nt/dir.html; bare(/b) file sorted by name(/o:n) + cd "%VOX_FOLDER%\%%l" + set countedFiles=0 + Set index=0 + for /f "tokens=*" %%s in ('dir /b /o:n "*.wav"') do ( + REM "^" allows to get files with "!" in it. + Set soundsetFiles[!index!]="^%%~s" + Set /a index+=1 + Set /a countedFiles+=1 + ) + Set soundsetFiles + Set /a countedFiles-=1 + + REM ----------------------------------------------------------- + REM Changes path to create init-file to fill it with WeiDU code + REM ----------------------------------------------------------- + cd "%MOD_FOLDER%\%%l" + Copy NUL "InitVoxArrays.tpa" + REM -------------------------- + REM INITIALIZE DYN ARRAY TEXTS + REM -------------------------- + Set index=0 + >>InitVoxArrays.tpa echo // ---INITIALIZE DYN ARRAY TEXTS + for /L %%i in (0,1,!countedFiles!) do ( + + Set sfname=!soundsetFiles[%%i]! + + Set /a count=0 + for %%g IN (b c d a 8 9 g_ h_ l m e n o p q r f g h 0 k_ l_ i j k 0_ 1_ 2_ 3_ w z 1 2 3 4 5 6 7 s t u v) DO ( + + if /i "%%g"=="!sfname:~-6,-5!" ( + >>InitVoxArrays.tpa echo OUTER_SPRINT ~Texts!index!~ ~TODO~ //!sfname! !commentsList%%l[%%g]! + + ) else if /i "%%g"=="!sfname:~-7,-5!" ( + >>InitVoxArrays.tpa echo OUTER_SPRINT ~Texts!index!~ ~TODO~ //!sfname! !commentsList%%l[%%g]! + + ) + + Set /a count+=1 + ) + + Set /a index+=1 + ) + >>InitVoxArrays.tpa echo LAM ~!texts!~ + REM -------------------------- + REM INITIALIZE DYN ARRAY NAMES + REM -------------------------- + Set index=0 + >>InitVoxArrays.tpa echo // ---INITIALIZE DYN ARRAY NAMES + for /L %%n in (0,1,!countedCustomNames!) do ( + + Set name=!soundsetName[%%n]! + + >>InitVoxArrays.tpa echo OUTER_SPRINT ~VoxNames!index!~ ~!name!~ + Set /a index+=1 + ) + >>InitVoxArrays.tpa echo LAM ~!voxNames!~ + REM ------------------------------------- + REM INITIALIZE DYN ARRAY SELECTABLE NAMES + REM ------------------------------------- + Set index=0 + Set array=%%l + >>InitVoxArrays.tpa echo // ---INITIALIZE DYN ARRAY SELECTABLE NAMES + for /L %%t in (0,1,!countedCustomNames!) do ( + + Set sname=!%%l[%%t]! + + >>InitVoxArrays.tpa echo OUTER_SPRINT ~VoxSelectNames!index!~ ~!sname!~ + Set /a index+=1 + ) + >>InitVoxArrays.tpa echo LAM ~!voxSelectNames!~ + REM --------------------------- + REM INITIALIZE DYN ARRAY SOUNDS + REM --------------------------- + Set index=0 + >>InitVoxArrays.tpa echo // ---INITIALIZE DYN ARRAY SOUNDS + for /L %%k in (0,1,!countedFiles!) do ( + + Set ssname=!soundsetFiles[%%k]! + + >>InitVoxArrays.tpa echo OUTER_SPRINT ~Sounds!index!~ ~!ssname:~1,-5!~ + Set /a index+=1 + ) + >>InitVoxArrays.tpa echo LAM ~!sounds!~ + REM ------------------------------ + REM INITIALIZE DYN ARRAY POSITIONS + REM ------------------------------ + REM --- Baldur's Gate Enhanced Edition & Siege of Dragonspear + Set index=0 + >>InitVoxArrays.tpa echo // ---INITIALIZE DYN ARRAY POSITIONS + >>InitVoxArrays.tpa echo ACTION_IF ^(GAME_IS ~bgee~^) OR ^(FILE_EXISTS ~sod-dlc.zip~^) OR ^(FILE_EXISTS ~dlc/sod-dlc.zip~^) OR ^(GAME_IS ~iwdee~^) THEN + >>InitVoxArrays.tpa echo BEGIN + for /L %%j in (0,1,!countedFiles!) do ( + + Set sfname=!soundsetFiles[%%j]! + + Set /a count=0 + for %%g IN (b c d a 8 9 g_ h_ l m e n o p q r f g h 0 k_ l_ i j k 0_ 1_ 2_ 3_ w z 1 2 3 4 5 6 7 s t u v) DO ( + + if /i "%%g"=="!sfname:~-6,-5!" ( + + REM Accesses the array with a loop because “!myArray[%index%]!” The syntax doesn't work here. + For /L %%u in (!count!,1,!count!) Do ( + >>InitVoxArrays.tpa echo OUTER_SET ~Positions!index!~ = !positionsListBGEE[%%u]! + ) + + ) else if /i "%%g"=="!sfname:~-7,-5!" ( + + REM Accesses the array with a loop because “!myArray[%index%]!” The syntax doesn't work here. + For /L %%u in (!count!,1,!count!) Do ( + >>InitVoxArrays.tpa echo OUTER_SET ~Positions!index!~ = !positionsListBGEE[%%u]! + ) + ) + Set /a count+=1 + ) + + Set /a index+=1 + ) + >>InitVoxArrays.tpa echo LAM ~!positions!~ + >>InitVoxArrays.tpa echo END + + REM --- Baldur's Gate II Enhanced Edition + Set index=0 + >>InitVoxArrays.tpa echo // ---INITIALIZE DYN ARRAY POSITIONS + >>InitVoxArrays.tpa echo ACTION_IF ^(GAME_IS ~bg2ee~^) THEN + >>InitVoxArrays.tpa echo BEGIN + for /L %%j in (0,1,!countedFiles!) do ( + + Set sfname=!soundsetFiles[%%j]! + + Set /a count=0 + for %%g IN (b c d a 8 9 g_ h_ l m e n o p q r f g h 0 k_ l_ i j k s t u v w z 1 2 3 4 5 6 7 0_ 1_ 2_ 3_) DO ( + + if /i "%%g"=="!sfname:~-6,-5!" ( + + REM Accesses the array with a loop because “!myArray[%index%]!” The syntax doesn't work here. + For /L %%u in (!count!,1,!count!) Do ( + >>InitVoxArrays.tpa echo OUTER_SET ~Positions!index!~ = !positionsListBGIIEE[%%u]! + ) + + ) else if /i "%%g"=="!sfname:~-7,-5!" ( + + REM Accesses the array with a loop because “!myArray[%index%]!” The syntax doesn't work here. + For /L %%u in (!count!,1,!count!) Do ( + >>InitVoxArrays.tpa echo OUTER_SET ~Positions!index!~ = !positionsListBGIIEE[%%u]! + ) + ) + Set /a count+=1 + ) + + Set /a index+=1 + ) + >>InitVoxArrays.tpa echo LAM ~!positions!~ + >>InitVoxArrays.tpa echo END + + + REM ----------------------------------- + REM Counts the number of soundset names + REM ----------------------------------- + for /F "tokens=2 delims==" %%n in ('Set soundsetName[') do ( + Set /a nameNumbers+=1 + ) + REM ----------------------------------- + REM Counts the number of soundset files + REM ----------------------------------- + for /F "tokens=2 delims==" %%n in ('Set soundsetFiles[') do ( + Set /a slotNumbers+=1 + ) + REM -------------------------------------------- + REM Creates init-file to fill it with WeiDU code + REM -------------------------------------------- + Copy NUL "InitAllSlotNumbers.tpa" + REM --------------------------- + REM INITIALIZE ALL SLOT-NUMBERS + REM --------------------------- + >>InitAllSlotNumbers.tpa echo // ---INITIALIZE ALL SLOT-NUMBERS + >>InitAllSlotNumbers.tpa echo OUTER_SET slotNumbers = !slotNumbers! + >>InitAllSlotNumbers.tpa echo OUTER_SET nameNumbers = !nameNumbers! + + + REM ----------------------------- + REM Redistributes all sound files + REM ----------------------------- + cd "%VOX_FOLDER%\%%l" + REM https://ss64.com/nt/move.html; https://ss64.com/nt/if.html + REM https://stackoverflow.com/questions/26391925/in-a-batch-file-how-do-you-verify-part-of-a-filename-matches-a-given-string + for /F "tokens=2 delims==" %%w in ('Set soundsetFiles[') do ( + + set file="^%%~w" + set flag=^%%~w + + REM Checks the last 5 characters found in file. + REM Sound file names with "_" as postfix will be moved in wav-folder, else in sound-folder. + if /i "!flag:~-5!"=="_.wav" ( + move /Y ".\!file!" ".\wav\" + ) else ( + move /Y ".\!file!" ".\sound\" + ) + + ) + + REM Deletes every content of variables within this loop iteration + endlocal + +) +REM End of main loop + +PAUSE \ No newline at end of file diff --git a/Demos/Demo_IWDEE/arrays/!_DeclareVoxArrays.tpa b/Demos/Demo_IWDEE/arrays/!_DeclareVoxArrays.tpa new file mode 100644 index 0000000..494bd39 --- /dev/null +++ b/Demos/Demo_IWDEE/arrays/!_DeclareVoxArrays.tpa @@ -0,0 +1,36 @@ +// Never Forget: Comments can "lie", but code not so much ;P +// ---INITILIZE DYN ARRAY NUMBER OF VALUES +INCLUDE ~%MOD_FOLDER%/%LANGUAGE%/InitAllSlotNumbers.tpa~ + +OUTER_SPRINT refTextArray ~Texts~ +OUTER_SPRINT refSoundArray ~Sounds~ +OUTER_SPRINT TLKindexArray ~TLKindex~ +OUTER_SPRINT voxNameArray ~VoxNames~ +OUTER_SPRINT voxSelectNameArray ~VoxSelectNames~ +OUTER_SPRINT voxPositionArray ~Positions~ +// ---DECLARE DYN ARRAY FOR TEXT(Text in the dialog.tlk) +OUTER_SET ~!_slotNumbers~ = ~%slotNumbers%~ +OUTER_SPRINT ~!_setArrayName~ ~%refTextArray%~ +LAM DYN_ARRAY_CREATE +// ---DECLARE DYN ARRAY FOR SOUND(Soundfile names in dialog.tlk) +OUTER_SET ~!_slotNumbers~ = ~%slotNumbers%~ +OUTER_SPRINT ~!_setArrayName~ ~%refSoundArray%~ +LAM DYN_ARRAY_CREATE +// ---DECLARE DYN ARRAY FOR REF-NUMBERS(Reference number in CHARSND.2DA) +OUTER_SET ~!_slotNumbers~ = ~%slotNumbers%~ +OUTER_SPRINT ~!_setArrayName~ ~%TLKindexArray%~ +LAM DYN_ARRAY_CREATE +// ---DECLARE DYN ARRAY FOR POSITION(Reference number position in dialog.tlk) +OUTER_SET ~!_slotNumbers~ = ~%slotNumbers%~ +OUTER_SPRINT ~!_setArrayName~ ~%voxPositionArray%~ +LAM DYN_ARRAY_CREATE +// ---DECLARE DYN ARRAY FOR NAMES(Header name in CHARSND.2DA) +OUTER_SET ~!_slotNumbers~ = ~%nameNumbers%~ +OUTER_SPRINT ~!_setArrayName~ ~%voxNameArray%~ +LAM DYN_ARRAY_CREATE +// ---DECLARE DYN ARRAY FOR SELECTABLE NAMES(Selectable name in character creation) +OUTER_SET ~!_slotNumbers~ = ~%nameNumbers%~ +OUTER_SPRINT ~!_setArrayName~ ~%voxSelectNameArray%~ +LAM DYN_ARRAY_CREATE +// ---INITILIZE DYN ARRAY VALUES +INCLUDE ~%MOD_FOLDER%/%LANGUAGE%/InitVoxArrays.tpa~ \ No newline at end of file diff --git a/Demos/Demo_IWDEE/de_DE/!_errors.tra b/Demos/Demo_IWDEE/de_DE/!_errors.tra new file mode 100644 index 0000000..82a0fea --- /dev/null +++ b/Demos/Demo_IWDEE/de_DE/!_errors.tra @@ -0,0 +1 @@ +@2147483647=~Diese Modifikation is nicht mit dem zu installierenden Spiel kompatibel! Die Installation wird abgebrochen.~ \ No newline at end of file diff --git a/Demos/Demo_IWDEE/de_DE/!_moduleNames.tra b/Demos/Demo_IWDEE/de_DE/!_moduleNames.tra new file mode 100644 index 0000000..bbd724a --- /dev/null +++ b/Demos/Demo_IWDEE/de_DE/!_moduleNames.tra @@ -0,0 +1,2 @@ +@1=~Vox Demo IWDEE~ +@2=~TLK Reperatur verwenden -> [o]k oder [n]ein:~ \ No newline at end of file diff --git a/Demos/Demo_IWDEE/de_DE/!_warnings.tra b/Demos/Demo_IWDEE/de_DE/!_warnings.tra new file mode 100644 index 0000000..c2abef9 --- /dev/null +++ b/Demos/Demo_IWDEE/de_DE/!_warnings.tra @@ -0,0 +1,2 @@ +@2147483646=~Modifikations-kompatibilität ist unsicher. Trotz erfolgreicher Installation, kann die reibungslose Funktionalität nicht garantiert werden. Falls die Installation Fehler generiert, kann die Kompatibilität eine der Ursachen sein.~ +@2147483644=~SOD zip wurde erkannt! Die Installation von Modmerge oder DLCmerger wird vermutlich benötigt. Trotz erfolgreicher Installation, kann die reibungslose Funktionalität nicht garantiert werden.~ \ No newline at end of file diff --git a/Demos/Demo_IWDEE/de_DE/InitAllSlotNumbers.tpa b/Demos/Demo_IWDEE/de_DE/InitAllSlotNumbers.tpa new file mode 100644 index 0000000..b346ad8 --- /dev/null +++ b/Demos/Demo_IWDEE/de_DE/InitAllSlotNumbers.tpa @@ -0,0 +1,3 @@ +// ---INITIALIZE ALL SLOT-NUMBERS +OUTER_SET slotNumbers = 31 +OUTER_SET nameNumbers = 2 diff --git a/Demos/Demo_IWDEE/de_DE/InitVoxArrays.tpa b/Demos/Demo_IWDEE/de_DE/InitVoxArrays.tpa new file mode 100644 index 0000000..a9c79be --- /dev/null +++ b/Demos/Demo_IWDEE/de_DE/InitVoxArrays.tpa @@ -0,0 +1,146 @@ +// ---INITIALIZE DYN ARRAY TEXTS +OUTER_SPRINT ~Texts0~ ~Aktionsbestätigung 7~ //"!_DEMB3_.wav" Aktionsbestätigung 7 für SoD/BGEE/IWDEE ansonsten BGEE2 Aktionsbestätigung selten 4 +OUTER_SPRINT ~Texts1~ ~Ausgewählt 2~ //"!_DEMBg.wav" Ausgewählt 2 +OUTER_SPRINT ~Texts2~ ~Ausgewählt 4~ //"!_DEMO0.wav" Ausgewählt 4 +OUTER_SPRINT ~Texts3~ ~Aktionsbestätigung 4~ //"!_DEMO0_.wav" Aktionsbestätigung 4 für SoD/BGEE/IWDEE ansonsten BGEE2 Aktionsbestätigung selten 1 +OUTER_SPRINT ~Texts4~ ~Aktionsbestätigung 5~ //"!_DEMO1_.wav" Aktionsbestätigung 5 für SoD/BGEE/IWDEE ansonsten BGEE2 Aktionsbestätigung selten 2 +OUTER_SPRINT ~Texts5~ ~Aktionsbestätigung 6~ //"!_DEMO2_.wav" Aktionsbestätigung 6 für SoD/BGEE/IWDEE ansonsten BGEE2 Aktionsbestätigung selten 3 +OUTER_SPRINT ~Texts6~ ~Aktionsbestätigung 7~ //"!_DEMO3_.wav" Aktionsbestätigung 7 für SoD/BGEE/IWDEE ansonsten BGEE2 Aktionsbestätigung selten 4 +OUTER_SPRINT ~Texts7~ ~Schlachtruf 2~ //"!_DEMO8.wav" Schlachtruf 2 +OUTER_SPRINT ~Texts8~ ~Schlachtruf 3~ //"!_DEMO9.wav" Schlachtruf 3 +OUTER_SPRINT ~Texts9~ ~Schlachtruf 1~ //"!_DEMOa.wav" Schlachtruf 1 +OUTER_SPRINT ~Texts10~ ~Anführer werden~ //"!_DEMOb.wav" Anführer werden +OUTER_SPRINT ~Texts11~ ~Müde~ //"!_DEMOc.wav" Müde +OUTER_SPRINT ~Texts12~ ~Gelangweilt~ //"!_DEMOd.wav" Gelangweilt +OUTER_SPRINT ~Texts13~ ~Schwer verwundet~ //"!_DEMOe.wav" Schwer verwundet +OUTER_SPRINT ~Texts14~ ~Ausgewählt 1~ //"!_DEMOf.wav" Ausgewählt 1 +OUTER_SPRINT ~Texts15~ ~Ausgewählt 2~ //"!_DEMOg.wav" Ausgewählt 2 +OUTER_SPRINT ~Texts16~ ~Schlachtruf 4~ //"!_DEMOg_.wav" Schlachtruf 4 +OUTER_SPRINT ~Texts17~ ~Ausgewählt 3~ //"!_DEMOh.wav" Ausgewählt 3 +OUTER_SPRINT ~Texts18~ ~Schlachtruf 5~ //"!_DEMOh_.wav" Schlachtruf 5 +OUTER_SPRINT ~Texts19~ ~Aktionsbestätigung 1~ //"!_DEMOi.wav" Aktionsbestätigung 1 +OUTER_SPRINT ~Texts20~ ~Aktionsbestätigung 2~ //"!_DEMOj.wav" Aktionsbestätigung 2 +OUTER_SPRINT ~Texts21~ ~Aktionsbestätigung 3~ //"!_DEMOk.wav" Aktionsbestätigung 3 +OUTER_SPRINT ~Texts22~ ~Ausgewählt 5~ //"!_DEMOk_.wav" Ausgewählt 5 +OUTER_SPRINT ~Texts23~ ~Getroffen werden~ //"!_DEMOl.wav" Getroffen werden +OUTER_SPRINT ~Texts24~ ~Ausgewählt 6~ //"!_DEMOl_.wav" Ausgewählt 6 +OUTER_SPRINT ~Texts25~ ~Sterben~ //"!_DEMOm.wav" Sterben +OUTER_SPRINT ~Texts26~ ~IWDEE Aktionsbestätigung 4~ //"!_DEMOs.wav" BGEE[IWDEE] Aktionsbestätigung 4 oder Aktionsbestätigung 4 für BGEE2 +OUTER_SPRINT ~Texts27~ ~IWDEE Aktionsbestätigung 5~ //"!_DEMOt.wav" BGEE[IWDEE] Aktionsbestätigung 5 oder Aktionsbestätigung 5 für BGEE2 +OUTER_SPRINT ~Texts28~ ~IWDEE Aktionsbestätigung 6~ //"!_DEMOu.wav" BGEE[IWDEE] Aktionsbestätigung 6 oder Aktionsbestätigung 6 für BGEE2 +OUTER_SPRINT ~Texts29~ ~IWDEE Aktionsbestätigung 7~ //"!_DEMOv.wav" BGEE[IWDEE] Aktionsbestätigung 7 oder Aktionsbestätigung 7 für BGEE2 +OUTER_SPRINT ~Texts30~ ~Reaktion auf den Tod eines Gruppenmitglieds~ //"!_DEMOw.wav" Reaktion auf den Tod eines Gruppenmitglieds +LAM ~!_Texts~ +// ---INITIALIZE DYN ARRAY NAMES +OUTER_SPRINT ~VoxNames0~ ~!_DEMO~ +OUTER_SPRINT ~VoxNames1~ ~!_DEMB~ +LAM ~!_VoxNames~ +// ---INITIALIZE DYN ARRAY SELECTABLE NAMES +OUTER_SPRINT ~VoxSelectNames0~ ~!_Demo(Vollständig):Weiblich Roboter~ +OUTER_SPRINT ~VoxSelectNames1~ ~!_Demo(Unvollständig):Weiblich Roboter~ +LAM ~!_VoxSelectNames~ +// ---INITIALIZE DYN ARRAY SOUNDS +OUTER_SPRINT ~Sounds0~ ~!_DEMB3_~ +OUTER_SPRINT ~Sounds1~ ~!_DEMBg~ +OUTER_SPRINT ~Sounds2~ ~!_DEMO0~ +OUTER_SPRINT ~Sounds3~ ~!_DEMO0_~ +OUTER_SPRINT ~Sounds4~ ~!_DEMO1_~ +OUTER_SPRINT ~Sounds5~ ~!_DEMO2_~ +OUTER_SPRINT ~Sounds6~ ~!_DEMO3_~ +OUTER_SPRINT ~Sounds7~ ~!_DEMO8~ +OUTER_SPRINT ~Sounds8~ ~!_DEMO9~ +OUTER_SPRINT ~Sounds9~ ~!_DEMOa~ +OUTER_SPRINT ~Sounds10~ ~!_DEMOb~ +OUTER_SPRINT ~Sounds11~ ~!_DEMOc~ +OUTER_SPRINT ~Sounds12~ ~!_DEMOd~ +OUTER_SPRINT ~Sounds13~ ~!_DEMOe~ +OUTER_SPRINT ~Sounds14~ ~!_DEMOf~ +OUTER_SPRINT ~Sounds15~ ~!_DEMOg~ +OUTER_SPRINT ~Sounds16~ ~!_DEMOg_~ +OUTER_SPRINT ~Sounds17~ ~!_DEMOh~ +OUTER_SPRINT ~Sounds18~ ~!_DEMOh_~ +OUTER_SPRINT ~Sounds19~ ~!_DEMOi~ +OUTER_SPRINT ~Sounds20~ ~!_DEMOj~ +OUTER_SPRINT ~Sounds21~ ~!_DEMOk~ +OUTER_SPRINT ~Sounds22~ ~!_DEMOk_~ +OUTER_SPRINT ~Sounds23~ ~!_DEMOl~ +OUTER_SPRINT ~Sounds24~ ~!_DEMOl_~ +OUTER_SPRINT ~Sounds25~ ~!_DEMOm~ +OUTER_SPRINT ~Sounds26~ ~!_DEMOs~ +OUTER_SPRINT ~Sounds27~ ~!_DEMOt~ +OUTER_SPRINT ~Sounds28~ ~!_DEMOu~ +OUTER_SPRINT ~Sounds29~ ~!_DEMOv~ +OUTER_SPRINT ~Sounds30~ ~!_DEMOw~ +LAM ~!_Sounds~ +// ---INITIALIZE DYN ARRAY POSITIONS +ACTION_IF (GAME_IS ~bgee~) OR (FILE_EXISTS ~sod-dlc.zip~) OR (FILE_EXISTS ~dlc/sod-dlc.zip~) OR (GAME_IS ~iwdee~) THEN +BEGIN +OUTER_SET ~Positions0~ = 38 +OUTER_SET ~Positions1~ = 27 +OUTER_SET ~Positions2~ = 29 +OUTER_SET ~Positions3~ = 35 +OUTER_SET ~Positions4~ = 36 +OUTER_SET ~Positions5~ = 37 +OUTER_SET ~Positions6~ = 38 +OUTER_SET ~Positions7~ = 10 +OUTER_SET ~Positions8~ = 11 +OUTER_SET ~Positions9~ = 9 +OUTER_SET ~Positions10~ = 6 +OUTER_SET ~Positions11~ = 7 +OUTER_SET ~Positions12~ = 8 +OUTER_SET ~Positions13~ = 20 +OUTER_SET ~Positions14~ = 26 +OUTER_SET ~Positions15~ = 27 +OUTER_SET ~Positions16~ = 12 +OUTER_SET ~Positions17~ = 28 +OUTER_SET ~Positions18~ = 13 +OUTER_SET ~Positions19~ = 32 +OUTER_SET ~Positions20~ = 33 +OUTER_SET ~Positions21~ = 34 +OUTER_SET ~Positions22~ = 30 +OUTER_SET ~Positions23~ = 18 +OUTER_SET ~Positions24~ = 31 +OUTER_SET ~Positions25~ = 19 +OUTER_SET ~Positions26~ = 79 +OUTER_SET ~Positions27~ = 80 +OUTER_SET ~Positions28~ = 81 +OUTER_SET ~Positions29~ = 82 +OUTER_SET ~Positions30~ = 53 +LAM ~!_Positions~ +END +// ---INITIALIZE DYN ARRAY POSITIONS +ACTION_IF (GAME_IS ~bg2ee~) THEN +BEGIN +OUTER_SET ~Positions0~ = 78 +OUTER_SET ~Positions1~ = 27 +OUTER_SET ~Positions2~ = 29 +OUTER_SET ~Positions3~ = 75 +OUTER_SET ~Positions4~ = 76 +OUTER_SET ~Positions5~ = 77 +OUTER_SET ~Positions6~ = 78 +OUTER_SET ~Positions7~ = 10 +OUTER_SET ~Positions8~ = 11 +OUTER_SET ~Positions9~ = 9 +OUTER_SET ~Positions10~ = 6 +OUTER_SET ~Positions11~ = 7 +OUTER_SET ~Positions12~ = 8 +OUTER_SET ~Positions13~ = 20 +OUTER_SET ~Positions14~ = 26 +OUTER_SET ~Positions15~ = 27 +OUTER_SET ~Positions16~ = 12 +OUTER_SET ~Positions17~ = 28 +OUTER_SET ~Positions18~ = 13 +OUTER_SET ~Positions19~ = 32 +OUTER_SET ~Positions20~ = 33 +OUTER_SET ~Positions21~ = 34 +OUTER_SET ~Positions22~ = 30 +OUTER_SET ~Positions23~ = 18 +OUTER_SET ~Positions24~ = 31 +OUTER_SET ~Positions25~ = 19 +OUTER_SET ~Positions26~ = 35 +OUTER_SET ~Positions27~ = 36 +OUTER_SET ~Positions28~ = 37 +OUTER_SET ~Positions29~ = 38 +OUTER_SET ~Positions30~ = 53 +LAM ~!_Positions~ +END diff --git a/Demos/Demo_IWDEE/en_US/!_errors.tra b/Demos/Demo_IWDEE/en_US/!_errors.tra new file mode 100644 index 0000000..9b0ec07 --- /dev/null +++ b/Demos/Demo_IWDEE/en_US/!_errors.tra @@ -0,0 +1 @@ +@2147483647=~Mod is incompatible with game! The Installation is aborted.~ \ No newline at end of file diff --git a/Demos/Demo_IWDEE/en_US/!_moduleNames.tra b/Demos/Demo_IWDEE/en_US/!_moduleNames.tra new file mode 100644 index 0000000..69b0607 --- /dev/null +++ b/Demos/Demo_IWDEE/en_US/!_moduleNames.tra @@ -0,0 +1,2 @@ +@1=~Vox Demo IWDEE~ +@2=~Apply TLK Repair -> [o]k or [n]o~ \ No newline at end of file diff --git a/Demos/Demo_IWDEE/en_US/!_warnings.tra b/Demos/Demo_IWDEE/en_US/!_warnings.tra new file mode 100644 index 0000000..92aa23c --- /dev/null +++ b/Demos/Demo_IWDEE/en_US/!_warnings.tra @@ -0,0 +1,2 @@ +@2147483646=~Insecure game compatibility detected! No guarantee for smooth functionality in case of successful installation. If you encounter an error after installation, this may be the cause.~ +@2147483644=~SOD zip detected! Installation of Modmerge or DLCmerger is possibly needed. No guarantee for smooth functionality in case of successful installation. If you encounter an error after installation, this may be the cause.~ \ No newline at end of file diff --git a/Demos/Demo_IWDEE/en_US/InitAllSlotNumbers.tpa b/Demos/Demo_IWDEE/en_US/InitAllSlotNumbers.tpa new file mode 100644 index 0000000..b346ad8 --- /dev/null +++ b/Demos/Demo_IWDEE/en_US/InitAllSlotNumbers.tpa @@ -0,0 +1,3 @@ +// ---INITIALIZE ALL SLOT-NUMBERS +OUTER_SET slotNumbers = 31 +OUTER_SET nameNumbers = 2 diff --git a/Demos/Demo_IWDEE/en_US/InitVoxArrays.tpa b/Demos/Demo_IWDEE/en_US/InitVoxArrays.tpa new file mode 100644 index 0000000..2d76513 --- /dev/null +++ b/Demos/Demo_IWDEE/en_US/InitVoxArrays.tpa @@ -0,0 +1,146 @@ +// ---INITIALIZE DYN ARRAY TEXTS +OUTER_SPRINT ~Texts0~ ~Action Acknowledgement 7~ //"!_DEMB3_.wav" Action Acknowledgement 7 for SoD/BGEE/IWDEE or else BGEE2 Select Rare 4 +OUTER_SPRINT ~Texts1~ ~Selected 2~ //"!_DEMBg.wav" Selected 2 +OUTER_SPRINT ~Texts2~ ~Selected 4~ //"!_DEMO0.wav" Selected 4 +OUTER_SPRINT ~Texts3~ ~Action Acknowledgement 4~ //"!_DEMO0_.wav" Action Acknowledgement 4 for SoD/BGEE/IWDEE or else BGEE2 Select Rare 1 +OUTER_SPRINT ~Texts4~ ~Action Acknowledgement 5~ //"!_DEMO1_.wav" Action Acknowledgement 5 for SoD/BGEE/IWDEE or else BGEE2 Select Rare 2 +OUTER_SPRINT ~Texts5~ ~Action Acknowledgement 6~ //"!_DEMO2_.wav" Action Acknowledgement 6 for SoD/BGEE/IWDEE or else BGEE2 Select Rare 3 +OUTER_SPRINT ~Texts6~ ~Action Acknowledgement 7~ //"!_DEMO3_.wav" Action Acknowledgement 7 for SoD/BGEE/IWDEE or else BGEE2 Select Rare 4 +OUTER_SPRINT ~Texts7~ ~Battle Cry 2~ //"!_DEMO8.wav" Battle Cry 2 +OUTER_SPRINT ~Texts8~ ~Battle Cry 3~ //"!_DEMO9.wav" Battle Cry 3 +OUTER_SPRINT ~Texts9~ ~Battle Cry 1~ //"!_DEMOa.wav" Battle Cry 1 +OUTER_SPRINT ~Texts10~ ~Becoming Leader~ //"!_DEMOb.wav" Becoming Leader +OUTER_SPRINT ~Texts11~ ~Tired~ //"!_DEMOc.wav" Tired +OUTER_SPRINT ~Texts12~ ~Bored~ //"!_DEMOd.wav" Bored +OUTER_SPRINT ~Texts13~ ~Badly Wounded~ //"!_DEMOe.wav" Badly Wounded +OUTER_SPRINT ~Texts14~ ~Selected 1~ //"!_DEMOf.wav" Selected 1 +OUTER_SPRINT ~Texts15~ ~Selected 2~ //"!_DEMOg.wav" Selected 2 +OUTER_SPRINT ~Texts16~ ~Battle Cry 4~ //"!_DEMOg_.wav" Battle Cry 4 +OUTER_SPRINT ~Texts17~ ~Selected 3~ //"!_DEMOh.wav" Selected 3 +OUTER_SPRINT ~Texts18~ ~Battle Cry 5~ //"!_DEMOh_.wav" Battle Cry 5 +OUTER_SPRINT ~Texts19~ ~Action Acknowledgement 1~ //"!_DEMOi.wav" Action Acknowledgement 1 +OUTER_SPRINT ~Texts20~ ~Action Acknowledgement 2~ //"!_DEMOj.wav" Action Acknowledgement 2 +OUTER_SPRINT ~Texts21~ ~Action Acknowledgement 3~ //"!_DEMOk.wav" Action Acknowledgement 3 +OUTER_SPRINT ~Texts22~ ~Selected 5~ //"!_DEMOk_.wav" Selected 5 +OUTER_SPRINT ~Texts23~ ~Beeing Hit~ //"!_DEMOl.wav" Beeing Hit +OUTER_SPRINT ~Texts24~ ~Selected 6~ //"!_DEMOl_.wav" Selected 6 +OUTER_SPRINT ~Texts25~ ~Dying~ //"!_DEMOm.wav" Dying +OUTER_SPRINT ~Texts26~ ~IWDEE Action Acknowledgement 4~ //"!_DEMOs.wav" BGEE[IWDEE] Action Acknowledgement 4 or Action Acknowledgement 4 for BGEE2 +OUTER_SPRINT ~Texts27~ ~IWDEE Action Acknowledgement 5~ //"!_DEMOt.wav" BGEE[IWDEE] Action Acknowledgement 5 or Action Acknowledgement 5 for BGEE2 +OUTER_SPRINT ~Texts28~ ~IWDEE Action Acknowledgement 6~ //"!_DEMOu.wav" BGEE[IWDEE] Action Acknowledgement 6 or Action Acknowledgement 6 for BGEE2 +OUTER_SPRINT ~Texts29~ ~IWDEE Action Acknowledgement 7~ //"!_DEMOv.wav" BGEE[IWDEE] Action Acknowledgement 7 or Action Acknowledgement 7 for BGEE2 +OUTER_SPRINT ~Texts30~ ~Reaction to Party Member Death~ //"!_DEMOw.wav" Reaction to Party Member Death +LAM ~!_Texts~ +// ---INITIALIZE DYN ARRAY NAMES +OUTER_SPRINT ~VoxNames0~ ~!_DEMO~ +OUTER_SPRINT ~VoxNames1~ ~!_DEMB~ +LAM ~!_VoxNames~ +// ---INITIALIZE DYN ARRAY SELECTABLE NAMES +OUTER_SPRINT ~VoxSelectNames0~ ~!_Demo(Complete):Female Robot~ +OUTER_SPRINT ~VoxSelectNames1~ ~!_Demo(Incomplete):Female Robot~ +LAM ~!_VoxSelectNames~ +// ---INITIALIZE DYN ARRAY SOUNDS +OUTER_SPRINT ~Sounds0~ ~!_DEMB3_~ +OUTER_SPRINT ~Sounds1~ ~!_DEMBg~ +OUTER_SPRINT ~Sounds2~ ~!_DEMO0~ +OUTER_SPRINT ~Sounds3~ ~!_DEMO0_~ +OUTER_SPRINT ~Sounds4~ ~!_DEMO1_~ +OUTER_SPRINT ~Sounds5~ ~!_DEMO2_~ +OUTER_SPRINT ~Sounds6~ ~!_DEMO3_~ +OUTER_SPRINT ~Sounds7~ ~!_DEMO8~ +OUTER_SPRINT ~Sounds8~ ~!_DEMO9~ +OUTER_SPRINT ~Sounds9~ ~!_DEMOa~ +OUTER_SPRINT ~Sounds10~ ~!_DEMOb~ +OUTER_SPRINT ~Sounds11~ ~!_DEMOc~ +OUTER_SPRINT ~Sounds12~ ~!_DEMOd~ +OUTER_SPRINT ~Sounds13~ ~!_DEMOe~ +OUTER_SPRINT ~Sounds14~ ~!_DEMOf~ +OUTER_SPRINT ~Sounds15~ ~!_DEMOg~ +OUTER_SPRINT ~Sounds16~ ~!_DEMOg_~ +OUTER_SPRINT ~Sounds17~ ~!_DEMOh~ +OUTER_SPRINT ~Sounds18~ ~!_DEMOh_~ +OUTER_SPRINT ~Sounds19~ ~!_DEMOi~ +OUTER_SPRINT ~Sounds20~ ~!_DEMOj~ +OUTER_SPRINT ~Sounds21~ ~!_DEMOk~ +OUTER_SPRINT ~Sounds22~ ~!_DEMOk_~ +OUTER_SPRINT ~Sounds23~ ~!_DEMOl~ +OUTER_SPRINT ~Sounds24~ ~!_DEMOl_~ +OUTER_SPRINT ~Sounds25~ ~!_DEMOm~ +OUTER_SPRINT ~Sounds26~ ~!_DEMOs~ +OUTER_SPRINT ~Sounds27~ ~!_DEMOt~ +OUTER_SPRINT ~Sounds28~ ~!_DEMOu~ +OUTER_SPRINT ~Sounds29~ ~!_DEMOv~ +OUTER_SPRINT ~Sounds30~ ~!_DEMOw~ +LAM ~!_Sounds~ +// ---INITIALIZE DYN ARRAY POSITIONS +ACTION_IF (GAME_IS ~bgee~) OR (FILE_EXISTS ~sod-dlc.zip~) OR (FILE_EXISTS ~dlc/sod-dlc.zip~) OR (GAME_IS ~iwdee~) THEN +BEGIN +OUTER_SET ~Positions0~ = 38 +OUTER_SET ~Positions1~ = 27 +OUTER_SET ~Positions2~ = 29 +OUTER_SET ~Positions3~ = 35 +OUTER_SET ~Positions4~ = 36 +OUTER_SET ~Positions5~ = 37 +OUTER_SET ~Positions6~ = 38 +OUTER_SET ~Positions7~ = 10 +OUTER_SET ~Positions8~ = 11 +OUTER_SET ~Positions9~ = 9 +OUTER_SET ~Positions10~ = 6 +OUTER_SET ~Positions11~ = 7 +OUTER_SET ~Positions12~ = 8 +OUTER_SET ~Positions13~ = 20 +OUTER_SET ~Positions14~ = 26 +OUTER_SET ~Positions15~ = 27 +OUTER_SET ~Positions16~ = 12 +OUTER_SET ~Positions17~ = 28 +OUTER_SET ~Positions18~ = 13 +OUTER_SET ~Positions19~ = 32 +OUTER_SET ~Positions20~ = 33 +OUTER_SET ~Positions21~ = 34 +OUTER_SET ~Positions22~ = 30 +OUTER_SET ~Positions23~ = 18 +OUTER_SET ~Positions24~ = 31 +OUTER_SET ~Positions25~ = 19 +OUTER_SET ~Positions26~ = 79 +OUTER_SET ~Positions27~ = 80 +OUTER_SET ~Positions28~ = 81 +OUTER_SET ~Positions29~ = 82 +OUTER_SET ~Positions30~ = 53 +LAM ~!_Positions~ +END +// ---INITIALIZE DYN ARRAY POSITIONS +ACTION_IF (GAME_IS ~bg2ee~) THEN +BEGIN +OUTER_SET ~Positions0~ = 78 +OUTER_SET ~Positions1~ = 27 +OUTER_SET ~Positions2~ = 29 +OUTER_SET ~Positions3~ = 75 +OUTER_SET ~Positions4~ = 76 +OUTER_SET ~Positions5~ = 77 +OUTER_SET ~Positions6~ = 78 +OUTER_SET ~Positions7~ = 10 +OUTER_SET ~Positions8~ = 11 +OUTER_SET ~Positions9~ = 9 +OUTER_SET ~Positions10~ = 6 +OUTER_SET ~Positions11~ = 7 +OUTER_SET ~Positions12~ = 8 +OUTER_SET ~Positions13~ = 20 +OUTER_SET ~Positions14~ = 26 +OUTER_SET ~Positions15~ = 27 +OUTER_SET ~Positions16~ = 12 +OUTER_SET ~Positions17~ = 28 +OUTER_SET ~Positions18~ = 13 +OUTER_SET ~Positions19~ = 32 +OUTER_SET ~Positions20~ = 33 +OUTER_SET ~Positions21~ = 34 +OUTER_SET ~Positions22~ = 30 +OUTER_SET ~Positions23~ = 18 +OUTER_SET ~Positions24~ = 31 +OUTER_SET ~Positions25~ = 19 +OUTER_SET ~Positions26~ = 35 +OUTER_SET ~Positions27~ = 36 +OUTER_SET ~Positions28~ = 37 +OUTER_SET ~Positions29~ = 38 +OUTER_SET ~Positions30~ = 53 +LAM ~!_Positions~ +END diff --git a/Demos/Demo_IWDEE/lib/dialogTlkFunctionalities.tph b/Demos/Demo_IWDEE/lib/dialogTlkFunctionalities.tph new file mode 100644 index 0000000..370c17c --- /dev/null +++ b/Demos/Demo_IWDEE/lib/dialogTlkFunctionalities.tph @@ -0,0 +1,123 @@ +// Never Forget: Comments can "lie", but code not so much ;P +//-------------------------------------------------// +// Contains self defined dialog.tlk functionalities// +//-------------------------------------------------// + + +// Purpose: like RESOLVE_STR_REF, but takes only string values to resolve text +// and soundfile names. +// --------------------------------------------------------------------------- +// Parameters:| +// ============ +// text -> The text found in dialog.tlk +// sound -> The name of the soundfile without e.g. ".wav" found in the dialog.tlk +// strRef -> The string reference number which is found +DEFINE_DIMORPHIC_FUNCTION RESOLVE_STR_REF_WITH_STRINGS + STR_VAR + text = ~!_NULL~ + sound = ~!_NULL~ + RET + strRef +BEGIN + // Check if valid text argument is given. + ACTION_IF (~%text%~ STRING_EQUAL ~!_NULL~) THEN + BEGIN + FAIL ~DEFINE_DIMORPHIC_FUNCTION RESOLVE_STR_REF_WITH_STRINGS -> The correct argument for text is missing. The argument !_NULL is forbidden.~ + END + // Checks if a valid voxSound is given + ACTION_IF (~%sound%~ STRING_EQUAL ~!_NULL~) THEN + BEGIN + FAIL ~DEFINE_DIMORPHIC_FUNCTION RESOLVE_STR_REF_WITH_STRINGS -> The correct argument for sound is missing. The argument !_NULL is forbidden.~ + END + // Checks if sound name has more than 8 characters + ACTION_IF (STRING_LENGTH ~%sound%~ > 8) THEN + BEGIN + OUTER_SET numbers = STRING_LENGTH ~%sound%~ + FAIL ~DEFINE_DIMORPHIC_FUNCTION RESOLVE_STR_REF_WITH_STRINGS -> The argument '%sound%' for sound is %numbers% characters long. The maximum allowed length for this argument is 8 characters~ + END + + // Core part of this function. This part takes the string parameters + // and uses them in the same way as RESOLVE_STR_REF. + <<<<<<<<./weidu_external/workspace/!_TemporaryResolveStrRef.tph + OUTER_SET strRef = RESOLVE_STR_REF(~%text%~ [%sound%]) + >>>>>>>> + COPY ~./weidu_external/workspace/!_TemporaryResolveStrRef.tph~ ~./weidu_external/%MOD_FOLDER%/temp/values/!_TemporaryResolveStrRef.tph~ EVALUATE_BUFFER + REINCLUDE ~./weidu_external/%MOD_FOLDER%/temp/values/!_TemporaryResolveStrRef.tph~ + +END// End of "RESOLVE_STR_REF_WITH_STRINGS" + + +// Purpose: like STR_SET_EVAL_WITH_STRINGS, but takes only string values to resolve text +// and soundfile names. +// ------------------------------------------------------------------------------------- +// Parameters:| +// ============ +// text -> The text that will be replaced at the strref position in dialog.tlk +// sound -> The name of the soundfile without e.g. ".wav" found in the dialog.tlk +// strref -> The stringref index value used as the position in dialog.tlk +DEFINE_DIMORPHIC_FUNCTION STR_SET_EVAL_WITH_STRINGS + INT_VAR + strref = 0 + STR_VAR + text = ~!_NULL~ + sound = ~!_NULL~ +BEGIN + // Check if valid text argument is given. + ACTION_IF (~%text%~ STRING_EQUAL ~!_NULL~) THEN + BEGIN + FAIL ~DEFINE_DIMORPHIC_FUNCTION STR_SET_EVAL_WITH_STRINGS -> The correct argument for text is missing. The argument !_NULL is forbidden.~ + END + // Checks if a valid voxSound is given + ACTION_IF (~%sound%~ STRING_EQUAL ~!_NULL~) THEN + BEGIN + FAIL ~DEFINE_DIMORPHIC_FUNCTION STR_SET_EVAL_WITH_STRINGS -> The correct argument for sound is missing. The argument !_NULL is forbidden.~ + END + // Checks if a valid strref is given + ACTION_IF (~%strref%~ < 0) THEN + BEGIN + FAIL ~DEFINE_DIMORPHIC_FUNCTION STR_SET_EVAL_WITH_STRINGS -> The correct argument for strref is missing. The value is %strref%, but it needs to be greater or equal than zero.~ + END + // Checks if sound name has more than 8 characters + ACTION_IF (STRING_LENGTH ~%sound%~ > 8) THEN + BEGIN + OUTER_SET numbers = STRING_LENGTH ~%sound%~ + FAIL ~DEFINE_DIMORPHIC_FUNCTION STR_SET_EVAL_WITH_STRINGS -> The argument '%sound%' for sound is %numbers% characters long. The maximum allowed length for this argument is 8 characters~ + END + + // Core part of this function. This part takes the string parameters + // and uses them in the same way as STRING_SET_EVALUATE. + <<<<<<<<./weidu_external/workspace/!_TemporaryStringSetEvaluate.tph + STRING_SET_EVALUATE %strref% ~%text%~ [%sound%] + >>>>>>>> + COPY ~./weidu_external/workspace/!_TemporaryStringSetEvaluate.tph~ ~./weidu_external/%MOD_FOLDER%/temp/values/!_TemporaryStringSetEvaluate.tph~ EVALUATE_BUFFER + REINCLUDE ~./weidu_external/%MOD_FOLDER%/temp/values/!_TemporaryStringSetEvaluate.tph~ + +END// End of "STR_SET_EVAL_WITH_STRINGS" + + +// WARNING: DO NOT USE THIS FUNCTION! Use WeiDU's NEXT_STRREF instead to determine the highest strref! +// Purpose: Calculates the highest strref value in dialog.tlk +// by iteratively counting through the file. +// Returns an incorrect value when used for a language other than English +// regarding the Enhanced Edition versions. +// ----------------------------------------------------------------------------------------------------- +// Parameters:| +// ============ +// strRef -> The highest strref value in dialog.tlk +DEFINE_DIMORPHIC_FUNCTION HIGHEST_STR_REF_BY_COUNTING + RET + strRef +BEGIN + OUTER_SET strRef = 0 + // Loops over dialog.tlk + ALTER_TLK BEGIN + SET strRef = strRef+1 + END + // Subtracting 1 from strRef to account for the fact that the last iteration + // of the loop increments strRef even though it is not a valid strref value. + OUTER_SET strRef = strRef - 1 + + // Function is deprecated + WARN ~HIGHEST_STR_REF_BY_COUNTING -> DO NOT USE THIS FUNCTION! Use WeiDU's NEXT_STRREF instead to determine the highest strref!~ + +END// End of "HIGHEST_STR_REF_BY_COUNTING" \ No newline at end of file diff --git a/Demos/Demo_IWDEE/lib/errors.tph b/Demos/Demo_IWDEE/lib/errors.tph new file mode 100644 index 0000000..bc3dccc --- /dev/null +++ b/Demos/Demo_IWDEE/lib/errors.tph @@ -0,0 +1,39 @@ +// Never Forget: Comments can "lie", but code not so much ;P +//----------------------------------------// +// Contains custom defined error functions// +//----------------------------------------// + +// Purpose: Raises an error if the specified file exists and prevents further installation +// --------------------------------------------------------------------------------------- +// Parameters:| +// ============ +// file -> The name of the file to check for existence +// message -> The error message to display upon file existence +DEFINE_DIMORPHIC_FUNCTION ~ERR_EVALUATE_FILE_EXISTANCE~ + STR_VAR + file = ~~ + message = ~~ +BEGIN + ACTION_IF (FILE_EXISTS ~%file%~) THEN + BEGIN + FAIL ~%message%~ + END +END // End of "ERR_EVALUATE_FILE_EXISTANCE" + + +// Purpose: Raises an error if the specified WeiDU game short is detected and prevents further installation +// -------------------------------------------------------------------------------------------------------- +// Parameters:| +// ============ +// game -> The WeiDU game short identifier to check for installation +// message -> The error message to display if the specified game is detected +DEFINE_DIMORPHIC_FUNCTION ~ERR_EVALUATE_GAME_EXISTANCE~ + STR_VAR + game = ~~ + message = ~~ +BEGIN + ACTION_IF (GAME_IS ~%game%~) THEN + BEGIN + FAIL ~%message%~ + END +END // End of "ERR_EVALUATE_GAME_EXISTANCE" \ No newline at end of file diff --git a/Demos/Demo_IWDEE/lib/fileHandling.tph b/Demos/Demo_IWDEE/lib/fileHandling.tph new file mode 100644 index 0000000..70aed3c --- /dev/null +++ b/Demos/Demo_IWDEE/lib/fileHandling.tph @@ -0,0 +1,38 @@ +// Never Forget: Comments can "lie", but code not so much ;P +//--------------------------------------// +// Contains self defined file operations// +//--------------------------------------// + + +// ---DEFAULT/INIT ARGUMENTS(Don't change this!) +// USAGE: Copy the variable 1 to 1 to somewhere else where you need it +// and change its value before before calling the macro. +// This macro can not be used in patching. +OUTER_SPRINT ~!_filename~ ~!_NULL~ +// Purpose: Creates a file on a defined location(NOTE: default location is the gamefolder) +// -------------------------------------------------------------------------------------- +// Parameters:| +// ============ +// !_filename -> The name of the file or the path including the file(e.g. "weidu_external/workspace/filename.tph") +DEFINE_ACTION_MACRO CREATE_FILE +BEGIN + // ALL VARIABLES IN THIS MACRO AND DEFAULT VALUES + // ---------------------------------------------- + // STRING ~!_filename~ ~!_NULL~ + // ---------------------------------------------- + + // Checks if a proper file name is given + ACTION_IF(~%!_filename%~ STRING_EQUAL ~!_NULL~) THEN + BEGIN + FAIL ~DEFINE_ACTION_MACRO CREATE_FILE -> The correct argument for filename is missing. The argument !_NULL is forbidden.~ + END + + // Defines file inline then creates and copies file to location + <<<<<<<<./weidu_external/workspace/!_temporaryFile.tph + >>>>>>>> + COPY ~./weidu_external/workspace/!_temporaryFile.tph~ ~./%!_filename%~ + + // Resets macro variable + OUTER_SPRINT ~!_filename~ ~!_NULL~ + +END// End of "CREATE_FILE" \ No newline at end of file diff --git a/Demos/Demo_IWDEE/lib/warnings.tph b/Demos/Demo_IWDEE/lib/warnings.tph new file mode 100644 index 0000000..c1fdee5 --- /dev/null +++ b/Demos/Demo_IWDEE/lib/warnings.tph @@ -0,0 +1,45 @@ +// Never Forget: Comments can "lie", but code not so much ;P +//------------------------------------------// +// Contains custom defined warning functions// +//------------------------------------------// + +// Purpose: Raises a warning if the specified file exists +// ------------------------------------------------------ +// Parameters:| +// ============ +// file -> The name of the file to check for existence +// message -> The warning message to display upon file existence +DEFINE_DIMORPHIC_FUNCTION ~WARN_EVALUATE_FILE_EXISTANCE~ + STR_VAR + file = ~~ + message = ~~ +BEGIN + ACTION_IF (FILE_EXISTS ~%file%~) THEN + BEGIN + PRINT ~--------~ + PRINT ~WARNING:~ + PRINT ~--------~ + PRINT ~%message%~ + END +END // End of "WARN_EVALUATE_FILE_EXISTANCE" + + +// Purpose: Raises a warning if the specified WeiDU game short is detected +// ----------------------------------------------------------------------- +// Parameters:| +// ============ +// game -> The WeiDU game short identifier to check for installation +// message -> The warning message to display if the specified game is detected +DEFINE_DIMORPHIC_FUNCTION ~WARN_EVALUATE_GAME_EXISTANCE~ + STR_VAR + game = ~~ + message = ~~ +BEGIN + ACTION_IF (GAME_IS ~%game%~) THEN + BEGIN + PRINT ~--------~ + PRINT ~WARNING:~ + PRINT ~--------~ + PRINT ~%message%~ + END +END // End of "WARN_EVALUATE_GAME_EXISTANCE" \ No newline at end of file diff --git a/Demos/Demo_IWDEE/lib/windows/dynArrayFunctionalities.tph b/Demos/Demo_IWDEE/lib/windows/dynArrayFunctionalities.tph new file mode 100644 index 0000000..e4bd38b --- /dev/null +++ b/Demos/Demo_IWDEE/lib/windows/dynArrayFunctionalities.tph @@ -0,0 +1,413 @@ +// Never Forget: Comments can "lie", but code not so much ;P +//-----------------------------------------------------------// +// Contains self defined pseudo dynamic array functionalities// +//-----------------------------------------------------------// + +// GLOBAL LIB VARIABLES(Don't change these) +// ---------------------------------------- +OUTER_SPRINT ~!_bufferValue~ ~~ +OUTER_SPRINT ~!_arraySlots~ ~~ + + + +// ---DEFAULT/INIT ARGUMENTS(Don't change these!) +// USAGE: Copy these variables to another location and change their values before calling the macro. +// This macro can not be used in patching. +OUTER_SET ~!_slotNumbers~ = 0 +OUTER_SPRINT ~!_setArrayName~ ~!_NULL~ +// Purpose: Creates a dynamic array and patch dynamic array +// ---------------------------------------------------------------------------------------------- +// Parameters:| +// ============ +// !_slotNumbers -> The desired number of elements that the array can hold +// !_setArrayName -> The array name which is needed for further "DYN_ARRAY" function arguments +// ---------------------------------------------------------------------------------------------- +DEFINE_ACTION_MACRO DYN_ARRAY_CREATE +BEGIN + // ALL VARIABLES IN THIS MACRO AND DEFAULT VALUES + // ---------------------------------------------- + // INTEGER ~!_slotNumbers~ = 0 + // STRING ~!_setArrayName~ ~!_NULL~ + // INTEGER index = 0 + // STRING ~!_arraySlots~ ~~ + // ---------------------------------------------- + + // Local variables which must not or can't be manipulated outside of macros + LOCAL_SET index = 0 + OUTER_SPRINT ~!_arraySlots~ ~~ + + // Checks if a proper array name is given + ACTION_IF (~%!_setArrayName%~ STRING_EQUAL ~!_NULL~) THEN + BEGIN + FAIL ~DEFINE_ACTION_MACRO DYN_ARRAY_CREATE -> The correct array name as an argument is missing. The array name !_NULL is forbidden.~ + END + // Checks if slot numbers are not out of bounds + ACTION_IF (~%!_slotNumbers%~ <= 0) THEN + BEGIN + FAIL ~DEFINE_ACTION_MACRO DYN_ARRAY_CREATE %!_setArrayName% -> The correct SlotNumbers are missing as an argument. Value must be greater than 0!~ + END + + // Creates empty inline files which are needed + // for buffering current values regarding dyn arrays and patch dyn arrays + <<<<<<<<./weidu_external/workspace/!_temporaryArrayBuffer.tph + >>>>>>>> + <<<<<<<<./weidu_external/workspace/!_temporaryPatchArrayBuffer.tph + >>>>>>>> + COPY ~./weidu_external/workspace/!_temporaryArrayBuffer.tph~ ~./weidu_external/%MOD_FOLDER%/temp/arrays/values/!_%!_setArrayName%Buffer.tph~ + COPY ~./weidu_external/workspace/!_temporaryPatchArrayBuffer.tph~ ~./weidu_external/%MOD_FOLDER%/temp/arrays/values/!_patch%!_setArrayName%Buffer.tph~ + + // Creates an inline file which content is needed to define the dynamic array. + <<<<<<<<./weidu_external/workspace/!_temporaryArray.tph + DEFINE_ACTION_MACRO ~!_%!_setArrayName%~ + BEGIN + ACTION_DEFINE_ARRAY ~%!_setArrayName%~ BEGIN >>>>>>>> + + // Creates an inline file which content is needed to define the dynamic patch array. + <<<<<<<<./weidu_external/workspace/!_temporaryPatchArray.tph + DEFINE_PATCH_MACRO ~!_%!_setArrayName%~ + BEGIN + PATCH_DEFINE_ARRAY ~%!_setArrayName%~ BEGIN >>>>>>>> + + // Copies the content of the temporary arrays to dynamic named files so that they can be reused for another array + COPY ~./weidu_external/workspace/!_temporaryArray.tph~ ~./weidu_external/%MOD_FOLDER%/temp/arrays/!_%!_setArrayName%.tph~ EVALUATE_BUFFER + COPY ~./weidu_external/workspace/!_temporaryPatchArray.tph~ ~./weidu_external/%MOD_FOLDER%/temp/arrays/!_patch%!_setArrayName%.tph~ EVALUATE_BUFFER + + + // Includes array element slots as variables into the array (%WNL% means Windows New Line) + OUTER_FOR(index = 0; index < ~!_slotNumbers~; ++index) BEGIN + OUTER_SPRINT ~!_arraySlots~ ~%!_arraySlots% "%%!_setArrayName%%index%%"%WNL%~ + END + APPEND_OUTER ~./weidu_external/%MOD_FOLDER%/temp/arrays/!_%!_setArrayName%.tph~ ~%!_arraySlots%~ + APPEND_OUTER ~./weidu_external/%MOD_FOLDER%/temp/arrays/!_patch%!_setArrayName%.tph~ ~%!_arraySlots%~ + + // Closes dynamic array and makes it usable by WeiDU with + // e.g. INCLUDE/REINCLUDE (The tab space is for formatting) + APPEND_OUTER ~./weidu_external/%MOD_FOLDER%/temp/arrays/!_%!_setArrayName%.tph~ ~ END END~ + APPEND_OUTER ~./weidu_external/%MOD_FOLDER%/temp/arrays/!_patch%!_setArrayName%.tph~ ~ END END~ + REINCLUDE ~./weidu_external/%MOD_FOLDER%/temp/arrays/!_%!_setArrayName%.tph~ + REINCLUDE ~./weidu_external/%MOD_FOLDER%/temp/arrays/!_patch%!_setArrayName%.tph~ + + // Resets macro variables + OUTER_SET ~!_slotNumbers~ = 0 + OUTER_SPRINT ~!_setArrayName~ ~!_NULL~ + +END// End of "DYN_ARRAY_CREATE" + + + +// Purpose: Reads the buffer file for the specified array into a file. +// This function mustn't be used outside this library. +// ---------------------------------------------------------------------------------------------- +// Parameters:| +// ============ +// position -> The array slot position/index in which the new value will be written +// UseArrayName -> The required name of the array in which the new values will be written. +// bufferValue -> The required string containing the buffered values +DEFINE_DIMORPHIC_FUNCTION DYN_ARRAY_BUFFER_TO_FILE + INT_VAR + position = "-1" + STR_VAR + UseArrayName= ~!_NULL~ + bufferValue = ~~ + functionType= ~!_NULL~ +BEGIN + ACTION_IF (~%functionType%~ STRING_EQUAL ~PATCH~) THEN + BEGIN + // This little line does not work inside of a patch macros, + // thus it is wrapped in this dimorphic function + APPEND_OUTER ~./weidu_external/%MOD_FOLDER%/temp/arrays/values/!_patch%UseArrayName%Buffer.tph~ ~%bufferValue%~ + END ELSE ACTION_IF (~%functionType%~ STRING_EQUAL ~OUTER~) THEN + BEGIN + + APPEND_OUTER ~./weidu_external/%MOD_FOLDER%/temp/arrays/values/!_%UseArrayName%Buffer.tph~ ~%bufferValue%~ + END ELSE + BEGIN + + FAIL ~DEFINE_DIMORPHIC_FUNCTION DYN_ARRAY_BUFFER_TO_FILE %UseArrayName% -> The function type argument is missing or invalid. The allowed function types are PATCH and OUTER.~ + END + +END// End of "DYN_ARRAY_BUFFER_TO_FILE" + + + +// ---DEFAULT/INIT ARGUMENTS(Don't change these!) +// USAGE: Copy the these variables to another location and change their values before calling the macro. +// It is important to note that this macro has a patch version. +OUTER_SET ~!_position~ = "-1" +OUTER_SET ~!_maxSlots~ = "-1" +OUTER_SET ~!_collected~= "-1" +OUTER_SPRINT ~!_useArrayName~ ~!_NULL~ +OUTER_SPRINT ~!_arrayValue~ ~!_NULL~ +// Purpose: Replaces/sets values in a dynamic array +// ------------------------------------------------ +// Parameters:| +// ============ +// !_position -> The array slot position/index in which the new value will be written +// !_maxSlots -> The highest value the argument for position/index is allowed to be. +// The maximum is in general the max number of elments the array can contain +// !_collected -> A flag that indicates whether or not the collection process is complete. +// 0: Collection is in progress. +// 1: Collection is complete. +// !_useArrayName -> The array name in which the array value is written +// !_arrayValue -> The value that is planned to be written to the array. +DEFINE_ACTION_MACRO DYN_ARRAY_SET_VALUES +BEGIN + // ALL VARIABLES IN THIS MACRO AND DEFAULT VALUES + // ---------------------------------------------- + // INTEGER ~!_position~ = "-1" + // INTEGER ~!_maxSlots~ = "-1" + // INTEGER ~!_collected~= "-1" + // STRING ~!_useArrayName~ ~!_NULL~ + // INTEGER/STRING ~!_arrayValue~ ~!_NULL~ + // STRING ~!_bufferValue~ ~~ + // ---------------------------------------------- + + // Corrects number of elements to slot index + OUTER_SET ~!_maxSlots~ = ~%!_maxSlots%~ - 1 + + // Checks if an array index is not given + ACTION_IF (~%!_position%~ <= "-1") THEN + BEGIN + FAIL ~DEFINE_ACTION_MACRO DYN_ARRAY_SET_VALUES %!_useArrayName% -> The correct position as an argument is missing. The position value must be greater than -1!~ + END + // Checks if a highest array slot number is not given or if it makes any sense + ACTION_IF ( (~%!_maxSlots%~ <= "-1") OR (~%!_maxSlots%~ < ~%!_position%~) ) THEN + BEGIN + // Prepares value for error output + OUTER_SET ~!_maxSlots~ = ~%!_maxSlots%~ + 1 + FAIL ~DEFINE_ACTION_MACRO DYN_ARRAY_SET_VALUES %!_useArrayName% -> The correct maxSlots as an argument is missing. The maxSlots value is %!_maxSlots%, but must be greater than -1 and greater %!_position%!~ + END + // Checks if an array name is not given + ACTION_IF (~%!_useArrayName%~ STRING_EQUAL ~!_NULL~) THEN + BEGIN + FAIL ~DEFINE_ACTION_MACRO DYN_ARRAY_SET_VALUES -> The correct array name as an argument is missing. The array name !_NULL is forbidden.~ + END + // Checks if an array index is not given + ACTION_IF (~%!_collected%~ <= "-1" OR ~%!_collected%~ >= 2) THEN + BEGIN + FAIL ~DEFINE_ACTION_MACRO DYN_ARRAY_SET_VALUES %!_useArrayName% -> The argument for "!_collected" is %!_collected%. Allowed values are 0(for still collecting) and 1(value collection is done) !~ + END + + // Checks if the array value is an integer and calls the appropriate function + // to prepare the abstract array element information. + ACTION_IF (IS_AN_INT ~%!_arrayValue%~) THEN + BEGIN + ACTION_IF (~%!_arrayValue%~ > "-1") THEN + BEGIN + // Positive values including 0 + OUTER_SPRINT ~!_bufferValue~ ~~~~~%!_bufferValue% OUTER_SET ~%!_useArrayName%%!_position%~ = %!_arrayValue%%WNL%~~~~~ + END ELSE + BEGIN + // Negative values + OUTER_SPRINT ~!_bufferValue~ ~~~~~%!_bufferValue% OUTER_SET ~%!_useArrayName%%!_position%~ = "%!_arrayValue%"%WNL%~~~~~ + END + // If value is not integer then it is string + END ELSE + BEGIN + OUTER_SPRINT ~!_bufferValue~ ~~~~~%!_bufferValue% OUTER_SPRINT ~%!_useArrayName%%!_position%~ ~%!_arrayValue%~%WNL%~~~~~ + END + + // If all values are collected then write it into array + ACTION_IF (~%!_collected%~ = 1) THEN + BEGIN + + LAF DYN_ARRAY_BUFFER_TO_FILE + INT_VAR + position = ~%!_position%~ + STR_VAR + UseArrayName= EVAL~%!_useArrayName%~ + bufferValue = EVAL~%!_bufferValue%~ + functionType= EVAL~OUTER~ + END + + // Writes into the dynamic array + REINCLUDE ~./weidu_external/%MOD_FOLDER%/temp/arrays/values/!_%!_useArrayName%Buffer.tph~ + LAM ~!_%!_useArrayName%~ + + // Resets global lib variable + OUTER_SPRINT ~!_bufferValue~ ~~ + // Resets macro variables + OUTER_SET ~!_position~ = "-1" + OUTER_SET ~!_maxSlots~ = "-1" + OUTER_SET ~!_collected~= "-1" + OUTER_SPRINT ~!_useArrayName~ ~!_NULL~ + OUTER_SPRINT ~!_arrayValue~ ~!_NULL~ + END + +END// End of "DYN_ARRAY_SET_VALUES" + + + +// ---DEFAULT/INIT ARGUMENTS(Don't change these!) +// USAGE: Copy the commented SET variables to another location and change their values before calling the macro. +// It is important to note that this macro has a outer version. +//SET ~!_position~ = "-1" +//SET ~!_maxSlots~ = "-1" +//SET ~!_collected~= "-1" +//SPRINT ~!_useArrayName~ ~!_NULL~ +//SPRINT ~!_arrayValue~ ~!_NULL~ +// Purpose: Replaces/sets patch values in a dynamic array +// ------------------------------------------------------ +// Parameters:| +// ============ +// !_position -> The array slot position/index in which the new value will be written +// !_maxSlots -> The highest value the argument for position/index is allowed to be. +// The maximum is in general the max number of elments the array can contain +// !_collected -> A flag that indicates whether or not the collection process is complete. +// 0: Collection is in progress. +// 1: Collection is complete. +// !_useArrayName -> The array name in which the array value is written +// !_arrayValue -> The value that is planned to be written to the array. +DEFINE_PATCH_MACRO DYN_ARRAY_SET_VALUES +BEGIN + // ALL VARIABLES IN THIS MACRO AND DEFAULT VALUES + // ---------------------------------------------- + // INTEGER ~!_position~ = "-1" + // INTEGER ~!_maxSlots~ = "-1" + // INTEGER ~!_collected~= "-1" + // STRING ~!_useArrayName~ ~!_NULL~ + // INTEGER/STRING ~!_arrayValue~ ~!_NULL~ + // STRING ~!_bufferValue~ ~~ + // ---------------------------------------------- + + // Corrects number of elements to slot index + SET ~!_maxSlots~ = ~!_maxSlots~ - 1 + + // Checks if an array index is not given + PATCH_IF (~%!_position%~ <= "-1") THEN + BEGIN + PATCH_FAIL ~DEFINE_PATCH_MACRO DYN_ARRAY_SET_VALUES %!_useArrayName% -> The correct position as an argument is missing. The position value must be greater than -1!~ + END + // Checks if a highest array slot number is not given or if it makes any sense + PATCH_IF ( (~%!_maxSlots%~ <= "-1") OR (~%!_maxSlots%~ < ~%!_position%~) ) THEN + BEGIN + // Prepares value for error output + SET ~!_maxSlots~ = ~!_maxSlots~ + 1 + PATCH_FAIL ~DEFINE_PATCH_MACRO DYN_ARRAY_SET_VALUES %!_useArrayName% -> The correct maxSlots as an argument is missing. The maxSlots value is %!_maxSlots%, but must be greater than -1 and greater %!_position%!~ + END + // Checks if an array name is not given + PATCH_IF (~%!_useArrayName%~ STRING_EQUAL ~!_NULL~) THEN + BEGIN + PATCH_FAIL ~DEFINE_PATCH_MACRO DYN_ARRAY_SET_VALUES -> The correct array name as an argument is missing. The array name !_NULL is forbidden.~ + END + // Checks if an array index is not given + PATCH_IF (~%!_collected%~ <= "-1" OR ~%!_collected%~ >= 2) THEN + BEGIN + PATCH_FAIL ~DEFINE_PATCH_MACRO DYN_ARRAY_SET_VALUES %!_useArrayName% -> The argument for "!_collected" is %!_collected%. Allowed values are 0(for still collecting) and 1(value collection is done) !~ + END + + // Checks if the array value is an integer and calls the appropriate function + // to prepare the abstract array element information. + PATCH_IF (IS_AN_INT ~%!_arrayValue%~) THEN + BEGIN + PATCH_IF (~%!_arrayValue%~ > "-1") THEN + BEGIN + // Positive values including 0 + SPRINT ~!_bufferValue~ ~~~~~%!_bufferValue% SET ~%!_useArrayName%%!_position%~ = %!_arrayValue%%WNL%~~~~~ + END ELSE + BEGIN + // Negative values + SPRINT ~!_bufferValue~ ~~~~~%!_bufferValue% SET ~%!_useArrayName%%!_position%~ = "%!_arrayValue%"%WNL%~~~~~ + END + // If value is not integer then it is string + END ELSE + BEGIN + SPRINT ~!_bufferValue~ ~~~~~%!_bufferValue% SPRINT ~%!_useArrayName%%!_position%~ ~%!_arrayValue%~%WNL%~~~~~ + END + + // If all values are collected then write it into array + PATCH_IF (~%!_collected%~ = 1) THEN + BEGIN + + LPF DYN_ARRAY_BUFFER_TO_FILE + INT_VAR + position = ~%!_position%~ + STR_VAR + UseArrayName= EVAL~%!_useArrayName%~ + bufferValue = EVAL~%!_bufferValue%~ + functionType= EVAL~PATCH~ + END + + // Writes into the dynamic array + PATCH_REINCLUDE ~./weidu_external/%MOD_FOLDER%/temp/arrays/values/!_patch%!_useArrayName%Buffer.tph~ + LPM ~!_%!_useArrayName%~ + + // Resets global lib variable + SPRINT ~!_bufferValue~ ~~ + // Resets macro variables + SET ~!_position~ = "-1" + SET ~!_maxSlots~ = "-1" + SET ~!_collected~= "-1" + SPRINT ~!_useArrayName~ ~!_NULL~ + SPRINT ~!_arrayValue~ ~!_NULL~ + END + +END// End of "DYN_ARRAY_SET_VALUES" + + + +// ---DEFAULT/INIT ARGUMENTS(Don't change these!) +// USAGE: Copy the variable 1 to 1 to somewhere else where you need it +// and change its value before before calling the macro.!!! +// This macro can not be used in patching. +OUTER_SPRINT ~!_deleteArray~ ~!_NULL~ +// Purpose: Deletes all created dynamic array files for patch and outer version +// ---------------------------------------------------------------------------- +// Parameters:| +// ============ +// !_deleteArray -> The array name for which the files will be deleted +// ------------------------------------------------------------------- +DEFINE_ACTION_MACRO DYN_ARRAY_CLEANUP +BEGIN + // ALL VARIABLES IN THIS MACRO AND DEFAULT VALUES + // ---------------------------------------------- + // STRING ~!_deleteArray~ ~!_NULL~ + // ---------------------------------------------- + + // ---WARNING: Will output an error if local variables are not placed directly at the beginning of macros + LOCAL_SPRINT outerBufferFilename ~./weidu_external/%MOD_FOLDER%/temp/arrays/values/!_%!_deleteArray%Buffer.tph~ + LOCAL_SPRINT patchBufferFilename ~./weidu_external/%MOD_FOLDER%/temp/arrays/values/!_patch%!_deleteArray%Buffer.tph~ + LOCAL_SPRINT outerArrayFilename ~./weidu_external/%MOD_FOLDER%/temp/arrays/!_%!_deleteArray%.tph~ + LOCAL_SPRINT patchArrayFilename ~./weidu_external/%MOD_FOLDER%/temp/arrays/!_patch%!_deleteArray%.tph~ + + // The macro fails if no array name is given because it needs to know which array to delete the files for. + ACTION_IF (~%!_deleteArray%~ STRING_EQUAL ~!_NULL~) THEN + BEGIN + FAIL ~DEFINE_ACTION_MACRO DYN_ARRAY_CLEAR_BUFFER -> The correct array name as an argument is missing. The array name !_NULL is forbidden.~ + END + + // Deletes the buffer files for the specified array. + ACTION_IF(FILE_EXISTS ~%outerBufferFilename%~) THEN + BEGIN + DELETE ~%outerBufferFilename%~ + PRINT ~Deleted %outerBufferFilename% belonging to %!_deleteArray% dynamic array~ + END ELSE BEGIN + WARN ~DEFINE_ACTION_MACRO DYN_ARRAY_CLEANUP -> Couldn't find and delete %outerBufferFilename%!~ + END + + ACTION_IF(FILE_EXISTS ~%patchBufferFilename%~) THEN + BEGIN + DELETE ~%patchBufferFilename%~ + PRINT ~Deleted %patchBufferFilename% belonging to %!_deleteArray% dynamic array~ + END ELSE BEGIN + WARN ~DEFINE_ACTION_MACRO DYN_ARRAY_CLEANUP -> Couldn't find and delete %patchBufferFilename%!~ + END + + // Deletes the definition files for the specified array. + ACTION_IF(FILE_EXISTS ~%outerArrayFilename%~) THEN + BEGIN + DELETE ~%outerArrayFilename%~ + PRINT ~Deleted %outerArrayFilename% belonging to %!_deleteArray% dynamic array~ + END ELSE BEGIN + WARN ~DEFINE_ACTION_MACRO DYN_ARRAY_CLEANUP -> Couldn't find and delete %outerArrayFilename%!~ + END + + ACTION_IF(FILE_EXISTS ~%patchArrayFilename%~) THEN + BEGIN + DELETE ~%patchArrayFilename%~ + PRINT ~Deleted %patchArrayFilename% belonging to %!_deleteArray% dynamic array~ + END ELSE BEGIN + WARN ~DEFINE_ACTION_MACRO DYN_ARRAY_CLEANUP -> Couldn't find and delete %patchArrayFilename%!~ + END + +END// End of "DYN_ARRAY_CLEANUP" diff --git a/Demos/Demo_IWDEE/proprietary/!_CheckArrays.tpa b/Demos/Demo_IWDEE/proprietary/!_CheckArrays.tpa new file mode 100644 index 0000000..d6da17c --- /dev/null +++ b/Demos/Demo_IWDEE/proprietary/!_CheckArrays.tpa @@ -0,0 +1,33 @@ +// Never Forget: Comments can "lie", but code not so much ;P +// CHECKS ARRAYS CONSISTENCY +// ------------------------- +// Initilizes flag +OUTER_SET failed = 0 +// Takes the name from the array and compares it to the other names in the array +OUTER_FOR(voxIndex = 0; voxIndex < nameNumbers; ++voxIndex) +BEGIN + // This is the name value that will be compared to the following names in the array + OUTER_SPRINT previousVox $~%voxNameArray%~(~%voxIndex%~) + + // Checks if the all current names in array are subset of previous name + ACTION_IF ( (voxIndex+1) <= (nameNumbers - 1) ) THEN + BEGIN + OUTER_FOR(innerIndex = voxIndex+1; innerIndex < nameNumbers; ++innerIndex) + BEGIN + OUTER_SPRINT currentVox $~%voxNameArray%~(~%innerIndex%~) + + // If subset is found then print warning + ACTION_IF ( (~%currentVox%~ STRING_COMPARE_REGEXP ~^%previousVox%~) = 0 OR (~%previousVox%~ STRING_COMPARE_REGEXP ~^%currentVox%~) = 0 ) THEN + BEGIN + WARN ~FOUND SUBSET: In "CheckArrays.tpa" -> Found voice name subset in "%currentVox%" and "%previousVox%"~ + OUTER_SET failed = 1 + END + END // End of inner for loop + END // End of first "ACTION_IF" +END // End of outer for loop + +// If a subset is found, the installation stops and gives an error message +ACTION_IF (failed = 1) THEN +BEGIN + FAIL ~In "CheckArrays.tpa" -> There are one or more voice name subsets in %voxNameArray%. Please, read the logfile for more information or search terminal output for "FOUND SUBSET".~ +END \ No newline at end of file diff --git a/Demos/Demo_IWDEE/proprietary/!_CheckTlk.tpa b/Demos/Demo_IWDEE/proprietary/!_CheckTlk.tpa new file mode 100644 index 0000000..011c420 --- /dev/null +++ b/Demos/Demo_IWDEE/proprietary/!_CheckTlk.tpa @@ -0,0 +1,223 @@ +// Never Forget: Comments can "lie", but code not so much ;P +// CHECKS AND REAPIRS EXISTING ENTRIES IN DIALOG.TLK +// ------------------------------------------------- + +// DECLARES REPAIR-INDEX ARRAY +// --------------------------- +OUTER_SPRINT ~TLKindexRepaiArray~ ~TLKRepairIndex~ +// This array is only used in this file +OUTER_SET ~!_slotNumbers~ = slotNumbers +OUTER_SPRINT ~!_setArrayName~ ~%TLKindexRepaiArray%~ +LAM DYN_ARRAY_CREATE +// INITIALIZES REPAIR-INDEX ARRAY +// ------------------------------ +OUTER_FOR(repairIndex = 0; repairIndex < slotNumbers; ++repairIndex) +BEGIN + // Filling array with null values + OUTER_SET ~!_position~ = repairIndex + OUTER_SET ~!_maxSlots~ = slotNumbers + OUTER_SET ~!_collected~ = 0 + OUTER_SPRINT ~!_useArrayName~ ~%TLKindexRepaiArray%~ + OUTER_SET ~!_arrayValue~ = "-1" + LAM DYN_ARRAY_SET_VALUES +END +// Inserting all array items into the array(All array values are collected) +OUTER_SET ~!_position~ = repairIndex - 1 +OUTER_SET ~!_maxSlots~ = slotNumbers +OUTER_SET ~!_collected~ = 1 +OUTER_SPRINT ~!_useArrayName~ ~%TLKindexRepaiArray%~ +OUTER_SET ~!_arrayValue~ = "-1" +LAM DYN_ARRAY_SET_VALUES + + +// RECEIVES CURRENT MAX STREF +// -------------------------- +OUTER_SET highestStrref = NEXT_STRREF - 1 +// MONITORING +PRINT ~tlkCheck.tpa -> highestStrref: %highestStrref%~ + + +// FINDS TLK START VALUE +// --------------------- +// Checks games to select the appropriate starting value for strref (the order of if statements is important) +ACTION_IF (GAME_INCLUDES ~sod~) THEN +BEGIN + OUTER_SET startStrref = 71400 // Siege of Dragonspear +END ELSE ACTION_IF (GAME_IS ~bgee~) THEN +BEGIN + OUTER_SET startStrref = 33990 // Baldur's Gate Enhanced Edition +END ELSE ACTION_IF (GAME_IS ~bg2ee~) THEN +BEGIN + OUTER_SET startStrref = 103580 // Baldur's Gate 2 Enhanced Edition +END ELSE ACTION_IF (GAME_IS ~iwdee~) THEN +BEGIN + OUTER_SET startStrref = 41280 // Icewind Dale 2 Enhanced Edition +END ELSE +BEGIN + OUTER_SET startStrref = 0 +END +// MONITORING +PRINT ~tlkCheck.tpa -> startStrref: %startStrref%~ + + +// CHECKS FOR PRESENT STRREF-VALUES +// --------------------------------- +// tlk loop variables +OUTER_SET strref = startStrref +OUTER_SET specialCondition = 0 +OUTER_SET lastStrref = 0 +OUTER_SET lastIndex = 0 +OUTER_SET lastRepairStrref = 0 +OUTER_SET lastRepairIndex = 0 +ALTER_TLK_RANGE startStrref highestStrref BEGIN + + // Gets sound and text from the string reference + GET_STRREF strref refText + GET_STRREF_S strref refSound + + // Loops through arrays and checks if current string reference values ​​already exist in dialog.tlk + FOR(index=0; index < slotNumbers; ++index) + BEGIN + SPRINT arrText $~%refTextArray%~(~%index%~) + SPRINT arrSound $~%refSoundArray%~(~%index%~) + + // Text and sound references already present + PATCH_IF(~%refSound%~ STRING_EQUAL ~%arrSound%~) AND + (~%refText%~ STRING_EQUAL ~%arrText%~) THEN + BEGIN + // Sets dyn array value to !_NULL + SET ~!_position~ = index + SET ~!_maxSlots~ = slotNumbers + SET ~!_collected~ = 0 + SPRINT ~!_useArrayName~ ~%refTextArray%~ + SPRINT ~!_arrayValue~ ~!_NULL~ + LPM DYN_ARRAY_SET_VALUES + + // Sets the current string reference value + SET ~!_position~ = index + SET ~!_maxSlots~ = slotNumbers + SET ~!_collected~ = 0 + SPRINT ~!_useArrayName~ ~%TLKindexArray%~ + SET ~!_arrayValue~ = strref + LPM DYN_ARRAY_SET_VALUES + + // Sets special condition to true(1). + // When the collection of array values ​​is completed, the correct index of the last iteration is saved + SET specialCondition= 1 + SET lastIndex = index + SET lastStrref = strref + // MONITORING + PATCH_PRINT ~tlkCheck.tpa -> Reference for "%arrText%[%arrSound%]" in dialog.tlk is already exsiting on position %strref%~ + END + // If sound reference already exists but the text doesn't fit + ELSE PATCH_IF (~%refSound%~ STRING_EQUAL ~%arrSound%~) AND + NOT (~%refText%~ STRING_EQUAL ~%arrText%~) AND + NOT (~%arrText%~ STRING_EQUAL ~!_NULL~) THEN + BEGIN + // Sets current string reference value which needs repair + SET ~!_position~ = index + SET ~!_maxSlots~ = slotNumbers + SET ~!_collected~ = 0 + SPRINT ~!_useArrayName~ ~%TLKindexRepaiArray%~ + SET ~!_arrayValue~ = strref + LPM DYN_ARRAY_SET_VALUES + + // Sets current string reference value + SET ~!_position~ = index + SET ~!_maxSlots~ = slotNumbers + SET ~!_collected~ = 0 + SPRINT ~!_useArrayName~ ~%TLKindexArray%~ + SET ~!_arrayValue~ = strref + LPM DYN_ARRAY_SET_VALUES + + // Sets special condition to true(1) + // When the collection of array values ​​is completed, the correct index of the last iteration is saved + SET specialCondition = 1 + SET lastIndex = index + SET lastStrref = strref + SET lastRepairIndex = index + SET lastRepairStrref = strref + // MONITORING + PATCH_PRINT ~tlkCheck.tpa -> Correcting "%refText%" to "%arrText%" in dialog.tlk on position %strref%~ + END + + END // End of "FOR" + + // Inserting all array items into the array(All array values are collected) + PATCH_IF(specialCondition = 1) THEN + BEGIN + // Resets flag/condition + SET specialCondition = 0 + + // Sets current repair index value (Last repair index value) + SET ~!_position~ = lastRepairIndex + SET ~!_maxSlots~ = slotNumbers + SET ~!_collected~ = 1 + SPRINT ~!_useArrayName~ ~%TLKindexRepaiArray%~ + SET ~!_arrayValue~ = lastRepairStrref + LPM DYN_ARRAY_SET_VALUES + + // Sets current string reference value (Last strref value) + SET ~!_position~ = lastIndex + SET ~!_maxSlots~ = slotNumbers + SET ~!_collected~ = 1 + SPRINT ~!_useArrayName~ ~%TLKindexArray%~ + SET ~!_arrayValue~ = strref + LPM DYN_ARRAY_SET_VALUES + END + + // Next strref in dialog.tlk + SET strref = strref+1 + +END // End of "ALTER_TLK_RANGE" + + +// REAPAIRS THE TEXT IN DIALOG.TLK +// ------------------------------- +// Loop variables +OUTER_SET specialCondition = 0 +OUTER_SET lastRepairIndex = 0 +OUTER_FOR(repairIndex = 0; repairIndex < slotNumbers; ++repairIndex) +BEGIN + // Array values + OUTER_TEXT_SPRINT tlkText $~%refTextArray%~(~%repairIndex%~) + OUTER_TEXT_SPRINT tlkSound $~%refSoundArray%~(~%repairIndex%~) + OUTER_SET tlkIndexRepair =$~%TLKindexRepaiArray%~(~%repairIndex%~) + + // Changes the text only if that text needs repair + ACTION_IF (~%tlkIndexRepair%~ > "-1") THEN + BEGIN + // Repairs the text in dalog.tlk + LAF STR_SET_EVAL_WITH_STRINGS + INT_VAR + strref = tlkIndexRepair + STR_VAR + text = ~%tlkText%~ + sound = ~%tlkSound%~ + END + + // Sets dyn array value to !_NULL + OUTER_SET ~!_position~ = repairIndex + OUTER_SET ~!_maxSlots~ = slotNumbers + OUTER_SET ~!_collected~ = 0 + OUTER_SPRINT ~!_useArrayName~ ~%refTextArray%~ + OUTER_SPRINT ~!_arrayValue~ ~!_NULL~ + LAM DYN_ARRAY_SET_VALUES + + // Sets special condition to true(1) + // When the collection of array values ​​is completed, the correct index of the last iteration is saved + OUTER_SET specialCondition = 1 + OUTER_SET lastRepairIndex = repairIndex + END +END // End of "for" loop +// Inserting all array items into the array +ACTION_IF(specialCondition = 1) THEN +BEGIN + // Sets all dyn array values to !_NULL (Last !_NULL value) + OUTER_SET ~!_position~ = lastRepairIndex + OUTER_SET ~!_maxSlots~ = slotNumbers + OUTER_SET ~!_collected~ = 1 + OUTER_SPRINT ~!_useArrayName~ ~%refTextArray%~ + OUTER_SPRINT ~!_arrayValue~ ~!_NULL~ + LAM DYN_ARRAY_SET_VALUES +END \ No newline at end of file diff --git a/Demos/Demo_IWDEE/proprietary/!_Cleanup.tpa b/Demos/Demo_IWDEE/proprietary/!_Cleanup.tpa new file mode 100644 index 0000000..396e030 --- /dev/null +++ b/Demos/Demo_IWDEE/proprietary/!_Cleanup.tpa @@ -0,0 +1,21 @@ +// Never Forget: Comments can "lie", but code not so much ;P +// DELETE ALL CREATED FILES! +// ------------------------- +OUTER_SPRINT ~!_deleteArray~ ~%refTextArray%~ +LAM DYN_ARRAY_CLEANUP +OUTER_SPRINT ~!_deleteArray~ ~%refSoundArray%~ +LAM DYN_ARRAY_CLEANUP +OUTER_SPRINT ~!_deleteArray~ ~%TLKindexArray%~ +LAM DYN_ARRAY_CLEANUP +OUTER_SPRINT ~!_deleteArray~ ~%voxNameArray%~ +LAM DYN_ARRAY_CLEANUP +OUTER_SPRINT ~!_deleteArray~ ~%voxSelectNameArray%~ +LAM DYN_ARRAY_CLEANUP +OUTER_SPRINT ~!_deleteArray~ ~%voxPositionArray%~ +LAM DYN_ARRAY_CLEANUP +OUTER_SPRINT ~!_deleteArray~ ~%TLKindexRepaiArray%~ +LAM DYN_ARRAY_CLEANUP + +// WeiDU INTERNAL CLEANUP! +// ----------------------- +CLEAR_EVERYTHING \ No newline at end of file diff --git a/Demos/Demo_IWDEE/proprietary/errors/!_CheckIEgames.tpa b/Demos/Demo_IWDEE/proprietary/errors/!_CheckIEgames.tpa new file mode 100644 index 0000000..ed167a1 --- /dev/null +++ b/Demos/Demo_IWDEE/proprietary/errors/!_CheckIEgames.tpa @@ -0,0 +1,44 @@ +// Never Forget: Comments can "lie", but code not so much ;P +// CHECKS COMPATIBILITY +// -------------------- +// Creates an array with game shortcuts which are incompatible with mod +ACTION_DEFINE_ARRAY games_incompatible +BEGIN + ~bg2~ + ~tob~ + ~iwd2~ + ~pst~ + ~bg1~ + ~totsc~ + ~iwd1~ + ~how~ + ~totlm~ + ~tutu~ + ~tutu_totsc~ + ~bgt~ + ~ca~ + ~iwd_in_bg2~ + //~bgee~ + //~bg2ee~ + //~eet~ + //~iwdee~ + ~pstee~ +END + + +OUTER_SPRINT error @2147483647 + + +// Checks all game shortcuts +OUTER_FOR (gameIndex = 0; VARIABLE_IS_SET $games_incompatible(~%gameIndex%~); ++gameIndex) BEGIN + + // Gets specific game shortcut + OUTER_TEXT_SPRINT game $games_incompatible(~%gameIndex%~) + + // Calls error + LAF ERR_EVALUATE_GAME_EXISTANCE + STR_VAR + game = ~%game%~ + message = ~%error%~ + END +END \ No newline at end of file diff --git a/Demos/Demo_IWDEE/proprietary/warnings/!_CheckSOD.tpa b/Demos/Demo_IWDEE/proprietary/warnings/!_CheckSOD.tpa new file mode 100644 index 0000000..b0790c8 --- /dev/null +++ b/Demos/Demo_IWDEE/proprietary/warnings/!_CheckSOD.tpa @@ -0,0 +1,27 @@ +// Never Forget: Comments can "lie", but code not so much ;P +// CHECKS MODMERGE/DLC-MERGER INSTALLATION +// --------------------------------------- +// Creates a file array +ACTION_DEFINE_ARRAY files +BEGIN + ~dlc/sod-dlc.zip~ + ~sod-dlc.zip~ +END + + +OUTER_SPRINT warning @2147483644 + + +// Checks all files +OUTER_FOR (fileIndex = 0; VARIABLE_IS_SET $files(~%fileIndex%~); ++fileIndex) BEGIN + + // Gets specific file + OUTER_TEXT_SPRINT file $files(~%fileIndex%~) + + // Calls warning + LAF WARN_EVALUATE_FILE_EXISTANCE + STR_VAR + file = ~%file%~ + message = ~%warning%~ + END +END \ No newline at end of file diff --git a/Demos/Demo_IWDEE/setup-Demo_IWDEE.tp2 b/Demos/Demo_IWDEE/setup-Demo_IWDEE.tp2 new file mode 100644 index 0000000..2d1ef42 --- /dev/null +++ b/Demos/Demo_IWDEE/setup-Demo_IWDEE.tp2 @@ -0,0 +1,228 @@ +// Never Forget: Comments can "lie", but code not so much ;P +// ----------- +// Information +// ----------- +BACKUP ~weidu_external/demo_iwdee/backup~ // %MOD_FOLDER% doesn't work here +AUTHOR ~Incrementis (incrementis@gmail.com)~ +VERSION ~v0.29.23~ +AUTO_EVAL_STRINGS// This will prevent the need of EVAL for string variables + + +// -------------- +// Initialization +// -------------- +ALWAYS + // LIBRARY INCLUDES(Don't touch these) + // ----------------------------------- + INCLUDE ~%MOD_FOLDER%/lib/windows/dynArrayFunctionalities.tph~ + INCLUDE ~%MOD_FOLDER%/lib/dialogTlkFunctionalities.tph~ + INCLUDE ~%MOD_FOLDER%/lib/fileHandling.tph~ + INCLUDE ~%MOD_FOLDER%/lib/errors.tph~ + INCLUDE ~%MOD_FOLDER%/lib/warnings.tph~ + + // GLOBAL INCLUDES(Don't touch this) + // ---------------------------------- + INCLUDE ~%MOD_FOLDER%/arrays/!_DeclareVoxArrays.tpa~ + + // EE SOUNDSET COMPATIBILITY FILE(Don't touch this) + // ------------------------------------------------ + ACTION_IF NOT FILE_EXISTS_IN_GAME ~M_cdsnd.lua~ THEN + BEGIN + OUTER_SPRINT ~!_filename~ ~weidu_external/%MOD_FOLDER%/temp/M_cdsnd.lua~ + LAM CREATE_FILE + // This file is used to enter strref text references which will then be displayed on the terminal. + COPY ~weidu_external/%MOD_FOLDER%/temp/M_cdsnd.lua~ ~override~ + END + +END// End of "ALWAYS" + + +// --------- +// Languages +// --------- +LANGUAGE + ~English~ // Language + ~en_US~ // Directory + ~%MOD_FOLDER%/en_US/!_errors.tra~ + ~%MOD_FOLDER%/en_US/!_warnings.tra~ + ~%MOD_FOLDER%/en_US/!_moduleNames.tra~ +LANGUAGE + ~Deutsch~ + ~de_DE~ + ~%MOD_FOLDER%/de_DE/!_errors.tra~ + ~%MOD_FOLDER%/de_DE/!_warnings.tra~ + ~%MOD_FOLDER%/de_DE/!_moduleNames.tra~ + + +// ---------------------------------------------------- +// Installs "IEEE Player Character Voice Installer" Mod +// ---------------------------------------------------- +BEGIN @1 +// PROPRIETARY INCLUDES(Can be commented out but not recommended) +// -------------------------------------------------------------- +INCLUDE ~%MOD_FOLDER%/proprietary/errors/!_CheckIEgames.tpa~ +INCLUDE ~%MOD_FOLDER%/proprietary/!_CheckArrays.tpa~ +// This proprietary include depends on the user +OUTER_WHILE NOT (~%repair%~ STRING_EQUAL_CASE ~n~ OR ~%repair%~ STRING_EQUAL_CASE ~o~) +BEGIN + // Retrieves a specific language string from !_moduleNames.tra + OUTER_SPRINT applyUtility @2 + // Asks whether to use the repair utility + PRINT ~%applyUtility%?~ + // Gets the user input value + ACTION_READLN ~repair~ + // Contains a repair code file in case the user wishes to use it + ACTION_IF (~%repair%~ STRING_EQUAL_CASE ~o~) THEN + BEGIN + INCLUDE ~%MOD_FOLDER%/proprietary/!_CheckTlk.tpa~ + END +END + +// VOICE-SOUND-FILES FOR PLAYER CHARACTER +// -------------------------------------- +COPY ~%MOD_FOLDER%/vox/%LANGUAGE%/sound~ ~lang/%LANGUAGE%/sounds~ +COPY ~%MOD_FOLDER%/vox/%LANGUAGE%/wav~ ~override~ + +// WRITES INTO DIALOG.TLK +// ---------------------- +// Loop variables +OUTER_SET tlkCondition = 0 +OUTER_SET tlkConditionalIndex = 0 +OUTER_FOR(tlkIndex = 0; tlkIndex < slotNumbers; ++tlkIndex) +BEGIN + // Array elment values + OUTER_SPRINT text $~%refTextArray%~(~%tlkIndex%~) + OUTER_SPRINT sound $~%refSoundArray%~(~%tlkIndex%~) + + ACTION_IF NOT(~%text%~ STRING_EQUAL ~!_NULL~) THEN + BEGIN + // Writes the text and sound into the specific strref position in dialog.tlk + LAF RESOLVE_STR_REF_WITH_STRINGS + STR_VAR + text = ~%text%~ + sound = ~%sound%~ + RET + stringref = strRef + END + + // Stores string references for later insertion into the specific 2DA file + OUTER_SET ~!_position~ = tlkIndex + OUTER_SET ~!_maxSlots~ = slotNumbers + OUTER_SET ~!_collected~ = 0 + OUTER_SPRINT ~!_useArrayName~ ~%TLKindexArray%~ + OUTER_SET ~!_arrayValue~ = stringref + LAM DYN_ARRAY_SET_VALUES + + OUTER_SET tlkCondition = 1 + OUTER_SET tlkConditionalIndex = tlkIndex + END +END +// Inserting all array items into the array(All array values are collected) +ACTION_IF (tlkCondition = 1) THEN +BEGIN + OUTER_SET ~!_position~ = tlkConditionalIndex + OUTER_SET ~!_maxSlots~ = slotNumbers + OUTER_SET ~!_collected~ = 1 + OUTER_SPRINT ~!_useArrayName~ ~%TLKindexArray%~ + OUTER_SET ~!_arrayValue~ = stringref + LAM DYN_ARRAY_SET_VALUES +END + +// WRITES INTO CHARSND.2da +// ----------------------- +OUTER_FOR(nameIndex = 0; nameIndex < nameNumbers; ++nameIndex) +BEGIN + // Initializes the soundslot column with the default values ​​-1 in CHARSND.2da + OUTER_SPRINT initName $~%voxNameArray%~(~%nameIndex%~) + APPEND_COL ~CHARSND.2da~ "$ $ %initName% -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1" + COPY_EXISTING "CHARSND.2da" "override/CHARSND.2da" + PRETTY_PRINT_2DA + + // Initializes the current number of columns in CHARSND.2DA, since the number of columns changes with each iteration + COUNT_2DA_COLS maxCols2DA + OUTER_SET maxCols = maxCols2DA - 1 + + // Fills the rows with strref values + OUTER_FOR(voxIndex = 0; voxIndex < slotNumbers; ++voxIndex) + BEGIN + // Values + OUTER_SPRINT sound $~%refSoundArray%~(~%voxIndex%~) + OUTER_SET position = $~%voxPositionArray%~(~%voxIndex%~) + OUTER_SET reference = $~%TLKindexArray%~(~%voxIndex%~) + // Length + OUTER_SET soundLength = STRING_LENGTH ~%sound%~ + OUTER_SET nameLength = STRING_LENGTH ~%initName%~ + OUTER_SET minNameLength = nameLength + 1 + OUTER_SET maxNameLength = nameLength + 2 + + // Checks the name length range and whether it is not already used for another vox name + ACTION_IF ( (soundLength >= minNameLength) AND + (soundLength <= maxNameLength) AND + NOT (~%sound%~ STRING_EQUAL ~!_NULL~)) THEN + BEGIN + + // WeiDU intern function + LAF SUBSTRING + INT_VAR + start=0 // Starts with the first letter + length=nameLength // Specifies how many letters are read + STR_VAR + string=~%sound%~ // The string from which the substring is taken + RET + slicedName=substring + END + + // MONITORING + PRINT ~setup-Demo_SoD.tp2 -> NOT ALREADY USED -> sound:%sound% voxIndex:%voxIndex% slicedName:%slicedName% name:%initName%~ + + // Checks whether the sound name belongs to the Vox name + ACTION_IF (~%slicedName%~ STRING_EQUAL ~%initName%~) THEN + BEGIN + // MONITORING + PRINT ~setup-Demo_SoD.tp2 -> BELONGS TO VOX NAME -> reference:%reference% sound:%sound% voxIndex:%voxIndex% slicedName:%slicedName% name:%initName%~ + + // Writes the string reference to the correct position + COPY_EXISTING ~CHARSND.2da~ "override/CHARSND.2da" + // "row"---"column"---"required column count"---"value entry" + SET_2DA_ENTRY ~%position%~ ~%maxCols%~ ~%maxCols%~ ~%reference%~ + PRETTY_PRINT_2DA + + // The sound reference value is no longer needed, so a null value is written to this array position + OUTER_SET ~!_position~ = voxIndex + OUTER_SET ~!_maxSlots~ = slotNumbers + OUTER_SET ~!_collected~ = 0 + OUTER_SPRINT ~!_useArrayName~ ~%refSoundArray%~ + OUTER_SPRINT ~!_arrayValue~ ~!_NULL~ + LAM DYN_ARRAY_SET_VALUES + + END // End of inner ACTION_IF + END // End of outer ACTION_IF + END // End of inner loop +END // End of outer loop +// Inserting all array items into the array(All array values are collected) +OUTER_SET ~!_position~ = voxIndex - 1 +OUTER_SET ~!_maxSlots~ = slotNumbers +OUTER_SET ~!_collected~ = 1 +OUTER_SPRINT ~!_useArrayName~ ~%refSoundArray%~ +OUTER_SPRINT ~!_arrayValue~ ~!_NULL~ +LAM DYN_ARRAY_SET_VALUES + +// WRITES INTO M_cdsnd.lua +// ----------------------- +// Fills the Lua file with the alternative name of the sound slot, +// which will then appear in the character creation menu +OUTER_FOR(luaIndex = 0; luaIndex < nameNumbers; ++luaIndex) +BEGIN + OUTER_SPRINT selectName $~%voxSelectNameArray%~(~%luaIndex%~) + OUTER_SPRINT name $~%voxNameArray%~(~%luaIndex%~) + OUTER_SET selectNameStrref = RESOLVE_STR_REF(~%selectName%~) + // NOTE: You can check out ingame BGEE.lua file for more information. + // Search for: filenames_stringrefs[''] = {, 2} + APPEND ~M_cdsnd.lua~ ~filenames_stringrefs['%name%'] = {%selectNameStrref%, 2}~ +END + + +// FOOTER INCLUDES(Order matters!) +// ------------------------------- +INCLUDE ~%MOD_FOLDER%/proprietary/warnings/!_CheckSOD.tpa~ +INCLUDE ~%MOD_FOLDER%/proprietary/!_Cleanup.tpa~ \ No newline at end of file diff --git a/Demos/Demo_IWDEE/vox/de_DE/!_DEMOg.wav b/Demos/Demo_IWDEE/vox/de_DE/sound/!_DEMBg.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/de_DE/!_DEMOg.wav rename to Demos/Demo_IWDEE/vox/de_DE/sound/!_DEMBg.wav diff --git a/Demos/Demo_IWDEE/vox/de_DE/!_DEMO0.wav b/Demos/Demo_IWDEE/vox/de_DE/sound/!_DEMO0.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/de_DE/!_DEMO0.wav rename to Demos/Demo_IWDEE/vox/de_DE/sound/!_DEMO0.wav diff --git a/Demos/Demo_IWDEE/vox/de_DE/!_DEMO8.wav b/Demos/Demo_IWDEE/vox/de_DE/sound/!_DEMO8.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/de_DE/!_DEMO8.wav rename to Demos/Demo_IWDEE/vox/de_DE/sound/!_DEMO8.wav diff --git a/Demos/Demo_IWDEE/vox/de_DE/!_DEMO9.wav b/Demos/Demo_IWDEE/vox/de_DE/sound/!_DEMO9.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/de_DE/!_DEMO9.wav rename to Demos/Demo_IWDEE/vox/de_DE/sound/!_DEMO9.wav diff --git a/Demos/Demo_IWDEE/vox/de_DE/!_DEMOa.wav b/Demos/Demo_IWDEE/vox/de_DE/sound/!_DEMOa.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/de_DE/!_DEMOa.wav rename to Demos/Demo_IWDEE/vox/de_DE/sound/!_DEMOa.wav diff --git a/Demos/Demo_IWDEE/vox/de_DE/!_DEMOb.wav b/Demos/Demo_IWDEE/vox/de_DE/sound/!_DEMOb.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/de_DE/!_DEMOb.wav rename to Demos/Demo_IWDEE/vox/de_DE/sound/!_DEMOb.wav diff --git a/Demos/Demo_IWDEE/vox/de_DE/!_DEMOc.wav b/Demos/Demo_IWDEE/vox/de_DE/sound/!_DEMOc.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/de_DE/!_DEMOc.wav rename to Demos/Demo_IWDEE/vox/de_DE/sound/!_DEMOc.wav diff --git a/Demos/Demo_IWDEE/vox/de_DE/!_DEMOd.wav b/Demos/Demo_IWDEE/vox/de_DE/sound/!_DEMOd.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/de_DE/!_DEMOd.wav rename to Demos/Demo_IWDEE/vox/de_DE/sound/!_DEMOd.wav diff --git a/Demos/Demo_IWDEE/vox/de_DE/!_DEMOe.wav b/Demos/Demo_IWDEE/vox/de_DE/sound/!_DEMOe.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/de_DE/!_DEMOe.wav rename to Demos/Demo_IWDEE/vox/de_DE/sound/!_DEMOe.wav diff --git a/Demos/Demo_IWDEE/vox/de_DE/!_DEMOf.wav b/Demos/Demo_IWDEE/vox/de_DE/sound/!_DEMOf.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/de_DE/!_DEMOf.wav rename to Demos/Demo_IWDEE/vox/de_DE/sound/!_DEMOf.wav diff --git a/Demos/Demo_IWDEE/vox/de_DE/sound/!_DEMOg.wav b/Demos/Demo_IWDEE/vox/de_DE/sound/!_DEMOg.wav new file mode 100644 index 0000000..8edabb9 Binary files /dev/null and b/Demos/Demo_IWDEE/vox/de_DE/sound/!_DEMOg.wav differ diff --git a/Demos/Demo_IWDEE/vox/de_DE/!_DEMOh.wav b/Demos/Demo_IWDEE/vox/de_DE/sound/!_DEMOh.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/de_DE/!_DEMOh.wav rename to Demos/Demo_IWDEE/vox/de_DE/sound/!_DEMOh.wav diff --git a/Demos/Demo_IWDEE/vox/de_DE/!_DEMOi.wav b/Demos/Demo_IWDEE/vox/de_DE/sound/!_DEMOi.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/de_DE/!_DEMOi.wav rename to Demos/Demo_IWDEE/vox/de_DE/sound/!_DEMOi.wav diff --git a/Demos/Demo_IWDEE/vox/de_DE/!_DEMOj.wav b/Demos/Demo_IWDEE/vox/de_DE/sound/!_DEMOj.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/de_DE/!_DEMOj.wav rename to Demos/Demo_IWDEE/vox/de_DE/sound/!_DEMOj.wav diff --git a/Demos/Demo_IWDEE/vox/de_DE/!_DEMOk.wav b/Demos/Demo_IWDEE/vox/de_DE/sound/!_DEMOk.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/de_DE/!_DEMOk.wav rename to Demos/Demo_IWDEE/vox/de_DE/sound/!_DEMOk.wav diff --git a/Demos/Demo_IWDEE/vox/de_DE/!_DEMOl.wav b/Demos/Demo_IWDEE/vox/de_DE/sound/!_DEMOl.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/de_DE/!_DEMOl.wav rename to Demos/Demo_IWDEE/vox/de_DE/sound/!_DEMOl.wav diff --git a/Demos/Demo_IWDEE/vox/de_DE/!_DEMOm.wav b/Demos/Demo_IWDEE/vox/de_DE/sound/!_DEMOm.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/de_DE/!_DEMOm.wav rename to Demos/Demo_IWDEE/vox/de_DE/sound/!_DEMOm.wav diff --git a/Demos/Demo_IWDEE/vox/de_DE/!_DEMOs.wav b/Demos/Demo_IWDEE/vox/de_DE/sound/!_DEMOs.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/de_DE/!_DEMOs.wav rename to Demos/Demo_IWDEE/vox/de_DE/sound/!_DEMOs.wav diff --git a/Demos/Demo_IWDEE/vox/de_DE/!_DEMOt.wav b/Demos/Demo_IWDEE/vox/de_DE/sound/!_DEMOt.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/de_DE/!_DEMOt.wav rename to Demos/Demo_IWDEE/vox/de_DE/sound/!_DEMOt.wav diff --git a/Demos/Demo_IWDEE/vox/de_DE/!_DEMOu.wav b/Demos/Demo_IWDEE/vox/de_DE/sound/!_DEMOu.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/de_DE/!_DEMOu.wav rename to Demos/Demo_IWDEE/vox/de_DE/sound/!_DEMOu.wav diff --git a/Demos/Demo_IWDEE/vox/de_DE/!_DEMOv.wav b/Demos/Demo_IWDEE/vox/de_DE/sound/!_DEMOv.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/de_DE/!_DEMOv.wav rename to Demos/Demo_IWDEE/vox/de_DE/sound/!_DEMOv.wav diff --git a/Demos/Demo_IWDEE/vox/de_DE/!_DEMOw.wav b/Demos/Demo_IWDEE/vox/de_DE/sound/!_DEMOw.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/de_DE/!_DEMOw.wav rename to Demos/Demo_IWDEE/vox/de_DE/sound/!_DEMOw.wav diff --git a/Demos/Demo_IWDEE/vox/de_DE/!_DEMO3_.wav b/Demos/Demo_IWDEE/vox/de_DE/wav/!_DEMB3_.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/de_DE/!_DEMO3_.wav rename to Demos/Demo_IWDEE/vox/de_DE/wav/!_DEMB3_.wav diff --git a/Demos/Demo_IWDEE/vox/de_DE/!_DEMO0_.wav b/Demos/Demo_IWDEE/vox/de_DE/wav/!_DEMO0_.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/de_DE/!_DEMO0_.wav rename to Demos/Demo_IWDEE/vox/de_DE/wav/!_DEMO0_.wav diff --git a/Demos/Demo_IWDEE/vox/de_DE/!_DEMO1_.wav b/Demos/Demo_IWDEE/vox/de_DE/wav/!_DEMO1_.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/de_DE/!_DEMO1_.wav rename to Demos/Demo_IWDEE/vox/de_DE/wav/!_DEMO1_.wav diff --git a/Demos/Demo_IWDEE/vox/de_DE/!_DEMO2_.wav b/Demos/Demo_IWDEE/vox/de_DE/wav/!_DEMO2_.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/de_DE/!_DEMO2_.wav rename to Demos/Demo_IWDEE/vox/de_DE/wav/!_DEMO2_.wav diff --git a/Demos/Demo_IWDEE/vox/de_DE/wav/!_DEMO3_.wav b/Demos/Demo_IWDEE/vox/de_DE/wav/!_DEMO3_.wav new file mode 100644 index 0000000..617e0e4 Binary files /dev/null and b/Demos/Demo_IWDEE/vox/de_DE/wav/!_DEMO3_.wav differ diff --git a/Demos/Demo_IWDEE/vox/de_DE/!_DEMOg_.wav b/Demos/Demo_IWDEE/vox/de_DE/wav/!_DEMOg_.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/de_DE/!_DEMOg_.wav rename to Demos/Demo_IWDEE/vox/de_DE/wav/!_DEMOg_.wav diff --git a/Demos/Demo_IWDEE/vox/de_DE/!_DEMOh_.wav b/Demos/Demo_IWDEE/vox/de_DE/wav/!_DEMOh_.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/de_DE/!_DEMOh_.wav rename to Demos/Demo_IWDEE/vox/de_DE/wav/!_DEMOh_.wav diff --git a/Demos/Demo_IWDEE/vox/de_DE/!_DEMOk_.wav b/Demos/Demo_IWDEE/vox/de_DE/wav/!_DEMOk_.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/de_DE/!_DEMOk_.wav rename to Demos/Demo_IWDEE/vox/de_DE/wav/!_DEMOk_.wav diff --git a/Demos/Demo_IWDEE/vox/de_DE/!_DEMOl_.wav b/Demos/Demo_IWDEE/vox/de_DE/wav/!_DEMOl_.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/de_DE/!_DEMOl_.wav rename to Demos/Demo_IWDEE/vox/de_DE/wav/!_DEMOl_.wav diff --git a/Demos/Demo_IWDEE/vox/en_US/!_DEMOg.wav b/Demos/Demo_IWDEE/vox/en_US/sound/!_DEMBg.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/en_US/!_DEMOg.wav rename to Demos/Demo_IWDEE/vox/en_US/sound/!_DEMBg.wav diff --git a/Demos/Demo_IWDEE/vox/en_US/!_DEMO0.wav b/Demos/Demo_IWDEE/vox/en_US/sound/!_DEMO0.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/en_US/!_DEMO0.wav rename to Demos/Demo_IWDEE/vox/en_US/sound/!_DEMO0.wav diff --git a/Demos/Demo_IWDEE/vox/en_US/!_DEMO8.wav b/Demos/Demo_IWDEE/vox/en_US/sound/!_DEMO8.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/en_US/!_DEMO8.wav rename to Demos/Demo_IWDEE/vox/en_US/sound/!_DEMO8.wav diff --git a/Demos/Demo_IWDEE/vox/en_US/!_DEMO9.wav b/Demos/Demo_IWDEE/vox/en_US/sound/!_DEMO9.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/en_US/!_DEMO9.wav rename to Demos/Demo_IWDEE/vox/en_US/sound/!_DEMO9.wav diff --git a/Demos/Demo_IWDEE/vox/en_US/!_DEMOa.wav b/Demos/Demo_IWDEE/vox/en_US/sound/!_DEMOa.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/en_US/!_DEMOa.wav rename to Demos/Demo_IWDEE/vox/en_US/sound/!_DEMOa.wav diff --git a/Demos/Demo_IWDEE/vox/en_US/!_DEMOb.wav b/Demos/Demo_IWDEE/vox/en_US/sound/!_DEMOb.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/en_US/!_DEMOb.wav rename to Demos/Demo_IWDEE/vox/en_US/sound/!_DEMOb.wav diff --git a/Demos/Demo_IWDEE/vox/en_US/!_DEMOc.wav b/Demos/Demo_IWDEE/vox/en_US/sound/!_DEMOc.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/en_US/!_DEMOc.wav rename to Demos/Demo_IWDEE/vox/en_US/sound/!_DEMOc.wav diff --git a/Demos/Demo_IWDEE/vox/en_US/!_DEMOd.wav b/Demos/Demo_IWDEE/vox/en_US/sound/!_DEMOd.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/en_US/!_DEMOd.wav rename to Demos/Demo_IWDEE/vox/en_US/sound/!_DEMOd.wav diff --git a/Demos/Demo_IWDEE/vox/en_US/!_DEMOe.wav b/Demos/Demo_IWDEE/vox/en_US/sound/!_DEMOe.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/en_US/!_DEMOe.wav rename to Demos/Demo_IWDEE/vox/en_US/sound/!_DEMOe.wav diff --git a/Demos/Demo_IWDEE/vox/en_US/!_DEMOf.wav b/Demos/Demo_IWDEE/vox/en_US/sound/!_DEMOf.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/en_US/!_DEMOf.wav rename to Demos/Demo_IWDEE/vox/en_US/sound/!_DEMOf.wav diff --git a/Demos/Demo_IWDEE/vox/en_US/sound/!_DEMOg.wav b/Demos/Demo_IWDEE/vox/en_US/sound/!_DEMOg.wav new file mode 100644 index 0000000..ee5a632 Binary files /dev/null and b/Demos/Demo_IWDEE/vox/en_US/sound/!_DEMOg.wav differ diff --git a/Demos/Demo_IWDEE/vox/en_US/!_DEMOh.wav b/Demos/Demo_IWDEE/vox/en_US/sound/!_DEMOh.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/en_US/!_DEMOh.wav rename to Demos/Demo_IWDEE/vox/en_US/sound/!_DEMOh.wav diff --git a/Demos/Demo_IWDEE/vox/en_US/!_DEMOi.wav b/Demos/Demo_IWDEE/vox/en_US/sound/!_DEMOi.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/en_US/!_DEMOi.wav rename to Demos/Demo_IWDEE/vox/en_US/sound/!_DEMOi.wav diff --git a/Demos/Demo_IWDEE/vox/en_US/!_DEMOj.wav b/Demos/Demo_IWDEE/vox/en_US/sound/!_DEMOj.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/en_US/!_DEMOj.wav rename to Demos/Demo_IWDEE/vox/en_US/sound/!_DEMOj.wav diff --git a/Demos/Demo_IWDEE/vox/en_US/!_DEMOk.wav b/Demos/Demo_IWDEE/vox/en_US/sound/!_DEMOk.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/en_US/!_DEMOk.wav rename to Demos/Demo_IWDEE/vox/en_US/sound/!_DEMOk.wav diff --git a/Demos/Demo_IWDEE/vox/en_US/!_DEMOl.wav b/Demos/Demo_IWDEE/vox/en_US/sound/!_DEMOl.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/en_US/!_DEMOl.wav rename to Demos/Demo_IWDEE/vox/en_US/sound/!_DEMOl.wav diff --git a/Demos/Demo_IWDEE/vox/en_US/!_DEMOm.wav b/Demos/Demo_IWDEE/vox/en_US/sound/!_DEMOm.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/en_US/!_DEMOm.wav rename to Demos/Demo_IWDEE/vox/en_US/sound/!_DEMOm.wav diff --git a/Demos/Demo_IWDEE/vox/en_US/!_DEMOs.wav b/Demos/Demo_IWDEE/vox/en_US/sound/!_DEMOs.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/en_US/!_DEMOs.wav rename to Demos/Demo_IWDEE/vox/en_US/sound/!_DEMOs.wav diff --git a/Demos/Demo_IWDEE/vox/en_US/!_DEMOt.wav b/Demos/Demo_IWDEE/vox/en_US/sound/!_DEMOt.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/en_US/!_DEMOt.wav rename to Demos/Demo_IWDEE/vox/en_US/sound/!_DEMOt.wav diff --git a/Demos/Demo_IWDEE/vox/en_US/!_DEMOu.wav b/Demos/Demo_IWDEE/vox/en_US/sound/!_DEMOu.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/en_US/!_DEMOu.wav rename to Demos/Demo_IWDEE/vox/en_US/sound/!_DEMOu.wav diff --git a/Demos/Demo_IWDEE/vox/en_US/!_DEMOv.wav b/Demos/Demo_IWDEE/vox/en_US/sound/!_DEMOv.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/en_US/!_DEMOv.wav rename to Demos/Demo_IWDEE/vox/en_US/sound/!_DEMOv.wav diff --git a/Demos/Demo_IWDEE/vox/en_US/!_DEMOw.wav b/Demos/Demo_IWDEE/vox/en_US/sound/!_DEMOw.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/en_US/!_DEMOw.wav rename to Demos/Demo_IWDEE/vox/en_US/sound/!_DEMOw.wav diff --git a/Demos/Demo_IWDEE/vox/en_US/!_DEMO3_.wav b/Demos/Demo_IWDEE/vox/en_US/wav/!_DEMB3_.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/en_US/!_DEMO3_.wav rename to Demos/Demo_IWDEE/vox/en_US/wav/!_DEMB3_.wav diff --git a/Demos/Demo_IWDEE/vox/en_US/!_DEMO0_.wav b/Demos/Demo_IWDEE/vox/en_US/wav/!_DEMO0_.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/en_US/!_DEMO0_.wav rename to Demos/Demo_IWDEE/vox/en_US/wav/!_DEMO0_.wav diff --git a/Demos/Demo_IWDEE/vox/en_US/!_DEMO1_.wav b/Demos/Demo_IWDEE/vox/en_US/wav/!_DEMO1_.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/en_US/!_DEMO1_.wav rename to Demos/Demo_IWDEE/vox/en_US/wav/!_DEMO1_.wav diff --git a/Demos/Demo_IWDEE/vox/en_US/!_DEMO2_.wav b/Demos/Demo_IWDEE/vox/en_US/wav/!_DEMO2_.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/en_US/!_DEMO2_.wav rename to Demos/Demo_IWDEE/vox/en_US/wav/!_DEMO2_.wav diff --git a/Demos/Demo_IWDEE/vox/en_US/wav/!_DEMO3_.wav b/Demos/Demo_IWDEE/vox/en_US/wav/!_DEMO3_.wav new file mode 100644 index 0000000..14a176e Binary files /dev/null and b/Demos/Demo_IWDEE/vox/en_US/wav/!_DEMO3_.wav differ diff --git a/Demos/Demo_IWDEE/vox/en_US/!_DEMOg_.wav b/Demos/Demo_IWDEE/vox/en_US/wav/!_DEMOg_.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/en_US/!_DEMOg_.wav rename to Demos/Demo_IWDEE/vox/en_US/wav/!_DEMOg_.wav diff --git a/Demos/Demo_IWDEE/vox/en_US/!_DEMOh_.wav b/Demos/Demo_IWDEE/vox/en_US/wav/!_DEMOh_.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/en_US/!_DEMOh_.wav rename to Demos/Demo_IWDEE/vox/en_US/wav/!_DEMOh_.wav diff --git a/Demos/Demo_IWDEE/vox/en_US/!_DEMOk_.wav b/Demos/Demo_IWDEE/vox/en_US/wav/!_DEMOk_.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/en_US/!_DEMOk_.wav rename to Demos/Demo_IWDEE/vox/en_US/wav/!_DEMOk_.wav diff --git a/Demos/Demo_IWDEE/vox/en_US/!_DEMOl_.wav b/Demos/Demo_IWDEE/vox/en_US/wav/!_DEMOl_.wav similarity index 100% rename from Demos/Demo_IWDEE/vox/en_US/!_DEMOl_.wav rename to Demos/Demo_IWDEE/vox/en_US/wav/!_DEMOl_.wav