From 2961c272bc76f0a7bf107ffef0ee5e81ae39d98a Mon Sep 17 00:00:00 2001 From: K4thos Date: Wed, 3 Aug 2016 06:38:41 +0200 Subject: [PATCH] Version 1.0 Release Candidate 4 - fixed glitched water overlays (by argent77). Please let us know if you find more areas with this issue - fixed NPC continuity (in old versions there may be problems with disabling old NPCs when you come back to area that has NPC which never joined the party - problem caused by NPCLEVEL.2DA variants) - fixed incorrect strref used for chapter 20 in GUI Journal screen - fixed RC3 regression regarding BG1 Player1 starting weapon - class text 2da rows normalized during final patching to always use 10 columns - worldmap is now generated using BP-BGT Worldmap code (which fixes problem with "Destination Unreachable" string shown on unvisited worldmap areas with blank TLK entries) - altered strings related to worldmap (Destination Unreachable -> Unreachable; Traveling Hours -> Hours) - restored SoD extended ending (for some reason Beamdog cut out playable part of the final scene) --- EET/EET.tp2 | 155 +- EET/base/2da/CAMPAIGN.2DA | 8 +- EET/base/lua/util.lua | 2 +- EET/base/movies/{CREDITS_.wbm => CREDITS.wbm} | Bin EET/base/spl/K#REST.SPL | Bin 0 -> 6826 bytes EET/base/spl/K#UNREST.SPL | Bin 0 -> 298 bytes EET/base/worldmap.wmp | Bin 200 -> 0 bytes EET/compile/baf/BG0000.baf | 11 - EET/compile/baf/K#TELBGT.baf | 28 +- EET/lang/de_DE/2da.tra | 4 + EET/lang/de_DE/setup.tra | 2 +- EET/lang/en_US/2da.tra | 4 + EET/lang/en_US/setup.tra | 2 +- EET/lang/es_ES/2da.tra | 4 + EET/lang/es_ES/setup.tra | 2 +- EET/lang/fr_FR/2da.tra | 4 + EET/lang/fr_FR/setup.tra | 2 +- EET/lang/pl_PL/2da.tra | 60 +- EET/lang/pl_PL/readme-EET.html | 49 +- EET/lang/pl_PL/setup.tra | 2 +- EET/lib/EET_end.tp2 | 46 +- EET/lib/PCU_Dict.tph | 1 - EET/lib/bg1_BCS.tph | 80 +- EET/lib/bg2_2DA.tph | 31 +- EET/lib/bg2_BCS.tph | 188 ++- EET/lib/bg2_TLK.tph | 7 + EET/lib/build_worldmap.tpa | 100 ++ EET/lib/macros.tph | 344 ++++- EET/lib/prep_2DA.tph | 2 +- .../lib/PCU_Dict_bgee-eet.tph | 1 - .../lib/PCU_Dict_eet-bgee.tph | 1 - .../EET_modConverter/lib/macros.tph | 1246 ----------------- EET/readme-EET.html | 40 +- 33 files changed, 865 insertions(+), 1561 deletions(-) rename EET/base/movies/{CREDITS_.wbm => CREDITS.wbm} (100%) create mode 100644 EET/base/spl/K#REST.SPL create mode 100644 EET/base/spl/K#UNREST.SPL delete mode 100644 EET/base/worldmap.wmp delete mode 100644 EET/compile/baf/BG0000.baf create mode 100644 EET/lib/build_worldmap.tpa diff --git a/EET/EET.tp2 b/EET/EET.tp2 index b5591019..11fb82f6 100644 --- a/EET/EET.tp2 +++ b/EET/EET.tp2 @@ -1,6 +1,6 @@ BACKUP ~EET/backup~ AUTHOR ~K4thos (swit)~ -VERSION ~beta 0.9~ +VERSION ~1.0 RC4~ README ~EET/lang/%LANGUAGE%/readme-EET.html~ ~EET/readme-EET.html~ LANGUAGE ~English~ @@ -1423,11 +1423,12 @@ SetPrivateProfileString('%row%','%option%','%option_1%') "Debug Mode" , 1 => "Program Options" "Logging On" , 1 => "Program Options" "Cheats" , 1 => "Game Options" + "Show Black Space" , 0 => "Graphics" "BG4LOGO" , 1 => "MOVIES" "BILOGO" , 1 => "MOVIES" "BLACKPI_" , 1 => "MOVIES" "BWDRAGON" , 1 => "MOVIES" - "CREDITS_" , 1 => "MOVIES" + "CREDITS" , 1 => "MOVIES" "INFELOGO" , 1 => "MOVIES" "INTRO_" , 1 => "MOVIES" "INTRO15F" , 1 => "MOVIES" @@ -1452,11 +1453,12 @@ SetPrivateProfileString('Program Options','Active Campaign','0') SetPrivateProfileString('Program Options','Debug Mode','1') SetPrivateProfileString('Program Options','Logging On','1') SetPrivateProfileString('Game Options','Cheats','1') +SetPrivateProfileString('Graphics','Show Black Space','0') SetPrivateProfileString('MOVIES','BG4LOGO','1') SetPrivateProfileString('MOVIES','BILOGO','1') SetPrivateProfileString('MOVIES','BLACKPI_','1') SetPrivateProfileString('MOVIES','BWDRAGON','1') -SetPrivateProfileString('MOVIES','CREDITS_','1') +SetPrivateProfileString('MOVIES','CREDITS','1') SetPrivateProfileString('MOVIES','INFELOGO','1') SetPrivateProfileString('MOVIES','INTRO_','1') SetPrivateProfileString('MOVIES','INTRO15F','1') @@ -1898,9 +1900,6 @@ COPY + ~.../blank.txt~ ~EET/temp/are.tph~ PATCH_LOG ~%logged%~ APPEND_OUTER + ~EET/temp/are.tph~ ~%logged%~ -COPY_EXISTING ~OH1000.ARE~ ~override/BG0000.ARE~ - WRITE_ASCII 0x94 ~BG0000~ #8 - COPY_EXISTING ~BD6100.ARE~ ~override~ ~AR0602.ARE~ ~override~ LPF fj_are_structure @@ -1923,6 +1922,18 @@ COPY_EXISTING ~BD6100.ARE~ ~override~ fj_name = ~K#ImportContainer~ END +// patching BG3300 (Beregost) +ACTION_DEFINE_ARRAY tilesToFix BEGIN 3799 3800 3879 3880 END +LAF FIX_WATER INT_VAR numTilesToFix = 4 STR_VAR wed = ~bg3300.wed~ END + +// patching BG3000 +ACTION_DEFINE_ARRAY tilesToFix BEGIN 2588 END +LAF FIX_WATER INT_VAR numTilesToFix = 1 STR_VAR wed = ~bg3000.wed~ END + +// patching BG1802 +ACTION_DEFINE_ARRAY tilesToFix BEGIN 1292 1293 END +LAF FIX_WATER INT_VAR numTilesToFix = 2 STR_VAR wed = ~bg1802.wed~ END + /*COPY_EXISTING ~TU0015.are~ ~override~ ~TU0016.are~ ~override~ ~TU0017.are~ ~override~ @@ -2273,6 +2284,12 @@ COPY_EXISTING ~BPRNG1.ITM~ ~override~ LPF DELETE_ITEM_EQEFFECT INT_VAR opcode_to_delete = "208" END //Minimum HP BUT_ONLY +//Modify permanent sleep spell effect (SoD Final) +COPY_EXISTING ~BDDAGG06.ITM~ ~override~ + ~BDDAGG07.ITM~ ~override~ + LPF ALTER_ITEM_EFFECT INT_VAR check_headers = 1 match_opcode = 39 /*Sleep*/ timing = 0 /*Instant/Limited*/ duration = 7200 /*ONE_DAY*/ END +BUT_ONLY + ///// \\\\\ ///// PRO \\\\\ ///// \\\\\ @@ -2292,6 +2309,8 @@ COPY ~EET/base/spl/SPWI123.SPL~ ~override~ ~EET/base/spl/SPCL342.SPL~ ~override~ ~EET/base/spl/K#FAMKIL.SPL~ ~override~ ~EET/base/spl/K#FAMREM.SPL~ ~override~ + ~EET/base/spl/K#REST.SPL~ ~override~ + ~EET/base/spl/K#UNREST.SPL~ ~override~ ACTION_FOR_EACH var IN 4 6 9 12 24 BEGIN COPY ~EET/base/spl/K#CURE.SPL~ ~override/K#CURE%var%.SPL~ WRITE_LONG 0x9e "%var%" @@ -2628,110 +2647,50 @@ ACTION_FOR_EACH file IN areas.tbl links.tbl trans.tra BEGIN END //EET worldmap + COPY + ~EET/tbl/map_eet_areas.tbl~ ~EET/temp~ APPEND_FILE ~EET/temp/map_bg2_areas.tbl~ APPEND_FILE ~EET/temp/map_tob_areas.tbl~ + LPF fix_table END + LPM read_area_array_from_2da COPY + ~Worldmap/map_mods_links.tbl~ ~EET/temp/map_eet_links.tbl~ APPEND_FILE ~EET/temp/map_bg2_links.tbl~ APPEND_FILE ~EET/tbl/map_ar3000_links.tbl~ //for some reason BG2:EE doesn't have links to Watcher's Keep (XL3000.2DA only has links from it) APPEND_FILE ~EET/temp/map_tob_links.tbl~ + LPF fix_table END + LPM read_link_array_from_2da COPY + ~Worldmap/map_mods_trans.tra~ ~EET/temp/map_eet_trans.tra~ APPEND_FILE ~EET/temp/map_bg2_trans.tra~ APPEND_FILE ~EET/temp/map_tob_trans.tra~ + LPF fix_table END + LPM read_trans_array_from_2da -COPY ~EET/base/worldmap.wmp~ ~override~ - -//awful code as a workaround for a bug: http://www.shsforums.net/topic/45358-nearinfinity/page-34#entry586098 -//I'm planning to write something better with arrays in future -COPY - ~EET/temp/map_eet_areas.tbl~ ~.../EET/temp~ - REPLACE_EVALUATE CASE_INSENSITIVE ~^\([A-Z0-9#_]+\)[ %TAB%]+\([A-Z0-9#_]+\)[ %TAB%]+\([A-Z0-9#_]+\)[ %TAB%]+\([0-9]+\)[ %TAB%]+\([0-9]+\)[ %TAB%]+\([0-9\-]+\)[ %TAB%]+\([0-9\-]+\)[ %TAB%]+\([A-Z0-9#_@]+\)[ %TAB%]+\([A-Z0-9#_@]+\)~ BEGIN - SPRINT are_areName ~%MATCH1%~ - PATCH_FOR_EACH var IN MATCH8 MATCH9 BEGIN - SPRINT match EVAL ~%%var%%~ - PATCH_IF ~%match%~ STRING_EQUAL_CASE ~N~ BEGIN - SPRINT EVAL ~%var%~ ~~ - END ELSE BEGIN - INNER_ACTION BEGIN - COPY - ~EET/temp/map_eet_trans.tra~ ~.../EET/temp~ - REPLACE_EVALUATE CASE_INSENSITIVE ~~~~~^\([ %TAB%]*%match%[ %TAB%]*=[ %TAB%]*[~"]\)\([^~^"]+\)\([~"]\)~~~~~ BEGIN - INNER_PATCH_SAVE string "%MATCH2%" BEGIN - REPLACE_TEXTUALLY "###" " " - END - SPRINT EVAL ~%var%~ ~%string%~ - END ~~ - END - END - END - SPRINT are_strName ~%MATCH8%~ - SPRINT are_strDesc ~%MATCH9%~ - SET are_visible = 0 - SET are_visibleAdjacent = 0 - SET are_reachable = 0 - SET are_visited = 0 - PATCH_IF (MATCH4 BAND BIT0) BEGIN - SET are_visible = 1 - END - PATCH_IF (MATCH4 BAND BIT1) BEGIN - SET are_visibleAdjacent = 1 - END - PATCH_IF (MATCH4 BAND BIT2) BEGIN - SET are_reachable = 1 - END - PATCH_IF (MATCH4 BAND BIT3) BEGIN - SET are_visited = 1 - END - INNER_ACTION BEGIN - LAF sc#addWmpAre - INT_VAR - mapIcon = MATCH5 //BAM_ANIM - xCoord = MATCH6 //X_POS - yCoord = MATCH7 //Y_POS - //FLAGS - visible = are_visible - visibleAdjacent = are_visibleAdjacent - reachable = are_reachable - visited = are_visited - STR_VAR - areName = EVAL "%are_areName%" //SHORT_NAME, CONTENT, LONG_NAME - strName = EVAL "%are_strName%" //NAME (string) - strDesc = EVAL "%are_strDesc%" //TOOLTIP (string) - END - END - END ~~ -COPY - ~EET/temp/map_eet_links.tbl~ ~.../EET/temp~ - REPLACE_EVALUATE CASE_INSENSITIVE ~^\([A-Z0-9#_]+\)[ %TAB%]+\([A-Z]+\)[ %TAB%]+\([A-Z0-9#_]+\)[ %TAB%]+\([A-Z0-9#_]+\)[ %TAB%]+\([0-9]+\)[ %TAB%]+\([0-9]+\)[ %TAB%]+\([A-Z0-9#_]+\)[ %TAB%]+\([A-Z0-9#_]+\)[ %TAB%]+\([A-Z0-9#_]+\)[ %TAB%]+\([A-Z0-9#_]+\)[ %TAB%]+\([A-Z0-9#_]+\)[ %TAB%]+\([0-9]+\)~ BEGIN - PATCH_FOR_EACH var IN MATCH4 MATCH7 MATCH8 MATCH9 MATCH10 MATCH11 BEGIN - SPRINT match EVAL ~%%var%%~ - PATCH_IF ~%match%~ STRING_EQUAL_CASE ~N~ BEGIN - SPRINT EVAL ~%var%~ ~~ - END - END - INNER_PATCH_SAVE MATCH4 "%MATCH4%" BEGIN - REPLACE_TEXTUALLY "###" " " - END - INNER_ACTION BEGIN - COPY_EXISTING ~worldmap.wmp~ ~override~ - LPF ADD_WORLDMAP_LINKS - INT_VAR - distance_scale = MATCH5 //TRV_TIME - default_entry = MATCH6 //DEF_ENTRY - encounter_probability = MATCH12 //ENC_PROB - STR_VAR - from_area = EVAL ~%MATCH1%~ //SRC_AREA - from_node = EVAL ~%MATCH2%~ //SRC_NWSE - to_area = EVAL ~%MATCH3%~ //TARGET_ARE - entry = EVAL ~%MATCH4%~ //ENTRY_NAME - random_area1 = EVAL ~%MATCH7%~ //ENC1 - random_area2 = EVAL ~%MATCH8%~ //ENC2 - random_area3 = EVAL ~%MATCH9%~ //ENC3 - random_area4 = EVAL ~%MATCH10%~ //ENC4 - random_area5 = EVAL ~%MATCH11%~ //ENC5 - END - BUT_ONLY - END - END ~~ +LAM merge_in_translations + +COPY_EXISTING ~worldmap.wmp~ ~override~ + READ_LONG 0xc mo + READ_LONG mo + 0x20 na + READ_LONG mo + 0x24 ao + READ_LONG mo + 0x28 lo + READ_LONG mo + 0x2c nl + FOR (i = 0; i < nl; ++i) BEGIN + DELETE_BYTES lo 0xd8 + END + FOR (i = 0; i < na; ++i) BEGIN + DELETE_BYTES ao 0xf0 + SET lo = lo - 0xf0 + END + WRITE_LONG mo + 0x20 0 + WRITE_LONG mo + 0x24 ao + WRITE_LONG mo + 0x28 lo + WRITE_LONG mo + 0x2c 0 +BUT_ONLY + +INCLUDE ~EET/lib/build_worldmap.tpa~ + +//SOD BG Worldmap COPY ~%patch_dir%/BGMAP.wmp~ ~override~ LPF ~EET_expand_tlk~ INT_VAR max = StrRef_cutoff RET log END @@ -2939,7 +2898,7 @@ ACTION_IF ( currentTotal > 0 ) BEGIN END ///// \\\\\ -///// Finalize installation \\\\\ +///// Finalise installation \\\\\ ///// \\\\\ COPY ~.../blank.txt~ ~override/EET.flag~ diff --git a/EET/base/2da/CAMPAIGN.2DA b/EET/base/2da/CAMPAIGN.2DA index 66e69ca7..88097c2e 100644 --- a/EET/base/2da/CAMPAIGN.2DA +++ b/EET/base/2da/CAMPAIGN.2DA @@ -1,10 +1,10 @@ 2DA V1.0 * WORLDSCRIPT DESCRIPTION ICON INTERDIA LOADHINT MASTAREA MUSIC NAME NPCLEVEL TBPPARTY PDIALOG SAVE_DIR STARTARE STRTGOLD STARTPOS STWEAPON 25STWEAP XPCAP XPLIST WORLDMAP WORLDSCRIPT MAP_DROPSHADOW MAP_FONTCOLOR KEEP_POWERS INTRO_MOVIE IMPORT INTERACT YEARS REPUTATION CLASTEXT RACETEXT -SOA BALDUR 4000102 2 INTERDIA * MASTAREA 33 4000109 NPCLEVEL * PDIALOG save STARTARE STRTGOLD STARTPOS * * * * WORLDMAP BALDUR 1 0xFFFFFFFF 1 INTRO15F PARTY INTERACT YEARS REPUTATI CLASTEXT RACETEXT -TOB BALDUR25 4000103 3 25BANTER * MASTAREA 81 4000110 NPCLVL25 * 25DIALOG save 25STARTA STRTGOLD 25STARTP 25STWEAP 25STWEAP * * WORLDMAP BALDUR25 1 0xFFFFFFFF 0 INTRO PARTY INTERACT 25YEARS REPUTATI CLASTEXT RACETEXT -BG1 BALDUR 4000100 0 BGBANTER * MASTAREA 159 4000107 BGNPCLVL * BGDIALOG save BGSTARTA STRTGOLD BGSTARTP STWEAPON STWEAPON * * WORLDMAP BALDUR 1 0xFFFFFFFF 0 INTRO_ PARTY INTERACT BGYEARS REPUTATI BGCLATXT BGRACTXT -SOD BDBALDUR 4000101 1 BDBANTER * MASTAREA 152 4000108 NPCLVLDS * BDDIALOG save SODSTRTA STRTGOLD SODSTPOS SODWEAP BDSTWEAP * * BGMAP BDBALDUR 1 0xFFFFFFFF 1 SODCIN01 PARTY SODINTER SODYEARS REPUTATI SODCLTXT SODRACE +SOA BALDUR 4000102 2 INTERDIA * MASTAREA 33 4000109 * * PDIALOG save STARTARE STRTGOLD STARTPOS * * * * WORLDMAP BALDUR 1 0xFFFFFFFF 1 INTRO15F PARTY INTERACT YEARS REPUTATI CLASTEXT RACETEXT +TOB BALDUR25 4000103 3 25BANTER * MASTAREA 81 4000110 * * 25DIALOG save 25STARTA STRTGOLD 25STARTP 25STWEAP 25STWEAP * * WORLDMAP BALDUR25 1 0xFFFFFFFF 0 INTRO PARTY INTERACT 25YEARS REPUTATI CLASTEXT RACETEXT +BG1 BALDUR 4000100 0 BGBANTER * MASTAREA 159 4000107 * * BGDIALOG save BGSTARTA STRTGOLD BGSTARTP STWEAPON STWEAPON * * WORLDMAP BALDUR 1 0xFFFFFFFF 0 INTRO_ PARTY INTERACT BGYEARS REPUTATI BGCLATXT BGRACTXT +SOD BDBALDUR 4000101 1 BDBANTER * MASTAREA 152 4000108 * * BDDIALOG save SODSTRTA STRTGOLD SODSTPOS SODWEAP BDSTWEAP * * BGMAP BDBALDUR 1 0xFFFFFFFF 1 SODCIN01 PARTY SODINTER SODYEARS REPUTATI SODCLTXT SODRACE BP1 BALDUR 4000104 4 * * MASTAREA 106 4000111 * TBPPART_ * bpsave STARTBP_ STRTGOLD * * * * * WORLDMAP BALDUR 1 0xFFFFFFFF 0 BLACKPI_ PARTY * BGYEARS * * * BP2 BALDUR 4000105 5 * * MASTAREA 106 4000112 * TBPPARTY * bpsave STARTBP STRTGOLD * * * * * WORLDMAP BALDUR 1 0xFFFFFFFF 0 BLACKPIT PARTY * YEARS * * * TUT BALDUR 4000106 6 * * MASTAREA 136 4000113 * * * save TUSTARTA STRTGOLD TUSTARTP STWEAPON STWEAPON * * WORLDMAP BALDUR 1 0xFFFFFFFF 0 BGENTER PARTY * BGYEARS REPUTATI BGCLATXT BGRACTXT diff --git a/EET/base/lua/util.lua b/EET/base/lua/util.lua index 10b699f3..030d3156 100644 --- a/EET/base/lua/util.lua +++ b/EET/base/lua/util.lua @@ -502,7 +502,7 @@ function chapterText() elseif (chapter == 19) then return Infinity_FetchString(74353) elseif (chapter < 23) then - return Infinity_FetchString(70999 + chapter) + return Infinity_FetchString(71000 + chapter) else return t("ARENA_MODE_LABEL") end diff --git a/EET/base/movies/CREDITS_.wbm b/EET/base/movies/CREDITS.wbm similarity index 100% rename from EET/base/movies/CREDITS_.wbm rename to EET/base/movies/CREDITS.wbm diff --git a/EET/base/spl/K#REST.SPL b/EET/base/spl/K#REST.SPL new file mode 100644 index 0000000000000000000000000000000000000000..a298353c112c22ca9c1e685e0295ba8ddcc2f944 GIT binary patch literal 6826 zcmb7|&ui3B5XaxPRa=W*3f2nBDq1UQZMNI4MGtPfmPGeQOsY#gO1%_B@hABeL_H}UbS9f=Up6nhGXvRdUOxF|-jB>o;=9H42`ioc z2X^uL4Yh2~m1sbTVSoB;>2Tq?4_?sb^0^RW1(G=*Qno_HS-;}xn z`&w&fs#Sd%R_Z;pbhO~CW4|4Ycz^WF`Mj#F>!f%V@Lu6<5C83z6v#5Y{~9Q{+kW6Z#)#o;MF1bkTkU|pQe zWI!QqcLL>FRnGDMbja)aan+R;;<@>Vcy2vI{6@H?#DAPK3EwN^cQSdJuV}ujI)j#Z zzLI#~&KLu_nTL3ug`&$~N&H9-ia>*z`D)1;#taxYnlHV-acZT7_`T4?nJ-$;nEg3C z>0|FCJhz@9e=s{s^ovZM^f5_F^ttsj>7NtoyF&g9lkda#aj+TKsJ~;C^7wJz#^#ur zc;BsE5rd(D`nwPQlfH?gHd;S3OrG@bA|Hq}u4hPpR>)sw`a}8;m^_W=qQ<*Z#q6(qdXj$jr6y{X-R*#NBO4y?27VcXP}k**&XGZ>euD>ru+e+zBHfK z#pgtSsJ^w{oMnMR+>-dLWh^JvTX^2rhBBP>@FR>5-1YDqc&yF! z=e=V46BTbV?mVtoQWwK=(84?U26!C!38AYW@ceY&~uO literal 0 HcmV?d00001 diff --git a/EET/base/spl/K#UNREST.SPL b/EET/base/spl/K#UNREST.SPL new file mode 100644 index 0000000000000000000000000000000000000000..10c214c556269ecdbd00feed8b549456f3539adf GIT binary patch literal 298 zcmWFz@KFdeR8aU21ohKqFu=h91_l;52bIAHBaldur's Gate: Enhanced Edition Trilogy (EET) Autor: K4thos
Kontrybutorzy na GitHub: WhiteAgnus, AWizardDidIt, Crevs Daak

