About this mod
Tool to replace any sleeve, card art, icon, home art and most fields in the game with any image you want through a simple User Interface. Also able to swap mates and field assets.
- Requirements
- Permissions and credits
- Mirrors
- Changelogs
After downloading the mod from here or GitHub, start "Floowandereeze & Modding.exe" found in the "Floowandereeze & Modding" folder.
Then select your game directory by informing it's folder after pressing the first button. If the given folder is correct, the game's sleeves should appear as in the example bellow:
Press the "Replace" button to replace the sleeve with your image (REPLACEMENT CANNOT BE REVERSED):
That's it, the sleeve should be already modded in-game, remember to make a desktop shortcut to access the tool easily.
To search for a specific card/archetype, write it's name in the combo-box field and open the list, it should be filtered with relevant results if you typed it correctly.
Works exactly as sleeve replacement does but there is an added option to apply a filter on top of your image to highlight zone placement.
The extraction option will extract the image used by the game so to use it as a backup you need to either crop it or replace the asset directly.
Field Filter Editing:
There are two files in the app's main folder: "base.png" and "base_inv.png" which are overlaid on the image to be used, editing these images will change the resulting filter accordingly. There are a few caveats to editing these files, which are the reason this functionality isn't in the app itself:
- The edited filter will be lost if a backup is not generated before an app update, as the original images would overwrite the edited ones;
- As the filter image is simply pasted on top of the original image changing it's size would make the zones be misaligned;
- The texture being changed to apply the custom field image is used by multiple field parts, as can be seen by extracting it. This naturally means that if the filter is edited in unintended areas there could be side effects.
Works exactly as sleeve replacement does. Please keep in mind that part of your image will be covered and cropped by the game in inconsistent ways, so it may not look the same in different parts of the UI.
Home Art Usage:
- Every home art has it's own proportions, off-screen parts, and empty space. Automatically fitting an user-given image is currently not viable, so images are pasted in the top-left corner of the home art and made to fit it's size;
- The images used by the game may be bigger than what is seen on the screen. In such cases if your image has the same proportions as the game's it will naturally have parts hidden too;
- If the image provided is smaller in pixel count than the game's art it may look small on-screen;
- As mentioned above, the tool can't undo edits, so make a backup if you want to reverse your mod;
- There is an "extract" option for every image so backups can be made easier, exported images are placed in the "images" folder inside the same folder containing the app's .exe;
- There is a "copy" option for most assets for easier redistribution and stronger backups. Copied asset bundles are placed in their corresponding subfolder inside the "bundles" folder found in the same folder containing the app's exe;
- Most visual aspects of the app, such as the layout and the background, have been made with it's starting window size in mind. While the window is made re-sizable for minimum accessibility standards, visual aspects may be compromised as a result;
- Both Card Faces and the Home Background are in the unity3d game file, so their replacements may be reverted if you download an external mod that change that file;
- Your image needs to be a .png or .jpg for it to properly work.
- The .exe was made for Windows 10 or above, there could be compatibility issues with earlier versions of Windows;
- Pendulum cards aren't displayed or extracted properly, a fix is being currently worked on. Replacement works as expected, this issue arises from the app expecting a square art, which pendulums do not have.
- Some features don't work with uncensored versions of the game as the asset names are different, a patch would have to be made (such as https://www.nexusmods.com/yugiohmasterduel/mods/384 by Sakuya_Saki).
Japanese Version Patch Creation:
To create a Japanese version patch, understanding of JSON and the MD file structure is necessary. The reason some cards aren't replaced correctly is that the ones in the app's data are the global ones, which aren't the same as the Japanese ones. This data is contained in the "data.json" file found in the same folder containing the app's .exe.
As a simplified example, this is how the app knows where to look for the Dark Magical Circle, Dark Magician and Dark Magician Girl arts:
{
"name":
{
"Dark Magical Circle": "9112eaca",
"Dark Magician": "4adbcd1b",
"Dark Magician Girl": "e3c62cbf"
}
}
As can be observed the key => value relation represents the card name, which is displayed in the app, and the bundle to look for it's art, so to get the image used for "Dark Magician Girl" the app looks for it in the "4adbcd1b" bundle which is not where her ocg image is found so it won't be changed.
A patch would replace the bundle name with the ocg one making the app look there so changes would be reflected in the Japanese version, this can be accomplished by obtaining the data yourself and replacing the whole card names list following the given data structure or patching the cards that have different bundles. The explanation bellow is if you opt for the second option as there isn't anything else to be done in the first option, the app should be patched already.
To find cards that have different bundles for each version an approach is to look for "card/images/illust/ocg" in their container, there are multiple ways to do so.
Bellow is an example based on how I obtain card names on new game updates without the token name conversion for brevity, there may be differences in the soup selector, as this was made for the Brazilian KONAMI database.
import UnityPy
import json
import os
from selenium import webdriver
from bs4 import BeautifulSoup
from random import randint
from time import sleep
DATA_PATH = "your game data path up to the 0000 folder"
driver = webdriver.Chrome("your webdriver path")
cards = {}
for num in range(256):
fPath = os.path.join(DATA_PATH, hex(num)[2:].zfill(2))
for root, dirs, files in os.walk(fPath):
for file_name in files:
file_path = os.path.join(root, file_name)
env = UnityPy.load(file_path)
for obj in env.objects:
if obj.container is not None:
if "card/images/illust/ocg" in obj.container:
data = obj.read()
driver.get("https://www.db.yugioh-card.com/yugiohdb/card_search.action?ope=2&cid="
+ data.name)
page = driver.page_source
soup = BeautifulSoup(page)
for a in soup.findAll('div', attrs={'id':'cardname'}):
name = a.find('h1')
trueName = name.find('span')
cards[trueName.text] = file_name
# Sleep to avoid IP banning
sleep(randint(1,3))
with open('cards_id.json', 'w') as fp:
json.dump(cards, fp)
Either by basing yourself in the example given or other means you should have a list of card names and their bundles, so the final step is to replace their values in the original "data.json" file. If your names are exactly the same as the ones in the app it should be simple to replace the values in the JSON that have the names as their keys.
The process to replace other assets such as card sleeves is simpler as finding them in a tool like AssetStudio and replacing the bundle value by hand is viable because they should be few enough.
- Pygubu by Alejandro Autalan;
- UnityPy by Rudolf Kolbe et al;
- UABE by SeriousCache et al;
- PIL by Fredrik Lundh et al;
- PyInstaller by David Cortesi et al;