/** * Gets the best target for the current team. * * Stack: *none*. * * @param script The script engine to operate on. * @return The encoded index of the best target or 0 if none found. */ uint16 Script_Team_FindBestTarget(ScriptEngine *script) { Team *t; PoolFindStruct find; VARIABLE_NOT_USED(script); t = g_scriptCurrentTeam; find.houseID = t->houseID; find.index = 0xFFFF; find.type = 0xFFFF; while (true) { Unit *u; uint16 target; u = Unit_Find(&find); if (u == NULL) break; if (u->team - 1 != t->index) continue; target = Unit_FindBestTargetEncoded(u, t->action == TEAM_ACTION_KAMIKAZE ? 4 : 0); if (target == 0) continue; if (t->target == target) return target; t->target = target; t->targetTile = Tile_GetTileInDirectionOf(Tile_PackTile(u->o.position), Tools_Index_GetPackedTile(target)); return target; } return 0; }
/** * Gets the best target for the current unit. * * Stack: 1 - How to determine the best target. * * @param script The script engine to operate on. * @return The encoded index of the best target or 0 if none found. */ uint16 Script_Unit_FindBestTarget(ScriptEngine *script) { Unit *u; u = g_scriptCurrentUnit; return Unit_FindBestTargetEncoded(u, STACK_PEEK(1)); }