W sieci: Strona i Forum dyskusyjne

-

Wersja 1.0 Release Candidate 2
+

Wersja 1.0 Release Candidate 4
Dostępne wersje językowe: Angielski, Polski, Niemiecki, Francuski, Hiszpański
Wsparcie dla systemów operacyjnych: Windows, Mac OS X

@@ -224,7 +224,7 @@

Instalacja

Planując większe instalacje z modami warto rozważyć użycie programu Big World Setup (wsparcie dla EET zostanie dodane wkrótce). Narzędzie to pobierze, rozpakuje i zainstaluje wybrane modyfikacje razem z EET. Oszczędność czasu i frustracji związanej z kolejnością instalacji i kompatybilnością modów.

-

EET Core Component (setup-EET)

+

Inicjacja instalacji EET (setup-EET)

Podstawowy komponent EET (setup-EET) wymaga świeżej, "czystej" instalacji gry BG2:EE (wymagany patch v2.3.67.3). Mody takie jak tłumaczenia i dubbing w niczym nie przeszkadzają, jednak instalacja innych modów (zwłaszcza większych, modyfikujących oryginalne zasoby) nie jest wskazana, bo może się to skończyć problemami podczas instalacji EET.

@@ -244,7 +244,7 @@

EET Core Component (setup-EET)

To jeszcze nie koniec procesu instalacji EET - przeczytaj poniższą sekcję.

-

EET End Installation Components (setup-EET_end)

+

Zwieńczenie instalacji EET (setup-EET_end)

Po instalacji głównego komponentu w folderze z grą znajdziesz dodatkowy plik setup-EET_end.exe. Dwa pierwsze komponenty (aktualizacja zapisów gry z poprzedniej instalacji oraz zmiana GUI) oferowane przez ten instalator są opcjonalne. Trzeci komponent jest WYMAGANY i powinien on zostać zainstalowany NA SAMYM KOŃCU, po instalacji wszystkich innych modów.

@@ -252,9 +252,9 @@

EET End Installation Components (setup-EET_end)

W skład setup-EET_end wchodzą 3 komponenty:

    -
  • Update old saves to work with new installation - OPCJONALNY - zerknij do F.A.Q. po wiÄ™cej informacji. JeÅ›li używasz opcjonalnego modu BP-BGT Worldmap to upewnij siÄ™, że jest zainstalowany przed instalacjÄ… tego komponentu.
  • -
  • Alternative GUI (SoD) - OPCJONALNY - podmiana GUI BG2:EE na GUI z dodatku Siege of Dragonspear.
  • -
  • Last component in install order - WYMAGANY - komponent koÅ„czÄ…cy instalacjÄ™ EET (trzeba go zainstalować przed rozpoczÄ™ciem gry).
  • +
  • Aktualizacja starych zapisów gry dla obecnej instalacji - OPCJONALNY - zerknij do F.A.Q. po wiÄ™cej informacji. JeÅ›li używasz opcjonalnego modu BP-BGT Worldmap to upewnij siÄ™, że jest zainstalowany przed instalacjÄ… tego komponentu.
  • +
  • Alternatywne GUI (SoD) - OPCJONALNY - podmiana GUI BG2:EE na GUI z dodatku Siege of Dragonspear.
  • +
  • ZwieÅ„czenie instalacji EET - WYMAGANY - komponent koÅ„czÄ…cy instalacjÄ™ EET (trzeba go zainstalować przed rozpoczÄ™ciem gry).

Jeśli po zakończonej instalacji komponentów zmienisz zdanie i postanowisz doinstalować jakieś mody, to wpierw uruchom setup-EET_end.exe, i odinstaluj ostatni komponent. Gdy będziesz już zadowolony z doboru modów zainstaluj go ponownie.

@@ -263,7 +263,7 @@

Automatyczna instalacja (dla wyjadaczy)

Po rozpakowaniu archiwum, zamiast uruchamiać plik setup, otwórz wiersz poleceń, przejdź do folderu z BG2:EE, i odpal instalatory wykorzystując kod wiersza poleceń, tak jak opisano poniżej. Szybciej jednak będzie wkleić kod wiersza poleceń do pliku z rozszerzeniem BAT i odpalić go zamiast instalatora.

-

EET Core Component (setup-EET)

+

Inicjacja instalacji EET (setup-EET)

setup-EET.exe --force-install 0 --skip-at-view --language X --args-list [flags] [path]

@@ -312,7 +312,7 @@

Automatyczna instalacja (dla wyjadaczy)


-

EET End Installation Components (setup-EET_end)

+

Zwieńczenie instalacji EET (setup-EET_end)

setup-EET_end.exe --force-install-list [numbers] --language X

@@ -335,9 +335,9 @@

Automatyczna instalacja (dla wyjadaczy)

[numbers] -

0 - Update old saves to work with new installation
- 1 - Alternative GUI (SoD)
- 2 - Last component in install order (required before starting the game)

+

0 - Aktualizacja starych zapisów gry dla obecnej instalacji
+ 1 - Alternatywne GUI (SoD)
+ 2 - Zwieńczenie instalacji EET (ostatni mod w kolejności instalacji)

@@ -378,11 +378,10 @@

Jak rozpocząć grę?

Jakie są różnice pomiędzy EET a grą Baldur's Gate: Enhanced Edition?

-

Z punktu widzenia gracza brak znaczących różnic. Od strony technicznej jest trochę zmian mających na celu usunięcie konfliktów pomiędzy zasobami BG1 i BG2, jednak nie powinno to być w żaden sposób zauważalne podczas gry. Jedyne, co mi przychodzi na myśl, to różnica w sposobie implementacji kryzysu żelaza na Wybrzeżu Mieczy. Zamiast 1% szansy na strzaskanie normalnej broni podczas BG1, EET rozszerzył tę funkcjonalność na bronie (0.5%), zbroje (0.2%), tarcze (0.2%) i hełmy (0.1%). Sam kryzys żelaza dotknie nie tylko drużynę gracza, ale i przeciwników. Taki sposób implementacji można uznać za przywrócenie planowanej funkcjonalności (na to wskazują istniejące BAMy dla innych typów zniszczonych przedmiotów i ustawione flagi w plikach ITM), jednak zwolennicy oryginalnych zasad bez trudu mogą przywrócić funkcjonalność znaną z BG1 instalując odpowiedni komponent modu EET Tweaks. Oprócz tego zmieniona została mapa świata. Gra nie kończy się oczywiście po filmiku końcowym pierwszej części Baldura.

+

Z punktu widzenia gracza brak znaczących różnic. Od strony technicznej jest trochę zmian mających na celu usunięcie konfliktów pomiędzy zasobami BG1 i BG2, jednak nie powinno to być w żaden sposób zauważalne podczas gry. Oprócz tego zmieniona została mapa świata. Gra nie kończy się oczywiście po filmiku wieńczącym pierwszą część Baldura.

Jakie są różnice pomiędzy EET a dodatkiem Siege of Dragonspear?

-

Vanilla SoD blocks access to areas after moving from chapter to chapter which is against EET goals. While this design decision is still true in EET for now we're planning to change it to work more like in BG1 and BG2 (areas remain open in later parts of the story). Other than this planned feature SoD worldmap is already merged with EET Worldmap and after finishing the story you will be automatically migrated into BG2.

Dodatek blokuje dostęp do obszarów przechodząc z rozdziału do rozdziału. Na ten moment nie zostało to jeszcze zmienione, ale wkrótce nie będzie to już miało miejsca w EET. Oprócz tego standardowe płynne przejście pomiędzy grami i zintegrowana mapa świata.

@@ -400,9 +399,9 @@

Jaka powinna być kolejność instalacji modów?

Kolejność instalacji modów z EET wygląda następująco:

  1. Mody instalowane na BG:EE
  2. -
  3. Podstawowy komponent EET (setup-EET) zainstalowany na BG2:EE
  4. +
  5. Inicjacja instalacji EET (setup-EET) zainstalowany na BG2:EE
  6. Mody kompatybilne z EET
  7. -
  8. Trzeci komponent setup-EET_end zamyka instalacjÄ™
  9. +
  10. Zwieńczenie instalacji EET (trzeci komponent setup-EET_end zamykający instalację)
@@ -453,17 +452,21 @@

Rozwiązywanie problemów

Krytyczne problemy w czasie instalacji

-

"(...) BG:EE mod is not recognized by EET, so it can't be installed on BG2:EE"

+

Instalator odrzuca podaną ścieżkę do Baldur's Gate: Enhanced Edition.

+ +

Możliwe że obecna instalacja BG:EE jest uszkodzona (brakujące/uszkodzone pliki) lub używasz wersji SoD kupionej w sklepie GOG lub Steam, bez wcześniejszej instalacji narzędzia modmerge. Weryfikacja poprawności instalacji odbywa się przez sprawdzenie obecności pliku "movies/sodcin05.wbm" w folderze z BG:EE. Spróbuj pobrać/zainstalować Baldur's Gate: Enhanced Edition od nowa. Możesz też spróbować podać ścieżkę do gry z poziomu wiersza poleceń, tak jak wspomniano w sekcji dotyczącej instalacji modu.

+ +

"(...) BG:EE mod is not recognized by EET, so it can't be imported to BG2:EE with EET"

-

Jak wspomniano w FAQ EET ogranicza konwersję zasobów BG:EE do tych pochodzących z oryginalnej gry i modów znajdujących się na liście kompatybilności. Dodawanie nowych modów do tej listy nie wymaga dużo pracy, więc z czasem lista zapewne się powiększy.

+

Jak wspomniano w FAQ EET ogranicza konwersję zasobów BG:EE do tych pochodzących z oryginalnej gry i modów znajdujących się na liście kompatybilności. Dodawanie nowych modów do tej listy nie wymaga dużo pracy, więc z czasem lista zapewne się powiększy.

"TLK for language: (...) not found in BG:EE directory"

Sprawdź czy język (plik TLK) wybrany w czasie instalacji faktycznie znajduje się w folderze z BG:EE.

-

Instalator odrzuca podaną ścieżkę do Baldur's Gate: Enhanced Edition.

+

ERROR: COPY (...) FAILED: cannot open target

-

Możliwe że obecna instalacja BG:EE jest uszkodzona (brakujące/uszkodzone pliki). Spróbuj pobrać/zainstalować Baldur's Gate: Enhanced Edition od nowa. Możesz też spróbować podać ścieżkę do gry z poziomu wiersza poleceń, tak jak wspomniano w sekcji dotyczącej instalacji modu.

+

WeiDU wywala się przy próbie edycji ukrytych plików. Wyłącz atrybut ukrycia plików.

WeiDU stopped the installation because of error.

@@ -492,6 +495,10 @@

Problemy w grze

Jest to znany bug silnika gry. Miejmy nadzieję, że zostanie naprawiony przez Beamdog w następnej aktualizacji gry.

+

Woda w niektórych basenach i fontannach nie jest prawidłowo wyświetlana.

+ +

Problem znany, ale jeszcze nie wypracowaliśmy rozwiązania. Lista znanych miejsc, gdzie szkopuł występuje dostępna w tym poście. Proszę zgłaszać inne obszary z tym problemem.

+

Podziękowania

@@ -500,8 +507,8 @@

Podziękowania

