Jump to content

the bigg

  • Content Count

  • Joined

  • Last visited

About the bigg

  • Rank
    The Avatar of F/Ts
  • Birthday 06/12/1985

Profile Information

  • Gender
  • Location
    Modena (Italy)

Contact Methods

  • Website URL
  • AIM
  • MSN
  • ICQ
  • Yahoo

Recent Profile Visitors

26,751 profile views
  1. It appears that deleting the old repository and re-uploading my mods on GitHub was faster than understanding and replying to Jarno's post. I've also checked out BWS' code, and am in the process of uploading my mods' download links.
  2. Regarding #2, if the player wants only generalized_biffing, you could download and extract bigg_misc_mods.zip; the other mods being extracted wastes disk space, but doesn't affect the game. However, choosing generalized_biffing and tb#tweaks means that bigg_misc_mods.zip is downloaded and extracted twice. If the latter case might lead to bugs, I'll see about creating dedicated repositories.
  3. Some questions regarding downloading mods from github (see link in sig for my repositories): - my repositories don't contain setup-mymod.exe. Can the BWS provide weidu's executable (ex. by copying that of another mod), or should the mod on the repository provide said file? - because of laziness, I have setup a single repository for multiple mods (generalized_biffing, ggib_tweaks, tb#characters, tb#kits, tb#tweaks and the shitty mods I made ten years ago all are under vbigiani/bigg_misc_mods, while Widescreen, Refinements and Stivan have their own repository). Should I split those mods into multiple repositories? Do note that extracting bigg_misc_mods's zip into your BG2 directory creates valid folder structures for all the listed mods.
  4. I don't know what you're trying to talk about; however: - according to Google, the specified assertion failures are caused by improper installation (E.G. installing to C:\Program Files, installing PST GUI before Widescreen) and are fixed by a reinstall - the 16MB limitation is intrinsic in OCaml (and, thus, in WeiDU), so there's no realistic way around that. The crash is happening on AR0105.tis (as per the debug file), and chances are that the failure might happen on multiple TIS files.
  5. Unfortunately, the installer cannot patch files that are larger than 16MB (it's an intrinsic limitation in the programming language the installer is written in); the error message given when choosing 4k means that such a resolution (on PST and/or BG1) would require editing such a file, hence there is no way to install 4k resolution on PST and/or BG1. Since I have a plain 1080p monitor I can't attempt to run Widescreen at 2880x1620, hence I cannot figure out the cause of those bugs; the usual wisdom is: - install PST outside of the Program Files directory (E.G. install on C:\games\Torment, not on C:\Program Files (86)\Torment) - disable all security software (Windows UAC, antivirus, ...) when installing mods - install Ghostdog's PST UI mod *after* Widescreen is correctly installed I can't speak for personal tastes, but 1920x1080 (not 1680x1080 as incorrectly stated) is exactly half the resolution of 4K, hence there should be no aliasing involved and the images won't look outrageously bad.
  6. The resulting file would be: RESPONSE #100 // implied DoNothing() RESPONSE #10 // DisplayStringHead(Player1) RESPONSE #10 // DisplayStringHead(Player2) etc. I can see how the example wouldn't be completely obvious to understand, though.
  7. That's the idea - 10pp is installed early, and the mod's script is coded using LOOP_PLAYER_1_M0_ and unrolled by calling tb#npp_make_aware (rather than the current solution, where mods manually iterate Player1..6 and 10pp must guess how to extend to Player7..10.
  8. Following a discussion via PM, it became evident that it is infeasible for the 10pp mod to be able to retroactively handle correctly all required script and dialogue changes for all possible mod scripts; it is far easier to edit the mods themselves, by introducing a facility in WeiDU to loop code (BAF, D, TRA) according to the registered Party Member Count. This is an example of such a facility (that should probably be added to the standard WeiDU library), implemented via a TP2 function, and a sample 10pp-aware mod: DEFINE_PATCH_FUNCTION ~tb#npp_make_aware~ INT_VAR number_of_players = 6 STR_VAR subroutine = ~~ BEGIN TEXT_SPRINT base_search ~_%subroutine%LOOP_PLAYER~ TEXT_SPRINT start_search ~%base_search%_\(M?\)\([0-9]*\)_\(M?\)\([0-9]*\)_BEGIN_~ SET offset = INDEX_BUFFER (~%start_search%~ 0) WHILE offset >= 0 BEGIN offset_end = INDEX_BUFFER (~_BEGIN_~ offset) length = offset_end + 7 - offset READ_ASCII offset buffer_to_parse (offset_end + 7 - offset) DELETE_BYTES offset (length) INNER_PATCH_SAVE end_search ~%buffer_to_parse%~ BEGIN REPLACE_EVALUATE ~%start_search%~ BEGIN PATCH_IF ~%MATCH1%~ STRING_EQUAL_CASE ~M~ THEN BEGIN start = number_of_players - MATCH2 END ELSE BEGIN start = MATCH2 END PATCH_IF ~%MATCH3%~ STRING_EQUAL_CASE ~M~ THEN BEGIN end = number_of_players - MATCH4 END ELSE BEGIN end = MATCH4 END END ~%MATCH0%~ REPLACE_TEXTUALLY ~_BEGIN_~ ~_END_~ END offset_end = INDEX_BUFFER (~%end_search%~ offset) DELETE_BYTES offset_end (STRING_LENGTH ~%end_search%~) READ_ASCII offset buffer_to_duplicate (offset_end - offset) DELETE_BYTES offset (offset_end - offset) TEXT_SPRINT result ~~ FOR (i = start; start < end ? i <= end : i >= end; i += start < end ? 1 : 0 - 1) BEGIN INNER_PATCH_SAVE addendum ~%buffer_to_duplicate%~ BEGIN REPLACE_EVALUATE ~_%subroutine%ITERATOR_\(M?\)\([0-9]*\)_~ BEGIN PATCH_IF ~%MATCH1%~ STRING_EQUAL_CASE ~M~ THEN BEGIN res = i + MATCH2 END ELSE BEGIN res = i - MATCH2 END END ~%res%~ REPLACE_EVALUATE ~_%subroutine%ITERATOR_\(M?\)\([0-9]*\)[*]\([0-9]*\)_~ BEGIN mult = MATCH3 PATCH_IF ~%MATCH1%~ STRING_EQUAL_CASE ~M~ THEN BEGIN res = i * mult + MATCH2 END ELSE BEGIN res = i * mult - MATCH2 END END ~%res%~ TEXT_SPRINT subsubroutine ~%subroutine%SUB~ LPF ~tb#npp_make_aware~ INT_VAR number_of_players = number_of_players STR_VAR subroutine = EVALUATE_BUFFER ~%subsubroutine%~ END END TEXT_SPRINT result ~%result%%addendum%~ END INSERT_BYTES offset (STRING_LENGTH ~%result%~) WRITE_ASCIIE offset ~%result%~ (STRING_LENGTH ~%result%~) offset = INDEX_BUFFER (~%start_search%~ offset) END END // This should be determined from Object.IDS OUTER_SET number_of_players = 10 <<<<<<<< 10pp-aware/tb#test.d BEGIN ~tb#test~ IF ~True()~ THEN start SAY @0 _LOOP_PLAYER_1_M0_BEGIN_ IF ~InParty(Player_ITERATOR_0_)~ THEN REPLY @10000_ITERATOR_0_ GOTO response_ITERATOR_0_ _LOOP_PLAYER_1_M0_END_ END _LOOP_PLAYER_1_M0_BEGIN_ IF ~~ THEN response_ITERATOR_0_ SAY @1 IF ~~ THEN DO ~SetGlobal("PlayerToHeal", "LOCALS", _ITERATOR_0_)~ EXIT END _LOOP_PLAYER_1_M0_END_ >>>>>>>> <<<<<<<< 10pp-aware/tb#test.tra @0 = ~Hello. Who do you want to heal?~ @1 = ~Done!~ _LOOP_PLAYER_1_M0_BEGIN_ @10000_ITERATOR_0_ = ~Heal <Player_ITERATOR_0_>, please!~ _LOOP_PLAYER_1_M0_END_ >>>>>>>> <<<<<<<< 10pp-aware/tb#test.baf _LOOP_PLAYER_M1_1_BEGIN_ IF Global("PlayerToHeal", "LOCALS", Player_ITERATOR_1_) InParty(Player_ITERATOR_1_) THEN RESPONSE #100 Spell(Player_ITERATOR_1_, CURE_LIGHT_WOUNDS) DisplayStringHead("Let me heal <Player_ITERATOR_0_> too, if he exists!") SetGlobal("PlayerToHeal", "LOCALS", Player_ITERATOR_1_)) END _LOOP_PLAYER_M1_1_END_ IF Global("PlayerToHeal", "LOCALS", 1) InParty(Player1) THEN RESPONSE #100 Spell(Player1, CURE_LIGHT_WOUNDS) DisplayStringHead("I already healed <Player1>. Let me stop the iteration!") SetGlobal("PlayerToHeal", "LOCALS", 0)) END _LOOP_PLAYER_1_M0_BEGIN_ IF NumberInParty(_ITERATOR_0_) THEN RESPONSE #100 // DoNothing() _SUBLOOP_PLAYER_1__ITERATOR_0__BEGIN_ RESPONSE #10 DisplayStringHead("Hello <Player_SUBITERATOR_0_>! Need healing?") _SUBLOOP_PLAYER_1__ITERATOR_0__END_ END _LOOP_PLAYER_1_M0_END_ _LOOP_PLAYER_M0_M0_BEGIN_ IF OR(_ITERATOR_3*2_) _SUBLOOP_PLAYER_1__ITERATOR_0__BEGIN_ Dead(Player_SUBITERATOR_0_) !InParty(Player_SUBITERATOR_0_) _SUBLOOP_PLAYER_1__ITERATOR_0__END_ Global("DoNotDisturb", "LOCALS", 0) Global("DoNotDisturb", "LOCALS", 1) Global("DoNotDisturb", "LOCALS", 2) THEN RESPONSE #100 DoSomething() END _LOOP_PLAYER_M0_M0_END_ >>>>>>>> COPY ~10pp-aware/tb#test.d~ ~10pp-aware/tb#test.d~ ~10pp-aware/tb#test.tra~ ~10pp-aware/tb#test.tra~ ~10pp-aware/tb#test.baf~ ~10pp-aware/tb#test.baf~ LPF ~tb#npp_make_aware~ INT_VAR number_of_players = number_of_players END This is still a rough draft, of course - hopefully, by exposing the code to the community, enhancements will me made faster than if made by a single developer. Known issues and other TODOs: - _LOOP_PLAYER... directives generate empty lines in the resulting file - OR() blocks must be encircled in a dummy LOOP_PLAYER_M0_M0_; ideally, after unrolling all LOOP_PLAYER, remaining _ITERATOR_xxx_ should be replaced by the correct values. - More test cases... - Document the synthax - Get somebody to write a meta-mod to convert unmaintained mods to the proposed _LOOP_PLAYER_ synthax (Similar to the BWP Fixpack / Trimpack / Textpack).
  9. I don't think the DECOMPILE_BCS_TO_BAF command will ever be removed, since doing that will break all mods that use it. However, you need a COPY (or friends) command to use DECOMPILE_BCS_TO_BAF, since it's a PATCH (I.E. something that operates on a "current buffer", which MOVE does not create, but COPY and friends do). I'm too rusty on the synthax to write sample code; the recommended algorithm should look like: COPY_EXISTING_REGEXP GLOB ~^.*\.bcs$~ ~override~ COUNT_REGEXP_INSTANCES ~regexp~ ~has_player_6 PATCH_IF has_player_6 THEN BEGIN DECOMPILE_AND_PATCH BEGIN read the current buffer into file_contents INNER_ACTION BEGIN write the variable file_contents to 10pp/tmp/tmp.baf AT_NOW ~perl wrapper.pl 10pp/tmp/tmp.baf 10pp/tmp/tmpout.baf~ read 10pp/tmp/tmpout.baf into file_contents END delete the current buffer write file_contents as the current buffer END END BUT_ONLY Re: REFACTOR_TRIGGER and D files: WeiDU does not, generally speaking, care about whitespaces when compiling a DLG file. IIRC, they do matter for some purpose in the BG1 engine (which is irrelevant, given the GemRB target).
  10. DECOMPILE_AND_PATCH cannot submit the decompiled (BAF|D) file to an external process, thus you have to use DECOMPILE_BCS_TO_BAF instead (which is deprecated not because broken, but because 99% of its use cases are better solved by using DECOMPILE_AND_PATCH, as exemplified in the DECOMPILE_AND_PATCH documentation). BTW: will you kick yourself after learning that WeiDU has a REFACTOR_BCS_TRIGGER command, that knows how to process Boolean logic?
  11. As per topic title; I'm reporting the error, although I find it strange that it hasn't been reported yet... relevant debug.log: Installing [Remove Racial Restrictions for Single Classes] [v16] Copying 1 file ... [./override/sw1h01.itm] loaded, 458 bytes Copied [sw1h01.itm] to [override/cdt02360.g3] Copying and patching 1 file ... [./override/clsrcreq.2da] loaded, 3015 bytes override/clsrcreq.2da copied to bg2_tweaks/backup/2360/clsrcreq.2da, 3015 bytes Copied [clsrcreq.2da] to [override/clsrcreq.2da] Copying and patching 1 file ... [./override/mgsrcreq.2da] loaded, 319 bytes ERROR: Cannot find 0 rows with at least 9 columns.ERROR: [mgsrcreq.2da] -> [override] Patching Failed (COPY) (Failure("Cannot Set 2DA Entry")) Stopping installation because of error.relevant code: COPY_EXISTING ~mgsrcreq.2da~ ~override~ FOR (col = 2; col < 9 ; ++col) BEGIN SET_2DA_ENTRY 0 col 9 1 END PRETTY_PRINT_2DA BUT_ONLY relevant mgsrcreq.2da (notice it has 1 title + 7 data = 8 columns, vs. the 9 referenced in the code): 2DA V1.0 0 HUMAN ELF HALF_ELF DWARF HALFLING GNOME HALFORC MAGE 1 1 1 0 0 0 0 ABJURER 1 0 0 0 0 0 0 CONJURER 1 0 1 0 0 0 0 DIVINER 1 1 1 0 0 0 0 ENCHANTER 1 1 1 0 0 0 0 ILLUSIONIST 1 0 0 0 0 1 0 INVOKER 1 0 0 0 0 0 0 NECROMANCER 1 0 0 0 0 0 0 TRANSMUTER 1 0 1 0 0 0 0 WILDMAGE 1 1 1 0 0 0 0 Relevant version information: I'm using BG2 + TOB "classic" (not BG2EE), bg2_tweaks v16, tobex v26; --change-log reports no other file touching mgsrcreq.2da. The component "open all kits to all races" assumes 9 columns as well, but performs a COUNT_2DA_ROWS before patching, resulting in no error being raised and the file not being changed by SET_2DA_ENTRY (it is changed by PRETTY_PRINT_2DA).
  12. For the record, feel free to roll in IWD2Tweaks and/or TB#Tweaks into the TPwBaH; for either of those, github might or might not contain fixes/updates that haven't been added to the 'official' build. I'll ask ggib_eht to stop by and give permission as far as ggib_tweaks is concerned.
  13. Hello all, it has recently been brought to my attention that several of my mods have been waiting for 2+ years for somebody to perform trivial fixes (E.G. downloading and packaging the latest version from git, or changing a couple of lines to account for BG2EE). As such, I'd like to state the following (and ask forum administrators to act accordingly): In addition to any terms that are stated in the readme, all of my mods are also available under the GPL v3 license (you are free to choose between the readme terms and the GPL v3 terms). As a consequence of that, anybody is free to modify any of my mods and upload their changes to their own server (either as a diff or as a stand-alone package). Anybody who expresses such an interest and has already made reasonable contributions to the IE modding scene is to be granted the necessary privileges to update the 'official' package for any of my mods. Anybody doing so is free both to perform technical and content changes (the latter within reason). By "Reasonable contributions to the IE modding scene" I mean: Has published at least one "average" mod/tool/knowledge base (not an one-day NPC) AND at least one of:Has published something (mod, tool, knowledge base, ...) that is pivotal to the current modding scene (ex. Fixpack, SCS, TobEx, WeiDU, BWS, BWP, BiG World FAQ). OR Semi-regularly contributes outside of its own personal projects (either by posting informative threads/replies or by contributing code). OR Has published several "average" mods. By published I mean: the work should be available for download and reasonably feature-full and bug-free the person should be author or co-author (not a simple contributor) When in doubt, assume permission is granted. I leave the definition of "[content changes] within reason" intentionally vague. Sincerely, Valerio
  14. From level1npcs\level1npcs.tp2: COPY_EXISTING ~kit.ids~ ~override~ // bogstandard kit.ids fixes so you can script kits /* snip */ PATCH_IF SOURCE_SIZE THEN BEGIN REPLACE_TEXTUALLY ~[0-9x]+[ %0t0%%0t9%]+BARBARIAN~ ~0x0000 BARBARIAN~ REPLACE_TEXTUALLY ~[0-9x]+[ %0t0%%0t9%]+WILD[_]?MAGE~ ~0x0000 WILDMAGE~ COUNT_REGEXP_INSTANCES ~TRUECLASS~ "cri" PATCH_IF ("cri" < 0x1) THEN BEGIN COUNT_2DA_ROWS 0x2 "entries" INSERT_2DA_ROW "entries" 0x2 ~0x4000 TRUECLASS~ END COUNT_REGEXP_INSTANCES ~BARBARIAN~ "cri" PATCH_IF ("cri" < 0x1) THEN BEGIN COUNT_2DA_ROWS 0x2 "entries" INSERT_2DA_ROW "entries" 0x2 ~0x0000 BARBARIAN~ END COUNT_REGEXP_INSTANCES ~WILDMAGE~ "cri" PATCH_IF ("cri" < 0x1) THEN BEGIN COUNT_2DA_ROWS 0x2 "entries" INSERT_2DA_ROW "entries" 0x2 ~0x0000 WILDMAGE~ END END BUT_ONLY As of ToBEx V 22, the correct values are COPY_EXISTING ~kit.ids~ ~override~ // bogstandard kit.ids fixes so you can script kits /* snip */ PATCH_IF SOURCE_SIZE THEN BEGIN REPLACE_TEXTUALLY ~[0-9x]+[ %0t0%%0t9%]+BARBARIAN~ ~0x40000000 BARBARIAN~ REPLACE_TEXTUALLY ~[0-9x]+[ %0t0%%0t9%]+WILD[_]?MAGE~ ~0x80000000 WILDMAGE~ COUNT_REGEXP_INSTANCES ~TRUECLASS~ "cri" PATCH_IF ("cri" < 0x1) THEN BEGIN COUNT_2DA_ROWS 0x2 "entries" INSERT_2DA_ROW "entries" 0x2 ~0x4000 TRUECLASS~ END COUNT_REGEXP_INSTANCES ~BARBARIAN~ "cri" PATCH_IF ("cri" < 0x1) THEN BEGIN COUNT_2DA_ROWS 0x2 "entries" INSERT_2DA_ROW "entries" 0x2 ~0x40000000 BARBARIAN~ END COUNT_REGEXP_INSTANCES ~WILDMAGE~ "cri" PATCH_IF ("cri" < 0x1) THEN BEGIN COUNT_2DA_ROWS 0x2 "entries" INSERT_2DA_ROW "entries" 0x2 ~0x80000000 WILDMAGE~ END END BUT_ONLY This is causing Wild Mages to misbehave when installed alongside Refinements.
  • Create New...