WeiDU koutek - hotová řešení

Vytváření nových modů není tak obtížné, zkuste si to taky.

Moderátor: Razfallow

Odpovědět
Uživatelský avatar
drake127
Sigil Team
Příspěvky: 2358
Registrován: 24.9.2005 22:28
Bydliště: Jihlava, Czech Republic
Kontaktovat uživatele:

WeiDU koutek - hotová řešení

Příspěvek od drake127 »

Jelikož si teď trochu s WeiDU hraju a speciálně při editaci různých herních zdrojů jsem nucen stejné věci dělat vícekrát, udělal jsem si pár šablon, které vykonávají nějaký úkol. A jelikož považuji za velmi moudré je někam zazálohovat (protože můj harddisk není příliš bezpečné místo, většinou mojí vinnou), aby z nich mohli ale také čerpat i ostatní.
Žralok, který štěká, nekouše.
Uživatelský avatar
drake127
Sigil Team
Příspěvky: 2358
Registrován: 24.9.2005 22:28
Bydliště: Jihlava, Czech Republic
Kontaktovat uživatele:

Příspěvek od drake127 »

Změna resistence kouzel na bypass resistance při zachování rozptýlení magie (Dispel Magic):

Kód: Vybrat vše

    READ_LONG  0x64 ExtHeaderOffset
    READ_SHORT 0x68 ExtHeaderCount
    READ_LONG  0x6a EffectOffset
    READ_SHORT 0x70 GlobalEffectCount
    SET EffectCountTotal = GlobalEffectCount
    FOR (i = 0; i < ExtHeaderCount; i += 1)
    BEGIN
        READ_SHORT (ExtHeaderOffset + i * 0x28 + 0x1e) ExtEffectCount
        EffectCountTotal += ExtEffectCount
    END
    FOR (j = 0; j < EffectCountTotal; j += 1)
    BEGIN
        READ_BYTE (EffectOffset + j * 0x30 + 0x0d) EffectResistance
        PATCH_IF (EffectResistance == 1) THEN             // Dispel/Not Bypass Resistance
        BEGIN
            WRITE_BYTE (EffectOffset + j * 0x30 + 0x0d) 3 // Dispel/Bypass Resistance
        END
        PATCH_IF (EffectResistance == 2) THEN             // Not Dispel/Not Bypass Resistance
        BEGIN
            WRITE_BYTE (EffectOffset + j * 0x30 + 0x0d) 0 // Not Dispel/Bypass Resistance
        END
    END
    BUT_ONLY_IF_IT_CHANGES
Naposledy upravil(a) drake127 dne 8.12.2005 20:49, celkem upraveno 1 x.
Žralok, který štěká, nekouše.
Uživatelský avatar
drake127
Sigil Team
Příspěvky: 2358
Registrován: 24.9.2005 22:28
Bydliště: Jihlava, Czech Republic
Kontaktovat uživatele:

Příspěvek od drake127 »

Odstranění globálního efektu z předmětu:

Kód: Vybrat vše

    READ_LONG  0x64 ExtHeaderOffset
    READ_SHORT 0x68 ExtHeaderCount
    READ_LONG  0x6a EffectOffset
    READ_SHORT 0x6e GlobalEffectIndex
    READ_SHORT 0x70 GlobalEffectCount
    FOR (j = GlobalEffectIndex; j < (GlobalEffectCount + GlobalEffectIndex); j += 1)
    BEGIN
        READ_SHORT (EffectOffset + j * 0x30 + 0x00) EffectOpcode
        PATCH_IF (...) THEN
        BEGIN
            DELETE_BYTES (EffectOffset + j * 0x30) 0x30
            SET GlobalEffectCount -= 1
            SET j -= 1
            WRITE_SHORT 0x70 GlobalEffectCount
            FOR (i = 0; i < ExtHeaderCount; i += 1)
            BEGIN
                READ_SHORT (ExtHeaderOffset + i * 0x38 + 0x20) ExtEffectIndex
                PATCH_IF (ExtEffectIndex > j + 1) THEN
                BEGIN
                    WRITE_SHORT (ExtHeaderOffset + i * 0x38 + 0x20) (ExtEffectIndex - 1)
                END
            END
        END
    END
    BUT_ONLY_IF_IT_CHANGES