Podziękowania (w kolejności alfabetycznej)

    -
  • AL|EN za wsparcie podczas tworzenia EET
  • -
  • Argent77 za prace nad narzÄ™dziami: Near Infinity, TileConv, tile2ee
  • +
  • AL|EN za wsparcie podczas tworzenia EET i za integracjÄ™ z Big World Setup
  • +
  • Argent77 za wsparcie i prace nad narzÄ™dziami: Near Infinity, TileConv, tile2ee
  • Ascension64 za inspiracjÄ™ w postaci moda BGT-WeiDU
  • AWizardDidIt za prace nad dialogami (mod IWD-in-EET)
  • Bardez za inspiracjÄ™ w postaci oryginalnej wersji moda Baldur's Gate Trilogy
  • diff --git a/EET/lang/pl_PL/setup.tra b/EET/lang/pl_PL/setup.tra index bbcabe1f..36ce03b9 100644 --- a/EET/lang/pl_PL/setup.tra +++ b/EET/lang/pl_PL/setup.tra @@ -20,7 +20,7 @@ Is this correct? [Y]es (keep it as it is) or [N]o (change it to %LANGUAGEcase%)~ //setup-EET_end component names @910000 = ~Update old EET saves to work with new installation~ //this one is not stored in WeiDU.log @910001 = ~Alternative EET GUI (SoD)~ -@910002 = ~Finalize EET (last mod in install order)~ +@910002 = ~Finalise EET (last mod in install order)~ //setup-EET_end messages during installation @910003 = ~You must have EET core component installed~ diff --git a/EET/lib/EET_end.tp2 b/EET/lib/EET_end.tp2 index fc292332..9a6880ad 100644 --- a/EET/lib/EET_end.tp2 +++ b/EET/lib/EET_end.tp2 @@ -95,7 +95,7 @@ COPY ~EET/SoD_GUI~ ~override~ /////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\ /////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\ -BEGIN @910002 //Finalize EET (last mod in install order) +BEGIN @910002 //Finalise EET (last mod in install order) REQUIRE_COMPONENT ~EET/EET.tp2~ ~0~ @910003 //You must have EET core component installed CLEAR_ARRAYS @@ -284,6 +284,22 @@ BUT_ONLY ///// Append missing entries \\\\\ ///// \\\\\ +//CAMPAIGN.2DA +COPY_EXISTING ~CAMPAIGN.2DA~ ~override~ + SET_2DA_ENTRY 0 9 32 ~*~ + SET_2DA_ENTRY 1 9 32 ~*~ + SET_2DA_ENTRY 2 9 32 ~*~ + SET_2DA_ENTRY 3 9 32 ~*~ +BUT_ONLY +//even after disabling it from 2DA default files are still used +<<<<<<<< .../NPCLEVEL.2DA +2DA V1.0 +**** + 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 +>>>>>>>> +COPY ~.../NPCLEVEL.2DA~ ~override~ + ~.../NPCLEVEL.2DA~ ~override/NPCLVL25.2DA~ + //PDIALOG //25DIALOG.2DA already patched with PDIALOG.2DA entries ACTION_PHP_EACH pdialog_2da AS file => dummy BEGIN @@ -364,8 +380,18 @@ END ACTION_PHP_EACH clastext_2da AS file => dummy BEGIN COPY_EXISTING ~%file%.2da~ ~override~ PRETTY_PRINT_2DA - READ_2DA_ENTRIES_NOW clastext_tbl 8 - FOR (i=1; i < clastext_tbl; ++i) BEGIN + REPLACE_TEXTUALLY ~^[ ]+CLASSID[ ]+KITID .+$~ ~ CLASSID KITID LOWER DESCSTR MIXED BIOGRAPHY FALLEN BRIEFDESC FALLEN_NOTICE~ + REPLACE_EVALUATE CASE_INSENSITIVE ~^\([^ ]+[ ]+[^ ]+[ ]+.+\)$~ BEGIN + INNER_PATCH_SAVE MATCH1 ~%MATCH1%~ BEGIN + COUNT_REGEXP_INSTANCES ~[ ]+~ num_matches + WHILE (num_matches < 9) BEGIN + REPLACE_TEXTUALLY ~$~ ~ -1~ + SET num_matches = num_matches + 1 + END + END + END ~%MATCH1%~ + READ_2DA_ENTRIES_NOW clastext_tbl 10 + FOR (i=0; i < clastext_tbl; ++i) BEGIN READ_2DA_ENTRY_FORMER clastext_tbl i 0 class PHP_EACH clastext_2da AS cmp_file => dummy BEGIN PATCH_IF (NOT ~%file%~ STRING_EQUAL_CASE ~%cmp_file%~) AND (NOT FILE_CONTAINS_EVALUATED (~%cmp_file%.2DA~ ~^[ %TAB%]*%class%[ %TAB%]~)) BEGIN @@ -377,22 +403,12 @@ ACTION_PHP_EACH clastext_2da AS file => dummy BEGIN READ_2DA_ENTRY_FORMER clastext_tbl i 6 biography READ_2DA_ENTRY_FORMER clastext_tbl i 7 fallen READ_2DA_ENTRY_FORMER clastext_tbl i 8 briefdesc - COUNT_2DA_COLS "cntcol" - PATCH_IF (cntcol > 9) BEGIN - READ_2DA_ENTRY_FORMER clastext_tbl i 9 fallen_notice - END ELSE BEGIN - SPRINT fallen_notice ~-1~ - END + READ_2DA_ENTRY_FORMER clastext_tbl i 9 fallen_notice INNER_ACTION BEGIN //PRINT ~Patching %cmp_file%.2DA: %class% %classid% %kitid% %lower% %descstr% %mixed% %biography% %fallen% %briefdesc% %fallen_notice%~ - APPEND ~%cmp_file%.2DA~ ~%class% %classid% %kitid% %lower% %descstr% %mixed% %biography% %fallen% %briefdesc%~ + APPEND ~%cmp_file%.2DA~ ~%class% %classid% %kitid% %lower% %descstr% %mixed% %biography% %fallen% %briefdesc% %fallen_notice%~ COPY_EXISTING ~%cmp_file%.2da~ ~override~ PRETTY_PRINT_2DA - COUNT_2DA_COLS "cntcol" - PATCH_IF (cntcol > 9) BEGIN - REPLACE_TEXTUALLY ~^\(%class% .+\)$~ ~\1 %fallen_notice%~ - END - PRETTY_PRINT_2DA BUT_ONLY END END diff --git a/EET/lib/PCU_Dict.tph b/EET/lib/PCU_Dict.tph index 92546bd2..e17f94ea 100644 --- a/EET/lib/PCU_Dict.tph +++ b/EET/lib/PCU_Dict.tph @@ -1505,7 +1505,6 @@ END ACTION_DEFINE_ASSOCIATIVE_ARRAY remapped_mve BEGIN "INTRO" => "INTRO_" - "CREDITS" => "CREDITS_" //otherwise the movie will be unskippable (hardcoded) "ENDCRDIT" => "ENDCRDI_" //8 characters limit "BLACKPIT" => "BLACKPI_" //8 characters limit END diff --git a/EET/lib/bg1_BCS.tph b/EET/lib/bg1_BCS.tph index 8231a29e..a57b8f0f 100644 --- a/EET/lib/bg1_BCS.tph +++ b/EET/lib/bg1_BCS.tph @@ -870,32 +870,31 @@ EXTEND_TOP ~BD0120.BCS~ ~.../BD0120-et.baf~ //BD6100.BCS COPY_EXISTING ~BD6100.BCS~ ~override~ DECOMPILE_AND_PATCH BEGIN - /*SPRINT textToReplace ~IncrementGlobal("bd_finale","bd6100",10)~ + SPRINT textToReplace ~IncrementGlobal("bd_finale","bd6100",10)~ COUNT_REGEXP_INSTANCES ~%textToReplace%~ num_matches PATCH_IF (num_matches > 0) BEGIN REPLACE_TEXTUALLY ~%textToReplace%~ ~IncrementGlobal("bd_finale","bd6100",1)~ PATCH_PRINT ~Patching: %num_matches% matches found in %SOURCE_FILESPEC% for REPLACE_TEXTUALLY: %textToReplace%~ END ELSE BEGIN PATCH_WARN ~WARNING: could not find %textToReplace% in %SOURCE_FILESPEC%~ - END*/ + END SPRINT textToReplace ~ContinueGame(FALSE)[%newline%]*EndCredits()~ COUNT_REGEXP_INSTANCES ~%textToReplace%~ num_matches PATCH_IF (num_matches > 0) BEGIN - REPLACE_TEXTUALLY ~%textToReplace%~ ~CreateCreatureObject("K#TELBGT",Player1,0,0,0)~//~~ + REPLACE_TEXTUALLY ~%textToReplace%~ ~~ PATCH_PRINT ~Patching: %num_matches% matches found in %SOURCE_FILESPEC% for REPLACE_TEXTUALLY: %textToReplace%~ END ELSE BEGIN PATCH_WARN ~WARNING: could not find %textToReplace% in %SOURCE_FILESPEC%~ END - /*SPRINT textToReplace ~PlaySound("dpjon156")[%newline%]*Wait(4)[%newline%]*EndCutSceneMode()~ + SPRINT textToReplace ~PlaySound("dpjon156")[%newline%]*Wait(4)[%newline%]*EndCutSceneMode()~ COUNT_REGEXP_INSTANCES ~%textToReplace%~ num_matches PATCH_IF (num_matches > 0) BEGIN - REPLACE_TEXTUALLY ~%textToReplace%~ ~Wait(4) - EndCutSceneMode() + REPLACE_TEXTUALLY ~%textToReplace%~ ~EndCutSceneMode() CreateCreatureObject("K#TELBGT",Player1,0,0,0)~ PATCH_PRINT ~Patching: %num_matches% matches found in %SOURCE_FILESPEC% for REPLACE_TEXTUALLY: %textToReplace%~ END ELSE BEGIN PATCH_WARN ~WARNING: could not find %textToReplace% in %SOURCE_FILESPEC%~ - END*/ + END END BUT_ONLY @@ -925,6 +924,71 @@ COPY_EXISTING ~BD6200.BCS~ ~override~ END BUT_ONLY +<<<<<<<< .../BD6200-et.baf +IF + Global("K#ReputationSet","BD6200",0) + Alignment(Player1,LAWFUL_GOOD) + ReputationGT(Player1,10) +THEN + RESPONSE #100 + SetGlobal("K#ReputationSet","BD6200",1) + ReputationSet(10) + Continue() +END + +IF + Global("K#ReputationSet","BD6200",0) + OR(2) + Alignment(Player1,NEUTRAL_GOOD) + Alignment(Player1,CHAOTIC_GOOD) + ReputationGT(Player1,9) +THEN + RESPONSE #100 + SetGlobal("K#ReputationSet","BD6200",1) + ReputationSet(9) + Continue() +END + +IF + Global("K#ReputationSet","BD6200",0) + OR(3) + Alignment(Player1,LAWFUL_NEUTRAL) + Alignment(Player1,NEUTRAL) + Alignment(Player1,CHAOTIC_NEUTRAL) + ReputationGT(Player1,8) +THEN + RESPONSE #100 + SetGlobal("K#ReputationSet","BD6200",1) + ReputationSet(8) + Continue() +END + +IF + Global("K#ReputationSet","BD6200",0) + OR(2) + Alignment(Player1,LAWFUL_EVIL) + Alignment(Player1,NEUTRAL_EVIL) + ReputationGT(Player1,7) +THEN + RESPONSE #100 + SetGlobal("K#ReputationSet","BD6200",1) + ReputationSet(7) + Continue() +END + +IF + Global("K#ReputationSet","BD6200",0) + Alignment(Player1,CHAOTIC_EVIL) + ReputationGT(Player1,6) +THEN + RESPONSE #100 + SetGlobal("K#ReputationSet","BD6200",1) + ReputationSet(6) + Continue() +END +>>>>>>>> +EXTEND_TOP ~BD6200.BCS~ ~.../BD6200-et.baf~ + //BDSODTRN.BCS COPY_EXISTING ~BDSODTRN.BCS~ ~override~ DECOMPILE_AND_PATCH BEGIN @@ -981,7 +1045,7 @@ EXTEND_TOP ~BG0900.BCS~ ~.../BG0900-et.baf~ IF Global("K#NewGame","BG2600",0) !HasItem("staf01",Player1) - !HasItemSlot(Player2,SLOT_WEAPON) + !HasItemSlot(Player1,SLOT_WEAPON) !Class(Player1,MONK) CheckStatGT(Player1,5,STR) THEN diff --git a/EET/lib/bg2_2DA.tph b/EET/lib/bg2_2DA.tph index bdba8ed1..6a952b66 100644 --- a/EET/lib/bg2_2DA.tph +++ b/EET/lib/bg2_2DA.tph @@ -815,7 +815,7 @@ ACTION_DEFINE_ASSOCIATIVE_ARRAY table_2DA_moviedesc BEGIN "BWDRAGON" => "62089" "CAMP" => "19662" "CNDLKEEP" => "19663" - "CREDITS_" => "15591" + "CREDITS" => "15591" "DUNGEON" => "19664" "DURLAG" => "99924075" "ELDRCITY" => "19665" @@ -1686,35 +1686,6 @@ COPY + ~EET/temp/2da/BDBANTER.2DA~ ~EET/temp/2da~ PRETTY_PRINT_2DA BUT_ONLY -///// \\\\\ -///// NPCLEVEL.2DA, BGNPCLVL.2DA, NPCLVLDS.2DA \\\\\ -///// \\\\\ - -COPY_EXISTING ~NPCLEVEL.2DA~ ~override~ - PRETTY_PRINT_2DA - REPLACE_TEXTUALLY ~^Imoen2.+[%newline%]*~ ~~ - REPLACE_TEXTUALLY ~^Imoen ~ ~Imoen2 ~ - PRETTY_PRINT_2DA -BUT_ONLY - -COPY + ~EET/temp/2da/BGNPCLVL.2DA~ ~EET/temp/2da~ - PRETTY_PRINT_2DA - REPLACE_TEXTUALLY ~^Imoen ~ ~Imoen2 ~ - REPLACE_TEXTUALLY ~ QUAYLE ~ ~QUAYLE_ ~ - REPLACE_TEXTUALLY ~ XAN ~ ~ XAN_ ~ - REPLACE_TEXTUALLY ~ XZAR ~ ~ XZAR_ ~ - PRETTY_PRINT_2DA - -COPY + ~EET/temp/2da/NPCLVLDS.2DA~ ~EET/temp/2da~ - PRETTY_PRINT_2DA - REPLACE_TEXTUALLY ~^Imoen ~ ~Imoen2 ~ - REPLACE_TEXTUALLY ~Imoen6~ ~Imoen6_~ - REPLACE_TEXTUALLY ~Viconi6~ ~Viconi6_~ - REPLACE_TEXTUALLY ~Edwin7~ ~Edwin7_~ - REPLACE_TEXTUALLY ~Jaheir7~ ~Jaheir7_~ - REPLACE_TEXTUALLY ~Minsc7~ ~Minsc7_~ - PRETTY_PRINT_2DA - ///// \\\\\ ///// PDIALOG.2DA, BGDIALOG.2DA, BDDIALOG.2DA \\\\\ ///// \\\\\ diff --git a/EET/lib/bg2_BCS.tph b/EET/lib/bg2_BCS.tph index e1a2d55d..5bddb358 100644 --- a/EET/lib/bg2_BCS.tph +++ b/EET/lib/bg2_BCS.tph @@ -779,7 +779,7 @@ IF !BeenInParty("Edwin") GlobalLT("chapter","GLOBAL",20) //!StateCheck("Edwin",STATE_REALLY_DEAD) - LevelLT(Player1,9) + //LevelLT(Player1,9) THEN RESPONSE #100 CreateCreature("Edwin7",[852.340],S) @@ -788,7 +788,7 @@ THEN Continue() END -IF +/*IF Global("K#EdwinImport","AR0304",0) !BeenInParty("Edwin") GlobalLT("chapter","GLOBAL",20) @@ -843,7 +843,7 @@ THEN ActionOverride("Edwin",MakeGlobalOverride()) SetGlobal("K#EdwinImport","AR0304",1) Continue() -END +END*/ >>>>>>>> EXTEND_TOP ~AR0304.BCS~ ~.../AR0304-et.baf~ @@ -1083,7 +1083,7 @@ IF !BeenInParty("Jaheira") GlobalLT("chapter","GLOBAL",20) !StateCheck("Jaheira",STATE_REALLY_DEAD) - LevelLT(Player1,8) + //LevelLT(Player1,8) THEN RESPONSE #100 CreateCreature("Jaheir7",[3898.2676],S) // Jaheira @@ -1092,7 +1092,7 @@ THEN Continue() END -IF +/*IF Global("K#JaheiraImport","AR0602",0) !BeenInParty("Jaheira") GlobalLT("chapter","GLOBAL",20) @@ -1133,7 +1133,7 @@ THEN ActionOverride("Jaheira",MakeGlobalOverride()) SetGlobal("K#JaheiraImport","AR0602",1) Continue() -END +END*/ IF Global("K#MinscImport","AR0602",0) @@ -1252,7 +1252,7 @@ IF !BeenInParty("Minsc") GlobalLT("chapter","GLOBAL",20) !StateCheck("Minsc",STATE_REALLY_DEAD) - LevelLT(Player1,8) + //LevelLT(Player1,8) THEN RESPONSE #100 CreateCreature("Minsc7",[4029.2759],S) // Minsc @@ -1261,7 +1261,7 @@ THEN Continue() END -IF +/*IF Global("K#MinscImport","AR0602",0) !BeenInParty("Minsc") GlobalLT("chapter","GLOBAL",20) @@ -1317,7 +1317,7 @@ THEN ActionOverride("Minsc",MakeGlobalOverride()) SetGlobal("K#MinscImport","AR0602",1) Continue() -END +END*/ IF Global("ENDOFBG1","GLOBAL",0) @@ -1354,6 +1354,7 @@ THEN SetGlobal("K#NewGame","AR0602",2) SetGlobal("ENDOFBG1","GLOBAL",2) StartMovie("INTRO15F") + ActionOverride(Player1,MakeUnselectable(1)) RemoveWorldmapAreaFlag("BD0010",15) //Visible, Reveal from linked area, Can be visited, Has been visited AddWorldmapAreaFlag("AR0020",ENABLED) //Reveal from linked area ReallyForceSpellRES("K#FAMREM",Player1) @@ -1539,7 +1540,7 @@ IF !BeenInParty("Viconia") GlobalLT("chapter","GLOBAL",20) !StateCheck("Viconia",STATE_REALLY_DEAD) - LevelLT(Player1,8) + //LevelLT(Player1,8) THEN RESPONSE #100 CreateCreatureImpassable("VICONI6",[1821.1081],S) @@ -1548,7 +1549,7 @@ THEN Continue() END -IF +/*IF Global("K#ViconiaImport","AR1000",0) !BeenInParty("Viconia") GlobalLT("chapter","GLOBAL",20) @@ -1606,7 +1607,7 @@ THEN ActionOverride("Viconia",MakeGlobalOverride()) SetGlobal("K#ViconiaImport","AR1000",1) Continue() -END +END*/ IF Global("K#ViconiaSpawn","AR1000",0) @@ -1632,34 +1633,59 @@ EXTEND_TOP ~AR1000.BCS~ ~.../AR1000-et.baf~ ///// AR0900 (Dorn spawn) \\\\\ ///// \\\\\ -COPY_EXISTING ~AR0900.BCS~ ~override~ - DECOMPILE_AND_PATCH BEGIN - SPRINT textToReplace ~HasDLC("dorn")~ - COUNT_REGEXP_INSTANCES ~%textToReplace%~ num_matches - PATCH_IF (num_matches > 0) BEGIN - REPLACE_TEXTUALLY ~%textToReplace%~ ~HasDLC("dorn") - Global("K#DornImport","AR0900",0) - !BeenInParty("Dorn") - GlobalLT("chapter","GLOBAL",20) - !StateCheck("Dorn",STATE_REALLY_DEAD)~ - PATCH_PRINT ~Patching: %num_matches% matches found in %SOURCE_FILESPEC% for REPLACE_TEXTUALLY: %textToReplace%~ - END ELSE BEGIN - PATCH_WARN ~WARNING: could not find %textToReplace% in %SOURCE_FILESPEC%~ - END +<<<<<<<< .../AR0900-rbOld.baf +IF + HasDLC("dorn") + GlobalLT("OHD_PLOT","GLOBAL",1) + !Global("OHH_DORN_INIT","ar0900",1) + XPLT(Player1,280501) +THEN + RESPONSE #100 + ActionOverride("dorn",DestroySelf()) + CreateCreature("DORN8",[2550.3394],E) // Dorn + SetGlobal("OHH_DORN_INIT","ar0900",1) +END - SPRINT textToReplace ~\(CreateCreature("DORN\)\(.+\)$~ - COUNT_REGEXP_INSTANCES ~%textToReplace%~ num_matches - PATCH_IF (num_matches > 0) BEGIN - REPLACE_TEXTUALLY ~%textToReplace%~ ~\1\2 -ActionOverride("Dorn",MakeGlobalOverride())~ - PATCH_PRINT ~Patching: %num_matches% matches found in %SOURCE_FILESPEC% for REPLACE_TEXTUALLY: %textToReplace%~ - END ELSE BEGIN - PATCH_WARN ~WARNING: could not find %textToReplace% in %SOURCE_FILESPEC%~ - END - END -BUT_ONLY +IF + HasDLC("dorn") + GlobalLT("OHD_PLOT","GLOBAL",1) + !Global("OHH_DORN_INIT","ar0900",2) + XPGT(Player1,280500) + XPLT(Player1,600001) +THEN + RESPONSE #100 + ActionOverride("dorn",DestroySelf()) + CreateCreature("DORN9",[2550.3394],E) // Dorn + SetGlobal("OHH_DORN_INIT","ar0900",2) +END + +IF + HasDLC("dorn") + GlobalLT("OHD_PLOT","GLOBAL",1) + !Global("OHH_DORN_INIT","ar0900",3) + XPGT(Player1,600000) + XPLT(Player1,1000001) +THEN + RESPONSE #100 + ActionOverride("dorn",DestroySelf()) + CreateCreature("DORN10",[2550.3394],E) // Dorn + SetGlobal("OHH_DORN_INIT","ar0900",3) +END -<<<<<<<< .../AR0900-et.baf +IF + HasDLC("dorn") + GlobalLT("OHD_PLOT","GLOBAL",1) + !Global("OHH_DORN_INIT","ar0900",4) + XPGT(Player1,1000000) +THEN + RESPONSE #100 + ActionOverride("dorn",DestroySelf()) + CreateCreature("DORN12",[2550.3394],E) // Dorn + SetGlobal("OHH_DORN_INIT","ar0900",4) +END +>>>>>>>> + +<<<<<<<< .../AR0900-rbNew.baf IF HasDLC("dorn") GlobalLT("OHD_PLOT","GLOBAL",1) @@ -1767,11 +1793,29 @@ THEN ActionOverride("Dorn",ChangeAIScript("DORN",OVERRIDE)) SetGlobal("K#DornImport","AR0900",1) SetGlobal("OHH_DORN_INIT","ar0900",1) - Continue() + //Continue() +END + +IF + HasDLC("dorn") + Global("K#DornImport","AR0900",0) + !BeenInParty("Dorn") + GlobalLT("chapter","GLOBAL",20) + !StateCheck("Dorn",STATE_REALLY_DEAD) + GlobalLT("OHD_PLOT","GLOBAL",1) + !Global("OHH_DORN_INIT","ar0900",1) + //XPLT(Player1,280501) +THEN + RESPONSE #100 + CreateCreature("DORN8",[2550.3394],E) // Dorn + ActionOverride("Dorn",MakeGlobalOverride()) + SetGlobal("OHH_DORN_INIT","ar0900",1) END >>>>>>>> -EXTEND_TOP ~AR0900.BCS~ ~.../AR0900-et.baf~ +COPY_EXISTING ~AR0900.BCS~ ~override~ + REPLACE_BCS_BLOCK ~.../AR0900-rbOld.baf~ ~.../AR0900-rbNew.baf~ ON_MISMATCH PATCH_WARN ~WARNING: could not find REPLACE_BCS_BLOCK matching .../AR0900-rbOld.baf in %SOURCE_FILE%~ END +BUT_ONLY ///// \\\\\ ///// AR1512 (Spellhold Imoen spawn) \\\\\ @@ -1809,32 +1853,20 @@ EXTEND_TOP ~AR1512.BCS~ ~.../AR1512-et.baf~ ///// AR2000, OHR_JOIN (Rasaad spawn) \\\\\ ///// \\\\\ -COPY_EXISTING ~AR2000.BCS~ ~override~ - DECOMPILE_AND_PATCH BEGIN - SPRINT textToReplace ~HasDLC("Rasaad")[%newline%]*Global("OHR_SPAWN","AR2000",0)~ - COUNT_REGEXP_INSTANCES ~%textToReplace%~ num_matches - PATCH_IF (num_matches > 0) BEGIN - REPLACE_TEXTUALLY ~%textToReplace%~ ~HasDLC("Rasaad") +<<<<<<<< .../AR2000-rbOld.baf +IF + HasDLC("Rasaad") Global("OHR_SPAWN","AR2000",0) - GlobalLT("chapter","GLOBAL",20) - !StateCheck("Rasaad",STATE_REALLY_DEAD)~ - PATCH_PRINT ~Patching: %num_matches% matches found in %SOURCE_FILESPEC% for REPLACE_TEXTUALLY: %textToReplace%~ - END ELSE BEGIN - PATCH_WARN ~WARNING: could not find %textToReplace% in %SOURCE_FILESPEC%~ - END - - SPRINT textToReplace ~CreateCreature("RASAAD8",\[1550\.1368\],S)~ - COUNT_REGEXP_INSTANCES ~%textToReplace%~ num_matches - PATCH_IF (num_matches > 0) BEGIN - REPLACE_TEXTUALLY ~%textToReplace%~ ~~ - PATCH_PRINT ~Patching: %num_matches% matches found in %SOURCE_FILESPEC% for REPLACE_TEXTUALLY: %textToReplace%~ - END ELSE BEGIN - PATCH_WARN ~WARNING: could not find %textToReplace% in %SOURCE_FILESPEC%~ - END - END -BUT_ONLY +THEN + RESPONSE #100 + SetGlobal("OHR_SPAWN","AR2000",1) + CreateCreature("RASAAD8",[1550.1368],S) // Rasaad + CreateCreature("OHRTREYA",[1600.1435],NNW) // Treya + CreateCreature("OHRSSM01",[1486.1435],NE) // Sun Soul Monk +END +>>>>>>>> -<<<<<<<< .../AR2000-et.baf +<<<<<<<< .../AR2000-rbNew.baf IF HasDLC("Rasaad") Global("K#RasaadImport","AR2000",0) @@ -1947,7 +1979,7 @@ IF !BeenInParty("Rasaad") GlobalLT("chapter","GLOBAL",20) !StateCheck("Rasaad",STATE_REALLY_DEAD) - XPLT(Player1,250000) + //XPLT(Player1,250000) THEN RESPONSE #100 CreateCreature("RASAAD8",[1550.1368],S) // Rasaad @@ -1956,7 +1988,7 @@ THEN Continue() END -IF +/*IF HasDLC("Rasaad") Global("K#RasaadImport","AR2000",0) !BeenInParty("Rasaad") @@ -2017,10 +2049,24 @@ THEN ActionOverride("Rasaad",MakeGlobalOverride()) SetGlobal("K#RasaadImport","AR2000",1) Continue() +END*/ + +IF + HasDLC("Rasaad") + Global("OHR_SPAWN","AR2000",0) + GlobalLT("chapter","GLOBAL",20) + !StateCheck("Rasaad",STATE_REALLY_DEAD) +THEN + RESPONSE #100 + SetGlobal("OHR_SPAWN","AR2000",1) + CreateCreature("OHRTREYA",[1600.1435],NNW) // Treya + CreateCreature("OHRSSM01",[1486.1435],NE) // Sun Soul Monk END >>>>>>>> -EXTEND_TOP ~AR2000.BCS~ ~.../AR2000-et.baf~ +COPY_EXISTING ~AR2000.BCS~ ~override~ + REPLACE_BCS_BLOCK ~.../AR2000-rbOld.baf~ ~.../AR2000-rbNew.baf~ ON_MISMATCH PATCH_WARN ~WARNING: could not find REPLACE_BCS_BLOCK matching .../AR2000-rbOld.baf in %SOURCE_FILE%~ END +BUT_ONLY <<<<<<<< .../OHR_JOIN-rbOld.baf IF @@ -2328,7 +2374,7 @@ IF !BeenInParty("Neera") GlobalLT("chapter","GLOBAL",20) !StateCheck("Neera",STATE_REALLY_DEAD) - XPLT(Player1,250000) + //XPLT(Player1,250000) THEN RESPONSE #100 CreateCreature("NEERA8",[993.3534],S) // Neera @@ -2337,7 +2383,7 @@ THEN Continue() END -IF +/*IF Global("OHN_INTRO_SCENE","AR0500",2) Global("K#NeeraImport","AR0500",0) !BeenInParty("Neera") @@ -2398,7 +2444,7 @@ THEN ActionOverride("Neera",MakeGlobalOverride()) SetGlobal("K#NeeraImport","AR0500",1) Continue() -END +END*/ >>>>>>>> EXTEND_TOP ~AR0500.BCS~ ~.../AR0500-et.baf~ @@ -2489,7 +2535,7 @@ IF THEN RESPONSE #100 MoveGlobal("OH6000","Neera",[993.3534]) - ActionOverride("Neera",Face(S)) + ActionOverride("Neera",Face(S)) SetGlobal("OHN_PLOT","GLOBAL",1) END >>>>>>>> diff --git a/EET/lib/bg2_TLK.tph b/EET/lib/bg2_TLK.tph index f7ff26e1..e4a267a7 100644 --- a/EET/lib/bg2_TLK.tph +++ b/EET/lib/bg2_TLK.tph @@ -437,3 +437,10 @@ STRING_SET 103201 @4000221 //000000028-Chapter 19 Start STRING_SET 103202 @4000222 //000000029-Chapter 20 Start STRING_SET 103203 @4000223 //000000030-Chapter 21 Start STRING_SET 103204 @4000224 //000000031-Chapter 22 Start + +///// \\\\\ +///// WORLDMAP GUI \\\\\ +///// \\\\\ + +STRING_SET 23084 @4000300 //Traveling Hours -> Hours +STRING_SET 5684 @4000301 //Destination Unreachable -> Unreachable diff --git a/EET/lib/build_worldmap.tpa b/EET/lib/build_worldmap.tpa new file mode 100644 index 00000000..a4fc1416 --- /dev/null +++ b/EET/lib/build_worldmap.tpa @@ -0,0 +1,100 @@ +///////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////// +//Constraints for how the worldmap links should be indexed (thanks to Taimon) +///////////////////////////////////////////////////////////////////////////// +//1. The indices of the area links should follow the order N <= E <= S <= W +//2. The index at N of area n should be >= the index at W of area (n - 1) +//3. The index at W plus the number of links at W of the LAST area in the wmp should equal the total number of links in the wmp +///////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////// +//Start constructing the worldmap +//////////////////////////////////////// +COPY_EXISTING worldmap.wmp override + READ_LONG 0xc mo + READ_LONG mo + 0x24 ao + READ_LONG mo + 0x28 lo + //////////////////////////////////////// + //Add new areas + //////////////////////////////////////// + ip = ao + na = 0 + PHP_EACH fl#CONTENT AS content => _ BEGIN + INSERT_BYTES ip 0xf0 + WRITE_ASCIIE ip "%content%" #8 + WRITE_ASCIIE ip + 0x8 $fl#SHORT("%content%") #8 + WRITE_ASCIIE ip + 0x10 $fl#LONG("%content%") #32 + WRITE_LONG ip + 0x30 $fl#FLAGS("%content%") + WRITE_LONG ip + 0x34 $fl#BAM("%content%") + WRITE_LONG ip + 0x38 $fl#XCOR("%content%") + WRITE_LONG ip + 0x3c $fl#YCOR("%content%") + PATCH_IF VARIABLE_IS_SET $fl#NAME("%content%") AND $fl#NAME("%content%") STR_CMP "" BEGIN + SPRINT string $fl#NAME("%content%") + SAY_EVALUATED ip + 0x40 "%string%" + END ELSE BEGIN + WRITE_LONG ip + 0x40 "-1" + END + PATCH_IF VARIABLE_IS_SET $fl#TOOL("%content%") AND $fl#TOOL("%content%") STR_CMP "" BEGIN + SPRINT string $fl#TOOL("%content%") + SAY_EVALUATED ip + 0x44 "%string%" + END ELSE BEGIN + WRITE_LONG ip + 0x44 "-1" + END + PATCH_IF VARIABLE_IS_SET $fl#LOAD("%content%") BEGIN + WRITE_ASCIIE ip + 0x48 $fl#LOAD("%content%") #8 + END + SET $index1("%content%") = na + ip += 0xf0 + lo += 0xf0 + ++na + END + WRITE_LONG mo + 0x20 na + WRITE_LONG mo + 0x28 lo + //////////////////////////////////////// + //Add new links + //////////////////////////////////////// + nl = 0 + ip = lo + FOR (i=0;i _ BEGIN + PATCH_IF "%entry_0%" STRING_EQUAL_CASE "%area%" AND VARIABLE_IS_SET $index1("%entry_1%") BEGIN + SPRINT src_are "%entry_0%" + SPRINT target_are "%entry_1%" + INSERT_BYTES ip 0xd8 + WRITE_LONG ip $index1("%target_are%") + PATCH_IF VARIABLE_IS_SET $fl#ENTRY("%src_are%" "%j%" "%target_are%") BEGIN + WRITE_ASCIIE ip + 0x4 $fl#ENTRY("%src_are%" "%j%" "%target_are%") #32 + END + WRITE_LONG ip + 0x24 $fl#TIME("%src_are%" "%j%" "%target_are%") + WRITE_LONG ip + 0x28 $fl#DEF("%src_are%" "%j%" "%target_are%") + PATCH_IF VARIABLE_IS_SET $fl#ENC1("%src_are%" "%j%" "%target_are%") BEGIN + WRITE_ASCIIE ip + 0x2c $fl#ENC1("%src_are%" "%j%" "%target_are%") #8 + END + PATCH_IF VARIABLE_IS_SET $fl#ENC2("%src_are%" "%j%" "%target_are%") BEGIN + WRITE_ASCIIE ip + 0x34 $fl#ENC2("%src_are%" "%j%" "%target_are%") #8 + END + PATCH_IF VARIABLE_IS_SET $fl#ENC3("%src_are%" "%j%" "%target_are%") BEGIN + WRITE_ASCIIE ip + 0x3c $fl#ENC3("%src_are%" "%j%" "%target_are%") #8 + END + PATCH_IF VARIABLE_IS_SET $fl#ENC4("%src_are%" "%j%" "%target_are%") BEGIN + WRITE_ASCIIE ip + 0x44 $fl#ENC4("%src_are%" "%j%" "%target_are%") #8 + END + PATCH_IF VARIABLE_IS_SET $fl#ENC5("%src_are%" "%j%" "%target_are%") BEGIN + WRITE_ASCIIE ip + 0x4c $fl#ENC5("%src_are%" "%j%" "%target_are%") #8 + END + WRITE_LONG ip + 0x54 $fl#PROB("%src_are%" "%j%" "%target_are%") + ++num + ++nl + ip += 0xd8 + END + END + WRITE_LONG ao + 0xf0*i + 0x54 + 0x8*j num + END + END + WRITE_LONG mo + 0x2c nl +BUT_ONLY diff --git a/EET/lib/macros.tph b/EET/lib/macros.tph index 8d03a981..7ece84a7 100644 --- a/EET/lib/macros.tph +++ b/EET/lib/macros.tph @@ -1065,7 +1065,7 @@ END ///////////////////////////////////////////////////////////////////////////////////////////////////////// //Dumps the areas and links of a .wmp file to textual data -DEFINE_PATCH_FUNCTION ~dump_wmp~ +DEFINE_PATCH_FUNCTION dump_wmp INT_VAR tra_read = 0 move_x = 0 @@ -1248,6 +1248,348 @@ END ///////////////////////////////////////////////////////////////////////////////////////////////////////// +DEFINE_PATCH_MACRO read_area_array_from_2da BEGIN + LOCAL_SPRINT fl#r2en_area "" + LOCAL_SET i = 0 + LOCAL_SPRINT area "" + LOCAL_SPRINT short "" + LOCAL_SPRINT long "" + LOCAL_SET flags = 0 + LOCAL_SET bam = 0 + LOCAL_SET x_cor = 0 + LOCAL_SET y_cor = 0 + LOCAL_SPRINT name "" + LOCAL_SPRINT tool "" + LOCAL_SPRINT load "" + LOCAL_SPRINT var "" + LOCAL_SPRINT cmp "" + LOCAL_SPRINT array "" + + READ_2DA_ENTRIES_NOW fl#r2en_area 10 + FOR (i=0;i i AND id = id2 BEGIN + SET $fl#patches("%id%") = 1 + READ_2DA_ENTRY_FORMER r2en_patches j 0 source + READ_2DA_ENTRY_FORMER r2en_patches j 1 nesw + READ_2DA_ENTRY_FORMER r2en_patches j 2 target + READ_2DA_ENTRY_FORMER r2en_patches j 3 entry + READ_2DA_ENTRY_FORMER r2en_patches j 4 dist + READ_2DA_ENTRY_FORMER r2en_patches j 5 def_entry + READ_2DA_ENTRY_FORMER r2en_patches j 6 enc1 + READ_2DA_ENTRY_FORMER r2en_patches j 7 enc2 + READ_2DA_ENTRY_FORMER r2en_patches j 8 enc3 + READ_2DA_ENTRY_FORMER r2en_patches j 9 enc4 + READ_2DA_ENTRY_FORMER r2en_patches j 10 enc5 + READ_2DA_ENTRY_FORMER r2en_patches j 11 enc_prob + TO_LOWER source + TO_LOWER nesw + TO_LOWER target + PATCH_IF "%source%" STRING_COMPARE_CASE SRC_AREA + AND "%target%" STRING_COMPARE_CASE TARGET_ARE BEGIN + j = $j_array("%nesw%") + PATCH_IF VARIABLE_IS_SET $EVAL "fl#INDEX_%j%"("%source%" "%target%") BEGIN + SPRINT $fl#ENTRY("%source%" "%j%" "%target%") "%entry%" + SET $fl#TIME("%source%" "%j%" "%target%") = dist + SET $fl#DEF("%source%" "%j%" "%target%") = def_entry + PATCH_FOR_EACH var IN enc1 enc2 enc3 enc4 enc5 BEGIN + SPRINT cmp EVAL "%%var%%" + SPRINT array "%var%" + TO_UPPER array + PATCH_IF "%cmp%" STRING_COMPARE_CASE N BEGIN + SPRINT $EVAL "fl#%array%"("%source%" "%j%" "%target%") "%cmp%" + END + END + SET $fl#PROB("%source%" "%j%" "%target%") = enc_prob + END + END + j = r2en_patches + END + END + END + END +END + +///////////////////////////////////////////////////////////////////////////////////////////////////////// + +DEFINE_ACTION_MACRO merge_in_translations BEGIN + LOCAL_SPRINT array "" + LOCAL_SPRINT area "" + LOCAL_SPRINT result "" + + //Swap the tra references for the associated string + ACTION_FOR_EACH array IN fl#NAME fl#TOOL BEGIN + ACTION_PHP_EACH "%array%" AS area => result BEGIN + ACTION_IF VARIABLE_IS_SET $fl#TRANS("%result%") BEGIN + OUTER_SPRINT $EVAL "%array%"("%area%") $fl#TRANS("%result%") + END + END + END + + //If there are tra references for which there was no data provided, null the array value + ACTION_FOR_EACH array IN fl#NAME fl#TOOL BEGIN + ACTION_PHP_EACH "%array%" AS area => result BEGIN + ACTION_IF "%result%" STRING_MATCHES_REGEXP "^@.*" = 0 BEGIN + OUTER_SPRINT $EVAL "%array%"("%area%") "" + END + END + END +END + +///////////////////////////////////////////////////////////////////////////////////////////////////////// + +DEFINE_PATCH_FUNCTION fix_table BEGIN + REPLACE_TEXTUALLY EVALUATE_REGEXP ~\([0-9]+\)\(SHORT_NAME\)~ ~\1%LNL%%LNL%\2~ + REPLACE_TEXTUALLY EVALUATE_REGEXP ~\([0-9]+\)\(//\)~ ~\1%LNL%%LNL%\2~ + REPLACE_TEXTUALLY EVALUATE_REGEXP ~\([0-9]+\)\(SRC_AREA\)~ ~\1%LNL%%LNL%\2~ + REPLACE_TEXTUALLY EVALUATE_REGEXP ~~~~~\("\|~\|%\)\(@\)~~~~~ ~~~~~\1%LNL%%LNL%\2~~~~~ + REPLACE_TEXTUALLY EVALUATE_REGEXP ~~~~~\("\|~\|%\)\(//\)~~~~~ ~~~~~\1%LNL%%LNL%\2~~~~~ +END + +///////////////////////////////////////////////////////////////////////////////////////////////////////// + +//fixes issues with glitched water overlays, code by argent77 +DEFINE_ACTION_FUNCTION FIX_WATER +INT_VAR + numTilesToFix = 0 // number of tile indices to fix + // $tilesToFix(0), ... contain tile indices to fix +STR_VAR + wed = ~~ +BEGIN + ACTION_IF (numTilesToFix > 0 AND FILE_EXISTS_IN_GAME ~%wed%~) BEGIN + // Setting required secondary tile indices + COPY_EXISTING ~%wed%~ ~override~ + SET ofsOverlay = LONG_AT 0x10 + SET ofsTileMap = LONG_AT (ofsOverlay + 0x10) + READ_ASCII (ofsOverlay + 0x04) tisFile (8) NULL + PATCH_IF (FILE_EXISTS_IN_GAME ~%tisFile%.tis~) BEGIN + INNER_ACTION BEGIN + // adding dummy tiles to TIS + COPY_EXISTING ~%tisFile%.TIS~ ~override~ + READ_LONG 0x08 numTiles + WRITE_LONG 0x08 (numTiles + numTilesToFix) + READ_LONG 0x0c sizeTile + READ_LONG 0x10 ofsTiles + FOR (idx = 0 curOfs = ofsTiles + (numTiles * sizeTile); idx < numTilesToFix; idx += 1 curOfs += sizeTile) BEGIN + // adding new "black" tile + INSERT_BYTES curOfs sizeTile + WRITE_LONG curOfs "-1" + END + BUT_ONLY + END + // updating secondary tile indices + FOR (idx = 0; idx < numTilesToFix; idx += 1) BEGIN + PATCH_IF (VARIABLE_IS_SET $EVAL tilesToFix(~%idx%~)) BEGIN + SET tileIndex = $EVAL tilesToFix(~%idx%~) + SET ofsTile = ofsTileMap + (tileIndex * 10) + WRITE_SHORT (ofsTile + 4) (numTiles + idx) + END + END + END + BUT_ONLY + END +END + +///////////////////////////////////////////////////////////////////////////////////////////////////////// + DEFINE_PATCH_MACRO ~EET_PCU_off_mus~ BEGIN READ_LONG off "source" PATCH_IF ("%source%" > 0) AND (VARIABLE_IS_SET $remapped_mus(~%source%~)) BEGIN diff --git a/EET/lib/prep_2DA.tph b/EET/lib/prep_2DA.tph index b16d1ead..14df0383 100644 --- a/EET/lib/prep_2DA.tph +++ b/EET/lib/prep_2DA.tph @@ -147,7 +147,6 @@ BEGIN END MOVE + ~EET/temp/2da/INTERDIA.2DA~ ~EET/temp/2da/BGBANTER.2DA~ - ~EET/temp/2da/NPCLEVEL.2DA~ ~EET/temp/2da/BGNPCLVL.2DA~ ~EET/temp/2da/PDIALOG.2DA~ ~EET/temp/2da/BGDIALOG.2DA~ ~EET/temp/2da/STARTARE.2DA~ ~EET/temp/2da/BGSTARTA.2DA~ ~EET/temp/2da/TBPPARTY.2DA~ ~EET/temp/2da/TBPPART_.2DA~ @@ -506,6 +505,7 @@ DELETE + ~EET/temp/2da/25ECRED.2DA~ ~EET/temp/2da/MYU3.2DA~ ~EET/temp/2da/MZOM.2DA~ ~EET/temp/2da/NALIAND.2DA~ + ~EET/temp/2da/NPCLEVEL.2DA~ ~EET/temp/2da/NPCLVL25.2DA~ ~EET/temp/2da/NPCMINSC.2DA~ ~EET/temp/2da/OHTYR.2DA~ diff --git a/EET/other/EET_modConverter/EET_modConverter/lib/PCU_Dict_bgee-eet.tph b/EET/other/EET_modConverter/EET_modConverter/lib/PCU_Dict_bgee-eet.tph index 6219d7fc..788a13fe 100644 --- a/EET/other/EET_modConverter/EET_modConverter/lib/PCU_Dict_bgee-eet.tph +++ b/EET/other/EET_modConverter/EET_modConverter/lib/PCU_Dict_bgee-eet.tph @@ -1553,7 +1553,6 @@ END ACTION_DEFINE_ASSOCIATIVE_ARRAY remapped_mve BEGIN "INTRO" => "INTRO_" - "CREDITS" => "CREDITS_" //otherwise the movie will be unskippable (hardcoded) "ENDCRDIT" => "ENDCRDI_" //8 characters limit "BLACKPIT" => "BLACKPI_" //8 characters limit END diff --git a/EET/other/EET_modConverter/EET_modConverter/lib/PCU_Dict_eet-bgee.tph b/EET/other/EET_modConverter/EET_modConverter/lib/PCU_Dict_eet-bgee.tph index bb9ea081..1056ae5b 100644 --- a/EET/other/EET_modConverter/EET_modConverter/lib/PCU_Dict_eet-bgee.tph +++ b/EET/other/EET_modConverter/EET_modConverter/lib/PCU_Dict_eet-bgee.tph @@ -1459,7 +1459,6 @@ END ACTION_DEFINE_ASSOCIATIVE_ARRAY remapped_mve BEGIN "INTRO_" => "INTRO" - "CREDITS_" => "CREDITS" //otherwise the movie will be unskippable (hardcoded) "ENDCRDI_" => "ENDCRDIT" //8 characters limit "BLACKPI_" => "BLACKPIT" //8 characters limit END diff --git a/EET/other/EET_modConverter/EET_modConverter/lib/macros.tph b/EET/other/EET_modConverter/EET_modConverter/lib/macros.tph index 92b0419e..80d0b0c1 100644 --- a/EET/other/EET_modConverter/EET_modConverter/lib/macros.tph +++ b/EET/other/EET_modConverter/EET_modConverter/lib/macros.tph @@ -2,1252 +2,6 @@ //BEGIN Macros ///////////////////////////////////////////////////////////////////////////////////////////////////////// -DEFINE_PATCH_FUNCTION ~EET_spellbooks~ - INT_VAR - cheat = 0 //1 means Cleric/Ranger gains Druid spells up to level 7 - STR_VAR - spell_name = "" - RET - log - BEGIN - READ_LONG 0x244 kit ELSE 0 - READ_BYTE 0x273 class ELSE 0 - READ_LONG 0x2a4 known ELSE 0 //known > 0 excludes inquisitors - SET level_cleric = 0 - SET level_druid = 0 - SET is_cleric = 0 - SET is_druid = 0 - SET is_mage = 0 - SET check = 0 - SET remove_spell = 0 - SET cleric_max = 7 - SET druid_max = 7 - SET add_spell = 1 - SET already_known = 0 - SET already_memorised = 0 - SPRINT log ~~ - PATCH_IF (class = 3) OR (class = 15) BEGIN // Trueclass cleric, Cleric/Thief - READ_BYTE 0x234 level_cleric - SET is_cleric = 1 - SET check = 1 - END ELSE PATCH_IF (class = 14) BEGIN //Cleric/Mage - READ_BYTE 0x234 level_cleric - SET is_cleric = 1 - SET is_mage = 1 - SET check = 1 - END ELSE PATCH_IF (class = 6) AND (known > 0) BEGIN // Paladin excludes inquisitors - READ_BYTE 0x234 level_cleric - INNER_ACTION BEGIN - COPY_EXISTING - ~MXSPLPAL.2DA~ ~override~ - COUNT_2DA_COLS "cntcol" - SET cleric_max = cntcol - 1 - COUNT_2DA_ROWS cntcol "cntrow" - FOR (cnt = 0; cnt < cntrow; cnt = cnt + 1) BEGIN - READ_2DA_ENTRY cnt 1 cntcol "entry" - PATCH_IF (entry > 0) BEGIN - READ_2DA_ENTRY cnt 0 cntcol "start_lvl" - SET cnt = cntrow - END - END - END - PATCH_IF (start_lvl > 1) BEGIN - SET level_cleric = level_cleric - (start_lvl - 1) // normally Paladin spells start at level 9 - END - SET is_cleric = 1 - SET check = 1 - END ELSE PATCH_IF (class = 8) BEGIN // Fighter/Cleric - READ_BYTE 0x235 level_cleric - SET is_cleric = 1 - SET check = 1 - END ELSE PATCH_IF (class = 11) BEGIN // Trueclass Druid - READ_BYTE 0x234 level_druid - SET is_druid = 1 - SET check = 1 - END ELSE PATCH_IF (class = 12) BEGIN // Trueclass Ranger - READ_BYTE 0x234 level_druid - INNER_ACTION BEGIN - COPY_EXISTING - ~MXSPLDRU.2DA~ ~override~ - COUNT_2DA_COLS "cntcol" - SET druid_max = cntcol - 1 - COUNT_2DA_ROWS cntcol "cntrow" - FOR (cnt = 0; cnt < cntrow; cnt = cnt + 1) BEGIN - READ_2DA_ENTRY cnt 1 cntcol "entry" - PATCH_IF (entry > 0) BEGIN - READ_2DA_ENTRY cnt 0 cntcol "start_lvl" - SET cnt = cntrow - END - END - END - PATCH_IF (start_lvl > 1) BEGIN - SET level_druid = level_druid - (start_lvl - 1) // normally Ranger spells start at level 8 - END - SET is_druid = 1 - SET check = 1 - END ELSE PATCH_IF (class = 16) BEGIN // Fighter/Druid - READ_BYTE 0x235 level_druid - SET is_druid = 1 - SET check = 1 - END ELSE PATCH_IF (class = 17) BEGIN // Figher/Mage/Cleric - READ_BYTE 0x236 level_cleric - SET is_cleric = 1 - SET is_mage = 1 - SET check = 1 - END ELSE PATCH_IF (class = 18) BEGIN // Cleric/Ranger - READ_BYTE 0x234 level_cleric - READ_BYTE 0x235 level_druid - INNER_ACTION BEGIN - COPY_EXISTING - ~MXSPLDRU.2DA~ ~override~ - COUNT_2DA_COLS "cntcol" - PATCH_IF (cheat = 0) BEGIN - SET druid_max = cntcol - 1 - END - COUNT_2DA_ROWS cntcol "cntrow" - FOR (cnt = 0; cnt < cntrow; cnt = cnt + 1) BEGIN - READ_2DA_ENTRY cnt 1 cntcol "entry" - PATCH_IF (entry > 0) BEGIN - READ_2DA_ENTRY cnt 0 cntcol "start_lvl" - SET cnt = cntrow - END - END - END - PATCH_IF (start_lvl > 1) BEGIN - SET level_druid = level_druid - (start_lvl - 1) // normally Ranger spells start at level 8 - END - SET is_cleric = 1 - SET is_druid = 1 - SET check = 1 - END ELSE PATCH_IF (class = 202) BEGIN //Mage, Sorcerer (including single class, kits, multi-class, and dual-class) - SET is_mage = 1 - SET check = 1 - END ELSE PATCH_IF (class = 206) BEGIN //Bard (including single class, kits, multi-class, and dual-class) - SET is_mage = 1 - SET check = 1 - END ELSE PATCH_IF (class = 5) BEGIN //Bard (though only single class & kits) - SET is_mage = 1 - SET check = 1 - END ELSE PATCH_IF (class = 19) BEGIN //Trueclass sorcerer - SET is_mage = 1 - SET check = 1 - END ELSE PATCH_IF (class = 7) BEGIN //Fighter/Mage - SET is_mage = 1 - SET check = 1 - END ELSE PATCH_IF (class = 10) BEGIN //Fighter/Mage/Thief - SET is_mage = 1 - SET check = 1 - END ELSE PATCH_IF (class = 13) BEGIN //Mage/Thief - SET is_mage = 1 - SET check = 1 - END ELSE PATCH_IF (class = 1) BEGIN //Mage, Sorcerer (though only single class & kits) - SET is_mage = 1 - SET check = 1 - END - PATCH_IF (check = 1) BEGIN - READ_BYTE 0x27b align // used for various restriction checks below - INNER_ACTION BEGIN - LAF RES_NUM_OF_SPELL_NAME STR_VAR spell_name = EVAL ~%spell_name%~ RET spell_res spell_num END - COPY_EXISTING - ~%spell_res%.spl~ ~override~ - READ_LONG 0x1e "flags" - PATCH_IF (is_cleric = 1) OR (is_druid = 1) BEGIN - PATCH_IF (~%flags%~ BAND BIT0) BEGIN //Exclude Chaotic priests - PATCH_IF (align = 49) OR (align = 50) OR (align = 51) BEGIN - SET remove_spell = 1 - END - END - PATCH_IF (~%flags%~ BAND BIT1) BEGIN //Exclude Evil priests - PATCH_IF (align = 19) OR (align = 35) OR (align = 51) BEGIN - SET remove_spell = 1 - END - END - PATCH_IF (~%flags%~ BAND BIT2) BEGIN //Exclude Good priests - PATCH_IF (align = 17) OR (align = 33) OR (align = 49) BEGIN - SET remove_spell = 1 - END - END - PATCH_IF (~%flags%~ BAND BIT3) BEGIN //Exclude Lawful Neutral, Neutral, Chaotic Neutral priests - PATCH_IF (align = 18) OR (align = 34) OR (align = 50) BEGIN - SET remove_spell = 1 - END - END - PATCH_IF (~%flags%~ BAND BIT4) BEGIN //Exclude Lawful priests - PATCH_IF (align = 17) OR (align = 18) OR (align = 19) BEGIN - SET remove_spell = 1 - END - END - PATCH_IF (~%flags%~ BAND BIT5) BEGIN //Exclude Neutral Good, Neutral, Neutral Evil priests - PATCH_IF (align = 33) OR (align = 34) OR (align = 35) BEGIN - SET remove_spell = 1 - END - END - END - PATCH_IF (is_mage = 1) BEGIN - PATCH_IF (~%flags%~ BAND BIT6) BEGIN //Exclude Abjurers - PATCH_IF (kit = 0x00400000) BEGIN - SET remove_spell = 1 - END - END - PATCH_IF (~%flags%~ BAND BIT7) BEGIN //Exclude Conjurers - PATCH_IF (kit = 0x00800000) BEGIN - SET remove_spell = 1 - END - END - PATCH_IF (~%flags%~ BAND BIT8) BEGIN //Exclude Diviners - PATCH_IF (kit = 0x01000000) BEGIN - SET remove_spell = 1 - END - END - PATCH_IF (~%flags%~ BAND BIT9) BEGIN //Exclude Enchanters - PATCH_IF (kit = 0x02000000) BEGIN - SET remove_spell = 1 - END - END - PATCH_IF (~%flags%~ BAND BIT10) BEGIN //Exclude Illusionists - PATCH_IF (kit = 0x04000000) BEGIN - SET remove_spell = 1 - END - END - PATCH_IF (~%flags%~ BAND BIT11) BEGIN //Exclude Invokers - PATCH_IF (kit = 0x08000000) BEGIN - SET remove_spell = 1 - END - END - PATCH_IF (~%flags%~ BAND BIT12) BEGIN //Exclude Necromancers - PATCH_IF (kit = 0x10000000) BEGIN - SET remove_spell = 1 - END - END - PATCH_IF (~%flags%~ BAND BIT13) BEGIN //Exclude Transmuters - PATCH_IF (kit = 0x20000000) BEGIN - SET remove_spell = 1 - END - END - PATCH_IF (~%flags%~ BAND BIT14) BEGIN //Wild Magic (exclude Generalists) - PATCH_IF (kit = 0) OR (kit = 0x00000040) BEGIN - SET remove_spell = 1 - END - END - END - PATCH_IF (~%flags%~ BAND BIT30) BEGIN //Exclude Cleric/Paladin - PATCH_IF (is_cleric = 1) BEGIN - PATCH_IF (is_druid = 1) AND (~%flags%~ BAND BIT31) BEGIN - SET remove_spell = 1 - END ELSE BEGIN - SET remove_spell = 1 - END - END - END - PATCH_IF (~%flags%~ BAND BIT31) BEGIN //Exclude Druid/Ranger - PATCH_IF (is_druid = 1) BEGIN - PATCH_IF (is_cleric = 1) AND (~%flags%~ BAND BIT30) BEGIN - SET remove_spell = 1 - END ELSE BEGIN - SET remove_spell = 1 - END - END - END - END - //Known Spells - READ_LONG 0x2a0 "kspell_off" - READ_SHORT 0x2a4 "kspell_cnt" - FOR (cnt=0; cnt<"%kspell_cnt%"; cnt=cnt+1) BEGIN - READ_ASCII ("%kspell_off%"+0xc*cnt) "known_spl" - PATCH_IF (~%known_spl%~ STRING_EQUAL_CASE ~%spell_res%~) BEGIN - SET already_known = 1 - SET cnt = kspell_cnt - END - END - //Memorised Spells - READ_LONG 0x2b0 "mspell_off" - READ_SHORT 0x2b4 "mspell_cnt" - FOR (cnt=0; cnt<"%mspell_cnt%"; cnt=cnt+1) BEGIN - READ_ASCII ("%mspell_off%"+0xc*cnt) "mem_spl" - PATCH_IF (~%mem_spl%~ STRING_EQUAL_CASE ~%spell_res%~) BEGIN - SET already_memorised = 1 - SET cnt = mspell_cnt - END - END - PATCH_IF (remove_spell = 1) BEGIN - PATCH_IF (already_known = 1) BEGIN - SPRINT log ~%log%removing known spell: %spell_name% (%spell_res%)%LNL%~ - REMOVE_KNOWN_SPELL ~%spell_res%~ - END - PATCH_IF (already_memorised = 1) BEGIN - REMOVE_MEMORIZED_SPELL ~%spell_res%~ - END - END ELSE PATCH_IF (already_known = 0) BEGIN - INNER_PATCH_SAVE spell_level ~%spell_res%~ BEGIN - REPLACE_TEXTUALLY ~^SPPR\([1-9]\)[0-9][0-9]$~ ~\1~ - END - PATCH_IF (IS_AN_INT ~%spell_level%~) BEGIN - PATCH_IF (cleric_max >= spell_level) BEGIN - PATCH_IF (level_cleric > 0) AND (spell_level = 1) BEGIN - SPRINT log ~%log%adding known spell: %spell_name% (%spell_res%)%LNL%~ - ADD_KNOWN_SPELL ~%spell_res%~ #0 ~priest~ - SET add_spell = 0 - END ELSE PATCH_IF (level_cleric > 2) AND (spell_level = 2) BEGIN - SPRINT log ~%log%adding known spell: %spell_name% (%spell_res%)%LNL%~ - ADD_KNOWN_SPELL ~%spell_res%~ #1 ~priest~ - SET add_spell = 0 - END ELSE PATCH_IF (level_cleric > 4) AND (spell_level = 3) BEGIN - SPRINT log ~%log%adding known spell: %spell_name% (%spell_res%)%LNL%~ - ADD_KNOWN_SPELL ~%spell_res%~ #2 ~priest~ - SET add_spell = 0 - END ELSE PATCH_IF (level_cleric > 6) AND (spell_level = 4) BEGIN - SPRINT log ~%log%adding known spell: %spell_name% (%spell_res%)%LNL%~ - ADD_KNOWN_SPELL ~%spell_res%~ #3 ~priest~ - SET add_spell = 0 - END ELSE PATCH_IF (level_cleric > 8) AND (spell_level = 5) BEGIN - SPRINT log ~%log%adding known spell: %spell_name% (%spell_res%)%LNL%~ - ADD_KNOWN_SPELL ~%spell_res%~ #4 ~priest~ - SET add_spell = 0 - END ELSE PATCH_IF (level_cleric > 10) AND (spell_level = 6) BEGIN - SPRINT log ~%log%adding known spell: %spell_name% (%spell_res%)%LNL%~ - ADD_KNOWN_SPELL ~%spell_res%~ #5 ~priest~ - SET add_spell = 0 - END ELSE PATCH_IF (level_cleric > 13) AND (spell_level = 7) BEGIN - SPRINT log ~%log%adding known spell: %spell_name% (%spell_res%)%LNL%~ - ADD_KNOWN_SPELL ~%spell_res%~ #6 ~priest~ - SET add_spell = 0 - END - END - PATCH_IF (add_spell = 1) AND (druid_max >= spell_level) BEGIN - PATCH_IF (level_druid > 0) AND (spell_level = 1) BEGIN - SPRINT log ~%log%adding known spell: %spell_name% (%spell_res%)%LNL%~ - ADD_KNOWN_SPELL ~%spell_res%~ #0 ~priest~ - END ELSE PATCH_IF (level_druid > 2) AND (spell_level = 2) BEGIN - SPRINT log ~%log%adding known spell: %spell_name% (%spell_res%)%LNL%~ - ADD_KNOWN_SPELL ~%spell_res%~ #1 ~priest~ - END ELSE PATCH_IF (level_druid > 4) AND (spell_level = 3) BEGIN - SPRINT log ~%log%adding known spell: %spell_name% (%spell_res%)%LNL%~ - ADD_KNOWN_SPELL ~%spell_res%~ #2 ~priest~ - END ELSE PATCH_IF (level_druid > 6) AND (spell_level = 4) BEGIN - SPRINT log ~%log%adding known spell: %spell_name% (%spell_res%)%LNL%~ - ADD_KNOWN_SPELL ~%spell_res%~ #3 ~priest~ - END ELSE PATCH_IF (level_druid > 8) AND (spell_level = 5) BEGIN - SPRINT log ~%log%adding known spell: %spell_name% (%spell_res%)%LNL%~ - ADD_KNOWN_SPELL ~%spell_res%~ #4 ~priest~ - END ELSE PATCH_IF (level_druid > 10) AND (spell_level = 6) BEGIN - SPRINT log ~%log%adding known spell: %spell_name% (%spell_res%)%LNL%~ - ADD_KNOWN_SPELL ~%spell_res%~ #5 ~priest~ - END ELSE PATCH_IF (level_druid > 13) AND (spell_level = 7) BEGIN - SPRINT log ~%log%adding known spell: %spell_name% (%spell_res%)%LNL%~ - ADD_KNOWN_SPELL ~%spell_res%~ #6 ~priest~ - END - END - END - END - END -END - -///////////////////////////////////////////////////////////////////////////////////////////////////////// - -DEFINE_PATCH_FUNCTION ~EET_expand_tlk~ - INT_VAR - min = 1 //minimum strref number used for patching - max = "-1" //maximum strref number used for patching (cutoff detected via tra str_var if not specified) - STR_VAR - tra = "" //path to TRA file, only use it if you didn't set max int_var - array = "" //name of the optional array that will replace one strref with another in CRE/EFF/ITM/SPL if fx_type = 267 - RET - log //returns list of all changes made to the file - BEGIN - PATCH_IF (max < 0) BEGIN - PATCH_IF (~%tra%~ STRING_EQUAL_CASE ~~) BEGIN - PATCH_FAIL ~EET_expand_tlk needs to know total number of sttrefs in TRA file. Either set INT_VAR max or STR_VAR tra~ - END ELSE BEGIN - INNER_ACTION BEGIN - COPY - ~%tra%~ ~%tra%~ - COUNT_2DA_ROWS 3 "cnt_row" - SPRINT StrRef_cutoff ~dummy~ - WHILE (~%StrRef_cutoff%~ STRING_CONTAINS_REGEXP ~^@[0-9]+~) BEGIN //not StrRef - READ_2DA_ENTRY cnt_row 0 3 "StrRef_cutoff" - SET cnt_row = cnt_row - 1 - END - INNER_PATCH_SAVE StrRef_cutoff ~%StrRef_cutoff%~ BEGIN - REPLACE_TEXTUALLY ~^@~ ~~ - END - SET max = StrRef_cutoff - //PATCH_PRINT ~StrRef min = %min%, max = %max%~ - END - END - END - SPRINT log ~COPY "%SOURCE_FILESPEC%" "override"%LNL%~ - //ARE - PATCH_IF (~%SOURCE_EXT%~ STRING_EQUAL_CASE ~are~) BEGIN - //Actors - READ_LONG 0x54 "actors_off" - READ_SHORT 0x58 "actors_cnt" - FOR (cnt=0; cnt<"%actors_cnt%"; cnt=cnt+1) BEGIN - //CRE structure (embedded CRE files) - READ_BYTE ("%actors_off%"+0x110*cnt+0x28) "actors_flags" - PATCH_IF (~%actors_flags%~ BAND BIT0) BEGIN - END ELSE BEGIN //CRE attached - READ_LONG ("%actors_off%"+0x110*cnt+0x88) "actors_emb_off" - PATCH_IF (actors_emb_off != 0) BEGIN - PATCH_FOR_EACH offset IN 0x8 0xc BEGIN //Long name, Short name (tooltip) - SET offset = ("%actors_emb_off%"+"%offset%") - READ_LONG offset "StrRef" - PATCH_IF ((StrRef >= min) AND (StrRef <= max)) BEGIN - SAY offset ( AT "StrRef" ) - SPRINT log ~%log% SAY %offset% @%StrRef%%LNL%~ - END - END - FOR (cnt2=0; cnt2<99; cnt2=cnt2+1) BEGIN - SET offset = ("%actors_emb_off%"+0xa4+0x4*cnt2) - READ_LONG offset "StrRef" - PATCH_IF ((StrRef >= min) AND (StrRef <= max)) BEGIN - SAY offset ( AT "StrRef" ) - SPRINT log ~%log% SAY %offset% @%StrRef%%LNL%~ - END - END - READ_LONG ("%actors_emb_off%"+0x2c4) "fx_off" - READ_LONG ("%actors_emb_off%"+0x2c8) "fx_cnt" - READ_BYTE ("%actors_emb_off%"+0x33) "eff_ver" - FOR (cnt2=0; cnt2<"%fx_cnt%"; cnt2=cnt2+1) BEGIN - PATCH_IF (eff_ver = 0) BEGIN //EFF v1 - READ_SHORT ("%actors_emb_off%"+"%fx_off%"+0x30*cnt2) "fx_type" - PATCH_IF ("%fx_type%" = 103) //Change Name - OR ("%fx_type%" = 139) //Display String - OR ("%fx_type%" = 180) //Can't Use Item - OR ("%fx_type%" = 206) //Protection from Spell - OR ("%fx_type%" = 253) //Add Map Marker - OR ("%fx_type%" = 254) //Remove Map Marker - OR ("%fx_type%" = 267) //Protection from Display Specific String - OR ("%fx_type%" = 290) //Change Title - OR ("%fx_type%" = 330) //Float text - OR ("%fx_type%" = 338) //Disable rest or save - BEGIN - SET offset = ("%actors_emb_off%"+"%fx_off%"+0x30*cnt2+0x4) - READ_LONG offset "StrRef" - PATCH_IF ((StrRef >= min) AND (StrRef <= max)) BEGIN - PATCH_IF ("%fx_type%" = 267) BEGIN - PATCH_IF (VARIABLE_IS_SET $EVAL ~%array%~(~%StrRef%~)) BEGIN - TEXT_SPRINT StrRef_new $EVAL ~%array%~(~%StrRef%~) - PATCH_IF (StrRef = StrRef_new) BEGIN - SPRINT log ~%log% %slash%%slash%SAY %offset% @%StrRef_new% %slash%%slash%opcode=%fx_type%, %StrRef%%LNL%~ - END ELSE BEGIN - WRITE_LONG offset "%StrRef_new%" - SPRINT log ~%log% WRITE_LONG %offset% %StrRef_new% %slash%%slash%opcode=%fx_type%, %StrRef%%LNL%~ - END - END ELSE BEGIN - GET_STRREF StrRef "string_old" - SET StrRef_new = RESOLVE_STR_REF ((AT StrRef)) - GET_STRREF StrRef_new "string_new" - PATCH_IF ~%string_old%~ STRING_EQUAL_CASE ~%string_new%~ BEGIN - //PATCH_PRINT ~skipping TLK reference updating: %string_old%~ - END ELSE BEGIN - WRITE_LONG offset "%StrRef%" - SPRINT log ~%log% SAY %offset% @%StrRef% %slash%%slash%opcode=%fx_type%%LNL%~ - END - END - END - END - END ELSE PATCH_IF ("%fx_type%" = 319) BEGIN //Item Usability - SET offset = ("%actors_emb_off%"+"%fx_off%"+0x30*cnt2+0x2c) - READ_LONG offset "StrRef" - PATCH_IF ((StrRef >= min) AND (StrRef <= max)) BEGIN - SAY offset ( AT "StrRef" ) - SPRINT log ~%log% SAY %offset% @%StrRef% %slash%%slash%opcode=%fx_type%%LNL%~ - END - READ_LONG ("%actors_emb_off%"+"%fx_off%"+0x30*cnt2+0x8) "ids_target" - PATCH_IF (ids_target = 10) BEGIN //Actor's name - SET offset = ("%actors_emb_off%"+"%fx_off%"+0x30*cnt2+0x4) - READ_LONG offset "StrRef" - PATCH_IF ((StrRef >= min) AND (StrRef <= max)) BEGIN - SAY offset ( AT "StrRef" ) - SPRINT log ~%log% SAY %offset% @%StrRef% %slash%%slash%opcode=%fx_type%%LNL%~ - END - END - END - END ELSE BEGIN //EFF v2 - READ_LONG ("%actors_emb_off%"+"%fx_off%"+0x108*cnt2+0x8) "fx_type" - PATCH_IF ("%fx_type%" = 103) //Change Name - OR ("%fx_type%" = 139) //Display String - OR ("%fx_type%" = 180) //Can't Use Item - OR ("%fx_type%" = 206) //Protection from Spell - OR ("%fx_type%" = 253) //Add Map Marker - OR ("%fx_type%" = 254) //Remove Map Marker - OR ("%fx_type%" = 267) //Protection from Display Specific String - OR ("%fx_type%" = 290) //Change Title - OR ("%fx_type%" = 330) //Float text - OR ("%fx_type%" = 338) //Disable rest or save - BEGIN - SET offset = ("%actors_emb_off%"+"%fx_off%"+0x108*cnt2+0x14) - READ_LONG offset "StrRef" - PATCH_IF ((StrRef >= min) AND (StrRef <= max)) BEGIN - PATCH_IF ("%fx_type%" = 267) BEGIN - PATCH_IF (VARIABLE_IS_SET $EVAL ~%array%~(~%StrRef%~)) BEGIN - TEXT_SPRINT StrRef_new $EVAL ~%array%~(~%StrRef%~) - PATCH_IF (StrRef = StrRef_new) BEGIN - SPRINT log ~%log% %slash%%slash%SAY %offset% @%StrRef_new% %slash%%slash%opcode=%fx_type%, %StrRef%%LNL%~ - END ELSE BEGIN - WRITE_LONG offset "%StrRef_new%" - SPRINT log ~%log% WRITE_LONG %offset% %StrRef_new% %slash%%slash%opcode=%fx_type%, %StrRef%%LNL%~ - END - END ELSE BEGIN - GET_STRREF StrRef "string_old" - SET StrRef_new = RESOLVE_STR_REF ((AT StrRef)) - GET_STRREF StrRef_new "string_new" - PATCH_IF ~%string_old%~ STRING_EQUAL_CASE ~%string_new%~ BEGIN - //PATCH_PRINT ~skipping TLK reference updating: %string_old%~ - END ELSE BEGIN - WRITE_LONG offset "%StrRef%" - SPRINT log ~%log% SAY %offset% @%StrRef% %slash%%slash%opcode=%fx_type%%LNL%~ - END - END - END - END - END ELSE PATCH_IF ("%fx_type%" = 319) BEGIN //Item Usability - SET offset = ("%actors_emb_off%"+"%fx_off%"+0x108*cnt2+0x40) - READ_LONG offset "StrRef" - PATCH_IF ((StrRef >= min) AND (StrRef <= max)) BEGIN - SAY offset ( AT "StrRef" ) - SPRINT log ~%log% SAY %offset% @%StrRef% %slash%%slash%opcode=%fx_type%%LNL%~ - END - READ_LONG ("%actors_emb_off%"+"%fx_off%"+0x108*cnt2+0x18) "ids_target" - PATCH_IF (ids_target = 10) BEGIN //Actor's name - SET offset = ("%actors_emb_off%"+"%fx_off%"+0x108*cnt2+0x14) - READ_LONG offset "StrRef" - PATCH_IF ((StrRef >= min) AND (StrRef <= max)) BEGIN - SAY offset ( AT "StrRef" ) - SPRINT log ~%log% SAY %offset% @%StrRef% %slash%%slash%opcode=%fx_type%%LNL%~ - END - END - END - END - END - END - END - END - //Info points, trigger points, and exit (regions/triggers) - READ_LONG 0x5c "info_off" - READ_SHORT 0x5a "info_cnt" - FOR (cnt=0; cnt<"%info_cnt%"; cnt=cnt+1) BEGIN - PATCH_FOR_EACH ~add_off~ IN 0x64 0xb8 BEGIN - SET offset = ("%info_off%"+0xc4*cnt+"%add_off%") //Information text (for info points), Name - READ_LONG offset "StrRef" - PATCH_IF ((StrRef >= min) AND (StrRef <= max)) BEGIN - SAY offset ( AT "StrRef" ) - SPRINT log ~%log% SAY %offset% @%StrRef%%LNL%~ - END - END - END - //Containers - READ_LONG 0x70 "contain_off" - READ_SHORT 0x74 "contain_cnt" - FOR (cnt=0; cnt<"%contain_cnt%"; cnt=cnt+1) BEGIN - SET offset = ("%contain_off%"+0xc0*cnt+0x84) //Lockpick string - READ_LONG offset "StrRef" - PATCH_IF ((StrRef >= min) AND (StrRef <= max)) BEGIN - SAY offset ( AT "StrRef" ) - SPRINT log ~%log% SAY %offset% @%StrRef%%LNL%~ - END - END - //Doors - READ_LONG 0xa8 "door_off" - READ_LONG 0xa4 "door_cnt" - FOR (cnt=0; cnt<"%door_cnt%"; cnt=cnt+1) BEGIN - PATCH_FOR_EACH ~add_off~ IN 0x98 0xb4 BEGIN - SET offset = ("%door_off%"+0xc8*cnt+"%add_off%") //Lockpick string, Dialog speaker name - READ_LONG offset "StrRef" - PATCH_IF ((StrRef >= min) AND (StrRef <= max)) BEGIN - SAY offset ( AT "StrRef" ) - SPRINT log ~%log% SAY %offset% @%StrRef%%LNL%~ - END - END - END - //Automap Notes - READ_LONG 0xc4 "note_off" - READ_LONG 0xc8 "note_cnt" - FOR (cnt=0; cnt<"%note_cnt%"; cnt=cnt+1) BEGIN - SET offset = ("%note_off%"+0x34*cnt+0x4) //Note text - READ_LONG offset "StrRef" - PATCH_IF ((StrRef >= min) AND (StrRef <= max)) BEGIN - SAY offset ( AT "StrRef" ) - SPRINT log ~%log% SAY %offset% @%StrRef%%LNL%~ - END - END - //Projectile traps - READ_LONG 0xcc "pro_off" - READ_LONG 0xd0 "pro_cnt" - FOR (cnt=0; cnt<"%pro_cnt%"; cnt=cnt+1) BEGIN - //PRO structure (embedded PRO files) - READ_LONG ("%pro_off%"+0x1c*cnt+0x8) "pro_emb_off" - PATCH_IF (pro_emb_off != 0) BEGIN - SET offset = ("%pro_emb_off%"+0x30) //String - READ_LONG offset "StrRef" - PATCH_IF ((StrRef >= min) AND (StrRef <= max)) BEGIN - SAY offset ( AT "StrRef" ) - SPRINT log ~%log% SAY %offset% @%StrRef%%LNL%~ - END - END - END - //Rest Interruptions - READ_LONG 0xc0 "rest_off" - FOR (cnt=0; cnt<10; cnt=cnt+1) BEGIN - SET offset = ("%rest_off%"+0x4*cnt+0x20) //Interruption explantion text (10*0x4) - READ_LONG offset "StrRef" - PATCH_IF ((StrRef >= min) AND (StrRef <= max)) BEGIN - SAY offset ( AT "StrRef" ) - SPRINT log ~%log% SAY %offset% @%StrRef%%LNL%~ - END - END - //CHR - END ELSE PATCH_IF (~%SOURCE_EXT%~ STRING_EQUAL_CASE ~chr~) BEGIN - FOR (cnt=0; cnt<99; cnt=cnt+1) BEGIN - SET offset = (0x108+0x4*cnt) - READ_LONG offset "StrRef" - PATCH_IF ((StrRef >= min) AND (StrRef <= max)) BEGIN - SAY offset ( AT "StrRef" ) - SPRINT log ~%log% SAY %offset% @%StrRef%%LNL%~ - END - END - //CRE - END ELSE PATCH_IF (~%SOURCE_EXT%~ STRING_EQUAL_CASE ~cre~) BEGIN - PATCH_FOR_EACH offset IN 0x8 0xc BEGIN //Long name, Short name (tooltip) - READ_LONG offset "StrRef" - PATCH_IF ((StrRef >= min) AND (StrRef <= max)) BEGIN - SAY offset ( AT "StrRef" ) - SPRINT log ~%log% SAY %offset% @%StrRef%%LNL%~ - END - END - FOR (cnt=0; cnt<99; cnt=cnt+1) BEGIN - SET offset = (0xa4+0x4*cnt) - READ_LONG offset "StrRef" - PATCH_IF ((StrRef >= min) AND (StrRef <= max)) BEGIN - SAY offset ( AT "StrRef" ) - SPRINT log ~%log% SAY %offset% @%StrRef%%LNL%~ - END - END - READ_LONG 0x2c4 "fx_off" - READ_LONG 0x2c8 "fx_cnt" - FOR (cnt=0; cnt<"%fx_cnt%"; cnt=cnt+1) BEGIN - READ_LONG ("%fx_off%"+0x108*cnt+0x8) "fx_type" - PATCH_IF ("%fx_type%" = 103) //Change Name - OR ("%fx_type%" = 139) //Display String - OR ("%fx_type%" = 180) //Can't Use Item - OR ("%fx_type%" = 206) //Protection from Spell - OR ("%fx_type%" = 253) //Add Map Marker - OR ("%fx_type%" = 254) //Remove Map Marker - OR ("%fx_type%" = 267) //Protection from Display Specific String - OR ("%fx_type%" = 290) //Change Title - OR ("%fx_type%" = 330) //Float text - OR ("%fx_type%" = 338) //Disable rest or save - BEGIN - SET offset = ("%fx_off%"+0x108*cnt+0x14) - READ_LONG offset "StrRef" - PATCH_IF ((StrRef >= min) AND (StrRef <= max)) BEGIN - PATCH_IF ("%fx_type%" = 267) BEGIN - PATCH_IF (VARIABLE_IS_SET $EVAL ~%array%~(~%StrRef%~)) BEGIN - TEXT_SPRINT StrRef_new $EVAL ~%array%~(~%StrRef%~) - PATCH_IF (StrRef = StrRef_new) BEGIN - SPRINT log ~%log% %slash%%slash%SAY %offset% @%StrRef_new% %slash%%slash%opcode=%fx_type%, %StrRef%%LNL%~ - END ELSE BEGIN - WRITE_LONG offset "%StrRef_new%" - SPRINT log ~%log% WRITE_LONG %offset% %StrRef_new% %slash%%slash%opcode=%fx_type%, %StrRef%%LNL%~ - END - END ELSE BEGIN - GET_STRREF StrRef "string_old" - SET StrRef_new = RESOLVE_STR_REF ((AT StrRef)) - GET_STRREF StrRef_new "string_new" - PATCH_IF ~%string_old%~ STRING_EQUAL_CASE ~%string_new%~ BEGIN - //PATCH_PRINT ~skipping TLK reference updating: %string_old%~ - END ELSE BEGIN - WRITE_LONG offset "%StrRef%" - SPRINT log ~%log% SAY %offset% @%StrRef% %slash%%slash%opcode=%fx_type%%LNL%~ - END - END - END - END - END ELSE PATCH_IF ("%fx_type%" = 319) BEGIN //Item Usability - SET offset = ("%fx_off%"+0x108*cnt+0x40) - READ_LONG offset "StrRef" - PATCH_IF ((StrRef >= min) AND (StrRef <= max)) BEGIN - SAY offset ( AT "StrRef" ) - SPRINT log ~%log% SAY %offset% @%StrRef% %slash%%slash%opcode=%fx_type%%LNL%~ - END - READ_LONG ("%fx_off%"+0x108*cnt+0x18) "ids_target" - PATCH_IF (ids_target = 10) BEGIN //Actor's name - SET offset = ("%fx_off%"+0x108*cnt+0x14) - READ_LONG offset "StrRef" - PATCH_IF ((StrRef >= min) AND (StrRef <= max)) BEGIN - SAY offset ( AT "StrRef" ) - SPRINT log ~%log% SAY %offset% @%StrRef% %slash%%slash%opcode=%fx_type%%LNL%~ - END - END - END - END - //EFF - END ELSE PATCH_IF (~%SOURCE_EXT%~ STRING_EQUAL_CASE ~eff~) BEGIN - READ_LONG 0x10 "fx_type" - PATCH_IF ("%fx_type%" = 103) //Change Name - OR ("%fx_type%" = 139) //Display String - OR ("%fx_type%" = 180) //Can't Use Item - OR ("%fx_type%" = 206) //Protection from Spell - OR ("%fx_type%" = 253) //Add Map Marker - OR ("%fx_type%" = 254) //Remove Map Marker - OR ("%fx_type%" = 267) //Protection from Display Specific String - OR ("%fx_type%" = 290) //Change Title - OR ("%fx_type%" = 330) //Float text - OR ("%fx_type%" = 338) //Disable rest or save - BEGIN - SET offset = 0x1c - READ_LONG offset "StrRef" - PATCH_IF ((StrRef >= min) AND (StrRef <= max)) BEGIN - PATCH_IF ("%fx_type%" = 267) BEGIN - PATCH_IF (VARIABLE_IS_SET $EVAL ~%array%~(~%StrRef%~)) BEGIN - TEXT_SPRINT StrRef_new $EVAL ~%array%~(~%StrRef%~) - PATCH_IF (StrRef = StrRef_new) BEGIN - SPRINT log ~%log% %slash%%slash%SAY %offset% @%StrRef_new% %slash%%slash%opcode=%fx_type%, %StrRef%%LNL%~ - END ELSE BEGIN - WRITE_LONG offset "%StrRef_new%" - SPRINT log ~%log% WRITE_LONG %offset% %StrRef_new% %slash%%slash%opcode=%fx_type%, %StrRef%%LNL%~ - END - END ELSE BEGIN - GET_STRREF StrRef "string_old" - SET StrRef_new = RESOLVE_STR_REF ((AT StrRef)) - GET_STRREF StrRef_new "string_new" - PATCH_IF ~%string_old%~ STRING_EQUAL_CASE ~%string_new%~ BEGIN - //PATCH_PRINT ~skipping TLK reference updating: %string_old%~ - END ELSE BEGIN - WRITE_LONG offset "%StrRef%" - SPRINT log ~%log% SAY %offset% @%StrRef% %slash%%slash%opcode=%fx_type%%LNL%~ - END - END - END - END - END ELSE PATCH_IF ("%fx_type%" = 319) BEGIN //Item Usability - SET offset = 0x48 - READ_LONG offset "StrRef" - PATCH_IF ((StrRef >= min) AND (StrRef <= max)) BEGIN - SAY offset ( AT "StrRef" ) - SPRINT log ~%log% SAY %offset% @%StrRef% %slash%%slash%opcode=%fx_type%%LNL%~ - END - READ_LONG 0x20 "ids_target" - PATCH_IF (ids_target = 10) BEGIN //Actor's name - SET offset = 0x1c - READ_LONG offset "StrRef" - PATCH_IF ((StrRef >= min) AND (StrRef <= max)) BEGIN - SAY offset ( AT "StrRef" ) - SPRINT log ~%log% SAY %offset% @%StrRef% %slash%%slash%opcode=%fx_type%%LNL%~ - END - END - END - //ITM - END ELSE PATCH_IF (~%SOURCE_EXT%~ STRING_EQUAL_CASE ~itm~) BEGIN - PATCH_FOR_EACH offset IN 0x8 0xc 0x50 0x54 BEGIN //Name - Unidentified, Name - Identified, Description - Unidentified, Description - Identified - READ_LONG offset "StrRef" - PATCH_IF ((StrRef >= min) AND (StrRef <= max)) BEGIN - SAY offset ( AT "StrRef" ) - SPRINT log ~%log% SAY %offset% @%StrRef%%LNL%~ - END - END - READ_LONG 0x64 "abil_off" - READ_SHORT 0x68 "abil_cnt" - READ_LONG 0x6a "fx_off" - READ_SHORT 0x70 "fx_cnt" - FOR (cnt=0; cnt<"%abil_cnt%"; cnt=cnt+1) BEGIN - READ_SHORT ("%abil_off%"+0x38*cnt+0x1e) "fx_num" - SET fx_cnt += fx_num //gauge the total number of effects by summing global effects and the effects of each ability - END - FOR (cnt=0; cnt<"%fx_cnt%"; cnt=cnt+1) BEGIN - READ_SHORT ("%fx_off%"+0x30*cnt) "fx_type" - PATCH_IF ("%fx_type%" = 103) //Change Name - OR ("%fx_type%" = 139) //Display String - OR ("%fx_type%" = 180) //Can't Use Item - OR ("%fx_type%" = 206) //Protection from Spell - OR ("%fx_type%" = 253) //Add Map Marker - OR ("%fx_type%" = 254) //Remove Map Marker - OR ("%fx_type%" = 267) //Protection from Display Specific String - OR ("%fx_type%" = 290) //Change Title - OR ("%fx_type%" = 330) //Float text - OR ("%fx_type%" = 338) //Disable rest or save - BEGIN - SET offset = ("%fx_off%"+0x30*cnt+0x4) - READ_LONG offset "StrRef" - PATCH_IF ((StrRef >= min) AND (StrRef <= max)) BEGIN - PATCH_IF ("%fx_type%" = 267) BEGIN - PATCH_IF (VARIABLE_IS_SET $EVAL ~%array%~(~%StrRef%~)) BEGIN - TEXT_SPRINT StrRef_new $EVAL ~%array%~(~%StrRef%~) - PATCH_IF (StrRef = StrRef_new) BEGIN - SPRINT log ~%log% %slash%%slash%SAY %offset% @%StrRef_new% %slash%%slash%opcode=%fx_type%, %StrRef%%LNL%~ - END ELSE BEGIN - WRITE_LONG offset "%StrRef_new%" - SPRINT log ~%log% WRITE_LONG %offset% %StrRef_new% %slash%%slash%opcode=%fx_type%, %StrRef%%LNL%~ - END - END ELSE BEGIN - GET_STRREF StrRef "string_old" - SET StrRef_new = RESOLVE_STR_REF ((AT StrRef)) - GET_STRREF StrRef_new "string_new" - PATCH_IF ~%string_old%~ STRING_EQUAL_CASE ~%string_new%~ BEGIN - //PATCH_PRINT ~skipping TLK reference updating: %string_old%~ - END ELSE BEGIN - WRITE_LONG offset "%StrRef%" - SPRINT log ~%log% SAY %offset% @%StrRef% %slash%%slash%opcode=%fx_type%%LNL%~ - END - END - END - END - END ELSE PATCH_IF ("%fx_type%" = 319) BEGIN //Item Usability - SET offset = ("%fx_off%"+0x30*cnt+0x2c) - READ_LONG offset "StrRef" - PATCH_IF ((StrRef >= min) AND (StrRef <= max)) BEGIN - SAY offset ( AT "StrRef" ) - SPRINT log ~%log% SAY %offset% @%StrRef% %slash%%slash%opcode=%fx_type%%LNL%~ - END - READ_LONG ("%fx_off%"+0x30*cnt+0x8) "ids_target" - PATCH_IF (ids_target = 10) BEGIN //Actor's name - SET offset = ("%fx_off%"+0x30*cnt+0x4) - READ_LONG offset "StrRef" - PATCH_IF ((StrRef >= min) AND (StrRef <= max)) BEGIN - SAY offset ( AT "StrRef" ) - SPRINT log ~%log% SAY %offset% @%StrRef% %slash%%slash%opcode=%fx_type%%LNL%~ - END - END - END - END - //PRO - END ELSE PATCH_IF (~%SOURCE_EXT%~ STRING_EQUAL_CASE ~pro~) BEGIN - SET offset = 0x30 //String - READ_LONG offset "StrRef" - PATCH_IF ((StrRef >= min) AND (StrRef <= max)) BEGIN - SAY offset ( AT "StrRef" ) - SPRINT log ~%log% SAY %offset% @%StrRef%%LNL%~ - END - //SPL - END ELSE PATCH_IF (~%SOURCE_EXT%~ STRING_EQUAL_CASE ~spl~) BEGIN - PATCH_FOR_EACH offset IN 0x8 0xc 0x50 0x54 BEGIN //Name - Unidentified, Name - Identified, Description - Unidentified, Description - Identified - READ_LONG offset "StrRef" - PATCH_IF ((StrRef >= min) AND (StrRef <= max)) BEGIN - SAY offset ( AT "StrRef" ) - SPRINT log ~%log% SAY %offset% @%StrRef%%LNL%~ - END - END - READ_LONG 0x64 "abil_off" - READ_SHORT 0x68 "abil_cnt" - READ_LONG 0x6a "fx_off" - READ_SHORT 0x70 "fx_cnt" - FOR (cnt=0; cnt<"%abil_cnt%"; cnt=cnt+1) BEGIN - READ_SHORT ("%abil_off%"+0x28*cnt+0x1e) "fx_num" - SET fx_cnt += fx_num //gauge the total number of effects by summing global effects and the effects of each ability - END - FOR (cnt=0; cnt<"%fx_cnt%"; cnt=cnt+1) BEGIN - READ_SHORT ("%fx_off%"+0x30*cnt) "fx_type" - PATCH_IF ("%fx_type%" = 103) //Change Name - OR ("%fx_type%" = 139) //Display String - OR ("%fx_type%" = 180) //Can't Use Item - OR ("%fx_type%" = 206) //Protection from Spell - OR ("%fx_type%" = 253) //Add Map Marker - OR ("%fx_type%" = 254) //Remove Map Marker - OR ("%fx_type%" = 267) //Protection from Display Specific String - OR ("%fx_type%" = 290) //Change Title - OR ("%fx_type%" = 330) //Float text - OR ("%fx_type%" = 338) //Disable rest or save - BEGIN - SET offset = ("%fx_off%"+0x30*cnt+0x4) - READ_LONG offset "StrRef" - PATCH_IF ((StrRef >= min) AND (StrRef <= max)) BEGIN - PATCH_IF ("%fx_type%" = 267) BEGIN - PATCH_IF (VARIABLE_IS_SET $EVAL ~%array%~(~%StrRef%~)) BEGIN - TEXT_SPRINT StrRef_new $EVAL ~%array%~(~%StrRef%~) - PATCH_IF (StrRef = StrRef_new) BEGIN - SPRINT log ~%log% %slash%%slash%SAY %offset% @%StrRef_new% %slash%%slash%opcode=%fx_type%, %StrRef%%LNL%~ - END ELSE BEGIN - WRITE_LONG offset "%StrRef_new%" - SPRINT log ~%log% WRITE_LONG %offset% %StrRef_new% %slash%%slash%opcode=%fx_type%, %StrRef%%LNL%~ - END - END ELSE BEGIN - GET_STRREF StrRef "string_old" - SET StrRef_new = RESOLVE_STR_REF ((AT StrRef)) - GET_STRREF StrRef_new "string_new" - PATCH_IF ~%string_old%~ STRING_EQUAL_CASE ~%string_new%~ BEGIN - //PATCH_PRINT ~skipping TLK reference updating: %string_old%~ - END ELSE BEGIN - WRITE_LONG offset "%StrRef%" - SPRINT log ~%log% SAY %offset% @%StrRef% %slash%%slash%opcode=%fx_type%%LNL%~ - END - END - END - END - END ELSE PATCH_IF ("%fx_type%" = 319) BEGIN //Item Usability - SET offset = ("%fx_off%"+0x30*cnt+0x2c) - READ_LONG offset "StrRef" - PATCH_IF ((StrRef >= min) AND (StrRef <= max)) BEGIN - SAY offset ( AT "StrRef" ) - SPRINT log ~%log% SAY %offset% @%StrRef% %slash%%slash%opcode=%fx_type%%LNL%~ - END - READ_LONG ("%fx_off%"+0x30*cnt+0x8) "ids_target" - PATCH_IF (ids_target = 10) BEGIN //Actor's name - SET offset = ("%fx_off%"+0x30*cnt+0x4) - READ_LONG offset "StrRef" - PATCH_IF ((StrRef >= min) AND (StrRef <= max)) BEGIN - SAY offset ( AT "StrRef" ) - SPRINT log ~%log% SAY %offset% @%StrRef% %slash%%slash%opcode=%fx_type%%LNL%~ - END - END - END - END - //STO - END ELSE PATCH_IF (~%SOURCE_EXT%~ STRING_EQUAL_CASE ~sto~) BEGIN - SET offset = 0xc //Name - READ_LONG offset "StrRef" - PATCH_IF ((StrRef >= min) AND (StrRef <= max)) BEGIN - SAY offset ( AT "StrRef" ) - SPRINT log ~%log% SAY %offset% @%StrRef%%LNL%~ - END - READ_LONG 0x4c "drink_off" - READ_SHORT 0x50 "drink_cnt" - FOR (cnt=0; cnt<"%drink_cnt%"; cnt=cnt+1) BEGIN - SET offset = ("%drink_off%"+0x14*cnt+0x8) //Drink name - READ_LONG offset "StrRef" - PATCH_IF ((StrRef >= min) AND (StrRef <= max)) BEGIN - SAY offset ( AT "StrRef" ) - SPRINT log ~%log% SAY %offset% @%StrRef%%LNL%~ - END - END - //WMP - END ELSE PATCH_IF (~%SOURCE_EXT%~ STRING_EQUAL_CASE ~wmp~) BEGIN - READ_LONG 0xc "mapentry_off" - READ_LONG ("%mapentry_off%"+0x20) "areaentry_num" - READ_LONG ("%mapentry_off%"+0x24) "areaentry_off" - FOR (cnt=0; cnt<"%areaentry_num%"; cnt=cnt+1) BEGIN - PATCH_FOR_EACH ~add_off~ IN 0x40 0x44 BEGIN - SET offset = ("%areaentry_off%"+0xf0*cnt+"%add_off%") //Name (caption), Name (tooltips) - READ_LONG offset "StrRef" - PATCH_IF ((StrRef >= min) AND (StrRef <= max)) BEGIN - SAY offset ( AT "StrRef" ) - SPRINT log ~%log% SAY %offset% @%StrRef%%LNL%~ - END - END - END - END -END - -///////////////////////////////////////////////////////////////////////////////////////////////////////// - -DEFINE_ACTION_FUNCTION ~EET_textscreen_music~ - INT_VAR - mus_fadeEnd = 0 - mus_delayEnd = 0 - mus_volumeInt = 1 - mus_volumeFloat = 0 - spe_delayStart = 0 - spe_volumeInt = 1 - spe_volumeFloat = 0 - STR_VAR - sox = EVAL "EET%os_slash%bin%os_slash%%WEIDU_OS%%os_slash%sox_%os_slash%sox%exe%" - snd2acm = EVAL "EET%os_slash%bin%os_slash%%WEIDU_OS%%os_slash%snd2acm%exe%" - temp_dir = EVAL "EET%os_slash%temp" - input_spe_array = "" - input_mus = "" - output = "" - BEGIN - AT_NOW ~%sox% --i -D %input_mus% >%temp_dir%\length.txt~ - OUTER_SPRINT input_spe ~~ - ACTION_PHP_EACH "%input_spe_array%" AS index => file BEGIN - OUTER_SPRINT input_spe ~%input_spe% %file%~ - AT_NOW ~%sox% --i -D %file% >>%temp_dir%\length.txt~ - END - COPY - ~%temp_dir%/length.txt~ ~.../length.txt~ - SET mus_int = 0 - REPLACE_EVALUATE CASE_INSENSITIVE ~^\([0-9]+\).\([0-9]+\)~ BEGIN - PATCH_IF (mus_int = 0) BEGIN - SET mus_int = MATCH1 - SET mus_float = MATCH2 - SET spe_int = 0 - SET spe_float = 0 - PATCH_PRINT ~mus_int = %mus_int%, mus_float = %mus_float%~ - END ELSE BEGIN - SET spe_int = spe_int + MATCH1 - SET spe_float = spe_float + MATCH2 - END - END ~~ - WHILE ( spe_float > 1000000 ) BEGIN - SET spe_int = spe_int + 1 - SET spe_float = spe_float - 1000000 - END - PATCH_PRINT ~spe_int = %spe_int%, spe_float = %spe_float%~ - SET trim_int = mus_int - spe_int - mus_fadeEnd - mus_delayEnd - spe_delayStart - SET trim_float = mus_float - spe_float - PATCH_IF ( trim_float < 0 ) BEGIN - SET trim_float = 1000000 + trim_float - SET trim_int = trim_int - 1 - END - ACTION_IF (trim_int > 0 ) BEGIN - OUTER_SPRINT trim_mus ~%sox% %input_mus% %temp_dir%\input_mus.wav fade 0 -%trim_int%.%trim_float% %mus_fadeEnd%~ //Parameter 1 is '0' so there is no fade in. Parameter 2 removes the last %trim_int%.%trim_float% seconds Parameter 3 uses a %mus_fadeEnd% fade - PRINT ~trim_int = %trim_int%, trim_float = %trim_float%~ - END ELSE BEGIN - OUTER_SPRINT trim_mus ~~ - PRINT ~mus file not trimmed~ - COPY_LARGE + ~%input_mus%~ ~%temp_dir%/input_mus.wav~ - END - ACTION_IF ~%WEIDU_OS%~ STRING_EQUAL_CASE ~win32~ BEGIN - OUTER_SPRINT bash_cmd ~~ - OUTER_SPRINT bash_ext ~bat~ - END ELSE BEGIN - OUTER_SPRINT bash_cmd ~#!/bin/bash~ - OUTER_SPRINT bash_ext ~bash~ - END -<<<<<<<< .../sox.cmd -%bash_cmd% - -%trim_mus% -%sox% %input_spe% %temp_dir%%os_slash%out_speech.wav channels 1 rate 22050 vol %spe_volumeInt%.%spe_volumeFloat% -%sox% %temp_dir%%os_slash%input_mus.wav %temp_dir%%os_slash%out_mus.wav channels 1 rate 22050 vol %mus_volumeInt%.%mus_volumeFloat% -%sox% -m %temp_dir%%os_slash%out_mus.wav "|%sox% %temp_dir%%os_slash%out_speech.wav -p pad %spe_delayStart%" %output% -%snd2acm% -wav %output% %output%.acm ->>>>>>>> - COPY + ~.../sox.cmd~ ~%temp_dir%/sox.%bash_ext%~ EVALUATE_BUFFER - ACTION_IF ~%WEIDU_OS%~ STR_CMP ~win32~ BEGIN - AT_NOW ~chmod 755 %temp_dir%/sox.bash~ - END - AT_NOW ~CALL %temp_dir%%os_slash%sox.%bash_ext%~ - OUTER_INNER_PATCH_SAVE output_dir ~%output%~ BEGIN - REPLACE_TEXTUALLY ~\\~ ~/~ - REPLACE_TEXTUALLY ~/[^/]+$~ ~~ - END - OUTER_INNER_PATCH_SAVE output_file ~%output%~ BEGIN - REPLACE_TEXTUALLY ~\\~ ~/~ - REPLACE_TEXTUALLY ~^.*/~ ~~ - END - PRINT ~output_dir = %output_dir%, output_file = %output_file%~ - ACTION_BASH_FOR ~%output_dir%~ ~^%output_file%$~ BEGIN - OUTER_SET wavsize = BASH_FOR_SIZE + 8 - END - COPY ~EET/base/dummy.wavc~ ~EET/base/dummy.wavc~ //Read the constant in wavc header - READ_ASCII 0x10 wavcheader (12) - BUT_ONLY - COPY + ~%output_dir%/%output_file%.acm~ ~%output_dir%/%output_file%~ - SET acmsize = SOURCE_SIZE - PATCH_PRINT ~wavsize = %wavsize%, acmsize = %acmsize%~ - INSERT_BYTES 0x0 28 //WAVC header size - WRITE_ASCII 0x0 ~WAVCV1.0~ #8 - WRITE_LONG 0x8 wavsize //Uncompressed size: get this from the source WAV before compressing to ACM - WRITE_LONG 0xc acmsize //Compressed size - WRITE_EVALUATED_ASCII 0x10 ~%wavcheader%~ #12 - DELETE + ~%output_dir%/%output_file%.acm~ -END - -///////////////////////////////////////////////////////////////////////////////////////////////////////// - -DEFINE_ACTION_MACRO ~bash_log~ BEGIN //whenever this macro is invoked, it moves the contents of EET/temp/bash.debug to the real log. - LOCAL_SET ln=0 - LOCAL_SPRINT log ~~ - ACTION_IF (FILE_EXISTS ~%temp_dir%/bash.debug~) AND (NOT FILE_SIZE ~%temp_dir%/bash.debug~ 0) BEGIN //don't do this if no log is available now. - COPY + ~%temp_dir%/bash.debug~ ~%temp_dir%~ - ln=BUFFER_LENGTH - READ_ASCII 0 log (ln) - DELETE_BYTES 0 ln - PATCH_LOG ~%log%~ - SPRINT log ~~ - END -END - -///////////////////////////////////////////////////////////////////////////////////////////////////////// - -DEFINE_ACTION_MACRO ~EET_write_soundset~ BEGIN //Workaround for regexp glitch in Gort's WRITE_SOUNDSET - COPY_EXISTING ~%npc%~ ~override~ - PATCH_IF SOURCE_SIZE > 0x2d3 BEGIN - FOR (j1 = 0; j1 < 100; j1 += 1) BEGIN - READ_LONG (0xa4 + j1 * 4) srf - SET nsrf = EVAL ~%soundset%_%j1%~ - PATCH_IF (overwrite = 0) AND (srf = (0 - 1)) BEGIN //Soft writing - WRITE_LONG (0xa4 + j1 * 4) nsrf - END ELSE PATCH_IF (overwrite = 1) AND NOT (nsrf = (0 - 1)) BEGIN //Forced writing - WRITE_LONG (0xa4 + j1 * 4) nsrf - END ELSE PATCH_IF overwrite = 2 BEGIN //Overwrite regardless - WRITE_LONG (0xa4 + j1 * 4) nsrf - END - END - END - BUT_ONLY -END - -///////////////////////////////////////////////////////////////////////////////////////////////////////// - -//Dumps the areas and links of a .wmp file to textual data -DEFINE_PATCH_FUNCTION ~dump_wmp~ - INT_VAR - tra_read = 0 - move_x = 0 - move_y = 0 - compare_bams = 0 - skip_areas = 0 - skip_links = 0 - skip_strings = 0 - STR_VAR - 2da_links_array = "" - icons_array = "" - output_areas = EVAL "%SOURCE_RES%_areas.2da" - output_links = EVAL "%SOURCE_RES%_links.2da" - output_strings = EVAL "%SOURCE_RES%_trans.tra" - BEGIN - SPRINT tilde "~" - SPRINT quote ~"~ - SPRINT area_string "SHORT_NAME CONTENT LONG_NAME FLAGS BAM_ANIM X_POS Y_POS NAME TOOLTIP LOAD_IM%LNL%" - SPRINT link_string "SRC_AREA SRC_NWSE TARGET_ARE ENTRY_NAME TRV_TIME DEF_ENTRY ENC1 ENC2 ENC3 ENC4 ENC5 ENC_PROB%LNL%" - SPRINT trans_string "" - SPRINT area_log "" - READ_LONG 0x8 wmap_cnt - READ_LONG 0xc wmap_off - FOR (cnt=0; cnt<"%wmap_cnt%"; cnt=cnt+1) BEGIN - READ_LONG ("%wmap_off%"+0xb8*cnt+0x20) na - READ_LONG ("%wmap_off%"+0xb8*cnt+0x24) ao - READ_LONG ("%wmap_off%"+0xb8*cnt+0x28) lo - FOR (i=0;i "icon" BEGIN - PATCH_IF (~%area%~ STRING_EQUAL_CASE ~%compare%~) BEGIN - SPRINT area_log ~%area_log% %area%~ - PATCH_PRINT ~%area% wmp icon patching: %bam% -> %icon%~ - SET bam = icon - END - END - PATCH_IF (compare_bams = 1) BEGIN - PHP_EACH "%icons_array%" AS "compare" => "icon" BEGIN - PATCH_IF (~%bam%~ STRING_EQUAL_CASE ~%compare_1%~) AND (~%area_log%~ STRING_CONTAINS_REGEXP ~%area%~) BEGIN - SPRINT area_log ~%area_log% %area%~ - PATCH_PRINT ~%area% wmp icon patching: %bam% -> %icon%~ - SET bam = icon - END - END - END - READ_LONG ao + 0xf0*i + 0x38 xcor - SET xcor = xcor + move_x - READ_LONG ao + 0xf0*i + 0x3c ycor - SET ycor = ycor + move_y - //READ_ASCII ao + 0xf0*i + 0x48 load - SPRINT load N - READ_LONG ao + 0xf0*i + 0x40 name - READ_LONG ao + 0xf0*i + 0x44 tool - PATCH_IF (tra_read = 0) BEGIN - PATCH_IF (name < 0) BEGIN - SPRINT name ~~ - SPRINT tool ~~ - END ELSE BEGIN - READ_STRREF ao + 0xf0*i + 0x40 name - READ_STRREF ao + 0xf0*i + 0x44 tool - END - END ELSE BEGIN - PATCH_IF (name > 0) BEGIN - SET strref = RESOLVE_STR_REF ((AT name)) - GET_STRREF strref "name" - END ELSE BEGIN - SPRINT name ~~ - END - PATCH_IF (tool > 0) BEGIN - SET strref = RESOLVE_STR_REF ((AT tool)) - GET_STRREF strref "tool" - END ELSE BEGIN - SPRINT tool ~~ - END - END - SET doOnce = 0 - PATCH_FOR_EACH var IN name tool BEGIN - SPRINT content EVAL "%%var%%" - PATCH_IF ("%content%" STRING_EQUAL_CASE "") BEGIN - SPRINT EVAL "%var%" N - END ELSE BEGIN - INNER_PATCH_SAVE content "%content%" BEGIN - REPLACE_TEXTUALLY " " "###" - END - PATCH_IF (doOnce = 0) BEGIN - SPRINT trans_string "%trans_string%@%area% = %quote%%content%%quote%%LNL%" - SET doOnce = 1 - END - SPRINT EVAL "%var%" "@%area%" - END - END - SPRINT area_string "%area_string%%area% %area% %area% %flags% %bam% %xcor% %ycor% %name% %tool% %load%%LNL%" - PATCH_FOR_EACH j IN 0 3 2 1 BEGIN - READ_LONG ao + 0xf0*i + 0x50 + 0x8*j li - READ_LONG ao + 0xf0*i + 0x54 + 0x8*j nl - FOR (k=0;k "file" BEGIN - COPY_EXISTING - ~%file%.2da~ ~override~ - PRETTY_PRINT_2DA - REPLACE_TEXTUALLY ~\*~ ~N~ - REPLACE_EVALUATE CASE_INSENSITIVE ~^[0-9]+[ ]+\([A-Za-z0-9#_-]+\)+[ ]+\([0-9]+\)[ ]+\([A-Za-z0-9#_-]+\)[ ]+\([0-9]+\)[ ]+\([0-9]+\)[ ]+\([A-Za-z0-9#_-]+\)[ ]+\([A-Za-z0-9#_-]+\)[ ]+\([A-Za-z0-9#_-]+\)[ ]+\([A-Za-z0-9#_-]+\)[ ]+\([A-Za-z0-9#_-]+\)[ ]+\([A-Za-z0-9#_-]+\)$~ BEGIN - SPRINT nesw ~%MATCH11%~ - INNER_PATCH_SAVE nesw "%nesw%" BEGIN - REPLACE_TEXTUALLY 0 N - REPLACE_TEXTUALLY 1 W - REPLACE_TEXTUALLY 2 S - REPLACE_TEXTUALLY 3 E - END - PATCH_IF (("%link_string%" STRING_CONTAINS_REGEXP "%source% %nesw% %MATCH1% %MATCH3% %MATCH4% %MATCH2% %MATCH6% %MATCH7% %MATCH8% %MATCH9% %MATCH10% %MATCH5%")=0) BEGIN - PATCH_PRINT ~Skipping duplicated link: %source% %nesw% %MATCH1% %MATCH3% %MATCH4% %MATCH2% %MATCH6% %MATCH7% %MATCH8% %MATCH9% %MATCH10% %MATCH5%~ - END ELSE BEGIN - SPRINT link_string "%link_string%%source% %nesw% %MATCH1% %MATCH3% %MATCH4% %MATCH2% %MATCH6% %MATCH7% %MATCH8% %MATCH9% %MATCH10% %MATCH5%%LNL%" - END - END - ~~ - END -<<<<<<<< ...blank ->>>>>>>> - ACTION_IF (skip_areas = 0) BEGIN - COPY + ~...blank~ ~%output_areas%~ - INSERT_BYTES 0 STRING_LENGTH "%area_string%" - WRITE_ASCIIE 0 "%area_string%" - PRETTY_PRINT_2DA - REPLACE_TEXTUALLY ~^[ ]+~ ~~ - END - ACTION_IF (skip_links = 0) BEGIN - COPY + ~...blank~ ~%output_links%~ - INSERT_BYTES 0 STRING_LENGTH "%link_string%" - WRITE_ASCIIE 0 "%link_string%" - PRETTY_PRINT_2DA - REPLACE_TEXTUALLY ~^[ ]+~ ~~ - END - ACTION_IF (skip_strings = 0) BEGIN - COPY + ~...blank~ ~%output_strings%~ - INSERT_BYTES 0 STRING_LENGTH "%trans_string%" - WRITE_ASCIIE 0 "%trans_string%" - END - END -END - -///////////////////////////////////////////////////////////////////////////////////////////////////////// - DEFINE_PATCH_MACRO ~EET_PCU_off_mus~ BEGIN READ_LONG off "source" PATCH_IF ("%source%" > 0) AND (VARIABLE_IS_SET $remapped_mus(~%source%~)) BEGIN diff --git a/EET/readme-EET.html b/EET/readme-EET.html index 6d900517..676c17a6 100644 --- a/EET/readme-EET.html +++ b/EET/readme-EET.html @@ -13,7 +13,7 @@

    Baldur's Gate: Enhanced Edition Trilogy (EET)

    Author: K4thos
    Contributors: WhiteAgnus, AWizardDidIt, CrevsDaak

    On the web: Home page and discussion forum

    -

    Version 1.0 Release Candidate 2
    +

    Version 1.0 Release Candidate 4
    Languages: English, Polish, German, French, Spanish
    Platforms: Windows, Mac OS X

