mirror of
https://gitlab.com/drummyfish/anarch.git
synced 2024-12-21 23:08:49 -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_LOAD 3
|
||||
#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
|
||||
|
||||
@ -295,8 +296,16 @@ struct
|
||||
uint8_t selectedLevel; ///< Level to play selected in the main menu.
|
||||
uint8_t antiSpam; ///< Prevents log message spamming.
|
||||
|
||||
uint8_t soundSettings; /**< Sound settings: LSB says whether SFX is on,
|
||||
second LSB says whether music is on. */
|
||||
uint8_t settings; /**< Dynamic game settings (can be changed at runtime),
|
||||
bit meaning:
|
||||
|
||||
MSB -------- LSB
|
||||
||||
|
||||
|||\_ sound (SFX)
|
||||
||\__ music
|
||||
|\___ shearing
|
||||
\____ freelook (shearing not sliding back) */
|
||||
|
||||
uint8_t blink; ///< Says whether blinkg is currently on or off.
|
||||
} SFG_game;
|
||||
|
||||
@ -324,9 +333,6 @@ struct
|
||||
|
||||
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
|
||||
been taken., the next 3 bits say which cards
|
||||
should be blinking in the HUD. */
|
||||
@ -460,7 +466,7 @@ uint8_t SFG_random()
|
||||
|
||||
void SFG_playGameSound(uint8_t soundIndex, uint8_t volume)
|
||||
{
|
||||
if (!(SFG_game.soundSettings & 0x01))
|
||||
if (!(SFG_game.settings & 0x01))
|
||||
return;
|
||||
|
||||
uint8_t mask = 0x01 << soundIndex;
|
||||
@ -1458,7 +1464,7 @@ void SFG_init()
|
||||
|
||||
SFG_game.antiSpam = 0;
|
||||
|
||||
SFG_game.soundSettings = 0xff;
|
||||
SFG_game.settings = 0xff;
|
||||
SFG_enableMusic(1);
|
||||
|
||||
SFG_LOG("computing average texture colors")
|
||||
@ -1513,7 +1519,6 @@ void SFG_init()
|
||||
SFG_game.lastFrameTimeMs = SFG_getTimeMs();
|
||||
SFG_game.selectedMenuItem = 0;
|
||||
SFG_game.selectedLevel = 0;
|
||||
SFG_player.freeLook = 0;
|
||||
|
||||
#if SFG_START_LEVEL == 0
|
||||
SFG_setGameState(SFG_GAME_STATE_MENU);
|
||||
@ -2624,7 +2629,8 @@ void SFG_gameStepPlaying()
|
||||
int8_t shearing = 0;
|
||||
|
||||
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 (
|
||||
@ -2760,89 +2766,61 @@ void SFG_gameStepPlaying()
|
||||
else if (SFG_keyJustPressed(SFG_KEY_PREVIOUS_WEAPON))
|
||||
SFG_playerRotateWeapon(0);
|
||||
|
||||
uint8_t shearingOn = SFG_game.settings & 0x04;
|
||||
|
||||
if (SFG_keyIsDown(SFG_KEY_A))
|
||||
{
|
||||
if (SFG_keyIsDown(SFG_KEY_UP))
|
||||
if (shearingOn) // A + U/D: shearing (if on)
|
||||
{
|
||||
SFG_player.camera.shear =
|
||||
RCL_min(SFG_CAMERA_MAX_SHEAR_PIXELS,
|
||||
SFG_player.camera.shear + SFG_CAMERA_SHEAR_STEP_PER_FRAME);
|
||||
if (SFG_keyIsDown(SFG_KEY_UP))
|
||||
{
|
||||
SFG_player.camera.shear =
|
||||
RCL_min(SFG_CAMERA_MAX_SHEAR_PIXELS,
|
||||
SFG_player.camera.shear + SFG_CAMERA_SHEAR_STEP_PER_FRAME);
|
||||
|
||||
shearing = 1;
|
||||
}
|
||||
else if (SFG_keyIsDown(SFG_KEY_DOWN))
|
||||
{
|
||||
SFG_player.camera.shear =
|
||||
RCL_max(-1 * SFG_CAMERA_MAX_SHEAR_PIXELS,
|
||||
SFG_player.camera.shear - SFG_CAMERA_SHEAR_STEP_PER_FRAME);
|
||||
shearing = 1;
|
||||
}
|
||||
else if (SFG_keyIsDown(SFG_KEY_DOWN))
|
||||
{
|
||||
SFG_player.camera.shear =
|
||||
RCL_max(-1 * SFG_CAMERA_MAX_SHEAR_PIXELS,
|
||||
SFG_player.camera.shear - SFG_CAMERA_SHEAR_STEP_PER_FRAME);
|
||||
|
||||
shearing = 1;
|
||||
shearing = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (!SFG_keyIsDown(SFG_KEY_C))
|
||||
{
|
||||
{ // A + L/R: strafing
|
||||
if (SFG_keyIsDown(SFG_KEY_LEFT))
|
||||
strafe = -1;
|
||||
else if (SFG_keyIsDown(SFG_KEY_RIGHT))
|
||||
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;
|
||||
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);
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
if (recomputeDirection)
|
||||
SFG_recomputePLayerDirection();
|
||||
|
||||
if (!SFG_keyIsDown(SFG_KEY_A) || !shearingOn) // U/D: movement
|
||||
if (SFG_keyIsDown(SFG_KEY_UP))
|
||||
{
|
||||
moveOffset.x += SFG_player.direction.x;
|
||||
@ -2859,8 +2837,30 @@ void SFG_gameStepPlaying()
|
||||
bobbing = 1;
|
||||
#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))
|
||||
strafe = -1;
|
||||
else if (SFG_keyIsDown(SFG_KEY_STRAFE_RIGHT))
|
||||
@ -2892,7 +2892,7 @@ void SFG_gameStepPlaying()
|
||||
(SFG_player.verticalSpeed - SFG_GRAVITY_SPEED_INCREASE_PER_FRAME);
|
||||
#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
|
||||
|
||||
@ -3228,20 +3228,30 @@ void SFG_gameStepMenu()
|
||||
case SFG_MENU_ITEM_SOUND:
|
||||
SFG_LOG("sound changed");
|
||||
|
||||
SFG_game.soundSettings++;
|
||||
SFG_game.settings =
|
||||
(SFG_game.settings & ~0x03) | ((SFG_game.settings + 1) & 0x03);
|
||||
|
||||
SFG_playGameSound(3,64);
|
||||
|
||||
if ((SFG_game.soundSettings & 0x02) !=
|
||||
((SFG_game.soundSettings - 1) & 0x02))
|
||||
{
|
||||
if (SFG_game.soundSettings & 0x02)
|
||||
SFG_enableMusic(1);
|
||||
else
|
||||
SFG_enableMusic(0);
|
||||
}
|
||||
|
||||
if ((SFG_game.settings & 0x02) !=
|
||||
((SFG_game.settings - 1) & 0x02))
|
||||
SFG_enableMusic(SFG_game.settings & 0x02);
|
||||
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:
|
||||
break;
|
||||
}
|
||||
@ -3739,7 +3749,8 @@ void SFG_drawMenu()
|
||||
|
||||
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))
|
||||
{
|
||||
uint32_t x =
|
||||
@ -3748,13 +3759,19 @@ void SFG_drawMenu()
|
||||
uint8_t c = 93;
|
||||
|
||||
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
|
||||
{
|
||||
char settingText[3] = " ";
|
||||
|
||||
settingText[0] = (SFG_game.soundSettings & 0x01) ? 'S' : ' ';
|
||||
settingText[1] = (SFG_game.soundSettings & 0x02) ? 'M' : ' ';
|
||||
settingText[0] = (SFG_game.settings & 0x01) ? 'S' : ' ';
|
||||
settingText[1] = (SFG_game.settings & 0x02) ? 'M' : ' ';
|
||||
|
||||
SFG_drawText(settingText,x,y,SFG_FONT_SIZE_MEDIUM,c,0,0);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user