Naposledy upravil(a) drake127 dne 8.12.2005 20:50, celkem upraveno 1 x.
Žralok, který štěká, nekouše.
Uživatelský avatar
drake127
Sigil Team
Příspěvky: 2358
Registrován: 24.9.2005 22:28
Bydliště: Jihlava, Czech Republic
Kontaktovat uživatele:

Příspěvek od drake127 »

Úprava části skriptu (aniž se musí nahrazovat celý blok):

Kód: Vybrat vše

    DECOMPILE_BCS_TO_BAF
    REPLACE_TEXTUALLY ~...~ ~...~
    COMPILE_BAF_TO_BCS
    BUT_ONLY_IF_IT_CHANGES
Stejně tak úprava části dialogu:

Kód: Vybrat vše

    DECOMPILE_DLG_TO_D
    REPLACE_TEXTUALLY ~...~ ~...~
    COMPILE_D_TO_DLG
    BUT_ONLY_IF_IT_CHANGES
Žralok, který štěká, nekouše.
Uživatelský avatar
drake127
Sigil Team
Příspěvky: 2358
Registrován: 24.9.2005 22:28
Bydliště: Jihlava, Czech Republic
Kontaktovat uživatele:

Příspěvek od drake127 »

Úprava předmětu v inventáři postavy:

Kód: Vybrat vše

    READ_LONG 0x02bc ItemOffset
    READ_LONG 0x02c0 ItemCount
    FOR (i = 0; i < ItemCount; i += 1)
    BEGIN
        READ_ASCII (ItemOffset + i * 0x14 + 0x00) ItemName
        PATCH_IF (NOT ~%ItemName%~ STRING_COMPARE_CASE ~...~) THEN
        BEGIN
            ...
        END
    END
    BUT_ONLY_IF_IT_CHANGES
Naposledy upravil(a) drake127 dne 8.12.2005 20:50, celkem upraveno 1 x.
Žralok, který štěká, nekouše.
Uživatelský avatar
drake127
Sigil Team
Příspěvky: 2358
Registrován: 24.9.2005 22:28
Bydliště: Jihlava, Czech Republic
Kontaktovat uživatele:

Příspěvek od drake127 »

Struktura předmětu (bez algoritmu zpracování):

