Jump to content


Photo

G3 Tweaks v3 Released


  • Please log in to reply
5 replies to this topic

#1 CamDawg

CamDawg

    ALL GLORY TO THE HYPNOTOAD

  • Modder
  • 1505 posts

Posted 09 June 2004 - 03:12 PM

The G3 Tweak Pack is a compilation of fixes, cosmetic changes, and tweaks. Some of these were fan requests, others are needed fixes, and others simply make dealing with the more irritating aspects of the game engine easier. Each component can be installed separately so the player can pick and choose only which ones they wish to install. This tweak pack is a combination and update of CamDawg's and Idobek's Tweak Packs.

Changes in v3:
  • Allow Stealth and Thieving Abilities in Heavy Armor per P&P should now install correctly on a SoA-only game.
  • Icewind Dale Casting Graphics installation typo fixed.
  • Added Druids Use Cleric Level and Spell Progression and Maximum HP on Level Up components.
Complete list of components:
  • Shadows of Amn World Map Fixes
  • Change Magically Created Weapons to Zero Weight
  • Force All Dialogue to Pause
  • Valen/Solaufein-Style Interjections
  • Alter HP Triggers for NPC Wounded Dialogues
  • Two-Handed Bastard Swords
  • Two-Handed Katanas
  • Universal Clubs
  • Weapon Styles for All
  • Remove Helmet Animations
  • Imoen Avatar Change
  • Viconia Skin Color Change
  • Avatar Morphing Script
  • Weapon Animation Tweaks
  • Identify All Items
  • 100% Learn Spells
  • Bottomless Bags of Holding
  • Delay High Level Abilities
  • Level 20 Experience Point Cap
  • Level 30 Experience Point Cap
  • Allow Stealth and Thieving Abilities in Heavy Armor per P&P
  • Icewind Dale Casting Graphics
  • Druids Use Cleric Level and Spell Progression
  • Maximum HP on Level Up
View the ReadMe
Download

Why is this Hypnotoad video so popu... ALL GLORY TO THE HYPNOTOAD.
____
The Gibberlings Three - Home of IE Mods

The BG2 Fixpack - All the fixes of Baldurdash, plus a few hundred more. Now available, with more fixes being added in every release.


#2 the bigg

the bigg

    2083 is a prime number.

  • Modder
  • 3331 posts

Posted 09 June 2004 - 11:56 PM

Does your max HP on level up modify also the creatures or only the HPs that party members get when they level-up?

I can provide a tp2 chunk that modifies also the HPs of every creature (EG Minsc and Jaheira get both something like 20 HP)

I also had to borrow a small bit of your tp2 (the ALWAYS part) for my Mazzy the Paladin mod. I hope it's OK...

Edited by the bigg, 10 June 2004 - 12:18 AM.

Italian users: help test the Stivan NPC!

Author or Co-Author: WeiDU - Widescreen - Generalized Biffing - Refinements - TB#Tweaks - IWD2Tweaks - TB#Characters - Traify Tool - Some mods that I won't mention in public
Maintainer: Semi-Multi Clerics - Nalia Mod - Nvidia Fix
Code dumps: Detect custom secondary types - Stutter Investigator

If possible, send diffs, translations and other contributions using Git.


#3 CamDawg

CamDawg

    ALL GLORY TO THE HYPNOTOAD

  • Modder
  • 1505 posts

Posted 10 June 2004 - 07:54 AM

Does your max HP on level up modify also the creatures or only the HPs that party members get when they level-up?

Just party members when they level up.


I can provide a tp2 chunk that modifies also the HPs of every creature (EG Minsc and Jaheira get both something like 20 HP)

Hadn't considered this idea, to be honest. If there is interest in this, it should be simple enough to implement. Giving max HP to opponents, though, may be a better idea for Tactics. :D

I also had to borrow a small bit of your tp2 (the ALWAYS part) for my Mazzy the Paladin mod. I hope it's OK...

Not a problem.

Why is this Hypnotoad video so popu... ALL GLORY TO THE HYPNOTOAD.
____
The Gibberlings Three - Home of IE Mods

