Win32 changes, TextureStore uses SDL.

git-svn-id: http://svn.berlios.de/svnroot/repos/oolite-linux/trunk@76 127b21dd-08f5-0310-b4b7-95ae10353056
This commit is contained in:
dajt 2005-06-08 10:14:52 +00:00
parent 1d83748d8f
commit 2a3ece755c
50 changed files with 7315 additions and 6516 deletions

View File

@ -134,6 +134,9 @@ extern int debug;
- (IBAction) goFullscreen:(id) sender;
- (void) exitFullScreenMode;
- (BOOL) inFullScreenMode;
#ifdef GNUSTEP
- (void) setFullScreenMode:(BOOL)fsm;
#endif
- (void) pauseFullScreenModeToPerform:(SEL) selector onTarget:(id) target;
- (void) exitApp;

View File

@ -327,7 +327,9 @@ static int _compareModes(id arg1, id arg2, void *context)
// back there under GNUstep.
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
gameView = [[MyOpenGLView alloc] initWithFrame: NSMakeRect(0, 0, DISPLAY_MIN_WIDTH, DISPLAY_MIN_HEIGHT)];
gameView = [MyOpenGLView alloc];
[gameView setFullScreenMode: fullscreen];
[gameView initWithFrame: NSMakeRect(0, 0, DISPLAY_MIN_WIDTH, DISPLAY_MIN_HEIGHT)];
[gameView setGameController: self];
#endif
@ -773,6 +775,13 @@ static int _compareModes(id arg1, id arg2, void *context)
#endif
}
#ifdef GNUSTEP
- (void) setFullScreenMode:(BOOL)fsm
{
fullscreen = fsm;
}
#endif
- (void) pauseFullScreenModeToPerform:(SEL) selector onTarget:(id) target
{

View File

@ -89,6 +89,7 @@ float char_widths[128] = {
}
// // init sprites
#ifndef WIN32
compassSprite = [[OpenGLSprite alloc] initWithImage:[ResourceManager imageNamed:COMPASS_IMAGE inFolder:@"Images"]
cropRectangle:NSMakeRect(0, 0, COMPASS_SIZE, COMPASS_SIZE)
size:NSMakeSize(COMPASS_HALF_SIZE, COMPASS_HALF_SIZE)]; // alloc retains
@ -110,7 +111,30 @@ float char_widths[128] = {
cropRectangle:NSMakeRect(w1*i, 0, w1, h1)
size:NSMakeSize(16, 16)]; // alloc retains
}
#else
compassSprite = [[OpenGLSprite alloc] initWithSurface:[ResourceManager surfaceNamed:COMPASS_IMAGE inFolder:@"Images"]
cropRectangle:NSMakeRect(0, 0, COMPASS_SIZE, COMPASS_SIZE)
size:NSMakeSize(COMPASS_HALF_SIZE, COMPASS_HALF_SIZE)]; // alloc retains
reddotSprite = [[OpenGLSprite alloc] initWithSurface:[ResourceManager surfaceNamed:COMPASS_REDDOT_IMAGE inFolder:@"Images"]
cropRectangle:NSMakeRect(0, 0, COMPASS_DOT_SIZE, COMPASS_DOT_SIZE)
size:NSMakeSize(COMPASS_HALF_DOT_SIZE, COMPASS_HALF_DOT_SIZE)]; // alloc retains
greendotSprite = [[OpenGLSprite alloc] initWithSurface:[ResourceManager surfaceNamed:COMPASS_GREENDOT_IMAGE inFolder:@"Images"]
cropRectangle:NSMakeRect(0, 0, COMPASS_DOT_SIZE, COMPASS_DOT_SIZE)
size:NSMakeSize(COMPASS_HALF_DOT_SIZE, COMPASS_HALF_DOT_SIZE)]; // alloc retains
aegisSprite = [[OpenGLSprite alloc] initWithSurface:[ResourceManager surfaceNamed:AEGIS_IMAGE inFolder:@"Images"]
cropRectangle:NSMakeRect(0, 0, 32, 32)
size:NSMakeSize(32, 32)]; // alloc retains
SDLImage *zoomLevelImage = [ResourceManager surfaceNamed:ZOOM_LEVELS_IMAGE inFolder:@"Images"];
int w1 = [zoomLevelImage size].width / SCANNER_ZOOM_LEVELS;
int h1 = [zoomLevelImage size].height;
for (i = 0; i < SCANNER_ZOOM_LEVELS; i++)
{
zoomLevelSprite[i] = [[OpenGLSprite alloc] initWithSurface:zoomLevelImage
cropRectangle:NSMakeRect(w1*i, 0, w1, h1)
size:NSMakeSize(16, 16)]; // alloc retains
}
#endif
// init arrays
dialArray = [[NSMutableArray alloc] initWithCapacity:16]; // alloc retains
legendArray = [[NSMutableArray alloc] initWithCapacity:16]; // alloc retains
@ -175,6 +199,7 @@ GLuint ascii_texture_name;
if ([info objectForKey:IMAGE_KEY])
{
//NSLog(@"DEBUG adding Legend %@",[info objectForKey:IMAGE_KEY]);
#ifndef WIN32
NSImage *legendImage = [ResourceManager imageNamed:(NSString *)[info objectForKey:IMAGE_KEY] inFolder:@"Images"];
NSSize imageSize = [legendImage size];
NSSize spriteSize = imageSize;
@ -182,8 +207,21 @@ GLuint ascii_texture_name;
spriteSize.width = [(NSNumber *)[info objectForKey:WIDTH_KEY] intValue];
if ([info objectForKey:HEIGHT_KEY])
spriteSize.height = [(NSNumber *)[info objectForKey:HEIGHT_KEY] intValue];
OpenGLSprite *legendSprite = [[OpenGLSprite alloc] initWithImage:legendImage
cropRectangle:NSMakeRect(0, 0, imageSize.width, imageSize.height) size:spriteSize]; // retained
#else
SDLImage *legendImage = [ResourceManager surfaceNamed:(NSString *)[info objectForKey:IMAGE_KEY] inFolder:@"Images"];
NSSize imageSize = [legendImage size];
NSSize spriteSize = imageSize;
if ([info objectForKey:WIDTH_KEY])
spriteSize.width = [(NSNumber *)[info objectForKey:WIDTH_KEY] intValue];
if ([info objectForKey:HEIGHT_KEY])
spriteSize.height = [(NSNumber *)[info objectForKey:HEIGHT_KEY] intValue];
OpenGLSprite *legendSprite = [[OpenGLSprite alloc] initWithSurface:legendImage
cropRectangle:NSMakeRect(0, 0, imageSize.width, imageSize.height) size:spriteSize]; // retained
#endif
NSMutableDictionary *legendDict = [NSMutableDictionary dictionaryWithDictionary:info];
[legendDict setObject:legendSprite forKey:SPRITE_KEY];
[legendArray addObject:legendDict];

View File

@ -147,6 +147,9 @@ extern int debug;
- (void) snapShot;
- (BOOL) inFullScreenMode;
#ifdef GNUSTEP
- (void) setFullScreenMode:(BOOL)fsm;
#endif
/*
// These are standard methods in NSView.

View File

@ -50,12 +50,12 @@ Your fair use and other rights are in no way affected by the above.
SDL_VERSION(&dpyInfo.version);
if(SDL_GetWMInfo(&dpyInfo))
{
#ifdef LINUX
#if defined(LINUX) && ! defined (WIN32)
dpySize.width=DisplayWidth(dpyInfo.info.x11.display, 0);
dpySize.height=DisplayHeight(dpyInfo.info.x11.display, 0);
#else
NSLog(@"Unknown architecture, defaulting to 1024x768");
dpySize=NSMakeSize(1024,768);
dpySize=NSMakeSize(1024, 768);
#endif
}
else
@ -97,9 +97,12 @@ Your fair use and other rights are in no way affected by the above.
screenSizes[1] = NSMakeSize(800, 600);
screenSizes[2] = NSMakeSize(1024, 768);
currentSize = 0;
fullScreen = NO;
surface = SDL_SetVideoMode((int)frameRect.size.width, (int)frameRect.size.height, 32, SDL_HWSURFACE | SDL_OPENGL);
int videoModeFlags = SDL_HWSURFACE | SDL_OPENGL;
if (fullScreen)
videoModeFlags |= SDL_FULLSCREEN;
surface = SDL_SetVideoMode((int)frameRect.size.width, (int)frameRect.size.height, 32, videoModeFlags);
bounds.size.width = surface->w;
bounds.size.height = surface->h;
@ -187,6 +190,13 @@ Your fair use and other rights are in no way affected by the above.
return fullScreen;
}
#ifdef GNUSTEP
- (void) setFullScreenMode:(BOOL)fsm
{
fullScreen = fsm;
}
#endif
- (void) display
{
[self drawRect: NSMakeRect(0, 0, viewSize.width, viewSize.height)];

View File

@ -47,6 +47,7 @@ Your fair use and other rights are in no way affected by the above.
#ifdef LINUX
#include "oolite-linux.h"
#include "SDLImage.h"
#else
#import <OpenGL/gl.h>
#import <OpenGL/glu.h>
@ -86,5 +87,10 @@ extern int debug;
- (void)replaceTextureFromImage:(NSImage *)texImage cropRectangle:(NSRect)cropRect;
- (void)substituteTextureFromImage:(NSImage *)texImage;
#ifdef GNUSTEP
- (id) initWithSurface:(SDLImage *)textureImage cropRectangle:(NSRect)cropRect size:(NSSize) spriteSize;
- (void)makeTextureFromSurface:(SDLImage *)texImage cropRectangle:(NSRect)cropRect size:(NSSize)spriteSize;
#endif
@end

View File

@ -39,6 +39,21 @@ Your fair use and other rights are in no way affected by the above.
#import "OpenGLSprite.h"
#ifdef GNUSTEP
/* SDL interprets each pixel as a 32-bit number, so our masks must depend
on the endianness (byte order) of the machine */
#if SDL_BYTEORDER == SDL_BIG_ENDIAN
Uint32 rmask = 0xff000000;
Uint32 gmask = 0x00ff0000;
Uint32 bmask = 0x0000ff00;
Uint32 amask = 0x000000ff;
#else
Uint32 rmask = 0x000000ff;
Uint32 gmask = 0x0000ff00;
Uint32 bmask = 0x00ff0000;
Uint32 amask = 0xff000000;
#endif
#endif
@implementation OpenGLSprite
@ -58,6 +73,7 @@ Your fair use and other rights are in no way affected by the above.
- (id) initWithText:(NSString *)str
{
#ifndef GNUSTEP
NSImage *image;
NSSize strsize;
NSMutableDictionary *stringAttributes = [NSMutableDictionary dictionaryWithObjectsAndKeys:
@ -82,11 +98,14 @@ Your fair use and other rights are in no way affected by the above.
[image release];
return self;
#else
return nil;
#endif
}
- (id) initWithText:(NSString *)str ofColor:(NSColor *) textColor
{
#ifndef GNUSTEP
NSImage *image;
NSSize strsize;
NSMutableDictionary *stringAttributes = [NSMutableDictionary dictionaryWithObjectsAndKeys:
@ -111,7 +130,9 @@ Your fair use and other rights are in no way affected by the above.
[image release];
return self;
#else
return nil;
#endif
}
- (void) dealloc
@ -168,6 +189,7 @@ Your fair use and other rights are in no way affected by the above.
- (void) setText:(NSString *)str
{
#ifndef GNUSTEP
NSImage *image;
NSSize strsize;
@ -195,6 +217,7 @@ Your fair use and other rights are in no way affected by the above.
//
//NSLog(@"%@ message sprite [ %f, %f ]", str, [image size].width, [image size].height);
//
#endif
}
@ -360,5 +383,99 @@ Your fair use and other rights are in no way affected by the above.
[bitmapImageRep release];
}
#ifdef GNUSTEP
- (id) initWithSurface:(SDLImage *)textureImage cropRectangle:(NSRect)cropRect size:(NSSize) spriteSize
{
self = [super init];
[self makeTextureFromSurface:textureImage cropRectangle:cropRect size:spriteSize];
return self;
}
- (void)makeTextureFromSurface:(SDLImage *)texImage cropRectangle:(NSRect)cropRect size:(NSSize)spriteSize
{
//NSBitmapImageRep *bitmapImageRep;
NSRect textureRect = NSMakeRect(0.0,0.0,OPEN_GL_SPRITE_MIN_WIDTH,OPEN_GL_SPRITE_MIN_HEIGHT);
SDL_Surface *surface;
if (!texImage)
return;
SDL_Surface *texSurface = [texImage surface];
SDL_SetAlpha(texSurface, 0, SDL_ALPHA_OPAQUE);
//NSLog(@"makeTextureFromSurface: texImage dimensions: %d x %d", texSurface->w, texSurface->h);
size = spriteSize;
textureCropRect = cropRect;
while (textureRect.size.width < cropRect.size.width)
textureRect.size.width *= 2;
while (textureRect.size.height < cropRect.size.height)
textureRect.size.height *= 2;
textureRect.origin= NSMakePoint(0,0);
textureCropRect.origin= NSMakePoint(0,0);
textureSize = textureRect.size;
//image = [[NSImage alloc] initWithSize:textureRect.size]; // retained
//NSLog(@"makeTextureFromSurface: texture surface dimensions: %d x %d", (int)textureRect.size.width, (int)textureRect.size.height);
surface = SDL_CreateRGBSurface(SDL_SWSURFACE, (int)textureRect.size.width, (int)textureRect.size.height, 32, rmask, gmask, bmask, amask);
//[image lockFocus];
//[[NSColor clearColor] set];
//NSRectFill(textureRect);
SDL_FillRect(surface, (SDL_Rect *)0x00, SDL_MapRGBA(surface->format, 0, 0, 0, SDL_ALPHA_TRANSPARENT));
//[texImage drawInRect:textureCropRect fromRect:cropRect operation:NSCompositeSourceOver fraction:1.0];
//bitmapImageRep = [[NSBitmapImageRep alloc] initWithFocusedViewRect:textureRect]; // retained
//[image unlockFocus];
SDL_Rect srcRect, destRect;
srcRect.x = (int)cropRect.origin.x; srcRect.y = (int)cropRect.origin.y; srcRect.w = (int)cropRect.size.width; srcRect.h = (int)cropRect.size.height;
destRect.x = 0; destRect.y = 0;
SDL_BlitSurface(texSurface, &srcRect, surface, &destRect);
//NSLog(@"destRect x: %d, y: %d, w: %d, h: %d", destRect.x, destRect.y, destRect.w, destRect.h);
//[image release]; // released
// normalise textureCropRect size to 0.0 -> 1.0
textureCropRect.size.width /= textureRect.size.width;
textureCropRect.size.height /= textureRect.size.height;
int n_bytes = surface->format->BytesPerPixel * surface->w * surface->h;
//unsigned char *buffer = malloc(n_bytes);
SDL_LockSurface(surface);
//memcpy(buffer, surface->pixels, n_bytes);
if (textureData)
[textureData release];
//textureData = [[NSData dataWithBytes:[bitmapImageRep bitmapData] length:n_bytes] retain];
//[bitmapImageRep release]; // released
//textureData = [[NSData dataWithBytesNoCopy: buffer length: n_bytes] retain];
textureData = [[NSData dataWithBytes:surface->pixels length:surface->w * surface->h * surface->format->BytesPerPixel] retain];
SDL_UnlockSurface(surface);
SDL_FreeSurface(surface);
if (texName !=0)
{
const GLuint delTextures[1] = { texName };
glDeleteTextures(1, delTextures);
texName = 0; // clean up the texture from the 3d card's memory
}
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glGenTextures(1, &texName); // get a new unique texture name
glBindTexture(GL_TEXTURE_2D, texName); // initialise it
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, textureRect.size.width, textureRect.size.height, 0, GL_RGBA, GL_UNSIGNED_BYTE, [textureData bytes]);
}
#endif
@end

View File

@ -138,9 +138,14 @@ NSMutableDictionary* surface_cache;
[errors release];
errors = nil;
}
#ifndef WIN32
NSString *app_path = [[[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"Contents"] stringByAppendingPathComponent:@"Resources"];
NSString *addon_path = [[[[NSBundle mainBundle] bundlePath] stringByDeletingLastPathComponent] stringByAppendingPathComponent:@"AddOns"];
#else
NSString *app_path = @"oolite.app/Contents/Resources";
NSString *addon_path = @"AddOns";
#endif
NSMutableArray *file_paths = [NSMutableArray arrayWithCapacity:16];
[file_paths addObject:app_path];
if (include_addons)

View File

@ -1,8 +1,15 @@
{
GLOBAL = {
ATTACKED = (setTargetToPrimaryAggressor, broadcastDistressMessage);
ENTER = (performIdle);
EXIT = ();
UPDATE = ();
};
ATTACKED = (
setTargetToPrimaryAggressor,
broadcastDistressMessage
);
ENTER = (
performIdle
);
EXIT = (
);
UPDATE = (
);
};
}

View File

@ -1,14 +1,39 @@
{
GLOBAL = {
ENTER = (
"setStateTo: LOOT"
);
EXIT = (
);
UPDATE = (
);
};
LOOT = {
ATTACKED = (exitAI);
"COLLISION" = (exitAI);
"CARGO_SCOOPED" = (exitAI);
ENTER = (performCollect);
EXIT = ();
"HOLD_FULL" = (exitAI);
"INCOMING_MISSILE" = (fightOrFleeMissile, exitAI);
"TARGET_LOST" = (exitAI);
UPDATE = ();
};
GLOBAL = {ENTER = ("setStateTo: LOOT"); EXIT = (); UPDATE = (); };
ATTACKED = (
exitAI
);
CARGO_SCOOPED = (
exitAI
);
COLLISION = (
exitAI
);
ENTER = (
performCollect
);
EXIT = (
);
HOLD_FULL = (
exitAI
);
INCOMING_MISSILE = (
fightOrFleeMissile,
exitAI
);
TARGET_LOST = (
exitAI
);
UPDATE = (
);
};
}

View File

@ -1,85 +1,216 @@
{
"AWAIT_COORDS" = {
"APPROACH_START" = ("setStateTo: GO_TO_START");
"APPROACH_COORDINATES" = ("setStateTo: GO_TO_COORDS");
"APPROACH_STATION" = ("setStateTo: GO_TO_STATION");
"HOLD_POSITION" = (performIdle, "pauseAI: 10.0", "setStateTo: GLOBAL");
"DOCKING_ABORTED" = ("setStateTo: ABORT");
"TRY_AGAIN_LATER" = ("pauseAI: 30.0", "setStateTo: ABORT");
"COLLISION" = ("setStateTo: ABORT");
"RESTART_DOCKING" = ("setStateTo: GLOBAL");
DOCKED = ("setStateTo: EXIT_SYSTEM");
ENTER = ();
EXIT = ();
UPDATE = ();
};
"EXIT_SYSTEM" = {ENTER = (performDocking, exitAI); EXIT = (); UPDATE = (); };
ABORT = {
ENTER = (abortDocking, "setSpeedFactorTo: 0.0", setDestinationToDockingAbort, "setDesiredRangeTo: 500.0", performFaceDestination);
"FACING_DESTINATION" = ("setSpeedFactorTo: 1.0", "setDesiredRangeTo: 500.0", performFlyToRangeFromDestination);
EXIT = ();
"RESTART_DOCKING" = ("setStateTo: GLOBAL");
"REACHED_SAFETY" = (performIdle, "setStateTo: GLOBAL");
"DESIRED_RANGE_ACHIEVED" = (performIdle, "setStateTo: GLOBAL");
UPDATE = ();
};
DESIRED_RANGE_ACHIEVED = (
performIdle,
"setStateTo: GLOBAL"
);
ENTER = (
abortDocking,
"setSpeedFactorTo: 0.0",
setDestinationToDockingAbort,
"setDesiredRangeTo: 500.0",
performFaceDestination
);
EXIT = (
);
FACING_DESTINATION = (
"setSpeedFactorTo: 1.0",
"setDesiredRangeTo: 500.0",
performFlyToRangeFromDestination
);
REACHED_SAFETY = (
performIdle,
"setStateTo: GLOBAL"
);
RESTART_DOCKING = (
"setStateTo: GLOBAL"
);
UPDATE = (
);
};
AWAIT_COORDS = {
APPROACH_COORDINATES = (
"setStateTo: GO_TO_COORDS"
);
APPROACH_START = (
"setStateTo: GO_TO_START"
);
APPROACH_STATION = (
"setStateTo: GO_TO_STATION"
);
COLLISION = (
"setStateTo: ABORT"
);
DOCKED = (
"setStateTo: EXIT_SYSTEM"
);
DOCKING_ABORTED = (
"setStateTo: ABORT"
);
ENTER = (
);
EXIT = (
);
HOLD_POSITION = (
performIdle,
"pauseAI: 10.0",
"setStateTo: GLOBAL"
);
RESTART_DOCKING = (
"setStateTo: GLOBAL"
);
TRY_AGAIN_LATER = (
"pauseAI: 30.0",
"setStateTo: ABORT"
);
UPDATE = (
);
};
EXIT_SYSTEM = {
ENTER = (
performDocking,
exitAI
);
EXIT = (
);
UPDATE = (
);
};
GLOBAL = {
ENTER = ("setSpeedTo: 0.0", "setDesiredRangeTo: 5.0", requestDockingCoordinates, "setStateTo: AWAIT_COORDS");
EXIT = ();
UPDATE = ();
};
"GO_TO_WAYPOINT" = {
ENTER = ("setDesiredRangeTo: 50.0", checkCourseToDestination);
"COURSE_OK" = ("setSpeedFactorTo: 0.85", performFlyToRangeFromDestination);
"WAYPOINT_SET" = ("setDesiredRangeTo: 50.0", checkCourseToDestination);
"DESIRED_RANGE_ACHIEVED" = ("setStateTo: GO_TO_STATION");
EXIT = ();
UPDATE = ();
};
"GO_TO_START" = {
ENTER = (
"setSpeedFactorTo: 0.05",
setDestinationFromCoordinates,
checkCourseToDestination
);
"WAYPOINT_SET" = ("setStateTo: GO_TO_WAYPOINT");
"COURSE_OK" = ("setSpeedFactorTo: 0.25", performFaceDestination);
"FACING_DESTINATION" = ("setDesiredRangeTo: 50.0", "setSpeedFactorTo: 0.85", performFlyToRangeFromDestination);
"DESIRED_RANGE_ACHIEVED" = (requestDockingCoordinates, "setStateTo: AWAIT_COORDS");
"DOCKING_ABORTED" = ("setStateTo: ABORT");
"COLLISION" = ("setStateTo: ABORT");
"RESTART_DOCKING" = ("setStateTo: GLOBAL");
EXIT = ();
UPDATE = ();
};
"GO_TO_COORDS" = {
ENTER = (setDestinationFromCoordinates, performFaceDestination);
FRUSTRATED = (performIdle, "pauseAI: 5.0", setDestinationFromCoordinates, performFaceDestination);
"FACING_DESTINATION" = ("setDesiredRangeTo: 50.0", "setSpeedTo: 100.0", performFlyToRangeFromDestination);
"DESIRED_RANGE_ACHIEVED" = (requestDockingCoordinates, "setStateTo: AWAIT_COORDS");
"DOCKING_ABORTED" = ("setStateTo: ABORT");
"COLLISION" = ("setStateTo: ABORT");
"RESTART_DOCKING" = ("setStateTo: GLOBAL");
EXIT = ();
UPDATE = ();
};
"GO_TO_STATION" = {
ENTER = (
setTargetToStation,
setDestinationFromCoordinates,
performFaceDestination
);
FRUSTRATED = (
setTargetToStation,
setDestinationFromCoordinates,
performFaceDestination
);
"FACING_DESTINATION" = ("setDesiredRangeTo: 10.0", "setSpeedTo: 50.0", performFlyToRangeFromDestination);
"DESIRED_RANGE_ACHIEVED" = (requestDockingCoordinates, "setStateTo: AWAIT_COORDS");
"DOCKING_ABORTED" = ("setStateTo: ABORT");
"RESTART_DOCKING" = ("setStateTo: GLOBAL");
"COLLISION" = ("setStateTo: ABORT");
EXIT = ();
UPDATE = ();
};
}
ENTER = (
"setSpeedTo: 0.0",
"setDesiredRangeTo: 5.0",
requestDockingCoordinates,
"setStateTo: AWAIT_COORDS"
);
EXIT = (
);
UPDATE = (
);
};
GO_TO_COORDS = {
COLLISION = (
"setStateTo: ABORT"
);
DESIRED_RANGE_ACHIEVED = (
requestDockingCoordinates,
"setStateTo: AWAIT_COORDS"
);
DOCKING_ABORTED = (
"setStateTo: ABORT"
);
ENTER = (
setDestinationFromCoordinates,
performFaceDestination
);
EXIT = (
);
FACING_DESTINATION = (
"setDesiredRangeTo: 50.0",
"setSpeedTo: 100.0",
performFlyToRangeFromDestination
);
FRUSTRATED = (
performIdle,
"pauseAI: 5.0",
setDestinationFromCoordinates,
performFaceDestination
);
RESTART_DOCKING = (
"setStateTo: GLOBAL"
);
UPDATE = (
);
};
GO_TO_START = {
COLLISION = (
"setStateTo: ABORT"
);
COURSE_OK = (
"setSpeedFactorTo: 0.25",
performFaceDestination
);
DESIRED_RANGE_ACHIEVED = (
requestDockingCoordinates,
"setStateTo: AWAIT_COORDS"
);
DOCKING_ABORTED = (
"setStateTo: ABORT"
);
ENTER = (
"setSpeedFactorTo: 0.05",
setDestinationFromCoordinates,
checkCourseToDestination
);
EXIT = (
);
FACING_DESTINATION = (
"setDesiredRangeTo: 50.0",
"setSpeedFactorTo: 0.85",
performFlyToRangeFromDestination
);
RESTART_DOCKING = (
"setStateTo: GLOBAL"
);
UPDATE = (
);
WAYPOINT_SET = (
"setStateTo: GO_TO_WAYPOINT"
);
};
GO_TO_STATION = {
COLLISION = (
"setStateTo: ABORT"
);
DESIRED_RANGE_ACHIEVED = (
requestDockingCoordinates,
"setStateTo: AWAIT_COORDS"
);
DOCKING_ABORTED = (
"setStateTo: ABORT"
);
ENTER = (
setTargetToStation,
setDestinationFromCoordinates,
performFaceDestination
);
EXIT = (
);
FACING_DESTINATION = (
"setDesiredRangeTo: 10.0",
"setSpeedTo: 50.0",
performFlyToRangeFromDestination
);
FRUSTRATED = (
setTargetToStation,
setDestinationFromCoordinates,
performFaceDestination
);
RESTART_DOCKING = (
"setStateTo: GLOBAL"
);
UPDATE = (
);
};
GO_TO_WAYPOINT = {
COURSE_OK = (
"setSpeedFactorTo: 0.85",
performFlyToRangeFromDestination
);
DESIRED_RANGE_ACHIEVED = (
"setStateTo: GO_TO_STATION"
);
ENTER = (
"setDesiredRangeTo: 50.0",
checkCourseToDestination
);
EXIT = (
);
UPDATE = (
);
WAYPOINT_SET = (
"setDesiredRangeTo: 50.0",
checkCourseToDestination
);
};
}

View File

@ -1,3 +1,11 @@
{
GLOBAL = {ENTER = ("performTumble"); EXIT = (); UPDATE = (); };
GLOBAL = {
ENTER = (
performTumble
);
EXIT = (
);
UPDATE = (
);
};
}

