|
| 1 | +--- |
| 2 | +title: Otherworld Legends - Modding Tutorial |
| 3 | +published: 2025-05-15 |
| 4 | +description: 'Modding tutorial for Steam game Otherworld Legends.' |
| 5 | +image: '' |
| 6 | +tags: [Game] |
| 7 | +category: Tutorial |
| 8 | +draft: false |
| 9 | +lang: en # Set only if the post's language differs from the site's language in `config.ts` |
| 10 | +--- |
| 11 | + |
| 12 | +[Original tutorial](https://b23.tv/IkX17vZ) (Chinese) written by 咖喱猫扒饭 on Bilibili. |
| 13 | + |
| 14 | +🌟 中文教程点击[此处](TODO: /README_中文.md)。 |
| 15 | + |
| 16 | +This modding tutorial is intended only for Steam version Otherworld Legends. If you are targeting Android, you will need |
| 17 | +to do a few additional steps to deal with apk. I won't do this unless someone requests it. |
| 18 | + |
| 19 | +Author: Kolyn090 |
| 20 | + |
| 21 | +Game version used in this tutorial: v2.9.1 |
| 22 | + |
| 23 | +Windows x64 |
| 24 | + |
| 25 | +Date: 5/15/2025 |
| 26 | + |
| 27 | +⚡ **IMPORTANT**: Modding comes with unknown risks, including potential game |
| 28 | +instability, corrupted save files, compatibility issues, and even security |
| 29 | +vulnerabilities. Always back up your game files and proceed with caution. |
| 30 | +Proceed at your own risk – I can't take responsibility if things go sideways. |
| 31 | + |
| 32 | +# Step 1️⃣ |
| 33 | +First, get AssetStudio.net6.v0.16.47 from [AssetStudio](https://github.com/Perfare/AssetStudio/releases). |
| 34 | +Also install [.NET 6.0](https://dotnet.microsoft.com/en-us/download/dotnet/6.0) |
| 35 | +into your PC. |
| 36 | + |
| 37 | +Next, get the eight release of [UABEA](https://github.com/nesrak1/UABEA/releases) and get |
| 38 | +[Visual Studio 2022 IDE](https://visualstudio.microsoft.com/vs/) the Community version. |
| 39 | +On your PC search bar, type "Visual Studio Installer" and open it. |
| 40 | +Under Installed, you should see Visual Studio Community 2022. Click Modify. |
| 41 | +Enter "Visual C++" in Individual components. You should see a component |
| 42 | +called C++ 2022 Redistributed Update. Download and install that. Close your Visual |
| 43 | +Studio Installer and reboot your PC. |
| 44 | + |
| 45 | +Also, you are going to need [AddressablesTools](https://github.com/nesrak1/AddressablesTools/releases). |
| 46 | +Choose Examples release 2. After that download and install [.NET 8.0](https://github.com/nesrak1/AddressablesTools/releases). |
| 47 | + |
| 48 | +# Step 2️⃣ |
| 49 | +Navigate to the Steam folder where the game is stored. For example: |
| 50 | +``` |
| 51 | +Local Disk (C:)/Program Files (x86)/Steam/steamapps/common/Otherworld Legends |
| 52 | +``` |
| 53 | + |
| 54 | +<img |
| 55 | + src="/marblestack/imgs/aa/a/game_folder.png" |
| 56 | + width="300" |
| 57 | + style="display:block; margin: 0 auto;" |
| 58 | + alt="game_folder" |
| 59 | +/> |
| 60 | + |
| 61 | +The key is that you should see the `.exe` of playable game once you redirect to this folder |
| 62 | +but in this case we are interested in the Otherworld Legends_Data folder (which should be in the |
| 63 | +same directory as the game). |
| 64 | + |
| 65 | +Open Otherworld Legends_Data -> SteamingAssets -> aa -> StandaloneWindows64 |
| 66 | + |
| 67 | +Here is the collection of replaceable game assets. E.g. if you want to change the skin of one of the |
| 68 | +heroes, open spriteassetgroup_assets_assets -> needdynamicloadresources -> spritereference. |
| 69 | + |
| 70 | +I will stick with changing hero skin in the rest of the tutorial but you should be able to adapt the knowledge |
| 71 | +to other types of asset as well. |
| 72 | + |
| 73 | +<img |
| 74 | + src="/marblestack/imgs/aa/a/spritereference_unit_hero.png" |
| 75 | + width="300" |
| 76 | + style="display:block; margin: 0 auto;" |
| 77 | + alt="spritereference_unit_hero" |
| 78 | +/> |
| 79 | + |
| 80 | +Search "unit_hero" in File Explorer. You should see many `BUNDLE` files. |
| 81 | +Keep in mind that the hero's internal name in the game's code may differ |
| 82 | +from their display name in the game. For example. Quan Huying is identified by |
| 83 | +quanhuying while Ginzo is identified by seebee. But don't worry, we can apply |
| 84 | +AssetStudio to see the underlying assets. |
| 85 | + |
| 86 | +# Step 3️⃣ |
| 87 | + |
| 88 | +Extract AssetStudio. Locate `AssetStudioGUI.exe` and run it. |
| 89 | +Click File -> Load file. For the sake of this tutorial, I will use Ginzo |
| 90 | +as example. In folder spritereference, search for unit_hero_seebee. |
| 91 | +Choose the top search result (should be Ginzo's default skin). Open the |
| 92 | +asset file in AssetStudio. |
| 93 | + |
| 94 | +<img |
| 95 | + src="/marblestack/imgs/aa/a/unit_hero_seebee.png" |
| 96 | + width="300" |
| 97 | + style="display:block; margin: 0 auto;" |
| 98 | + alt="unit_hero_seebee" |
| 99 | +/> |
| 100 | + |
| 101 | +In AssetStudio's toolbar panel, locate Asset List. You should now see Ginzo's |
| 102 | +Sprites (shown in Preview). However, our main focus here is the file with |
| 103 | +Type of Texture2D. It's called unit_hero_seebee. Select the file, in toolbar, |
| 104 | +locate Export -> Selected assets. Save the Texture2D to your PC. Close AssetStudio. |
| 105 | + |
| 106 | +<img |
| 107 | + src="/marblestack/imgs/aa/a/asset_studio_seebee.png" |
| 108 | + width="300" |
| 109 | + style="display:block; margin: 0 auto;" |
| 110 | + alt="asset_studio_seebee" |
| 111 | +/> |
| 112 | + |
| 113 | +In the exported Texture2D folder, you should see a `.png` inside. Modify it |
| 114 | +using a pixel art editor software such as Aesprite or docpict, etc. Save your work |
| 115 | +as `.png` as well. |
| 116 | + |
| 117 | +<img |
| 118 | + src="/marblestack/imgs/aa/a/aseprite_seebee_example.png" |
| 119 | + width="300" |
| 120 | + style="display:block; margin: 0 auto;" |
| 121 | + alt="aseprite_seebee_example" |
| 122 | +/> |
| 123 | + |
| 124 | +# Step 4️⃣ |
| 125 | + |
| 126 | +Now let's swap game assets. Extract UABEA and locate `UABEAvalonia.exe` and open it. |
| 127 | +Click File -> Open. -> Locate the unit_hero_seebee file from earlier and open it. |
| 128 | +You should see a popup window. Choose Memory. Now you should see everything loaded into the |
| 129 | +software. Here we are only interested in the file with Type being Texture2D. Enlarger |
| 130 | +the window to see file Type. |
| 131 | + |
| 132 | +<img |
| 133 | + src="/marblestack/imgs/aa/a/uabea_assets_info.png" |
| 134 | + width="300" |
| 135 | + style="display:block; margin: 0 auto;" |
| 136 | + alt="uabea_assets_info" |
| 137 | +/> |
| 138 | + |
| 139 | +<img |
| 140 | + src="/marblestack/imgs/aa/a/replace_texture.png" |
| 141 | + width="300" |
| 142 | + style="display:block; margin: 0 auto;" |
| 143 | + alt="replace_texture" |
| 144 | +/> |
| 145 | + |
| 146 | +Open and select that file. On the toolbar to the right, find Plugins -> Edit texture -> Ok. |
| 147 | +Click the Load button and locate your modified version (`.png`) to replace it. |
| 148 | +Click Save. In the Assets Info window, also do File -> Save. In the UABEA window, also |
| 149 | +do File -> Save. Now you can close UABEA. |
| 150 | + |
| 151 | +# Step 5️⃣ |
| 152 | + |
| 153 | +Extract addrtool-example-windows. Open and find `Example.exe`. Make a note on the |
| 154 | +location of this program. For example |
| 155 | + |
| 156 | +```txt |
| 157 | +"C:\Users\kolynlin\Downloads\AddrTool\Example.exe" |
| 158 | +``` |
| 159 | + |
| 160 | +Next look catelog.json. On my PC, it's located at |
| 161 | + |
| 162 | +```txt |
| 163 | +"C:\Program Files (x86)\Steam\steamapps\common\Otherworld Legends\Otherworld Legends_Data\StreamingAssets\aa\catalog.json" |
| 164 | +``` |
| 165 | + |
| 166 | +Confirm the existence of this file and record yours. |
| 167 | + |
| 168 | +After you have recorded those two, open up Command Prompt (search it on your PC). |
| 169 | +Enter the following command (⚠️This is mine. Remember to change to yours) |
| 170 | + |
| 171 | +```txt |
| 172 | +"C:\Users\kolynlin\Downloads\AddrTool\Example.exe" patchcrc "C:\Program Files (x86)\Steam\steamapps\common\Otherworld Legends\Otherworld Legends_Data\StreamingAssets\aa\catalog.json" |
| 173 | +``` |
| 174 | + |
| 175 | +<img |
| 176 | + src="/marblestack/imgs/aa/a/command_prompt.png" |
| 177 | + width="300" |
| 178 | + style="display:block; margin: 0 auto;" |
| 179 | + alt="command_prompt" |
| 180 | +/> |
| 181 | + |
| 182 | +:::note[HOORAY] |
| 183 | +🎉 That's all for modifying a hero's skin. Have fun with it. |
| 184 | +::: |
| 185 | + |
| 186 | +<img |
| 187 | + src="/marblestack/imgs/aa/a/golden_ginzo.png" |
| 188 | + width="300" |
| 189 | + style="display:block; margin: 0 auto;" |
| 190 | + alt="golden_ginzo" |
| 191 | +/> |
| 192 | + |
| 193 | +--- |
| 194 | + |
| 195 | +Permission granted by 咖喱猫扒饭. |
| 196 | + |
| 197 | +<br> |
| 198 | +<br> |
| 199 | + |
| 200 | +💗 If you liked this blog, consider [following me on GitHub](https://github.com/Kolyn090/). |
| 201 | + |
| 202 | +<br> |
| 203 | +<br> |
| 204 | + |
| 205 | +👾 Happy Gaming 👾 |
0 commit comments