The BG2 Fixpack - All the fixes of Baldurdash, plus a few hundred more. Now available, with more fixes being added in every release.


#4 the bigg

the bigg

    2083 is a prime number.

  • Modder
  • 3331 posts

Posted 10 June 2004 - 11:42 PM

I can provide a tp2 chunk that modifies also the HPs of every creature (EG Minsc and Jaheira get both something like 20 HP)

Hadn't considered this idea, to be honest. If there is interest in this, it should be simple enough to implement. Giving max HP to opponents, though, may be a better idea for Tactics. :D

Almost all opponents have max HP anyway ;)
The benefits are almost only for party members.

Just some random (?) opponents get really more powerful, EG, bodhi gets 200 (from 120, 185 with tactics) while, with tactics installed, liches also get 200... It's lust up to tweaking the numbers a bit <_<

Implementation isn't 100% simple, since this is the work I've done:

//other stuff, need to apply these two patches:
SET "chpraisedto" = 0
SET "hpraisedto" = 0


PRINT "Updating all creature's HPs. It will take a lot of time. If you read the actual code, you'll ask yourself why it didn't take longer;-)"

COPY_EXISTING_REGEXP GLOB ~.*\.cre~ ~override~
READ_BYTE 0x0272 "race"
READ_BYTE 0x0010 "dual1"
READ_BYTE 0x0011 "dual2"
READ_SHORT 0x0024 "currenthp"
READ_SHORT 0x0026 "maxhp"
READ_BYTE 0x0234 "level1" // If dual-classed, this value is put in the next field, and this field is set to 1.
READ_BYTE 0x0235 "level2" // Highest attained level in secondary class (0-100)
READ_BYTE 0x0236 "level3" // Highest attained level in tertiary class (0-100)
            // 0 is Dual Classed cre (if 0x0235 is non-zero, >0 is multi-classed)
READ_LONG 0x0244 "kit" //0x00004000 = barbarian
READ_BYTE 0x0273 "class"/*1 MAGE 2 FIGHTER 3 CLERIC 4 THIEF 5 BARD 6 PALADIN 7 FIGHTER_MAGE 8 FIGHTER_CLERIC 9 FIGHTER_THIEF 10 FIGHTER_MAGE_THIEF 11 DRUID 12 RANGER 13 MAGE_THIEF 14 CLERIC_MAGE 15 CLERIC_THIEF 16 FIGHTER_DRUID 17 FIGHTER_MAGE_CLERIC 18 CLERIC_RANGER 19 SORCERER 20 MONK*/
SET "firstdice" = 0
SET "firstlast" = 0
SET "firstpostdice" = 0
SET "seconddice" = 0
SET "secondlast" = 0
SET "secondpostdice" = 0
SET "thirddice" = 0
SET "thirdlast" = 0
SET "thirdpostdice" = 0
SET "divide" = 1

SET "noloop" = 0
WHILE ("%noloop%" = 0) BEGIN
//this while determines how will the dice work for a non-dualclass
//dual classes get extra treatment later

