#include "game_types.h"

/* Level_FindTrigger @ 0x08008640 (real 148B) -- counts cyclic chains (or b-matches) over 32 entries. Mirrors src/matched/Level_FindTrigger.c. */
/* With c set, counts entries whose +140 chain cycles back to the entry
   (self-referential trigger chains). With c clear, counts flagged entries
   whose +656 word equals b. Returns the count. */
int Level_FindTrigger(int *a, int b, int c)
{
    int i, n = 0;
    if (((unsigned)c & 0xFF) != 0) {
        for (i = 0; i < 32; i++) {
            int *e = (int *)((char *)a + 516 + i * 260);
            if (e[0] != 0 || e[1] != 0) {
                int *p = e;
                for (;;) {
                    p = *(int **)((char *)p + 140);
                    if (p == 0)
                        break;
                    if (p == e) {
                        n++;
                        break;
                    }
                }
            }
        }
        return n;
    }
    for (i = 0; i < 32; i++) {
        int *e = (int *)((char *)a + 516 + i * 260);
        int *q = (int *)((char *)a + 656 + i * 260);
        if ((e[0] != 0 || e[1] != 0) && *q == b)
            n++;
    }
    return n;
}
