WeiDU koutek - hotová řešení
Moderátor: Razfallow
- 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í
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.
- drake127
- Sigil Team
- Příspěvky: 2358
- Registrován: 24.9.2005 22:28
- Bydliště: Jihlava, Czech Republic
- Kontaktovat uživatele:
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.
- drake127
- Sigil Team
- Příspěvky: 2358
- Registrován: 24.9.2005 22:28
- Bydliště: Jihlava, Czech Republic
- Kontaktovat uživatele:
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.
- drake127
- Sigil Team
- Příspěvky: 2358
- Registrován: 24.9.2005 22:28
- Bydliště: Jihlava, Czech Republic
- Kontaktovat uživatele:
Úprava části skriptu (aniž se musí nahrazovat celý blok):
Stejně tak úprava části dialogu:
Kód: Vybrat vše
DECOMPILE_BCS_TO_BAF
REPLACE_TEXTUALLY ~...~ ~...~
COMPILE_BAF_TO_BCS
BUT_ONLY_IF_IT_CHANGES
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.
- drake127
- Sigil Team
- Příspěvky: 2358
- Registrován: 24.9.2005 22:28
- Bydliště: Jihlava, Czech Republic
- Kontaktovat uživatele:
Ú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.
- drake127
- Sigil Team
- Příspěvky: 2358
- Registrován: 24.9.2005 22:28
- Bydliště: Jihlava, Czech Republic
- Kontaktovat uživatele:
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.
- drake127
- Sigil Team
- Příspěvky: 2358
- Registrován: 24.9.2005 22:28
- Bydliště: Jihlava, Czech Republic
- Kontaktovat uživatele:
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.
- drake127
- Sigil Team
- Příspěvky: 2358
- Registrován: 24.9.2005 22:28
- Bydliště: Jihlava, Czech Republic
- Kontaktovat uživatele:
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.