Kód: Vybrat vše

    READ_LONG  0x08 UName
    READ_LONG  0x0c IName
    READ_ASCII 0x10 ReplacementItem
    READ_LONG  0x18 Flags
    READ_SHORT 0x1c ItemType
    READ_LONG  0x1e Usability
    READ_ASCII 0x22 Animation #2
    READ_BYTE  0x24 MinLevel
    READ_BYTE  0x26 MinStrength
    READ_BYTE  0x28 MinStrengthBonus
    READ_BYTE  0x29 KitUsability_1
    READ_BYTE  0x2a MinIntelligence
    READ_BYTE  0x2b KitUsability_2
    READ_BYTE  0x2c MinDexterity
    READ_BYTE  0x2d KitUsability_3
    READ_BYTE  0x2e MinWisdom
    READ_BYTE  0x2f KitUsability_4
    READ_BYTE  0x30 MinConstitution
    READ_BYTE  0x31 Proficiency
    READ_BYTE  0x32 MinCharisma
    READ_LONG  0x34 Price
    READ_SHORT 0x38 StackAmount
    READ_ASCII 0x3a InventoryIcon
    READ_SHORT 0x42 MinLore
    READ_ASCII 0x44 GroundIcon
    READ_LONG  0x4c Weight
    READ_LONG  0x50 UDescription
    READ_LONG  0x54 IDescription
    READ_ASCII 0x58 DescriptionIcon
    READ_LONG  0x60 Enchantment
    READ_LONG  0x64 ExtHeaderOffset
    READ_SHORT 0x68 ExtHeaderCount
    READ_LONG  0x6a EffectOffset
    READ_SHORT 0x6e GlobalEffectIndex
    READ_SHORT 0x70 GlobalEffectCount
    SET EffectCountTotal = GlobalEffectCount
    FOR (i = 0; i < ExtHeaderCount; i += 1)
    BEGIN
        READ_BYTE  (ExtHeaderOffset + i * 0x38 + 0x00) ExtAttackType
        READ_BYTE  (ExtHeaderOffset + i * 0x38 + 0x01) ExtIdentifyReq
        READ_BYTE  (ExtHeaderOffset + i * 0x38 + 0x02) ExtIconLocation
        READ_ASCII (ExtHeaderOffset + i * 0x38 + 0x04) ExtIcon
        READ_BYTE  (ExtHeaderOffset + i * 0x38 + 0x0c) ExtTargetType
        READ_BYTE  (ExtHeaderOffset + i * 0x38 + 0x0d) ExtTargetNumber
        READ_SHORT (ExtHeaderOffset + i * 0x38 + 0x0e) ExtRange
        READ_SHORT (ExtHeaderOffset + i * 0x38 + 0x10) ExtProjectileType
        READ_SHORT (ExtHeaderOffset + i * 0x38 + 0x12) ExtSpeed
        READ_SHORT (ExtHeaderOffset + i * 0x38 + 0x14) ExtTHAC0Bonus
        READ_SHORT (ExtHeaderOffset + i * 0x38 + 0x16) ExtDiceSides
        READ_SHORT (ExtHeaderOffset + i * 0x38 + 0x18) ExtDiceThrown
        READ_SHORT (ExtHeaderOffset + i * 0x38 + 0x1a) ExtDamageBonus
        READ_SHORT (ExtHeaderOffset + i * 0x38 + 0x1c) ExtDamageType
        READ_SHORT (ExtHeaderOffset + i * 0x38 + 0x1e) ExtEffectCount
        READ_SHORT (ExtHeaderOffset + i * 0x38 + 0x20) ExtEffectIndex
        READ_SHORT (ExtHeaderOffset + i * 0x38 + 0x22) ExtCharges
        READ_BYTE  (ExtHeaderOffset + i * 0x38 + 0x24) ExtChargeDepletion
        READ_BYTE  (ExtHeaderOffset + i * 0x38 + 0x26) ExtSterngthBonus
        READ_BYTE  (ExtHeaderOffset + i * 0x38 + 0x27) ExtRecharge
        READ_SHORT (ExtHeaderOffset + i * 0x38 + 0x2a) ExtProjectileAnimation
        READ_SHORT (ExtHeaderOffset + i * 0x38 + 0x2c) ExtMeeleeAnimation_1
        READ_SHORT (ExtHeaderOffset + i * 0x38 + 0x2e) ExtMeeleeAnimation_2
        READ_SHORT (ExtHeaderOffset + i * 0x38 + 0x30) ExtMeeleeAnimation_3
        READ_SHORT (ExtHeaderOffset + i * 0x38 + 0x32) ExtBowArrow
        READ_SHORT (ExtHeaderOffset + i * 0x38 + 0x34) ExtCrossbowBolt
        READ_SHORT (ExtHeaderOffset + i * 0x38 + 0x36) ExtMiscProjectile
        EffectCountTotal += ExtEffectCount
        FOR (j = ExtEffectIndex; j < ExtEffectIndex + ExtEffectCount; j += 1) // List local effects only
        BEGIN
            READ_SHORT (EffectOffset + j * 0x30 + 0x00) EffectOpcode
            READ_BYTE  (EffectOffset + j * 0x30 + 0x02) EffectTarget
            READ_BYTE  (EffectOffset + j * 0x30 + 0x03) EffectPower
            READ_LONG  (EffectOffset + j * 0x30 + 0x04) EffectParam1
            READ_LONG  (EffectOffset + j * 0x30 + 0x08) EffectParam2
            READ_BYTE  (EffectOffset + j * 0x30 + 0x0c) EffectTiming
            READ_BYTE  (EffectOffset + j * 0x30 + 0x0d) EffectResistance
            READ_LONG  (EffectOffset + j * 0x30 + 0x0e) EffectDuration
            READ_BYTE  (EffectOffset + j * 0x30 + 0x12) EffectProb1
            READ_BYTE  (EffectOffset + j * 0x30 + 0x13) EffectProb2
            READ_ASCII (EffectOffset + j * 0x30 + 0x14) EffectResource
            READ_LONG  (EffectOffset + j * 0x30 + 0x1c) EffectDiceThrown
            READ_LONG  (EffectOffset + j * 0x30 + 0x20) EffectDiceSides
            READ_LONG  (EffectOffset + j * 0x30 + 0x24) EffectSavingThrow
            READ_LONG  (EffectOffset + j * 0x30 + 0x28) EffectSavingThrowBonus
        END
    END
    FOR (j = 0; j < EffectCountTotal; j += 1) // List all effects
