THIS SITE IS INCOMPLETE
The majority of overworld sprites in OMORI are stored in the "characters" folder as spritesheets. The system is not complex, though it can be a bit tricky at first to get behind.
When no special prefixes are added to a sheet, it becomes a 12x8 sheet designed for 8 characters/sections. This is best for general NPCs that all share the same dimensions, often 32x32, or for characters with more than just regular movement sprites.
If a $ is added to the front of a filename, it becomes a 3x4 sheet designed for one character/section. This is best for animated characters or object with special dimensions.
If [SF] is added to the front of a filename, it becomes a single image designed for one character/section. This is best for characters or object with special dimensions.
Note that in the Event Editor, it will be divided into a 12x8. Don't worry about that, it will show as one sprite in game.
If %(x) is added to the back of a filename, it extends the amount of walking sprites by the a number that takes the place of x. This is used by the overworld somethings and running sprites.
Note that in the Event Editor, it will be divided into a 12x8 or 3x4. Don't worry about that, it will show correctly in game.
In RPG Maker, characters are automatically shifted up 6 pixels in comparison to the map. This is to add a sense of depth.
However, if you want this disabled for certain sprites, like doors, you can add ! to the front of the filename in order to disable this.
All dialogue portraits are stored in the "faces" folder. These follow a very specific format that can't be deviated from.
Each image (as in png file) is a "faceset" containing 4 106x106px faces per row, with a practically unlimited amount of columns.
[example]
Each face in the faceset has a number assigned to it, being its "faceindex." These start at 0 and go left to right, top to bottom. This is how they are selected in the dialogue files. If you have trouble keeping track of what number each face has, a good practice is to add black numbers in the corner of each slot that state the number. Since they are black they will not be visible against the in-game text box.
Battle portraits operate very similarly to dialogue portraits and are stored in the same folder and also are 106x106px.
Unlike dialogue portraits though, battle portraits are stored in rows of three, each row being the frames of animation used for a specific emotion. They will loop from left to right.
The rows used for each emotion are coded into the states, so if you are making new sheets, you must follow this format.
0. Neutral
Happy
Ecstatic
Afraid (Also used for "OMORI did not succumb")
Sad
Depressed
Angry
Enraged
Toast/Blacked Out
Hurt
Victory
Manic
Miserable
Furious
Stressed Out (Only used by Sunny)
If you want more emotions you must extend the facesheet lower down by adding more rows.
Here is the confetti used for DW victory faces
Enemy battle sprites are stored in two locations. A single neutral frame of the enemy is stored in the "enemies" folder, while the full sheet is stored in the "sv_actors" folder.
The full sheet in the sv_actors folder operates similarly to the party battle portraits. Each row contains 4 sprites, however frame 2 and 4 are identical to make the animation look like "1, 2, 3, 2, 1" instead of "1, 2, 3, 1."
Unlike the party members, the sprites called for each emotion are done manually by every enemy, so you can put them in any order you like. However they will usually go:
0. Neutral
Hurt
Defeat
Sad
Angry
Happy
The majority of attacks in OMORI use the "animations" folder to hold all their frames and are animated in "Animations" tab of RPG Maker database.
Animations are stored in sheets with 192x192px given to each "Pattern" (frame) of animation. In OMORI a frame often uses multiple patterns and therefore must be aligned together when animating.
This is the Animations Tab, made up of 4 Sections.
The First Section is the Animations List, which holds all the animations in the game under an ID system.
The Second Section is the General Settings with holds the animation name, the images used, the position of the animation, and the number of frames in the animation.
The Position Tab has 4 options. Center will occur at the center of the target's sprite. Head will occur at the top-center of the target's sprite. Feet will occur at the bottom-center of the target's sprite. Screen will occur at the center of the screen, regardless of the target's position.
The Third Section is the SE and Flash Timing, where sound effects and flashes are timed with specific frames.
The Fourth Section is the Frames, which are where all the "Patterns" are placed for each frame.
Battle Backgrounds, or Battlebacks as they are often called, are really easy and fun to make. They are stored in the "battlebacks1" folder.
Technically speaking you may place any 640x480 image in the folder and it will be usable as a battleback, however OMORI uses a very specific style for its battlebacks. Specifically, OMORI uses dithered stock photos for its battlebacks.
OMORI sources its photos from Pexels and Pixabay, which I would also recommend as the photos are all free and watermarkless. Once you have your photo, you must crop and scale it down to 640x480, and then place it through a dithering tool. Photoshop gives the most accurate results, however Ditherit gives good results too.
Example:
Tilesets feature all the tiles and props used in OMORI's maps. They are sheets stored in the "tilesets" folder.
Most of OMORI's tilesets are 1024x1024, which is the maximum size available. Each individual tile is 32x32, which some larger props using multiple tiles, like trees. Tiles can be animated with a looping animation of other tiles on the sheet, which is explained in detail in the Mapping page.
Parallaxes are looping images used as map backgrounds. Stored in the "parallaxes" folder
They are primarily used for the sky in Headspace and Faraway, and also as backgrounds for Black Space maps.
Pictures are images that will appear on top of the screen and can be controlled in a few different ways.
Pictures get used for various purposes, but generally can be boiled down to images that appear above the world for one reason or another.
This includes but is not limited to:
Cutscenes (Eg. Release Stress)
Battle Transitions
Art popups (Eg. Area Logos)
Minigames (Eg. Sproute Mole Eater)
Battle Animations (Eg. Release Energy & Red Hands)
Lighting
Movies are prerendered videos played in-game. These are exclusively used for various in-game cutscenes. They are all 640x480 .webm files.
These are mainly used for when there are too many moving layers for pictures to be usable. All examples are as follows:
Good Ending Credits
Bad Ending Credits
Neutral Ending Credits
The creation of White Space
Through the Bookcase
The creation of Omori
Something blocks the White Space door
Omori takes his throne in Red Space
Omori saves Sunny (Hikikomori Route)
Sunny tries again against Omori
Final Duet
Omori is Gone
Sunny is Gone
Sunny wakes up in the hospital
Secret Ending
These images will work a bit different, as adding more icons for these images involves the need to change JavaScript files.
The easy part is simply expanding the images and adding more icons. Each item row is 108px, while each follow-up row is 98px. And you should be expanding these images by adding new rows down.
Now, to change the JavaScript to comply with the new images. Now technically, we aren't actually changing the JavaScript but rather overwriting it with a new js file. What we do is we make a new js file(This can be easily done by copy pasting the -----------------.js file as it's empty) and then write the modded code into there.
This here is copy pastable JavaScript for both Follow-Ups and Item Icons. Simply replace the cyan numbers with the new row number for the image and then enable the JavaScript file at the bottom of your mod. Since it's lower in the list than the original files, it will be loaded after, and therefore overwrite their code.
//=============================================================================
// * FOLLOW-UP BUBBLE EXTENSION from Omori Battle System.js
//=============================================================================
Sprite_ACSBubble.prototype.setBubbleIndex = function(index) {
// Get Bitmap
var bitmap = ImageManager.loadSystem('ACS_Bubble');
// Get Width & Height
var width = bitmap.width / 7, height = bitmap.height / 2;
// Set Bitmap
this.bitmap = bitmap;
var x = (index % 7) * width
var y = Math.floor(index / 7) * height;
this.setFrame(x, y, width, height);
// Set Bubble Index
this._bubbleIndex = index;
// Index Arrow Positions
if ([0, 1, 2, 3].contains(index)) {
// Set Arrow Positions
this._arrowPositions = {2: [70, 85], 4: [15, 45], 6: [120, 45], 8: [70, 10]};
} else if ([4, 5, 6].contains(index)) {
// Set Arrow Positions
this._arrowPositions = {2: [65, 95], 4: [5, 55], 6: [125, 55], 8: [65, 10]};
} else if ([7, 8, 9].contains(index)) {
// Set Arrow Positions
this._arrowPositions = {2: [60, 85], 4: [5, 45], 6: [115, 45], 8: [60, 5]};
} else if ([10, 11, 12].contains(index)) {
// Set Arrow Positions
this._arrowPositions = {2: [60, 90], 4: [5, 50], 6: [115, 50], 8: [60, 15]};
};
// Set Arrow Position
this.setArrowDirection(this._arrowDirection);
};
//=============================================================================
// * MENU ITEM ICONS EXTENSION
//=============================================================================
DataManager.getItemIconGraphicsData = function(item) {
// If Item has Icon Graphics Data already set
if (item.meta.IconGraphicsData) { return item.meta.IconGraphicsData; };
// Initialize Data
var data = {name: '', index: 0, rows: 1, columns: 1};
// Set Item Icon Index
if (item.meta.IconIndex) { data.index = Number(item.meta.IconIndex); }
// Apply Properties to data
if (this.isKeyItem(item)) {
data.name = 'itemImportant'; data.rows = 15, data.columns = 8;
} else if (this.isConsumableItem(item)) {
data.name = 'itemConsumables'; data.rows = 12, data.columns = 8;
} else if (this.isToyItem(item)) {
data.name = 'itemConsumables'; data.rows = 12, data.columns = 8;
} else if (this.isWeapon(item)) {
data.name = 'itemWeapons'; data.rows = 5, data.columns = 9;
} else if (this.isArmor(item)) {
data.name = 'itemCharms'; data.rows = 13, data.columns = 7;
};
// Set Item Icon Graphics Data
item.meta.IconGraphicsData = data;
// Get Item Icon Data
return data;
};