View File

@ -1,33 +1,95 @@
{
"FLYING_ESCORT" = {
ENTER = (performEscort);
"GROUP_ATTACK_TARGET" = (setTargetToFoundTarget, "setAITo: interceptAI.plist");
RESTARTED = ("setStateTo: BEGIN_BUSINESS");
ESCORTING = ("setDesiredRangeTo: 0.0", performEscort);
"INCOMING_MISSILE" = ("messageMother: INCOMING_MISSILE");
"ATTACKED" = ("messageMother: ATTACKED");
"NOT_ESCORTING" = ("setStateTo: LOOK_FOR_BUSINESS");
"TARGET_LOST" = ("setStateTo: LOOK_FOR_BUSINESS");
"TARGET_DESTROYED" = ("setStateTo: LOOK_FOR_BUSINESS");
EXIT = ();
UPDATE = (escortCheckMother, "pauseAI: 15");
};
"BEGIN_BUSINESS" = {
ATTACKED = (setTargetToPrimaryAggressor, "setAITo: interceptAI.plist");
ENTER = (escortCheckMother);
EXIT = ();
ESCORTING = ("setDesiredRangeTo: 0.0", performEscort);
"NOT_ESCORTING" = ("setStateTo: LOOK_FOR_BUSINESS");
UPDATE = ();
};
"LOOK_FOR_BUSINESS" = {
ATTACKED = (setTargetToPrimaryAggressor, "setAITo: interceptAI.plist");
RESTARTED = ("setStateTo: BEGIN_BUSINESS");
ENTER = ("setSpeedTo: 0.0", performIdle);
EXIT = ();
ESCORTING = ("setDesiredRangeTo: 0.0", "setStateTo: FLYING_ESCORT");
"TARGET_FOUND" = (setTargetToFoundTarget, suggestEscort);
UPDATE = (scanForFormationLeader, "pauseAI: 15.0");
};
GLOBAL = {ENTER = ("setStateTo: BEGIN_BUSINESS"); EXIT = (); UPDATE = (); };
BEGIN_BUSINESS = {
ATTACKED = (
setTargetToPrimaryAggressor,
"setAITo: interceptAI.plist"
);
ENTER = (
escortCheckMother
);
ESCORTING = (
"setDesiredRangeTo: 0.0",
performEscort
);
EXIT = (
);
NOT_ESCORTING = (
"setStateTo: LOOK_FOR_BUSINESS"
);
UPDATE = (
);
};
FLYING_ESCORT = {
ATTACKED = (
"messageMother: ATTACKED"
);
ENTER = (
performEscort
);
ESCORTING = (
"setDesiredRangeTo: 0.0",
performEscort
);
EXIT = (
);
GROUP_ATTACK_TARGET = (
setTargetToFoundTarget,
"setAITo: interceptAI.plist"
);
INCOMING_MISSILE = (
"messageMother: INCOMING_MISSILE"
);
NOT_ESCORTING = (
"setStateTo: LOOK_FOR_BUSINESS"
);
RESTARTED = (
"setStateTo: BEGIN_BUSINESS"
);
TARGET_DESTROYED = (
"setStateTo: LOOK_FOR_BUSINESS"
);
TARGET_LOST = (
"setStateTo: LOOK_FOR_BUSINESS"
);
UPDATE = (
escortCheckMother,
"pauseAI: 15"
);
};
GLOBAL = {
ENTER = (
"setStateTo: BEGIN_BUSINESS"
);
EXIT = (
);
UPDATE = (
);
};
LOOK_FOR_BUSINESS = {
ATTACKED = (
setTargetToPrimaryAggressor,
"setAITo: interceptAI.plist"
);
ENTER = (
"setSpeedTo: 0.0",
performIdle
);
ESCORTING = (
"setDesiredRangeTo: 0.0",
"setStateTo: FLYING_ESCORT"
);
EXIT = (
);
RESTARTED = (
"setStateTo: BEGIN_BUSINESS"
);
TARGET_FOUND = (
setTargetToFoundTarget,
suggestEscort
);
UPDATE = (
scanForFormationLeader,
"pauseAI: 15.0"
);
};
}

View File

@ -1,35 +1,118 @@
{
"ATTACK_SHIP" = {
"ENERGY_LOW" = ("setSpeedFactorTo: 1.0", "pauseAI: 15.0", "setStateTo: EXIT_SYSTEM");
ENTER = (performAttack);
EXIT = ();
"INCOMING_MISSILE" = (fightOrFleeMissile, "setSpeedFactorTo: 1.0", "pauseAI: 15.0", "setStateTo: EXIT_SYSTEM");
"TARGET_DESTROYED" = ("setStateTo: HEAD_AWAY_FROM_PLANET");
"TARGET_LOST" = ("setStateTo: HEAD_AWAY_FROM_PLANET");
UPDATE = ();
};
"EXIT_SYSTEM" = {ENTER = (); EXIT = (); UPDATE = (performHyperSpaceExit); };
ATTACK_SHIP = {
ENERGY_LOW = (
"setSpeedFactorTo: 1.0",
"pauseAI: 15.0",
"setStateTo: EXIT_SYSTEM"
);
ENTER = (
performAttack
);
EXIT = (
);
INCOMING_MISSILE = (
fightOrFleeMissile,
"setSpeedFactorTo: 1.0",
"pauseAI: 15.0",
"setStateTo: EXIT_SYSTEM"
);
TARGET_DESTROYED = (
"setStateTo: HEAD_AWAY_FROM_PLANET"
);
TARGET_LOST = (
"setStateTo: HEAD_AWAY_FROM_PLANET"
);
UPDATE = (
);
};
EXIT_SYSTEM = {
ENTER = (
);
EXIT = (
);
UPDATE = (
performHyperSpaceExit
);
};
FLEE = {
ATTACKED = (fightOrFleeHostiles);
FIGHTING = (setTargetToPrimaryAggressor, "setStateTo: ATTACK_SHIP");
FLEEING = (setTargetToPrimaryAggressor, "setStateTo: FLEE");
"TARGET_LOST" = (performIdle, "setStateTo: GLOBAL");
"TARGET_DESTROYED" = (performIdle, "setStateTo: GLOBAL");
ENTER = ("setDesiredRangeTo: 25600", performFlee);
EXIT = ();
"INCOMING_MISSILE" = (setTargetToPrimaryAggressor, broadcastDistressMessage, fightOrFleeMissile);
"REACHED_SAFETY" = (performIdle, "setStateTo: GLOBAL");
UPDATE = ();
};
"HEAD_AWAY_FROM_PLANET" = {
ENTER = (getWitchspaceEntryCoordinates, setDestinationFromCoordinates, "setDesiredRangeTo: 100.0", "setSpeedFactorTo: 0.75", performFlyToRangeFromDestination);
"DESIRED_RANGE_ACHIEVED" = (dockEscorts, "setSpeedFactorTo: 1.0", "pauseAI: 15.0", "setStateTo: EXIT_SYSTEM");
ATTACKED = (fightOrFleeHostiles);
FIGHTING = (setTargetToPrimaryAggressor, "setStateTo: ATTACK_SHIP");
FLEEING = (setTargetToPrimaryAggressor, "setStateTo: FLEE");
"INCOMING_MISSILE" = (fightOrFleeMissile, "setStateTo: FLEE");
EXIT = ();
UPDATE = ();
};
GLOBAL = {ENTER = ("setStateTo: HEAD_AWAY_FROM_PLANET"); EXIT = (); UPDATE = (); };
ATTACKED = (
fightOrFleeHostiles
);
ENTER = (
"setDesiredRangeTo: 25600",
performFlee
);
EXIT = (
);
FIGHTING = (
setTargetToPrimaryAggressor,
"setStateTo: ATTACK_SHIP"
);
FLEEING = (
setTargetToPrimaryAggressor,
"setStateTo: FLEE"
);
INCOMING_MISSILE = (
setTargetToPrimaryAggressor,
broadcastDistressMessage,
fightOrFleeMissile
);
REACHED_SAFETY = (
performIdle,
"setStateTo: GLOBAL"
);
TARGET_DESTROYED = (
performIdle,
"setStateTo: GLOBAL"
);
TARGET_LOST = (
performIdle,
"setStateTo: GLOBAL"
);
UPDATE = (
);
};
GLOBAL = {
ENTER = (
"setStateTo: HEAD_AWAY_FROM_PLANET"
);
EXIT = (
);
UPDATE = (
);
};
HEAD_AWAY_FROM_PLANET = {
ATTACKED = (
fightOrFleeHostiles
);
DESIRED_RANGE_ACHIEVED = (
dockEscorts,
"setSpeedFactorTo: 1.0",
"pauseAI: 15.0",
"setStateTo: EXIT_SYSTEM"
);
ENTER = (
getWitchspaceEntryCoordinates,
setDestinationFromCoordinates,
"setDesiredRangeTo: 100.0",
"setSpeedFactorTo: 0.75",
performFlyToRangeFromDestination
);
EXIT = (
);
FIGHTING = (
setTargetToPrimaryAggressor,
"setStateTo: ATTACK_SHIP"
);
FLEEING = (
setTargetToPrimaryAggressor,
"setStateTo: FLEE"
);
INCOMING_MISSILE = (
fightOrFleeMissile,
"setStateTo: FLEE"
);
UPDATE = (
);
};
}

View File

@ -1,23 +1,73 @@
{
"GO_TO_WAYPOINT" = {
ENTER = ("setDesiredRangeTo: 50.0", checkCourseToDestination);
"COURSE_OK" = ("setSpeedFactorTo: 1.0", performFlyToRangeFromDestination);
"WAYPOINT_SET" = ("setDesiredRangeTo: 50.0", checkCourseToDestination);
"DESIRED_RANGE_ACHIEVED" = ("setStateTo: GLOBAL");
ATTACKED = (setTargetToPrimaryAggressor, broadcastDistressMessage, "setStateTo: FLEE");
"INCOMING_MISSILE" = (fightOrFleeMissile, "setStateTo: FLEE");
EXIT = ();
UPDATE = ();
};
"FLY_HOME" = {
ENTER = (setCourseToPlanet, checkCourseToDestination);
"COURSE_OK" = ("setSpeedFactorTo: 1.0", performFlyToRangeFromDestination);
"WAYPOINT_SET" = ("setStateTo: GO_TO_WAYPOINT");
"DESIRED_RANGE_ACHIEVED" = (landOnPlanet);
EXIT = ();
ATTACKED = (setTargetToPrimaryAggressor, broadcastDistressMessage, "setStateTo: FLEE");
"INCOMING_MISSILE" = (fightOrFleeMissile, "setStateTo: FLEE");
UPDATE = (checkCourseToDestination, "pauseAI: 10.0");
};
GLOBAL = {ENTER = ("setSpeedFactorTo: 0.25", "setStateTo: FLY_HOME"); EXIT = (); UPDATE = (); };
FLY_HOME = {
ATTACKED = (
setTargetToPrimaryAggressor,
broadcastDistressMessage,
"setStateTo: FLEE"
);
COURSE_OK = (
"setSpeedFactorTo: 1.0",
performFlyToRangeFromDestination
);
DESIRED_RANGE_ACHIEVED = (
landOnPlanet
);
ENTER = (
setCourseToPlanet,
checkCourseToDestination
);
EXIT = (
);
INCOMING_MISSILE = (
fightOrFleeMissile,
"setStateTo: FLEE"
);
UPDATE = (
checkCourseToDestination,
"pauseAI: 10.0"
);
WAYPOINT_SET = (
"setStateTo: GO_TO_WAYPOINT"
);
};
GLOBAL = {
ENTER = (
"setSpeedFactorTo: 0.25",
"setStateTo: FLY_HOME"
);
EXIT = (
);
UPDATE = (
);
};
GO_TO_WAYPOINT = {
ATTACKED = (
setTargetToPrimaryAggressor,
broadcastDistressMessage,
"setStateTo: FLEE"
);
COURSE_OK = (
"setSpeedFactorTo: 1.0",
performFlyToRangeFromDestination
);
DESIRED_RANGE_ACHIEVED = (
"setStateTo: GLOBAL"
);
ENTER = (
"setDesiredRangeTo: 50.0",
checkCourseToDestination
);
EXIT = (
);
INCOMING_MISSILE = (
fightOrFleeMissile,
"setStateTo: FLEE"
);
UPDATE = (
);
WAYPOINT_SET = (
"setDesiredRangeTo: 50.0",
checkCourseToDestination
);
};
}

View File

@ -1,8 +1,15 @@
{
GLOBAL = {
"DESIRED_RANGE_ACHIEVED" = (landOnPlanet);
ENTER = (setCourseToPlanet, performFlyToRangeFromDestination);
EXIT = ();
UPDATE = ();
};
DESIRED_RANGE_ACHIEVED = (
landOnPlanet
);
ENTER = (
setCourseToPlanet,
performFlyToRangeFromDestination
);
EXIT = (
);
UPDATE = (
);
};
}

View File

@ -1,21 +1,61 @@
{
"ATTACK_SHIP" = {
"ENERGY_LOW" = ("setStateTo: FLEE");
ENTER = (performAttack);
EXIT = ();
"INCOMING_MISSILE" = (fightOrFleeMissile, "setStateTo: FLEE");
"TARGET_DESTROYED" = (switchLightsOff, exitAI);
"TARGET_LOST" = (switchLightsOff, exitAI);
UPDATE = ();
};
ATTACK_SHIP = {
ENERGY_LOW = (
"setStateTo: FLEE"
);
ENTER = (
performAttack
);
EXIT = (
);
INCOMING_MISSILE = (
fightOrFleeMissile,
"setStateTo: FLEE"
);
TARGET_DESTROYED = (
switchLightsOff,
exitAI
);
TARGET_LOST = (
switchLightsOff,
exitAI
);
UPDATE = (
);
};
FLEE = {
"ENERGY_FULL" = ("setStateTo: ATTACK_SHIP");
"TARGET_LOST" = (switchLightsOff, exitAI);
"TARGET_DESTROYED" = (switchLightsOff, exitAI);
ENTER = ("setDesiredRangeTo: 25600", performFlee);
EXIT = ();
"INCOMING_MISSILE" = (fightOrFleeMissile, "setStateTo: FLEE");
UPDATE = ();
};
GLOBAL = {ENTER = (switchLightsOn, "setStateTo: ATTACK_SHIP"); EXIT = (); UPDATE = (); };
ENERGY_FULL = (
"setStateTo: ATTACK_SHIP"
);
ENTER = (
"setDesiredRangeTo: 25600",
performFlee
);
EXIT = (
);
INCOMING_MISSILE = (
fightOrFleeMissile,
"setStateTo: FLEE"
);
TARGET_DESTROYED = (
switchLightsOff,
exitAI
);
TARGET_LOST = (
switchLightsOff,
exitAI
);
UPDATE = (
);
};
GLOBAL = {
ENTER = (
switchLightsOn,
"setStateTo: ATTACK_SHIP"
);
EXIT = (
);
UPDATE = (
);
};
}

View File

@ -1,59 +1,173 @@
{
"LOOK_FOR_ROCKS" = {
ENTER = (performIdle);
UPDATE = (scanForRocks, "pauseAI: 10.0");
"TARGET_FOUND" = (setTargetToFoundTarget, "setStateTo: BREAK_ROCKS");
"NOTHING_FOUND" = ("setStateTo: DOCK_WITH_STATION");
EXIT = ();
ATTACKED = (setTargetToPrimaryAggressor, broadcastDistressMessage, "setStateTo: FLEE");
"INCOMING_MISSILE" = (fightOrFleeMissile, "setStateTo: FLEE");
};
"BREAK_ROCKS" = {
ENTER = (performMining);
UPDATE = ();
"TARGET_DESTROYED" = ("setStateTo: LOOK_FOR_SPLINTERS");
"TARGET_LOST" = ("setStateTo: LOOK_FOR_SPLINTERS");
EXIT = ();
ATTACKED = (setTargetToPrimaryAggressor, broadcastDistressMessage, "setStateTo: FLEE");
"INCOMING_MISSILE" = (fightOrFleeMissile, "setStateTo: FLEE");
};
"LOOK_FOR_SPLINTERS" = {
ENTER = (performIdle);
UPDATE = (scanForRandomLoot, "pauseAI: 10.0");
"TARGET_FOUND" = (setTargetToFoundTarget, "setStateTo: COLLECT_STUFF");
"NOTHING_FOUND" = ("setStateTo: LOOK_FOR_ROCKS");
"HOLD_FULL" = ("setStateTo: DOCK_WITH_STATION");
EXIT = ();
ATTACKED = (setTargetToPrimaryAggressor, broadcastDistressMessage, "setStateTo: FLEE");
"INCOMING_MISSILE" = (fightOrFleeMissile, "setStateTo: FLEE");
};
"COLLECT_STUFF" = {
ENTER = (performCollect);
UPDATE = ();
FRUSTRATED = ("setStateTo: LOOK_FOR_SPLINTERS");
"CARGO_SCOOPED" = (checkForFullHold, "setStateTo: LOOK_FOR_SPLINTERS");
"TARGET_LOST" = ("setStateTo: LOOK_FOR_SPLINTERS");
"COLLISION" = ("setStateTo: LOOK_FOR_SPLINTERS");
EXIT = ();
ATTACKED = (setTargetToPrimaryAggressor, broadcastDistressMessage, "setStateTo: FLEE");
"INCOMING_MISSILE" = (fightOrFleeMissile, "setStateTo: FLEE");
};
"DOCK_WITH_STATION" = {
ENTER = (setTargetToStation, "setDesiredRangeTo: 5000.0", performIntercept);
UPDATE = ();
"DESIRED_RANGE_ACHIEVED" = ("setAITo: dockingAI.plist");
EXIT = ();
ATTACKED = (setTargetToPrimaryAggressor, broadcastDistressMessage, "setStateTo: ATTACK_SHIP");
"INCOMING_MISSILE" = (fightOrFleeMissile, "setStateTo: FLEE");
};
BREAK_ROCKS = {
ATTACKED = (
setTargetToPrimaryAggressor,
broadcastDistressMessage,
"setStateTo: FLEE"
);
ENTER = (
performMining
);
EXIT = (
);
INCOMING_MISSILE = (
fightOrFleeMissile,
"setStateTo: FLEE"
);
TARGET_DESTROYED = (
"setStateTo: LOOK_FOR_SPLINTERS"
);
TARGET_LOST = (
"setStateTo: LOOK_FOR_SPLINTERS"
);
UPDATE = (
);
};
COLLECT_STUFF = {
ATTACKED = (
setTargetToPrimaryAggressor,
broadcastDistressMessage,
"setStateTo: FLEE"
);
CARGO_SCOOPED = (
checkForFullHold,
"setStateTo: LOOK_FOR_SPLINTERS"
);
COLLISION = (
"setStateTo: LOOK_FOR_SPLINTERS"
);
ENTER = (
performCollect
);
EXIT = (
);
FRUSTRATED = (
"setStateTo: LOOK_FOR_SPLINTERS"
);
INCOMING_MISSILE = (
fightOrFleeMissile,
"setStateTo: FLEE"
);
TARGET_LOST = (
"setStateTo: LOOK_FOR_SPLINTERS"
);
UPDATE = (
);
};
DOCK_WITH_STATION = {
ATTACKED = (
setTargetToPrimaryAggressor,
broadcastDistressMessage,
"setStateTo: ATTACK_SHIP"
);
DESIRED_RANGE_ACHIEVED = (
"setAITo: dockingAI.plist"
);
ENTER = (
setTargetToStation,
"setDesiredRangeTo: 5000.0",
performIntercept
);
EXIT = (
);
INCOMING_MISSILE = (
fightOrFleeMissile,
"setStateTo: FLEE"
);
UPDATE = (
);
};
FLEE = {
ENTER = ("setDesiredRangeTo: 25600", performFlee);
EXIT = ();
"INCOMING_MISSILE" = (fightOrFleeMissile, "setStateTo: FLEE");
"REACHED_SAFETY" = ("setSpeedTo: 0.0", performIdle);
"ENERGY_FULL" = (performIdle, "setStateTo: LOOK_FOR_SPLINTERS");
"TARGET_LOST" = (performIdle, "setStateTo: LOOK_FOR_SPLINTERS");
UPDATE = ();
};
GLOBAL = {ENTER = ("setSpeedFactorTo: 0.1", "setStateTo: LOOK_FOR_SPLINTERS"); EXIT = (); UPDATE = (); };
}
ENERGY_FULL = (
performIdle,
"setStateTo: LOOK_FOR_SPLINTERS"
);
ENTER = (
"setDesiredRangeTo: 25600",
performFlee
);
EXIT = (
);
INCOMING_MISSILE = (
fightOrFleeMissile,
"setStateTo: FLEE"
);
REACHED_SAFETY = (
"setSpeedTo: 0.0",
performIdle
);
TARGET_LOST = (
performIdle,
"setStateTo: LOOK_FOR_SPLINTERS"
);
UPDATE = (
);
};
GLOBAL = {
ENTER = (
"setSpeedFactorTo: 0.1",
"setStateTo: LOOK_FOR_SPLINTERS"
);
EXIT = (
);
UPDATE = (
);
};
LOOK_FOR_ROCKS = {
ATTACKED = (
setTargetToPrimaryAggressor,
broadcastDistressMessage,
"setStateTo: FLEE"
);
ENTER = (
performIdle
);
EXIT = (
);
INCOMING_MISSILE = (
fightOrFleeMissile,
"setStateTo: FLEE"
);
NOTHING_FOUND = (
"setStateTo: DOCK_WITH_STATION"
);
TARGET_FOUND = (
setTargetToFoundTarget,
"setStateTo: BREAK_ROCKS"
);
UPDATE = (
scanForRocks,
"pauseAI: 10.0"
);
};
LOOK_FOR_SPLINTERS = {
ATTACKED = (
setTargetToPrimaryAggressor,
broadcastDistressMessage,
"setStateTo: FLEE"
);
ENTER = (
performIdle
);
EXIT = (
);
HOLD_FULL = (
"setStateTo: DOCK_WITH_STATION"
);
INCOMING_MISSILE = (
fightOrFleeMissile,
"setStateTo: FLEE"
);
NOTHING_FOUND = (
"setStateTo: LOOK_FOR_ROCKS"
);
TARGET_FOUND = (
setTargetToFoundTarget,
"setStateTo: COLLECT_STUFF"
);
UPDATE = (
scanForRandomLoot,
"pauseAI: 10.0"
);
};
}

View File

@ -1,27 +1,61 @@
{
"ATTACK_SHIP" = {
"DESIRED_RANGE_ACHIEVED" = ("setStateTo: DETONATE");
ENTER = ("setDesiredRangeTo: 25.0", performIntercept);
EXIT = ();
"TARGET_DESTROYED" = ("setStateTo: EXPLODE");
"TARGET_LOST" = ("setStateTo: EXPLODE");
"ECM" = ("setStateTo: EXPLODE");
"GONE_BEYOND_RANGE" = ("setStateTo: EXPLODE");
UPDATE = ("setDesiredRangeTo: 30000.0", checkDistanceTravelled, "setDesiredRangeTo: 25.0", "pauseAI: 5.0");
};
ATTACK_SHIP = {
DESIRED_RANGE_ACHIEVED = (
"setStateTo: DETONATE"
);
ECM = (
"setStateTo: EXPLODE"
);
ENTER = (
"setDesiredRangeTo: 25.0",
performIntercept
);
EXIT = (
);
GONE_BEYOND_RANGE = (
"setStateTo: EXPLODE"
);
TARGET_DESTROYED = (
"setStateTo: EXPLODE"
);
TARGET_LOST = (
"setStateTo: EXPLODE"
);
UPDATE = (
"setDesiredRangeTo: 30000.0",
checkDistanceTravelled,
"setDesiredRangeTo: 25.0",
"pauseAI: 5.0"
);
};
DETONATE = {
ENTER = ("setDesiredRangeTo: 250.0", dealEnergyDamageWithinDesiredRange, becomeExplosion);
EXIT = ();
UPDATE = ();
};
ENTER = (
"setDesiredRangeTo: 250.0",
dealEnergyDamageWithinDesiredRange,
becomeExplosion
);
EXIT = (
);
UPDATE = (
);
};
EXPLODE = {
ENTER = (becomeExplosion);
EXIT = ();
UPDATE = ();
};
ENTER = (
becomeExplosion
);
EXIT = (
);
UPDATE = (
);
};
GLOBAL = {
ENTER = ("setSpeedFactorTo: 1.0", "setStateTo: ATTACK_SHIP");
EXIT = ();
UPDATE = ();
};
ENTER = (
"setSpeedFactorTo: 1.0",
"setStateTo: ATTACK_SHIP"
);
EXIT = (
);
UPDATE = (
);
};
}

View File

@ -1,3 +1,10 @@
{
GLOBAL = {ENTER = (); EXIT = (); UPDATE = (); };
GLOBAL = {
ENTER = (
);
EXIT = (
);
UPDATE = (
);
};
}

View File

@ -1,42 +1,104 @@
{
AWAIT_COORDS = {
APPROACH_COORDINATES = (
"setStateTo: GO_TO_COORDS"
);
ENTER = (
);
EXIT = (
);
UPDATE = (
);
};
EXIT_SYSTEM = {
ENTER = (
performDocking,
exitAI
);
EXIT = (
);
UPDATE = (
);
};
GLOBAL = {
ENTER = (setPlanetPatrolCoordinates, "setStateTo: AWAIT_COORDS");
EXIT = ();
UPDATE = ();
};
"AWAIT_COORDS" = {
"APPROACH_COORDINATES" = ("setStateTo: GO_TO_COORDS");
ENTER = ();
EXIT = ();
UPDATE = ();
};
"GO_TO_WAYPOINT" = {
ENTER = ("setDesiredRangeTo: 50.0", checkCourseToDestination);
"COURSE_OK" = ("setSpeedFactorTo: 0.4", performFlyToRangeFromDestination);
"WAYPOINT_SET" = ("setDesiredRangeTo: 50.0", checkCourseToDestination);
"DESIRED_RANGE_ACHIEVED" = ("setStateTo: GO_TO_COORDS");
EXIT = ();
UPDATE = ();
ATTACKED = (setTargetToPrimaryAggressor, "setAITo: interceptAI.plist");
};
"GO_TO_COORDS" = {
ENTER = (
patrolReportIn,
"setSpeedFactorTo: 0.0",
setDestinationFromCoordinates,
checkCourseToDestination
);
"WAYPOINT_SET" = ("setStateTo: GO_TO_WAYPOINT");
"COURSE_OK" = ("setSpeedFactorTo: 0.5", performFlyToRangeFromDestination);
"DESIRED_RANGE_ACHIEVED" = (setPlanetPatrolCoordinates, "setStateTo: AWAIT_COORDS");
EXIT = ();
UPDATE = (scanForOffenders, "pauseAI: 7.5");
"TARGET_FOUND" = (setTargetToFoundTarget, checkTargetLegalStatus);
"TARGET_MINOR_OFFENDER" = (markTargetForFines);
"TARGET_MARKED" = ("sendTargetCommsMessage: [police-warning]");
"TARGET_OFFENDER" = ("sendTargetCommsMessage: [police-attack-warning]", "setAITo: interceptAI.plist");
"TARGET_FUGITIVE" = ("setAITo: interceptAI.plist");
ATTACKED = (setTargetToPrimaryAggressor, "setAITo: interceptAI.plist");
};
"EXIT_SYSTEM" = {ENTER = (performDocking, exitAI); EXIT = (); UPDATE = (); };
ENTER = (
setPlanetPatrolCoordinates,
"setStateTo: AWAIT_COORDS"
);
EXIT = (
);
UPDATE = (
);
};
GO_TO_COORDS = {
ATTACKED = (
setTargetToPrimaryAggressor,
"setAITo: interceptAI.plist"
);
COURSE_OK = (
"setSpeedFactorTo: 0.5",
performFlyToRangeFromDestination
);
DESIRED_RANGE_ACHIEVED = (
setPlanetPatrolCoordinates,
"setStateTo: AWAIT_COORDS"
);
ENTER = (
patrolReportIn,
"setSpeedFactorTo: 0.0",
setDestinationFromCoordinates,
checkCourseToDestination
);
EXIT = (
);
TARGET_FOUND = (
setTargetToFoundTarget,
checkTargetLegalStatus
);
TARGET_FUGITIVE = (
"setAITo: interceptAI.plist"
);
TARGET_MARKED = (
"sendTargetCommsMessage: [police-warning]"
);
TARGET_MINOR_OFFENDER = (
markTargetForFines
);
TARGET_OFFENDER = (
"sendTargetCommsMessage: [police-attack-warning]",
"setAITo: interceptAI.plist"
);
UPDATE = (
scanForOffenders,
"pauseAI: 7.5"
);
WAYPOINT_SET = (
"setStateTo: GO_TO_WAYPOINT"
);
};
GO_TO_WAYPOINT = {
ATTACKED = (
setTargetToPrimaryAggressor,
"setAITo: interceptAI.plist"
);
COURSE_OK = (
"setSpeedFactorTo: 0.4",
performFlyToRangeFromDestination
);
DESIRED_RANGE_ACHIEVED = (
"setStateTo: GO_TO_COORDS"
);
ENTER = (
"setDesiredRangeTo: 50.0",
checkCourseToDestination
);
EXIT = (
);
UPDATE = (
);
WAYPOINT_SET = (
"setDesiredRangeTo: 50.0",
checkCourseToDestination
);
};
}