//  FOR (j = GlobalEffectIndex; j <  GlobalEffectIndex + GlobalEffectCount; j += 1) // List global effects only
    BEGIN
        READ_SHORT (EffectOffset + j * 0x30 + 0x00) EffectOpcode
        READ_BYTE  (EffectOffset + j * 0x30 + 0x02) EffectTarget
        READ_BYTE  (EffectOffset + j * 0x30 + 0x03) EffectPower
        READ_LONG  (EffectOffset + j * 0x30 + 0x04) EffectParam1
        READ_LONG  (EffectOffset + j * 0x30 + 0x08) EffectParam2
        READ_BYTE  (EffectOffset + j * 0x30 + 0x0c) EffectTiming
        READ_BYTE  (EffectOffset + j * 0x30 + 0x0d) EffectResistance
        READ_LONG  (EffectOffset + j * 0x30 + 0x0e) EffectDuration
        READ_BYTE  (EffectOffset + j * 0x30 + 0x12) EffectProb1
        READ_BYTE  (EffectOffset + j * 0x30 + 0x13) EffectProb2
        READ_ASCII (EffectOffset + j * 0x30 + 0x14) EffectResource
        READ_LONG  (EffectOffset + j * 0x30 + 0x1c) EffectDiceThrown
        READ_LONG  (EffectOffset + j * 0x30 + 0x20) EffectDiceSides
        READ_LONG  (EffectOffset + j * 0x30 + 0x24) EffectSavingThrow
        READ_LONG  (EffectOffset + j * 0x30 + 0x28) EffectSavingThrowBonus
    END
    BUT_ONLY_IF_IT_CHANGES
Naposledy upravil(a) drake127 dne 8.12.2005 20:52, celkem upraveno 3 x.
Žralok, který štěká, nekouše.
Uživatelský avatar
drake127
Sigil Team
Příspěvky: 2358
Registrován: 24.9.2005 22:28
Bydliště: Jihlava, Czech Republic
Kontaktovat uživatele:

Příspěvek od drake127 »

Přidání globálního efektu k předmětu:

