- attempted to get a slightly more challenging thargoid AI

- added js function clock.addSeconds(time offset)
- code cleanup: another tweak to coastlines, some ship functions now return more meaningful values.

git-svn-id: http://svn.berlios.de/svnroot/repos/oolite-linux/trunk@2843 127b21dd-08f5-0310-b4b7-95ae10353056
This commit is contained in:
Marc 2009-12-05 18:18:25 +00:00
parent 8f8605804c
commit 0556a1e091
7 changed files with 71 additions and 39 deletions

View File

@ -11,7 +11,32 @@
"TARGET_DESTROYED" = ("setStateTo: LOOK_FOR_TARGETS");
"TARGET_FOUND" = (setTargetToFoundTarget, "setStateTo: ATTACK_SHIP");
"TARGET_LOST" = ("setStateTo: LOOK_FOR_TARGETS");
UPDATE = (scanForNonThargoid, "pauseAI: 15.0");
UPDATE = ("pauseAI: 15.0", "setStateTo: THARGON_COUNTDOWN1");
};
"THARGON_COUNTDOWN1" =
{
"ATTACKED" = (setTargetToPrimaryAggressor, performAttack, "setStateTo: THARGON_COUNTDOWN2");
"INCOMING_MISSILE" = (fightOrFleeMissile, setTargetToPrimaryAggressor, "setStateTo: THARGON_COUNTDOWN2");
"TARGET_DESTROYED" = ("setStateTo: LOOK_FOR_TARGETS");
"TARGET_LOST" = ("setStateTo: LOOK_FOR_TARGETS");
UPDATE = (scanForNonThargoid, "pauseAI: 15.0", "setStateTo: THARGON_COUNTDOWN2");
};
"THARGON_COUNTDOWN2" =
{
"ATTACKED" = (setTargetToPrimaryAggressor, performAttack, "setStateTo: THARGON_COUNTDOWN3");
"INCOMING_MISSILE" = (fightOrFleeMissile, setTargetToPrimaryAggressor, "setStateTo: THARGON_COUNTDOWN3");
"TARGET_DESTROYED" = ("setStateTo: LOOK_FOR_TARGETS");
"TARGET_FOUND" = (setTargetToFoundTarget, performAttack);
"TARGET_LOST" = ("setStateTo: LOOK_FOR_TARGETS");
UPDATE = ("pauseAI: 15.0", "setStateTo: THARGON_COUNTDOWN3");
};
"THARGON_COUNTDOWN3" =
{
"ATTACKED" = (setTargetToPrimaryAggressor, fireMissile, "setStateTo: ATTACK_SHIP");
"INCOMING_MISSILE" = (fightOrFleeMissile, setTargetToPrimaryAggressor, fireMissile, "setStateTo: ATTACK_SHIP");
"TARGET_DESTROYED" = ("setStateTo: LOOK_FOR_TARGETS");
"TARGET_LOST" = ("setStateTo: LOOK_FOR_TARGETS");
UPDATE = (fireMissile, scanForNonThargoid, "pauseAI: 15.0", "setStateTo: ATTACK_SHIP");
};
"LOOK_FOR_TARGETS" =
{

View File

@ -585,6 +585,7 @@ typedef enum
- (double) clockTime; // Note that this is not an OOTimeAbsolute
- (double) clockTimeAdjusted; // Note that this is not an OOTimeAbsolute
- (BOOL) clockAdjusting;
- (void) AddToAdjustTime:(double) seconds ;
- (NSString *) dial_clock;
- (NSString *) dial_clock_adjusted;

View File

@ -2486,6 +2486,12 @@ static PlayerEntity *sSharedPlayer = nil;
}
- (void) AddToAdjustTime:(double) seconds ;
{
ship_clock_adjust += seconds;
}
- (NSString*) dial_clock
{
return ClockToString(ship_clock, ship_clock_adjust > 0);

View File

@ -7179,6 +7179,8 @@ BOOL class_masslocks(int some_class)
- (ShipEntity *) fireMissileWithIdentifier:(NSString *) identifier andTarget:(Entity *) target
{
// both players and NPCs!
//
ShipEntity *missile = nil;
ShipEntity *target_ship = nil;

View File

@ -284,7 +284,7 @@ static FloatRGBA PlanetMix(float q, float maxQ, FloatRGB landColor, FloatRGB sea
#define RECIP_COASTLINE_PORTION (160.0f)
#define COASTLINE_PORTION (1.0f / RECIP_COASTLINE_PORTION)
#define SHALLOWS (1.6f * COASTLINE_PORTION) // increased shallows area.
#define SHALLOWS (1.9f * COASTLINE_PORTION) // increased shallows area.
#define RECIP_SHALLOWS (1.0f / SHALLOWS)
#define BEACH_SPECULAR_FACTOR (0.6f) // Portion of specular transition that occurs in paleSeaColor/landColor transition (rest is in paleSeaColor/seaColor transition)
#define SHALLOWS_SPECULAR_FACTOR (1.0f - BEACH_SPECULAR_FACTOR)

View File

@ -41,6 +41,7 @@ static JSBool ClockGetProperty(JSContext *context, JSObject *this, jsval name, j
// Methods
static JSBool JSClockToString(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult);
static JSBool ClockClockStringForTime(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult);
static JSBool ClockAddSeconds(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult);
static JSClass sClockClass =
@ -99,9 +100,10 @@ static JSPropertySpec sClockProperties[] =
static JSFunctionSpec sClockMethods[] =
{
// JS name Function min args
// JS name Function min args
{ "toString", JSClockToString, 0 },
{ "clockStringForTime", ClockClockStringForTime, 1 },
{ "addSeconds", ClockAddSeconds, 1 },
{ 0 }
};
@ -204,3 +206,24 @@ static JSBool ClockClockStringForTime(JSContext *context, JSObject *this, uintN
*outResult = [ClockToString(time, NO) javaScriptValueInContext:context];
return YES;
}
// clockAddSeconds(seconds : Number) : String
static JSBool ClockAddSeconds(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult)
{
double time;
if (EXPECT_NOT(!JS_ValueToNumber(context, argv[0], &time))) return YES; // no-op
if (time > 2592000.0f || time < 1.0f) // 30 * 24 * 3600
{
OOReportJSWarning(context, @"Clock.addSeconds: use a value between 1 and 2592000 (30 days).");
*outResult = BOOLToJSVal(NO);
return YES;
}
[OOPlayerForScripting() AddToAdjustTime:time];
*outResult = BOOLToJSVal(YES);
return YES;
}

View File

@ -1192,13 +1192,16 @@ static JSBool ShipCommsMessage(JSContext *context, JSObject *this, uintN argc, j
static JSBool ShipFireECM(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult)
{
ShipEntity *thisEnt = nil;
BOOL OK;
if (!JSShipGetShipEntity(context, this, &thisEnt)) return YES; // stale reference, no-op.
if (![thisEnt fireECM])
OK = [thisEnt fireECM];
if (!OK)
{
OOReportJSWarning(context, @"Ship %@ was requested to fire ECM burst but does not carry ECM equipment.", thisEnt);
}
*outResult = BOOLToJSVal(OK);
return YES;
}
@ -1211,11 +1214,7 @@ static JSBool ShipHasEquipment(JSContext *context, JSObject *this, uintN argc, j
JSBool includeWeapons = YES;
BOOL OK = YES;
if (!JSShipGetShipEntity(context, this, &thisEnt)) // stale reference, no-op.
{
*outResult = BOOLToJSVal(NO);
return YES;
}
if (!JSShipGetShipEntity(context, this, &thisEnt)) return YES; // stale reference, no-op.
key = JSValToNSString(context, argv[0]);
if (EXPECT_NOT(key == nil))
@ -1266,11 +1265,7 @@ static JSBool ShipAbandonShip(JSContext *context, JSObject *this, uintN argc, js
{
ShipEntity *thisEnt = nil;
if (!JSShipGetShipEntity(context, this, &thisEnt)) // stale reference, no-op.
{
*outResult = BOOLToJSVal(NO);
return YES;
}
if (!JSShipGetShipEntity(context, this, &thisEnt)) return YES; // stale reference, no-op.
BOOL hasPod = [thisEnt hasEscapePod];
@ -1290,11 +1285,7 @@ static JSBool ShipAddPassenger(JSContext *context, JSObject *this, uintN argc, j
ShipEntity *thisEnt = nil;
BOOL OK = YES;
if (!JSShipGetShipEntity(context, this, &thisEnt)) // stale reference, no-op.
{
*outResult = BOOLToJSVal(NO);
return YES;
}
if (!JSShipGetShipEntity(context, this, &thisEnt)) return YES; // stale reference, no-op.
NSString *name = nil;
@ -1341,11 +1332,7 @@ static JSBool ShipAwardContract(JSContext *context, JSObject *this, uintN argc,
BOOL OK = JSVAL_IS_INT(argv[0]);
NSString *key = nil;
if (!JSShipGetShipEntity(context, this, &thisEnt)) // stale reference, no-op.
{
*outResult = BOOLToJSVal(NO);
return YES;
}
if (!JSShipGetShipEntity(context, this, &thisEnt)) return YES; // stale reference, no-op.
if (OK && argc == 6)
{
@ -1426,11 +1413,7 @@ static JSBool ShipAwardEquipment(JSContext *context, JSObject *this, uintN argc,
BOOL OK = YES;
BOOL berth;
if (!JSShipGetShipEntity(context, this, &thisEnt)) // stale reference, no-op.
{
*outResult = BOOLToJSVal(NO);
return YES;
}
if (!JSShipGetShipEntity(context, this, &thisEnt)) return YES; // stale reference, no-op.
key = JSValToNSString(context, argv[0]);
if (EXPECT_NOT(key == nil))
@ -1476,11 +1459,7 @@ static JSBool ShipRemoveEquipment(JSContext *context, JSObject *this, uintN argc
NSString *key = nil;
BOOL OK = YES;
if (!JSShipGetShipEntity(context, this, &thisEnt)) // stale reference, no-op.
{
*outResult = BOOLToJSVal(NO);
return YES;
}
if (!JSShipGetShipEntity(context, this, &thisEnt)) return YES; // stale reference, no-op.
key = JSValToNSString(context, argv[0]);
if (EXPECT_NOT(key == nil))
@ -1533,11 +1512,7 @@ static JSBool ShipSetEquipmentStatus(JSContext *context, JSObject *this, uintN a
NSString *status = JSValToNSString(context, argv[1]);
BOOL hasOK = NO, hasDamaged = NO;
if (!JSShipGetShipEntity(context, this, &thisEnt)) // stale reference, no-op.
{
*outResult = BOOLToJSVal(NO);
return YES;
}
if (!JSShipGetShipEntity(context, this, &thisEnt)) return YES; // stale reference, no-op.
if (EXPECT_NOT([UNIVERSE strict]))
{