PATREON
Creating Characters, Skins, and Stages for Dojo Masters.
This is the start of the guide for using Dojo Masters' Character Editor
Time constraints prevented me from making this as thorough as possible, so my notes will be direct and brief.
(Expect this guide to be updated and polished in the future.)
Creating Skins
This will probably be the most common use case for the Editor, so let's tackle that first.
1. Open the Dojo Masters Editor, choose the and click the "Open" 📂 Button.
2. Navigate to the game's "...\chr\" Folder.
3. Find the Base Roster Character that you'd like to make a Skin for and open their .chr file.
4. In the Editor's INFO Tab, you'll see the structure of the CHR file:
❖ GSS: General System Sprites (Menu Interface and Text)
❖ SPR: Sprites (The Images used in-game)
❖ SND: Sounds (Currently Unused)
5. Replace any of the files that you'd like to replace either by clicking "Import" in the file Viewer, or by dragging your files into the application window.
❖ GIF: Recommended image file type to keep files sizes small.
❖ PNG: Supports Alpha Transparency
(If both file types are present, the game will prioritize GIF.)
5b. It's recommended to use a software like Aseprite as you can run into compatibility and output issues using other software.
5c. While you can extract each file one-by-one, it's much more efficient to use the "Unpack Character file" 📁 Button. From the dialog, navigate to and choose the file you want to extract the contents from. It will create an "\output" sub-folder in that folder, with all assets from the chosen .chr file. Doing this makes it easier for you to modify the individual assets.
6. With the Character file that you want to make a skin for still open in the Editor, replace all files with the new ones, and delete any leftover/unnecessary ones.
7. Optionally, you can double-click on the *.meta. in the file Viewer to modify your character's MetaData. You only need to worry about a few of these values:
❖ Name: Can be ignored, but this is what's displayed within the game's CSS.
❖ ImageXhome / ImageYhome: Controls the offset/placement of all image hotspots {0,0} is Top-Left.)
These Values can be modified within the Editor's INFO Tab Default Properties Panel.
❖ Scale: {1.0} by default; controls scaling of Images.
This parameter may or may not work on launch.
(It's important that you DO NOT alter the order of the parameters in the *.meta. file. Though, if you mess up any important data, the game should just ignore it.)
8. DO NOT HIT SAVE! You want to export a "Skin", not overwrite a pre-existing Character file.
(Besides, if you overwrite a base file, the game will just correct it.)
9. To export your new Skin, click the "Export Character Skin file" 👤 Button. This will export
10. And with that, your Skin's .chr file is created and ready to be uploaded.
Creating Custom Characters
80% of these steps are identical to the Creating Skins Section, so read that first!
1. Open the Dojo Masters Editor and determine if you want to modify a pre-existing character or create a new one from scratch. With that said, this section is focused on making new characters.
2. While you can click the "New" 📄 Button to start with a blank Character file, it is recommended that you start from a base. So choose which character from the roster you want to build off of and open it by clicking the "Open" 📂 Button.
3. Now that your base is open, follow the steps in the Creating Skins Section to import all of your necessary GSS and SPR files.
4. Now, unlike skins, there are some additional *.meta. parameters that you should be aware of:
❖ ID: IMPORTANT! Make sure that you clear this field if you're making a custom character. If you leave the base roster character's ID/Name in this field, the game will assume that this is a Skin and ignore all of your Scripts.
❖ Xsize / Ysize: Controls the width and height of the character's ECB(Environmental Collision Box).
These Values are halved at runtime, so if your character's effective width is 32px wide, you'd set Xsize to 16units.
❖ Stamina: The base amount of Stamina that the Character has.
Stamina Stocks work in 2s. So a value of 10 (Which is standard) is displayed as 5 Stocks of Stamina in game.
❖ SpecialInput: This is a shorthand value for the engine to use certain special inputs.
0 = None
1 = Boxer's 4K 6K 5K 5P InputReference Boxer's Scripts to understand how this works as there's a return value.
❖ Name: Dictates what is displayed within the game's CSS. Unlike with Skins, it is more relevant to change this text for custom characters.
You may also notice Language specific translation fields. Clear/leave these blank if you don't want to localize your character's name.
❖ Difficulty: Displays at Character Select and goes up to 4 Stars.
❖ Version: This value isn't processed and is solely used by the designer of the Character.
(It's important that you DO NOT alter the order of the parameters in the *.meta. file. The Engine is much stricter when it comes to Character Mods.)
5. Now that your character's Sprites and Parameters are setup, you can move onto scripting. Many of the functions within the Editor are relatively self-explanatory. With that said, in the future, I plan on making a more comprehensive guide on how to script. For now, you'll just have to tinker around with the tools, and study pre-existing characters.
6. Congrats! You've created a custom character.
7. Use the "Save As" 💾 Button to save your changes to a new .chr file/location.
It is recommended that you save directly to your game's "...\chr\" Folder so that you can test out your files. In this state, your file is what the engine sees as a "Local Mod".
Additionally, while future characters still have not yet been revealed, avoid naming your .chr file the literal name of a given Martial Art. If you do, and that character eventually gets added to the roster, the game will just delete/replace your file.
Scripting Notes and Practices
Come back later...
❖ Processing Order: While most of the engine handles objects in a "Same Time" sort of process, Scripts are forced to process in order. What this means is, any custom system or process that you create, will have the potential to have a one-sided advantage/disadvantage. To avoid this, you want to process outcomes of calculations 1 Frame Later. However, there still exists some cases where doing so wouldn't flow properly. In those cases, you typically want to make sure that it is in a situation where it being one-sided doesn't matter. I can't list examples off-hand, and each design will run into different issues, but it is worth being aware of.
Alternatively, you could just throw caution to the wind and accept that things aren't 1:1 balanced.
❖ Sub Step Interval: Dojo Masters' Engine does NOT allow for Floating Point Numbers (by design). Because of this, we must perform some hack-y things to get floating point like movement. SubStepInterval (pVar#119) is (mostly) how we achieve this. This variable works in conjunction with a character's Xgrav and Ygrav values and dictates how frequently to apply them. Because of this, it is good practice to reset SubStepInterval to 0, when you design an action/sequence that is intended to lift the character off the ground.
Choosing to ignore this will lead to unexpectedly inconsistent velocity.
❖ Hurtbox Practices: You are free to mess with Hurtboxes as you see fit. But, if you want to adhere to the general rulings of characters, we have strict rules on what qualifies as Low Profile and Downed.
• Low Profile: -15 units high.
• Downed State: -10 units high.
❖ Shorthand CMD: When dealing with CMD (Command Inputs) in the Editor, there is a CMD Dropdown List. This is a "Shorthand CMD". These are very useful for reducing lag by avoiding complex Command Input Checks. Use these when you need to constantly check for a given input every frame.
❖ Inline Commands: Any Commands set within the character's Scripts, are what we refer to as "Inline Commands" These are essentially stacked on top of your Main/Top-Level Command List.
You don't generally have to manage this list yourself as "Initial Settings" will typically clear it. But if you want to manage it, just know that the list always processes in newest command first order (I think).
❖ Force.INIT: When point to a new location in the Scripts, the "Force.INIT" or "Force Initial Settings" Flag tells the code to ALWAYS process the jumped to Sequence's Initial Settings.
Simply pointing to Sequence Step 0 doesn't guarantee that Initial Settings are processed; it depends on what called it and when. But this is a common cause of jank if you're not properly accounting for it.
❖ Force Tech Reaction: The "Tech" Sequence isn't exactly universal, so you need to setup a "Forced Tech" Sequence that the game can call on when it needs to. This is used in modes like Survival and Free-For-All where you can chose which direction you flip when respawning.
❖ Common Images: These are images that get displayed when the Character is in a Grabbed State.
❖ AI Logic: As of right now, AI Logic is NOT implemented, and is a planned feature.
❖ Custom Sounds: While sounds can technically be included in a .chr file, avoid doing so. I'm 70% sure that the end won't play well with it until this feature is fully implemted.
❖ Unused Hurt Reactions: If you look through the Scripts of the Base Roster Characters, you may have noticed a few Hit Reactions that have gone unused. These are empty, because the future characters that use them are not yet implemented.
I would very much advise that you do not place any data in these sequences, unless you are ok with them being an ill fit for how they will eventually function.
❖ Is Function: To be honest. I don't really know what this does. At least not entirely. I think it was a way to mark a Sequence to only be temporarily called in conjunction with the Top-Level Command List without interrupting your Sequence. But I don't know if it even works. Play with this at your own risk.
❖ uActions: These are what we refer to as "Unique Actions". These allow you to call upon very powerful engine-related functions. Only use these if you feel confident in your understanding of what a given uAction does.
More uAction will be added based on the requirements of future character as well as the needs and feedback from the game's modding community.
❖ Desyncs: While yes, the game is more or less deterministic, it is still theoretically possbile to desync the game states when playing online.
In short, be careful when messing with Global Variables and uActions.
❖ lVar: Each Character Object has 128 lVar(Local Variables). 0~63 are Temporary and will reset to 0 on both Round and Match Reset. 64~127 carry over on Round Reset but will clear on Match Reset.
Be warry of tying important functions (especially ones that are designed to have any amount of persistence) to lVar#0. The vast majority of uActions will often write to lVar#0 by default. So, it's really just good practice to not use it for anything outside of short, contained processes.
❖ Editor Variable Renaming Bug: There is a long standing bug in the Editor that causes lVar#0 to get renamed to whatever name you just gave to another lVar#. This bug is still being investigated but use this as further incentive to avoid overreliance on lVar#0 in perticular.
This limitation will be addressed at some point in the future.
❖ Editor Scroll Limitation: The Sequence Editor is the only TAB in the editor that supports scrolling. Thus, in the Command List, Reactions, Common Images, and AI Tabs, you'll need to extend the window down vertically to view all information.
This limitation will be addressed at some point in the future.
❖ 4K Screens: I'm 90% positive that the editor will break visually if you attempt to exceed the 1920x1080p resolution cap. While this isn't exactly a bug, we are looking into potential solution.
❖ Memory Issues: While I only encountered it once, there seems to be some sort of memory leak(?). I got a memory error while trying to save a file and haven't encountered it again since.
Creating Custom Stages
Come back later...
❖ There is very little documentation for creating stages at this moment in time. So like with character scripting, you will have to study pre-existing stages to feel things ou (Or ask DreamMareEXE in the game's Community Discord Server).
Additionally, there is a TEST STAGE in the Editor's Example Folder. If you want a basic stage with no additional bells and whistle, simple Unpack that file with the Editor, update the values and images, and Repackage them.
More Coming Soon...
Come back later...
Uploading Mods
Requires a Steam copy of Dojo Masters
1. Once you have your mods that you want to Upload to the Steam Workshop, open your copy of Dojo Masters.
2. Navigate to the ONLINE > STEAM WORKSHOP Menu and then enter the UPLOAD Sub Menu.
3. From here, choose the type of mod that you will be uploading (STAGE or CHARACTER/SKIN).
Both Characters and Skins have identical .chr file format.
4. Now, attach you mod's Icon (jpeg) and appropriate .stg or .chr file.
Workshop Icon Template Image (Save the file as JPEG format after adding art to image).
Icons should be 512x512 with a 32px margin on the left and right and a 36px margin on the right and bottom. This allows the game to properly scale it to fit seamlessly into the game's CSS.
Additionally, RGB{0,0,0} is treated as transparent when it comes to icons, so avoid using that color on anything but the icon's Frame/Margin.
5. Next, fill out the Title Field.
Descriptions are optional
6. Finally, hit UPLOAD to begin the upload process.
7. Once Uploaded, you can then navigate to the STEAM WORKSHOP Menu's BROWSE Sub Menu and search in CREATED to find your latest mod(s).
Steam's Server might delay a bit, so sometimes you'll need to give it a minute to show up.
8. Now that that is all said and done, you may need to perform some cleanup. If you've left any "Local Mod" files in your game's folder, you need to remove or delete them. Otherwise, they are taking up space on your roster.
I mean, technically you can play with "Local Mods" in Custom/Private Lobbies, but it'll only work if all participants have that same exact mod.
9. And that's it! You now (mostly) know how to create and upload mods to Dojo Masters' Steam Workshop.
© Copyright 2024 PIXELED VISION LLC