// Give a group an order bool scrOrderGroup(void) { DROID_GROUP *psGroup; DROID_ORDER order; if (!stackPopParams(2, ST_GROUP, &psGroup, VAL_INT, &order)) { return false; } ASSERT(psGroup != NULL, "scrOrderGroup: Invalid group pointer"); if (order != DORDER_STOP && order != DORDER_RETREAT && order != DORDER_DESTRUCT && order != DORDER_RTR && order != DORDER_RTB && order != DORDER_RUN) { ASSERT(false, "scrOrderGroup: Invalid order"); return false; } debug(LOG_NEVER, "group %p (%u) order %d", psGroup, psGroup->getNumMembers(), order); psGroup->orderGroup(order); return true; }
// Give a group an order to an object bool scrOrderGroupObj(void) { DROID_GROUP *psGroup; DROID_ORDER order; BASE_OBJECT *psObj; if (!stackPopParams(3, ST_GROUP, &psGroup, VAL_INT, &order, ST_BASEOBJECT, &psObj)) { return false; } ASSERT(psGroup != NULL, "scrOrderGroupObj: Invalid group pointer"); ASSERT(psObj != NULL, "scrOrderGroupObj: Invalid object pointer"); if (order != DORDER_ATTACK && order != DORDER_HELPBUILD && order != DORDER_DEMOLISH && order != DORDER_REPAIR && order != DORDER_OBSERVE && order != DORDER_EMBARK && order != DORDER_FIRESUPPORT && order != DORDER_DROIDREPAIR) { ASSERT(false, "scrOrderGroupObj: Invalid order"); return false; } debug(LOG_NEVER, "group %p (%u) order %d, obj type %d player %d id %d", psGroup, psGroup->getNumMembers(), order, psObj->type, psObj->player, psObj->id); psGroup->orderGroup(order, psObj); return true; }
// Give a group an order to a location bool scrOrderGroupLoc(void) { DROID_GROUP *psGroup; DROID_ORDER order; SDWORD x, y; if (!stackPopParams(4, ST_GROUP, &psGroup, VAL_INT, &order, VAL_INT, &x, VAL_INT, &y)) { return false; } ASSERT(psGroup != NULL, "scrOrderGroupLoc: Invalid group pointer"); if (order != DORDER_MOVE && order != DORDER_SCOUT) { ASSERT(false, "scrOrderGroupLoc: Invalid order"); return false; } if (x < 0 || x > world_coord(mapWidth) || y < 0 || y > world_coord(mapHeight)) { ASSERT(false, "Invalid map location (%d, %d), max is (%d, %d)", x, y, world_coord(mapWidth), world_coord(mapHeight)); return false; } debug(LOG_NEVER, "group %p (%u) order %d (%d,%d)", psGroup, psGroup->getNumMembers(), order, x, y); psGroup->orderGroup(order, (UDWORD)x, (UDWORD)y); return true; }