/** * Free a Unit. * * @param address The address of the Unit to free. */ void Unit_Free(Unit* u) { int i; memset(&u->o.flags, 0, sizeof(u->o.flags)); Script_Reset(&u->o.script, g_scriptUnit); /* Walk the array to find the Unit we are removing */ for (i = 0; i < g_unitFindCount; i++) { if (g_unitFindArray[i] == u) break; } assert(i < g_unitFindCount); /* We should always find an entry */ g_unitFindCount--; { House* h = House_Get_ByIndex(u->o.houseID); h->unitCount--; } /* If needed, close the gap */ if (i == g_unitFindCount) return; memmove(&g_unitFindArray[i], &g_unitFindArray[i + 1], (g_unitFindCount - i) * sizeof(g_unitFindArray[0])); }
/** * Loads a new script for the current team. * * Stack: 1 - The script type. * * @param script The script engine to operate on. * @return The value 0. Always. */ uint16 Script_Team_Load(ScriptEngine *script) { Team *t; uint16 type; t = g_scriptCurrentTeam; type = STACK_PEEK(1); if (t->action == type) return 0; t->action = type; Script_Reset(&t->script, g_scriptTeam); Script_Load(&t->script, type & 0xFF); return 0; }
/** * Loads a new script for the current team. * * Stack: *none*. * * @param script The script engine to operate on. * @return The value 0. Always. */ uint16 Script_Team_Load2(ScriptEngine *script) { Team *t; uint16 type; VARIABLE_NOT_USED(script); t = g_scriptCurrentTeam; type = t->actionStart; if (t->action == type) return 0; t->action = type; Script_Reset(&t->script, g_scriptTeam); Script_Load(&t->script, type & 0xFF); return 0; }
/** * Free a Structure. * * @param address The address of the Structure to free. */ void Structure_Free(Structure *s) { int i; memset(&s->o.flags, 0, sizeof(s->o.flags)); Script_Reset(&s->o.script, g_scriptStructure); if (s->o.type == STRUCTURE_SLAB_1x1 || s->o.type == STRUCTURE_SLAB_2x2 || s->o.type == STRUCTURE_WALL) return; /* Walk the array to find the Structure we are removing */ assert(g_structureFindCount <= STRUCTURE_INDEX_MAX_SOFT); for (i = 0; i < g_structureFindCount; i++) { if (g_structureFindArray[i] == s) break; } assert(i < g_structureFindCount); /* We should always find an entry */ g_structureFindCount--; /* If needed, close the gap */ if (i == g_structureFindCount) return; memmove(&g_structureFindArray[i], &g_structureFindArray[i + 1], (g_structureFindCount - i) * sizeof(g_structureFindArray[0])); }