Skip to content
View in the app

A better way to browse. Learn more.

ResHax

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.
Help us keep the site running.
Zero Tolerance for Disrespect

[Unity modding] Texts Replacement Help (I2Languages Format Type)

Featured Replies

  • Localization

Hello!

My goal is to replace texts in Unity games, no matter if the new text data is smaller or bigger than the original. I start by believing you can "rebuild" the resources file: partial replacement (because of the varied 00s after the file path. See Knowledge section) + pointer edit but no matter what script I do, the game shows no texts! And that drive me insane the more I work on it!

DungeonClawler(Demo)NoTextduetoFileRebuild1.thumb.png.31ce7e1b8ffbead019431b9100070bd4.png

DungeonClawler(Demo)NoTextduetoFileRebuild2.thumb.png.35e7dd3bd8bb3463c5f564d5ac7f6372.png

Replacing texts with smaller one (or space only) through Hex Editing will come out fine (Proven by modding SpookWare and Fishlike, even if the edit is in levelX files). So, it has to be something with pointers (Checksum even!) but where? Hex Edit example:

DungeonClawler(Demo)HexEditTextExample.thumb.png.b68b1d03cac0aa7cc3a89d226a3091aa.png

Notice the space after the new name?

[EDIT] It's possible to make the text a bit longer or shorter but the length of [text + 00s] must be a divisible of 4. If the original text length is 5, the new text should be between 6 and 8. Don't forget to change the text length number! If the text ends with 4 zeroes, the game will crash. (I overlooked this part, this explain why my script didn't crash the game).

UnityGame-HexEditin-Comparaison.thumb.png.1cb614c9eb544a3205365ba341882b54.png

DungeonClawler(Demo)HexEditTextLongerTextLenghNumberExample.thumb.png.f08ea6af69aa7b41ea13d5e3d062b0e1.png

When the text replacement script is finished, we can add new bio or Google Translated text shenanigans!

If you find something, feel free to share!


Python Scripts:

  • Unity Text Extractor Script: Extract all texts data into a txt file for view and modification. Only work with the magic word "I2Languages".

Unity Text Extractor Script.py

  • Unity Text Extractor Selective Script: Same but only take the text blocks of interested for edit. Create a txt file of text paths list you wish to extract.

Unity Text Extractor Selective Script.py

  • Unity Text Replacer Script (Work in progress): This script attempts to replace texts, including editing header and file size number. Use Dungeon Clawler 2024 Demo resources file as base.

Unity Text Replacer Selective Script.py


Knowledge (so far)

UNITY TEXT FORMAT (Little Eudians) (ressource.assets)

4 Bytes = 01 00 00 00
4 Bytes = Number of Something
4 Bytes = 00 00 00 00
4 Bytes = 0B 00 00 00 (Lenght of "I2Languages")
12 Bytes = I2Languages 00
8 Bytes = 00 00 00 00 00 00 00 00
4 Bytes = 01 00 00 00
4 Bytes = Number of Test/Translation Blocks

For [Number of Test/Translation Blocks] times
{
4 Bytes = Number of Languages (Absent on First Block)
20 Bytes = 00s (Absent on First Block)
4 Bytes = Path Name Lenght
X Bytes = Path Name (Has to contain "/", "_" and no Space) 
0 - 15 Bytes = 00 (For completing if the text lengh isn't a divisible of 16) (Unsure)
If the Interger Division of [Total of the two above] / 16 is 0
	{4 Bytes = 00 00 00 00}
4 Bytes = Number of Languages

For (Number of Languages) Times
{
4 Bytes = Lenght of Text
X Bytes =  Text
	[0A are "\n" (Return to Line)]
0-3 Bytes = 00 (For completing if the text lengh isn't a divisble of 4)
}

}

4 Bytes = Number of Languages
24 Bytes = 00s
4 Bytes = 01 00 00 00 / End Point without the App_Name Name
UNITY RESOURCE HEADER (Little Eudian)

Found after the huge chuck of indescribable bytes and 00 00 00 00 at the start

24 Bytes
{
4 Bytes = Pointer Number
4 Bytes = 00 00 00 00
4 Bytes = Pointer (?)
4 Bytes = 00 00 00 00
4 Bytes = Length of a Data (?)
4 Bytes = A Number Maybe File Type?
}

Edited by zigaudrey

Create an account or sign in to comment

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.