View File

@ -1,30 +1,84 @@
{
"ATTACK_SHIP" = {
"ENERGY_LOW" = ("setStateTo: FLEE");
ENTER = (performAttack);
EXIT = ();
"INCOMING_MISSILE" = (fightOrFleeMissile, "setStateTo: FLEE");
"TARGET_DESTROYED" = ("setStateTo: DOCK_WITH_STATION");
"TARGET_LOST" = ("setStateTo: DOCK_WITH_STATION");
UPDATE = ();
};
"DOCK_WITH_STATION" = {
"ACCEPT_DISTRESS_CALL" = (setTargetToFoundTarget, "setAITo: interceptAI.plist");
ATTACKED = (switchLightsOn, setTargetToPrimaryAggressor, "setStateTo: ATTACK_SHIP");
ENTER = (switchLightsOff, setTargetToStation, "setDesiredRangeTo: 5000.0", performIntercept);
"DESIRED_RANGE_ACHIEVED" = ("setAITo: dockingAI.plist");
EXIT = ();
"INCOMING_MISSILE" = (fightOrFleeMissile, "setStateTo: FLEE");
UPDATE = ();
};
ATTACK_SHIP = {
ENERGY_LOW = (
"setStateTo: FLEE"
);
ENTER = (
performAttack
);
EXIT = (
);
INCOMING_MISSILE = (
fightOrFleeMissile,
"setStateTo: FLEE"
);
TARGET_DESTROYED = (
"setStateTo: DOCK_WITH_STATION"
);
TARGET_LOST = (
"setStateTo: DOCK_WITH_STATION"
);
UPDATE = (
);
};
DOCK_WITH_STATION = {
ACCEPT_DISTRESS_CALL = (
setTargetToFoundTarget,
"setAITo: interceptAI.plist"
);
ATTACKED = (
switchLightsOn,
setTargetToPrimaryAggressor,
"setStateTo: ATTACK_SHIP"
);
DESIRED_RANGE_ACHIEVED = (
"setAITo: dockingAI.plist"
);
ENTER = (
switchLightsOff,
setTargetToStation,
"setDesiredRangeTo: 5000.0",
performIntercept
);
EXIT = (
);
INCOMING_MISSILE = (
fightOrFleeMissile,
"setStateTo: FLEE"
);
UPDATE = (
);
};
FLEE = {
"ENERGY_FULL" = ("setStateTo: ATTACK_SHIP");
"TARGET_LOST" = ("setStateTo: DOCK_WITH_STATION");
"TARGET_DESTROYED" = ("setStateTo: DOCK_WITH_STATION");
ENTER = (performFlee);
EXIT = ();
"INCOMING_MISSILE" = (fightOrFleeMissile, "setStateTo: FLEE");
UPDATE = ();
};
GLOBAL = {ENTER = (switchLightsOn, "setStateTo: ATTACK_SHIP"); EXIT = (); UPDATE = (); };
ENERGY_FULL = (
"setStateTo: ATTACK_SHIP"
);
ENTER = (
performFlee
);
EXIT = (
);
INCOMING_MISSILE = (
fightOrFleeMissile,
"setStateTo: FLEE"
);
TARGET_DESTROYED = (
"setStateTo: DOCK_WITH_STATION"
);
TARGET_LOST = (
"setStateTo: DOCK_WITH_STATION"
);
UPDATE = (
);
};
GLOBAL = {
ENTER = (
switchLightsOn,
"setStateTo: ATTACK_SHIP"
);
EXIT = (
);
UPDATE = (
);
};
}

View File

@ -1,39 +1,119 @@
{
"GO_TO_WAYPOINT" = {
ENTER = ("setDesiredRangeTo: 50.0", checkCourseToDestination);
"COURSE_OK" = ("setSpeedFactorTo: 1.0", performFlyToRangeFromDestination);
"WAYPOINT_SET" = ("setDesiredRangeTo: 50.0", checkCourseToDestination);
"DESIRED_RANGE_ACHIEVED" = ("setStateTo: GO_TO_STATION");
ATTACKED = (setTargetToPrimaryAggressor, broadcastDistressMessage, "setStateTo: FLEE");
"INCOMING_MISSILE" = (fightOrFleeMissile, "setStateTo: FLEE");
EXIT = ();
UPDATE = ();
};
"GO_TO_STATION" = {
ENTER = (setTargetToStation, "setDesiredRangeTo: 5000.0", setDestinationToTarget, checkCourseToDestination);
"COURSE_OK" = ("setSpeedFactorTo: 1.0", performFlyToRangeFromDestination);
"WAYPOINT_SET" = ("setStateTo: GO_TO_WAYPOINT");
"DESIRED_RANGE_ACHIEVED" = ("setAITo: dockingAI.plist");
EXIT = ();
ATTACKED = (setTargetToPrimaryAggressor, broadcastDistressMessage, "setStateTo: FLEE");
"INCOMING_MISSILE" = (fightOrFleeMissile, "setStateTo: FLEE");
UPDATE = ();
};
"LIFT_OFF" = {
ENTER = (setTakeOffFromPlanet, "setSpeedFactorTo: 1.0", performFlyToRangeFromDestination);
"DESIRED_RANGE_ACHIEVED" = ("setStateTo: GO_TO_STATION");
ATTACKED = (setTargetToPrimaryAggressor, broadcastDistressMessage, "setStateTo: FLEE");
"INCOMING_MISSILE" = (fightOrFleeMissile, "setStateTo: FLEE");
EXIT = ();
UPDATE = ();
};
FLEE = {
"TARGET_LOST" = (performIdle, "setStateTo: GLOBAL");
ENTER = ("setDesiredRangeTo: 25600", performFlee);
EXIT = ();
"INCOMING_MISSILE" = (fightOrFleeMissile, "setStateTo: FLEE");
"REACHED_SAFETY" = ("setSpeedTo: 0.0", performIdle, "pauseAI: 30.0");
UPDATE = ();
};
GLOBAL = {ENTER = ("setSpeedTo: 0.0", "setStateTo: LIFT_OFF"); EXIT = (); UPDATE = (); };
ENTER = (
"setDesiredRangeTo: 25600",
performFlee
);
EXIT = (
);
INCOMING_MISSILE = (
fightOrFleeMissile,
"setStateTo: FLEE"
);
REACHED_SAFETY = (
"setSpeedTo: 0.0",
performIdle,
"pauseAI: 30.0"
);
TARGET_LOST = (
performIdle,
"setStateTo: GLOBAL"
);
UPDATE = (
);
};
GLOBAL = {
ENTER = (
"setSpeedTo: 0.0",
"setStateTo: LIFT_OFF"
);
EXIT = (
);
UPDATE = (
);
};
GO_TO_STATION = {
ATTACKED = (
setTargetToPrimaryAggressor,
broadcastDistressMessage,
"setStateTo: FLEE"
);
COURSE_OK = (
"setSpeedFactorTo: 1.0",
performFlyToRangeFromDestination
);
DESIRED_RANGE_ACHIEVED = (
"setAITo: dockingAI.plist"
);
ENTER = (
setTargetToStation,
"setDesiredRangeTo: 5000.0",
setDestinationToTarget,
checkCourseToDestination
);
EXIT = (
);
INCOMING_MISSILE = (
fightOrFleeMissile,
"setStateTo: FLEE"
);
UPDATE = (
);
WAYPOINT_SET = (
"setStateTo: GO_TO_WAYPOINT"
);
};
GO_TO_WAYPOINT = {
ATTACKED = (
setTargetToPrimaryAggressor,
broadcastDistressMessage,
"setStateTo: FLEE"
);
COURSE_OK = (
"setSpeedFactorTo: 1.0",
performFlyToRangeFromDestination
);
DESIRED_RANGE_ACHIEVED = (
"setStateTo: GO_TO_STATION"
);
ENTER = (
"setDesiredRangeTo: 50.0",
checkCourseToDestination
);
EXIT = (
);
INCOMING_MISSILE = (
fightOrFleeMissile,
"setStateTo: FLEE"
);
UPDATE = (
);
WAYPOINT_SET = (
"setDesiredRangeTo: 50.0",
checkCourseToDestination
);
};
LIFT_OFF = {
ATTACKED = (
setTargetToPrimaryAggressor,
broadcastDistressMessage,
"setStateTo: FLEE"
);
DESIRED_RANGE_ACHIEVED = (
"setStateTo: GO_TO_STATION"
);
ENTER = (
setTakeOffFromPlanet,
"setSpeedFactorTo: 1.0",
performFlyToRangeFromDestination
);
EXIT = (
);
INCOMING_MISSILE = (
fightOrFleeMissile,
"setStateTo: FLEE"
);
UPDATE = (
);
};
}

View File

@ -1,43 +1,126 @@
{
"DEFENSE_MODE" = {
ATTACKED = (setTargetToPrimaryAggressor, increaseAlertLevel);
ENTER = ();
EXIT = ();
"RED_ALERT" = (launchDefenseShip);
"YELLOW_ALERT" = ("setStateTo: IDLE");
"CONDITION_YELLOW" = ("setStateTo: IDLE");
"CONDITION_GREEN" = ("setStateTo: CHECK_FOR_DEBRIS");
"INCOMING_MISSILE" = (increaseAlertLevel);
"ENERGY_FULL" = ("pauseAI: 20.0", "setStateTo: IDLE");
"TARGET_DESTROYED" = ("pauseAI: 20.0", "setStateTo: IDLE");
"TARGET_LOST" = ("pauseAI: 20.0", "setStateTo: IDLE");
"NO_TARGET" = ("pauseAI: 20.0", "setStateTo: IDLE");
UPDATE = ();
};
"CHECK_FOR_DEBRIS" = {
ENTER = ();
UPDATE = (scanForLoot, "pauseAI: 20.0");
"TARGET_FOUND" = (launchScavenger, "setStateTo: IDLE");
"NOTHING_FOUND" = ("setStateTo: CHECK_FOR_ROCKS", "pauseAI: 20.0");
EXIT = ();
ATTACKED = (setTargetToPrimaryAggressor, increaseAlertLevel, "setStateTo: DEFENSE_MODE");
"INCOMING_MISSILE" = (fireECM, increaseAlertLevel);
};
"CHECK_FOR_ROCKS" = {
ENTER = ();
UPDATE = (scanForRocks, "pauseAI: 20.0");
"TARGET_FOUND" = (launchMiner, "setStateTo: IDLE");
"NOTHING_FOUND" = ("setStateTo: IDLE", "pauseAI: 20.0");
EXIT = ();
ATTACKED = (setTargetToPrimaryAggressor, increaseAlertLevel, "setStateTo: DEFENSE_MODE");
"INCOMING_MISSILE" = (fireECM, increaseAlertLevel);
};
GLOBAL = {ENTER = ("setStateTo: IDLE"); EXIT = (); UPDATE = (); };
CHECK_FOR_DEBRIS = {
ATTACKED = (
setTargetToPrimaryAggressor,
increaseAlertLevel,
"setStateTo: DEFENSE_MODE"
);
ENTER = (
);
EXIT = (
);
INCOMING_MISSILE = (
fireECM,
increaseAlertLevel
);
NOTHING_FOUND = (
"setStateTo: CHECK_FOR_ROCKS",
"pauseAI: 20.0"
);
TARGET_FOUND = (
launchScavenger,
"setStateTo: IDLE"
);
UPDATE = (
scanForLoot,
"pauseAI: 20.0"
);
};
CHECK_FOR_ROCKS = {
ATTACKED = (
setTargetToPrimaryAggressor,
increaseAlertLevel,
"setStateTo: DEFENSE_MODE"
);
ENTER = (
);
EXIT = (
);
INCOMING_MISSILE = (
fireECM,
increaseAlertLevel
);
NOTHING_FOUND = (
"setStateTo: IDLE",
"pauseAI: 20.0"
);
TARGET_FOUND = (
launchMiner,
"setStateTo: IDLE"
);
UPDATE = (
scanForRocks,
"pauseAI: 20.0"
);
};
DEFENSE_MODE = {
ATTACKED = (
setTargetToPrimaryAggressor,
increaseAlertLevel
);
CONDITION_GREEN = (
"setStateTo: CHECK_FOR_DEBRIS"
);
CONDITION_YELLOW = (
"setStateTo: IDLE"
);
ENERGY_FULL = (
"pauseAI: 20.0",
"setStateTo: IDLE"
);
ENTER = (
);
EXIT = (
);
INCOMING_MISSILE = (
increaseAlertLevel
);
NO_TARGET = (
"pauseAI: 20.0",
"setStateTo: IDLE"
);
RED_ALERT = (
launchDefenseShip
);
TARGET_DESTROYED = (
"pauseAI: 20.0",
"setStateTo: IDLE"
);
TARGET_LOST = (
"pauseAI: 20.0",
"setStateTo: IDLE"
);
UPDATE = (
);
YELLOW_ALERT = (
"setStateTo: IDLE"
);
};
GLOBAL = {
ENTER = (
"setStateTo: IDLE"
);
EXIT = (
);
UPDATE = (
);
};
IDLE = {
ATTACKED = (setTargetToPrimaryAggressor, increaseAlertLevel, "setStateTo: DEFENSE_MODE");
ENTER = ();
EXIT = ();
"INCOMING_MISSILE" = (increaseAlertLevel);
UPDATE = (decreaseAlertLevel, "setStateTo: CHECK_FOR_DEBRIS");
};
ATTACKED = (
setTargetToPrimaryAggressor,
increaseAlertLevel,
"setStateTo: DEFENSE_MODE"
);
ENTER = (
);
EXIT = (
);
INCOMING_MISSILE = (
increaseAlertLevel
);
UPDATE = (
decreaseAlertLevel,
"setStateTo: CHECK_FOR_DEBRIS"
);
};
}

View File

@ -1,78 +1,276 @@
{
"HEAD_FOR_PLANET" = {
ENTER = (setCourseToPlanet, "setDesiredRangeTo: 50000.0", checkCourseToDestination);
"COURSE_OK" = ("setSpeedFactorTo: 0.8", performFlyToRangeFromDestination);
"WAYPOINT_SET" = ("setStateTo: GO_TO_WAYPOINT1");
"DESIRED_RANGE_ACHIEVED" = ("setStateTo: HEAD_FOR_WITCHPOINT");
"GROUP_ATTACK_TARGET" = (setTargetToFoundTarget, "setAITo: interceptAI.plist");
ATTACKED = (setTargetToPrimaryAggressor, groupAttackTarget);
"INCOMING_MISSILE" = (fightOrFleeMissile, setTargetToPrimaryAggressor, deployEscorts, groupAttackTarget, "setAITo: interceptAI.plist");
"TARGET_FOUND" = (setTargetToFoundTarget, deployEscorts, groupAttackTarget);
"ACCEPT_DISTRESS_CALL" = (setTargetToFoundTarget, deployEscorts, groupAttackTarget);
EXIT = ();
UPDATE = (scanForOffenders, "pauseAI: 10.0");
RESTARTED = ("setStateTo: INBOUND_LOOT");
};
"GO_TO_WAYPOINT1" = {
ENTER = ("setDesiredRangeTo: 50.0", checkCourseToDestination);
"COURSE_OK" = ("setSpeedFactorTo: 0.8", performFlyToRangeFromDestination);
"WAYPOINT_SET" = ("setDesiredRangeTo: 50.0", checkCourseToDestination);
"DESIRED_RANGE_ACHIEVED" = ("setStateTo: HEAD_FOR_PLANET");
"ACCEPT_DISTRESS_CALL" = (setTargetToFoundTarget, deployEscorts, groupAttackTarget);
"GROUP_ATTACK_TARGET" = (setTargetToFoundTarget, "setAITo: interceptAI.plist");
ATTACKED = (setTargetToPrimaryAggressor, groupAttackTarget);
"INCOMING_MISSILE" = (fightOrFleeMissile, setTargetToPrimaryAggressor, deployEscorts, groupAttackTarget, "setAITo: interceptAI.plist", "setStateTo: INBOUND_LOOT");
EXIT = ();
UPDATE = ();
RESTARTED = ("setStateTo: INBOUND_LOOT");
};
"HEAD_FOR_WITCHPOINT" = {
ENTER = (setCourseToWitchpoint, checkCourseToDestination);
"COURSE_OK" = ("setSpeedFactorTo: 0.8", performFlyToRangeFromDestination);
"WAYPOINT_SET" = ("setStateTo: GO_TO_WAYPOINT2");
"DESIRED_RANGE_ACHIEVED" = ("setStateTo: HEAD_FOR_PLANET");
"GROUP_ATTACK_TARGET" = (setTargetToFoundTarget, "setAITo: interceptAI.plist");
ATTACKED = (setTargetToPrimaryAggressor, groupAttackTarget);
"INCOMING_MISSILE" = (fightOrFleeMissile, setTargetToPrimaryAggressor, deployEscorts, groupAttackTarget, "setAITo: interceptAI.plist", "setStateTo: OUTBOUND_LOOT");
"TARGET_FOUND" = (setTargetToFoundTarget, deployEscorts, groupAttackTarget);
"ACCEPT_DISTRESS_CALL" = (setTargetToFoundTarget, deployEscorts, groupAttackTarget);
FRUSTRATED = ("setStateTo: HEAD_FOR_WITCHPOINT");
EXIT = ();
UPDATE = (scanForOffenders, "pauseAI: 10.0");
RESTARTED = ("setStateTo: OUTBOUND_LOOT");
};
"GO_TO_WAYPOINT2" = {
ENTER = ("setDesiredRangeTo: 50.0", checkCourseToDestination);
"COURSE_OK" = ("setSpeedFactorTo: 0.8", performFlyToRangeFromDestination);
"WAYPOINT_SET" = ("setDesiredRangeTo: 50.0", checkCourseToDestination);
"DESIRED_RANGE_ACHIEVED" = ("setStateTo: HEAD_FOR_WITCHPOINT");
"ACCEPT_DISTRESS_CALL" = (setTargetToFoundTarget, deployEscorts, groupAttackTarget);
"GROUP_ATTACK_TARGET" = (setTargetToFoundTarget, "setAITo: interceptAI.plist");
ATTACKED = (setTargetToPrimaryAggressor, groupAttackTarget);
"INCOMING_MISSILE" = (fightOrFleeMissile, setTargetToPrimaryAggressor, deployEscorts, groupAttackTarget, "setAITo: interceptAI.plist", "setStateTo: OUTBOUND_LOOT");
EXIT = ();
UPDATE = ();
RESTARTED = ("setStateTo: OUTBOUND_LOOT");
};
"OUTBOUND_LOOT" = {
"GROUP_ATTACK_TARGET" = (setTargetToFoundTarget, "setAITo: interceptAI.plist");
ATTACKED = (setTargetToPrimaryAggressor, groupAttackTarget);
ENTER = ("setSpeedTo: 0.0", performIdle);
EXIT = ();
"INCOMING_MISSILE" = (fightOrFleeMissile, setTargetToPrimaryAggressor, deployEscorts, groupAttackTarget, "setAITo: interceptAI.plist", "setStateTo: OUTBOUND_LOOT");
"TARGET_FOUND" = (setTargetToFoundTarget, "setAITo: collectLootAI.plist");
"NOTHING_FOUND" = ("setStateTo: HEAD_FOR_WITCHPOINT");
UPDATE = (scanForLoot, "pauseAI: 10.0");
};
"INBOUND_LOOT" = {
"GROUP_ATTACK_TARGET" = (setTargetToFoundTarget, "setAITo: interceptAI.plist");
ATTACKED = (setTargetToPrimaryAggressor, groupAttackTarget);
ENTER = ("setSpeedTo: 0.0", performIdle);
EXIT = ();
"INCOMING_MISSILE" = (fightOrFleeMissile, setTargetToPrimaryAggressor, deployEscorts, groupAttackTarget, "setAITo: interceptAI.plist", "setStateTo: INBOUND_LOOT");
"TARGET_FOUND" = (setTargetToFoundTarget, "setAITo: collectLootAI.plist");
"NOTHING_FOUND" = ("setStateTo: HEAD_FOR_PLANET");
UPDATE = (scanForLoot, "pauseAI: 10.0");
};
GLOBAL = {ENTER = ("setStateTo: HEAD_FOR_WITCHPOINT"); EXIT = (); UPDATE = (); };
}
GLOBAL = {
ENTER = (
"setStateTo: HEAD_FOR_WITCHPOINT"
);
EXIT = (
);
UPDATE = (
);
};
GO_TO_WAYPOINT1 = {
ACCEPT_DISTRESS_CALL = (
setTargetToFoundTarget,
deployEscorts,
groupAttackTarget
);
ATTACKED = (
setTargetToPrimaryAggressor,
groupAttackTarget
);
COURSE_OK = (
"setSpeedFactorTo: 0.8",
performFlyToRangeFromDestination
);
DESIRED_RANGE_ACHIEVED = (
"setStateTo: HEAD_FOR_PLANET"
);
ENTER = (
"setDesiredRangeTo: 50.0",
checkCourseToDestination
);
EXIT = (
);
GROUP_ATTACK_TARGET = (
setTargetToFoundTarget,
"setAITo: interceptAI.plist"
);
INCOMING_MISSILE = (
fightOrFleeMissile,
setTargetToPrimaryAggressor,
deployEscorts,
groupAttackTarget,
"setAITo: interceptAI.plist",
"setStateTo: INBOUND_LOOT"
);
RESTARTED = (
"setStateTo: INBOUND_LOOT"
);
UPDATE = (
);
WAYPOINT_SET = (
"setDesiredRangeTo: 50.0",
checkCourseToDestination
);
};
GO_TO_WAYPOINT2 = {
ACCEPT_DISTRESS_CALL = (
setTargetToFoundTarget,
deployEscorts,
groupAttackTarget
);
ATTACKED = (
setTargetToPrimaryAggressor,
groupAttackTarget
);
COURSE_OK = (
"setSpeedFactorTo: 0.8",
performFlyToRangeFromDestination
);
DESIRED_RANGE_ACHIEVED = (
"setStateTo: HEAD_FOR_WITCHPOINT"
);
ENTER = (
"setDesiredRangeTo: 50.0",
checkCourseToDestination
);
EXIT = (
);
GROUP_ATTACK_TARGET = (
setTargetToFoundTarget,
"setAITo: interceptAI.plist"
);
INCOMING_MISSILE = (
fightOrFleeMissile,
setTargetToPrimaryAggressor,
deployEscorts,
groupAttackTarget,
"setAITo: interceptAI.plist",
"setStateTo: OUTBOUND_LOOT"
);
RESTARTED = (
"setStateTo: OUTBOUND_LOOT"
);
UPDATE = (
);
WAYPOINT_SET = (
"setDesiredRangeTo: 50.0",
checkCourseToDestination
);
};
HEAD_FOR_PLANET = {
ACCEPT_DISTRESS_CALL = (
setTargetToFoundTarget,
deployEscorts,
groupAttackTarget
);
ATTACKED = (
setTargetToPrimaryAggressor,
groupAttackTarget
);
COURSE_OK = (
"setSpeedFactorTo: 0.8",
performFlyToRangeFromDestination
);
DESIRED_RANGE_ACHIEVED = (
"setStateTo: HEAD_FOR_WITCHPOINT"
);
ENTER = (
setCourseToPlanet,
"setDesiredRangeTo: 50000.0",
checkCourseToDestination
);
EXIT = (
);
GROUP_ATTACK_TARGET = (
setTargetToFoundTarget,
"setAITo: interceptAI.plist"
);
INCOMING_MISSILE = (
fightOrFleeMissile,
setTargetToPrimaryAggressor,
deployEscorts,
groupAttackTarget,
"setAITo: interceptAI.plist"
);
RESTARTED = (
"setStateTo: INBOUND_LOOT"
);
TARGET_FOUND = (
setTargetToFoundTarget,
deployEscorts,
groupAttackTarget
);
UPDATE = (
scanForOffenders,
"pauseAI: 10.0"
);
WAYPOINT_SET = (
"setStateTo: GO_TO_WAYPOINT1"
);
};
HEAD_FOR_WITCHPOINT = {
ACCEPT_DISTRESS_CALL = (
setTargetToFoundTarget,
deployEscorts,
groupAttackTarget
);
ATTACKED = (
setTargetToPrimaryAggressor,
groupAttackTarget
);
COURSE_OK = (
"setSpeedFactorTo: 0.8",
performFlyToRangeFromDestination
);
DESIRED_RANGE_ACHIEVED = (
"setStateTo: HEAD_FOR_PLANET"
);
ENTER = (
setCourseToWitchpoint,
checkCourseToDestination
);
EXIT = (
);
FRUSTRATED = (
"setStateTo: HEAD_FOR_WITCHPOINT"
);
GROUP_ATTACK_TARGET = (
setTargetToFoundTarget,
"setAITo: interceptAI.plist"
);
INCOMING_MISSILE = (
fightOrFleeMissile,
setTargetToPrimaryAggressor,
deployEscorts,
groupAttackTarget,
"setAITo: interceptAI.plist",
"setStateTo: OUTBOUND_LOOT"
);
RESTARTED = (
"setStateTo: OUTBOUND_LOOT"
);
TARGET_FOUND = (
setTargetToFoundTarget,
deployEscorts,
groupAttackTarget
);
UPDATE = (
scanForOffenders,
"pauseAI: 10.0"
);
WAYPOINT_SET = (
"setStateTo: GO_TO_WAYPOINT2"
);
};
INBOUND_LOOT = {
ATTACKED = (
setTargetToPrimaryAggressor,
groupAttackTarget
);
ENTER = (
"setSpeedTo: 0.0",
performIdle
);
EXIT = (
);
GROUP_ATTACK_TARGET = (
setTargetToFoundTarget,
"setAITo: interceptAI.plist"
);
INCOMING_MISSILE = (
fightOrFleeMissile,
setTargetToPrimaryAggressor,
deployEscorts,
groupAttackTarget,
"setAITo: interceptAI.plist",
"setStateTo: INBOUND_LOOT"
);
NOTHING_FOUND = (
"setStateTo: HEAD_FOR_PLANET"
);
TARGET_FOUND = (
setTargetToFoundTarget,
"setAITo: collectLootAI.plist"
);
UPDATE = (
scanForLoot,
"pauseAI: 10.0"
);
};
OUTBOUND_LOOT = {
ATTACKED = (
setTargetToPrimaryAggressor,
groupAttackTarget
);
ENTER = (
"setSpeedTo: 0.0",
performIdle
);
EXIT = (
);
GROUP_ATTACK_TARGET = (
setTargetToFoundTarget,
"setAITo: interceptAI.plist"
);
INCOMING_MISSILE = (
fightOrFleeMissile,
setTargetToPrimaryAggressor,
deployEscorts,
groupAttackTarget,
"setAITo: interceptAI.plist",
"setStateTo: OUTBOUND_LOOT"
);
NOTHING_FOUND = (
"setStateTo: HEAD_FOR_WITCHPOINT"
);
TARGET_FOUND = (
setTargetToFoundTarget,
"setAITo: collectLootAI.plist"
);
UPDATE = (
scanForLoot,
"pauseAI: 10.0"
);
};
}