@@ -81,7 +81,7 @@

Installation

If you are planning to use other mods than you should consider using Big World Setup (support for EET will added to BWS soon) to download, extract and install EET and other mods. This approach will save you a lot of time and ensure that selected mods are compatible with EET and installed in the correct order.

-

EET Core Component (setup-EET)

+

Initialise EET (setup-EET)

Core EET component requires "clean" BG2:EE installation with latest patch (currently v2.3.67.3). Translations and voice-overs are of course allowed but installing other (especially larger) mods that changes DLG and BCS files, before EET, may cause problems with later patching, so it's better to keep the installation as clean as possible.

@@ -101,7 +101,7 @@

EET Core Component (setup-EET)

This is NOT the end of installation - please read the below section.

-

EET End Installation Components (setup-EET_end)

+

Finalise EET (setup-EET_end)

After the core component is installed, your game folder should then contain additional setup-EET_end.exe file. Only the last setup-EET_end.exe component is REQUIRED. It should be installed AFTER ALL OTHER MODS (at least after any mod that modifies dialogues, so for example EET Tweaks can be installed later, but to be sure always try to keep it at the end of your installation order, even if other readme files says otherwise).

@@ -111,7 +111,7 @@

EET End Installation Components (setup-EET_end)

  • Update old saves to work with new installation - OPTIONAL - refer to F.A.Q. for more info. Notice that if you're using optional BP-BGT Worldmap mod this component must be installed AFTER it.
  • Alternative GUI (SoD) - OPTIONAL - swaps the in-game BG2:EE GUI with the GUI imported from SoD expansion.
  • -
  • Last component in install order - REQUIRED - finalizes the EET installation (required before starting the game).
  • +
  • Finalise EET - REQUIRED - finalises the EET installation (required before starting the game).

