LEGO Racers 2 (PC)

The sequel to a racing game with LEGOs, and all you can build are cars. What's with LEGO games and limited/no building?

Various Script File Contents
In SCRIPTS/SANDY ISLAND/ANIMS.TXT, the following can be found, describing what each animation does: some useful anims for general npcs, and example values

TALK_ARG_LEFT 1.5 1.0 TALK_ARG_RIGHT 1.5 1.0 - gesturing to left and right

TALK_SUPRISED 1.5 1.0 - arms kind of spread out. note the spelling

TALK_ANGRY 1.5 1.0 - kind of flapping arms about in a kind of angry way

TALK_NO_WAY 1.0 1.0 - waves one hand across, as if to say, er, 'no way'

LAUGH1 - loop, looks like he's being sick LAUGH2 - loop, chuckles LAUGH3 - loop, rocking to and fro but less violently than 1 MWUHAHAHA 3.0 1.0 - more of a belly laugh, waves hands like 'get outta here!'

I_AM_THE_BEST 1.5 1.0 - minifig points to his chest

TALK_EXCITED 0.75 1.0 - does a jump in the air

HEAD_IN_HANDS 1.5 1.0 - in one hand only actually, looks kind of confused

SHRUG 1.7 0.5 - 'what do you want from me?'

2ND_PLACE_CELEB 3.0 1.3 - looks to left and then shrugs

ANGRY 1.5 0.5 - sorta shaking his fist, but slowed down looks a bit like he's pointing

3RD_PLACE_CELEB 3.0 1.3 - looks to his right and then shakes his hand like, oh darn it

TALK_SAD - loop, head hung low

LOOK_AROUND 1.5 1.0 - hands on hips, looks left and right

In SCRIPTS/CARCRAZE some various text files can be found, all containing various messages commented out with pound-signs before what may have been code for cutscenes.

XALAXBONUS1.TXT:

Greetings, XXX. I am honoured to finally meet you Thank you. Are you a racer here "I certainly am. You are XXX, are you not? My fellow racers and I have been watching you very carefully. You are a formidable racer Thank you. What do you do here This is where we train. Rocket Racer himself has trained here. If you like, you may take part in one of our exercises. If you can complete it to our satisfaction, I will help you in your quest to become Galactic Racing Champion can do that, no problem The Ramas have explained the rules to me, XXX. You have to collect (x) drones from around the track, then return them to the Start line Sounds pretty easy It may be harder than you think, buddy. The drones move across the track, so collecting them is tricky. Plus, they're guarded by Ramas in cars. If one of them hits you, you'll drop all the drones you're carrying. Got it

XALAXBONUS2.TXT: Ah, XXX, you have returned Yeah. I was wondering if you had any other exercises for me to try If you wish, you may try a harder one. This one is generally only used by our better racers That sounds good. Is it like the other one It is similar, but you will need to collect even more drones in even less time. Again, if you win, I shall award you a CAR BONUS. Then let's get to it The Ramas have explained the rules to me, XXX. You have to collect (x) drones from around the track, then return them to the Start line Sounds pretty easy It may be harder than you think, buddy. The drones move across the track, so collecting them is tricky. Plus, they're guarded by Ramas in cars. If one of them hits you, you'll drop all the drones you're carrying. Got it

XALAXBONUSWIN.TXT That was impressive, XXX Thanks. I really enjoyed it Here, take this CAR BONUS. You have more than earned it BONUS AWARD SCREEN

Uncompiled Source Code
In SCRIPTS/SCRIPT KEY VALUE PAIRS.TXT, the following can be found: //- // // Script Key Value Pairs.cpp // // Tables of key/value pairs for parsing the animation scripts // //-

// // INFORMATION HEADER //