//non standard classed get treated later
    WHILE (("%firstdice%" = 0) AND (("%class%" = 1) AND ("%kit%" = 0x00004000))) BEGIN //class = barbarian
      	SET "firstdice" = 12
	SET "firstlast" = 9
	SET "firstpostdice" = 3
	SET "seconddice" = 0
	SET "thirddice" = 0
    END
    WHILE (("%firstdice%" = 0) AND (("%class%" = 1) OR ("%class%" = 19))) BEGIN //class = MA/S
  	SET "firstdice" = 4
	SET "firstlast" = 10
	SET "firstpostdice" = 1
	SET "seconddice" = 0
	SET "thirddice" = 0
    END
    WHILE (("%firstdice%" = 0) AND ((("%class%" = 2) OR ("%class%" = 6))OR ("%class%" = 12))) BEGIN //class = F/R/P
  	SET "firstdice" = 10
	SET "firstlast" = 9
	SET "firstpostdice" = 3
	SET "seconddice" = 0
	SET "thirddice" = 0
    END
    WHILE (("%firstdice%" = 0) AND ((("%class%" = 3) OR ("%class%" = 11)) OR ("%class%" = 20))) BEGIN //class = C/D/MO
      	SET "firstdice" = 8
	SET "firstlast" = 9
	SET "firstpostdice" = 2
	SET "seconddice" = 0
	SET "thirddice" = 0
    END
    WHILE (("%firstdice%" = 0) AND (("%class%" = 4) OR ("%class%" = 5))) BEGIN //class = T/B      	SET "firstdice" = 4
	SET "firstdice" = 6
	SET "firstlast" = 10
	SET "firstpostdice" = 1
	SET "seconddice" = 0
	SET "thirddice" = 0
    END
    WHILE (("%firstdice%" = 0) AND ("%class%" = 7)) BEGIN //class = FM
    	SET "firstdice" = 10
	SET "firstlast" = 9
	SET "firstpostdice" = 3
	SET "seconddice" = 1
	SET "secondlast" = 10
	SET "secondpostdice" = 1
	SET "thirddice" = 0
	SET "divide" = 2
    END
    WHILE (("%firstdice%" = 0) AND ("%class%" = 9)) BEGIN //class = FT
  	SET "firstdice" = 10
	SET "firstlast" = 9
	SET "firstpostdice" = 3
	SET "seconddice" = 4
	SET "secondlast" = 10
	SET "secondpostdice" = 2
	SET "thirddice" = 0
	SET "divide" = 2
    END
    WHILE (("%firstdice%" = 0) AND ("%class%" = 8)) BEGIN //class = FC
    	SET "firstdice" = 10
  SET "firstlast" = 9
	SET "firstpostdice" = 3
	SET "seconddice" = 8
	SET "secondlast" = 9
	SET "secondpostdice" = 2
	SET "thirddice" = 0
	SET "divide" = 2
    END
    WHILE (("%firstdice%" = 0) AND ("%class%" = 13)) BEGIN //class = MT
  	SET "firstdice" = 4
	SET "firstlast" = 10
	SET "firstpostdice" = 1
	SET "seconddice" = 6
	SET "secondlast" = 10
	SET "secondpostdice" = 2
	SET "thirddice" = 0
	SET "divide" = 2
    END
    WHILE (("%firstdice%" = 0) AND ("%class%" = 15)) BEGIN //class = CT
  	SET "firstdice" = 8
	SET "firstlast" = 9
	SET "firstpostdice" = 2
	SET "seconddice" = 6
	SET "secondlast" = 10
	SET "secondpostdice" = 2
	SET "thirddice" = 0
	SET "divide" = 2
    END
    WHILE (("%firstdice%" = 0) AND ("%class%" = 14)) BEGIN //class = CM
  	SET "firstdice" = 8
	SET "firstlast" = 9
	SET "firstpostdice" = 2
	SET "seconddice" = 4
	SET "secondlast" = 10
	SET "secondpostdice" = 1
	SET "thirddice" = 0
	SET "divide" = 2
    END
    WHILE (("%firstdice%" = 0) AND ("%class%" = 16)) BEGIN //class = FD
  	SET "firstdice" = 10
	SET "firstlast" = 9
	SET "firstpostdice" = 3
	SET "seconddice" = 8
	SET "secondlast" = 9
	SET "secondpostdice" = 2
	SET "thirddice" = 0
	SET "divide" = 2
    END
    WHILE (("%firstdice%" = 0) AND ("%class%" = 18)) BEGIN //class = CR
  	SET "firstdice" = 8
	SET "firstlast" = 9
	SET "firstpostdice" = 2
	SET "seconddice" = 10
	SET "secondlast" = 9
	SET "secondpostdice" = 3
	SET "thirddice" = 0
	SET "divide" = 2
    END
    WHILE (("%firstdice%" = 0) AND ("%class%" = 10)) BEGIN //class = FMT
  	SET "firstdice" = 10
	SET "firstlast" = 9
	SET "firstpostdice" = 3
	SET "seconddice" = 4
	SET "secondlast" = 10
	SET "secondpostdice" = 1
	SET "thirddice" = 6
	SET "thirdlast" = 10
	SET "thirdpostdice" = 2
	SET "divide" = 3
    END
    WHILE (("%firstdice%" = 0) AND ("%class%" = 17)) BEGIN //class = FMC
    	SET "firstdice" = 10
	SET "firstlast" = 9
	SET "firstpostdice" = 3
	SET "seconddice" = 4
	SET "secondlast" = 10
	SET "secondpostdice" = 1
	SET "thirddice" = 8
	SET "thirdlast" = 9
	SET "thirdpostdice" = 2
	SET "divide" = 3
    END
    //finished setting the dices for single and multi classes)