Once the final EET component is installed and you decide to integrate more mods you can safely uninstall it by running setup-EET_end.exe and than install it again once you are satisfied with your mod selection. No problems with reinstalling it too.

@@ -120,7 +120,7 @@

Auto-installation (for expert users)

Instead of directly starting the installation go to the command line, navigate to your installation directory, and execute installers using the construction below. Alternatively, place the construction in a batch file or the Run... dialog in the Start menu.

-

EET Core Component (setup-EET)

+

Initialise EET (setup-EET)

setup-EET.exe --force-install 0 --skip-at-view --language X --args-list [flags] [path]

@@ -169,7 +169,7 @@

Auto-installation (for expert users)


-

EET End Installation Components (setup-EET_end)

+

Finalise EET (setup-EET_end)

setup-EET_end.exe --force-install-list [number] --language X

@@ -194,7 +194,7 @@

Auto-installation (for expert users)

0 - Update old saves to work with new installation
1 - Alternative GUI (SoD)
- 2 - Last component in install order (required before starting the game)

+ 2 - Finalise EET (last mod in install order)

@@ -206,7 +206,7 @@

Auto-installation (for expert users)

setup-EET_end.exe --force-install-list 1 2 --language 0

-

This construction forces WeiDU to use English language, installs optional GUI switch component and REQUIRED component that finalizes EET installation.

