#include "game_types.h"

/* Sub_0800D5C0 @ 0x0800D5C0 (real 174B) -- init/mode idiom plus shift-publish. Mirrors src/matched/Sub_0800D5C0.c. */
/* Zero word-4 inits the preset quad (flag 3; 63/64/0/4096). Otherwise the
   mode dispatch gates shifting p[3] into p[2] and pinning p[3] = -1. Always
   ends in Sub_0800E258(p). Same idiom as D000/D0D0/103E4/F134/C6E8. */
extern void Sub_0800E258(int *p);

void Sub_0800D5C0(int *p)
{
    int *base = *(int **)0x02000134;
    if (p[4] == 0) {
        int *q;
        *(int *)((char *)base + 0xA34) = 3;
        q = (int *)((char *)base + 0xA38);
        q[3] = 63;
        q[2] = 64;
        q[0] = 0;
        q[1] = 4096;
    } else {
        int mode = *(int *)((char *)base + 0xA34);
        int r;
        int *q = (int *)((char *)base + 0xA38);
        int *q2 = (int *)((char *)base + 0xA48);
        if (mode == 1)
            r = q[0] == q[1] && q2[0] == q2[1];
        else if (mode == 2 || mode == 3)
            r = q[0] == q[1];
        else
            r = 1;
        if (((r << 24) & 0xFF000000) != 0) {
            p[2] = p[3];
            p[3] = -1;
        }
    }
    Sub_0800E258(p);
}
