AFTN.Objective
type 'a goal = {
goal_name : string;
This goal's name
*)kind : 'a;
What kind of goal
*)min_chars : int;
Number of required characters
*)}
Abstract type for named goals
type objective_kind =
| BringItemToLocation of Item.item * string
Bring item
to room designated by string
| CrewAtLocationWithMinimumScrap of string * int
Gather all crew at room designated by string
with int
scrap
| DropCoolant of int * string
Drop int
coolant canisters in the room designated by string
Classes of objectives
type objective = objective_kind goal
Objective goals
val string_of_objective : objective -> string
Get string representation of objective
type final_mission_kind =
| HurtAsh of int * int * bool
Deal int
damage to Ash, who tracks the Crew. If Ash meets a character without a CoolantCanister to damage him, lose int
morale. If bool
, then use an incinerator on the xenomorph after Ash has been defeated to win, otherwise the game ends when Ash is defeated
| DropItemsAndAssemble of (Item.item * string) list * Item.item list * string
Drop an item
in the room designated by string
for each member of the first list for each crew member. The crew must cumulatively have the item
s corresponding to members of the second list. Then they must assemble at the room designated by string
to end the game
| AlienCrewLocationsEncounter of string
* string list
* (Encounter.encounter ->
bool)
* string
The xenomorph must be in the room designated by string
. At least one character must be in each of the rooms desginated by the members of string list
. The game ends when a drawn encounter satisfies encounter -> bool
. This condition is described by string
.
| SelfDestructAssemble of int * string * Item.item * int
Start the self-destruct timer with int
counters. A counter is removed at the start of the turn of the character who drew the final mission. The game is lost when all counters are gone. The game is won when characters assemble in the room designated by string
holding an item
and int
scrap each
| SelfDestructClear of int
Start the self-destruct timer with int
counters as in SelfDestructAssemble. The game is instead won by clearing the events which have been placed at every room.
Classes of final missions
type final_mission = final_mission_kind goal
val string_of_final_mission :
final_mission ->
int ->
int ->
int ->
Map.room list ->
string
val objectives_stack : objective list
List of objectives to pull from
val final_mission_stack : final_mission list
val get_objectives : int -> objective list
Get a random list of n
objectives
val get_final_mission : unit -> final_mission
Get a random final mission