+

This construction forces WeiDU to use English language, installs optional GUI switch component and REQUIRED component that finalises EET installation.

@@ -235,7 +235,7 @@

How to start the game?

What are the differences between EET and the original Baldur's Gate: Enhanced Edition?

-

Nothing significant, at least in the way you're going to experience it. Technically there are some minor adjustments to make the BG1 portion of the game compatible with BG2 resources but it's not something that you will notice in game. The only gameplay difference is the way the Iron Crisis items shattering is handled. Unlike vanilla game, in EET Iron Crisis affects not only normal steel weapons (0.5% chance for each attack in EET, compared to 1% in BG1) but armours (0.2% on hit), shields (0.2%) and helmets (0.1%) too. The effect is true for your party and enemies. It can be considered more a restoration rather than tweak, as from game files it's pretty clear that at least armours and shields were meant to break since they have corresponding flags set and unused icons are present too. If you don't like this feature then install EET Tweaks components that will allow you to make it work exactly as in the vanilla game. Other than this obviously the game won't finish after the BG1 end movie. Whole game is also using a new Worldmap.

+

Nothing significant, at least in the way you're going to experience it. Technically there are some minor adjustments to make the BG1 portion of the game compatible with BG2 resources but it's not something that you will notice in game. Obviously the game won't be over after the BG1 end movie. Whole game is also using a new Worldmap.

