#include "game_types.h"

/* Object_Destroy @ 0x08000BBC (real 192B) -- tag-walking stream initializer (MAP/PNL/CHR/END). Mirrors src/matched/Object_Destroy.c. */
/* Walks a [tag][len][payload] stream to the "END " tag. "MAP " writes two
   u16 pairs plus their scaled-by-a[4]/a[5] products and a cursor pointer
   (advance len+10); "PNL " writes two u16s plus x8-scaled copies and a
   pointer (advance len+8); anything above "MAP " ("CHR ") or otherwise
   advances len+8. */
void Object_Destroy(int *a, unsigned char *cur)
{
    for (;;) {
        unsigned tag = cur[0] | ((unsigned)cur[1] << 8) |
                       ((unsigned)cur[2] << 16) | ((unsigned)cur[3] << 24);
        unsigned len;
        unsigned char *pl;
        if (tag == 0x20444E45) /* "END " */
            return;
        cur += 4;
        len = cur[0] | ((unsigned)cur[1] << 8) |
              ((unsigned)cur[2] << 16) | ((unsigned)cur[3] << 24);
        pl = cur + 8;
        if (tag == 0x2050414D) { /* "MAP " */
            unsigned p0 = pl[0] | ((unsigned)pl[1] << 8);
            unsigned p1 = pl[2] | ((unsigned)pl[3] << 8);
            ((unsigned short *)a)[6] = (unsigned short)p0;
            ((unsigned short *)a)[7] = (unsigned short)p1;
            ((unsigned short *)a)[8] =
                (unsigned short)(p0 * ((unsigned short *)a)[4]);
            ((unsigned short *)a)[9] =
                (unsigned short)(p1 * ((unsigned short *)a)[5]);
            a[6] = (int)(cur + 12);
            cur += len + 10;
        } else {
            if (tag == 0x204C4E50) { /* "PNL " */
                unsigned p0 = pl[0] | ((unsigned)pl[1] << 8);
                unsigned p1 = pl[2] | ((unsigned)pl[3] << 8);
                ((unsigned short *)a)[2] = (unsigned short)p0;
                ((unsigned short *)a)[3] = (unsigned short)p1;
                ((unsigned short *)a)[4] = (unsigned short)(p0 * 8);
                ((unsigned short *)a)[5] = (unsigned short)(p1 * 8);
                a[5] = (int)(cur + 14);
            }
            cur += len + 8;
        }
    }
}
