#include "game_types.h"

/* Sub_0800EA08 @ 0x0800EA08 (real 180B) -- tiered queue post plus pin select. Mirrors src/matched/Sub_0800EA08.c. */
/* Posts a zero-entry when word 4 is clear (d/e ride uninitialized stack
   lanes, verbatim), bumps word 15 by 1024, posts a tiered entry by the old
   word-15 twelfths (tables CEF8/F0F8/F2F8), pins words 2/3 to 4-or-6/-1,
   and ends in the F2D8 + SaveEmitters chain. */
extern void TextQueue_AddEntry(int a, int b, int c, int d, int e);
extern void Sub_0800F2D8(int *p);
extern void Level_SaveEmitters(int *p);

void Sub_0800EA08(int *p)
{
    int tier = *(int *)((char *)p + 60) >> 12;
    int d, e; /* uninitialized stack lanes, verbatim from the asm */
    if (p[4] == 0)
        TextQueue_AddEntry(0, 0, 8, d, e);
    *(int *)((char *)p + 60) += 1024;
    if (tier <= 15)
        TextQueue_AddEntry(1, 0, 8, 0x080CEEF8 + tier * 32, 16);
    else if (tier <= 31)
        TextQueue_AddEntry(1, 0, 8, 0x080CF0F8 + (tier - 16) * 32, 16);
    else if (tier <= 47)
        TextQueue_AddEntry(1, 0, 8, 0x080CF2F8 + (tier - 32) * 32, 16);
    if (tier > 48)
        p[2] = 4;
    else if (*(unsigned short *)(*(int **)0x02000150 + 2) != 0)
        p[2] = 6;
    else
        goto tail;
    p[3] = -1;
tail:
    Sub_0800F2D8(p);
    Level_SaveEmitters(p);
}
