Newbie Spellweaver
- Joined
- Feb 19, 2025
- Messages
- 8
- Reaction score
- 15
Hi everyone,
A few months ago I announced that I had started recreating the game 100% from scratch in the Unity engine, reusing only the game's models.
My workflow for replicating Talisman's graphics without wasting too much time was based on "ripping" the client models; basically, it involves intercepting the rendering of what I see with the client open, taking it to Blender, and rearranging bugs, cutting out models, and getting it ready to use in the engine. In a way, it was faster than remodeling everything from scratch.
(It works well, but it still made/makes me waste a lot of time in Blender.)
[Back then, I posted my progress here.]
The creator of a server I play on (I won’t mention the name to preserve his DM) posted in his group that he managed to convert EVA into OBJ. He cannot share it because it is his work, which I understand and respect.
Here is a sample from him:
With only what I saw in 2 hours, I created my own version with extremely superficial knowledge of the existing private files [.EVA .EVS .EVM .DDS and other stuffs] (even though I am rebuilding the game in Unity, the only thing necessary to know is how the gameplay works in order to replicate the idea inside the engine).
Inspired by what I saw in those videos about EVA to OBJ, here is what I managed to achieve:
I have been reverse engineering Talisman Online model files with help from **OpenAI Codex** as a coding assistant. I wanted to share the current state because I think it may be useful for other people working on `.eva`, `.evs`, and related files.
My progress:
- yes, `.eva` can already be converted to `OBJ`
- weapons are working well now
- at least one mount exports in a visually coherent way
- humanoid monsters and player/class-style actors are still not solved
Current reading of the formats
My current operational reading is:
- `.eva` = actor/container
- `.evs` = skinned mesh / geometry
- `.evm` = material / texture remap
- `EV_EffectEmitter` = effect textures, not the main mesh texture
Results that already work
1. Weapons
I already have a Python script that converts weapon `.eva` files to:
- `OBJ`
- `MTL`
- extracted texture as `PNG`
Validated example:
2. Mounts
I also got a good result with:
At the moment, this is my best non-weapon result. It exports to a visually coherent textured `OBJ`.
Partial or failed results:
Monsters with "Humanoid" aspects and other versions.
Some tested examples:
- `mon014_e.evs`
- `mon120.eva`
- `mon110.eva`
- `ride001.eva`
- `mon191.eva`
The common problem is that the texture mapping can look right, but the geometry comes out:
- collapsed
- stretched
- twisted
- or semantically wrong even when local triangle metrics look good
So the main blocker now seems to be correct decoding of `EV_SkelSkin`, especially for:
- humanoids
- some monsters
- multi-part actors
Important extra finding
Some `.eva` files contain **multiple `EV_SkelSkin` sections in the same actor**.
For example:
- `pf_waiting.eva`
- `mon191.eva`
So exporting only the first section is not enough in some cases. Because of that, I wrote a second exporter that combines multiple internal skinned sections into one `OBJ`.
Technical hypotheses for the broken cases
At this point I think the remaining problem is one or more of these:
- different vertex stride/layout by family
- joint remap or bone palette
- bind pose / inverse bind handling
- local vs global transform mismatch
- incomplete combination between `.eva` and external `.evs`
Translating: I do not have in-depth knowledge about the game files, I do not know if a .EVA alone already has all the information included or if it pulls, reuses, or inherits some things from already existing monsters and I may have to find everything that that EVA pulls or inherits to gather everything and make it make sense, I am still kind of lost in this.
Attached package
I am attaching an organized ZIP so anyone can download it and understand the current state quickly:
- `
This package includes:
- Python scripts
- notes and handoff docs
- initial setup instructions
- exported examples
- a short AI-friendly context pack for Codex, Claude Code, or another coding agent
Contents:
Best entry point:
1. docs/SETUP.md
2. docs/AI_START_HERE.md
3. docs/reverse_engineering_handoff.md
Main examples:
- weapon success: `examples/success/iwfb05/`
- mount success: `examples/success/ride021_1/`
- partial mount: `examples/partial/ride001/`
- useful broken case: `examples/failure/mon110/`
Minimum commands
Weapon:
Working mount:
Counter example mount:
Monster census:
Manual hypothesis round:
Initial setup to reproduce the environment
Base tools:
1. VS Code
-
2. Python 3
-
3. Node.js LTS
-
Current required Python dependency:
- Codex overview:
- Codex docs:
- Codex CLI login:
Windows note:
- I built this workspace on Windows PowerShell
- the official Codex docs also provide a WSL path for better performance on Windows when needed
Recommended AI workflow
For anyone continuing this with an AI, this is the workflow I am using:
1. ask the AI to read `AI_START_HERE.md`
2. ask for a plan before any edits
3. review the plan
4. only then ask it to implement
Suggested short prompt:
What I would like community help with:
If someone is already converting everything successfully, or the vast majority, they could inform the path they are following, tips, etc. In any case, if I invest a few days it will be inevitable and I will eventually manage to do everything successfully.
If anyone knows details about `EV_SkelSkin`, especially any of these points, that would help a lot:
- local joint palette / bone map
- joint bias or remap rules
- bind pose / inverse bind data
- family-specific layout differences
- whether some actors require extra files beyond the obvious `.eva/.evs/.evm`
Status summary:
- weapons: working
- at least one mount: working
- humanoid monsters: not yet
- animation: still experimental
- main blocker: `EV_SkelSkin`
ATTENTION, you need to run this inside the folder of a clean client.
A few months ago I announced that I had started recreating the game 100% from scratch in the Unity engine, reusing only the game's models.
My workflow for replicating Talisman's graphics without wasting too much time was based on "ripping" the client models; basically, it involves intercepting the rendering of what I see with the client open, taking it to Blender, and rearranging bugs, cutting out models, and getting it ready to use in the engine. In a way, it was faster than remodeling everything from scratch.
Code:
Extract > Blender adjustments > Unity Engine
[Back then, I posted my progress here.]
The creator of a server I play on (I won’t mention the name to preserve his DM) posted in his group that he managed to convert EVA into OBJ. He cannot share it because it is his work, which I understand and respect.
Here is a sample from him:
With only what I saw in 2 hours, I created my own version with extremely superficial knowledge of the existing private files [.EVA .EVS .EVM .DDS and other stuffs] (even though I am rebuilding the game in Unity, the only thing necessary to know is how the gameplay works in order to replicate the idea inside the engine).
Inspired by what I saw in those videos about EVA to OBJ, here is what I managed to achieve:
I have been reverse engineering Talisman Online model files with help from **OpenAI Codex** as a coding assistant. I wanted to share the current state because I think it may be useful for other people working on `.eva`, `.evs`, and related files.
My progress:
- yes, `.eva` can already be converted to `OBJ`
- weapons are working well now
- at least one mount exports in a visually coherent way
- humanoid monsters and player/class-style actors are still not solved
Current reading of the formats
My current operational reading is:
- `.eva` = actor/container
- `.evs` = skinned mesh / geometry
- `.evm` = material / texture remap
- `EV_EffectEmitter` = effect textures, not the main mesh texture
Results that already work
1. Weapons
I already have a Python script that converts weapon `.eva` files to:
- `OBJ`
- `MTL`
- extracted texture as `PNG`
Validated example:
This case opens with the texture applied correctly.- `iwfb05.eva`
2. Mounts
I also got a good result with:
- `ride021_1.eva`
At the moment, this is my best non-weapon result. It exports to a visually coherent textured `OBJ`.
Monsters with "Humanoid" aspects and other versions.
Some tested examples:
- `mon014_e.evs`
- `mon120.eva`
- `mon110.eva`
- `ride001.eva`
- `mon191.eva`
The common problem is that the texture mapping can look right, but the geometry comes out:
- collapsed
- stretched
- twisted
- or semantically wrong even when local triangle metrics look good
So the main blocker now seems to be correct decoding of `EV_SkelSkin`, especially for:
- humanoids
- some monsters
- multi-part actors
Important extra finding
Some `.eva` files contain **multiple `EV_SkelSkin` sections in the same actor**.
For example:
- `pf_waiting.eva`
- `mon191.eva`
So exporting only the first section is not enough in some cases. Because of that, I wrote a second exporter that combines multiple internal skinned sections into one `OBJ`.
Technical hypotheses for the broken cases
At this point I think the remaining problem is one or more of these:
- different vertex stride/layout by family
- joint remap or bone palette
- bind pose / inverse bind handling
- local vs global transform mismatch
- incomplete combination between `.eva` and external `.evs`
Translating: I do not have in-depth knowledge about the game files, I do not know if a .EVA alone already has all the information included or if it pulls, reuses, or inherits some things from already existing monsters and I may have to find everything that that EVA pulls or inherits to gather everything and make it make sense, I am still kind of lost in this.
Attached package
I am attaching an organized ZIP so anyone can download it and understand the current state quickly:
- `
To view the content, you need to sign in or register
`This package includes:
- Python scripts
- notes and handoff docs
- initial setup instructions
- exported examples
- a short AI-friendly context pack for Codex, Claude Code, or another coding agent
Contents:
setup, handoff notes, exporter notes, and the forum post draft- `docs/`
Python exporters and research tools- `scripts/`
working, partial, and failing export examples- `examples/`
asset census and auto-round summary- `research/`
Best entry point:
1. docs/SETUP.md
2. docs/AI_START_HERE.md
3. docs/reverse_engineering_handoff.md
Main examples:
- weapon success: `examples/success/iwfb05/`
- mount success: `examples/success/ride021_1/`
- partial mount: `examples/partial/ride001/`
- useful broken case: `examples/failure/mon110/`
Weapon:
python scripts/eva_to_obj.py model/actor/iwfb05.eva
Working mount:
python scripts/composite_actor_to_obj.py model/actor/ride021_1.eva
Counter example mount:
python scripts/composite_actor_to_obj.py model/actor/ride001.eva
python scripts/composite_actor_to_obj.py model/actor/ride001.eva --pose-mode bind
Monster census:
python scripts/monster_research.py census
python scripts/monster_research.py auto
Manual hypothesis round:
python scripts/monster_research.py run model/actor/mon110.eva
Initial setup to reproduce the environment
Base tools:
1. VS Code
-
To view the content, you need to sign in or register
2. Python 3
-
To view the content, you need to sign in or register
3. Node.js LTS
-
To view the content, you need to sign in or register
Current required Python dependency:
Official links used for Codex setup:- `Pillow`
- Codex overview:
To view the content, you need to sign in or register
- Codex docs:
To view the content, you need to sign in or register
- Codex CLI login:
To view the content, you need to sign in or register
Windows note:
- I built this workspace on Windows PowerShell
- the official Codex docs also provide a WSL path for better performance on Windows when needed
Recommended AI workflow
For anyone continuing this with an AI, this is the workflow I am using:
1. ask the AI to read `AI_START_HERE.md`
2. ask for a plan before any edits
3. review the plan
4. only then ask it to implement
Suggested short prompt:
Read AI_START_HERE.md and reverse_engineering_handoff.md first.
Summarize the current state, propose a step-by-step plan, and wait for approval before editing files.
What I would like community help with:
If someone is already converting everything successfully, or the vast majority, they could inform the path they are following, tips, etc. In any case, if I invest a few days it will be inevitable and I will eventually manage to do everything successfully.
If anyone knows details about `EV_SkelSkin`, especially any of these points, that would help a lot:
- local joint palette / bone map
- joint bias or remap rules
- bind pose / inverse bind data
- family-specific layout differences
- whether some actors require extra files beyond the obvious `.eva/.evs/.evm`
Status summary:
- weapons: working
- at least one mount: working
- humanoid monsters: not yet
- animation: still experimental
- main blocker: `EV_SkelSkin`