SET "noloop" = 1
END

//dual classes fixes
SET "noloop" = 0
WHILE (("%race%" = 1) AND (("%noloop%" = 0) AND ((NOT(("%dual1%" BAND 0b1111000) = 0b00000000)) OR (NOT("%dual2%" BAND 0b00000001) = 0b00000000)))) BEGIN  // I'm a dual-class
      SET "divide" = 1
      WHILE (("%noloop%" = 0) AND (("%dual1%" BAND 0b10000000) = 0b10000000)) BEGIN //FD from D
           SET "level1" = ("%level1%" <= "%level2%") ? 0 : ("%level1%" - "%level2%")
           SET "firstlast" = ("%level2%" >= "%firstlast%") ? 0 : ("%firstlast%" - "%level2%")
     SET "noloop" = 1
     //this is easier since D comes always after F in the level list (same for R (last), F (first) and T (last). M and C are trickier
            END

      WHILE (("%noloop%" = 0) AND (("%dual1%" BAND 0b01000000) = 0b01000000)) BEGIN //?T from T;
           SET "level1" = ("%level1%" <= "%level2%") ? 0 : ("%level1%" - "%level2%")
           SET "firstlast" = ("%level2%" >= "%firstlast%") ? 0 : ("%firstlast%" - "%level2%")
     SET "noloop" = 1
           //T is always after all classes he's dualled to
      END

      WHILE (("%noloop%" = 0) AND (("%dual1%" BAND 0b00100000) = 0b00100000)) BEGIN //?C or C? from C
           WHILE (("%noloop%" = 0 ) AND ("%class%" = 8)) BEGIN //FC from C
              SET "level1" = ("%level1%" <= "%level2%") ? 0 : ("%level1%" - "%level2%")
              SET "firstlast" = ("%level2%" >= "%firstlast%") ? 0 : ("%firstlast%" - "%level2%")
        SET "noloop" = 1
          END
           WHILE (("%noloop%" = 0 ) AND (("%class%" = 14) OR ("%class%" = 15))) BEGIN //CM or CT from C
              SET "level2" = ("%level2%" <= "%level1%") ? 0 : ("%level2%" - "%level1%")
              SET "secondlast" = ("%level1%" >= "%secondlast%") ? 0 : ("%secondlast%" - "%level1%")
        SET "noloop" = 1
          END
            SET "noloop" = 1
      END

      WHILE (("%noloop%" = 0) AND (("%dual1%" BAND 0b00010000) = 0b00010000)) BEGIN //?M or M? from M
           WHILE (("%noloop%" = 0 ) AND (("%class%" = 7) OR ("%class%" = 14))) BEGIN //FM or CM from M
              SET "level1" = ("%level1%" <= "%level2%") ? 0 : ("%level1%" - "%level2%")
              SET "firstlast" = ("%level2%" >= "%firstlast%") ? 0 : ("%firstlast%" - "%level2%")
        SET "noloop" = 1
          END
           WHILE (("%noloop%" = 0 ) AND ("%class%" = 13) ) BEGIN //MT from M
              SET "level2" = ("%level2%" <= "%level1%") ? 0 : ("%level2%" - "%level1%")
              SET "secondlast" = ("%level1%" >= "%secondlast%") ? 0 : ("%secondlast%" - "%level1%")
        SET "noloop" = 1
          END
            SET "noloop" = 1
      END

      WHILE (("%noloop%" = 0) AND (("%dual1%" BAND 0b00001000) = 0b00001000)) BEGIN //F? from F           SET "level2" = ("%level2%" <= "%level1%") ? 0 : ("%level2%" - "%level1%")
           SET "level2" = ("%level2%" <= "%level1%") ? 0 : ("%level2%" - "%level1%")
     SET "secondlast" = ("%level1%" >= "%secondlast%") ? 0 : ("%secondlast%" - "%level1%")
     SET "noloop" = 1
          //F is always first
      END

      WHILE (("%noloop%" = 0) AND (("%dual2%" BAND 0b00000001) = 0b00000001)) BEGIN //CR from R
           SET "level1" = ("%level1%" <= "%level2%") ? 0 : ("%level1%" - "%level2%")
           SET "firstlast" = ("%level2%" >= "%firstlast%") ? 0 : ("%firstlast%" - "%level2%")
     SET "noloop" = 1
           //again, R is always after C
      END
      SET "noloop" = 1
