#include "game_types.h"

/* Player_UpdateIdle @ 0x08005214 (real 116B) -- registers the idle-mode callback by mode 0-3. Mirrors src/matched/Player_UpdateIdle.c. */
/* Selects the mode callback (0x08005B21/5BD1/5D11/5D99, k = 5 only in mode
   3) into q[2]/q[3] (q = p+68), then links q through the update-queue slot
   selected by k. Falls through with the mode itself for unknown modes. */
void Player_UpdateIdle(int *p)
{
    int *q = p + 17;
    int *t = *(int **)0x0200005C;
    int mode = p[24];
    int fn = mode;
    int k = 0;
    int *slot;
    switch (mode) {
    case 0:
        fn = 0x08005B21;
        break;
    case 1:
        fn = 0x08005BD1;
        break;
    case 2:
        fn = 0x08005D11;
        break;
    case 3:
        fn = 0x08005D99;
        k = 5;
        break;
    default:
        break;
    }
    q[2] = fn;
    q[3] = (int)p;
    slot = (int *)((char *)t[28] + (k << 4));
    q[0] = *(int **)slot[1];
    *(int **)slot[1] = (int)q;
    slot[1] = (int)q;
}