View File

@ -1,64 +1,216 @@
{
ATTACK_SHIP = {
ENERGY_LOW = (
setTargetToPrimaryAggressor,
broadcastDistressMessage,
"setStateTo: FLEE"
);
ENTER = (
broadcastDistressMessage,
performAttack
);
EXIT = (
);
INCOMING_MISSILE = (
setTargetToPrimaryAggressor,
broadcastDistressMessage,
fightOrFleeMissile,
"setStateTo: FLEE"
);
TARGET_DESTROYED = (
"setStateTo: HEAD_FOR_PLANET"
);
TARGET_LOST = (
"setStateTo: HEAD_FOR_PLANET"
);
UPDATE = (
);
};
FLEE = {
ATTACKED = (fightOrFleeHostiles);
FIGHTING = (setTargetToPrimaryAggressor, "setStateTo: ATTACK_SHIP");
FLEEING = (setTargetToPrimaryAggressor, "setStateTo: FLEE");
"TARGET_LOST" = (performIdle, "setStateTo: GLOBAL");
"TARGET_DESTROYED" = (performIdle, "setStateTo: GLOBAL");
ENTER = ("setDesiredRangeTo: 25600", performFlee);
EXIT = ();
"INCOMING_MISSILE" = (setTargetToPrimaryAggressor, broadcastDistressMessage, fightOrFleeMissile, fightOrFleeHostiles);
"REACHED_SAFETY" = (performIdle, "setStateTo: GLOBAL");
UPDATE = ();
};
"ATTACK_SHIP" = {
"ENERGY_LOW" = (setTargetToPrimaryAggressor, broadcastDistressMessage, "setStateTo: FLEE");
ENTER = (broadcastDistressMessage, performAttack);
EXIT = ();
"INCOMING_MISSILE" = (setTargetToPrimaryAggressor, broadcastDistressMessage, fightOrFleeMissile, "setStateTo: FLEE");
"TARGET_DESTROYED" = ("setStateTo: HEAD_FOR_PLANET");
"TARGET_LOST" = ("setStateTo: HEAD_FOR_PLANET");
UPDATE = ();
};
"GO_TO_WAYPOINT" = {
ENTER = ("setDesiredRangeTo: 50.0", checkCourseToDestination);
"COURSE_OK" = ("setSpeedFactorTo: 0.5", performFlyToRangeFromDestination);
"WAYPOINT_SET" = ("setDesiredRangeTo: 50.0", checkCourseToDestination);
"DESIRED_RANGE_ACHIEVED" = ("setStateTo: GO_TO_STATION");
ATTACKED = (fightOrFleeHostiles);
"INCOMING_MISSILE" = (setTargetToPrimaryAggressor, broadcastDistressMessage, fightOrFleeMissile, fightOrFleeHostiles, "setStateTo: FLEE");
EXIT = ();
"TARGET_FOUND" = (fightOrFleeHostiles);
FIGHTING = (setTargetToPrimaryAggressor, "setStateTo: ATTACK_SHIP");
FLEEING = (setTargetToPrimaryAggressor, "setStateTo: FLEE");
UPDATE = (scanForHostiles, "pauseAI: 10.0");
};
"GO_TO_STATION" = {
ENTER = (setTargetToStation, "setDesiredRangeTo: 5000.0", setDestinationToTarget, checkCourseToDestination);
"COURSE_OK" = ("setSpeedFactorTo: 0.5", performFlyToRangeFromDestination);
"WAYPOINT_SET" = ("setStateTo: GO_TO_WAYPOINT");
"DESIRED_RANGE_ACHIEVED" = (dockEscorts, "setAITo: dockingAI.plist");
"AEGIS_IN_DOCKING_RANGE" = (dockEscorts, "setAITo: dockingAI.plist");
EXIT = ();
ATTACKED = (fightOrFleeHostiles);
"INCOMING_MISSILE" = (setTargetToPrimaryAggressor, broadcastDistressMessage, fightOrFleeMissile, fightOrFleeHostiles, "setStateTo: FLEE");
"TARGET_FOUND" = (fightOrFleeHostiles);
FIGHTING = (setTargetToPrimaryAggressor, "setStateTo: ATTACK_SHIP");
FLEEING = (setTargetToPrimaryAggressor, "setStateTo: FLEE");
UPDATE = (scanForHostiles, "pauseAI: 10.0");
};
"HEAD_FOR_PLANET" = {
ENTER = (setCourseToPlanet, "setDesiredRangeTo: 30000.0", "setSpeedFactorTo: 0.5", performFlyToRangeFromDestination);
"AEGIS_CLOSE_TO_PLANET" = ("setStateTo: GO_TO_STATION");
"AEGIS_IN_DOCKING_RANGE" = (dockEscorts, "setStateTo: GO_TO_STATION");
"DESIRED_RANGE_ACHIEVED" = ("setStateTo: GO_TO_STATION");
ATTACKED = (fightOrFleeHostiles);
"INCOMING_MISSILE" = (setTargetToPrimaryAggressor, broadcastDistressMessage, fightOrFleeMissile, fightOrFleeHostiles, "setStateTo: FLEE");
EXIT = ();
"TARGET_FOUND" = (fightOrFleeHostiles);
FIGHTING = (setTargetToPrimaryAggressor, "setStateTo: ATTACK_SHIP");
FLEEING = (setTargetToPrimaryAggressor, "setStateTo: FLEE");
UPDATE = (scanForHostiles, "pauseAI: 10.0");
};
GLOBAL = {ENTER = ("setStateTo: HEAD_FOR_PLANET"); EXIT = (); UPDATE = (); };
ATTACKED = (
fightOrFleeHostiles
);
ENTER = (
"setDesiredRangeTo: 25600",
performFlee
);
EXIT = (
);
FIGHTING = (
setTargetToPrimaryAggressor,
"setStateTo: ATTACK_SHIP"
);
FLEEING = (
setTargetToPrimaryAggressor,
"setStateTo: FLEE"
);
INCOMING_MISSILE = (
setTargetToPrimaryAggressor,
broadcastDistressMessage,
fightOrFleeMissile,
fightOrFleeHostiles
);
REACHED_SAFETY = (
performIdle,
"setStateTo: GLOBAL"
);
TARGET_DESTROYED = (
performIdle,
"setStateTo: GLOBAL"
);
TARGET_LOST = (
performIdle,
"setStateTo: GLOBAL"
);
UPDATE = (
);
};
GLOBAL = {
ENTER = (
"setStateTo: HEAD_FOR_PLANET"
);
EXIT = (
);
UPDATE = (
);
};
GO_TO_STATION = {
AEGIS_IN_DOCKING_RANGE = (
dockEscorts,
"setAITo: dockingAI.plist"
);
ATTACKED = (
fightOrFleeHostiles
);
COURSE_OK = (
"setSpeedFactorTo: 0.5",
performFlyToRangeFromDestination
);
DESIRED_RANGE_ACHIEVED = (
dockEscorts,
"setAITo: dockingAI.plist"
);
ENTER = (
setTargetToStation,
"setDesiredRangeTo: 5000.0",
setDestinationToTarget,
checkCourseToDestination
);
EXIT = (
);
FIGHTING = (
setTargetToPrimaryAggressor,
"setStateTo: ATTACK_SHIP"
);
FLEEING = (
setTargetToPrimaryAggressor,
"setStateTo: FLEE"
);
INCOMING_MISSILE = (
setTargetToPrimaryAggressor,
broadcastDistressMessage,
fightOrFleeMissile,
fightOrFleeHostiles,
"setStateTo: FLEE"
);
TARGET_FOUND = (
fightOrFleeHostiles
);
UPDATE = (
scanForHostiles,
"pauseAI: 10.0"
);
WAYPOINT_SET = (
"setStateTo: GO_TO_WAYPOINT"
);
};
GO_TO_WAYPOINT = {
ATTACKED = (
fightOrFleeHostiles
);
COURSE_OK = (
"setSpeedFactorTo: 0.5",
performFlyToRangeFromDestination
);
DESIRED_RANGE_ACHIEVED = (
"setStateTo: GO_TO_STATION"
);
ENTER = (
"setDesiredRangeTo: 50.0",
checkCourseToDestination
);
EXIT = (
);
FIGHTING = (
setTargetToPrimaryAggressor,
"setStateTo: ATTACK_SHIP"
);
FLEEING = (
setTargetToPrimaryAggressor,
"setStateTo: FLEE"
);
INCOMING_MISSILE = (
setTargetToPrimaryAggressor,
broadcastDistressMessage,
fightOrFleeMissile,
fightOrFleeHostiles,
"setStateTo: FLEE"
);
TARGET_FOUND = (
fightOrFleeHostiles
);
UPDATE = (
scanForHostiles,
"pauseAI: 10.0"
);
WAYPOINT_SET = (
"setDesiredRangeTo: 50.0",
checkCourseToDestination
);
};
HEAD_FOR_PLANET = {
AEGIS_CLOSE_TO_PLANET = (
"setStateTo: GO_TO_STATION"
);
AEGIS_IN_DOCKING_RANGE = (
dockEscorts,
"setStateTo: GO_TO_STATION"
);
ATTACKED = (
fightOrFleeHostiles
);
DESIRED_RANGE_ACHIEVED = (
"setStateTo: GO_TO_STATION"
);
ENTER = (
setCourseToPlanet,
"setDesiredRangeTo: 30000.0",
"setSpeedFactorTo: 0.5",
performFlyToRangeFromDestination
);
EXIT = (
);
FIGHTING = (
setTargetToPrimaryAggressor,
"setStateTo: ATTACK_SHIP"
);
FLEEING = (
setTargetToPrimaryAggressor,
"setStateTo: FLEE"
);
INCOMING_MISSILE = (
setTargetToPrimaryAggressor,
broadcastDistressMessage,
fightOrFleeMissile,
fightOrFleeHostiles,
"setStateTo: FLEE"
);
TARGET_FOUND = (
fightOrFleeHostiles
);
UPDATE = (
scanForHostiles,
"pauseAI: 10.0"
);
};
}

View File

@ -1,78 +1,278 @@
{
"HEAD_FOR_PLANET" = {
ENTER = (setCourseToPlanet, "setDesiredRangeTo: 50000.0", checkCourseToDestination);
"COURSE_OK" = ("setSpeedFactorTo: 0.8", performFlyToRangeFromDestination);
"WAYPOINT_SET" = ("setStateTo: GO_TO_WAYPOINT_PLANET");
"DESIRED_RANGE_ACHIEVED" = ("setStateTo: HEAD_FOR_SUN");
ATTACKED = (setTargetToPrimaryAggressor, groupAttackTarget);
"INCOMING_MISSILE" = (fightOrFleeMissile, setTargetToPrimaryAggressor, deployEscorts, groupAttackTarget, "setAITo: interceptAI.plist");
"TARGET_FOUND" = (setTargetToFoundTarget, deployEscorts, groupAttackTarget);
"GROUP_ATTACK_TARGET" = (setTargetToFoundTarget, "setAITo: interceptAI.plist");
"ACCEPT_DISTRESS_CALL" = (setTargetToFoundTarget, deployEscorts, groupAttackTarget);
EXIT = ();
UPDATE = (scanForOffenders, "pauseAI: 10.0");
RESTARTED = ("setStateTo: INBOUND_LOOT");
};
"GO_TO_WAYPOINT_PLANET" = {
ENTER = ("setDesiredRangeTo: 50.0", checkCourseToDestination);
"COURSE_OK" = ("setSpeedFactorTo: 0.8", performFlyToRangeFromDestination);
"WAYPOINT_SET" = ("setDesiredRangeTo: 50.0", checkCourseToDestination);
"DESIRED_RANGE_ACHIEVED" = ("setStateTo: HEAD_FOR_PLANET");
ATTACKED = (setTargetToPrimaryAggressor, groupAttackTarget);
"INCOMING_MISSILE" = (fightOrFleeMissile, setTargetToPrimaryAggressor, deployEscorts, groupAttackTarget, "setAITo: interceptAI.plist", "setStateTo: INBOUND_LOOT");
"GROUP_ATTACK_TARGET" = (setTargetToFoundTarget, "setAITo: interceptAI.plist");
"ACCEPT_DISTRESS_CALL" = (setTargetToFoundTarget, deployEscorts, groupAttackTarget);
EXIT = ();
UPDATE = ();
RESTARTED = ("setStateTo: INBOUND_LOOT");
};
"HEAD_FOR_SUN" = {
ENTER = (setSunSkimStartCoordinates);
"WAIT_FOR_SUN" = ("pauseAI: 10.0", setSunSkimStartCoordinates);
"APPROACH_COORDINATES" = (setDestinationFromCoordinates, "setDesiredRangeTo: 25000", checkCourseToDestination);
"COURSE_OK" = ("setSpeedFactorTo: 0.80", performFlyToRangeFromDestination);
"WAYPOINT_SET" = ("setStateTo: GO_TO_WAYPOINT_SUN");
ATTACKED = (setTargetToPrimaryAggressor, groupAttackTarget);
"INCOMING_MISSILE" = (fightOrFleeMissile, setTargetToPrimaryAggressor, deployEscorts, groupAttackTarget, "setAITo: interceptAI.plist", "setStateTo: OUTBOUND_LOOT");
"TARGET_FOUND" = (setTargetToFoundTarget, deployEscorts, groupAttackTarget);
"GROUP_ATTACK_TARGET" = (setTargetToFoundTarget, "setAITo: interceptAI.plist");
"ACCEPT_DISTRESS_CALL" = (setTargetToFoundTarget, deployEscorts, groupAttackTarget);
EXIT = ();
UPDATE = (scanForOffenders, "pauseAI: 10.0");
RESTARTED = ("setStateTo: OUTBOUND_LOOT");
};
"GO_TO_WAYPOINT_SUN" = {
ENTER = ("setDesiredRangeTo: 50.0", checkCourseToDestination);
"COURSE_OK" = ("setSpeedFactorTo: 0.8", performFlyToRangeFromDestination);
"WAYPOINT_SET" = ("setDesiredRangeTo: 50.0", checkCourseToDestination);
"DESIRED_RANGE_ACHIEVED" = ("setStateTo: HEAD_FOR_SUN");
"ACCEPT_DISTRESS_CALL" = (setTargetToFoundTarget, deployEscorts, groupAttackTarget);
"GROUP_ATTACK_TARGET" = (setTargetToFoundTarget, "setAITo: interceptAI.plist");
ATTACKED = (setTargetToPrimaryAggressor, groupAttackTarget);
"INCOMING_MISSILE" = (fightOrFleeMissile, setTargetToPrimaryAggressor, deployEscorts, groupAttackTarget, "setAITo: interceptAI.plist", "setStateTo: OUTBOUND_LOOT");
EXIT = ();
UPDATE = ();
RESTARTED = ("setStateTo: OUTBOUND_LOOT");
};
"OUTBOUND_LOOT" = {
"GROUP_ATTACK_TARGET" = (setTargetToFoundTarget, "setAITo: interceptAI.plist");
ATTACKED = (setTargetToPrimaryAggressor, groupAttackTarget);
ENTER = ("setSpeedTo: 0.0", performIdle);
EXIT = ();
"INCOMING_MISSILE" = (fightOrFleeMissile, setTargetToPrimaryAggressor, deployEscorts, groupAttackTarget, "setAITo: interceptAI.plist", "setStateTo: OUTBOUND_LOOT");
"TARGET_FOUND" = (setTargetToFoundTarget, "setAITo: collectLootAI.plist");
"NOTHING_FOUND" = ("setStateTo: HEAD_FOR_SUN");
UPDATE = (scanForLoot, "pauseAI: 10.0");
};
"INBOUND_LOOT" = {
"GROUP_ATTACK_TARGET" = (setTargetToFoundTarget, "setAITo: interceptAI.plist");
ATTACKED = (setTargetToPrimaryAggressor, groupAttackTarget);
ENTER = ("setSpeedTo: 0.0", performIdle);
EXIT = ();
"INCOMING_MISSILE" = (fightOrFleeMissile, setTargetToPrimaryAggressor, deployEscorts, groupAttackTarget, "setAITo: interceptAI.plist", "setStateTo: INBOUND_LOOT");
"TARGET_FOUND" = (setTargetToFoundTarget, "setAITo: collectLootAI.plist");
"NOTHING_FOUND" = ("setStateTo: HEAD_FOR_PLANET");
UPDATE = (scanForLoot, "pauseAI: 10.0");
};
GLOBAL = {ENTER = ("setStateTo: HEAD_FOR_SUN"); EXIT = (); UPDATE = (); };
GLOBAL = {
ENTER = (
"setStateTo: HEAD_FOR_SUN"
);
EXIT = (
);
UPDATE = (
);
};
GO_TO_WAYPOINT_PLANET = {
ACCEPT_DISTRESS_CALL = (
setTargetToFoundTarget,
deployEscorts,
groupAttackTarget
);
ATTACKED = (
setTargetToPrimaryAggressor,
groupAttackTarget
);
COURSE_OK = (
"setSpeedFactorTo: 0.8",
performFlyToRangeFromDestination
);
DESIRED_RANGE_ACHIEVED = (
"setStateTo: HEAD_FOR_PLANET"
);
ENTER = (
"setDesiredRangeTo: 50.0",
checkCourseToDestination
);
EXIT = (
);
GROUP_ATTACK_TARGET = (
setTargetToFoundTarget,
"setAITo: interceptAI.plist"
);
INCOMING_MISSILE = (
fightOrFleeMissile,
setTargetToPrimaryAggressor,
deployEscorts,
groupAttackTarget,
"setAITo: interceptAI.plist",
"setStateTo: INBOUND_LOOT"
);
RESTARTED = (
"setStateTo: INBOUND_LOOT"
);
UPDATE = (
);
WAYPOINT_SET = (
"setDesiredRangeTo: 50.0",
checkCourseToDestination
);
};
GO_TO_WAYPOINT_SUN = {
ACCEPT_DISTRESS_CALL = (
setTargetToFoundTarget,
deployEscorts,
groupAttackTarget
);
ATTACKED = (
setTargetToPrimaryAggressor,
groupAttackTarget
);
COURSE_OK = (
"setSpeedFactorTo: 0.8",
performFlyToRangeFromDestination
);
DESIRED_RANGE_ACHIEVED = (
"setStateTo: HEAD_FOR_SUN"
);
ENTER = (
"setDesiredRangeTo: 50.0",
checkCourseToDestination
);
EXIT = (
);
GROUP_ATTACK_TARGET = (
setTargetToFoundTarget,
"setAITo: interceptAI.plist"
);
INCOMING_MISSILE = (
fightOrFleeMissile,
setTargetToPrimaryAggressor,
deployEscorts,
groupAttackTarget,
"setAITo: interceptAI.plist",
"setStateTo: OUTBOUND_LOOT"
);
RESTARTED = (
"setStateTo: OUTBOUND_LOOT"
);
UPDATE = (
);
WAYPOINT_SET = (
"setDesiredRangeTo: 50.0",
checkCourseToDestination
);
};
HEAD_FOR_PLANET = {
ACCEPT_DISTRESS_CALL = (
setTargetToFoundTarget,
deployEscorts,
groupAttackTarget
);
ATTACKED = (
setTargetToPrimaryAggressor,
groupAttackTarget
);
COURSE_OK = (
"setSpeedFactorTo: 0.8",
performFlyToRangeFromDestination
);
DESIRED_RANGE_ACHIEVED = (
"setStateTo: HEAD_FOR_SUN"
);
ENTER = (
setCourseToPlanet,
"setDesiredRangeTo: 50000.0",
checkCourseToDestination
);
EXIT = (
);
GROUP_ATTACK_TARGET = (
setTargetToFoundTarget,
"setAITo: interceptAI.plist"
);
INCOMING_MISSILE = (
fightOrFleeMissile,
setTargetToPrimaryAggressor,
deployEscorts,
groupAttackTarget,
"setAITo: interceptAI.plist"
);
RESTARTED = (
"setStateTo: INBOUND_LOOT"
);
TARGET_FOUND = (
setTargetToFoundTarget,
deployEscorts,
groupAttackTarget
);
UPDATE = (
scanForOffenders,
"pauseAI: 10.0"
);
WAYPOINT_SET = (
"setStateTo: GO_TO_WAYPOINT_PLANET"
);
};
HEAD_FOR_SUN = {
ACCEPT_DISTRESS_CALL = (
setTargetToFoundTarget,
deployEscorts,
groupAttackTarget
);
APPROACH_COORDINATES = (
setDestinationFromCoordinates,
"setDesiredRangeTo: 25000",
checkCourseToDestination
);
ATTACKED = (
setTargetToPrimaryAggressor,
groupAttackTarget
);
COURSE_OK = (
"setSpeedFactorTo: 0.80",
performFlyToRangeFromDestination
);
ENTER = (
setSunSkimStartCoordinates
);
EXIT = (
);
GROUP_ATTACK_TARGET = (
setTargetToFoundTarget,
"setAITo: interceptAI.plist"
);
INCOMING_MISSILE = (
fightOrFleeMissile,
setTargetToPrimaryAggressor,
deployEscorts,
groupAttackTarget,
"setAITo: interceptAI.plist",
"setStateTo: OUTBOUND_LOOT"
);
RESTARTED = (
"setStateTo: OUTBOUND_LOOT"
);
TARGET_FOUND = (
setTargetToFoundTarget,
deployEscorts,
groupAttackTarget
);
UPDATE = (
scanForOffenders,
"pauseAI: 10.0"
);
WAIT_FOR_SUN = (
"pauseAI: 10.0",
setSunSkimStartCoordinates
);
WAYPOINT_SET = (
"setStateTo: GO_TO_WAYPOINT_SUN"
);
};
INBOUND_LOOT = {
ATTACKED = (
setTargetToPrimaryAggressor,
groupAttackTarget
);
ENTER = (
"setSpeedTo: 0.0",
performIdle
);
EXIT = (
);
GROUP_ATTACK_TARGET = (
setTargetToFoundTarget,
"setAITo: interceptAI.plist"
);
INCOMING_MISSILE = (
fightOrFleeMissile,
setTargetToPrimaryAggressor,
deployEscorts,
groupAttackTarget,
"setAITo: interceptAI.plist",
"setStateTo: INBOUND_LOOT"
);
NOTHING_FOUND = (
"setStateTo: HEAD_FOR_PLANET"
);
TARGET_FOUND = (
setTargetToFoundTarget,
"setAITo: collectLootAI.plist"
);
UPDATE = (
scanForLoot,
"pauseAI: 10.0"
);
};
OUTBOUND_LOOT = {
ATTACKED = (
setTargetToPrimaryAggressor,
groupAttackTarget
);
ENTER = (
"setSpeedTo: 0.0",
performIdle
);
EXIT = (
);
GROUP_ATTACK_TARGET = (
setTargetToFoundTarget,
"setAITo: interceptAI.plist"
);
INCOMING_MISSILE = (
fightOrFleeMissile,
setTargetToPrimaryAggressor,
deployEscorts,
groupAttackTarget,
"setAITo: interceptAI.plist",
"setStateTo: OUTBOUND_LOOT"
);
NOTHING_FOUND = (
"setStateTo: HEAD_FOR_SUN"
);
TARGET_FOUND = (
setTargetToFoundTarget,
"setAITo: collectLootAI.plist"
);
UPDATE = (
scanForLoot,
"pauseAI: 10.0"
);
};
}

View File