What are the differences between EET and the original Siege of Dragonspear expansion?

@@ -256,9 +256,9 @@

What should be the general install order?

The general mod install order looks like this:

  1. Mods installed on BG:EE
  2. -
  3. EET Core component (setup-EET) installed on BG2:EE
  4. +
  5. Initialise EET (setup-EET) installed on BG2:EE
  6. Mods with native EET support installed on top of EET
  7. -
  8. EET End component (third component of setup-EET_end)
  9. +
  10. Finalise EET (third component of setup-EET_end that ends the installation)
@@ -309,7 +309,11 @@

Troubleshooting

Fatal Installation Errors

-

"(...) BG:EE mod is not recognized by EET, so it can't be installed on BG2:EE"

+

I have Baldur's Gate: Enhanced Edition installed, but the installation does not accept the directory that I type in.

+ +

The most likely scenario is that your installation is broken or that you use GOG or Steam version of SoD and didn't use modmerge tool. SoD resources presence is verified with "movies/sodcin05.wbm" file within BG:EE directory. Try reinstalling Baldur's Gate: Enhanced Edition and use the tool. You can also try parsing the BG:EE directory using command line as described in the installation section.

+ +

"(...) BG:EE mod is not recognized by EET, so it can't be imported to BG2:EE with EET"