END


//non standard class guys haven't already set their dice sizes
   WHILE ("%firstdice%" = 0) BEGIN /*class = not standard, so dice sizes aren't already set; PnP DM's Manual states that HD's are d8's.  */
	WHILE ("%noloop%" = 0) BEGIN
       SET "firstdice" = 8
       SET "firstlast" = 50
       SET "firstpostdice" = 0
       SET "seconddice" = 0
       SET "thirddice" = 0
       SET "noloop" = 1
       SET "divide" = 1
	END
              /*the original code is waay to schizophrenic, in particular many guys have all 3 level 
       fields set, and, if the *real* level is in the second field, I'll use the first, instead.
       Usually, the first is higher, and anyway HP's aren't lowered, only upped, so...*/
    END
SET "noloop" = 0

//actual setting HP's to the max (if current are bigger than theorical max, skip 'em)
WHILE ("%noloop%" = 0) BEGIN
    SET "duehp" = 0
    SET "done1st" = 0
    SET "done2nd" = 0
    SET "done3rd" = 0
    WHILE (("%level1%" <= "%firstlast%") AND ("%done1st%" = 0 )) BEGIN
    	SET "duehp" = ("%duehp%" + ("%level1%" * "%firstdice%"))
    	SET "done1st" = 1
    END
    WHILE (("%level2%" <= "%secondlast%") AND ("%done2nd%" = 0 )) BEGIN
    	SET "duehp" = ("%duehp%" + ("%level2%" * "%seconddice%"))
    	SET "done2nd" = 1
    END
    WHILE (("%level3%" <= "%thirdlast%") AND ("%done3rd%" = 0 )) BEGIN
    	SET "duehp" = ("%duehp%" + ("%level3%" * "%thirddice%"))
    	SET "done3rd" = 1
    END
    WHILE (("%level1%" > "%firstlast%") AND ("%done1st%" = 0 )) BEGIN
    	SET "duehp" = (("%duehp%" + ("%firstlast%" * "%firstdice%")) + ("%firstpostdice%" * ("%level1%" - "%firstlast%")))
    	SET "done1st" = 1
    END
    WHILE (("%level2%" > "%secondlast%") AND ("%done2nd%" = 0 )) BEGIN
    	SET "duehp" = (("%duehp%" + ("%secondlast%" * "%seconddice%")) + ("%secondpostdice%" * ("%level2%" - "%secondlast%")))
    	SET "done2nd" = 1
    END
    WHILE (("%level3%" > "%thirdlast%") AND ("%done3rd%" = 0 )) BEGIN
    	SET "duehp" = (("%duehp%" + ("%thirdlast%" * "%thirddice%")) + ("%thirdpostdice%" * ("%level3%" - "%thirdlast%")))
    	SET "done3rd" = 3
    END
    SET "duehp" = "%duehp%" / "%divide%"
    //done calculating due HP's
    SET "noloop" = 0
    WHILE (("%noloop%" = 0) AND (NOT("%currenthp%" = "%maxhp%"))) BEGIN  //if cre is set to be already hurt, so be it
    	WHILE (("%duehp%" > "%maxhp%") AND ("%noloop%" = 0)) BEGIN      //cre may already have perfect or cheesy HP's
              WRITE_SHORT 0x0026 "%duehp%"
           SET "noloop" = 1
     SET "hpraisedto" = 1 + "%hpraisedto%"
        END
    SET "noloop" = 1
    END
    WHILE (("%noloop%" = 0) AND ("%currenthp%" = "%maxhp%")) BEGIN  //if cre is at 100% health
    	WHILE (("%duehp%" > "%maxhp%") AND ("%noloop%" = 0)) BEGIN      //cre may already have perfect or cheesy HP's
              WRITE_SHORT 0x0026 "%duehp%"
              WRITE_SHORT 0x0024 "%duehp%"
           SET "noloop" = 1
     SET "hpraisedto" = 1 + "%hpraisedto%"
     SET "chpraisedto" = 1 + "%chpraisedto%"
        END
    SET "noloop" = 1
    END