@ -1,69 +1,220 @@
{
GLOBAL = {ENTER = ("setStateTo: HEAD_FOR_SUN"); EXIT = (); UPDATE = (); };
ATTACK_SHIP = {
ENERGY_LOW = (
setTargetToPrimaryAggressor,
broadcastDistressMessage,
"setStateTo: FLEE"
);
ENTER = (
broadcastDistressMessage,
performAttack
);
EXIT = (
);
INCOMING_MISSILE = (
setTargetToPrimaryAggressor,
broadcastDistressMessage,
fightOrFleeMissile,
"setStateTo: FLEE"
);
TARGET_DESTROYED = (
"setStateTo: GLOBAL"
);
TARGET_LOST = (
"setStateTo: GLOBAL"
);
UPDATE = (
);
};
EXIT_SYSTEM = {
ENTER = (
);
EXIT = (
);
UPDATE = (
performHyperSpaceExit
);
};
FLEE = {
ATTACKED = (fightOrFleeHostiles);
FIGHTING = (setTargetToPrimaryAggressor, "setStateTo: ATTACK_SHIP");
FLEEING = (setTargetToPrimaryAggressor, "setStateTo: FLEE");
"TARGET_LOST" = (performIdle, "setStateTo: GLOBAL");
"TARGET_DESTROYED" = (performIdle, "setStateTo: GLOBAL");
ENTER = ("setDesiredRangeTo: 25600", performFlee);
EXIT = ();
"INCOMING_MISSILE" = (setTargetToPrimaryAggressor, broadcastDistressMessage, fightOrFleeMissile, fightOrFleeHostiles);
"REACHED_SAFETY" = (performIdle, "setStateTo: GLOBAL");
UPDATE = ();
};
"ATTACK_SHIP" = {
"ENERGY_LOW" = (setTargetToPrimaryAggressor, broadcastDistressMessage, "setStateTo: FLEE");
ENTER = (broadcastDistressMessage, performAttack);
EXIT = ();
"INCOMING_MISSILE" = (setTargetToPrimaryAggressor, broadcastDistressMessage, fightOrFleeMissile, "setStateTo: FLEE");
"TARGET_DESTROYED" = ("setStateTo: GLOBAL");
"TARGET_LOST" = ("setStateTo: GLOBAL");
UPDATE = ();
};
"GO_TO_WAYPOINT_SUN" = {
ENTER = ("setDesiredRangeTo: 50.0", checkCourseToDestination);
"COURSE_OK" = ("setSpeedFactorTo: 0.5", performFlyToRangeFromDestination);
"WAYPOINT_SET" = ("setDesiredRangeTo: 50.0", checkCourseToDestination);
"DESIRED_RANGE_ACHIEVED" = ("setStateTo: HEAD_FOR_SUN");
EXIT = ();
UPDATE = ();
ATTACKED = (fightOrFleeHostiles);
"INCOMING_MISSILE" = (setTargetToPrimaryAggressor, broadcastDistressMessage, fightOrFleeMissile, fightOrFleeHostiles, "setStateTo: FLEE");
FIGHTING = (setTargetToPrimaryAggressor, "setStateTo: ATTACK_SHIP");
FLEEING = (setTargetToPrimaryAggressor, "setStateTo: FLEE");
};
"HEAD_FOR_SUN" = {
ENTER = (setSunSkimStartCoordinates);
"WAIT_FOR_SUN" = ("pauseAI: 10.0", setSunSkimStartCoordinates);
"APPROACH_COORDINATES" = (setDestinationFromCoordinates, "setDesiredRangeTo: 50000", checkCourseToDestination);
"COURSE_OK" = ("setSpeedFactorTo: 0.80", performFlyToRangeFromDestination);
"WAYPOINT_SET" = ("setStateTo: GO_TO_WAYPOINT_SUN");
"DESIRED_RANGE_ACHIEVED" = (dockEscorts, "setStateTo: GO_TO_SKIM");
EXIT = ();
UPDATE = ();
ATTACKED = (fightOrFleeHostiles);
"INCOMING_MISSILE" = (setTargetToPrimaryAggressor, broadcastDistressMessage, fightOrFleeMissile, fightOrFleeHostiles, "setStateTo: FLEE");
FIGHTING = (setTargetToPrimaryAggressor, "setStateTo: ATTACK_SHIP");
FLEEING = (setTargetToPrimaryAggressor, "setStateTo: FLEE");
};
"GO_TO_SKIM" = {
ENTER = (setSunSkimStartCoordinates, setDestinationFromCoordinates, "setDesiredRangeTo: 100", "setSpeedFactorTo: 1.0", performFlyToRangeFromDestination);
"DESIRED_RANGE_ACHIEVED" = ("setStateTo: SKIM_SUN");
EXIT = ();
UPDATE = ();
};
"SKIM_SUN" = {
ENTER = (setSunSkimEndCoordinates, setDestinationFromCoordinates, "setDesiredRangeTo: 50", "setSpeedFactorTo: 1.0", performFlyToRangeFromDestination);
"DESIRED_RANGE_ACHIEVED" = ("setStateTo: LEAVE_SUN");
EXIT = ();
UPDATE = ();
};
"LEAVE_SUN" = {
ENTER = (setSunSkimExitCoordinates, setDestinationFromCoordinates, "setDesiredRangeTo: 250", "setSpeedFactorTo: 1.0", performFlyToRangeFromDestination);
"DESIRED_RANGE_ACHIEVED" = ("setStateTo: EXIT_SYSTEM");
EXIT = ();
UPDATE = ();
};
"EXIT_SYSTEM" = {ENTER = (); EXIT = (); UPDATE = (performHyperSpaceExit); };
ATTACKED = (
fightOrFleeHostiles
);
ENTER = (
"setDesiredRangeTo: 25600",
performFlee
);
EXIT = (
);
FIGHTING = (
setTargetToPrimaryAggressor,
"setStateTo: ATTACK_SHIP"
);
FLEEING = (
setTargetToPrimaryAggressor,
"setStateTo: FLEE"
);
INCOMING_MISSILE = (
setTargetToPrimaryAggressor,
broadcastDistressMessage,
fightOrFleeMissile,
fightOrFleeHostiles
);
REACHED_SAFETY = (
performIdle,
"setStateTo: GLOBAL"
);
TARGET_DESTROYED = (
performIdle,
"setStateTo: GLOBAL"
);
TARGET_LOST = (
performIdle,
"setStateTo: GLOBAL"
);
UPDATE = (
);
};
GLOBAL = {
ENTER = (
"setStateTo: HEAD_FOR_SUN"
);
EXIT = (
);
UPDATE = (
);
};
GO_TO_SKIM = {
DESIRED_RANGE_ACHIEVED = (
"setStateTo: SKIM_SUN"
);
ENTER = (
setSunSkimStartCoordinates,
setDestinationFromCoordinates,
"setDesiredRangeTo: 100",
"setSpeedFactorTo: 1.0",
performFlyToRangeFromDestination
);
EXIT = (
);
UPDATE = (
);
};
GO_TO_WAYPOINT_SUN = {
ATTACKED = (
fightOrFleeHostiles
);
COURSE_OK = (
"setSpeedFactorTo: 0.5",
performFlyToRangeFromDestination
);
DESIRED_RANGE_ACHIEVED = (
"setStateTo: HEAD_FOR_SUN"
);
ENTER = (
"setDesiredRangeTo: 50.0",
checkCourseToDestination
);
EXIT = (
);
FIGHTING = (
setTargetToPrimaryAggressor,
"setStateTo: ATTACK_SHIP"
);
FLEEING = (
setTargetToPrimaryAggressor,
"setStateTo: FLEE"
);
INCOMING_MISSILE = (
setTargetToPrimaryAggressor,
broadcastDistressMessage,
fightOrFleeMissile,
fightOrFleeHostiles,
"setStateTo: FLEE"
);
UPDATE = (
);
WAYPOINT_SET = (
"setDesiredRangeTo: 50.0",
checkCourseToDestination
);
};
HEAD_FOR_SUN = {
APPROACH_COORDINATES = (
setDestinationFromCoordinates,
"setDesiredRangeTo: 50000",
checkCourseToDestination
);
ATTACKED = (
fightOrFleeHostiles
);
COURSE_OK = (
"setSpeedFactorTo: 0.80",
performFlyToRangeFromDestination
);
DESIRED_RANGE_ACHIEVED = (
dockEscorts,
"setStateTo: GO_TO_SKIM"
);
ENTER = (
setSunSkimStartCoordinates
);
EXIT = (
);
FIGHTING = (
setTargetToPrimaryAggressor,
"setStateTo: ATTACK_SHIP"
);
FLEEING = (
setTargetToPrimaryAggressor,
"setStateTo: FLEE"
);
INCOMING_MISSILE = (
setTargetToPrimaryAggressor,
broadcastDistressMessage,
fightOrFleeMissile,
fightOrFleeHostiles,
"setStateTo: FLEE"
);
UPDATE = (
);
WAIT_FOR_SUN = (
"pauseAI: 10.0",
setSunSkimStartCoordinates
);
WAYPOINT_SET = (
"setStateTo: GO_TO_WAYPOINT_SUN"
);
};
LEAVE_SUN = {
DESIRED_RANGE_ACHIEVED = (
"setStateTo: EXIT_SYSTEM"
);
ENTER = (
setSunSkimExitCoordinates,
setDestinationFromCoordinates,
"setDesiredRangeTo: 250",
"setSpeedFactorTo: 1.0",
performFlyToRangeFromDestination
);
EXIT = (
);
UPDATE = (
);
};
SKIM_SUN = {
DESIRED_RANGE_ACHIEVED = (
"setStateTo: LEAVE_SUN"
);
ENTER = (
setSunSkimEndCoordinates,
setDestinationFromCoordinates,
"setDesiredRangeTo: 50",
"setSpeedFactorTo: 1.0",
performFlyToRangeFromDestination
);
EXIT = (
);
UPDATE = (
);
};
}

View File

@ -1,42 +1,125 @@
{
"LOOK_FOR_STUFF" = {
ATTACKED = (setTargetToPrimaryAggressor, broadcastDistressMessage, "setStateTo: FLEE");
ENTER = (performIdle);
EXIT = ();
"HOLD_FULL" = ("setStateTo: DOCK_WITH_STATION");
"INCOMING_MISSILE" = (fightOrFleeMissile, "setStateTo: FLEE");
"TARGET_FOUND" = (setTargetToFoundTarget, "setStateTo: COLLECT_STUFF");
"NOTHING_FOUND" = ("setStateTo: DOCK_WITH_STATION");
UPDATE = (scanForRandomLoot, "pauseAI: 10.0");
};
"DOCK_WITH_STATION" = {
ATTACKED = (setTargetToPrimaryAggressor, broadcastDistressMessage, "setStateTo: ATTACK_SHIP");
ENTER = (setTargetToStation, "setDesiredRangeTo: 5000.0", performIntercept);
"DESIRED_RANGE_ACHIEVED" = ("setAITo: dockingAI.plist");
EXIT = ();
"INCOMING_MISSILE" = (fightOrFleeMissile, "setStateTo: FLEE");
UPDATE = ();
};
COLLECT_STUFF = {
ATTACKED = (
setTargetToPrimaryAggressor,
broadcastDistressMessage,
"setStateTo: FLEE"
);
CARGO_SCOOPED = (
checkForFullHold,
"setStateTo: LOOK_FOR_STUFF"
);
COLLISION = (
"setStateTo: LOOK_FOR_STUFF"
);
ENTER = (
performCollect
);
EXIT = (
);
FRUSTRATED = (
"setStateTo: LOOK_FOR_STUFF"
);
HOLD_FULL = (
"setStateTo: DOCK_WITH_STATION"
);
INCOMING_MISSILE = (
fightOrFleeMissile,
"setStateTo: FLEE"
);
TARGET_LOST = (
"setStateTo: LOOK_FOR_STUFF"
);
UPDATE = (
);
};
DOCK_WITH_STATION = {
ATTACKED = (
setTargetToPrimaryAggressor,
broadcastDistressMessage,
"setStateTo: ATTACK_SHIP"
);
DESIRED_RANGE_ACHIEVED = (
"setAITo: dockingAI.plist"
);
ENTER = (
setTargetToStation,
"setDesiredRangeTo: 5000.0",
performIntercept
);
EXIT = (
);
INCOMING_MISSILE = (
fightOrFleeMissile,
"setStateTo: FLEE"
);
UPDATE = (
);
};
FLEE = {
"ENERGY_FULL" = (performIdle, "setStateTo: LOOK_FOR_STUFF");
"TARGET_LOST" = (performIdle, "setStateTo: LOOK_FOR_STUFF");
ENTER = ("setDesiredRangeTo: 25600", performFlee);
EXIT = ();
"INCOMING_MISSILE" = (fightOrFleeMissile, "setStateTo: FLEE");
"REACHED_SAFETY" = ("setSpeedTo: 0.0", performIdle);
UPDATE = ();
};
GLOBAL = {ENTER = ("setSpeedFactorTo: 1.0", "setStateTo: LOOK_FOR_STUFF"); EXIT = (); UPDATE = (); };
"COLLECT_STUFF" = {
ATTACKED = (setTargetToPrimaryAggressor, broadcastDistressMessage, "setStateTo: FLEE");
"CARGO_SCOOPED" = (checkForFullHold, "setStateTo: LOOK_FOR_STUFF");
FRUSTRATED = ("setStateTo: LOOK_FOR_STUFF");
"TARGET_LOST" = ("setStateTo: LOOK_FOR_STUFF");
"COLLISION" = ("setStateTo: LOOK_FOR_STUFF");
ENTER = (performCollect);
EXIT = ();
"HOLD_FULL" = ("setStateTo: DOCK_WITH_STATION");
"INCOMING_MISSILE" = (fightOrFleeMissile, "setStateTo: FLEE");
UPDATE = ();
};
}
ENERGY_FULL = (
performIdle,
"setStateTo: LOOK_FOR_STUFF"
);
ENTER = (
"setDesiredRangeTo: 25600",
performFlee
);
EXIT = (
);
INCOMING_MISSILE = (
fightOrFleeMissile,
"setStateTo: FLEE"
);
REACHED_SAFETY = (
"setSpeedTo: 0.0",
performIdle
);
TARGET_LOST = (
performIdle,
"setStateTo: LOOK_FOR_STUFF"
);
UPDATE = (
);
};
GLOBAL = {
ENTER = (
"setSpeedFactorTo: 1.0",
"setStateTo: LOOK_FOR_STUFF"
);
EXIT = (
);
UPDATE = (
);
};
LOOK_FOR_STUFF = {
ATTACKED = (
setTargetToPrimaryAggressor,
broadcastDistressMessage,
"setStateTo: FLEE"
);
ENTER = (
performIdle
);
EXIT = (
);
HOLD_FULL = (
"setStateTo: DOCK_WITH_STATION"
);
INCOMING_MISSILE = (
fightOrFleeMissile,
"setStateTo: FLEE"
);
NOTHING_FOUND = (
"setStateTo: DOCK_WITH_STATION"
);
TARGET_FOUND = (
setTargetToFoundTarget,
"setStateTo: COLLECT_STUFF"
);
UPDATE = (
scanForRandomLoot,
"pauseAI: 10.0"
);
};
}

View File

@ -1,24 +1,64 @@
{
"DEFEND_SELF" = {
"ENERGY_LOW" = ("setStateTo: FLEE");
ENTER = (performAttack);
EXIT = ();
"TARGET_DESTROYED" = ("setStateTo: TRAVEL_TO_PLANET");
UPDATE = ();
};
"EXIT_SYSTEM" = {ENTER = (performLanding); EXIT = (); UPDATE = (); };
DEFEND_SELF = {
ENERGY_LOW = (
"setStateTo: FLEE"
);
ENTER = (
performAttack
);
EXIT = (
);
TARGET_DESTROYED = (
"setStateTo: TRAVEL_TO_PLANET"
);
UPDATE = (
);
};
EXIT_SYSTEM = {
ENTER = (
performLanding
);
EXIT = (
);
UPDATE = (
);
};
FLEE = {
ENTER = (performFlee);
EXIT = ();
"REACHED_SAFETY" = (performIdle, "setStateTo: TRAVEL_TO_PLANET");
UPDATE = ();
};
GLOBAL = {ENTER = ("setStateTo: TRAVEL_TO_PLANET"); EXIT = (); UPDATE = (); };
"TRAVEL_TO_PLANET" = {
ATTACK = (setTargetToPrimaryAggressor, "setStateTo: DEFEND_SELF");
ENTER = (performFlyToPlanet);
EXIT = ();
"REACHED_SURFACE" = ("setStateTo: EXIT_SYSTEM");
UPDATE = ();
};
ENTER = (
performFlee
);
EXIT = (
);
REACHED_SAFETY = (
performIdle,
"setStateTo: TRAVEL_TO_PLANET"
);
UPDATE = (
);
};
GLOBAL = {
ENTER = (
"setStateTo: TRAVEL_TO_PLANET"
);
EXIT = (
);
UPDATE = (
);
};
TRAVEL_TO_PLANET = {
ATTACK = (
setTargetToPrimaryAggressor,
"setStateTo: DEFEND_SELF"
);
ENTER = (
performFlyToPlanet
);
EXIT = (
);
REACHED_SURFACE = (
"setStateTo: EXIT_SYSTEM"
);
UPDATE = (
);
};
}

View File

@ -1,36 +1,108 @@
{
"DEFENSE_MODE" = {
ATTACKED = (setTargetToPrimaryAggressor, increaseAlertLevel);
ENTER = (checkTargetLegalStatus);
EXIT = ();
"RED_ALERT" = (launchPolice);
"YELLOW_ALERT" = ("setStateTo: IDLE");
"CONDITION_YELLOW" = ("setStateTo: IDLE");
"CONDITION_GREEN" = ("setStateTo: CHECK_FOR_DEBRIS");
"INCOMING_MISSILE" = (fireECM, increaseAlertLevel);
"TARGET_OFFENDER" = (increaseAlertLevel);
"TARGET_FUGITIVE" = (increaseAlertLevel);
"ENERGY_FULL" = ("pauseAI: 20.0", "setStateTo: IDLE");
"TARGET_DESTROYED" = ("pauseAI: 20.0", "setStateTo: IDLE");
"TARGET_LOST" = ("pauseAI: 20.0", "setStateTo: IDLE");
"NO_TARGET" = ("pauseAI: 20.0", "setStateTo: IDLE");
UPDATE = ();
};
"CHECK_FOR_DEBRIS" = {
ATTACKED = (setTargetToPrimaryAggressor, increaseAlertLevel, "setStateTo: DEFENSE_MODE");
ENTER = ();
EXIT = ();
"INCOMING_MISSILE" = (fireECM, increaseAlertLevel);
"TARGET_FOUND" = (launchScavenger, "setStateTo: IDLE");
"NOTHING_FOUND" = ("setStateTo: IDLE", "pauseAI: 20.0");
UPDATE = (scanForLoot, "pauseAI: 10.0");
};
GLOBAL = {ENTER = ("setStateTo: IDLE"); EXIT = (); UPDATE = (); };
CHECK_FOR_DEBRIS = {
ATTACKED = (
setTargetToPrimaryAggressor,
increaseAlertLevel,
"setStateTo: DEFENSE_MODE"
);
ENTER = (
);
EXIT = (
);
INCOMING_MISSILE = (
fireECM,
increaseAlertLevel
);
NOTHING_FOUND = (
"setStateTo: IDLE",
"pauseAI: 20.0"
);
TARGET_FOUND = (
launchScavenger,
"setStateTo: IDLE"
);
UPDATE = (
scanForLoot,
"pauseAI: 10.0"
);
};
DEFENSE_MODE = {
ATTACKED = (
setTargetToPrimaryAggressor,
increaseAlertLevel
);
CONDITION_GREEN = (
"setStateTo: CHECK_FOR_DEBRIS"
);
CONDITION_YELLOW = (
"setStateTo: IDLE"
);
ENERGY_FULL = (
"pauseAI: 20.0",
"setStateTo: IDLE"
);
ENTER = (
checkTargetLegalStatus
);
EXIT = (
);
INCOMING_MISSILE = (
fireECM,
increaseAlertLevel
);
NO_TARGET = (
"pauseAI: 20.0",
"setStateTo: IDLE"
);
RED_ALERT = (
launchPolice
);
TARGET_DESTROYED = (
"pauseAI: 20.0",
"setStateTo: IDLE"
);
TARGET_FUGITIVE = (
increaseAlertLevel
);
TARGET_LOST = (
"pauseAI: 20.0",
"setStateTo: IDLE"
);
TARGET_OFFENDER = (
increaseAlertLevel
);
UPDATE = (
);
YELLOW_ALERT = (
"setStateTo: IDLE"
);
};
GLOBAL = {
ENTER = (
"setStateTo: IDLE"
);
EXIT = (
);
UPDATE = (
);
};
IDLE = {
ATTACKED = (setTargetToPrimaryAggressor, increaseAlertLevel, "setStateTo: DEFENSE_MODE");
ENTER = ();
EXIT = ();
"INCOMING_MISSILE" = (fireECM, increaseAlertLevel);
UPDATE = (decreaseAlertLevel, "setStateTo: CHECK_FOR_DEBRIS");
};
ATTACKED = (
setTargetToPrimaryAggressor,
increaseAlertLevel,
"setStateTo: DEFENSE_MODE"
);
ENTER = (
);
EXIT = (
);
INCOMING_MISSILE = (
fireECM,
increaseAlertLevel
);
UPDATE = (
decreaseAlertLevel,
"setStateTo: CHECK_FOR_DEBRIS"
);
};
}

View File

@ -1,94 +1,219 @@
{
"ATTACK_SHIP" = {
"ENERGY_LOW" = ("setSpeedFactorTo: 1.0", "pauseAI: 15.0", "setStateTo: EXIT_SYSTEM");
ENTER = (performAttack);
EXIT = ();
"INCOMING_MISSILE" = (
fightOrFleeMissile,
"setSpeedFactorTo: 1.0",
"pauseAI: 15.0",
"setStateTo: EXIT_SYSTEM"
);
"TARGET_DESTROYED" = ("setStateTo: HEAD_AWAY_FROM_PLANET");
"TARGET_LOST" = ("setStateTo: HEAD_AWAY_FROM_PLANET");
UPDATE = ();
};
"EXIT_SYSTEM" = {ENTER = (); EXIT = (); UPDATE = (performHyperSpaceExit); };
ATTACK_SHIP = {
ENERGY_LOW = (
"setSpeedFactorTo: 1.0",
"pauseAI: 15.0",
"setStateTo: EXIT_SYSTEM"
);
ENTER = (
performAttack
);
EXIT = (
);
INCOMING_MISSILE = (
fightOrFleeMissile,
"setSpeedFactorTo: 1.0",
"pauseAI: 15.0",
"setStateTo: EXIT_SYSTEM"
);
TARGET_DESTROYED = (
"setStateTo: HEAD_AWAY_FROM_PLANET"
);
TARGET_LOST = (
"setStateTo: HEAD_AWAY_FROM_PLANET"
);
UPDATE = (
);
};
EXIT_SYSTEM = {
ENTER = (
);
EXIT = (
);
UPDATE = (
performHyperSpaceExit
);
};
FLEE = {
ATTACKED = (fightOrFleeHostiles);
ENTER = ("setDesiredRangeTo: 25600", performFlee);
EXIT = ();
FIGHTING = (setTargetToPrimaryAggressor, "setStateTo: ATTACK_SHIP");
FLEEING = (setTargetToPrimaryAggressor, "setStateTo: FLEE");
"INCOMING_MISSILE" = (setTargetToPrimaryAggressor, broadcastDistressMessage, fightOrFleeMissile);
"REACHED_SAFETY" = (performIdle, "setStateTo: GLOBAL");
"TARGET_DESTROYED" = (performIdle, "setStateTo: GLOBAL");
"TARGET_LOST" = (performIdle, "setStateTo: GLOBAL");
UPDATE = ();
};
GLOBAL = {ENTER = ("setStateTo: HEAD_FOR_SUN"); EXIT = (); UPDATE = (); };
"GO_TO_WAYPOINT1" = {
ATTACKED = (fightOrFleeHostiles);
"COURSE_OK" = ("setSpeedFactorTo: 0.75", performFlyToRangeFromDestination);
"DESIRED_RANGE_ACHIEVED" = ("setStateTo: HEAD_FOR_SUN");
ENTER = ("setDesiredRangeTo: 50.0", checkCourseToDestination);
EXIT = ();
FIGHTING = (setTargetToPrimaryAggressor, "setStateTo: ATTACK_SHIP");
FLEEING = (setTargetToPrimaryAggressor, "setStateTo: FLEE");
"INCOMING_MISSILE" = (fightOrFleeMissile, "setStateTo: FLEE");
UPDATE = ();
"WAYPOINT_SET" = ("setDesiredRangeTo: 50.0", checkCourseToDestination);
};
"HEAD_FOR_SUN" = {
ATTACKED = (fightOrFleeHostiles);
"COURSE_OK" = (
"setDesiredRangeTo: 500.0",
"setSpeedFactorTo: 0.75",
performFlyToRangeFromDestination
);
"DESIRED_RANGE_ACHIEVED" = ("setStateTo: SKIM_SUN");
ENTER = (
setSunSkimStartCoordinates,
setDestinationFromCoordinates,
checkCourseToDestination
);
EXIT = ();
FIGHTING = (setTargetToPrimaryAggressor, "setStateTo: ATTACK_SHIP");
FLEEING = (setTargetToPrimaryAggressor, "setStateTo: FLEE");
"INCOMING_MISSILE" = (fightOrFleeMissile, "setStateTo: FLEE");
UPDATE = ();
"WAYPOINT_SET" = ("setStateTo: GO_TO_WAYPOINT1");
};
"LEAVE_SUN" = {
ATTACKED = (fightOrFleeHostiles);
"DESIRED_RANGE_ACHIEVED" = ("setStateTo: EXIT_SYSTEM");
ENTER = (
setSunSkimExitCoordinates,
setDestinationFromCoordinates,
"setDesiredRangeTo: 250.0",
"setSpeedFactorTo: 1.0",
performFlyToRangeFromDestination
);
EXIT = ();
FIGHTING = (setTargetToPrimaryAggressor, "setStateTo: ATTACK_SHIP");
FLEEING = (setTargetToPrimaryAggressor, "setStateTo: FLEE");
"INCOMING_MISSILE" = (fightOrFleeMissile, "setStateTo: FLEE");
UPDATE = ();
};
"SKIM_SUN" = {
ATTACKED = (fightOrFleeHostiles);
"DESIRED_RANGE_ACHIEVED" = ("setStateTo: LEAVE_SUN");
ENTER = (
setSunSkimEndCoordinates,
setDestinationFromCoordinates,
"setDesiredRangeTo: 100.0",
"setSpeedFactorTo: 1.0",
performFlyToRangeFromDestination
);
EXIT = ();
FIGHTING = (setTargetToPrimaryAggressor, "setStateTo: ATTACK_SHIP");
FLEEING = (setTargetToPrimaryAggressor, "setStateTo: FLEE");
"INCOMING_MISSILE" = (fightOrFleeMissile, "setStateTo: FLEE");
UPDATE = ();
};
ATTACKED = (
fightOrFleeHostiles
);
ENTER = (
"setDesiredRangeTo: 25600",
performFlee
);
EXIT = (
);
FIGHTING = (
setTargetToPrimaryAggressor,
"setStateTo: ATTACK_SHIP"
);
FLEEING = (
setTargetToPrimaryAggressor,
"setStateTo: FLEE"
);
INCOMING_MISSILE = (
setTargetToPrimaryAggressor,
broadcastDistressMessage,
fightOrFleeMissile
);
REACHED_SAFETY = (
performIdle,
"setStateTo: GLOBAL"
);
TARGET_DESTROYED = (
performIdle,
"setStateTo: GLOBAL"
);
TARGET_LOST = (
performIdle,
"setStateTo: GLOBAL"
);
UPDATE = (
);
};
GLOBAL = {
ENTER = (
"setStateTo: HEAD_FOR_SUN"
);
EXIT = (
);
UPDATE = (
);
};
GO_TO_WAYPOINT1 = {
ATTACKED = (
fightOrFleeHostiles
);
COURSE_OK = (
"setSpeedFactorTo: 0.75",
performFlyToRangeFromDestination
);
DESIRED_RANGE_ACHIEVED = (
"setStateTo: HEAD_FOR_SUN"
);
ENTER = (
"setDesiredRangeTo: 50.0",
checkCourseToDestination
);
EXIT = (
);
FIGHTING = (
setTargetToPrimaryAggressor,
"setStateTo: ATTACK_SHIP"
);
FLEEING = (
setTargetToPrimaryAggressor,
"setStateTo: FLEE"
);
INCOMING_MISSILE = (
fightOrFleeMissile,
"setStateTo: FLEE"
);
UPDATE = (
);
WAYPOINT_SET = (
"setDesiredRangeTo: 50.0",
checkCourseToDestination
);
};
HEAD_FOR_SUN = {
ATTACKED = (
fightOrFleeHostiles
);
COURSE_OK = (
"setDesiredRangeTo: 500.0",
"setSpeedFactorTo: 0.75",
performFlyToRangeFromDestination
);
DESIRED_RANGE_ACHIEVED = (
"setStateTo: SKIM_SUN"
);
ENTER = (
setSunSkimStartCoordinates,
setDestinationFromCoordinates,
checkCourseToDestination
);
EXIT = (
);
FIGHTING = (
setTargetToPrimaryAggressor,
"setStateTo: ATTACK_SHIP"
);
FLEEING = (
setTargetToPrimaryAggressor,
"setStateTo: FLEE"
);
INCOMING_MISSILE = (
fightOrFleeMissile,
"setStateTo: FLEE"
);
UPDATE = (
);
WAYPOINT_SET = (
"setStateTo: GO_TO_WAYPOINT1"
);
};
LEAVE_SUN = {
ATTACKED = (
fightOrFleeHostiles
);
DESIRED_RANGE_ACHIEVED = (
"setStateTo: EXIT_SYSTEM"
);
ENTER = (
setSunSkimExitCoordinates,
setDestinationFromCoordinates,
"setDesiredRangeTo: 250.0",
"setSpeedFactorTo: 1.0",
performFlyToRangeFromDestination
);
EXIT = (
);
FIGHTING = (
setTargetToPrimaryAggressor,
"setStateTo: ATTACK_SHIP"
);
FLEEING = (
setTargetToPrimaryAggressor,
"setStateTo: FLEE"
);
INCOMING_MISSILE = (
fightOrFleeMissile,
"setStateTo: FLEE"
);
UPDATE = (
);
};
SKIM_SUN = {
ATTACKED = (
fightOrFleeHostiles
);
DESIRED_RANGE_ACHIEVED = (
"setStateTo: LEAVE_SUN"
);
ENTER = (
setSunSkimEndCoordinates,
setDestinationFromCoordinates,
"setDesiredRangeTo: 100.0",
"setSpeedFactorTo: 1.0",
performFlyToRangeFromDestination
);
EXIT = (
);
FIGHTING = (
setTargetToPrimaryAggressor,
"setStateTo: ATTACK_SHIP"
);
FLEEING = (
setTargetToPrimaryAggressor,
"setStateTo: FLEE"
);
INCOMING_MISSILE = (
fightOrFleeMissile,
"setStateTo: FLEE"
);
UPDATE = (
);
};
}