/*	$Revision: 39 $ $Author: Geoff-browitt $ $Date: 26/04/01 17:49 $


 * 1) include "..\..\Engine\Liquid Engine.h"
 * 2) include "..\LegoRacers2.h"
 * 3) include "..\Cinematics\Cinematic Includes.h"
 * 4) include "..\NPC\NPC Includes.h"
 * 5) include "..\Animation Scripting\Animation Scripting Includes.h"
 * 6) include "..\Game Control\Game Control Includes.h"
 * 7) include "..\Effects\Effects Includes.h"
 * 8) include  // strcmp

KeyValuePair NPCTokens[] = {

{ "SPARKY",					tNPCSparky },

{ "PROF_VOLTAGE",			tNPCProfVoltage }, { "POSTMAN",				tNPCPostman }, { "FIREMAN",				tNPCFireman }, { "DOCTOR",					tNPCDoctor }, { "POLICEMAN",				tNPCPoliceman }, { "NURSE",					tNPCNurse }, { "FISHERMAN",				tNPCFisherman }, { "WORKMAN1",				tNPCWorkman1 }, { "WORKMAN2",				tNPCWorkman2 }, { "WORKMAN3",				tNPCWorkman3 }, { "LIGHTHOUSE_KEEPER",		tNPCLighthouseKeeper }, { "BEACH_BABE1",			tNPCBeachBabe1 }, { "BEACH_BABE2",			tNPCBeachBabe2 }, { "BEACH_BABE3",			tNPCBeachBabe3 }, { "BEACH_DUDE",				tNPCBeachDude }, { "GENERIC_MALE1",			tNPCGenericMale1 }, { "GENERIC_MALE2",			tNPCGenericMale2 }, { "GENERIC_MALE3",			tNPCGenericMale3 }, { "GENERIC_FEMALE1",		tNPCGenericFemale1 }, { "GENERIC_FEMALE2",		tNPCGenericFemale2 }, { "GENERIC_FEMALE3",		tNPCGenericFemale3 }, { "COASTGUARD",				tNPCCoastGuard }, { "FOREMAN",				tNPCForeman },

{ "BB",						tNPCBB }, { "DOC",					tNPCMarsDoc }, { "VEGA",					tNPCVega }, { "ALTAIR",					tNPCAltair }, { "RIGEL",					tNPCRigel }, { "SCIENTIST",				tNPCScientist }, { "ANTARIES",				tNPCAntaries }, { "SAM_SANISTER",			tNPCSamSanister }, { "SLYBOOTS",				tNPCSlyboots }, { "ACHU",					tNPCAchu }, { "MORAT",					tNPCMorat }, { "BUNGO",					tNPCBungo }, { "ALEXIS",					tNPCAlexisSanister }, { "MIKE",					tNPCMike }, { "BERG",					tNPCTheBerg }, { "FROSTY",					tNPCFrosty }, { "CHILLY",					tNPCChilly }, { "ROSS",					tNPCCaptainRoss }, { "CRYSTAL",				tNPCCrystal }, { "COSMO",					tNPCCosmo }, { "SCOOTER",				tNPCScooter }, { "ARCTIC_DOC",				tNPCArcticDoc }, { "ROCKET_RACER",			tNPCRocketRacer }, { "LIGHTOR",				tNPCLightor }, { "WARRIOR",				tNPCWarrior }, { "GHOST",					tNPCGhost }, { "CHILL",					tNPCChill }, { "DUSTER",					tNPCDuster }, { "FREEZE",					tNPCFreeze }, { "SNAKE",					tNPCSnake }, { NULL,          0               }

};

KeyValuePair PrimaryTokens[] = {

{ "$global",		tKeywordGlobal }, { "$time",			tKeywordTime  }, { "$sound",			tKeywordSound }, { "$subtitle",		tKeywordSubtitle }, { "$actor",			tKeywordActor }, { "$cinematic",		tKeywordCinematic }, { "$shot",			tKeywordShot }, { "$zoom",			tKeywordZoom }, { "$length",		tKeywordLength }, { "$startrelative", tKeywordStartRelative }, { "$endrelative",	tKeywordEndRelative }, { "$targetoffset",	tKeywordTargetOffset }, { "$carposition",	tKeywordCarPos }, { "$figposition",	tKeywordFigPos }, { "$trigger",		tKeywordTrigger }, { "DELAY",			tKeywordDelay }, { "ONCE",			tKeywordOnce }, { "$animation",		tKeywordAnimation }, { "$setactor",		tKeywordSetActor }, { "$setsound",		tKeywordSetSound }, { "$sample",		tKeywordSample }, { "$bindto",		tKeywordBindTo }, { "$expression",	tKeywordExpression }, { "$name",			tKeywordName }, { "$position",		tKeywordPosition }, { "$motion",		tKeywordMotion }, { "$yesno",			tKeywordYesNo }, { "$savepositions", tKeywordSavePositions }, { "$effect",		tKeywordEffect }, { "FADE",			tKeywordFade }, { "SHAKE",			tKeywordShake }, { "$story",			tKeywordStory }, { "$spinner",		tKeywordSpinner }, { "$tracking",		tKeywordTracking }, { "$linkto",		tKeywordLinkTo }, { "$mobile",		tKeywordMobile }, { "$dirlight",		tKeywordDirLight }, { "$pointlight",	tKeywordPointLight }, { NULL,				0 }

};

KeyValuePair ShotTokens[] = {

{ "FIXED_TARGET",	tFixedStatic }, { "FIXED_OBJECT",	tFixedObject }, { "FIXED_PATH",		tFixedPath }, { "OBJECT_STATIC",	tObjectStatic }, { "OBJECT_OBJECT", tObjectObject }, { "OBJECT_PATH",	tObjectPath }, { "PATH_TARGET",	tPathStatic }, { "PATH_OBJECT",	tPathObject }, { "PATH_PATH",		tPathPath }, { NULL,			   0 }

};

KeyValuePair ZoomTokens[] = {

{ "DEFAULT_SIZE",		tDefaultSize }, { "CUSTOM_SIZE",		tCustomSize }, { "VALUE",				tZoomValue }, { "ZOOM_IN_HOLD",		tZoomInHold }, { "ZOOM_IN",			tZoomIn }, { "HOLD_ZOOM_OUT",		tHoldZoomOut }, { "ZOOM_OUT",			tZoomOut }, { NULL,				   0 }

};

KeyValuePair ActorTokens[] = {

{ "PLAYER",			tActorPlayer }, { "SPARKY",			tActorSparky }, { "BOSS_ALIEN", 	tActorAlienQueen }, { "BOSS_MECH",		tActorBossMech }, { "BERG",			tActorBerg }, { "ROCKET_RACER",	tActorRocketRacer }, { NULL, 0 }

};

KeyValuePair ExpressionTokens[] = {

{ "HAPPY1",			tExpressionHappy1 }, { "HAPPY2",			tExpressionHappy2 }, { "SAD1",			tExpressionSad1 }, { "SAD2",			tExpressionSad2 }, { "ANGRY1",			tExpressionAngry1 }, { "ANGRY2",			tExpressionAngry2 }, { "SURPRISED1",		tExpressionSurprised1 }, { "SURPRISED2",		tExpressionSurprised2 }, { "TALK",			tExpressionTalkHappy }, { "TALK_SAD",		tExpressionTalkSad }, { NULL,			   0 }

};

KeyValuePair StoryTokens[] = {

{ "INTRO",					(SINT32) tStoryScriptSandyIntro }, { "PRE_TOWN_HALL",			(SINT32) tStoryScriptSandyPreTownHall }, { "TOWN_HALL",				(SINT32) tStoryScriptSandyTownHall }, { "WORKMAN_CHALLENGE",		(SINT32) tStoryScriptSandyWorkmanChallenge }, { "POSTMAN_CHALLENGE",		(SINT32) tStoryScriptSandyPostmanChallenge }, { "FIREMAN_CHALLENGE",		(SINT32) tStoryScriptSandyFiremanChallenge }, { "POLICEMAN_CHALLENGE",	(SINT32) tStoryScriptSandyPolicemanChallenge }, { NULL, 0 }

};

KeyValuePair EffectTokens[] = {

{ "UP",		tSF_FadeUp }, { "DOWN",	tSF_FadeDown }, { "IDLE",	tSF_Idle }, { NULL, 0 } };

SINT32 cEventList::ValueForKey( SINT32 token_type ) {	KeyValuePair *pairs;

switch ( token_type ) {	case NPC_TOKENS: pairs = NPCTokens; break; case SHOT_TOKENS: pairs = ShotTokens; break; case ZOOM_TOKENS: pairs = ZoomTokens; break; case EXPRESSION_TOKENS: pairs = ExpressionTokens; break; case ACTOR_TOKENS: pairs = ActorTokens; break; case STORY_TOKENS: pairs = StoryTokens; break; case EFFECT_TOKENS: pairs = EffectTokens; break; default: pairs = PrimaryTokens; break; }	while ( pairs->Key ) {		if ( !strcmp( m_Keyword, pairs->Key ) ) return pairs->Value; pairs++; }

DBG( Barf ); return INVALID_KEY; }