Skip to content

Posts from Is it actually possible to create a New Spells Framework?

No ratings yet — be the first to rate!
User Avatar
1 year ago
Auto-translated
We have New Creature Framework - NCF. We have New Artifact Framework - NAF. We have New Hero Classes Framework - NHCF. Is it possible to create a New Spells Framework - NSF? I found similar references in the types for creatures and artifacts. Number of spells: List of spells: Assigned numbers for spells: Does anyone know who created NCF and NAF? Maybe we can contact them...
User Avatar
1 year ago
Auto-translated
Technically speaking, it is possible to add new spell slots, but the problem is that, unlike artifacts and creatures, each new spell would require some unique mechanic within the executable file. At the very least, the only thing I could achieve using new, placeholder spells was to implement their casting and display information in the combat log; no basic settings or even default visuals could be applied to them.
User Avatar
1 year ago
Auto-translated
Anyway, yesterday I found out the following:
Someone named Deflaktor created a patcher that makes changes to the exe.



Then Deflaktor and Magnomagus created some variations of yml files that make edits to specific lines using the patcher.
And as a result, Dredknight took their work and polished it into what we have today: a YML file for expanding creatures, a YML file for expanding artifacts, and a YML file for expanding hero classes.


The YML file for artifacts, for example, looks like this inside:

"Start"
# ----------------------------------------------------
# --------------- Max Artifacts Count ----------------
# ----------------------------------------------------
#
# Changes the amount of available artifacts from 97 to &max_artifact_count
# Credit: Deflaktor
# ----------------------------------------------------
# -------------- Things you may want to modify -----------------
definitions: 
- &max_artifact_count            196
--- # --------------- ORIGINAL PATCH DATA ---------------
group: Original
checkAddress:   44BE7A
checkBytes:     E8 A1 50 BB FF
patchAddress:   44BE7F
originalBytes:  6A 61 8D 44 24 24     # push 61 & lea eax,[esp+24]
patchBytes:     E9 C0 38 BB FF 90     # jmp 00400344 & nop
---
group: Original
patchAddress:   344
originalBytes:  00
patchBytes:     68                             # push
---
group: Original
patchAddress:   345
originalBytes:  00*
valueType:      Integer
patchValue:     *max_artifact_count
---
group: Original
patchAddress:   349
originalBytes:  00*
patchBytes:     8D 44 24 24 E9 33 C7 44 00     # lea eax,[esp+24] & jmp 0093EDD5
---
group: Original
checkAddress:   446C95
checkBytes:     C3 CC CC CC CC CC CC CC CC CC CC B8
patchAddress:   446CA1
valueType:      Integer
originalValue:  97
patchValue:     *max_artifact_count
--- # --------------- QUANTOMAS 3.1j PATCH DATA ---------------
group: Quantomas3.1j
checkAddress:   0053E1CA
checkBytes:     E8 51 22 AC FF
patchAddress:   0053E1CF
originalBytes:  6A 61 8D 44 24 24     # push 61 & lea eax,[esp+24]
patchBytes:     E9 70 15 AC FF 90     # jmp 00400344 & nop
---
group: Quantomas3.1j
patchAddress:   344
originalBytes:  00
patchBytes:     68                             # push
---
group: Quantomas3.1j
patchAddress:   345
originalBytes:  00*
valueType:      Integer
patchValue:     *max_artifact_count
---
group: Quantomas3.1j
patchAddress:   349
originalBytes:  00*
patchBytes:     8D 44 24 24 E9 83 EA 53 00     # lea eax,[esp+24] & jmp 0093EDD5
---
group: Quantomas3.1j
checkAddress:   005393D5
checkBytes:     C3 CC CC CC CC CC CC CC CC CC CC B8
patchAddress:   005393E1
valueType:      Integer
originalValue:  97
patchValue:     *max_artifact_count
--- # --------------- MAP EDITOR EXE 3.1 PATCH DATA ---------------
group: MapEditorOriginal
checkAddress:   8C537A
checkBytes:     E8 E1 CF 73 FF
patchAddress:   8C537F
originalBytes:  6A 61 8D 44 24 24     # push 61 & lea eax,[esp+24]
patchBytes:     E9 C0 A3 73 FF 90     # jmp 00400344 & nop
---
group: MapEditorOriginal
patchAddress:   344
originalBytes:  00
patchBytes:     68                             # push
---
group: MapEditorOriginal
patchAddress:   345
originalBytes:  00*
valueType:      Integer
patchValue:     *max_artifact_count
---
group: MapEditorOriginal
patchAddress:   349
originalBytes:  00*
patchBytes:     8D 44 24 24 E9 33 5C 8C 00     # lea eax,[esp+24] & jmp 00CC5F85
---
group: MapEditorOriginal
checkAddress:   8C05C5
checkBytes:     C3 CC CC CC CC CC CC CC CC CC CC B8
patchAddress:   8C05D1
valueType:      Integer
originalValue:  97
patchValue:     *max_artifact_count

#
#
#
#QAI test patch changing int to double
#patchAddress:   0053E1CF  ## changing int to double
#originalBytes:  6A 7F 8D 44 24 24 50 8D 4C 24 1C 51 68 EC B5 FE 00 8B CE BB 03 00 00 00 E8 A4 EF FF FF EB 02 33 C0 8B C8 E8 69 A1 28 00 F6 C3 02 74 10 8B 54 24 14 52 83 E3 FD E8 27 DA AC FF 83 C4 04 F6 C3 01 74 0D 8B 44 24 20 50 E8 15 DA AC FF 83 C4 04 5F 5E 8B C5 5D 5B 83 C4 1C C3 CC CC CC CC CC CC CC CC
#patchBytes:     68 f4 01 00 00 8D 44 24 24 50 8D 4C 24 1C 51 68 EC B5 FE 00 8B CE BB 03 00 00 00 E8 A1 EF FF FF EB 02 33 C0 8B C8 E8 66 A1 28 00 F6 C3 02 74 10 8B 54 24 14 52 83 E3 FD E8 24 DA AC FF 83 C4 04 F6 C3 01 74 0D 8B 44 24 20 50 E8 12 DA AC FF 83 C4 04 5F 5E 8B C5 5D 5B 83 C4 1C C3 CC CC CC CC CC

## second change is required here at address 005393E1

## h5 ToE offsets are 44BE7F and 446CA1

## editor offsets are 8C537F and 8C05D1
"End"

Dredknight also said that it's not enough to just expand spells, you also need to write their logic. I wrote back to him that he could at least reference an existing Chaos magic spell where the logic already exists, and then rewrite the spell inside with a different damage formula, a different effect, and a different description/name. He replied that it might work.
Let's hope he manages to get something done 😇
User Avatar
1 year ago
Auto-translated
It would be great, actually, even just a decent framework with slot expansion and at least a functional visualizer would be sufficient overall.

Statistics

Welcome our newest member: recijeb