View File

@ -1,26 +1,71 @@
{
"ATTACK_SHIP" = {
ENTER = (performAttack);
"THARGOID_DESTROYED" = ("setStateTo: CHECK_FOR_CONTROL");
"TARGET_DESTROYED" = ("setStateTo: CHECK_FOR_CONTROL");
"TARGET_LOST" = ("setStateTo: CHECK_FOR_CONTROL");
UPDATE = (scanForThargoid, "pauseAI: 5.0");
"NOTHING_FOUND" = ("setStateTo: CHECK_FOR_CONTROL");
EXIT = ();
};
"CHECK_FOR_CONTROL" = {
"THARGOID_DESTROYED" = ("setStateTo: CHECK_FOR_CONTROL");
"TARGET_FOUND" = ("setStateTo: LOOK_FOR_TARGETS");
ENTER = ("setSpeedTo: 0.0", performTumble);
EXIT = ();
UPDATE = (scanForThargoid, "pauseAI: 1.0");
};
"LOOK_FOR_TARGETS" = {
"THARGOID_DESTROYED" = ("setStateTo: CHECK_FOR_CONTROL");
"TARGET_FOUND" = (setTargetToFoundTarget, "setStateTo: ATTACK_SHIP");
ENTER = (scanForNonThargoid, "pauseAI: 1.0");
EXIT = ();
UPDATE = (scanForNonThargoid, "pauseAI: 10.0");
};
GLOBAL = {ENTER = ("setStateTo: ATTACK_SHIP"); EXIT = (); UPDATE = (); };
ATTACK_SHIP = {
ENTER = (
performAttack
);
EXIT = (
);
NOTHING_FOUND = (
"setStateTo: CHECK_FOR_CONTROL"
);
TARGET_DESTROYED = (
"setStateTo: CHECK_FOR_CONTROL"
);
TARGET_LOST = (
"setStateTo: CHECK_FOR_CONTROL"
);
THARGOID_DESTROYED = (
"setStateTo: CHECK_FOR_CONTROL"
);
UPDATE = (
scanForThargoid,
"pauseAI: 5.0"
);
};
CHECK_FOR_CONTROL = {
ENTER = (
"setSpeedTo: 0.0",
performTumble
);
EXIT = (
);
TARGET_FOUND = (
"setStateTo: LOOK_FOR_TARGETS"
);
THARGOID_DESTROYED = (
"setStateTo: CHECK_FOR_CONTROL"
);
UPDATE = (
scanForThargoid,
"pauseAI: 1.0"
);
};
GLOBAL = {
ENTER = (
"setStateTo: ATTACK_SHIP"
);
EXIT = (
);
UPDATE = (
);
};
LOOK_FOR_TARGETS = {
ENTER = (
scanForNonThargoid,
"pauseAI: 1.0"
);
EXIT = (
);
TARGET_FOUND = (
setTargetToFoundTarget,
"setStateTo: ATTACK_SHIP"
);
THARGOID_DESTROYED = (
"setStateTo: CHECK_FOR_CONTROL"
);
UPDATE = (
scanForNonThargoid,
"pauseAI: 10.0"
);
};
}

View File

@ -1,43 +1,139 @@
{
"ATTACK_SHIP" = {
"ATTACKED" = (setTargetToPrimaryAggressor, "setStateTo: ATTACK_SHIP");
ENTER = (performAttack);
EXIT = ();
"INCOMING_MISSILE" = (fightOrFleeMissile, setTargetToPrimaryAggressor, "setStateTo: ATTACK_SHIP");
"TARGET_DESTROYED" = ("setStateTo: LOOK_FOR_TARGETS");
"TARGET_FOUND" = (setTargetToFoundTarget, "setStateTo: ATTACK_SHIP");
"TARGET_LOST" = ("setStateTo: LOOK_FOR_TARGETS");
UPDATE = (scanForNonThargoid, "pauseAI: 15.0");
};
"LOOK_FOR_TARGETS" = {
"ATTACKED" = (setTargetToPrimaryAggressor, "setStateTo: ATTACK_SHIP");
"INCOMING_MISSILE" = (fightOrFleeMissile, setTargetToPrimaryAggressor, "setStateTo: ATTACK_SHIP");
"TARGET_FOUND" = (setTargetToFoundTarget, "setStateTo: ATTACK_SHIP");
"NOTHING_FOUND" = ("setStateTo: HEAD_FOR_PLANET");
ENTER = ("setSpeedTo: 0.0", performTumble, scanForNonThargoid, "pauseAI: 5.0");
EXIT = ();
UPDATE = (scanForNonThargoid, "pauseAI: 5.0");
};
"HEAD_FOR_PLANET" = {
ENTER = (setCourseToPlanet, "setDesiredRangeTo: 80000.0", checkCourseToDestination);
"COURSE_OK" = ("setSpeedFactorTo: 1.0", performFlyToRangeFromDestination);
"WAYPOINT_SET" = ("setStateTo: GO_TO_WAYPOINT1");
"DESIRED_RANGE_ACHIEVED" = ("setStateTo: LOOK_FOR_TARGETS");
ATTACKED = (setTargetToPrimaryAggressor, "setStateTo: ATTACK_SHIP");
"INCOMING_MISSILE" = (fightOrFleeMissile, setTargetToPrimaryAggressor, "setStateTo: ATTACK_SHIP");
"TARGET_FOUND" = (setTargetToFoundTarget, "setStateTo: ATTACK_SHIP");
EXIT = ();
UPDATE = (scanForNonThargoid, "pauseAI: 10.0");
};
"GO_TO_WAYPOINT1" = {
ENTER = ("setDesiredRangeTo: 50.0", checkCourseToDestination);
"COURSE_OK" = ("setSpeedFactorTo: 1.0", performFlyToRangeFromDestination);
"WAYPOINT_SET" = ("setDesiredRangeTo: 50.0", checkCourseToDestination);
"DESIRED_RANGE_ACHIEVED" = ("setStateTo: HEAD_FOR_PLANET");
ATTACKED = (setTargetToPrimaryAggressor, "setStateTo: ATTACK_SHIP");
"INCOMING_MISSILE" = (fightOrFleeMissile, setTargetToPrimaryAggressor, "setStateTo: ATTACK_SHIP");
EXIT = ();
UPDATE = (scanForNonThargoid, "pauseAI: 10.0");
};
GLOBAL = {ENTER = ("setStateTo: LOOK_FOR_TARGETS"); EXIT = (); UPDATE = (); };
ATTACK_SHIP = {
ATTACKED = (
setTargetToPrimaryAggressor,
"setStateTo: ATTACK_SHIP"
);
ENTER = (
performAttack
);
EXIT = (
);
INCOMING_MISSILE = (
fightOrFleeMissile,
setTargetToPrimaryAggressor,
"setStateTo: ATTACK_SHIP"
);
TARGET_DESTROYED = (
"setStateTo: LOOK_FOR_TARGETS"
);
TARGET_FOUND = (
setTargetToFoundTarget,
"setStateTo: ATTACK_SHIP"
);
TARGET_LOST = (
"setStateTo: LOOK_FOR_TARGETS"
);
UPDATE = (
scanForNonThargoid,
"pauseAI: 15.0"
);
};
GLOBAL = {
ENTER = (
"setStateTo: LOOK_FOR_TARGETS"
);
EXIT = (
);
UPDATE = (
);
};
GO_TO_WAYPOINT1 = {
ATTACKED = (
setTargetToPrimaryAggressor,
"setStateTo: ATTACK_SHIP"
);
COURSE_OK = (
"setSpeedFactorTo: 1.0",
performFlyToRangeFromDestination
);
DESIRED_RANGE_ACHIEVED = (
"setStateTo: HEAD_FOR_PLANET"
);
ENTER = (
"setDesiredRangeTo: 50.0",
checkCourseToDestination
);
EXIT = (
);
INCOMING_MISSILE = (
fightOrFleeMissile,
setTargetToPrimaryAggressor,
"setStateTo: ATTACK_SHIP"
);
UPDATE = (
scanForNonThargoid,
"pauseAI: 10.0"
);
WAYPOINT_SET = (
"setDesiredRangeTo: 50.0",
checkCourseToDestination
);
};
HEAD_FOR_PLANET = {
ATTACKED = (
setTargetToPrimaryAggressor,
"setStateTo: ATTACK_SHIP"
);
COURSE_OK = (
"setSpeedFactorTo: 1.0",
performFlyToRangeFromDestination
);
DESIRED_RANGE_ACHIEVED = (
"setStateTo: LOOK_FOR_TARGETS"
);
ENTER = (
setCourseToPlanet,
"setDesiredRangeTo: 80000.0",
checkCourseToDestination
);
EXIT = (
);
INCOMING_MISSILE = (
fightOrFleeMissile,
setTargetToPrimaryAggressor,
"setStateTo: ATTACK_SHIP"
);
TARGET_FOUND = (
setTargetToFoundTarget,
"setStateTo: ATTACK_SHIP"
);
UPDATE = (
scanForNonThargoid,
"pauseAI: 10.0"
);
WAYPOINT_SET = (
"setStateTo: GO_TO_WAYPOINT1"
);
};
LOOK_FOR_TARGETS = {
ATTACKED = (
setTargetToPrimaryAggressor,
"setStateTo: ATTACK_SHIP"
);
ENTER = (
"setSpeedTo: 0.0",
performTumble,
scanForNonThargoid,
"pauseAI: 5.0"
);
EXIT = (
);
INCOMING_MISSILE = (
fightOrFleeMissile,
setTargetToPrimaryAggressor,
"setStateTo: ATTACK_SHIP"
);
NOTHING_FOUND = (
"setStateTo: HEAD_FOR_PLANET"
);
TARGET_FOUND = (
setTargetToFoundTarget,
"setStateTo: ATTACK_SHIP"
);
UPDATE = (
scanForNonThargoid,
"pauseAI: 5.0"
);
};
}

View File

@ -1,12 +1,21 @@
{
DETONATE = {
ENTER = (becomeEnergyBlast);
EXIT = ();
UPDATE = ();
};
ENTER = (
becomeEnergyBlast
);
EXIT = (
);
UPDATE = (
);
};
GLOBAL = {
ENTER = ("pauseAI: 5.0");
EXIT = ();
UPDATE = ("setStateTo: DETONATE");
};
ENTER = (
"pauseAI: 5.0"
);
EXIT = (
);
UPDATE = (
"setStateTo: DETONATE"
);
};
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,12 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Firearms</key>
<integer>1</integer>
<key>Narcotics</key>
<integer>2</integer>
<key>Slaves</key>
<integer>1</integer>
</dict>
</plist>
{
Firearms = <*I1>;
Narcotics = <*I2>;
Slaves = <*I1>;
}

View File

@ -1,66 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>key_roll_left</key>
<integer>253</integer>
<key>key_roll_right</key>
<integer>252</integer>
<key>key_pitch_forward</key>
<integer>255</integer>
<key>key_pitch_back</key>
<integer>254</integer>
<key>key_increase_speed</key>
<integer>119</integer>
<key>key_inject_fuel</key>
<integer>105</integer>
<key>key_decrease_speed</key>
<integer>115</integer>
<key>key_fire_lasers</key>
<integer>97</integer>
<key>key_target_missile</key>
<integer>116</integer>
<key>key_untarget_missile</key>
<integer>117</integer>
<key>key_launch_missile</key>
<integer>109</integer>
<key>key_next_missile</key>
<integer>121</integer>
<key>key_ident_system</key>
<integer>114</integer>
<key>key_ecm</key>
<integer>101</integer>
<key>key_launch_escapepod</key>
<integer>27</integer>
<key>key_energy_bomb</key>
<integer>9</integer>
<key>key_galactic_hyperspace</key>
<integer>103</integer>
<key>key_emergency_hyperdrive</key>
<integer>72</integer>
<key>key_hyperspace</key>
<integer>104</integer>
<key>key_jumpdrive</key>
<integer>106</integer>
<key>key_dump_cargo</key>
<integer>100</integer>
<key>key_autopilot</key>
<integer>99</integer>
<key>key_autodock</key>
<integer>68</integer>
<key>key_snapshot</key>
<integer>42</integer>
<key>key_docking_music</key>
<integer>115</integer>
<key>key_scanner_zoom</key>
<integer>122</integer>
<key>key_map_dump</key>
<integer>33</integer>
<key>key_map_home</key>
<integer>302</integer>
<key>key_comms_log</key>
<integer>96</integer>
<key>key_next_compass_mode</key>
<integer>92</integer>
</dict>
</plist>
{
key_autodock = <*I68>;
key_autopilot = <*I99>;
key_comms_log = <*I96>;
key_decrease_speed = <*I115>;
key_docking_music = <*I115>;
key_dump_cargo = <*I100>;
key_ecm = <*I101>;
key_emergency_hyperdrive = <*I72>;
key_energy_bomb = <*I9>;
key_fire_lasers = <*I97>;
key_galactic_hyperspace = <*I103>;
key_hyperspace = <*I104>;
key_ident_system = <*I114>;
key_increase_speed = <*I119>;
key_inject_fuel = <*I105>;
key_jumpdrive = <*I106>;
key_launch_escapepod = <*I27>;
key_launch_missile = <*I109>;
key_map_dump = <*I33>;
key_map_home = <*I302>;
key_next_compass_mode = <*I92>;
key_next_missile = <*I121>;
key_pitch_back = <*I254>;
key_pitch_forward = <*I255>;
key_roll_left = <*I253>;
key_roll_right = <*I252>;
key_scanner_zoom = <*I122>;
key_snapshot = <*I42>;
key_target_missile = <*I116>;
key_untarget_missile = <*I117>;
}

View File

@ -1,60 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>constrictor_hunt_0_150</key>
<string>"The constrictor was last seen at Reesdice, Commander."</string>
<key>constrictor_hunt_0_28</key>
<string>"Yep, an unusual new ship had a galactic hyperdrive fitted here, used it too."</string>
<key>constrictor_hunt_0_36</key>
<string>"A strange looking ship left here a while back. Looked bound for Arexe."</string>
<key>constrictor_hunt_1_118</key>
<string>"You can tackle the vicious scoundrel if you like. He's at Orarra."</string>
<key>constrictor_hunt_1_193</key>
<string>"There's a real deadly pirate out there."</string>
<key>constrictor_hunt_1_253</key>
<string>"This strange ship dehyped here from nowhere, sun skimmed and jumped. I hear it went to Inbibe."</string>
<key>constrictor_hunt_1_53</key>
<string>"Oh dear me yes. A frightful rogue with what I believe you people call a lead posterior shot up lots of beastly pirates and went to Usleri."</string>
<key>constrictor_hunt_1_79</key>
<string>"Rogue ship went for me at Ausar. My lasers didn't even scratch its hull."</string>
<key>constrictor_hunt_1_A</key>
<string>"I hear a weird looking ship was seen at Errius."</string>
<key>constrictor_hunt_brief1</key>
<string>---INCOMING MESSAGE\n\nGreetings Commander,\n\nI am Captain Curruthers of Her Imperial Majesty's Space Navy and I beg a moment of your valuable time. We would like you to do a little job for us.\nThe ship you see here is a new model, the Constrictor, equipped with a top secret new shield generator.\n\nUnfortunately it's been stolen.\n</string>
<key>conhunt_short_desc1</key>
<string>Hunt for the constrictor stolen from Xeer.</string>
<key>constrictor_hunt_brief1a</key>
<string>It went missing from our ship yard on Xeer five months ago and was last seen at Reesdice. Your mission should you decide to accept it, is to seek and destroy this ship. You are cautioned that only Military Lasers will get through the new shields and that the Constrictor is fitted with an E.C.M. System.\n\nGood Luck, Commander.\n\n---MESSAGE ENDS.</string>
<key>constrictor_hunt_brief1b</key>
<string>It went missing from our ship yard on Xeer five months ago and is believed to have jumped to this galaxy. Your mission should you decide to accept it, is to seek and destroy this ship. You are cautioned that only Military Lasers will get through the new shields and that the Constrictor is fitted with an E.C.M. System.\n\nGood Luck, Commander.\n\n---MESSAGE ENDS.</string>
<key>constrictor_hunt_debrief</key>
<string>---INCOMING MESSAGE\n\nCongratulations Commander!\n\nThere will always be a place for you in Her Imperial Majesty's Space Navy.\n\nAnd maybe sooner than you think...\n\n---MESSAGE ENDS.</string>
<key>thargoid_plans_debrief</key>
<string>---INCOMING MESSAGE\n\nYou have served us well and we shall remember.\n\nWe did not expect the Thargoids to find out about you.\n\nFor the moment please accept this Navy Extra Energy Unit as payment.\n\n---MESSAGE ENDS.</string>
<key>thargoid_plans_intro_brief</key>
<string>---INCOMING MESSAGE\n\nAttention Commander, I am Captain Fortesque of Her Imperial Majesty's Space Navy.\n\nWe have need of your services again.\n\nIf you would be so good as to go to Ceerdi you will be briefed.\n\nIf successful, you will be rewarded.\n\n---MESSAGE ENDS.</string>
<key>thargplans_short_desc1</key>
<string>Go to Ceerdi for a briefing.</string>
<key>thargoid_plans_main_brief</key>
<string>---INCOMING MESSAGE\n\nGood Day Commander.\n\nI am Agent Blake of Naval Intelligence.\nAs you know, the Navy have been keeping the Thargoids off your ass out in deep space for many years now.\nWell the situation has changed. Our boys are ready for a push right to the home system of those murderers.\n\nI have obtained the defence plans for their Hive Worlds. The beetles know we've got something but not what. If I transmit the plans to our base on Birera they'll intercept the transmission. I need a ship to make the run. You're elected.\n\nThe plans are unipulse coded within this transmission. You will be paid.\n\nGood luck Commander.\n\n---MESSAGE ENDS.</string>
<key>thargplans_short_desc2</key>
<string>Convey the secret plans to Birera.</string>
<!-- Nova mission -->
<key>nova_missiondesc</key>
<string>Get the refugees to safety.</string>
<key>nova_1</key>
<string>You've arrived at an unfortunate time, Commander.\n\nOur sun has become unstable and is due to go nova at any moment. All our ships are evacuating the system, the last few refugees have come here to find a ship to take them to safety.\n\nPlease, please help us to escape!</string>
<key>nova_hero</key>
<string>Commander, we thank you.\n\nYou've bought us all to safety but we have no money with which we can reward you\n- our last credits were taken by those who took us to the space station.\n\nInstead we offer you undying gratitude... and what few valuable possessions we can spare.\n\nYou are our hero!</string>
<!-- test follows -->
<key>nova_yesno</key>
<dict>
<key>YES</key>
<string>Okay, I'll help.</string>
<key>NO</key>
<string>No, sorry.</string>
</dict>
<!-- end test -->
</dict>
</plist>
{
conhunt_short_desc1 = "Hunt for the constrictor stolen from Xeer.";
constrictor_hunt_0_150 = "\"The constrictor was last seen at Reesdice, Commander.\"";
constrictor_hunt_0_28 = "\"Yep, an unusual new ship had a galactic hyperdrive fitted here, used it too.\"";
constrictor_hunt_0_36 = "\"A strange looking ship left here a while back. Looked bound for Arexe.\"";
constrictor_hunt_1_118 = "\"You can tackle the vicious scoundrel if you like. He's at Orarra.\"";
constrictor_hunt_1_193 = "\"There's a real deadly pirate out there.\"";
constrictor_hunt_1_253 = "\"This strange ship dehyped here from nowhere, sun skimmed and jumped. I hear it went to Inbibe.\"";
constrictor_hunt_1_53 = "\"Oh dear me yes. A frightful rogue with what I believe you people call a lead posterior shot up lots of beastly pirates and went to Usleri.\"";
constrictor_hunt_1_79 = "\"Rogue ship went for me at Ausar. My lasers didn't even scratch its hull.\"";
constrictor_hunt_1_A = "\"I hear a weird looking ship was seen at Errius.\"";
constrictor_hunt_brief1 = "---INCOMING MESSAGE\\n\\nGreetings Commander,\\n\\nI am Captain Curruthers of Her Imperial Majesty's Space Navy and I beg a moment of your valuable time. We would like you to do a little job for us.\\nThe ship you see here is a new model, the Constrictor, equipped with a top secret new shield generator.\\n\\nUnfortunately it's been stolen.\\n";
constrictor_hunt_brief1a = "It went missing from our ship yard on Xeer five months ago and was last seen at Reesdice. Your mission should you decide to accept it, is to seek and destroy this ship. You are cautioned that only Military Lasers will get through the new shields and that the Constrictor is fitted with an E.C.M. System.\\n\\nGood Luck, Commander.\\n\\n---MESSAGE ENDS.";
constrictor_hunt_brief1b = "It went missing from our ship yard on Xeer five months ago and is believed to have jumped to this galaxy. Your mission should you decide to accept it, is to seek and destroy this ship. You are cautioned that only Military Lasers will get through the new shields and that the Constrictor is fitted with an E.C.M. System.\\n\\nGood Luck, Commander.\\n\\n---MESSAGE ENDS.";
constrictor_hunt_debrief = "---INCOMING MESSAGE\\n\\nCongratulations Commander!\\n\\nThere will always be a place for you in Her Imperial Majesty's Space Navy.\\n\\nAnd maybe sooner than you think...\\n\\n---MESSAGE ENDS.";
nova_1 = "You've arrived at an unfortunate time, Commander.\\n\\nOur sun has become unstable and is due to go nova at any moment. All our ships are evacuating the system, the last few refugees have come here to find a ship to take them to safety.\\n\\nPlease, please help us to escape!";
nova_hero = "Commander, we thank you.\\n\\nYou've bought us all to safety but we have no money with which we can reward you\\n- our last credits were taken by those who took us to the space station.\\n\\nInstead we offer you undying gratitude... and what few valuable possessions we can spare.\\n\\nYou are our hero!";
nova_missiondesc = "Get the refugees to safety.";
nova_yesno = {
NO = "No, sorry.";
YES = "Okay, I'll help.";
};
thargoid_plans_debrief = "---INCOMING MESSAGE\\n\\nYou have served us well and we shall remember.\\n\\nWe did not expect the Thargoids to find out about you.\\n\\nFor the moment please accept this Navy Extra Energy Unit as payment.\\n\\n---MESSAGE ENDS.";
thargoid_plans_intro_brief = "---INCOMING MESSAGE\\n\\nAttention Commander, I am Captain Fortesque of Her Imperial Majesty's Space Navy.\\n\\nWe have need of your services again.\\n\\nIf you would be so good as to go to Ceerdi you will be briefed.\\n\\nIf successful, you will be rewarded.\\n\\n---MESSAGE ENDS.";
thargoid_plans_main_brief = "---INCOMING MESSAGE\\n\\nGood Day Commander.\\n\\nI am Agent Blake of Naval Intelligence.\\nAs you know, the Navy have been keeping the Thargoids off your ass out in deep space for many years now.\\nWell the situation has changed. Our boys are ready for a push right to the home system of those murderers.\\n\\nI have obtained the defence plans for their Hive Worlds. The beetles know we've got something but not what. If I transmit the plans to our base on Birera they'll intercept the transmission. I need a ship to make the run. You're elected.\\n\\nThe plans are unipulse coded within this transmission. You will be paid.\\n\\nGood luck Commander.\\n\\n---MESSAGE ENDS.";
thargplans_short_desc1 = "Go to Ceerdi for a briefing.";
thargplans_short_desc2 = "Convey the secret plans to Birera.";
}

View File

