[FE8] Modular Minimug Box 2018: It's here!

How about a display for Att, Def, Hit, and Avo?

1 Like

Can issue a mark if the remaining number of weapons is small?
For example, when breaking at 9 times, show “!”
Of course, it is not necessary to display in the case of items that can only be used nine times.

Sounds like a good idea. I’ve updated the main post with the suggestion and I’ve also added another example configuration.

1 Like

Ability to display the “Rating” on units on a similar way to the simplified UI of the 3ds games, and maybe do the same for any other stats, showing speed could be useful for doubling threesholds for example.

EDIT: Would it be possible to just show Attack Speed directly?

How is rating calculated?

When it comes to displaying numbers, anything easily fetched or calculated is fairly trivial to display. To get a good idea of the kinds of things that I can work with easily, check out the section of these notes marked CHARACTER AND BATTLE STRUCT.

2 Likes

I saw your code.
I thought that this project was not yet open.

#ifndef ItemImage
	#define ItemImage 0x85926F4
#endif

#ifndef ItemPalette
	#define ItemPalette 0x85996F4
#endif
#ifndef ItemTable
	#define ItemTable 0x8809B10
#endif

When these programs are created with pointer reference,I think setting is unnecessary.

ldr r0,ItemTable

↓change↓

ldr r0,=0x08016410
ldr r0,[r0]

0x08016410 is a reference to the item table called in function 080163F0 (StatBonusGetter GetItemHPBonus).
If we have re-point the item table, we need to rewrite this address.

Therefore, by referring to this address, setting is unnecessary.
It will be able to endure the re-point.

Or you could use the 080177B0 (GetROMItemStructPtr) function.

Even for the other two pointers, if you use pointer reference, we do not need to set it.
By this, the code will increase by 2 bytes, but I think that it is acceptable range.

3 Likes

Rating = Sum of unit’s stats.

Is the format of each module pretty similar to the Modular Stat Screens? If so, I’ve got a macro to calc/display Rating for the latter already:

[details=Rating macro] .macro draw_rating_at, tile_x, tile_y
push {r4}
mov r4, #0x0
mov r0, r8
blh MaxHPGetter
add r4, r4, r0
mov r0, r8
blh StrGetter
add r4, r4, r0
mov r0, r8
blh SklGetter
add r4, r4, r0
mov r0, r8
blh SpdGetter
add r4, r4, r0
mov r0, r8
blh LuckGetter
add r4, r4, r0
mov r0, r8
blh DefGetter
add r4, r4, r0
mov r0, r8
blh ResGetter
add r4, r4, r0
mov r0, r4
pop {r4}
mov r1, #Blue
draw_number_at \tile_x, \tile_y
.endm[/details]

When will Modular Minimug Box 2018 be released?
I want to transplant to FE8J.
However, it seems that the currently released version is the one in 2017.
When will the latest version be published?

2 Likes

Since this will be presented at FEE3 2018, I suppose it will be ready by mid October.
I’m sure @Zane has a more precise answer, though.

Planned release date is tomorrow, if nothing breaks.

I’ve tested the most recent version with the skills system and things have been working well. Mystic was kind enough to let me test it with REDFE, too.

That being said, I’d still like to push out some updates between now and FEE3.

8 Likes

Link to the github repo is up! I have no experience with github, so let me know if anything is wrong.

I’m going to get some example configurations and info on making your own modules posted soon, but hopefully this will satisfy the curious.

12 Likes

I’m also looking forward to the FEBuilder integration for an easy editor with a live preview function.

Great job Zane. I’m very glad I asked you to revisit this hack back in the day. It’s really going to change things for the better, I’m sure of it. GG

I hope I can edit it with FEBuilderGBA.
However, we have to solve various problems for that.

FEBuilderGBA is suitable for editing structs.
EA is suitable for describing syntax.

MMB is written in syntax rather than struct.
For example, it has the following format.
It is quite difficult to integrate this.

// Unit name options

	// Coordinates and widths are in 8x8 pixel tiles
	#define MMBNameWidth 7
	#define MMBNameColor TextBlack
	#define MMBNameX 5
	#define MMBNameY 3

For example, if it was described with the following structure, it would be easier to integrate it.

struct MMBItem{
	byte	x;
	byte	y;
	byte	color;
	bool	is_static;

	byte	type;	//enum type
	byte	arg1;
	byte	arg2;
	byte	arg3;
}; //sizeof()==8

MMBItem(0, 0 , Black , STATIC_ITEM , UNIT_NAME , 0  , 0 , 0)
MMBItem(0, 10 , Black , STATIC_ITEM , UNIT_ITEMS , 0  , 0 , 0)
MMBItem(0xFF,0xFF,0xFF , 0xFF , 0xFF , 0xFF ,0xFF , 0xFF); //term

Also, items that can be added such as the following are also problems.
These are different from the way you customize after installing FEBuilderGBA, as you will decide which to use when you install the build file.

// Inventory modules

	//#define MMBInventory
	//#define MMBEquippedWeapon
	//#define MMBEquippedWeaponName // uses alt text
	#define MMBInventoryOrEquippedWeaponName // uses alt text

// Bar modules

	//#define MMBHPBar

Probably, in the present situation, when installing the patch it will be in a format that you choose which to use.
I think that editing after installation is difficult.
If you change it, it will be in a form to uninstall the patch once and reinstall it.

