Пример #1
0
void tcCarGeneralOverhoul(Car car)
{
    Person marc = dbGetObject(Person_Marc_Smith);
    LIST *bubble;
    ubyte choice;

    SetPictID(marc->PictID);

    bubble =
	txtGoKeyAndInsert(BUSINESS_TXT, "GENERAL_OVERHOUL",
			  (U32) ((tcCostsPerTotalRepair(car) * 255) / 8), NULL);
    Bubble(bubble, 0, 0L, 0L);
    RemoveList(bubble);

    choice = Say(BUSINESS_TXT, 0, MATT_PICTID, "GENERAL_OVERHOUL_QUEST");

    if (choice == 0)
	tcRepairCar(car, "TotalRepair");
}
Пример #2
0
void PhysUpdate ( void )
{
	int iObject = 1;

    // Render all the actors in the scene
    int nbActors = gScene->getNbActors();
    NxActor** actors = gScene->getActors();

	while (nbActors--)
    {
        NxActor* actor = *actors++;

		// Get an OpenGL transform (float[16]) from a Novodex shape’s global pose     
		// (NxMat34)
		NxShape* shape = NULL;

		NxMat34 pose = actor->getGlobalPose();

		NxMat33 orient = pose.M;
		NxVec3 pos = pose.t;	

		float glmat[16];    // 4x4 column major OpenGL matrix
		orient.getColumnMajorStride4(&(glmat[0]));
		pos.get(&(glmat[12]));

		// clear the elements we don't need:
		glmat[3] = glmat[7] = glmat[11] = 0.0f;
		glmat[15] = 1.0f;

		{
			sPhysObject* pPhys = ( sPhysObject* ) actor->userData;
			
			if ( pPhys )
			{
				SetWorldMatrix ( pPhys->iID, ( D3DXMATRIX* ) &glmat );

				sObject* pObject = dbGetObject ( pPhys->iID );

				pObject->position.vecPosition = D3DXVECTOR3 ( glmat [ 12 ], glmat [ 13 ], glmat [ 14 ] );
			}
		}
    }
}
Пример #3
0
ubyte plSay(char *msg, U32 persId)
{
    register LIST *l = txtGoKey(PLAN_TXT, msg);
    register ubyte choice;

    SetPictID(((Person) dbGetObject(OL_NR(GetNthNode(PersonsList, persId))))->
	      PictID);

    inpTurnESC(0);
    inpTurnFunctionKey(0);

    choice = Bubble(l, 0, NULL, 200);

    inpTurnFunctionKey(1);
    inpTurnESC(1);

    RemoveList(l);


    plDisplayTimer(0, 1);
    plDisplayInfo();

    return choice;
}
Пример #4
0
static U32 tcATraitor(U32 traitorId)
{
    char name[TXT_KEY_LENGTH], line[TXT_KEY_LENGTH];
    LIST *bubble = txtGoKey(BUSINESS_TXT, "A_TRAITOR");
    LIST *newList = CreateList();
    Person john = dbGetObject(Person_John_Gludo);

    dbGetObjectName(traitorId, name);
    sprintf(line, NODE_NAME(LIST_HEAD(bubble)), name);

    CreateNode(newList, 0L, line);
    CreateNode(newList, 0L, NODE_NAME(GetNthNode(bubble, 1)));
    CreateNode(newList, 0L, NODE_NAME(GetNthNode(bubble, 2)));

    SetPictID(john->PictID);
    Bubble(newList, 0, 0L, 0L);

    RemoveList(bubble);
    RemoveList(newList);

    Say(BUSINESS_TXT, 0, john->PictID, "ARRESTED");

    return 1;			/* gefangen! */
}
Пример #5
0
void lsShowAllConnections(U32 areaID, NODE * node, ubyte perc)
{
    NODE *n;
    LSObject lso1, lso2;
    U32 relID = 0, col, destX, destY, srcX, srcY;
    U32 rasterXSize, rasterYSize, rasterSize;
    static ubyte Alarm_Power;

    lso1 = OL_DATA(node);

    rasterXSize = lsGetRasterXSize(areaID);
    rasterYSize = lsGetRasterYSize(areaID);

    rasterSize = min(rasterXSize, rasterYSize);

    switch (lso1->Type) {
    case Item_Alarmanlage_Z3:
    case Item_Alarmanlage_X3:
    case Item_Alarmanlage_Top:
	relID = hasAlarmRelationID;
	if (Alarm_Power & 1)
	    lsShowRaster(areaID, perc);
	Alarm_Power |= 1;
	break;
    case Item_Steuerkasten:
	relID = hasPowerRelationID;
	if (Alarm_Power & 2)
	    lsShowRaster(areaID, perc);
	Alarm_Power |= 2;
	break;
    default:
	break;
    }

    if (relID) {
	col = ((Item) dbGetObject(lso1->Type))->ColorNr;

	SetObjectListAttr(OLF_NORMAL, Object_LSObject);
	AskAll(lso1, relID, BuildObjectList);

	srcX =
	    lso1->us_DestX + lso1->uch_ExactX + (lso1->uch_ExactX1 -
						 lso1->uch_ExactX) / 2;
	srcY =
	    lso1->us_DestY + lso1->uch_ExactY + (lso1->uch_ExactY1 -
						 lso1->uch_ExactY) / 2;

	srcX = (srcX * rasterSize) / LS_RASTER_X_SIZE;
	srcY = (srcY * rasterSize) / LS_RASTER_Y_SIZE;

	for (n = (NODE *) LIST_HEAD(ObjectList); NODE_SUCC(n);
	     n = (NODE *) NODE_SUCC(n)) {
	    uword x0, y0, x1, y1;

	    gfxSetPens(l_gc, col, GFX_SAME_PEN, GFX_SAME_PEN);

	    lso2 = OL_DATA(n);

	    lsCalcExactSize(lso2, &x0, &y0, &x1, &y1);

	    destX = x0 + (x1 - x0) / 2;
	    destY = y0 + (y1 - y0) / 2;

	    destX = (destX * rasterSize) / LS_RASTER_X_SIZE;
	    destY = (destY * rasterSize) / LS_RASTER_Y_SIZE;

	    gfxMoveCursor(l_gc, srcX, srcY);
	    gfxDraw(l_gc, destX, srcY);
	    gfxDraw(l_gc, destX, destY);

	    gfxSetPens(l_gc, 0, 0, col);
	    gfxRectFill(l_gc, destX - 1, destY - 1, destX + 2, destY + 2);
	}
    }
}
Пример #6
0
void PhysCreateStaticRigidBodyMesh ( int iObject )
{
	sObject* pObject = dbGetObject ( iObject );

	if ( !pObject )
		return;

	int iCount = 0;
	
	for ( int iMesh = 0; iMesh < pObject->iMeshCount; iMesh++ )
	{
		NxVec3* pVertices		= new NxVec3 [ pObject->ppMeshList [ iMesh ]->dwVertexCount ];
		int		iVertexCount	= pObject->ppMeshList [ iMesh ]->dwVertexCount;
		int*	iTriangles		= new int [ pObject->ppMeshList [ iMesh ]->dwIndexCount ];
		int		iTriangleCount	= pObject->ppMeshList [ iMesh ]->dwIndexCount;

		sOffsetMap offsetMap;
		GetFVFOffsetMap ( pObject->ppMeshList [ iMesh ], &offsetMap );

		for ( int i = 0; i < iVertexCount; i++ )
		{
			pVertices [ i ].x = *( ( float* ) pObject->ppMeshList [ iMesh ]->pVertexData + offsetMap.dwX + ( offsetMap.dwSize * i ) );
			pVertices [ i ].y = *( ( float* ) pObject->ppMeshList [ iMesh ]->pVertexData + offsetMap.dwY + ( offsetMap.dwSize * i ) );
			pVertices [ i ].z = *( ( float* ) pObject->ppMeshList [ iMesh ]->pVertexData + offsetMap.dwZ + ( offsetMap.dwSize * i ) );
		}

		for ( i = 0; i < iTriangleCount; i++ )
			iTriangles [ i ] = pObject->ppMeshList [ iMesh ]->pIndices [ i ];
		
		NxTriangleMeshDesc levelDesc;
		levelDesc.numVertices			= iVertexCount;
		levelDesc.numTriangles			= iTriangleCount / 3;
		levelDesc.pointStrideBytes		= sizeof ( NxVec3 );
		levelDesc.triangleStrideBytes   = 3 * sizeof ( int );
		levelDesc.points				= pVertices;
		levelDesc.triangles				= iTriangles;
		levelDesc.flags					= NX_CF_COMPUTE_CONVEX;

		NxTriangleMeshShapeDesc levelShapeDesc;
		NxInitCooking ( );
		
		MemoryWriteBuffer buf;
		bool status = NxCookTriangleMesh ( levelDesc, buf );
		
		if ( status )
		{
			levelShapeDesc.meshData = gPhysicsSDK->createTriangleMesh ( MemoryReadBuffer ( buf.data ) );
		
			NxActor* actor = NULL;

			NxActorDesc actorDesc;
			actorDesc.shapes.pushBack ( &levelShapeDesc );

			actor = gScene->createActor ( actorDesc );
			
			sPhysObject* pPhys = new sPhysObject;
			pPhys->iID      = iObject;
			actor->userData = ( void* )pPhys;

			SetActorCollisionGroup ( actor, GROUP_COLLIDABLE_NON_PUSHABLE );
		}
	}
}
Пример #7
0
void tcBuyCar(void)
{
    LIST *bubble = NULL;
    ubyte choice = 0, choice1 = 0;
    Car matts_car;
    Person marc = (Person) dbGetObject(Person_Marc_Smith);

    while ((choice1 != 2) && (choice != GET_OUT)) {
	ObjectListSuccString = tcShowPriceOfCar;
	ObjectListWidth = 48;

	hasAll(Person_Marc_Smith,
	       OLF_ALIGNED | OLF_PRIVATE_LIST | OLF_INCLUDE_NAME |
	       OLF_INSERT_STAR | OLF_ADD_SUCC_STRING, Object_Car);
	bubble = ObjectListPrivate;

	ObjectListSuccString = NULL;
	ObjectListWidth = 0;

	if (!(LIST_EMPTY(bubble))) {
	    char exp[TXT_KEY_LENGTH];

	    txtGetFirstLine(BUSINESS_TXT, "THANKS", exp);
	    ExpandObjectList(bubble, exp);

	    ShowMenuBackground();

	    if (ChoiceOk(choice = Bubble(bubble, 0, 0L, 0L), GET_OUT, bubble)) {
		matts_car =
		    (Car)
		    dbGetObject(((struct ObjectNode *)
				 GetNthNode(bubble, (U32) choice))->nr);

		SetCarColors((ubyte) matts_car->ColorIndex);
		gfxShow((uword) matts_car->PictID, GFX_NO_REFRESH | GFX_OVERLAY,
			0L, -1L, -1L);

		if (Present
		    (((struct ObjectNode *) GetNthNode(bubble, (U32) choice))->
		     nr, "Car", InitCarPresent)) {
		    choice1 = Say(BUSINESS_TXT, 0, MATT_PICTID, "AUTOKAUF");

		    AddVTime(7);

		    if (choice1 == 1) {
			U32 price = tcGetCarPrice(matts_car);

			if (tcSpendMoney(price, 0)) {
			    U32 carID =
				((struct ObjectNode *)
				 GetNthNode(bubble, (U32) choice))->nr;

			    hasSet(Person_Matt_Stuvysunt, carID);
			    hasUnSet(Person_Marc_Smith, carID);

			    Say(BUSINESS_TXT, 0, marc->PictID, "GOOD CAR");
			}

			if (Say(BUSINESS_TXT, 0, MATT_PICTID, "NACH_AUTOKAUF")
			    == 1)
			    choice1 = 2;
		    }
		}

		gfxShow(27, GFX_NO_REFRESH | GFX_ONE_STEP, 0L, -1L, -1L);
	    } else
		choice = GET_OUT;
	} else {
	    Say(BUSINESS_TXT, 0, marc->PictID, "NO_CAR");
	    choice = GET_OUT;
	}

	RemoveList(bubble);
    }
}
Пример #8
0
void tcRepairCar(Car car, char *repairWhat)
{
    LIST *presentationData = CreateList();
    LIST *list = NULL;
    ubyte *item = NULL, type = 7, ready = 0;
    bool enough = true;
    U32 costs = 0, choice = 0L, totalCosts = 0L;
    uword line = 0;
    Person marc = (Person) dbGetObject(Person_Marc_Smith);

    if (strcmp(repairWhat, "MotorRepair") == 0) {
	item = &car->MotorState;
	costs = tcCostsPerEngineRepair(car);
	type = 1;
    } else {
	if (strcmp(repairWhat, "BodyRepair") == 0) {
	    item = &car->BodyWorkState;
	    costs = tcCostsPerBodyRepair(car);
	    type = 2;
	} else {
	    if (strcmp(repairWhat, "TyreRepair") == 0) {
		item = &car->TyreState;
		costs = tcCostsPerTyreRepair(car);
		type = 4;
	    } else
		costs = tcCostsPerTotalRepair(car);
	}
    }

    if (!(enough = tcSpendMoney(costs, 0)))
	return;

    list = txtGoKey(PRESENT_TXT, repairWhat);

    gfxPrepareRefresh();
    gfxShow((uword) BIG_SHEET, GFX_NO_REFRESH | GFX_OVERLAY, 0L, -1L, -1L);
    inpSetWaitTicks(3L);

    PlayAnim("Reperatur", 30000, GFX_DONT_SHOW_FIRST_PIC);

    while (!(choice & INP_LBUTTONP) && enough && (!ready)) {
	line = 0;

	AddVTime(3);

	AddPresentTextLine(presentationData, NULL, 0L, list, line++);

	if (item)
	    AddPresentLine(presentationData, PRESENT_AS_BAR, (U32) (*item),
			   255L, list, line++);

	AddPresentLine(presentationData, PRESENT_AS_BAR, (U32) (car->State),
		       255L, list, line++);

	AddPresentLine(presentationData, PRESENT_AS_NUMBER, totalCosts, 0L,
		       list, line++);
	AddPresentLine(presentationData, PRESENT_AS_NUMBER,
		       (U32) tcGetPlayerMoney, 0L, list, line++);

	DrawPresent(presentationData, 0, u_gc,
		    (ubyte) GetNrOfNodes(presentationData));

	RemoveNode(presentationData, NULL);

	choice = inpWaitFor(INP_LBUTTONP | INP_TIME);

	if (choice & INP_TIME) {
	    if ((enough = tcSpendMoney(costs, 1))) {
		totalCosts += costs;

		if (type & 1)
		    tcSetCarMotorState(car, 1);

		if (type & 2)
		    tcSetCarBodyState(car, 1);

		if (type & 4)
		    tcSetCarTyreState(car, 1);
	    }
	}

	if (item) {
	    if ((*item) == 255) {
		StopAnim();
		gfxRefresh();
		Say(BUSINESS_TXT, 0, marc->PictID, "REP_READY");
		ready = 1;
	    }
	} else {
	    if (tcGetCarTotalState(car) > 253) {
		StopAnim();
		gfxRefresh();
		Say(BUSINESS_TXT, 0, marc->PictID, "REP_READY");
		ready = 1;
	    }
	}
    }

    if (!ready) {
	StopAnim();
	gfxRefresh();
    }

    inpSetWaitTicks(0L);

    /*gfxShow(26,GFX_NO_REFRESH|GFX_ONE_STEP,0L,-1L,-1L);*/
    /*gfxShow((uword)car->PictID,GFX_NO_REFRESH|GFX_OVERLAY,1L,-1L,-1L);*/

    RemoveList(presentationData);
    RemoveList(list);
}
Пример #9
0
static void SetFullEnviroment(void)
{
    hasSetP(Person_Matt_Stuvysunt, Ability_Elektronik, 251);
    hasSetP(Person_Matt_Stuvysunt, Ability_Schloesser, 210);
    hasSetP(Person_Matt_Stuvysunt, Ability_Aufpassen, 180);
    hasSetP(Person_Matt_Stuvysunt, Ability_Schloesser, 180);

    hasSetP(Person_Marc_Smith, Ability_Autos, 255);
    hasSetP(Person_Mohammed_Abdula, Ability_Kampf, 255);

    /* Matt has all cars */
    hasSet(Person_Matt_Stuvysunt, Car_Triumph_Roadstar_1947);
    hasSet(Person_Matt_Stuvysunt, Car_Triumph_Roadstar_1949);
    hasSet(Person_Matt_Stuvysunt, Car_Cadillac_Club_1952);
    hasSet(Person_Matt_Stuvysunt, Car_Opel_Olympia_1953);
    hasSet(Person_Matt_Stuvysunt, Car_Standard_Vanguard_1950);
    hasSet(Person_Matt_Stuvysunt, Car_Standard_Vanguard_1951);
    hasSet(Person_Matt_Stuvysunt, Car_Standard_Vanguard_1953);
    hasSet(Person_Matt_Stuvysunt, Car_Jaguar_XK_1950);
    hasSet(Person_Matt_Stuvysunt, Car_Pontiac_Streamliner_1944);
    hasSet(Person_Matt_Stuvysunt, Car_Pontiac_Streamliner_1946);
    hasSet(Person_Matt_Stuvysunt, Car_Pontiac_Streamliner_1949);
    hasSet(Person_Matt_Stuvysunt, Car_Fiat_Topolino_1936);
    hasSet(Person_Matt_Stuvysunt, Car_Fiat_Topolino_1940);
    hasSet(Person_Matt_Stuvysunt, Car_Fiat_Topolino_1942);
    hasSet(Person_Matt_Stuvysunt, Car_Morris_Minor_1948);
    hasSet(Person_Matt_Stuvysunt, Car_Morris_Minor_1950);
    hasSet(Person_Matt_Stuvysunt, Car_Morris_Minor_1953);

    /* Matt has all tools
       Removed : Hand,
       Fuss,
       Stechkarte */
    hasSet(Person_Matt_Stuvysunt, Tool_Dietrich);
    hasSet(Person_Matt_Stuvysunt, Tool_Hammer);
    hasSet(Person_Matt_Stuvysunt, Tool_Axt);
    hasSet(Person_Matt_Stuvysunt, Tool_Kernbohrer);
    hasSet(Person_Matt_Stuvysunt, Tool_Handschuhe);
    hasSet(Person_Matt_Stuvysunt, Tool_Schuhe);
    hasSet(Person_Matt_Stuvysunt, Tool_Maske);
    hasSet(Person_Matt_Stuvysunt, Tool_Chloroform);
    hasSet(Person_Matt_Stuvysunt, Tool_Brecheisen);
    hasSet(Person_Matt_Stuvysunt, Tool_Winkelschleifer);
    hasSet(Person_Matt_Stuvysunt, Tool_Bohrmaschine);
    hasSet(Person_Matt_Stuvysunt, Tool_Bohrwinde);
    hasSet(Person_Matt_Stuvysunt, Tool_Schloszstecher);
    hasSet(Person_Matt_Stuvysunt, Tool_Schneidbrenner);
    hasSet(Person_Matt_Stuvysunt, Tool_Sauerstofflanze);
    hasSet(Person_Matt_Stuvysunt, Tool_Stethoskop);
    hasSet(Person_Matt_Stuvysunt, Tool_Batterie);
    hasSet(Person_Matt_Stuvysunt, Tool_Stromgenerator);
    hasSet(Person_Matt_Stuvysunt, Tool_Elektroset);
    hasSet(Person_Matt_Stuvysunt, Tool_Schutzanzug);
    hasSet(Person_Matt_Stuvysunt, Tool_Dynamit);
    hasSet(Person_Matt_Stuvysunt, Tool_Elektrohammer);
    hasSet(Person_Matt_Stuvysunt, Tool_Glasschneider);
    hasSet(Person_Matt_Stuvysunt, Tool_Strickleiter);
    hasSet(Person_Matt_Stuvysunt, Tool_Funkgeraet);

    /* Matt has asked all Persons for a job
       Removed : Old Matt,
       Matt Stuvysunt,
       John Gludo,
       Miles Chickenwing,
       Sabien Pardo,
       Red Stanson */
    joinSet(Person_Matt_Stuvysunt, Person_Paul_O_Conner);
    joinSet(Person_Matt_Stuvysunt, Person_Marc_Smith);
    joinSet(Person_Matt_Stuvysunt, Person_Frank_Meier);
    joinSet(Person_Matt_Stuvysunt, Person_Herbert_Briggs);
    joinSet(Person_Matt_Stuvysunt, Person_Tony_Allen);
    joinSet(Person_Matt_Stuvysunt, Person_Margret_Allen);
    joinSet(Person_Matt_Stuvysunt, Person_Mathew_Black);
    joinSet(Person_Matt_Stuvysunt, Person_Miguel_Garcia);
    joinSet(Person_Matt_Stuvysunt, Person_Mike_Seeger);
    joinSet(Person_Matt_Stuvysunt, Person_Albert_Liet);
    joinSet(Person_Matt_Stuvysunt, Person_Mohammed_Abdula);
    joinSet(Person_Matt_Stuvysunt, Person_Serge_Fontane);
    joinSet(Person_Matt_Stuvysunt, Person_Frank_Maloya);
    joinSet(Person_Matt_Stuvysunt, Person_Neil_Grey);
    joinSet(Person_Matt_Stuvysunt, Person_Mark_Hart);
    joinSet(Person_Matt_Stuvysunt, Person_Jim_Danner);
    joinSet(Person_Matt_Stuvysunt, Person_Robert_Bull);
    joinSet(Person_Matt_Stuvysunt, Person_Thomas_Groul);
    joinSet(Person_Matt_Stuvysunt, Person_Helen_Parker);
    joinSet(Person_Matt_Stuvysunt, Person_Dan_Stanford);
    joinSet(Person_Matt_Stuvysunt, Person_Mary_Bolton);
    joinSet(Person_Matt_Stuvysunt, Person_Eric_Pooly);
    joinSet(Person_Matt_Stuvysunt, Person_Prof_Emil_Schmitt);
    joinSet(Person_Matt_Stuvysunt, Person_Elisabeth_Schmitt);
    joinSet(Person_Matt_Stuvysunt, Person_Margrete_Briggs);
    joinSet(Person_Matt_Stuvysunt, Person_Peter_Brook);
    joinSet(Person_Matt_Stuvysunt, Person_Samuel_Rosenblatt);
    joinSet(Person_Matt_Stuvysunt, Person_Lucas_Grull);
    joinSet(Person_Matt_Stuvysunt, Person_Ken_Addison);
    joinSet(Person_Matt_Stuvysunt, Person_Jiri_Poulin);
    joinSet(Person_Matt_Stuvysunt, Person_Garry_Stevenson);
    joinSet(Person_Matt_Stuvysunt, Person_Al_Mel);
    joinSet(Person_Matt_Stuvysunt, Person_Jack_Motart);
    joinSet(Person_Matt_Stuvysunt, Person_Kevin_Smith);
    joinSet(Person_Matt_Stuvysunt, Person_Mike_Kahn);
    joinSet(Person_Matt_Stuvysunt, Person_Frank_De_Silva);
    joinSet(Person_Matt_Stuvysunt, Person_Justin_White);
    joinSet(Person_Matt_Stuvysunt, Person_John_O_Keef);
    joinSet(Person_Matt_Stuvysunt, Person_Luthmilla_Nervesaw);
    joinSet(Person_Matt_Stuvysunt, Person_Thomas_Smith);
    joinSet(Person_Matt_Stuvysunt, Person_Ben_Riggley);
    joinSet(Person_Matt_Stuvysunt, Person_Richard_Doil);
    joinSet(Person_Matt_Stuvysunt, Person_Pater_James);

    /* Matt has investigated all buildings */
    hasSet(Person_Matt_Stuvysunt, Building_Kiosk);
    ((Building) dbGetObject(Building_Kiosk))->Exactlyness = 255;
    hasSet(Person_Matt_Stuvysunt, Building_Tante_Emma_Laden);
    ((Building) dbGetObject(Building_Tante_Emma_Laden))->Exactlyness = 255;
    hasSet(Person_Matt_Stuvysunt, Building_Juwelier);
    ((Building) dbGetObject(Building_Juwelier))->Exactlyness = 255;
    hasSet(Person_Matt_Stuvysunt, Building_Old_Curiosity_Shop);
    ((Building) dbGetObject(Building_Old_Curiosity_Shop))->Exactlyness = 255;
    hasSet(Person_Matt_Stuvysunt, Building_Pink_Villa);
    ((Building) dbGetObject(Building_Pink_Villa))->Exactlyness = 255;
    hasSet(Person_Matt_Stuvysunt, Building_Seniorenheim);
    ((Building) dbGetObject(Building_Seniorenheim))->Exactlyness = 255;
    hasSet(Person_Matt_Stuvysunt, Building_Grab_von_Karl_Marx);
    ((Building) dbGetObject(Building_Grab_von_Karl_Marx))->Exactlyness = 255;
    hasSet(Person_Matt_Stuvysunt, Building_Villa);
    ((Building) dbGetObject(Building_Villa))->Exactlyness = 255;
    hasSet(Person_Matt_Stuvysunt, Building_Kenwood_House);
    ((Building) dbGetObject(Building_Kenwood_House))->Exactlyness = 255;
    hasSet(Person_Matt_Stuvysunt, Building_Ham_House);
    ((Building) dbGetObject(Building_Ham_House))->Exactlyness = 255;
    hasSet(Person_Matt_Stuvysunt, Building_Osterly_Park_House);
    ((Building) dbGetObject(Building_Osterly_Park_House))->Exactlyness = 255;
    hasSet(Person_Matt_Stuvysunt, Building_Chiswick_House);
    ((Building) dbGetObject(Building_Chiswick_House))->Exactlyness = 255;
    hasSet(Person_Matt_Stuvysunt, Building_Suterbys);
    ((Building) dbGetObject(Building_Suterbys))->Exactlyness = 255;
    hasSet(Person_Matt_Stuvysunt, Building_British_Museum);
    ((Building) dbGetObject(Building_British_Museum))->Exactlyness = 255;
    hasSet(Person_Matt_Stuvysunt, Building_Natural_Museum);
    ((Building) dbGetObject(Building_Natural_Museum))->Exactlyness = 255;
    hasSet(Person_Matt_Stuvysunt, Building_National_Galery);
    ((Building) dbGetObject(Building_National_Galery))->Exactlyness = 255;
    hasSet(Person_Matt_Stuvysunt, Building_Victoria_und_Albert_Museum);
    ((Building) dbGetObject(Building_Victoria_und_Albert_Museum))->Exactlyness =
	255;
    hasSet(Person_Matt_Stuvysunt, Building_Bank_of_England);
    ((Building) dbGetObject(Building_Bank_of_England))->Exactlyness = 255;
    hasSet(Person_Matt_Stuvysunt, Building_Tower_of_London);
    ((Building) dbGetObject(Building_Tower_of_London))->Exactlyness = 255;
    hasSet(Person_Matt_Stuvysunt, Building_Starford_Kaserne);
    ((Building) dbGetObject(Building_Starford_Kaserne))->Exactlyness = 255;

    if (setup.Profidisk) {
    hasSet(Person_Matt_Stuvysunt, Car_Rover_75_1949);
    hasSet(Person_Matt_Stuvysunt, Car_Rover_75_1950);
    hasSet(Person_Matt_Stuvysunt, Car_Rover_75_1952);
    hasSet(Person_Matt_Stuvysunt, Car_Ford_Model_T__1926);
    hasSet(Person_Matt_Stuvysunt, Car_Bentley_Continental_Typ_R_1952);
    hasSet(Person_Matt_Stuvysunt, Car_Bentley_Continental_Typ_R_1953);
    hasSet(Person_Matt_Stuvysunt, Car_Fiat_634_N_1936);
    hasSet(Person_Matt_Stuvysunt, Car_Fiat_634_N_1943);

    joinSet(Person_Matt_Stuvysunt, Person_Tom_Cooler);
    joinSet(Person_Matt_Stuvysunt, Person_Sid_Palmer);
    joinSet(Person_Matt_Stuvysunt, Person_Dean_Esters);
    joinSet(Person_Matt_Stuvysunt, Person_Prof_Marcus_Green);
    joinSet(Person_Matt_Stuvysunt, Person_Melanie_Morgan);
    joinSet(Person_Matt_Stuvysunt, Person_Rosi_Lambert);
    joinSet(Person_Matt_Stuvysunt, Person_Rod_Masterson);
    joinSet(Person_Matt_Stuvysunt, Person_Tina_Olavson);
    joinSet(Person_Matt_Stuvysunt, Person_Phil_Ciggy);
    joinSet(Person_Matt_Stuvysunt, Person_Pere_Ubu);

    hasSet(Person_Matt_Stuvysunt, Building_Baker_Street);
    ((Building) dbGetObject(Building_Baker_Street))->Exactlyness = 255;
    hasSet(Person_Matt_Stuvysunt, Building_Madame_Tussaud);
    ((Building) dbGetObject(Building_Madame_Tussaud))->Exactlyness = 255;
    hasSet(Person_Matt_Stuvysunt, Building_Westminster_Abbey);
    ((Building) dbGetObject(Building_Westminster_Abbey))->Exactlyness = 255;
    hasSet(Person_Matt_Stuvysunt, Building_Downing_Street_10);
    ((Building) dbGetObject(Building_Downing_Street_10))->Exactlyness = 255;
    hasSet(Person_Matt_Stuvysunt, Building_Postzug);
    ((Building) dbGetObject(Building_Postzug))->Exactlyness = 255;
    hasSet(Person_Matt_Stuvysunt, Building_Tate_Gallery);
    ((Building) dbGetObject(Building_Tate_Gallery))->Exactlyness = 255;
    hasSet(Person_Matt_Stuvysunt, Building_Buckingham_Palace);
    ((Building) dbGetObject(Building_Buckingham_Palace))->Exactlyness = 255;
    hasSet(Person_Matt_Stuvysunt, Building_Bulstrode_Chemestry_Ltd);
    ((Building) dbGetObject(Building_Bulstrode_Chemestry_Ltd))->Exactlyness =
	255;
    }
}
Пример #10
0
S32 tcCalcCarEscape(S32 timeLeft)
{
    ubyte kmhWeight[4] = { 32, 44, 60, 67 };
    ubyte psWeight[4] = { 68, 56, 40, 33 };
    ubyte driverWeight[4] = { 50, 40, 25, 20 };
    ubyte policeSpeed[4] = { 90, 95, 103, 107 }
    , paint;
    char line[TXT_KEY_LENGTH];
    S32 kmh, ps, i, j, YardsInFront, length, wayType, unrealSpeed, x, xOldMatt =
	-1, xOldPoli = -1;
    Car car = dbGetObject(Organisation.CarID);
    Building build = dbGetObject(Organisation.BuildingID);
    S32 result = FAHN_ESCAPED;
    U8 palette[GFX_PALETTE_SIZE];

    if ((Organisation.BuildingID != Building_Tower_of_London) &&
	(Organisation.BuildingID != Building_Starford_Kaserne)) {
	wayType = build->EscapeRoute;
	length = build->EscapeRouteLength;

	kmh = car->Speed;
	ps = car->PS;

	/* Motor : pro 10% Schaden -> 5% Leistung weniger */
	kmh = CalcValue(kmh, 0, 65535L, (car->MotorState) / 2, 50);
	ps = CalcValue(ps, 0, 65535L, (car->MotorState) / 2, 50);

	/* pro Jahr 3% weniger */
	i = (car->Speed * 3 * (tcRGetCarAge(car) + 1)) / 100;
	j = (car->PS * 3 * (tcRGetCarAge(car) + 1)) / 100;

	if (kmh >= i)
	    kmh -= i;
	else
	    kmh = 0;

	if (ps >= j)
	    ps -= j;
	else
	    ps = 0;

	/* Reifen pro 10% um 2% weniger */
	i = (car->Speed * 2 * (255 - car->TyreState)) / 2500;
	j = (car->Speed * 2 * (255 - car->PS)) / 2500;

	if (kmh >= i)
	    kmh -= i;
	else
	    kmh = 0;

	if (ps >= j)
	    ps -= j;
	else
	    ps = 0;

	/* Fahrer */
	/* kann aus einem Auto um ein Viertel mehr herausholen, als eigentlich */
	/* drinnen ist! */
	i = hasGet(Organisation.DriverID, Ability_Autos);
	kmh =
	    CalcValue(kmh, 0, car->Speed + car->Speed / 4, i,
		      driverWeight[wayType]);
	ps = CalcValue(ps, 0, car->PS + car->PS / 4, i, driverWeight[wayType]);

	/* Ma�zahl f�r Geschwindigkeit */
	/* Einheit = m pro Schleifendurchlauf */
	unrealSpeed = (kmh * kmhWeight[wayType] + ps * psWeight[wayType]) / 100;

	unrealSpeed = unrealSpeed + 5 - (S32) (CalcRandomNr(0, 10));

	if (unrealSpeed <= 0)
	    unrealSpeed = 5;

	policeSpeed[wayType] = policeSpeed[wayType] + 5 - CalcRandomNr(0, 10);
	policeSpeed[wayType] =
	    CalcValue(policeSpeed[wayType], 0, 255, build->GRate, 25);

	/* Vorsprung berechnen */
	/* Vorsprung ist maximal die halbe Strecke (length * 500 m) und */
	/* mindestens 2000 Meter (damit man von der Fluct etwas sieht!) */

	i = min(((unrealSpeed * timeLeft) / 5), length * 500);
	i = max(2000, i);	/* mindestens 2000 Meter */

	j = 0;
	length *= 1000;		/* Fluchtweg in Meter */

	/* Bildschirmdarstellung */

	txtGetFirstLine(BUSINESS_TXT, "FLUCHT", line);
	ShowMenuBackground();
	PrintStatus(line);

	gfxChangeColors(l_gc, 0, GFX_FADE_OUT, 0);
	gfxShow(car->PictID, GFX_NO_REFRESH | GFX_ONE_STEP, 0, -1, -1);

	gfxPrepareColl(GFX_COLL_PARKING);
	gfxGetPalette(GFX_COLL_PARKING, palette);

	gfxChangeColors(l_gc, 0, GFX_BLEND_UP, palette);
	SetCarColors(car->ColorIndex);

	gfxSetPens(l_gc, 20, GFX_SAME_PEN, 21);
	gfxRectFill(l_gc, 60, 40, 60 + 199, 40 + 19);

	i = max(i, 60);
	j = max(j, 5);

	sndPrepareFX("flucht.voc");
	sndPlayFX();

	do {
	    i += unrealSpeed;	/* KmH von Matt */
	    i = max(i, 0);

	    paint = 0;

	    if (Search.TimeOfAlarm)
		j += policeSpeed[wayType];

	    YardsInFront = i - j;	/* zum Vorsprung addieren */

	    /* Berechnung der Darstellung */
	    x = (i * 190) / length;	/* Matts Car */

	    if (x != xOldMatt) {
		if (xOldMatt != -1) {
		    gfxSetPens(l_gc, 20, GFX_SAME_PEN, 20);

		    if ((195 - x + 1) < (198 + 195 - xOldMatt))
			gfxRectFill(l_gc, 60 + 195 - xOldMatt, 45,
				    60 + 198 - xOldMatt, 55);
		}

		gfxSetPens(l_gc, 11, GFX_SAME_PEN, 11);
		gfxRectFill(l_gc, 60 + 195 - x, 45, 60 + 198 - x, 55);

		xOldMatt = x;
		paint = 1;
	    }

	    if (Search.TimeOfAlarm) {	/* Police Car */
		x = (j * 190) / length;

		if (x != xOldPoli) {
		    if (xOldPoli != -1) {
			gfxSetPens(l_gc, 20, GFX_SAME_PEN, 20);
			gfxRectFill(l_gc, 60 + 195 - xOldPoli, 45,
				    60 + 198 - xOldPoli, 55);
		    }

		    gfxSetPens(l_gc, 23, GFX_SAME_PEN, 23);
		    gfxRectFill(l_gc, 60 + 195 - x, 45, 60 + 198 - x, 55);

		    paint = 1;
		}

		xOldPoli = x;
	    }

	    if (paint)
		inpDelay(3);
	}
	while ((i < length) && (YardsInFront > 50));

	if (YardsInFront > 50)
	    result = FAHN_ESCAPED;
	else
	    result = FAHN_NOT_ESCAPED;
    }

    return result;
}
Пример #11
0
S32 tcEscapeByCar(U32 escBits, S32 timeLeft)
{
    Person gludo = dbGetObject(Person_John_Gludo);
    Person miles = dbGetObject(Person_Miles_Chickenwing);
    ubyte escapeSucc;

    if (timeLeft > 0)
	escapeSucc = FAHN_ESCAPED;
    else
	escapeSucc = FAHN_NOT_ESCAPED;

    /* Flucht per Auto! */
    if (escapeSucc == FAHN_ESCAPED) {
	if ((Search.BuildingId != Building_Tower_of_London) &&
	    (Search.BuildingId != Building_Starford_Kaserne))
	    escapeSucc = tcCalcCarEscape(timeLeft);
    } else
	tcMattGoesTo(7);	/* Polizei */

    /* Ausgabe : Flucht gelungen, Flucht nicht gelungen */
    if (escapeSucc == FAHN_ESCAPED) {
	if ((escBits & FAHN_ALARM) || (escBits & FAHN_QUIET_ALARM)) {
	    Say(BUSINESS_TXT, 0, gludo->PictID, "HINWEIS_0");	/* entkommen!  */
	    Say(BUSINESS_TXT, 0, miles->PictID, "HINWEIS_2");	/* woher Hinweis? */
	} else
	    Say(BUSINESS_TXT, 0, OLD_MATT_PICTID, "I_ESCAPED");	/* no problems */
    } else {
	Say(BUSINESS_TXT, 0, gludo->PictID, "HINWEIS_1");	/* geschnappt! */
	Say(BUSINESS_TXT, 0, miles->PictID, "HINWEIS_2");	/* woher Hinweis? */
    }

    /* Gludo erz�hlt woher Hinweise stammten (falls es welche gibt) */
    if (escBits & FAHN_ALARM) {
	if (escBits & FAHN_ALARM_ALARM)
	    Say(BUSINESS_TXT, 0, gludo->PictID, "HINWEIS_6");	/* Alarmanlage */

	if (escBits & FAHN_ALARM_POWER)
	    Say(BUSINESS_TXT, 0, gludo->PictID, "HINWEIS_8");

	if (escBits & FAHN_ALARM_TIMER)
	    Say(BUSINESS_TXT, 0, gludo->PictID, "HINWEIS_6");	/* Alarmanlage */

	if (escBits & FAHN_ALARM_MICRO)
	    Say(BUSINESS_TXT, 0, gludo->PictID, "HINWEIS_9");

	if (escBits & FAHN_ALARM_TIMECLOCK)
	    Say(BUSINESS_TXT, 0, gludo->PictID, "HINWEIS_7");	/* Alarmanlage */

	if (escBits & FAHN_ALARM_GUARD)
	    Say(BUSINESS_TXT, 0, gludo->PictID, "HINWEIS_10");
    } else {
	if (escBits & FAHN_QUIET_ALARM) {
	    if (escBits & FAHN_ALARM_RADIO)
		Say(BUSINESS_TXT, 0, gludo->PictID, "HINWEIS_5");

	    if (escBits & FAHN_ALARM_PATRO)
		Say(BUSINESS_TXT, 0, gludo->PictID, "HINWEIS_4");

	    if (escBits & FAHN_ALARM_LOUDN)
		Say(BUSINESS_TXT, 0, gludo->PictID, "HINWEIS_3");
	}
    }

    if (escapeSucc != FAHN_ESCAPED)
	StopAnim();

    return ((S32) escapeSucc);
}
Пример #12
0
U32 tcStartEvidence(void)
{
    S32 MyEvidence[4][7], guarded, radio;
    U32 totalEvidence[7], i, j, shownEvidence[4], Recognition[4], caught = 0;
    ubyte guyReady, guyNr, evidenceNr, guyCount, shown = 0;
    char line[TXT_KEY_LENGTH];
    Person p[4];
    Evidence evidence = dbGetObject(Evidence_Evidence_1);	/* just for presentation */
    struct ObjectNode *n;
    LIST *guys, *spuren;

    if ((!(Search.EscapeBits & FAHN_ALARM))
	&& (!(Search.EscapeBits & FAHN_QUIET_ALARM)))
	Say(BUSINESS_TXT, 0, ((Person) dbGetObject(Person_John_Gludo))->PictID,
	    "A_BURGLARY_SIR");

    Say(BUSINESS_TXT, 0,
	((Person) dbGetObject(Person_Miles_Chickenwing))->PictID,
	"START_EVIDENCE");

    joined_byAll(Person_Matt_Stuvysunt, OLF_PRIVATE_LIST, Object_Person);
    guys = ObjectListPrivate;
    dbSortObjectList(&guys, dbStdCompareObjects);

    guyCount = (ubyte) GetNrOfNodes(guys);
    spuren = txtGoKey(BUSINESS_TXT, "SPUREN");

    p[0] = p[1] = p[2] = p[3] = NULL;

    guarded = ChangeAbs(((Building) dbGetObject(Search.BuildingId))->GRate,
			((Building) dbGetObject(Search.BuildingId))->Strike / 7,
			0, 255);

    radio = (S32) ((Building) dbGetObject(Search.BuildingId))->RadioGuarding;

    for (n = (struct ObjectNode *) LIST_HEAD(guys), i = 0; NODE_SUCC(n);
	 n = (struct ObjectNode *) NODE_SUCC(n), i++) {
	S32 div = 380;

	p[i] = OL_DATA(n);

	/* alle folgenden Werte sind zwischen 0 und 255 */

	/* statt durch 765 zu dividieren wurde urspr�nglich durch 255 dividiert -> */
	/* viel zu gro�e Werte */

	if (Search.SpotTouchCount[i])
	    div = 1;

	MyEvidence[i][0] =
	    (((tcGetTrail(p[i], 0) * (S32) Search.WalkTime[i] *
	       (max(1, 255 - guarded))) / ((S32) Search.TimeOfBurglary +
					   1))) / div;
	MyEvidence[i][1] =
	    (((tcGetTrail(p[i], 1) * (S32) Search.WaitTime[i] *
	       (max(1, 255 - guarded))) / ((S32) Search.TimeOfBurglary +
					   1))) / div;
	MyEvidence[i][2] =
	    (((tcGetTrail(p[i], 2) * (S32) Search.WorkTime[i] *
	       (max(1, 255 - guarded))) / ((S32) Search.TimeOfBurglary +
					   1))) / div;
	MyEvidence[i][3] =
	    (((tcGetTrail(p[i], 3) * (S32) Search.KillTime[i] *
	       (max(1, 255 - guarded))) / ((S32) Search.TimeOfBurglary + 1)));
	MyEvidence[i][4] =
	    ChangeAbs(0, (S32) Search.CallCount * (S32) radio / 5, 0, 255);
	MyEvidence[i][5] =
	    (p[i]->KnownToPolice * (max(1, guarded))) / (div * 3);
	MyEvidence[i][6] =
	    ChangeAbs(0,
		      (S32) CalcRandomNr(200,
					 255) * (S32) Search.SpotTouchCount[i],
		      0, 255);

	for (j = 0; j < 7; j++)	/* jeden Betrag != 0 AUFRUNDEN auf 1% ! */
	    if (MyEvidence[i][j])
		MyEvidence[i][j] = max(MyEvidence[i][j], 5);

	if (has(Person_Matt_Stuvysunt, Tool_Maske))
	    MyEvidence[i][6] = (MyEvidence[i][6] * 2) / 3;

	/* im Fluchtfall viele Gehspuren! */
	if (Search.EscapeBits & FAHN_ESCAPE)
	    MyEvidence[i][0] =
		CalcValue(MyEvidence[i][0], CalcRandomNr(80, 120), 255, 255,
			  50);

	totalEvidence[i] =
	    MyEvidence[i][0] + MyEvidence[i][1] + MyEvidence[i][2] +
	    MyEvidence[i][3] + MyEvidence[i][4] + MyEvidence[i][5] +
	    MyEvidence[i][6];

	shownEvidence[i] = Recognition[i] = 0;

	tcPersonLearns(OL_NR(n));
    }

    prSetBarPrefs(m_gc, 300, 12, 1, 3, 0);

    guyReady = 0;
    txtGetFirstLine(BUSINESS_TXT, "FAHNDUNG", line);

    while (guyReady != ((1 << guyCount) - 1)) {
	if (shown) {
	    ShowTime(0);
	    inpDelay(35L);
	    AddVTime(CalcRandomNr(1, 11));

	    shown = 0;
	}

	guyNr = CalcRandomNr(0, guyCount);

	/* wer ist den noch nicht fertig? */
	while ((1 << guyNr) & guyReady)
	    guyNr = (guyNr + 1) % guyCount;

	/* bei folgendem CalcRandomNr darf nicht 4 - guyCount stehe, sonst
	 * Division durch 0!
	 */

	/* zuf�llig eine Spurenart ausw�hlen */
	evidenceNr = CalcRandomNr(0, 7);

	/* wenn diese Spurenart schon angzeigt wurde, eine freie
	 * Spur suchen
	 */
	j = 0;

	while (((1 << evidenceNr) & shownEvidence[guyNr]) && (j++ < 7))
	    evidenceNr = (evidenceNr + 1) % 7;

	if (j < 8) {		/* 8 stimmt! -> ober wird anschlie�end noch erh�ht */
	    shownEvidence[guyNr] |= (1 << evidenceNr);

	    if (MyEvidence[guyNr][evidenceNr] > 0) {
		ShowMenuBackground();
		PrintStatus(NODE_NAME(GetNthNode(spuren, evidenceNr)));

		Recognition[guyNr] += MyEvidence[guyNr][evidenceNr];

		evidence->Recognition = Recognition[guyNr] / 3;	/* change also: totalEvidence /= 3.... */
		evidence->pers = (U32) OL_NR(GetNthNode(guys, (U32) guyNr));

		/* f�r alle "Evidences" - stimmt so, da f�r alle */
		/* Personen die selbe Evidence Struct benutzt wird -> */
		/* bestimmte Werte sind von vorher gesetzt und m�ssen gel�scht */
		/* werden */

		evidence->WalkTrail = 0;
		evidence->WaitTrail = 0;
		evidence->WorkTrail = 0;
		evidence->KillTrail = 0;
		evidence->CallTrail = 0;
		evidence->PaperTrail = 0;
		evidence->FotoTrail = 0;

		if (shownEvidence[guyNr] & 1)
		    evidence->WalkTrail = MyEvidence[guyNr][0];

		if (shownEvidence[guyNr] & 2)
		    evidence->WaitTrail = MyEvidence[guyNr][1];

		if (shownEvidence[guyNr] & 4)
		    evidence->WorkTrail = MyEvidence[guyNr][2];

		if (shownEvidence[guyNr] & 8)
		    evidence->KillTrail = MyEvidence[guyNr][3];

		if (shownEvidence[guyNr] & 16)
		    evidence->CallTrail = MyEvidence[guyNr][4];

		if (shownEvidence[guyNr] & 32)
		    evidence->PaperTrail = MyEvidence[guyNr][5];

		if (shownEvidence[guyNr] & 64)
		    evidence->FotoTrail = MyEvidence[guyNr][6];

		Present(Evidence_Evidence_1, "Fahndung", InitEvidencePresent);

		ShowMenuBackground();
		PrintStatus(line);

		shown = 1;
	    }
	}

	if (shownEvidence[guyNr] == ((1 << 7) - 1))
	    guyReady |= (1 << guyNr);
    }

    guyReady = 0;

    /* ein gewisses Restwissen bleibt der Polizei ! */
    for (i = 0; i < guyCount; i++) {
	totalEvidence[i] /= 3;	/* change als in recognition = ... */

	if (p[i] != 0) {
	    if (totalEvidence[i] > 255)
		totalEvidence[i] = 255;

	    p[i]->KnownToPolice = (ubyte) (totalEvidence[i]);

	    if (p[i]->KnownToPolice > tcPERSON_IS_ARRESTED)
		caught |= tcPersonWanted(OL_NR(GetNthNode(guys, i)));

	    if (!caught)
		if (p[i] == dbGetObject(Person_Robert_Bull))
		    caught |= tcATraitor(Person_Robert_Bull);

	    if (!caught)
		if (p[i] == dbGetObject(Person_Marc_Smith))
		    caught |= tcATraitor(Person_Marc_Smith);

            if (setup.Profidisk) {
	        if (!caught)
		    if (p[i] == dbGetObject(Person_Phil_Ciggy))
		        caught |= tcATraitor(Person_Phil_Ciggy);
            }
	}
    }

    caught |= tcIsThereATraitor();

    if (!
	(tcCarFound
	 ((Car) dbGetObject(Organisation.CarID),
	  Search.TimeOfBurglary - Search.TimeOfAlarm))) {
	S32 newStrike;
	Car car = dbGetObject(Organisation.CarID);

	newStrike = CalcValue((S32) car->Strike, 0, 255, 255, 15);

	if (newStrike < (car->Strike + 40))
	    newStrike = ChangeAbs((S32) car->Strike, 40, 0, 255);

	car->Strike = newStrike;
    }

    ((Player) dbGetObject(Player_Player_1))->MattsPart =
	(ubyte) tcCalcMattsPart();
    tcForgetGuys();

    RemoveList(spuren);
    RemoveList(guys);

    return caught;
}
Пример #13
0
U32 ShowTheClouRequester(S32 error_class)
{
    LIST *menu;
    U32 answer = 0;
    ubyte choices;
    Player player = dbGetObject(Player_Player_1);

    inpTurnESC(0);

    ShowMenuBackground();

    switch (error_class) {
    case No_Error:

	ShowMenuBackground();

	menu = txtGoKey(MENU_TXT, "ESCMenu_STD");

	inpTurnFunctionKey(0);

	if (GamePlayMode & GP_DEMO)
	    choices = Menu(menu, 3, 0, NULL, 0);
	else
	    choices = Menu(menu, 15, 0, NULL, 0);

	inpTurnFunctionKey(1);

	switch (choices) {
	case 0:		/* continue playing */
	    player->CurrScene = 0;
	    ShowMenuBackground();
	    tcRefreshLocationInTitle(GetLocation);
	    break;
	case 1:
	    player->CurrScene = SCENE_THE_END;
	    ShowMenuBackground();
	    break;
	case 2:
	    tcSaveTheClou();
	    player->CurrScene = 0;
	    ShowMenuBackground();
	    tcRefreshLocationInTitle(GetLocation);
	    break;
	case 3:		/* load */
	    tcLoadTheClou();
	    ShowMenuBackground();
	    break;
	default:
	    break;
	}

	RemoveList(menu);

	break;
    case Internal_Error:
	PrintStatus("Gravierender Fehler !");
	inpWaitFor(INP_LBUTTONP);
	ShowMenuBackground();
	break;
    case No_Mem:
	PrintStatus("Speichermangel !! - No Memory !!");
	inpWaitFor(INP_LBUTTONP);
	ShowMenuBackground();
	break;
    case Disk_Defect:
	PrintStatus("Disk Defekt !");
	inpWaitFor(INP_LBUTTONP);
	ShowMenuBackground();
	break;
    }

    inpTurnESC(1);

    return (answer);
}
Пример #14
0
NxActor* CreateCar(const NxVec3& pos)
{
	// Create body
	NxBodyDesc bodyDesc;
	NxBoxShapeDesc boxDesc;
	NxCapsuleShapeDesc capsuleDesc[4];
	NxActorDesc actorDesc;

	bodyDesc.mass = carMass;

	const NxReal height = 0.3;
	const NxReal width = 2;
	const NxReal length = 4;

	//boxDesc.dimensions.set(length*0.65, height*0.85, width*0.65);
	//actorDesc.shapes.pushBack(&boxDesc);

	{
		sObject* pObject = dbGetObject ( 5 );
	
		float fXPos	 = pObject->position.vecPosition.x;
		float fYPos	 = pObject->position.vecPosition.y;
		float fZPos	 = pObject->position.vecPosition.z;
		float fXSize = ( pObject->collision.vecMax.x - pObject->collision.vecMin.x ) * pObject->position.vecScale.x;
		float fYSize = ( pObject->collision.vecMax.y - pObject->collision.vecMin.y ) * pObject->position.vecScale.y;
		float fZSize = ( pObject->collision.vecMax.z - pObject->collision.vecMin.z ) * pObject->position.vecScale.z;

		boxDesc.dimensions.set ( fXSize / 2, fYSize / 2, fZSize / 2 );
		boxDesc.localPose.t = NxVec3 ( pObject->collision.vecCentre.x, pObject->collision.vecCentre.y, pObject->collision.vecCentre.z  );
		//boxDesc.localPose.
		actorDesc.shapes.pushBack ( &boxDesc );
	}

	capsuleDesc[0].radius = 0.1;
	capsuleDesc[0].height = 1;
	capsuleDesc[0].flags = NX_SWEPT_SHAPE;
	capsuleDesc[0].localPose.M.setColumn(1, NxVec3(0,-1, 0));
	capsuleDesc[0].localPose.M.setColumn(2, NxVec3(0, 0,-1));	//rotate 180 degrees around x axis to cast downward!
	capsuleDesc[0].localPose.t.set(length*0.5, -height, width*0.5);
	capsuleDesc[0].materialIndex = raycastWheelMaterialIndex;
	capsuleDesc[0].userData = &(wheelUserDatas[0]);
	actorDesc.shapes.pushBack(&capsuleDesc[0]);
	wheelUserDatas[0].frontWheel = true;

	capsuleDesc[1].radius = capsuleDesc[0].radius;
	capsuleDesc[1].height = capsuleDesc[0].height;
	capsuleDesc[1].flags = capsuleDesc[0].flags;
	capsuleDesc[1].localPose.M = capsuleDesc[0].localPose.M;	
	capsuleDesc[1].localPose.t.set(length*0.5, -height, -width*0.5);
	capsuleDesc[1].materialIndex = raycastWheelMaterialIndex;
	capsuleDesc[1].userData = &(wheelUserDatas[1]);
	actorDesc.shapes.pushBack(&capsuleDesc[1]);
	wheelUserDatas[1].frontWheel = true;

	capsuleDesc[2].radius = capsuleDesc[0].radius;
	capsuleDesc[2].height = capsuleDesc[0].height;
	capsuleDesc[2].flags = capsuleDesc[0].flags;
	capsuleDesc[2].localPose.M = capsuleDesc[0].localPose.M;
	capsuleDesc[2].localPose.t.set(-length*0.5, -height, -width*0.5);
	capsuleDesc[2].materialIndex = raycastWheelMaterialIndex;
	capsuleDesc[2].userData = &(wheelUserDatas[2]);
	actorDesc.shapes.pushBack(&capsuleDesc[2]);
	wheelUserDatas[2].frontWheel = false;

	capsuleDesc[3].radius = capsuleDesc[0].radius;
	capsuleDesc[3].height = capsuleDesc[0].height;
	capsuleDesc[3].flags = capsuleDesc[0].flags;
	capsuleDesc[3].localPose.M = capsuleDesc[0].localPose.M;
	capsuleDesc[3].localPose.t.set(-length*0.5, -height, width*0.5);
	capsuleDesc[3].materialIndex = raycastWheelMaterialIndex;
	capsuleDesc[3].userData = &(wheelUserDatas[3]);
	actorDesc.shapes.pushBack(&capsuleDesc[3]);
	wheelUserDatas[3].frontWheel = false;

	actorDesc.body			= &bodyDesc;
	actorDesc.globalPose.t  = pos;
	NxActor* a = gScene->createActor(actorDesc);

	//a->userData = &carData;		//so we can recoginze it in the contact stream

sPhysObject* pPhys = new sPhysObject;
pPhys->iID = 5;
a->userData = (void*)pPhys;

	//actorDesc.globalPose.t = NxVec3 ( fXPos, fYPos, fZPos );
NxMat33 mat;
mat.rotY ( D3DXToRadian ( 90 ) );
a->setGlobalOrientation ( mat );

	a->wakeUp(1e10);			//don't go to sleep.

	return a;
}
Пример #15
0
void TickCar ( void )
{
	g_iValue = 10;

	NxReal steeringAngle = gSteeringValue * gMaxSteeringAngle;

	NxArray<CarWheelContact>::iterator i = wheelContactPoints.begin();
	while(i != wheelContactPoints.end())
	{
		CarWheelContact& cwc = *i;

		WheelShapeUserData* wheelData = (WheelShapeUserData *)(cwc.wheel->userData);

		/*
		struct CarWheelContact
		{
			NxActor* car;
			NxShape* wheel;
			NxVec3 contactPoint;
			NxVec3 contactNormalForce;
			NxVec3 contactFrictionForce;
		};
		*/

		{
			NxMat34 pose   = cwc.wheel->getGlobalPose ( );
			NxMat33 orient = pose.M;
			NxVec3  pos    = pose.t;

			float glmat[16];
			orient.getColumnMajorStride4(&(glmat[0]));
			pos.get(&(glmat[12]));
			glmat[3] = glmat[7] = glmat[11] = 0.0f;
			glmat[15] = 1.0f;

			SetWorldMatrix ( g_iValue, ( D3DXMATRIX* ) &glmat );
			sObject* pObject = dbGetObject ( g_iValue );
			pObject->position.vecPosition = D3DXVECTOR3 ( glmat [ 12 ], glmat [ 13 ], glmat [ 14 ] );

			//dbPositionObject ( g_iValue, glmat [ 12 ], glmat [ 13 ], glmat [ 14 ] );

			g_iValue++;
		}

		//apply to powered wheels only.
		if (wheelData->frontWheel)
	    {
			//steering:
			NxMat33 wheelOrientation = cwc.wheel->getLocalOrientation();
			wheelOrientation.setColumn(0,  NxVec3(NxMath::cos(steeringAngle), 0,  NxMath::sin(steeringAngle) ));
			wheelOrientation.setColumn(2,  NxVec3(NxMath::sin(steeringAngle), 0, -NxMath::cos(steeringAngle) ));
			cwc.wheel->setLocalOrientation(wheelOrientation);

			if (frontWheelIsPowered)
			{
				//get the world space orientation:
				wheelOrientation = cwc.wheel->getGlobalOrientation();
				NxVec3 steeringDirection;
				wheelOrientation.getColumn(0, steeringDirection);

				//the power direction of the front wheel is the wheel's axis as it is steered.
				if (gMotorForce)
				{
					cwc.car->addForceAtPos(steeringDirection * gMotorForce,cwc.contactPoint);
				}
			}
		}
		if (!wheelData->frontWheel && rearWheelIsPowered)
		{
			//get the orientation of this car:
			NxMat33 m = cwc.car->getGlobalOrientation();
			NxVec3 carForwardAxis;
			m.getColumn(0, carForwardAxis);
			//the power direction of the rear wheel is always the car's length axis.
			cwc.car->addForceAtPos(carForwardAxis * gMotorForce,cwc.contactPoint);
		}
		i++;
	}

	wheelContactPoints.clear();
}