@ -1,340 +1,482 @@
{
"thargoid_plans" = (
{
conditions = (
"dockedAtMainStation_bool equal YES",
"galaxy_number equal 2",
"mission_conhunt equal MISSION_COMPLETE",
"mission_thargplans undefined",
"score_number greaterthan 1280"
);
do = (
setGuiToMissionScreen,
"addMissionText: thargoid_plans_intro_brief",
"set: mission_thargplans PRELUDE",
"setMissionDescription: thargplans_short_desc1"
);
},
{
conditions = (
"status_string equal STATUS_DOCKED",
"galaxy_number equal 2",
"mission_thargplans equal PRELUDE",
"planet_number equal 83"
);
do = (
setGuiToMissionScreen,
"showShipModel: thargoid",
"addMissionText: thargoid_plans_main_brief",
"set: mission_thargplans RUNNING",
"setMissionDescription: thargplans_short_desc2"
);
},
{
conditions = (
"mission_thargplans equal RUNNING",
"status_string equal STATUS_IN_FLIGHT",
"scriptTimer_number lessthan 60"
);
do = (
"checkForShips: thargoid",
{
conditions = ("shipsFound_number lessthan 2");
do = (
"addSystemShips: thargoid 1 0.66",
"addSystemShips: thargoid 1 0.33"
);
},
{
conditions = (
"shipsFound_number lessthan 5",
"d100_number lessthan 50"
);
do = ("addShips: thargoid 1");
}
);
},
{
conditions = (
"dockedAtMainStation_bool equal YES",
"galaxy_number equal 2",
"mission_thargplans equal RUNNING",
"planet_number equal 36"
);
do = (
setGuiToMissionScreen,
"showShipModel: thargoid",
"addMissionText: thargoid_plans_debrief",
"set: mission_thargplans MISSION_COMPLETE",
"awardShipKills: 256",
"awardEquipment: EQ_NAVAL_ENERGY_UNIT",
clearMissionDescription
);
}
);
"constrictor_hunt" = (
{
conditions = (
"dockedAtMainStation_bool equal YES",
"galaxy_number lessthan 2",
"mission_conhunt undefined",
"score_number greaterthan 255"
);
do = (
setGuiToMissionScreen,
"showShipModel: constrictor",
"addMissionText: constrictor_hunt_brief1",
{
conditions = ("galaxy_number equal 0");
do = ("addMissionText: constrictor_hunt_brief1a");
},
{
conditions = ("galaxy_number equal 1");
do = ("addMissionText: constrictor_hunt_brief1b");
},
"set: mission_conhunt STAGE_1",
"setMissionDescription: conhunt_short_desc1"
);
},
{
conditions = (
"mission_conhunt equal STAGE_1",
"gui_screen_string equal GUI_SCREEN_SYSTEM_DATA"
);
do = (
{
conditions = ("galaxy_number equal 0");
do = (
{
conditions = ("planet_number equal 150");
do = ("addMissionText: constrictor_hunt_0_150");
},
{
conditions = ("planet_number equal 36");
do = ("addMissionText: constrictor_hunt_0_36");
},
{
conditions = ("planet_number equal 28");
do = ("addMissionText: constrictor_hunt_0_28");
}
);
},
{
conditions = ("galaxy_number equal 1");
do = (
{
conditions = ("planet_number equal 3");
do = ("addMissionText: constrictor_hunt_1_A");
},
{
conditions = ("planet_number equal 5");
do = ("addMissionText: constrictor_hunt_1_A");
},
{
conditions = ("planet_number equal 16");
do = ("addMissionText: constrictor_hunt_1_A");
},
{
conditions = ("planet_number equal 26");
do = ("addMissionText: constrictor_hunt_1_A");
},
{
conditions = ("planet_number equal 32");
do = ("addMissionText: constrictor_hunt_1_A");
},
{
conditions = ("planet_number equal 68");
do = ("addMissionText: constrictor_hunt_1_A");
},
{
conditions = ("planet_number equal 106");
do = ("addMissionText: constrictor_hunt_1_A");
},
{
conditions = ("planet_number equal 107");
do = ("addMissionText: constrictor_hunt_1_A");
},
{
conditions = ("planet_number equal 162");
do = ("addMissionText: constrictor_hunt_1_A");
},
{
conditions = ("planet_number equal 164");
do = ("addMissionText: constrictor_hunt_1_A");
},
{
conditions = ("planet_number equal 184");
do = ("addMissionText: constrictor_hunt_1_A");
},
{
conditions = ("planet_number equal 192");
do = ("addMissionText: constrictor_hunt_1_A");
},
{
conditions = ("planet_number equal 220");
do = ("addMissionText: constrictor_hunt_1_A");
},
{
conditions = ("planet_number equal 253");
do = ("addMissionText: constrictor_hunt_1_253");
},
{
conditions = ("planet_number equal 79");
do = ("addMissionText: constrictor_hunt_1_79");
},
{
conditions = ("planet_number equal 53");
do = ("addMissionText: constrictor_hunt_1_53");
},
{
conditions = ("planet_number equal 118");
do = ("addMissionText: constrictor_hunt_1_118");
},
{
conditions = ("planet_number equal 193");
do = ("addMissionText: constrictor_hunt_1_193");
}
);
}
);
},
{
conditions = (
"mission_conhunt equal STAGE_1",
"status_string equal STATUS_IN_FLIGHT",
"galaxy_number equal 1",
"planet_number equal 193"
);
do = (
"checkForShips: constrictor",
{
conditions = ("shipsFound_number equal 0");
do = ("addShips: constrictor 1");
}
);
},
{
conditions = (
"dockedAtMainStation_bool equal YES",
"mission_conhunt equal CONSTRICTOR_DESTROYED"
);
do = (
setGuiToMissionScreen,
"showShipModel: constrictor",
"awardCredits: 5000",
"setLegalStatus: 0",
"awardShipKills: 256",
"addMissionText: constrictor_hunt_debrief",
"set: mission_conhunt MISSION_COMPLETE",
clearMissionDescription
);
}
);
nova = (
{
conditions = ("galaxy_number equal 3", "mission_novacount undefined");
do = ("set: mission_novacount 0");
},
{
conditions = ("galaxy_number equal 3", "status_string equal STATUS_EXITING_WITCHSPACE");
do = (
"increment: mission_novacount",
"testForEquipment: EQ_GAL_DRIVE",
{
conditions = (
"foundEquipment_bool equal YES",
"mission_novacount greaterthan 3",
"mission_nova undefined"
);
do = (
"set: mission_nova 2HRS_TO_ZERO",
"setFuelLeak: 25",
"setSunNovaIn: 7200",
"setPlanetinfo: market = none",
"setPlanetinfo: sun_gone_nova = YES"
);
}
);
},
{
conditions = ("mission_nova equal 2HRS_TO_ZERO", "status_string equal STATUS_IN_FLIGHT");
do = (
{conditions = ("sunWillGoNova_bool equal NO"); do = ("reset: mission_nova"); },
{conditions = ("sunWillGoNova_bool equal YES"); do = (sendAllShipsAway); }
);
},
{
conditions = (
"mission_nova equal 2HRS_TO_ZERO",
"dockedAtMainStation_bool equal YES",
"missionChoice_string undefined"
);
do = (
"setMissionImage: solar.png",
setGuiToMissionScreen,
"addMissionText: nova_1",
"setMissionChoices: nova_yesno"
);
},
{
conditions = (
"mission_nova equal 2HRS_TO_ZERO",
"dockedAtMainStation_bool equal YES",
"missionChoice_string equal YES"
);
do = (
"useSpecialCargo: A hold full of %I refugees.",
"setMissionDescription: nova_missiondesc",
launchFromStation,
"set: mission_nova NOVA_ESCAPE_HERO",
"setSunNovaIn: 12"
);
},
{
conditions = (
"mission_nova equal 2HRS_TO_ZERO",
"dockedAtMainStation_bool equal YES",
"missionChoice_string equal NO"
);
do = (
launchFromStation,
"set: mission_nova NOVA_ESCAPE_COWARD",
"commsMessage: Coward! You chose not to help the refugees!",
"setSunNovaIn: 3"
);
},
{
conditions = ("mission_nova equal NOVA_ESCAPE_HERO", "dockedAtMainStation_bool equal YES");
do = (
removeAllCargo,
"awardCargo: 100 Gem-Stones",
"setMissionImage: solar.png",
setGuiToMissionScreen,
"addMissionText: nova_hero",
"set: mission_nova NOVA_HERO",
clearMissionDescription
);
}
);
"cloaking-device" = (
{
conditions = (
"galaxy_number equal 4",
"status_string equal STATUS_EXITING_WITCHSPACE",
"mission_cloak undefined"
);
do = (
{
conditions = ("mission_cloakcounter undefined");
do = ("set: mission_cloakcounter 0");
},
"increment: mission_cloakcounter",
"checkForShips: asp-cloaked",
{
conditions = ("shipsFound_number equal 0", "mission_cloakcounter greaterthan 6");
do = ("addShips: asp-cloaked 1", "addShips: asp-pirate 2");
}
);
}
);
{
conditions = (
"galaxy_number equal 4",
"status_string equal STATUS_EXITING_WITCHSPACE",
"mission_cloak undefined"
);
do = (
{
conditions = (
"mission_cloakcounter undefined"
);
do = (
"set: mission_cloakcounter 0"
);
},
"increment: mission_cloakcounter",
"checkForShips: asp-cloaked",
{
conditions = (
"shipsFound_number equal 0",
"mission_cloakcounter greaterthan 6"
);
do = (
"addShips: asp-cloaked 1",
"addShips: asp-pirate 2"
);
}
);
}
);
constrictor_hunt = (
{
conditions = (
"dockedAtMainStation_bool equal YES",
"galaxy_number lessthan 2",
"mission_conhunt undefined",
"score_number greaterthan 255"
);
do = (
setGuiToMissionScreen,
"showShipModel: constrictor",
"addMissionText: constrictor_hunt_brief1",
{
conditions = (
"galaxy_number equal 0"
);
do = (
"addMissionText: constrictor_hunt_brief1a"
);
},
{
conditions = (
"galaxy_number equal 1"
);
do = (
"addMissionText: constrictor_hunt_brief1b"
);
},
"set: mission_conhunt STAGE_1",
"setMissionDescription: conhunt_short_desc1"
);
},
{
conditions = (
"mission_conhunt equal STAGE_1",
"gui_screen_string equal GUI_SCREEN_SYSTEM_DATA"
);
do = (
{
conditions = (
"galaxy_number equal 0"
);
do = (
{
conditions = (
"planet_number equal 150"
);
do = (
"addMissionText: constrictor_hunt_0_150"
);
},
{
conditions = (
"planet_number equal 36"
);
do = (
"addMissionText: constrictor_hunt_0_36"
);
},
{
conditions = (
"planet_number equal 28"
);
do = (
"addMissionText: constrictor_hunt_0_28"
);
}
);
},
{
conditions = (
"galaxy_number equal 1"
);
do = (
{
conditions = (
"planet_number equal 3"
);
do = (
"addMissionText: constrictor_hunt_1_A"
);
},
{
conditions = (
"planet_number equal 5"
);
do = (
"addMissionText: constrictor_hunt_1_A"
);
},
{
conditions = (
"planet_number equal 16"
);
do = (
"addMissionText: constrictor_hunt_1_A"
);
},
{
conditions = (
"planet_number equal 26"
);
do = (
"addMissionText: constrictor_hunt_1_A"
);
},
{
conditions = (
"planet_number equal 32"
);
do = (
"addMissionText: constrictor_hunt_1_A"
);
},
{
conditions = (
"planet_number equal 68"
);
do = (
"addMissionText: constrictor_hunt_1_A"
);
},
{
conditions = (
"planet_number equal 106"
);
do = (
"addMissionText: constrictor_hunt_1_A"
);
},
{
conditions = (
"planet_number equal 107"
);
do = (
"addMissionText: constrictor_hunt_1_A"
);
},
{
conditions = (
"planet_number equal 162"
);
do = (
"addMissionText: constrictor_hunt_1_A"
);
},
{
conditions = (
"planet_number equal 164"
);
do = (
"addMissionText: constrictor_hunt_1_A"
);
},
{
conditions = (
"planet_number equal 184"
);
do = (
"addMissionText: constrictor_hunt_1_A"
);
},
{
conditions = (
"planet_number equal 192"
);
do = (
"addMissionText: constrictor_hunt_1_A"
);
},
{
conditions = (
"planet_number equal 220"
);
do = (
"addMissionText: constrictor_hunt_1_A"
);
},
{
conditions = (
"planet_number equal 253"
);
do = (
"addMissionText: constrictor_hunt_1_253"
);
},
{
conditions = (
"planet_number equal 79"
);
do = (
"addMissionText: constrictor_hunt_1_79"
);
},
{
conditions = (
"planet_number equal 53"
);
do = (
"addMissionText: constrictor_hunt_1_53"
);
},
{
conditions = (
"planet_number equal 118"
);
do = (
"addMissionText: constrictor_hunt_1_118"
);
},
{
conditions = (
"planet_number equal 193"
);
do = (
"addMissionText: constrictor_hunt_1_193"
);
}
);
}
);
},
{
conditions = (
"mission_conhunt equal STAGE_1",
"status_string equal STATUS_IN_FLIGHT",
"galaxy_number equal 1",
"planet_number equal 193"
);
do = (
"checkForShips: constrictor",
{
conditions = (
"shipsFound_number equal 0"
);
do = (
"addShips: constrictor 1"
);
}
);
},
{
conditions = (
"dockedAtMainStation_bool equal YES",
"mission_conhunt equal CONSTRICTOR_DESTROYED"
);
do = (
setGuiToMissionScreen,
"showShipModel: constrictor",
"awardCredits: 5000",
"setLegalStatus: 0",
"awardShipKills: 256",
"addMissionText: constrictor_hunt_debrief",
"set: mission_conhunt MISSION_COMPLETE",
clearMissionDescription
);
}
);
nova = (
{
conditions = (
"galaxy_number equal 3",
"mission_novacount undefined"
);
do = (
"set: mission_novacount 0"
);
},
{
conditions = (
"galaxy_number equal 3",
"status_string equal STATUS_EXITING_WITCHSPACE"
);
do = (
"increment: mission_novacount",
"testForEquipment: EQ_GAL_DRIVE",
{
conditions = (
"foundEquipment_bool equal YES",
"mission_novacount greaterthan 3",
"mission_nova undefined"
);
do = (
"set: mission_nova 2HRS_TO_ZERO",
"setFuelLeak: 25",
"setSunNovaIn: 7200",
"setPlanetinfo: market = none",
"setPlanetinfo: sun_gone_nova = YES"
);
}
);
},
{
conditions = (
"mission_nova equal 2HRS_TO_ZERO",
"status_string equal STATUS_IN_FLIGHT"
);
do = (
{
conditions = (
"sunWillGoNova_bool equal NO"
);
do = (
"reset: mission_nova"
);
},
{
conditions = (
"sunWillGoNova_bool equal YES"
);
do = (
sendAllShipsAway
);
}
);
},
{
conditions = (
"mission_nova equal 2HRS_TO_ZERO",
"dockedAtMainStation_bool equal YES",
"missionChoice_string undefined"
);
do = (
"setMissionImage: solar.png",
setGuiToMissionScreen,
"addMissionText: nova_1",
"setMissionChoices: nova_yesno"
);
},
{
conditions = (
"mission_nova equal 2HRS_TO_ZERO",
"dockedAtMainStation_bool equal YES",
"missionChoice_string equal YES"
);
do = (
"useSpecialCargo: A hold full of %I refugees.",
"setMissionDescription: nova_missiondesc",
launchFromStation,
"set: mission_nova NOVA_ESCAPE_HERO",
"setSunNovaIn: 12"
);
},
{
conditions = (
"mission_nova equal 2HRS_TO_ZERO",
"dockedAtMainStation_bool equal YES",
"missionChoice_string equal NO"
);
do = (
launchFromStation,
"set: mission_nova NOVA_ESCAPE_COWARD",
"commsMessage: Coward! You chose not to help the refugees!",
"setSunNovaIn: 3"
);
},
{
conditions = (
"mission_nova equal NOVA_ESCAPE_HERO",
"dockedAtMainStation_bool equal YES"
);
do = (
removeAllCargo,
"awardCargo: 100 Gem-Stones",
"setMissionImage: solar.png",
setGuiToMissionScreen,
"addMissionText: nova_hero",
"set: mission_nova NOVA_HERO",
clearMissionDescription
);
}
);
thargoid_plans = (
{
conditions = (
"dockedAtMainStation_bool equal YES",
"galaxy_number equal 2",
"mission_conhunt equal MISSION_COMPLETE",
"mission_thargplans undefined",
"score_number greaterthan 1280"
);
do = (
setGuiToMissionScreen,
"addMissionText: thargoid_plans_intro_brief",
"set: mission_thargplans PRELUDE",
"setMissionDescription: thargplans_short_desc1"
);
},
{
conditions = (
"status_string equal STATUS_DOCKED",
"galaxy_number equal 2",
"mission_thargplans equal PRELUDE",
"planet_number equal 83"
);
do = (
setGuiToMissionScreen,
"showShipModel: thargoid",
"addMissionText: thargoid_plans_main_brief",
"set: mission_thargplans RUNNING",
"setMissionDescription: thargplans_short_desc2"
);
},
{
conditions = (
"mission_thargplans equal RUNNING",
"status_string equal STATUS_IN_FLIGHT",
"scriptTimer_number lessthan 60"
);
do = (
"checkForShips: thargoid",
{
conditions = (
"shipsFound_number lessthan 2"
);
do = (
"addSystemShips: thargoid 1 0.66",
"addSystemShips: thargoid 1 0.33"
);
},
{
conditions = (
"shipsFound_number lessthan 5",
"d100_number lessthan 50"
);
do = (
"addShips: thargoid 1"
);
}
);
},
{
conditions = (
"dockedAtMainStation_bool equal YES",
"galaxy_number equal 2",
"mission_thargplans equal RUNNING",
"planet_number equal 36"
);
do = (
setGuiToMissionScreen,
"showShipModel: thargoid",
"addMissionText: thargoid_plans_debrief",
"set: mission_thargplans MISSION_COMPLETE",
"awardShipKills: 256",
"awardEquipment: EQ_NAVAL_ENERGY_UNIT",
clearMissionDescription
);
}
);
}

File diff suppressed because it is too large Load Diff

View File

