mirror of
https://gitlab.com/drummyfish/anarch.git
synced 2024-11-24 18:02:22 -05:00
Add shearing setting
This commit is contained in:
parent
bab22512ec
commit
462b5e4524
195
main.c
195
main.c
@ -248,7 +248,8 @@ typedef struct
|
|||||||
#define SFG_MENU_ITEM_PLAY 2
|
#define SFG_MENU_ITEM_PLAY 2
|
||||||
#define SFG_MENU_ITEM_LOAD 3
|
#define SFG_MENU_ITEM_LOAD 3
|
||||||
#define SFG_MENU_ITEM_SOUND 4
|
#define SFG_MENU_ITEM_SOUND 4
|
||||||
#define SFG_MENU_ITEM_EXIT 5
|
#define SFG_MENU_ITEM_SHEAR 5
|
||||||
|
#define SFG_MENU_ITEM_EXIT 6
|
||||||
|
|
||||||
#define SFG_MENU_ITEM_NONE 255
|
#define SFG_MENU_ITEM_NONE 255
|
||||||
|
|
||||||
@ -295,8 +296,16 @@ struct
|
|||||||
uint8_t selectedLevel; ///< Level to play selected in the main menu.
|
uint8_t selectedLevel; ///< Level to play selected in the main menu.
|
||||||
uint8_t antiSpam; ///< Prevents log message spamming.
|
uint8_t antiSpam; ///< Prevents log message spamming.
|
||||||
|
|
||||||
uint8_t soundSettings; /**< Sound settings: LSB says whether SFX is on,
|
uint8_t settings; /**< Dynamic game settings (can be changed at runtime),
|
||||||
second LSB says whether music is on. */
|
bit meaning:
|
||||||
|
|
||||||
|
MSB -------- LSB
|
||||||
|
||||
|
||||||
|
|||\_ sound (SFX)
|
||||||
|
||\__ music
|
||||||
|
|\___ shearing
|
||||||
|
\____ freelook (shearing not sliding back) */
|
||||||
|
|
||||||
uint8_t blink; ///< Says whether blinkg is currently on or off.
|
uint8_t blink; ///< Says whether blinkg is currently on or off.
|
||||||
} SFG_game;
|
} SFG_game;
|
||||||
|
|
||||||
@ -324,9 +333,6 @@ struct
|
|||||||
|
|
||||||
uint8_t ammo[SFG_AMMO_TOTAL];
|
uint8_t ammo[SFG_AMMO_TOTAL];
|
||||||
|
|
||||||
uint8_t freeLook; /**< If on, the vertical looking (shear) does
|
|
||||||
not automatically shear back. This is mainly
|
|
||||||
for mouse control. */
|
|
||||||
uint8_t cards; /**< Lowest 3 bits say which access cards have
|
uint8_t cards; /**< Lowest 3 bits say which access cards have
|
||||||
been taken., the next 3 bits say which cards
|
been taken., the next 3 bits say which cards
|
||||||
should be blinking in the HUD. */
|
should be blinking in the HUD. */
|
||||||
@ -460,7 +466,7 @@ uint8_t SFG_random()
|
|||||||
|
|
||||||
void SFG_playGameSound(uint8_t soundIndex, uint8_t volume)
|
void SFG_playGameSound(uint8_t soundIndex, uint8_t volume)
|
||||||
{
|
{
|
||||||
if (!(SFG_game.soundSettings & 0x01))
|
if (!(SFG_game.settings & 0x01))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
uint8_t mask = 0x01 << soundIndex;
|
uint8_t mask = 0x01 << soundIndex;
|
||||||
@ -1458,7 +1464,7 @@ void SFG_init()
|
|||||||
|
|
||||||
SFG_game.antiSpam = 0;
|
SFG_game.antiSpam = 0;
|
||||||
|
|
||||||
SFG_game.soundSettings = 0xff;
|
SFG_game.settings = 0xff;
|
||||||
SFG_enableMusic(1);
|
SFG_enableMusic(1);
|
||||||
|
|
||||||
SFG_LOG("computing average texture colors")
|
SFG_LOG("computing average texture colors")
|
||||||
@ -1513,7 +1519,6 @@ void SFG_init()
|
|||||||
SFG_game.lastFrameTimeMs = SFG_getTimeMs();
|
SFG_game.lastFrameTimeMs = SFG_getTimeMs();
|
||||||
SFG_game.selectedMenuItem = 0;
|
SFG_game.selectedMenuItem = 0;
|
||||||
SFG_game.selectedLevel = 0;
|
SFG_game.selectedLevel = 0;
|
||||||
SFG_player.freeLook = 0;
|
|
||||||
|
|
||||||
#if SFG_START_LEVEL == 0
|
#if SFG_START_LEVEL == 0
|
||||||
SFG_setGameState(SFG_GAME_STATE_MENU);
|
SFG_setGameState(SFG_GAME_STATE_MENU);
|
||||||
@ -2624,7 +2629,8 @@ void SFG_gameStepPlaying()
|
|||||||
int8_t shearing = 0;
|
int8_t shearing = 0;
|
||||||
|
|
||||||
if (SFG_keyJustPressed(SFG_KEY_TOGGLE_FREELOOK))
|
if (SFG_keyJustPressed(SFG_KEY_TOGGLE_FREELOOK))
|
||||||
SFG_player.freeLook = !SFG_player.freeLook;
|
SFG_game.settings =
|
||||||
|
(~SFG_game.settings & 0x08) | (SFG_game.settings & ~0x08);
|
||||||
|
|
||||||
#if SFG_PREVIEW_MODE == 0
|
#if SFG_PREVIEW_MODE == 0
|
||||||
if (
|
if (
|
||||||
@ -2760,89 +2766,61 @@ void SFG_gameStepPlaying()
|
|||||||
else if (SFG_keyJustPressed(SFG_KEY_PREVIOUS_WEAPON))
|
else if (SFG_keyJustPressed(SFG_KEY_PREVIOUS_WEAPON))
|
||||||
SFG_playerRotateWeapon(0);
|
SFG_playerRotateWeapon(0);
|
||||||
|
|
||||||
|
uint8_t shearingOn = SFG_game.settings & 0x04;
|
||||||
|
|
||||||
if (SFG_keyIsDown(SFG_KEY_A))
|
if (SFG_keyIsDown(SFG_KEY_A))
|
||||||
{
|
{
|
||||||
if (SFG_keyIsDown(SFG_KEY_UP))
|
if (shearingOn) // A + U/D: shearing (if on)
|
||||||
{
|
{
|
||||||
SFG_player.camera.shear =
|
if (SFG_keyIsDown(SFG_KEY_UP))
|
||||||
RCL_min(SFG_CAMERA_MAX_SHEAR_PIXELS,
|
{
|
||||||
SFG_player.camera.shear + SFG_CAMERA_SHEAR_STEP_PER_FRAME);
|
SFG_player.camera.shear =
|
||||||
|
RCL_min(SFG_CAMERA_MAX_SHEAR_PIXELS,
|
||||||
|
SFG_player.camera.shear + SFG_CAMERA_SHEAR_STEP_PER_FRAME);
|
||||||
|
|
||||||
shearing = 1;
|
shearing = 1;
|
||||||
}
|
}
|
||||||
else if (SFG_keyIsDown(SFG_KEY_DOWN))
|
else if (SFG_keyIsDown(SFG_KEY_DOWN))
|
||||||
{
|
{
|
||||||
SFG_player.camera.shear =
|
SFG_player.camera.shear =
|
||||||
RCL_max(-1 * SFG_CAMERA_MAX_SHEAR_PIXELS,
|
RCL_max(-1 * SFG_CAMERA_MAX_SHEAR_PIXELS,
|
||||||
SFG_player.camera.shear - SFG_CAMERA_SHEAR_STEP_PER_FRAME);
|
SFG_player.camera.shear - SFG_CAMERA_SHEAR_STEP_PER_FRAME);
|
||||||
|
|
||||||
shearing = 1;
|
shearing = 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!SFG_keyIsDown(SFG_KEY_C))
|
if (!SFG_keyIsDown(SFG_KEY_C))
|
||||||
{
|
{ // A + L/R: strafing
|
||||||
if (SFG_keyIsDown(SFG_KEY_LEFT))
|
if (SFG_keyIsDown(SFG_KEY_LEFT))
|
||||||
strafe = -1;
|
strafe = -1;
|
||||||
else if (SFG_keyIsDown(SFG_KEY_RIGHT))
|
else if (SFG_keyIsDown(SFG_KEY_RIGHT))
|
||||||
strafe = 1;
|
strafe = 1;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
if (SFG_keyJustPressed(SFG_KEY_LEFT) || SFG_keyJustPressed(SFG_KEY_A))
|
|
||||||
SFG_playerRotateWeapon(0);
|
|
||||||
else if (SFG_keyJustPressed(SFG_KEY_RIGHT) ||
|
|
||||||
SFG_keyJustPressed(SFG_KEY_B))
|
|
||||||
SFG_playerRotateWeapon(1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
if (SFG_keyIsDown(SFG_KEY_C)) // C + AL/BR: weapon switching
|
||||||
{
|
{
|
||||||
if (!SFG_keyIsDown(SFG_KEY_C))
|
if (SFG_keyJustPressed(SFG_KEY_LEFT) || SFG_keyJustPressed(SFG_KEY_A))
|
||||||
|
SFG_playerRotateWeapon(0);
|
||||||
|
else if (SFG_keyJustPressed(SFG_KEY_RIGHT) || SFG_keyJustPressed(SFG_KEY_B))
|
||||||
|
SFG_playerRotateWeapon(1);
|
||||||
|
}
|
||||||
|
else if (!SFG_keyIsDown(SFG_KEY_A)) // L/R: turning
|
||||||
|
{
|
||||||
|
if (SFG_keyIsDown(SFG_KEY_LEFT))
|
||||||
{
|
{
|
||||||
if (SFG_keyIsDown(SFG_KEY_LEFT))
|
SFG_player.camera.direction -= SFG_PLAYER_TURN_UNITS_PER_FRAME;
|
||||||
{
|
|
||||||
SFG_player.camera.direction -= SFG_PLAYER_TURN_UNITS_PER_FRAME;
|
|
||||||
recomputeDirection = 1;
|
|
||||||
}
|
|
||||||
else if (SFG_keyIsDown(SFG_KEY_RIGHT))
|
|
||||||
{
|
|
||||||
SFG_player.camera.direction += SFG_PLAYER_TURN_UNITS_PER_FRAME;
|
|
||||||
recomputeDirection = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (SFG_keyJustPressed(SFG_KEY_LEFT) ||
|
|
||||||
SFG_keyJustPressed(SFG_KEY_A))
|
|
||||||
SFG_playerRotateWeapon(0);
|
|
||||||
else if (SFG_keyJustPressed(SFG_KEY_RIGHT) ||
|
|
||||||
SFG_keyJustPressed(SFG_KEY_B))
|
|
||||||
SFG_playerRotateWeapon(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
int16_t mouseX, mouseY;
|
|
||||||
|
|
||||||
SFG_getMouseOffset(&mouseX,&mouseY);
|
|
||||||
|
|
||||||
if (mouseX != 0 || mouseY != 0)
|
|
||||||
{
|
|
||||||
SFG_player.camera.direction +=
|
|
||||||
(mouseX * SFG_MOUSE_SENSITIVITY_HORIZONTAL) / 128;
|
|
||||||
|
|
||||||
if (SFG_player.freeLook)
|
|
||||||
SFG_player.camera.shear =
|
|
||||||
RCL_max(RCL_min(
|
|
||||||
SFG_player.camera.shear - (mouseY * SFG_MOUSE_SENSITIVITY_VERTICAL)
|
|
||||||
/ 128,
|
|
||||||
SFG_CAMERA_MAX_SHEAR_PIXELS),
|
|
||||||
-1 * SFG_CAMERA_MAX_SHEAR_PIXELS);
|
|
||||||
|
|
||||||
recomputeDirection = 1;
|
recomputeDirection = 1;
|
||||||
}
|
}
|
||||||
|
else if (SFG_keyIsDown(SFG_KEY_RIGHT))
|
||||||
|
{
|
||||||
|
SFG_player.camera.direction += SFG_PLAYER_TURN_UNITS_PER_FRAME;
|
||||||
|
recomputeDirection = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (recomputeDirection)
|
if (!SFG_keyIsDown(SFG_KEY_A) || !shearingOn) // U/D: movement
|
||||||
SFG_recomputePLayerDirection();
|
|
||||||
|
|
||||||
if (SFG_keyIsDown(SFG_KEY_UP))
|
if (SFG_keyIsDown(SFG_KEY_UP))
|
||||||
{
|
{
|
||||||
moveOffset.x += SFG_player.direction.x;
|
moveOffset.x += SFG_player.direction.x;
|
||||||
@ -2859,8 +2837,30 @@ void SFG_gameStepPlaying()
|
|||||||
bobbing = 1;
|
bobbing = 1;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int16_t mouseX, mouseY;
|
||||||
|
|
||||||
|
SFG_getMouseOffset(&mouseX,&mouseY);
|
||||||
|
|
||||||
|
if (mouseX != 0) // mouse turning
|
||||||
|
{
|
||||||
|
SFG_player.camera.direction +=
|
||||||
|
(mouseX * SFG_MOUSE_SENSITIVITY_HORIZONTAL) / 128;
|
||||||
|
|
||||||
|
recomputeDirection = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((mouseY != 0) && shearingOn) // mouse shearing
|
||||||
|
SFG_player.camera.shear =
|
||||||
|
RCL_max(RCL_min(
|
||||||
|
SFG_player.camera.shear -
|
||||||
|
(mouseY * SFG_MOUSE_SENSITIVITY_VERTICAL) / 128,
|
||||||
|
SFG_CAMERA_MAX_SHEAR_PIXELS),
|
||||||
|
-1 * SFG_CAMERA_MAX_SHEAR_PIXELS);
|
||||||
|
|
||||||
|
if (recomputeDirection)
|
||||||
|
SFG_recomputePLayerDirection();
|
||||||
|
|
||||||
if (SFG_keyIsDown(SFG_KEY_STRAFE_LEFT))
|
if (SFG_keyIsDown(SFG_KEY_STRAFE_LEFT))
|
||||||
strafe = -1;
|
strafe = -1;
|
||||||
else if (SFG_keyIsDown(SFG_KEY_STRAFE_RIGHT))
|
else if (SFG_keyIsDown(SFG_KEY_STRAFE_RIGHT))
|
||||||
@ -2892,7 +2892,7 @@ void SFG_gameStepPlaying()
|
|||||||
(SFG_player.verticalSpeed - SFG_GRAVITY_SPEED_INCREASE_PER_FRAME);
|
(SFG_player.verticalSpeed - SFG_GRAVITY_SPEED_INCREASE_PER_FRAME);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (!shearing && SFG_player.camera.shear != 0 && !SFG_player.freeLook)
|
if (!shearing && SFG_player.camera.shear != 0 && !(SFG_game.settings & 0x08))
|
||||||
{
|
{
|
||||||
// gradually shear back to zero
|
// gradually shear back to zero
|
||||||
|
|
||||||
@ -3228,20 +3228,30 @@ void SFG_gameStepMenu()
|
|||||||
case SFG_MENU_ITEM_SOUND:
|
case SFG_MENU_ITEM_SOUND:
|
||||||
SFG_LOG("sound changed");
|
SFG_LOG("sound changed");
|
||||||
|
|
||||||
SFG_game.soundSettings++;
|
SFG_game.settings =
|
||||||
|
(SFG_game.settings & ~0x03) | ((SFG_game.settings + 1) & 0x03);
|
||||||
|
|
||||||
SFG_playGameSound(3,64);
|
SFG_playGameSound(3,64);
|
||||||
|
|
||||||
if ((SFG_game.soundSettings & 0x02) !=
|
if ((SFG_game.settings & 0x02) !=
|
||||||
((SFG_game.soundSettings - 1) & 0x02))
|
((SFG_game.settings - 1) & 0x02))
|
||||||
{
|
SFG_enableMusic(SFG_game.settings & 0x02);
|
||||||
if (SFG_game.soundSettings & 0x02)
|
|
||||||
SFG_enableMusic(1);
|
|
||||||
else
|
|
||||||
SFG_enableMusic(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case SFG_MENU_ITEM_SHEAR:
|
||||||
|
{
|
||||||
|
uint8_t current = (SFG_game.settings >> 2) & 0x03;
|
||||||
|
|
||||||
|
current++;
|
||||||
|
|
||||||
|
if (current == 2) // option that doesn't make sense, skip
|
||||||
|
current++;
|
||||||
|
|
||||||
|
SFG_game.settings =
|
||||||
|
(SFG_game.settings & ~0x0c) | ((current & 0x03) << 2);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -3739,7 +3749,8 @@ void SFG_drawMenu()
|
|||||||
|
|
||||||
SFG_drawText(text,drawX,y,SFG_FONT_SIZE_MEDIUM,textColor,0,0);
|
SFG_drawText(text,drawX,y,SFG_FONT_SIZE_MEDIUM,textColor,0,0);
|
||||||
|
|
||||||
if ((item == SFG_MENU_ITEM_PLAY || item == SFG_MENU_ITEM_SOUND) &&
|
if ((item == SFG_MENU_ITEM_PLAY || item == SFG_MENU_ITEM_SOUND
|
||||||
|
|| item == SFG_MENU_ITEM_SHEAR) &&
|
||||||
((i != SFG_game.selectedMenuItem) || SFG_game.blink))
|
((i != SFG_game.selectedMenuItem) || SFG_game.blink))
|
||||||
{
|
{
|
||||||
uint32_t x =
|
uint32_t x =
|
||||||
@ -3748,13 +3759,19 @@ void SFG_drawMenu()
|
|||||||
uint8_t c = 93;
|
uint8_t c = 93;
|
||||||
|
|
||||||
if (item == SFG_MENU_ITEM_PLAY)
|
if (item == SFG_MENU_ITEM_PLAY)
|
||||||
SFG_drawNumber((SFG_game.selectedLevel + 1),x,y,SFG_FONT_SIZE_MEDIUM,c);
|
SFG_drawNumber(SFG_game.selectedLevel + 1,x,y,SFG_FONT_SIZE_MEDIUM,c);
|
||||||
|
else if (item == SFG_MENU_ITEM_SHEAR)
|
||||||
|
{
|
||||||
|
uint8_t n = (SFG_game.settings >> 2) & 0x03;
|
||||||
|
|
||||||
|
SFG_drawNumber(n == 3 ? 2 : n,x,y,SFG_FONT_SIZE_MEDIUM,c);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
char settingText[3] = " ";
|
char settingText[3] = " ";
|
||||||
|
|
||||||
settingText[0] = (SFG_game.soundSettings & 0x01) ? 'S' : ' ';
|
settingText[0] = (SFG_game.settings & 0x01) ? 'S' : ' ';
|
||||||
settingText[1] = (SFG_game.soundSettings & 0x02) ? 'M' : ' ';
|
settingText[1] = (SFG_game.settings & 0x02) ? 'M' : ' ';
|
||||||
|
|
||||||
SFG_drawText(settingText,x,y,SFG_FONT_SIZE_MEDIUM,c,0,0);
|
SFG_drawText(settingText,x,y,SFG_FONT_SIZE_MEDIUM,c,0,0);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user