Also, FEBuilderGBA does not have a lyn parser.
This is a problem when FEBuilder’s rebuild.
(rebuild is a function to rebuild the ROM and execute defragmentation)

I would need to create a new lyn parser or install it in a specific area below 0x09000000 just like a skill system.

Either way, this is a problem with FEBuilderGBA, so I’d like to do something.
Also , I want to porting to FE8J.

2 Likes

Finally I could transplant.

I would like to give you feedback on the porting on FE8J.
First of all, you’d better create a batch file that creates an elf.

Assemble ARM.bat

@echo off

SET startDir=C:\devkitPro\devkitARM\bin\

@rem Assemble into an elf
SET as="%startDir%arm-none-eabi-as"

cd Internal

for %%i in (*.s) do (
call :gas %%i
)

cd ..
cd Modules

for %%i in (*.s) do (
call :gas %%i
)
cd ..

pause
exit

:gas
echo %1
%as% -g -mcpu=arm7tdmi -mthumb-interwork %1 -o "%~n1.elf"
exit /b

You seem to be collecting definitions in Common Definitions.inc.
However, there was a part whose value was hard-coded in the source code.

Internal\MMBDrawAffinityObjs.s	ldr		r2, =0x08590F4C
Internal\MMBDrawInventoryObjs.s	ldr		r2, =0x08590F4C 
Internal\MMBDrawNumberOAM.s	ldr		r2, =0x08590F44
Modules\MMBDrawAffinity.s	ldr		r0, =0x08599714
Modules\MMBDrawEquippedWeapon.s	ldr		r0, =0x085996F4
Modules\MMBDrawEquippedWeaponName.s	ldr		r0, =0x085996F4
Modules\MMBDrawInventory.s	ldr		r0, =0x085996F4
Modules\MMBDrawInventoryOrEquippedWeaponName.s	ldr		r0, =0x085996F4
Modules\MMBDrawInventoryOrEquippedWeaponName.s	ldr		r0, =0x085996F4
Modules\MMBDrawSkillAlternatingObjs.s	ldr		r2, =0x08590F4C
Modules\MMBDrawSkills.s		ldr		r0, =0x085996F4

Also, the position of Procs is hard-coded.
It might be better to set a definition somewhere here as well.

Internal\UI1 Proc Code.event	ORG 0x00A0190C	
Internal\UI1 Proc Code.event	PROC_WHILE_EXISTS(0x0859A48) // Halt if GENS
Internal\UI1 Proc Code.event	PROTECT 0x00A0190C CURRENTOFFSET

Of course, hard coding is not bad.
We can easily fix it by using the editor’s bulk replacement.

And , I want to feed back the concrete source code after testing the version of FE8J more.

6 Likes

Well done! I’m glad that you were able to get things working. Thank you for taking the time to look at this and give feedback, it has been a long time since I have written anything for GBAFE.

7 Likes

If we’re still suggesting stuff, how about turning the chapter goal window into a skills window which then turns back into a goal window when the cursor is away from the unit? It would allow for more info without impeding normal function (I think)

2 Likes

This looks cool.

1 Like

I posted the modified version of 7z to Discord’s spell academy.

Bug fixes.
MMBDrawInventoryOrEquippedWeaponName.s
Fixed a bug where the enemy’s weapon name is not displayed.

Added new functions.

Supports FE8J.

MMBDrawWeaponNameCentered.s
It is a module that displays only the weapon’s name with center alignment.

I wanted to display the name of the weapon equipped while displaying all my items.

MMBDrawHPBarOrBadStatus.s
HPBar is displayed, but in case of Bad Status, the contents of Bat Status are displayed.

I hated GBAFE’s combination display.
Because I have to wait a few seconds to confirm the turn that an enemy is sleeping on.
Normally, HPBar is displayed, but in the case of Bad Status, its contents are displayed.
There is no need to wait a few seconds.

MMBDrawHPStatusNoCombination.s
Since I implemented “MMBDrawHPBarOrBadStatus”, it was necessary to prevent Bad Status from being displayed in MMBDrawHPStatus.
This module always displays HP only.

Suggest
I changed the installer to call the configuration, but the setting to call the installer.
The more we can make the preset, the convenience will improve.

NG: installer <- data
OK: data -> installer

For example, if we prepare a GFE1R style reset or a REDFE style preset, the user can use it by simply selecting it.
We will be able to satisfy the demands of not only users who want to customize everything, but users who want to use it more easily.

I renamed the dependent program as MMB Core.
And I include it from each style.
#include “MMB Core.event”

I made styles.

MMB Installer 2018 Default.event
It is the default style of MMB2018.

MMB Installer GFE1R Style.event
It is a style of GFE1R style.
I reverse-engineered it from the screenshot of the game. :slight_smile:

MMB Installer REDFE style.event
It is a style of REDFE style.
I reverse-engineered it from the screenshot of the game. :slight_smile:

MMB Installer Kaitou Style.event
It is a style of Kaitou patch style.
This game keeps items in large quantities, so it specializes on items.

I got some screenshots with FE8J.

13 Likes

Maybe it would be better to replace the terrain window with this, so that way you have at least the logical consistency of “this window has information relating to the highlighted map coordinate”. :thinking:

1 Like