Due to reasons specified in FAQ, EET limits "on the fly" BG:EE resources conversion to vanilla BG:EE installation and mods listed in the compatibility list. Adding other mods is fast and easy, so the list will grow over time.

@@ -317,9 +321,9 @@

Fatal Installation Errors

Check the selected BG:EE language directory if the TLK file is indeed there

-

I have Baldur's Gate: Enhanced Edition installed, but the installation does not accept the directory that I type in.

+

ERROR: COPY (...) FAILED: cannot open target

-

The most likely scenario is that your installation is broken. Try reinstalling Baldur's Gate: Enhanced Edition. Also you can try parsing the BG:EE directory using command line as described in the installation section.

+

WeiDU fails when trying to modify hidden files. Disable "Hidden" attribute.

WeiDU stopped the installation because of error.

@@ -342,12 +346,16 @@

In-game problems

The game has noticeable lag during Siege of Dragonspear areas with many NPCs.

-

It has been reported that some low end graphic cards (integrated Intel HD3000 for example) are not beefed enough to handle such scenes well when with Linear scaling. It's not related to EET in any way. In order to fix it go to Options -> Graphics and enable "Nearest Neighbour Scaling". Also update your GPU drivers if you don't use latest ones.

+

It has been reported that some low end graphic cards (integrated Intel HD3000 for example) are not beefed enough to handle such scenes well with Linear scaling. It's not related to EET in any way. In order to fix it go to Options -> Graphics and enable "Nearest Neighbour Scaling". Also update your GPU drivers if you don't use latest ones.

Fog effect starts at the top-right of the map and expands in the shape of an anchor.

It's a known engine bug. Hopefully it will be fixed in the next patch.

+

Some areas in BG1 have glitched water overlays.

+ +

We are currently trying to find a solution for this issue. Please check out this post and report your findings.

+

Credits

@@ -357,7 +365,7 @@

Kudos (in alphabetical order)

  • Many thanks to AL|EN for integration with Big World Setup and support
  • -
  • Many thanks to Argent77 for Near Infinity development, TileConv compressor and tile2ee tool
  • +
  • Many thanks to Argent77 for Near Infinity development, TileConv compressor, tile2ee tool and other major contributions
  • Many thanks to Ascension64 whose work on BGT-WeiDU inspired this mod
  • Many thanks to AWizardDidIt for being a writer for EET related content (IWD-in-EET mod)
  • Many thanks to Bardez who created the original Baldur's Gate Trilogy