@ -1,461 +1,356 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>adder-player</key>
<dict>
<key>chance</key>
<real>0.25</real>
<key>optional_equipment</key>
<array>
<string>EQ_ECM</string>
<string>EQ_FUEL_SCOOPS</string>
<string>EQ_ESCAPE_POD</string>
<string>EQ_ENERGY_BOMB</string>
<string>EQ_ENERGY_UNIT</string>
<string>EQ_NAVAL_ENERGY_UNIT</string>
<string>EQ_DOCK_COMP</string>
<string>EQ_WEAPON_PULSE_LASER</string>
<string>EQ_WEAPON_BEAM_LASER</string>
<string>EQ_WEAPON_MINING_LASER</string>
<string>EQ_WEAPON_MILITARY_LASER</string>
<string>EQ_FUEL_INJECTION</string>
<string>EQ_SCANNER_SHOW_MISSILE_TARGET</string>
<string>EQ_MULTI_TARGET</string>
<string>EQ_GAL_DRIVE</string>
<string>EQ_SHIELD_BOOSTER</string>
</array>
<key>price</key>
<integer>65000</integer>
<key>standard_equipment</key>
<dict>
<key>extras</key>
<array/>
<key>forward_weapon_type</key>
<string>EQ_WEAPON_PULSE_LASER</string>
<key>missiles</key>
<integer>1</integer>
</dict>
<key>techlevel</key>
<integer>4</integer>
<key>weapon_facings</key>
<integer>1</integer>
</dict>
<key>anaconda-player</key>
<dict>
<key>chance</key>
<real>0.125</real>
<key>optional_equipment</key>
<array>
<string>EQ_ECM</string>
<string>EQ_FUEL_SCOOPS</string>
<string>EQ_PASSENGER_BERTH</string>
<string>EQ_ESCAPE_POD</string>
<string>EQ_ENERGY_BOMB</string>
<string>EQ_ENERGY_UNIT</string>
<string>EQ_NAVAL_ENERGY_UNIT</string>
<string>EQ_DOCK_COMP</string>
<string>EQ_WEAPON_PULSE_LASER</string>
<string>EQ_WEAPON_BEAM_LASER</string>
<string>EQ_WEAPON_MINING_LASER</string>
<string>EQ_WEAPON_MILITARY_LASER</string>
<string>EQ_FUEL_INJECTION</string>
<string>EQ_SCANNER_SHOW_MISSILE_TARGET</string>
<string>EQ_MULTI_TARGET</string>
<string>EQ_GAL_DRIVE</string>
<string>EQ_ADVANCED_COMPASS</string>
<string>EQ_SHIELD_BOOSTER</string>
</array>
<key>price</key>
<integer>650000</integer>
<key>standard_equipment</key>
<dict>
<key>extras</key>
<array/>
<key>forward_weapon_type</key>
<string>EQ_WEAPON_PULSE_LASER</string>
<key>missiles</key>
<integer>3</integer>
</dict>
<key>techlevel</key>
<integer>8</integer>
<key>weapon_facings</key>
<integer>15</integer>
</dict>
<key>asp-player</key>
<dict>
<key>chance</key>
<real>0.5</real>
<key>optional_equipment</key>
<array>
<string>EQ_ECM</string>
<string>EQ_ESCAPE_POD</string>
<string>EQ_ENERGY_BOMB</string>
<string>EQ_ENERGY_UNIT</string>
<string>EQ_NAVAL_ENERGY_UNIT</string>
<string>EQ_DOCK_COMP</string>
<string>EQ_WEAPON_PULSE_LASER</string>
<string>EQ_WEAPON_BEAM_LASER</string>
<string>EQ_WEAPON_MILITARY_LASER</string>
<string>EQ_FUEL_INJECTION</string>
<string>EQ_GAL_DRIVE</string>
<string>EQ_ADVANCED_COMPASS</string>
<string>EQ_SHIELD_BOOSTER</string>
<string>EQ_NAVAL_SHIELD_BOOSTER</string>
</array>
<key>price</key>
<integer>375000</integer>
<key>standard_equipment</key>
<dict>
<key>extras</key>
<array>
<string>EQ_SCANNER_SHOW_MISSILE_TARGET</string>
<string>EQ_MULTI_TARGET</string>
</array>
<key>forward_weapon_type</key>
<string>EQ_WEAPON_PULSE_LASER</string>
<key>missiles</key>
<integer>1</integer>
</dict>
<key>techlevel</key>
<integer>10</integer>
<key>weapon_facings</key>
<integer>3</integer>
</dict>
<key>boa-player</key>
<dict>
<key>chance</key>
<real>0.375</real>
<key>optional_equipment</key>
<array>
<string>EQ_ECM</string>
<string>EQ_FUEL_SCOOPS</string>
<string>EQ_PASSENGER_BERTH</string>
<string>EQ_ESCAPE_POD</string>
<string>EQ_ENERGY_BOMB</string>
<string>EQ_ENERGY_UNIT</string>
<string>EQ_NAVAL_ENERGY_UNIT</string>
<string>EQ_DOCK_COMP</string>
<string>EQ_WEAPON_PULSE_LASER</string>
<string>EQ_WEAPON_BEAM_LASER</string>
<string>EQ_WEAPON_MINING_LASER</string>
<string>EQ_WEAPON_MILITARY_LASER</string>
<string>EQ_FUEL_INJECTION</string>
<string>EQ_SCANNER_SHOW_MISSILE_TARGET</string>
<string>EQ_MULTI_TARGET</string>
<string>EQ_GAL_DRIVE</string>
<string>EQ_ADVANCED_COMPASS</string>
<string>EQ_SHIELD_BOOSTER</string>
</array>
<key>price</key>
<integer>450000</integer>
<key>standard_equipment</key>
<dict>
<key>extras</key>
<array/>
<key>forward_weapon_type</key>
<string>EQ_WEAPON_PULSE_LASER</string>
<key>missiles</key>
<integer>3</integer>
</dict>
<key>techlevel</key>
<integer>6</integer>
<key>weapon_facings</key>
<integer>15</integer>
</dict>
<key>boa-mk2-player</key>
<dict>
<key>chance</key>
<real>0.325</real>
<key>optional_equipment</key>
<array>
<string>EQ_ECM</string>
<string>EQ_FUEL_SCOOPS</string>
<string>EQ_PASSENGER_BERTH</string>
<string>EQ_ESCAPE_POD</string>
<string>EQ_ENERGY_BOMB</string>
<string>EQ_ENERGY_UNIT</string>
<string>EQ_NAVAL_ENERGY_UNIT</string>
<string>EQ_DOCK_COMP</string>
<string>EQ_WEAPON_PULSE_LASER</string>
<string>EQ_WEAPON_BEAM_LASER</string>
<string>EQ_WEAPON_MINING_LASER</string>
<string>EQ_WEAPON_MILITARY_LASER</string>
<string>EQ_FUEL_INJECTION</string>
<string>EQ_SCANNER_SHOW_MISSILE_TARGET</string>
<string>EQ_MULTI_TARGET</string>
<string>EQ_GAL_DRIVE</string>
<string>EQ_ADVANCED_COMPASS</string>
<string>EQ_SHIELD_BOOSTER</string>
<string>EQ_NAVAL_SHIELD_BOOSTER</string>
</array>
<key>price</key>
<integer>495000</integer>
<key>standard_equipment</key>
<dict>
<key>extras</key>
<array/>
<key>forward_weapon_type</key>
<string>EQ_WEAPON_BEAM_LASER</string>
<key>missiles</key>
<integer>5</integer>
</dict>
<key>techlevel</key>
<integer>7</integer>
<key>weapon_facings</key>
<integer>15</integer>
</dict>
<key>cobra3-player</key>
<dict>
<key>chance</key>
<real>0.5</real>
<key>optional_equipment</key>
<array>
<string>EQ_CARGO_BAY</string>
<string>EQ_ECM</string>
<string>EQ_FUEL_SCOOPS</string>
<string>EQ_PASSENGER_BERTH</string>
<string>EQ_ESCAPE_POD</string>
<string>EQ_ENERGY_BOMB</string>
<string>EQ_ENERGY_UNIT</string>
<string>EQ_NAVAL_ENERGY_UNIT</string>
<string>EQ_DOCK_COMP</string>
<string>EQ_WEAPON_PULSE_LASER</string>
<string>EQ_WEAPON_BEAM_LASER</string>
<string>EQ_WEAPON_MINING_LASER</string>
<string>EQ_WEAPON_MILITARY_LASER</string>
<string>EQ_FUEL_INJECTION</string>
<string>EQ_SCANNER_SHOW_MISSILE_TARGET</string>
<string>EQ_MULTI_TARGET</string>
<string>EQ_GAL_DRIVE</string>
<string>EQ_ADVANCED_COMPASS</string>
<string>EQ_SHIELD_BOOSTER</string>
<string>EQ_NAVAL_SHIELD_BOOSTER</string>
</array>
<key>price</key>
<integer>150000</integer>
<key>standard_equipment</key>
<dict>
<key>extras</key>
<array/>
<key>forward_weapon_type</key>
<string>EQ_WEAPON_PULSE_LASER</string>
<key>missiles</key>
<integer>3</integer>
</dict>
<key>techlevel</key>
<integer>6</integer>
<key>weapon_facings</key>
<integer>15</integer>
</dict>
<key>cobramk1-player</key>
<dict>
<key>chance</key>
<real>0.375</real>
<key>optional_equipment</key>
<array>
<string>EQ_ECM</string>
<string>EQ_FUEL_SCOOPS</string>
<string>EQ_PASSENGER_BERTH</string>
<string>EQ_ESCAPE_POD</string>
<string>EQ_ENERGY_BOMB</string>
<string>EQ_ENERGY_UNIT</string>
<string>EQ_NAVAL_ENERGY_UNIT</string>
<string>EQ_DOCK_COMP</string>
<string>EQ_WEAPON_PULSE_LASER</string>
<string>EQ_WEAPON_BEAM_LASER</string>
<string>EQ_WEAPON_MINING_LASER</string>
<string>EQ_WEAPON_MILITARY_LASER</string>
<string>EQ_FUEL_INJECTION</string>
<string>EQ_SCANNER_SHOW_MISSILE_TARGET</string>
<string>EQ_MULTI_TARGET</string>
<string>EQ_GAL_DRIVE</string>
<string>EQ_SHIELD_BOOSTER</string>
</array>
<key>price</key>
<integer>100000</integer>
<key>standard_equipment</key>
<dict>
<key>extras</key>
<array/>
<key>forward_weapon_type</key>
<string>EQ_WEAPON_PULSE_LASER</string>
<key>missiles</key>
<integer>1</integer>
</dict>
<key>techlevel</key>
<integer>4</integer>
<key>weapon_facings</key>
<integer>3</integer>
</dict>
<key>ferdelance-player</key>
<dict>
<key>chance</key>
<real>0.25</real>
<key>optional_equipment</key>
<array>
<string>EQ_ENERGY_BOMB</string>
<string>EQ_ENERGY_UNIT</string>
<string>EQ_NAVAL_ENERGY_UNIT</string>
<string>EQ_WEAPON_PULSE_LASER</string>
<string>EQ_WEAPON_BEAM_LASER</string>
<string>EQ_WEAPON_MINING_LASER</string>
<string>EQ_WEAPON_MILITARY_LASER</string>
<string>EQ_GAL_DRIVE</string>
<string>EQ_NAVAL_SHIELD_BOOSTER</string>
</array>
<key>price</key>
<integer>485000</integer>
<key>standard_equipment</key>
<dict>
<key>extras</key>
<array>
<string>EQ_PASSENGER_BERTH</string>
<string>EQ_PASSENGER_BERTH</string>
<string>EQ_FUEL_SCOOPS</string>
<string>EQ_ECM</string>
<string>EQ_ESCAPE_POD</string>
<string>EQ_ADVANCED_COMPASS</string>
<string>EQ_SCANNER_SHOW_MISSILE_TARGET</string>
<string>EQ_FUEL_INJECTION</string>
<string>EQ_MULTI_TARGET</string>
<string>EQ_DOCK_COMP</string>
<string>EQ_SHIELD_BOOSTER</string>
</array>
<key>forward_weapon_type</key>
<string>EQ_WEAPON_BEAM_LASER</string>
<key>missiles</key>
<integer>3</integer>
</dict>
<key>techlevel</key>
<integer>8</integer>
<key>weapon_facings</key>
<integer>15</integer>
</dict>
<key>moray-player</key>
<dict>
<key>chance</key>
<real>0.375</real>
<key>optional_equipment</key>
<array>
<string>EQ_ECM</string>
<string>EQ_FUEL_SCOOPS</string>
<string>EQ_PASSENGER_BERTH</string>
<string>EQ_ESCAPE_POD</string>
<string>EQ_ENERGY_BOMB</string>
<string>EQ_ENERGY_UNIT</string>
<string>EQ_NAVAL_ENERGY_UNIT</string>
<string>EQ_DOCK_COMP</string>
<string>EQ_WEAPON_PULSE_LASER</string>
<string>EQ_WEAPON_BEAM_LASER</string>
<string>EQ_WEAPON_MINING_LASER</string>
<string>EQ_WEAPON_MILITARY_LASER</string>
<string>EQ_FUEL_INJECTION</string>
<string>EQ_SCANNER_SHOW_MISSILE_TARGET</string>
<string>EQ_MULTI_TARGET</string>
<string>EQ_GAL_DRIVE</string>
<string>EQ_ADVANCED_COMPASS</string>
<string>EQ_SHIELD_BOOSTER</string>
<string>EQ_NAVAL_SHIELD_BOOSTER</string>
</array>
<key>price</key>
<integer>125000</integer>
<key>standard_equipment</key>
<dict>
<key>extras</key>
<array/>
<key>forward_weapon_type</key>
<string>EQ_WEAPON_PULSE_LASER</string>
<key>missiles</key>
<integer>2</integer>
</dict>
<key>techlevel</key>
<integer>5</integer>
<key>weapon_facings</key>
<integer>15</integer>
</dict>
<key>morayMED-player</key>
<dict>
<key>chance</key>
<real>0.275</real>
<key>optional_equipment</key>
<array>
<string>EQ_CARGO_BAY</string>
<string>EQ_ECM</string>
<string>EQ_FUEL_SCOOPS</string>
<string>EQ_PASSENGER_BERTH</string>
<string>EQ_ESCAPE_POD</string>
<string>EQ_ENERGY_BOMB</string>
<string>EQ_ENERGY_UNIT</string>
<string>EQ_NAVAL_ENERGY_UNIT</string>
<string>EQ_DOCK_COMP</string>
<string>EQ_WEAPON_PULSE_LASER</string>
<string>EQ_WEAPON_BEAM_LASER</string>
<string>EQ_WEAPON_MINING_LASER</string>
<string>EQ_WEAPON_MILITARY_LASER</string>
<string>EQ_FUEL_INJECTION</string>
<string>EQ_SCANNER_SHOW_MISSILE_TARGET</string>
<string>EQ_MULTI_TARGET</string>
<string>EQ_GAL_DRIVE</string>
<string>EQ_ADVANCED_COMPASS</string>
<string>EQ_SHIELD_BOOSTER</string>
</array>
<key>price</key>
<integer>145000</integer>
<key>standard_equipment</key>
<dict>
<key>extras</key>
<array/>
<key>forward_weapon_type</key>
<string>EQ_WEAPON_NONE</string>
<key>missiles</key>
<integer>0</integer>
</dict>
<key>techlevel</key>
<integer>6</integer>
<key>weapon_facings</key>
<integer>1</integer>
</dict>
<key>python-player</key>
<dict>
<key>chance</key>
<real>0.5</real>
<key>optional_equipment</key>
<array>
<string>EQ_CARGO_BAY</string>
<string>EQ_ECM</string>
<string>EQ_FUEL_SCOOPS</string>
<string>EQ_PASSENGER_BERTH</string>
<string>EQ_ESCAPE_POD</string>
<string>EQ_ENERGY_BOMB</string>
<string>EQ_ENERGY_UNIT</string>
<string>EQ_NAVAL_ENERGY_UNIT</string>
<string>EQ_DOCK_COMP</string>
<string>EQ_WEAPON_PULSE_LASER</string>
<string>EQ_WEAPON_BEAM_LASER</string>
<string>EQ_WEAPON_MINING_LASER</string>
<string>EQ_WEAPON_MILITARY_LASER</string>
<string>EQ_FUEL_INJECTION</string>
<string>EQ_SCANNER_SHOW_MISSILE_TARGET</string>
<string>EQ_MULTI_TARGET</string>
<string>EQ_GAL_DRIVE</string>
<string>EQ_SHIELD_BOOSTER</string>
</array>
<key>price</key>
<integer>200000</integer>
<key>standard_equipment</key>
<dict>
<key>extras</key>
<array/>
<key>forward_weapon_type</key>
<string>EQ_WEAPON_PULSE_LASER</string>
<key>missiles</key>
<integer>1</integer>
</dict>
<key>techlevel</key>
<integer>4</integer>
<key>weapon_facings</key>
<integer>15</integer>
</dict>
</dict>
</plist>
{
"adder-player" = {
chance = <*R0.25>;
optional_equipment = (
EQ_ECM,
EQ_FUEL_SCOOPS,
EQ_ESCAPE_POD,
EQ_ENERGY_BOMB,
EQ_ENERGY_UNIT,
EQ_NAVAL_ENERGY_UNIT,
EQ_DOCK_COMP,
EQ_WEAPON_PULSE_LASER,
EQ_WEAPON_BEAM_LASER,
EQ_WEAPON_MINING_LASER,
EQ_WEAPON_MILITARY_LASER,
EQ_FUEL_INJECTION,
EQ_SCANNER_SHOW_MISSILE_TARGET,
EQ_MULTI_TARGET,
EQ_GAL_DRIVE,
EQ_SHIELD_BOOSTER
);
price = <*I65000>;
standard_equipment = {
extras = (
);
forward_weapon_type = EQ_WEAPON_PULSE_LASER;
missiles = <*I1>;
};
techlevel = <*I4>;
weapon_facings = <*I1>;
};
"anaconda-player" = {
chance = <*R0.125>;
optional_equipment = (
EQ_ECM,
EQ_FUEL_SCOOPS,
EQ_PASSENGER_BERTH,
EQ_ESCAPE_POD,
EQ_ENERGY_BOMB,
EQ_ENERGY_UNIT,
EQ_NAVAL_ENERGY_UNIT,
EQ_DOCK_COMP,
EQ_WEAPON_PULSE_LASER,
EQ_WEAPON_BEAM_LASER,
EQ_WEAPON_MINING_LASER,
EQ_WEAPON_MILITARY_LASER,
EQ_FUEL_INJECTION,
EQ_SCANNER_SHOW_MISSILE_TARGET,
EQ_MULTI_TARGET,
EQ_GAL_DRIVE,
EQ_ADVANCED_COMPASS,
EQ_SHIELD_BOOSTER
);
price = <*I650000>;
standard_equipment = {
extras = (
);
forward_weapon_type = EQ_WEAPON_PULSE_LASER;
missiles = <*I3>;
};
techlevel = <*I8>;
weapon_facings = <*I15>;
};
"asp-player" = {
chance = <*R0.5>;
optional_equipment = (
EQ_ECM,
EQ_ESCAPE_POD,
EQ_ENERGY_BOMB,
EQ_ENERGY_UNIT,
EQ_NAVAL_ENERGY_UNIT,
EQ_DOCK_COMP,
EQ_WEAPON_PULSE_LASER,
EQ_WEAPON_BEAM_LASER,
EQ_WEAPON_MILITARY_LASER,
EQ_FUEL_INJECTION,
EQ_GAL_DRIVE,
EQ_ADVANCED_COMPASS,
EQ_SHIELD_BOOSTER,
EQ_NAVAL_SHIELD_BOOSTER
);
price = <*I375000>;
standard_equipment = {
extras = (
EQ_SCANNER_SHOW_MISSILE_TARGET,
EQ_MULTI_TARGET
);
forward_weapon_type = EQ_WEAPON_PULSE_LASER;
missiles = <*I1>;
};
techlevel = <*I10>;
weapon_facings = <*I3>;
};
"boa-mk2-player" = {
chance = <*R0.325>;
optional_equipment = (
EQ_ECM,
EQ_FUEL_SCOOPS,
EQ_PASSENGER_BERTH,
EQ_ESCAPE_POD,
EQ_ENERGY_BOMB,
EQ_ENERGY_UNIT,
EQ_NAVAL_ENERGY_UNIT,
EQ_DOCK_COMP,
EQ_WEAPON_PULSE_LASER,
EQ_WEAPON_BEAM_LASER,
EQ_WEAPON_MINING_LASER,
EQ_WEAPON_MILITARY_LASER,
EQ_FUEL_INJECTION,
EQ_SCANNER_SHOW_MISSILE_TARGET,
EQ_MULTI_TARGET,
EQ_GAL_DRIVE,
EQ_ADVANCED_COMPASS,
EQ_SHIELD_BOOSTER,
EQ_NAVAL_SHIELD_BOOSTER
);
price = <*I495000>;
standard_equipment = {
extras = (
);
forward_weapon_type = EQ_WEAPON_BEAM_LASER;
missiles = <*I5>;
};
techlevel = <*I7>;
weapon_facings = <*I15>;
};
"boa-player" = {
chance = <*R0.375>;
optional_equipment = (
EQ_ECM,
EQ_FUEL_SCOOPS,
EQ_PASSENGER_BERTH,
EQ_ESCAPE_POD,
EQ_ENERGY_BOMB,
EQ_ENERGY_UNIT,
EQ_NAVAL_ENERGY_UNIT,
EQ_DOCK_COMP,
EQ_WEAPON_PULSE_LASER,
EQ_WEAPON_BEAM_LASER,
EQ_WEAPON_MINING_LASER,
EQ_WEAPON_MILITARY_LASER,
EQ_FUEL_INJECTION,
EQ_SCANNER_SHOW_MISSILE_TARGET,
EQ_MULTI_TARGET,
EQ_GAL_DRIVE,
EQ_ADVANCED_COMPASS,
EQ_SHIELD_BOOSTER
);
price = <*I450000>;
standard_equipment = {
extras = (
);
forward_weapon_type = EQ_WEAPON_PULSE_LASER;
missiles = <*I3>;
};
techlevel = <*I6>;
weapon_facings = <*I15>;
};
"cobra3-player" = {
chance = <*R0.5>;
optional_equipment = (
EQ_CARGO_BAY,
EQ_ECM,
EQ_FUEL_SCOOPS,
EQ_PASSENGER_BERTH,
EQ_ESCAPE_POD,
EQ_ENERGY_BOMB,
EQ_ENERGY_UNIT,
EQ_NAVAL_ENERGY_UNIT,
EQ_DOCK_COMP,
EQ_WEAPON_PULSE_LASER,
EQ_WEAPON_BEAM_LASER,
EQ_WEAPON_MINING_LASER,
EQ_WEAPON_MILITARY_LASER,
EQ_FUEL_INJECTION,
EQ_SCANNER_SHOW_MISSILE_TARGET,
EQ_MULTI_TARGET,
EQ_GAL_DRIVE,
EQ_ADVANCED_COMPASS,
EQ_SHIELD_BOOSTER,
EQ_NAVAL_SHIELD_BOOSTER
);
price = <*I150000>;
standard_equipment = {
extras = (
);
forward_weapon_type = EQ_WEAPON_PULSE_LASER;
missiles = <*I3>;
};
techlevel = <*I6>;
weapon_facings = <*I15>;
};
"cobramk1-player" = {
chance = <*R0.375>;
optional_equipment = (
EQ_ECM,
EQ_FUEL_SCOOPS,
EQ_PASSENGER_BERTH,
EQ_ESCAPE_POD,
EQ_ENERGY_BOMB,
EQ_ENERGY_UNIT,
EQ_NAVAL_ENERGY_UNIT,
EQ_DOCK_COMP,
EQ_WEAPON_PULSE_LASER,
EQ_WEAPON_BEAM_LASER,
EQ_WEAPON_MINING_LASER,
EQ_WEAPON_MILITARY_LASER,
EQ_FUEL_INJECTION,
EQ_SCANNER_SHOW_MISSILE_TARGET,
EQ_MULTI_TARGET,
EQ_GAL_DRIVE,
EQ_SHIELD_BOOSTER
);
price = <*I100000>;
standard_equipment = {
extras = (
);
forward_weapon_type = EQ_WEAPON_PULSE_LASER;
missiles = <*I1>;
};
techlevel = <*I4>;
weapon_facings = <*I3>;
};
"ferdelance-player" = {
chance = <*R0.25>;
optional_equipment = (
EQ_ENERGY_BOMB,
EQ_ENERGY_UNIT,
EQ_NAVAL_ENERGY_UNIT,
EQ_WEAPON_PULSE_LASER,
EQ_WEAPON_BEAM_LASER,
EQ_WEAPON_MINING_LASER,
EQ_WEAPON_MILITARY_LASER,
EQ_GAL_DRIVE,
EQ_NAVAL_SHIELD_BOOSTER
);
price = <*I485000>;
standard_equipment = {
extras = (
EQ_PASSENGER_BERTH,
EQ_PASSENGER_BERTH,
EQ_FUEL_SCOOPS,
EQ_ECM,
EQ_ESCAPE_POD,
EQ_ADVANCED_COMPASS,
EQ_SCANNER_SHOW_MISSILE_TARGET,
EQ_FUEL_INJECTION,
EQ_MULTI_TARGET,
EQ_DOCK_COMP,
EQ_SHIELD_BOOSTER
);
forward_weapon_type = EQ_WEAPON_BEAM_LASER;
missiles = <*I3>;
};
techlevel = <*I8>;
weapon_facings = <*I15>;
};
"moray-player" = {
chance = <*R0.375>;
optional_equipment = (
EQ_ECM,
EQ_FUEL_SCOOPS,
EQ_PASSENGER_BERTH,
EQ_ESCAPE_POD,
EQ_ENERGY_BOMB,
EQ_ENERGY_UNIT,
EQ_NAVAL_ENERGY_UNIT,
EQ_DOCK_COMP,
EQ_WEAPON_PULSE_LASER,
EQ_WEAPON_BEAM_LASER,
EQ_WEAPON_MINING_LASER,
EQ_WEAPON_MILITARY_LASER,
EQ_FUEL_INJECTION,
EQ_SCANNER_SHOW_MISSILE_TARGET,
EQ_MULTI_TARGET,
EQ_GAL_DRIVE,
EQ_ADVANCED_COMPASS,
EQ_SHIELD_BOOSTER,
EQ_NAVAL_SHIELD_BOOSTER
);
price = <*I125000>;
standard_equipment = {
extras = (
);
forward_weapon_type = EQ_WEAPON_PULSE_LASER;
missiles = <*I2>;
};
techlevel = <*I5>;
weapon_facings = <*I15>;
};
"morayMED-player" = {
chance = <*R0.275>;
optional_equipment = (
EQ_CARGO_BAY,
EQ_ECM,
EQ_FUEL_SCOOPS,
EQ_PASSENGER_BERTH,
EQ_ESCAPE_POD,
EQ_ENERGY_BOMB,
EQ_ENERGY_UNIT,
EQ_NAVAL_ENERGY_UNIT,
EQ_DOCK_COMP,
EQ_WEAPON_PULSE_LASER,
EQ_WEAPON_BEAM_LASER,
EQ_WEAPON_MINING_LASER,
EQ_WEAPON_MILITARY_LASER,
EQ_FUEL_INJECTION,
EQ_SCANNER_SHOW_MISSILE_TARGET,
EQ_MULTI_TARGET,
EQ_GAL_DRIVE,
EQ_ADVANCED_COMPASS,
EQ_SHIELD_BOOSTER
);
price = <*I145000>;
standard_equipment = {
extras = (
);
forward_weapon_type = EQ_WEAPON_NONE;
missiles = <*I0>;
};
techlevel = <*I6>;
weapon_facings = <*I1>;
};
"python-player" = {
chance = <*R0.5>;
optional_equipment = (
EQ_CARGO_BAY,
EQ_ECM,
EQ_FUEL_SCOOPS,
EQ_PASSENGER_BERTH,
EQ_ESCAPE_POD,
EQ_ENERGY_BOMB,
EQ_ENERGY_UNIT,
EQ_NAVAL_ENERGY_UNIT,
EQ_DOCK_COMP,
EQ_WEAPON_PULSE_LASER,
EQ_WEAPON_BEAM_LASER,
EQ_WEAPON_MINING_LASER,
EQ_WEAPON_MILITARY_LASER,
EQ_FUEL_INJECTION,
EQ_SCANNER_SHOW_MISSILE_TARGET,
EQ_MULTI_TARGET,
EQ_GAL_DRIVE,
EQ_SHIELD_BOOSTER
);
price = <*I200000>;
standard_equipment = {
extras = (
);
forward_weapon_type = EQ_WEAPON_PULSE_LASER;
missiles = <*I1>;
};
techlevel = <*I4>;
weapon_facings = <*I15>;
};
}

View File

@ -1,72 +1,45 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>oolite-save</string>
</array>
<key>CFBundleTypeIconFile</key>
<string>oolite-document</string>
<key>CFBundleTypeName</key>
<string>Oolite Saved Game</string>
<key>CFBundleTypeRole</key>
<string>Editor</string>
</dict>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>oxp</string>
</array>
<key>CFBundleTypeIconFile</key>
<string>oolite-expansion-document</string>
<key>CFBundleTypeName</key>
<string>Oolite Expansion Pack</string>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>LSTypeIsPackage</key>
<true/>
</dict>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>oolite_expansion_pack</string>
</array>
<key>CFBundleTypeIconFile</key>
<string>oolite-expansion-document</string>
<key>CFBundleTypeName</key>
<string>Oolite Expansion Pack</string>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>LSTypeIsPackage</key>
<true/>
</dict>
<dict/>
</array>
<key>CFBundleExecutable</key>
<string>Oolite</string>
<key>CFBundleIconFile</key>
<string>oolite-icon</string>
<key>CFBundleIdentifier</key>
<string>org.aegidian.oolite</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>Oolite</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>Ool8</string>
<key>CFBundleVersion</key>
<string>1.49</string>
<key>NSMainNibFile</key>
<string>MainMenu</string>
<key>NSPrincipalClass</key>
<string>OoliteApp</string>
</dict>
</plist>
{
CFBundleDevelopmentRegion = English;
CFBundleDocumentTypes = (
{
CFBundleTypeExtensions = (
"oolite-save"
);
CFBundleTypeIconFile = "oolite-document";
CFBundleTypeName = "Oolite Saved Game";
CFBundleTypeRole = Editor;
},
{
CFBundleTypeExtensions = (
oxp
);
CFBundleTypeIconFile = "oolite-expansion-document";
CFBundleTypeName = "Oolite Expansion Pack";
CFBundleTypeRole = Editor;
LSTypeIsPackage = <*BY>
;
},
{
CFBundleTypeExtensions = (
oolite_expansion_pack
);
CFBundleTypeIconFile = "oolite-expansion-document";
CFBundleTypeName = "Oolite Expansion Pack";
CFBundleTypeRole = Editor;
LSTypeIsPackage = <*BY>
;
},
{
}
);
CFBundleExecutable = Oolite;
CFBundleIconFile = "oolite-icon";
CFBundleIdentifier = org.aegidian.oolite;
CFBundleInfoDictionaryVersion = 6.0;
CFBundleName = Oolite;
CFBundlePackageType = APPL;
CFBundleSignature = Ool8;
CFBundleVersion = 1.49;
NSMainNibFile = MainMenu;
NSPrincipalClass = OoliteApp;
}

View File

@ -15,10 +15,12 @@
@interface SDLImage : NSObject
{
SDL_Surface *m_surface;
NSSize m_size;
}
- (id) initWithSurface: (SDL_Surface *)surface;
- (SDL_Surface *) surface;
- (NSSize) size;
@end
#endif

View File

@ -12,6 +12,8 @@
{
self = [super init];
m_surface = surface;
m_size.width = surface->w;
m_size.height = surface->h;
return self;
}
@ -20,4 +22,9 @@
return m_surface;
}
- (NSSize) size
{
return m_size;
}
@end

View File

@ -39,7 +39,7 @@ Your fair use and other rights are in no way affected by the above.
#ifdef GNUSTEP
#import <Foundation/Foundation.h>
#import <AppKit/AppKit.h>
//#import <AppKit/AppKit.h>
#else
#import <Cocoa/Cocoa.h>
#endif

View File

@ -75,37 +75,48 @@ Your fair use and other rights are in no way affected by the above.
- (GLuint) getTextureNameFor:(NSString *)filename
{
#ifndef GNUSTEP
NSBitmapImageRep *bitmapImageRep;
NSRect textureRect = NSMakeRect(0.0,0.0,4.0,4.0);
NSImage *texImage, *image;
#else
SDLImage *texImage;
#endif
NSRect textureRect = NSMakeRect(0.0,0.0,4.0,4.0);
NSSize imageSize;
NSData *textureData;
GLuint texName;
int n_planes;
int n_bytes;
if (![textureDictionary objectForKey:filename])
{
NSMutableDictionary* texProps = [NSMutableDictionary dictionaryWithCapacity:3]; // autoreleased
#ifndef GNUSTEP
texImage = [ResourceManager imageNamed:filename inFolder:@"Textures"];
#else
texImage = [ResourceManager surfaceNamed:filename inFolder:@"Textures"];
#endif
if (!texImage)
{
NSLog(@"***** Couldn't find texture : %@", filename);
return 0;
}
#ifndef GNUSTEP
imageSize = [texImage size];
#else
imageSize = NSMakeSize([texImage surface]->w, [texImage surface]->h);
#endif
while (textureRect.size.width < imageSize.width)
textureRect.size.width *= 2.0;
while (textureRect.size.height < imageSize.height)
textureRect.size.height *= 2.0;
textureRect.origin= NSMakePoint(0.0,0.0);
// NSLog(@"DEBUG %@ imageSize = (%.0f, %.0f) textureSize = (%.0f, %.0f)", filename, imageSize.width, imageSize.height, textureRect.size.width,textureRect.size.height);
// NSLog(@"textureSize = %f %f",textureRect.size.width,textureRect.size.height);
#ifndef GNUSTEP
image = [[NSImage alloc] initWithSize:textureRect.size]; // is retained
// draw the texImage into an image of an appropriate size
@ -118,13 +129,32 @@ Your fair use and other rights are in no way affected by the above.
[texImage drawAtPoint:NSMakePoint(0.0,0.0) fromRect:NSMakeRect(0.0,0.0,imageSize.width,imageSize.height) operation:NSCompositeSourceOver fraction:1.0];
bitmapImageRep = [[NSBitmapImageRep alloc] initWithFocusedViewRect:textureRect];// is retained
// NSLog(@"TextureStore bitMapImageRep for %@: has %d numberOfPlanes, %d samplesPerPixel", filename, [bitmapImageRep numberOfPlanes], [bitmapImageRep samplesPerPixel]);
// NSLog(@"TextureStore %@ texture has %d planes, %d bytes per plane", filename, [bitmapImageRep numberOfPlanes], [bitmapImageRep bytesPerPlane]);
n_planes = [bitmapImageRep samplesPerPixel];
n_bytes = [bitmapImageRep bytesPerPlane];
n_planes = 3;
if (n_bytes > textureRect.size.width*textureRect.size.height*3)
n_planes = 4;
[image unlockFocus];
textureData = [[NSData dataWithBytes:[bitmapImageRep bitmapData] length:(int)(textureRect.size.width*textureRect.size.height*n_planes)] retain];
#else
double zoomx = textureRect.size.width / imageSize.width;
double zoomy = textureRect.size.height / imageSize.height;
#ifdef WIN32
SDL_Surface* scaledImage = [texImage surface];
#else
SDL_Surface* scaledImage = zoomSurface([texImage surface], zoomx, zoomy, SMOOTHING_OFF);
#endif
SDL_LockSurface(scaledImage);
textureData = [[NSData dataWithBytes:scaledImage->pixels length:scaledImage->w * scaledImage->h * scaledImage->format->BytesPerPixel] retain];
n_planes = scaledImage->format->BytesPerPixel;
SDL_UnlockSurface(scaledImage);
SDL_FreeSurface(scaledImage);
#endif
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glGenTextures(1, &texName); // get a new unique texture name
@ -149,10 +179,12 @@ Your fair use and other rights are in no way affected by the above.
[textureDictionary setObject:texProps forKey:filename];
#ifndef GNUSTEP
[image autorelease]; // is released
[bitmapImageRep autorelease];// is released
#endif
[textureData autorelease];// is released (retain count has been incremented by adding it to the texProps dictionary)
}
@ -181,3 +213,4 @@ Your fair use and other rights are in no way affected by the above.
}
@end

View File

@ -126,9 +126,15 @@ Your fair use and other rights are in no way affected by the above.
//
textureStore = [[TextureStore alloc] init]; // alloc retains
//
#ifndef WIN32
cursorSprite = [[OpenGLSprite alloc] initWithImage:[ResourceManager imageNamed:@"cursor.png" inFolder:@"Images"]
cropRectangle:NSMakeRect(0, 0, 128, 128)
size:NSMakeSize(32, 32)]; // alloc retains
#else
cursorSprite = [[OpenGLSprite alloc] initWithSurface:[ResourceManager surfaceNamed:@"cursor.png" inFolder:@"Images"]
cropRectangle:NSMakeRect(0, 0, 128, 128)
size:NSMakeSize(32, 32)]; // alloc retains
#endif
//
gui = [[GuiDisplayGen alloc] init]; // alloc retains
displayGUI = NO;
@ -363,9 +369,15 @@ Your fair use and other rights are in no way affected by the above.
//
if (cursorSprite)
[cursorSprite release];
#ifndef WIN32
cursorSprite = [[OpenGLSprite alloc] initWithImage:[ResourceManager imageNamed:@"cursor.png" inFolder:@"Images"]
cropRectangle:NSMakeRect(0, 0, 128, 128)
size:NSMakeSize(32, 32)]; // alloc retains
#else
cursorSprite = [[OpenGLSprite alloc] initWithSurface:[ResourceManager surfaceNamed:@"cursor.png" inFolder:@"Images"]
cropRectangle:NSMakeRect(0, 0, 128, 128)
size:NSMakeSize(32, 32)]; // alloc retains
#endif
//
if (gui)
[gui release];

16
main.m
View File

@ -14,6 +14,8 @@ int debug = NO;
int main(int argc, const char *argv[])
{
#ifdef GNUSTEP
int i;
// This is still necessary for NSFont calls.
[NSApplication sharedApplication];
@ -29,8 +31,18 @@ int main(int argc, const char *argv[])
// is no longer required.
[pool release];
if (argc > 1)
[controller setPlayerFileToLoad: [NSString stringWithCString: argv[argc - 1]]];
for (i = 0; i < argc; i++)
{
if (strcmp("-fullscreen", argv[i]) == 0)
[controller setFullScreenMode: YES];
if (strcmp("-load", argv[i]) == 0)
{
i++;
if (i < argc)
[controller setPlayerFileToLoad: [NSString stringWithCString: argv[i]]];
}
}
// Call applicationDidFinishLaunching because NSApp is not running in
// GNUstep port.