diff -uNr starfighter-orig/code/comms.cpp starfighter-1.1/code/comms.cpp --- starfighter-orig/code/comms.cpp 2005-02-09 18:25:54.000000000 +0100 +++ starfighter-1.1/code/comms.cpp 2005-02-09 19:45:06.000000000 +0100 @@ -131,7 +131,7 @@ void doComms(SDL_Surface *comms) { - if ((engine.keyState[SDLK_LCTRL]) || (engine.keyState[SDLK_RCTRL])) + if (IS_FIRE_PRESSED()) { if (engine.commsSection == 0) { @@ -140,7 +140,7 @@ if (Collision::collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, 170, 180 + (i * 60), 430, 50)) { createMissionDetailSurface(comms, i); - engine.keyState[SDLK_LCTRL] = engine.keyState[SDLK_RCTRL] = 0; + RESET_FIRE(); } } } @@ -149,7 +149,7 @@ if (Collision::collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, 170, 440, 160, 20)) { createCommsSurface(comms); - engine.keyState[SDLK_LCTRL] = engine.keyState[SDLK_RCTRL] = 0; + RESET_FIRE(); } } } diff -uNr starfighter-orig/code/events.cpp starfighter-1.1/code/events.cpp --- starfighter-orig/code/events.cpp 2005-02-09 18:25:54.000000000 +0100 +++ starfighter-1.1/code/events.cpp 2005-02-09 19:35:44.000000000 +0100 @@ -29,7 +29,7 @@ { getPlayerInput(); - if (engine.keyState[SDLK_ESCAPE]) + if (IS_QUIT_PRESSED()) { engine.paused = 0; engine.done = 1; @@ -37,10 +37,10 @@ return 1; } - if (engine.keyState[SDLK_p]) + if (IS_PAUSE_PRESSED()) { engine.paused = 0; - engine.keyState[SDLK_p] = 0; + RESET_PAUSE(); } return 0; diff -uNr starfighter-orig/code/game.cpp starfighter-1.1/code/game.cpp --- starfighter-orig/code/game.cpp 2005-02-09 18:25:54.000000000 +0100 +++ starfighter-1.1/code/game.cpp 2005-02-09 19:30:57.000000000 +0100 @@ -137,7 +137,7 @@ // Default to no aliens dead... engine.allAliensDead = 0; - engine.keyState[SDLK_LCTRL] = engine.keyState[SDLK_RCTRL] = engine.keyState[SDLK_SPACE] = 0; + RESET_INVOKE(); flushInput(); while (engine.done != 1) diff -uNr starfighter-orig/code/globals.cpp starfighter-1.1/code/globals.cpp --- starfighter-orig/code/globals.cpp 2005-02-09 18:25:54.000000000 +0100 +++ starfighter-1.1/code/globals.cpp 2005-02-10 00:49:57.000000000 +0100 @@ -48,9 +48,6 @@ engine.commsSection = 0; - for (int i = 0 ; i < 350 ; i++) - engine.keyState[i] = 0; - engine.eventTimer = 0; engine.counter2 = 0; engine.timeTaken = 0; diff -uNr starfighter-orig/code/init.cpp starfighter-1.1/code/init.cpp --- starfighter-orig/code/init.cpp 2005-02-09 18:25:54.000000000 +0100 +++ starfighter-1.1/code/init.cpp 2005-02-10 01:16:00.000000000 +0100 @@ -88,9 +88,9 @@ graphics.drawString("Project: Starfighter will now exit", -1, 450, FONT_WHITE); graphics.drawString("Press Space to continue", -1, 475, FONT_WHITE); - engine.keyState[SDLK_SPACE] = 0; + RESET_INVOKE(); - while (!engine.keyState[SDLK_SPACE]) + while (!IS_INVOKE_PRESSED()) { getPlayerInput(); graphics.updateScreen(); @@ -154,7 +154,7 @@ #endif /* Initialize the SDL library */ - if (SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO) < 0) { + if (SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO|SDL_INIT_JOYSTICK) < 0) { printf("Couldn't initialize SDL: %s\n", SDL_GetError()); exit(1); } @@ -204,7 +204,18 @@ } SDL_ShowCursor(SDL_DISABLE); - SDL_EventState(SDL_MOUSEMOTION, SDL_DISABLE); + + int num = SDL_NumJoysticks(); + if(num > 0) { + for(int i=0 ; i< num ; i++) { + printf("Opening Joystick %i: %s\n", i, SDL_JoystickOpen(i) ? "succeeded" : "failed"); + } + SDL_JoystickEventState(SDL_ENABLE); + } else { + printf("No Joysticks available.\n"); + } + + } /* @@ -214,7 +225,13 @@ */ void cleanUp() { + printf("Cleaning Up...\n"); + + /* Joysticks are freed implicitly, as we + * have not stored them anywhere. + */ + printf("Freeing Graphics\n"); graphics.freeGraphics(); printf("Freeing Background\n"); diff -uNr starfighter-orig/code/intermission.cpp starfighter-1.1/code/intermission.cpp --- starfighter-orig/code/intermission.cpp 2005-02-09 18:25:54.000000000 +0100 +++ starfighter-1.1/code/intermission.cpp 2005-02-09 19:47:48.000000000 +0100 @@ -283,7 +283,7 @@ if (Collision::collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, r.x, r.y, systemPlanet[planet].image->w, systemPlanet[planet].image->h)) { graphics.drawString(systemPlanet[planet].name, -1, 545, FONT_WHITE); - if ((engine.keyState[SDLK_LCTRL]) || (engine.keyState[SDLK_RCTRL])) + if (IS_FIRE_PRESSED()) { if (currentGame.system == 0) { @@ -299,7 +299,7 @@ } rtn = 1; - engine.keyState[SDLK_LCTRL] = engine.keyState[SDLK_RCTRL] = 0; + RESET_FIRE(); } } @@ -408,7 +408,7 @@ void showOptions(SDL_Surface *optionsSurface) { - if ((engine.keyState[SDLK_LCTRL]) || (engine.keyState[SDLK_RCTRL])) + if (IS_FIRE_PRESSED()) { if (Collision::collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, 417, 172, 45, 22)) currentGame.useSound = 1; @@ -469,7 +469,7 @@ if (Collision::collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, 417, 322, 100, 22)) { Math::wrapChar(&(++currentGame.autoSaveSlot), -1, 4); - engine.keyState[SDLK_LCTRL] = engine.keyState[SDLK_RCTRL] = 0; + RESET_FIRE(); } createOptions(optionsSurface); @@ -536,7 +536,7 @@ graphics.shape[FACE_KLINE] = loadImage("gfx/face_kline.png"); engine.done = 0; - engine.keyState[SDLK_LCTRL] = engine.keyState[SDLK_RCTRL] = 0; + RESET_FIRE(); engine.ssx = engine.ssy = 0; SDL_Rect r; @@ -614,7 +614,8 @@ unsigned long frameLimit = SDL_GetTicks(); flushInput(); - engine.keyState[SDLK_LCTRL] = engine.keyState[SDLK_RCTRL] = engine.keyState[SDLK_SPACE] = 0; + RESET_FIRE(); + RESET_SWITCH_PLANET_MOVEMENT(); engine.done = 0; while (!engine.done) @@ -698,10 +699,10 @@ break; case 1: - if (engine.keyState[SDLK_SPACE]) + if (IS_SWITCH_PLANET_MOVEMENT_PRESSED()) { movePlanets = !movePlanets; - engine.keyState[SDLK_SPACE] = 0; + RESET_SWITCH_PLANET_MOVEMENT(); } if (movePlanets) @@ -834,17 +835,18 @@ graphics.blit(iconInfo[11].image, (int)iconInfo[i].x, 545); } - if ((engine.keyState[SDLK_LCTRL]) || (engine.keyState[SDLK_RCTRL])) + if (IS_FIRE_PRESSED()) { redrawBackGround = 1; section = i; - engine.keyState[SDLK_LCTRL] = engine.keyState[SDLK_RCTRL] = 0; + RESET_FIRE(); } } } } - engine.keyState[SDLK_LCTRL] = engine.keyState[SDLK_RCTRL] = engine.keyState[SDLK_SPACE] = 0; + RESET_FIRE(); + RESET_SWITCH_PLANET_MOVEMENT(); doCursor(); // Limit us to 60 frame a second diff -uNr starfighter-orig/code/loadSave.cpp starfighter-1.1/code/loadSave.cpp --- starfighter-orig/code/loadSave.cpp 2005-02-09 18:25:54.000000000 +0100 +++ starfighter-1.1/code/loadSave.cpp 2005-02-09 19:31:36.000000000 +0100 @@ -147,7 +147,7 @@ // Recall to update the save slots... (lazy, yes) initSaveSlots(); - engine.keyState[SDLK_LCTRL] = engine.keyState[SDLK_RCTRL] = 0; + RESET_FIRE(); } void createSavesSurface(SDL_Surface *savesSurface, signed char clickedSlot) @@ -197,7 +197,7 @@ break; } - engine.keyState[SDLK_LCTRL] = engine.keyState[SDLK_RCTRL] = 0; + RESET_FIRE(); } /* @@ -215,7 +215,7 @@ int clickedSlot = -1; - if ((engine.keyState[SDLK_LCTRL]) || (engine.keyState[SDLK_RCTRL])) + if (IS_FIRE_PRESSED()) { for (int i = 0 ; i < 5 ; i++) { diff -uNr starfighter-orig/code/misc.cpp starfighter-1.1/code/misc.cpp --- starfighter-orig/code/misc.cpp 2005-02-09 18:25:54.000000000 +0100 +++ starfighter-1.1/code/misc.cpp 2005-02-10 00:49:32.000000000 +0100 @@ -372,7 +372,7 @@ if (player.shield < 1) return; - if ((!engine.keyState[SDLK_SPACE]) && (player.weaponType[1] == W_LASER) && (engine.eventTimer % 8 == 1)) + if ((!IS_CHARGE_PRESSED()) && (player.weaponType[1] == W_LASER) && (engine.eventTimer % 8 == 1)) Math::limitChar(&(--player.ammo[1]), 1, 255); if ((engine.eventTimer < 30) && (player.shield <= engine.lowShield)) diff -uNr starfighter-orig/code/missions.cpp starfighter-1.1/code/missions.cpp --- starfighter-orig/code/missions.cpp 2005-02-09 18:25:54.000000000 +0100 +++ starfighter-1.1/code/missions.cpp 2005-02-09 19:34:37.000000000 +0100 @@ -787,13 +787,13 @@ flushInput(); engine.done = 0; - engine.keyState[SDLK_LCTRL] = engine.keyState[SDLK_RCTRL] = 0; + RESET_FIRE(); while (true) { graphics.updateScreen(); getPlayerInput(); - if ((engine.keyState[SDLK_LCTRL]) || (engine.keyState[SDLK_RCTRL])) + if (IS_FIRE_PRESSED()) break; } @@ -905,13 +905,13 @@ flushInput(); engine.done = 0; - engine.keyState[SDLK_LCTRL] = engine.keyState[SDLK_RCTRL] = 0; + RESET_FIRE(); while (true) { graphics.updateScreen(); getPlayerInput(); - if ((engine.keyState[SDLK_LCTRL]) || (engine.keyState[SDLK_RCTRL])) + if (IS_FIRE_PRESSED()) break; } } diff -uNr starfighter-orig/code/player.cpp starfighter-1.1/code/player.cpp --- starfighter-orig/code/player.cpp 2005-02-09 18:25:54.000000000 +0100 +++ starfighter-1.1/code/player.cpp 2005-02-10 02:49:49.692906984 +0100 @@ -78,10 +78,10 @@ { if (player.shield > 0) { - if ((engine.keyState[SDLK_LCTRL]) || (engine.keyState[SDLK_RCTRL])) + if (IS_FIRE_PRESSED()) fireBullet(&player, 0); - if ((engine.keyState[SDLK_SPACE]) && (player.weaponType[1] != W_NONE)) + if (IS_CHARGE_PRESSED() && (player.weaponType[1] != W_NONE)) { if ((player.weaponType[1] != W_CHARGER) && (player.weaponType[1] != W_LASER) && (player.ammo[1] > 0)) { @@ -105,7 +105,7 @@ if (player.weaponType[1] == W_CHARGER) { - if (engine.keyState[SDLK_SPACE]) + if (IS_CHARGE_PRESSED()) { Math::limitChar(&(++player.ammo[1]), 0, 200); } @@ -117,7 +117,7 @@ } } - if ((engine.keyState[SDLK_LSHIFT]) || (engine.keyState[SDLK_RSHIFT])) + if (IS_CHANGE_PRESSED()) { if (player.ammo[0] < 1) { @@ -190,39 +190,39 @@ } } - engine.keyState[SDLK_LSHIFT] = engine.keyState[SDLK_RSHIFT] = 0; + RESET_CHANGE(); } Math::limitChar(&--player.reload[0], 0, 999); Math::limitChar(&--player.reload[1], 0, 999); - if (engine.keyState[SDLK_UP]) + if (IS_UP_PRESSED()) { player.y -= player.speed; engine.ssy += 0.1; } - if (engine.keyState[SDLK_DOWN]) + if (IS_DOWN_PRESSED()) { player.y += player.speed; engine.ssy -= 0.1; } - if (engine.keyState[SDLK_LEFT]) + if (IS_LEFT_PRESSED()) { player.x -= player.speed; engine.ssx += 0.1; player.face = 1; } - if (engine.keyState[SDLK_RIGHT]) + if (IS_RIGHT_PRESSED()) { player.x += player.speed; engine.ssx -= 0.1; player.face = 0; } - if (engine.keyState[SDLK_ESCAPE]) + if (IS_QUIT_PRESSED()) { if ((engine.done == 0) && (engine.gameSection == SECTION_GAME) && (currentMission.remainingObjectives1 == 0)) { @@ -232,20 +232,20 @@ } } - if (engine.keyState[SDLK_p]) + if (IS_PAUSE_PRESSED()) { engine.paused = 1; - engine.keyState[SDLK_p] = 0; + RESET_PAUSE(); } - if ((engine.keyState[SDLK_t]) && (currentGame.area != 10)) + if (IS_TIMER_PRESSED() && (currentGame.area != 10)) { if (engine.targetArrowTimer == -1) engine.targetArrowTimer = 0; else engine.targetArrowTimer = -1; - engine.keyState[SDLK_t] = 0; + RESET_TIMER(); } if ((engine.missionCompleteTimer == 0) && (engine.targetArrowTimer == -1)) @@ -304,7 +304,7 @@ playSound(SFX_EXPLOSION); } - engine.keyState[SDLK_UP] = engine.keyState[SDLK_DOWN] = engine.keyState[SDLK_LEFT] = engine.keyState[SDLK_RIGHT] = 0; + RESET_STEER(); if ((rand() % 3) == 0) addExplosion(player.x + Math::rrand(-10, 10), player.y + Math::rrand(-10, 10), E_BIG_EXPLOSION); if (player.shield == -99) @@ -334,44 +334,88 @@ void flushInput() { - for (int i = 0 ; i < 350 ; i++) - engine.keyState[i] = 0; - while (SDL_PollEvent(&engine.event)){} } void getPlayerInput() { - if (engine.gameSection == SECTION_INTERMISSION) - { - // Get the current mouse position - int x, y; - SDL_GetMouseState(&x, &y); - engine.cursor_x = x; - engine.cursor_y = y; - } - - if (SDL_PollEvent(&engine.event)) + while (SDL_PollEvent(&engine.event)) { switch (engine.event.type) { case SDL_QUIT: exit(0); break; - + case SDL_MOUSEMOTION: + /* Mouse motion reacts only between missions. */ + if(engine.gameSection == SECTION_INTERMISSION) { + engine.cursor_x += engine.event.motion.xrel; + engine.cursor_y += engine.event.motion.yrel; + } + break; + case SDL_MOUSEBUTTONUP: case SDL_MOUSEBUTTONDOWN: - if (engine.gameSection == SECTION_INTERMISSION) - { - if (engine.event.button.button == SDL_BUTTON_LEFT) engine.keyState[SDLK_LCTRL] = 1; - if (engine.event.button.button == SDL_BUTTON_RIGHT) engine.keyState[SDLK_SPACE] = 1; + // Treats mouse as input events. + switch(engine.event.button.button) { + case SDL_BUTTON_LEFT: + engine.playerControl.fire = engine.event.button.state;; + break; + case SDL_BUTTON_RIGHT: + engine.playerControl.charge = engine.event.button.state; + break; + case SDL_BUTTON_WHEELUP: + // Allows menu control. + engine.playerControl.up = engine.event.button.state; + break; + case SDL_BUTTON_WHEELDOWN: + // Allows menu control. + engine.playerControl.down = engine.event.button.state; + break; } break; - case SDL_KEYDOWN: if (engine.gameSection == SECTION_TITLE) addKeyEvent(SDL_GetKeyName(engine.event.key.keysym.sym)); - - engine.keyState[engine.event.key.keysym.sym] = 1; + + switch(engine.event.key.keysym.sym) { + case SDLK_LEFT: + engine.playerControl.left = 1; + break; + case SDLK_RIGHT: + engine.playerControl.right = 1; + break; + case SDLK_UP: + engine.playerControl.up = 1; + break; + case SDLK_DOWN: + engine.playerControl.down = 1; + break; + case SDLK_LSHIFT: + case SDLK_RSHIFT: + engine.playerControl.change = 1; + break; + case SDLK_LCTRL: + case SDLK_RCTRL: + engine.playerControl.fire = 1; + break; + case SDLK_SPACE: + engine.playerControl.charge = 1; + break; + case SDLK_ESCAPE: + engine.playerControl.quit = 1; + break; + case SDLK_t: + engine.playerControl.timer = 1; + break; + case SDLK_p: + engine.playerControl.pause = 1; + break; + case SDLK_RETURN: + engine.playerControl.invoke = 1; + break; + default: + break; + } if (engine.gameSection != SECTION_GAME) engine.paused = 0; @@ -379,20 +423,111 @@ break; case SDL_KEYUP: - if (engine.event.key.keysym.sym != SDLK_p) - engine.keyState[engine.event.key.keysym.sym] = 0; + switch(engine.event.key.keysym.sym) { + case SDLK_LEFT: + engine.playerControl.left = 0; + break; + case SDLK_RIGHT: + engine.playerControl.right = 0; + break; + case SDLK_UP: + engine.playerControl.up = 0; + break; + case SDLK_DOWN: + engine.playerControl.down = 0; + break; + case SDLK_LSHIFT: + case SDLK_RSHIFT: + engine.playerControl.change = 0; + break; + case SDLK_LCTRL: + case SDLK_RCTRL: + engine.playerControl.fire = 0; + break; + case SDLK_SPACE: + engine.playerControl.charge = 0; + break; + case SDLK_ESCAPE: + engine.playerControl.quit = 0; + break; + case SDLK_t: + engine.playerControl.timer = 0; + break; + case SDLK_p: + engine.playerControl.pause = 0; + break; + case SDLK_RETURN: + engine.playerControl.invoke = 0; + break; + default: + break; + } break; - - default: + case SDL_JOYAXISMOTION: + switch(engine.event.jaxis.axis) { + case 0: + if(engine.event.jaxis.value < -AXIS_THRESHOLD) { + engine.playerControl.left = 1; + } else if(engine.event.jaxis.value > AXIS_THRESHOLD) { + engine.playerControl.right = 1; + } else { + engine.playerControl.left = + engine.playerControl.right = 0; + } + break; + case 1: + if(engine.event.jaxis.value < -AXIS_THRESHOLD) { + engine.playerControl.up = 1; + } else if(engine.event.jaxis.value > AXIS_THRESHOLD) { + engine.playerControl.down = 1; + } else { + engine.playerControl.up = + engine.playerControl.down = 0; + } + break; + default: + break; + } break; + case SDL_JOYBUTTONUP: + case SDL_JOYBUTTONDOWN: + switch(engine.event.jbutton.button) { + case 0: + engine.playerControl.fire = engine.event.jbutton.state; + break; + case 1: + engine.playerControl.charge = engine.event.jbutton.state; + break; + case 2: + engine.playerControl.change = engine.event.jbutton.state; + break; + case 3: + engine.playerControl.pause = engine.event.jbutton.state; + break; + case 4: + engine.playerControl.quit = engine.event.jbutton.state; + break; + default: + engine.playerControl.invoke = engine.event.jbutton.state; + break; + } } + } + + /* Moves cursor around. */ + if(engine.gameSection == SECTION_INTERMISSION) { + engine.cursor_x += (engine.playerControl.right-engine.playerControl.left)*MOVE_MULT; + engine.cursor_y += (engine.playerControl.down-engine.playerControl.up)*MOVE_MULT; + } + } void leaveSector() { - engine.keyState[SDLK_UP] = engine.keyState[SDLK_DOWN] = engine.keyState[SDLK_LEFT] = engine.keyState[SDLK_RIGHT] = 0; - engine.keyState[SDLK_LCTRL] = engine.keyState[SDLK_RCTRL] = engine.keyState[SDLK_SPACE] = 0; + RESET_STEER(); + RESET_FIRE(); + RESET_CHARGE(); if (engine.done == 0) engine.done = 3; diff -uNr starfighter-orig/code/script.cpp starfighter-1.1/code/script.cpp --- starfighter-orig/code/script.cpp 2005-02-09 18:25:54.000000000 +0100 +++ starfighter-1.1/code/script.cpp 2005-02-09 19:30:31.000000000 +0100 @@ -202,7 +202,8 @@ graphics.clearScreen(graphics.black); SDL_Delay(1000); - engine.keyState[SDLK_LCTRL] = engine.keyState[SDLK_RCTRL] = engine.keyState[SDLK_SPACE] = 0; + RESET_INVOKE(); + RESET_QUIT(); engine.ssx = -0.5; engine.ssy = 0; @@ -301,7 +302,7 @@ while (SDL_GetTicks() < (frameLimit + 16)){} frameLimit = SDL_GetTicks(); - if (engine.keyState[SDLK_ESCAPE]) + if (IS_QUIT_PRESSED() || IS_INVOKE_PRESSED()) break; } diff -uNr starfighter-orig/code/shop.cpp starfighter-1.1/code/shop.cpp --- starfighter-orig/code/shop.cpp 2005-02-09 18:25:54.000000000 +0100 +++ starfighter-1.1/code/shop.cpp 2005-02-09 19:15:25.000000000 +0100 @@ -739,14 +739,14 @@ else if (currentGame.system == 2) icons = 15; - if ((engine.keyState[SDLK_LCTRL]) || (engine.keyState[SDLK_RCTRL])) + if (IS_FIRE_PRESSED()) { for (int i = 0 ; i < icons ; i++) { if (Collision::collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, shopItems[i].x, shopItems[i].y, 32, 25)) { shopSelectedItem = i; - engine.keyState[SDLK_LCTRL] = engine.keyState[SDLK_RCTRL] = 0; + RESET_FIRE(); drawShop(); } } @@ -756,14 +756,14 @@ if (Collision::collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, 60, 350, 24, 16)) { buy(shopSelectedItem); - engine.keyState[SDLK_LCTRL] = engine.keyState[SDLK_RCTRL] = 0; + RESET_FIRE(); drawShop(); } if (Collision::collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, 700, 350, 24, 16)) { sell(shopSelectedItem); - engine.keyState[SDLK_LCTRL] = engine.keyState[SDLK_RCTRL] = 0; + RESET_FIRE(); drawShop(); } } diff -uNr starfighter-orig/code/structs.h starfighter-1.1/code/structs.h --- starfighter-orig/code/structs.h 2005-02-09 18:25:54.000000000 +0100 +++ starfighter-1.1/code/structs.h 2005-02-10 02:47:37.791958976 +0100 @@ -204,6 +204,9 @@ char subject[100]; }; +typedef struct control { + char up, down, left, right, fire, charge, timer, pause, quit, invoke, change; +}; typedef struct globalEngineVariables { @@ -269,7 +272,8 @@ // This really only applies to Linux users. char userHomeDirectory[1024]; - char keyState[350]; + // game specific controls + control playerControl; signed char cheat; // overall cheat signed char cheatShield; @@ -279,6 +283,61 @@ signed char cheatCredits; }; +// For invoking menu entries. +#define IS_INVOKE_PRESSED() (engine.playerControl.fire ||\ + engine.playerControl.invoke ||\ + engine.playerControl.charge) + +#define RESET_INVOKE() (engine.playerControl.fire =\ + engine.playerControl.invoke =\ + engine.playerControl.charge = 0) + +// The fire buttons. +#define IS_FIRE_PRESSED() (engine.playerControl.fire) +#define RESET_FIRE() (engine.playerControl.fire = 0) + +#define IS_SWITCH_PLANET_MOVEMENT_PRESSED() (engine.playerControl.invoke ||\ + engine.playerControl.charge) + +#define RESET_SWITCH_PLANET_MOVEMENT() (engine.playerControl.invoke =\ + engine.playerControl.charge =0) + +#define RESET_QUIT() (engine.playerControl.quit =0) +#define IS_QUIT_PRESSED() (engine.playerControl.quit) + +#define RESET_UP() (engine.playerControl.up =0) +#define IS_UP_PRESSED() (engine.playerControl.up) + +#define RESET_DOWN() (engine.playerControl.down =0) +#define IS_DOWN_PRESSED() (engine.playerControl.down) + +#define RESET_LEFT() (engine.playerControl.left =0) +#define IS_LEFT_PRESSED() (engine.playerControl.left) + +#define RESET_RIGHT() (engine.playerControl.right =0) +#define IS_RIGHT_PRESSED() (engine.playerControl.right) + +// Conveniently resets all direction controls at once. +#define RESET_STEER() (engine.playerControl.up =\ + engine.playerControl.down =\ + engine.playerControl.left =\ + engine.playerControl.right = 0) + +#define RESET_PAUSE() (engine.playerControl.pause =0) +#define IS_PAUSE_PRESSED() (engine.playerControl.pause) + +#define RESET_CHANGE() (engine.playerControl.change = 0) +#define IS_CHANGE_PRESSED() (engine.playerControl.change) + +#define RESET_CHARGE() (engine.playerControl.charge = 0) +#define IS_CHARGE_PRESSED() (engine.playerControl.charge) + +#define RESET_TIMER() (engine.playerControl.timer =0) +#define IS_TIMER_PRESSED() (engine.playerControl.timer) + +#define AXIS_THRESHOLD 5000 +#define MOVE_MULT 10 + typedef struct event { int time; diff -uNr starfighter-orig/code/title.cpp starfighter-1.1/code/title.cpp --- starfighter-orig/code/title.cpp 2005-02-09 18:25:54.000000000 +0100 +++ starfighter-1.1/code/title.cpp 2005-02-09 19:26:17.000000000 +0100 @@ -238,7 +238,7 @@ engine.done = 0; flushInput(); - engine.keyState[SDLK_LCTRL] = engine.keyState[SDLK_RCTRL] = 0; + RESET_FIRE(); if ((currentGame.useMusic) && (engine.useAudio)) Mix_PlayMusic(engine.music, 1); @@ -308,18 +308,18 @@ if (redGlow <= 0) {redDir = 2; redGlow = 0;} if (redGlow >= 255) {redDir = -2; redGlow = 255;} - if (engine.keyState[SDLK_UP]) + if (IS_UP_PRESSED()) { - engine.keyState[SDLK_UP] = 0; + RESET_UP(); Math::wrapChar(&(--selectedOption), 1, listLength); if (menuType == 0) if ((selectedOption == 2) || (selectedOption == 3)) if (continueSaveSlot == 0) selectedOption = 1; } - if (engine.keyState[SDLK_DOWN]) + if (IS_DOWN_PRESSED()) { - engine.keyState[SDLK_DOWN] = 0; + RESET_DOWN(); Math::wrapChar(&(++selectedOption), 1, listLength); if (menuType == 0) if ((selectedOption == 2) || (selectedOption == 3)) @@ -351,7 +351,7 @@ engine.cheatCredits = 0; } - if ((engine.keyState[SDLK_LCTRL]) || (engine.keyState[SDLK_RCTRL]) || (engine.keyState[SDLK_SPACE])) + if (IS_INVOKE_PRESSED()) { if ((now - then <= 27500) && (!skip)) { @@ -450,7 +450,7 @@ break; } } - engine.keyState[SDLK_LCTRL] = engine.keyState[SDLK_RCTRL] = engine.keyState[SDLK_SPACE] = 0; + RESET_INVOKE(); } while (SDL_GetTicks() < (frameLimit + 16)){} @@ -462,7 +462,7 @@ SDL_FreeSurface(prlogo); SDL_FreeSurface(sflogo); - engine.keyState[SDLK_LCTRL] = engine.keyState[SDLK_RCTRL] = engine.keyState[SDLK_SPACE] = 0; + RESET_INVOKE(); resetLists(); @@ -532,7 +532,7 @@ unsigned long frameLimit = SDL_GetTicks(); flushInput(); - engine.keyState[SDLK_LCTRL] = engine.keyState[SDLK_RCTRL] = engine.keyState[SDLK_SPACE] = 0; + RESET_INVOKE(); while (true) { @@ -541,7 +541,7 @@ getPlayerInput(); - if ((engine.keyState[SDLK_LCTRL]) || (engine.keyState[SDLK_RCTRL]) || (engine.keyState[SDLK_SPACE])) + if (IS_INVOKE_PRESSED()) break; if (graphics.textShape[8].y > 450) @@ -572,7 +572,7 @@ graphics.freeGraphics(); SDL_FillRect(graphics.background, NULL, graphics.black); - engine.keyState[SDLK_LCTRL] = engine.keyState[SDLK_RCTRL] = engine.keyState[SDLK_SPACE] = 0; + RESET_INVOKE(); engine.gameSection = SECTION_INTERMISSION; loadMusic("music/Wybierak.mod"); @@ -597,13 +597,13 @@ graphics.updateScreen(); flushInput(); - engine.keyState[SDLK_LCTRL] = engine.keyState[SDLK_RCTRL] = engine.keyState[SDLK_SPACE] = 0; + RESET_INVOKE(); while (true) { getPlayerInput(); - if ((engine.keyState[SDLK_LCTRL]) || (engine.keyState[SDLK_RCTRL]) || (engine.keyState[SDLK_SPACE])) + if (IS_INVOKE_PRESSED()) break; graphics.updateScreen(); @@ -701,7 +701,7 @@ SDL_Rect r1 = {0, 80, 800, 20}; SDL_Rect r2 = {0, 500, 800, 20}; - engine.keyState[SDLK_ESCAPE] = 0; + RESET_QUIT(); flushInput(); while (true) @@ -710,7 +710,7 @@ graphics.unBuffer(); getPlayerInput(); - if (engine.keyState[SDLK_ESCAPE]) + if (IS_QUIT_PRESSED()) break; for (int i = 0 ; i < numberOfCredits ; i++) Dateien starfighter-orig/starfighter und starfighter-1.1/starfighter sind verschieden.