SET "noloop" = 1
END
BUT_ONLY_IF_IT_CHANGES

PRINT "I have raised the Current HP of %chpraisedto% Creatures"
PRINT "I have raised the Max HP of %hpraisedto% Creatures"

Edited by the bigg, 10 June 2004 - 11:45 PM.

Italian users: help test the Stivan NPC!

Author or Co-Author: WeiDU - Widescreen - Generalized Biffing - Refinements - TB#Tweaks - IWD2Tweaks - TB#Characters - Traify Tool - Some mods that I won't mention in public
Maintainer: Semi-Multi Clerics - Nalia Mod - Nvidia Fix
Code dumps: Detect custom secondary types - Stutter Investigator

If possible, send diffs, translations and other contributions using Git.


#5 CamDawg

CamDawg

    ALL GLORY TO THE HYPNOTOAD

  • Modder
  • 1505 posts

Posted 08 July 2004 - 08:52 AM

Thanks the bigg, we've added this to the new v4 release, with a few minor code tweaks. :)

Changes in v4:
  • Added Polish (thanks Evendur) and French (thanks Elgaern the Dragon Slayer) translations.
  • Added Maximum HP For Non-Party-Joinable Creatures component (thanks the bigg)
  • Fixed bug with druids getting HLAs too quickly in Druids Use Cleric Level and Spell Progression component
  • Tightened up code on Universal Clubs component

Why is this Hypnotoad video so popu... ALL GLORY TO THE HYPNOTOAD.
____
The Gibberlings Three - Home of IE Mods

The BG2 Fixpack - All the fixes of Baldurdash, plus a few hundred more. Now available, with more fixes being added in every release.


#6 the bigg

the bigg

    2083 is a prime number.

  • Modder
  • 3331 posts

Posted 09 July 2004 - 12:25 AM

Ehm, sorry, but the changes you've done are to prevent joinable NPCs from achieving perfect HPs, while the scope of my code (at least in my intentions...) was to give perfect HPs to joinable creatures (for example Jaheira gets 20+ HP, and can now rush into melee without drinking sets and sets of Extra Healing Potions...)
Perhaps you could add the same code to the "Perfect HP on level up" component (adding a IF_EVAL "%biography%" > 0 and removing the same check from the actual code, so that joinable NPCs will be updated instead? Those were my intention.. )

Italian users: help test the Stivan NPC!

Author or Co-Author: WeiDU - Widescreen - Generalized Biffing - Refinements - TB#Tweaks - IWD2Tweaks - TB#Characters - Traify Tool - Some mods that I won't mention in public
Maintainer: Semi-Multi Clerics - Nalia Mod - Nvidia Fix
Code dumps: Detect custom secondary types - Stutter Investigator

If possible, send diffs, translations and other contributions using Git.