#include "game_types.h"

/* Sub_0800C6E8 @ 0x0800C6E8 (real 188B) -- mode dispatch: init block or pair-gated channel clear. Mirrors src/matched/Sub_0800C6E8.c. */
/* Zeros word 5 when word 4 is clear, then dispatches on word 5: 0/1 runs
   the init block (flag 2 + preset quad, republishing 1); 2 runs the
   pair-gated channel clear (publishing the 0x988 word); anything else
   exits. Shared idiom with D0D0/103E4/F134. */
extern int Sound_ClearChannel(int *base);

void Sub_0800C6E8(int *p)
{
    int *base = *(int **)0x02000134;
    int m;
    if (p[4] == 0)
        p[5] = 0;
    m = p[5];
    if (m < 0)
        return;
    if (m <= 1) {
        int *q = (int *)((char *)base + 0xA38);
        *(int *)((char *)base + 0xA34) = 2;
        q[3] = 63;
        q[2] = 128;
        q[0] = 4096;
        q[1] = 0;
        p[5] = 1;
        return;
    }
    if (m != 2)
        return;
    {
        int mode = *(int *)((char *)base + 0xA34);
        int ok;
        if (mode == 1) {
            int *q = (int *)((char *)base + 0xA38);
            int *q2 = (int *)((char *)base + 0xA48);
            ok = q[0] == q[1] && q2[0] == q2[1];
        } else if (mode == 2 || mode == 3) {
            int *q = (int *)((char *)base + 0xA38);
            ok = q[0] == q[1];
        } else {
            ok = 1;
        }
        if (!ok)
            return;
    }
    Sound_ClearChannel(base);
    base[1] = *(int *)((char *)base + 0x988);
}
