Everything I make is always F2U & F2E, whether it’s included here or not.
Portraits
I used Blade’s skin & hair colours and Lenh & Obsidian Daddy’s blinking FE6 frames for pretty much everything here.
OCs
Splices I made for (mostly dead) hacks.
CCC
Splices based on FE characters made for the CCC. The earlier ones were my first splices ever.
Music
Everything here was modified from midis ripped from other games using VGMTrans/FEBuilder. I know nothing about music theory.
All .s files are available here!
The older ones (aka the Apollo Justice tracks) were made for FEBuilder’s version of NIMAP2 and might not work properly with buildfiles from my testing (and I’m too lazy to fix it now).
Ace Attorney Investigations: Miles Edgeworth - Shi-Long Lang ~ Speak Up, Pup!
Ace Attorney Investigations: Miles Edgeworth - Kay Faraday ~ The Great Truth Burglar
Ace Attorney Investigations: Miles Edgeworth - Calisto Yew ~ Let Me Laugh at the Cool
Ace Attorney Investigations: Miles Edgeworth - Solution! ~ Splendid Deduction
Ace Attorney Investigations: Miles Edgeworth - Pursuit ~ Lying Coldly
Ace Attorney Investigations: Miles Edgeworth - ‘‘Turnabout Airlines’’ (intro)
Ace Attorney Investigations: Miles Edgeworth - Yatagarasu ~ The Gentleman Thief Who Dances in the Black Night
Ace Attorney Investigations: Miles Edgeworth - Logic ~ The Way to the Truth
Ace Attorney Investigations: Miles Edgeworth - Crisis of Fate
Apollo Justice: Ace Attorney - Detention Center ~ Tragicomical Meeting
Apollo Justice: Ace Attorney - Confess the Truth 2007
FE7 - What Comes from Darkness
C
Most of the stuff I’ve written was extremely specific to one hack (AVALON X EMBLEM) and wouldn’t work properly/make sense outside of it, so this section is a bit empty right now.
Expand CG text box
Turns this:
Into this:
.c
void sub_800E290(struct EventEngineProc * proc, u16 stringIndex, u32 flags)
{
flags |= 0x0400;
if (proc->evStateBits & EV_STATE_0020)
flags |= 0x0040;
if (proc->evStateBits & EV_STATE_0040)
flags |= 0x2000 | 0x0800 | 0x0020;
SetWinEnable(FALSE, FALSE, FALSE);
LoadObjUIGfx();
InitTalk(0x80, 0, 1);
BG_EnableSyncByMask(BG0_SYNC_BIT);
StartCgText(
0, 0x12, 0x1A, 4, stringIndex, OBJ_VRAM0 + 0x1000, -1,
NULL // parent proc
);
SetCgTextFlags(flags);
}
.lyn.event
PUSH
ORG $e290
ALIGN 4
WORD $46C04778 $E59FC000 $E12FFF1C
POIN sub_800E290
POP
ALIGN 4
PUSH
ORG CURRENTOFFSET+$1;sub_800E290:
POP
WORD $8F83B530 $14000D $69AB085 $2280D42E $431400D2 $D501065B $431C4B16 $4A16231F $400B7851 $4B157053 $F834F000 $21002201 $4B132080 $F82EF000 $4B122001 $F82AF000 $93032300 $93023B01 $221A4B0F $93012112 $23049500 $4D0D2000 $F81DF000 $4B0C0020 $F818F000 $BC30B005 $4700BC01 $D22288 $E7CF4314 $2820 $3003080 $8015681 $800680D $8001FAD $6011000 $808F129 $808E9D9 $47284718
Check if unit has item with durability ASMC
Title. Pretty useless for most hacks, but can be useful alongside durability-based items. Also includes a version which doesn’t check durability for convenience.
.c
void HasItem(void)
{
struct Unit* unit = GetUnitFromCharId(gEventSlots[1] & 0xFF);
int item = gEventSlots[2] & 0xFF;
int i = 0;
int result = 0;
for (i = 0; i < 5; i++)
{
if ((unit->items[i] & 0xFF) == item)
{
result = 1;
break;
}
}
gEventSlots[0xC] = result;
}
void HasItemWithDurability(void)
{
struct Unit* unit = GetUnitFromCharId(gEventSlots[1] & 0xFF);
int item = gEventSlots[2] & 0xFFFF;
int i = 0;
int result = 0;
for (i = 0; i < 5; i++)
{
if ((unit->items[i] & 0xFFFF) == item)
{
result = 1;
break;
}
}
gEventSlots[0xC] = result;
}
.lyn.event
ALIGN 4
PUSH
ORG CURRENTOFFSET+$1;HasItem:
ORG CURRENTOFFSET+$3c;HasItemWithDurability:
POP
WORD $4C0CB570 $79204B0C $F834F000 $21FF0003 $331E7A25 $881A3028 $42AA400A $3302D007 $D1F84283 $63232300 $BC01BC70 $23014700 $46C0E7F9 $30004B8 $801829D $4C0BB510 $79204B0B $F816F000 $89210003 $3028331E $428A881A $3302D007 $D1F94283 $63232300 $BC01BC10 $23014700 $46C0E7F9 $30004B8 $801829D $46C04718
Defines
#define HasItemCheck(Unit, Item) "SVAL 1 Unit; SVAL 2 Item; ASMC HasItem"
#define HasItemWithDurabilityCheck(Unit, Item) "SVAL 1 Unit; SVAL 2 Item; ASMC HasItemWithDurability"