Kód: Vybrat vše

    READ_LONG  0x64 ExtHeaderOffset
    READ_SHORT 0x68 ExtHeaderCount
    READ_LONG  0x6a EffectOffset
    READ_SHORT 0x6e GlobalEffectIndex
    READ_SHORT 0x70 GlobalEffectCount
    j = GlobalEffectIndex + GlobalEffectCount
    INSERT_BYTES (EffectOffset + j * 0x30) 0x30
    WRITE_SHORT (EffectOffset + j * 0x30 + 0x00) ... // EffectOpcode
    WRITE_BYTE  (EffectOffset + j * 0x30 + 0x02) ... // EffectTarget
    WRITE_BYTE  (EffectOffset + j * 0x30 + 0x03) ... // EffectPower
    WRITE_LONG  (EffectOffset + j * 0x30 + 0x04) ... // EffectParam1
    WRITE_LONG  (EffectOffset + j * 0x30 + 0x08) ... // EffectParam2
    WRITE_BYTE  (EffectOffset + j * 0x30 + 0x0c) ... // EffectTiming
    WRITE_BYTE  (EffectOffset + j * 0x30 + 0x0d) ... // EffectResistance
    WRITE_LONG  (EffectOffset + j * 0x30 + 0x0e) ... // EffectDuration
    WRITE_BYTE  (EffectOffset + j * 0x30 + 0x12) ... // EffectProb1
    WRITE_BYTE  (EffectOffset + j * 0x30 + 0x13) ... // EffectProb2
    WRITE_ASCII (EffectOffset + j * 0x30 + 0x14) ... // EffectResource
    WRITE_LONG  (EffectOffset + j * 0x30 + 0x1c) ... // EffectDiceThrown
    WRITE_LONG  (EffectOffset + j * 0x30 + 0x20) ... // EffectDiceSides
    WRITE_LONG  (EffectOffset + j * 0x30 + 0x24) ... // EffectSavingThrow
    WRITE_LONG  (EffectOffset + j * 0x30 + 0x28) ... // EffectSavingThrowBonus
    WRITE_SHORT 0x70 (GlobalEffectCount + 1)
    FOR (i = 0; i < ExtHeaderCount; i += 1)
    BEGIN
        READ_SHORT (ExtHeaderOffset + i * 0x38 + 0x20) ExtEffectIndex
        PATCH_IF (ExtEffectIndex >= (GlobalEffectIndex + GlobalEffectCount)) THEN
        BEGIN
            WRITE_SHORT (ExtHeaderOffset + i * 0x38 + 0x20) (ExtEffectIndex + 1)
        END
    END
Žralok, který štěká, nekouše.
Uživatelský avatar
drake127
Sigil Team
Příspěvky: 2358
Registrován: 24.9.2005 22:28
Bydliště: Jihlava, Czech Republic
Kontaktovat uživatele:

Příspěvek od drake127 »

Přidání lokálního efektu do kouzla (vlastní efekt je v externím souboru, ale není problém nahradit INSERT_FILE za INSERT_BYTES...):

Kód: Vybrat vše

    READ_LONG  0x64 ExtHeaderOffset
    READ_SHORT 0x68 ExtHeaderCount
    READ_LONG  0x6a EffectOffset
    READ_SHORT 0x6e GlobalEffectIndex
    READ_SHORT 0x70 GlobalEffectCount
    FOR (i = 0; i < ExtHeaderCount; i += 1)
    BEGIN
        READ_SHORT (ExtHeaderOffset + i * 0x28 + 0x1e) ExtEffectCount
        READ_SHORT (ExtHeaderOffset + i * 0x28 + 0x20) ExtEffectIndex
        INSERT_FILE (EffectOffset + (ExtEffectIndex + ExtEffectCount) * 0x30) ~...~
        WRITE_SHORT (ExtHeaderOffset + i * 0x28 + 0x1e) (ExtEffectCount + 1)
        PATCH_IF (GlobalEffectIndex >= (ExtEffectIndex + ExtEffectCount)) THEN
        BEGIN
            WRITE_SHORT 0x70 (GlobalEffectIndex + 1)
        END
        FOR (k = 0; k < ExtHeaderCount; k += 1)
        BEGIN
            READ_SHORT (ExtHeaderOffset + k * 0x28 + 0x20) _ExtEffectIndex_
            PATCH_IF (_ExtEffectIndex_ >= (ExtEffectIndex + ExtEffectCount)) THEN
            BEGIN
                WRITE_SHORT (ExtHeaderOffset + k * 0x28 + 0x20) (_ExtEffectIndex_ + 1)
            END
        END
    END
Žralok, který štěká, nekouše.
Odpovědět

Zpět na „Infinity Engine“