#include "game_types.h"

/* Sub_0800F7DC @ 0x0800F7DC (real 126B) -- gap-call chain plus table publish and draw helper. Mirrors src/matched/Sub_0800F7DC.c. */
/* Runs 8 gap calls in order (raw bl to unmapped spans), publishes the
   (p+356) link into p+0x998, strobes 15 at 0x5000000 on the flag byte,
   clears/renders, zeroes a mailbox pair, stamps 0x1608, and runs the draw
   helper over p+5152. The 0x144 pool dereference is verbatim. */
extern void Sub_0800F7DC_Gap0(int *p);
extern void Sub_0800F7DC_Gap1(int *p);
extern void Sub_0800F7DC_Gap2(int *p);
extern void Sub_0800F7DC_Gap3(int *p);
extern void Sub_0800F7DC_Gap4(int *p);
extern void Sub_0800F7DC_Gap5(int *p);
extern void Sub_0800F7DC_Gap6(int *p);
extern void Sub_0800F7DC_Gap7(int *p);
extern void Object_ClearWords(int *p);
extern void BiosStub_080008BC(int *p);
extern void Sub_0801178C(int a, int b, int *c);

void Sub_0800F7DC(int *p)
{
    int *t;
    Sub_0800F7DC_Gap0(p);
    Sub_0800F7DC_Gap1(p);
    Sub_0800F7DC_Gap2(p);
    Sub_0800F7DC_Gap3(p);
    Sub_0800F7DC_Gap4(p);
    Sub_0800F7DC_Gap5(p);
    Sub_0800F7DC_Gap6(p);
    Sub_0800F7DC_Gap7(p);
    t = (int *)((char *)p + 0x998);
    t[0] = 0;
    t[1] = (int)((char *)p + 356);
    if (*(unsigned char *)((char *)p + 7200) != 0)
        *(unsigned short *)0x5000000 = 15;
    Object_ClearWords((int *)((char *)p + 2464));
    BiosStub_080008BC((int *)((char *)p + 0xA34));
    t = *(int **)0x144;
    t[10] = 0;
    t[11] = 0;
    t[5] = 0x1608;
    Sub_0801178C(2048, 22, (int *)((char *)p + 5152));
}
