Take cards

This commit is contained in:
Miloslav Číž 2020-02-08 20:53:10 +01:00
parent 6c57ef314a
commit b7ba33a77a
6 changed files with 65 additions and 14 deletions

View File

@ -20,6 +20,7 @@
- add jump pads? - add jump pads?
- add robot deactivator item? (encourages "stealth" gameplay) - add robot deactivator item? (encourages "stealth" gameplay)
- add "pletivo" transparent wall texture? - add "pletivo" transparent wall texture?
- add universal corpse sprite?
bugs: bugs:

BIN
assets/item_card.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 547 B

View File

@ -510,6 +510,26 @@ SFG_PROGRAM_MEMORY uint8_t SFG_itemSprites[][SFG_TEXTURE_STORE_SIZE] =
0,1,17,17,34,130,36,0,0,0,0,30,229,167,16,0,0,0,0,1,36,130,36,0,0,0,0,30,90,125, 0,1,17,17,34,130,36,0,0,0,0,30,229,167,16,0,0,0,0,1,36,130,36,0,0,0,0,30,90,125,
16,0,0,0,0,0,17,22,36,0,0,0,0,1,167,209,0,0,0,0,0,0,0,1,17,0,0,0,0,0,17,16,0,0, 16,0,0,0,0,0,17,22,36,0,0,0,0,1,167,209,0,0,0,0,0,0,0,1,17,0,0,0,0,0,17,16,0,0,
0,0,0,0,0,0,0 0,0,0,0,0,0,0
},
{ // 6, access card
175,0,21,45,44,23,46,2,19,34,69,22,68,60,131,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17,17,17,17,17,17,17,0,0,0,0,0,0,0,0,1,
68,17,24,102,101,86,97,0,0,0,0,0,0,0,0,1,68,17,24,102,85,86,101,16,0,0,0,0,0,0,
0,1,67,17,24,101,85,86,101,183,16,0,0,0,0,0,0,1,51,17,24,85,85,102,59,178,16,0,
0,0,0,0,0,1,51,17,24,85,86,232,219,34,240,0,0,0,0,0,0,1,51,17,24,85,86,131,130,
34,240,0,0,0,0,0,0,1,51,17,24,85,102,52,114,34,16,0,0,0,0,0,0,1,54,17,24,86,99,
56,66,34,16,0,0,0,0,0,0,1,102,17,24,86,51,141,114,34,16,0,0,0,0,0,0,1,101,17,24,
102,51,211,114,34,16,0,0,0,0,0,0,1,101,17,24,99,51,55,114,34,16,0,0,0,0,0,0,1,
85,17,24,51,51,119,226,34,16,0,0,0,0,0,0,1,85,17,24,51,52,71,34,34,16,0,0,0,0,0,
0,1,85,17,24,51,52,119,130,34,16,0,0,0,0,0,0,1,85,17,24,51,68,228,114,34,16,0,0,
0,0,0,0,1,85,17,24,52,68,66,34,34,16,0,0,0,0,0,0,1,86,17,25,52,68,66,34,34,16,0,
0,0,0,0,0,1,86,17,23,68,68,34,34,34,16,0,0,0,0,0,0,1,102,17,23,68,68,34,34,34,
16,0,0,0,0,0,0,1,99,17,23,68,153,153,114,34,16,0,0,0,0,0,0,1,99,17,23,68,154,
170,114,34,16,0,0,0,0,0,0,1,51,17,23,68,154,204,114,34,16,0,0,0,0,0,0,1,51,17,
23,68,154,204,114,34,16,0,0,0,0,0,0,1,51,17,23,68,151,119,114,34,16,0,0,0,0,0,0,
1,51,17,23,66,130,34,130,34,16,0,0,0,0,0,0,1,51,17,23,66,130,34,130,34,16,0,0,0,
0,0,0,0,17,17,17,17,17,17,17,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0
} }
}; };

View File

@ -93,6 +93,9 @@ typedef struct
#define SFG_LEVEL_ELEMENT_ROCKETS 0x04 #define SFG_LEVEL_ELEMENT_ROCKETS 0x04
#define SFG_LEVEL_ELEMENT_PLASMA 0x05 #define SFG_LEVEL_ELEMENT_PLASMA 0x05
#define SFG_LEVEL_ELEMENT_TREE 0x06 #define SFG_LEVEL_ELEMENT_TREE 0x06
#define SFG_LEVEL_ELEMENT_CARD0 0x07
#define SFG_LEVEL_ELEMENT_CARD1 0x08
#define SFG_LEVEL_ELEMENT_CARD2 0x09
/* /*
Monsters have lower 4 bits zero and are only distinguished by the 4 upper Monsters have lower 4 bits zero and are only distinguished by the 4 upper
@ -281,8 +284,8 @@ SFG_PROGRAM_MEMORY SFG_Level SFG_level0 =
{SFG_LEVEL_ELEMENT_PLASMA, {3, 57}}, {SFG_LEVEL_ELEMENT_PLASMA, {3, 58}}, {SFG_LEVEL_ELEMENT_PLASMA, {3, 57}}, {SFG_LEVEL_ELEMENT_PLASMA, {3, 58}},
{SFG_LEVEL_ELEMENT_TREE, {16, 44}}, {SFG_LEVEL_ELEMENT_TREE, {16, 45}}, {SFG_LEVEL_ELEMENT_TREE, {16, 44}}, {SFG_LEVEL_ELEMENT_TREE, {16, 45}},
{SFG_LEVEL_ELEMENT_TREE, {16, 46}}, {SFG_LEVEL_ELEMENT_NONE, {0, 0}}, {SFG_LEVEL_ELEMENT_TREE, {16, 46}}, {SFG_LEVEL_ELEMENT_NONE, {0, 0}},
{SFG_LEVEL_ELEMENT_NONE, {0, 0}}, {SFG_LEVEL_ELEMENT_NONE, {0, 0}}, {SFG_LEVEL_ELEMENT_CARD0, {13, 20}}, {SFG_LEVEL_ELEMENT_CARD1, {14, 20}},
{SFG_LEVEL_ELEMENT_NONE, {0, 0}}, {SFG_LEVEL_ELEMENT_NONE, {0, 0}}, {SFG_LEVEL_ELEMENT_CARD2, {13, 21}}, {SFG_LEVEL_ELEMENT_NONE, {0, 0}},
{SFG_LEVEL_ELEMENT_NONE, {0, 0}}, {SFG_LEVEL_ELEMENT_NONE, {0, 0}}, {SFG_LEVEL_ELEMENT_NONE, {0, 0}}, {SFG_LEVEL_ELEMENT_NONE, {0, 0}},
{SFG_LEVEL_ELEMENT_NONE, {0, 0}}, {SFG_LEVEL_ELEMENT_NONE, {0, 0}}, {SFG_LEVEL_ELEMENT_NONE, {0, 0}}, {SFG_LEVEL_ELEMENT_NONE, {0, 0}},
{SFG_LEVEL_ELEMENT_NONE, {0, 0}}, {SFG_LEVEL_ELEMENT_NONE, {0, 0}}, {SFG_LEVEL_ELEMENT_NONE, {0, 0}}, {SFG_LEVEL_ELEMENT_NONE, {0, 0}},

39
main.c
View File

@ -122,7 +122,7 @@ void SFG_init();
#define RCL_TEXTURE_VERTICAL_STRETCH 0 #define RCL_TEXTURE_VERTICAL_STRETCH 0
#define RCL_CAMERA_COLL_HEIGHT_BELOW 800 #define RCL_CAMERA_COLL_HEIGHT_BELOW 800
#define RCL_CAMERA_COLL_HEIGHT_ABOVE 150 #define RCL_CAMERA_COLL_HEIGHT_ABOVE 200
#include "raycastlib.h" #include "raycastlib.h"
@ -248,6 +248,8 @@ struct
uint8_t freeLook; /**< If on, the vertical looking (shear) does uint8_t freeLook; /**< If on, the vertical looking (shear) does
not automatically shear back. This is mainly not automatically shear back. This is mainly
for mouse control. */ for mouse control. */
uint8_t cards; /**< Lowest bits say which access cards have
been taken. */
} SFG_player; } SFG_player;
uint8_t SFG_explosionSoundPlayed; /**< Prevents playing too many explosion uint8_t SFG_explosionSoundPlayed; /**< Prevents playing too many explosion
@ -975,6 +977,8 @@ void SFG_initPlayer()
SFG_player.health = SFG_PLAYER_MAX_HEALTH; SFG_player.health = SFG_PLAYER_MAX_HEALTH;
SFG_player.cards = 0;
for (uint8_t i = 0; i < SFG_AMMO_TOTAL; ++i) for (uint8_t i = 0; i < SFG_AMMO_TOTAL; ++i)
SFG_player.ammo[i] = 0; SFG_player.ammo[i] = 0;
} }
@ -1782,6 +1786,12 @@ static inline uint8_t SFG_elementCollides(
<= SFG_ELEMENT_COLLISION_DISTANCE; <= SFG_ELEMENT_COLLISION_DISTANCE;
} }
uint8_t SFG_getLevelElementSpriteIndex(uint8_t elementType)
{
return ((elementType < SFG_LEVEL_ELEMENT_CARD0)
? elementType : SFG_LEVEL_ELEMENT_CARD0) - 1;
}
/** /**
Performs one game step (logic, physics), happening SFG_MS_PER_FRAME after Performs one game step (logic, physics), happening SFG_MS_PER_FRAME after
previous frame. previous frame.
@ -2207,6 +2217,12 @@ void SFG_gameStep()
SFG_player.ammo[SFG_AMMO_PLASMA] += SFG_AMMO_INCREASE_PLASMA; SFG_player.ammo[SFG_AMMO_PLASMA] += SFG_AMMO_INCREASE_PLASMA;
break; break;
case SFG_LEVEL_ELEMENT_CARD0:
case SFG_LEVEL_ELEMENT_CARD1:
case SFG_LEVEL_ELEMENT_CARD2:
SFG_player.cards |= 1 << (e->type - SFG_LEVEL_ELEMENT_CARD0);
break;
default: default:
eliminate = 0; eliminate = 0;
break; break;
@ -2449,6 +2465,7 @@ void SFG_gameStep()
SFG_currentLevel.checkedDoorIndex = 0; SFG_currentLevel.checkedDoorIndex = 0;
} }
// move door up/down:
for (uint32_t i = 0; i < SFG_currentLevel.doorRecordCount; ++i) for (uint32_t i = 0; i < SFG_currentLevel.doorRecordCount; ++i)
{ {
SFG_DoorRecord *door = &(SFG_currentLevel.doorRecords[i]); SFG_DoorRecord *door = &(SFG_currentLevel.doorRecords[i]);
@ -2948,7 +2965,8 @@ void SFG_draw()
if (p.depth > 0) if (p.depth > 0)
{ {
SFG_drawScaledSprite(SFG_itemSprites[e.type - 1], SFG_drawScaledSprite(
SFG_itemSprites[SFG_getLevelElementSpriteIndex(e.type)],
p.position.x * SFG_RAYCASTING_SUBSAMPLE,p.position.y, p.position.x * SFG_RAYCASTING_SUBSAMPLE,p.position.y,
RCL_perspectiveScale(SFG_SPRITE_SIZE(size),p.depth), RCL_perspectiveScale(SFG_SPRITE_SIZE(size),p.depth),
p.depth / (RCL_UNITS_PER_SQUARE * 2),p.depth - 1000); p.depth / (RCL_UNITS_PER_SQUARE * 2),p.depth - 1000);
@ -3024,11 +3042,13 @@ void SFG_draw()
color = 2; color = 2;
} }
#define TEXT_Y (SFG_GAME_RESOLUTION_Y - SFG_HUD_MARGIN - \
SFG_FONT_CHARACTER_SIZE * SFG_FONT_SIZE_MEDIUM)
SFG_drawNumber( // health SFG_drawNumber( // health
SFG_player.health, SFG_player.health,
SFG_HUD_MARGIN, SFG_HUD_MARGIN,
SFG_GAME_RESOLUTION_Y - SFG_HUD_MARGIN - TEXT_Y,
SFG_FONT_CHARACTER_SIZE * SFG_FONT_SIZE_MEDIUM,
SFG_FONT_SIZE_MEDIUM, SFG_FONT_SIZE_MEDIUM,
SFG_player.health > SFG_PLAYER_HEALTH_WARNING_LEVEL ? 4 : 175); SFG_player.health > SFG_PLAYER_HEALTH_WARNING_LEVEL ? 4 : 175);
@ -3036,11 +3056,18 @@ void SFG_draw()
SFG_player.ammo[SFG_weaponAmmo(SFG_player.weapon)], SFG_player.ammo[SFG_weaponAmmo(SFG_player.weapon)],
SFG_GAME_RESOLUTION_X - SFG_HUD_MARGIN - SFG_GAME_RESOLUTION_X - SFG_HUD_MARGIN -
SFG_FONT_CHARACTER_SIZE * SFG_FONT_SIZE_MEDIUM * 3, SFG_FONT_CHARACTER_SIZE * SFG_FONT_SIZE_MEDIUM * 3,
SFG_GAME_RESOLUTION_Y - SFG_HUD_MARGIN - TEXT_Y,
SFG_FONT_CHARACTER_SIZE * SFG_FONT_SIZE_MEDIUM,
SFG_FONT_SIZE_MEDIUM, SFG_FONT_SIZE_MEDIUM,
4); 4);
for (uint8_t i = 0; i < 3; ++i) // access cards
if (SFG_player.cards & (1 << i))
SFG_drawText(",",SFG_HUD_MARGIN + SFG_FONT_CHARACTER_SIZE *
SFG_FONT_SIZE_MEDIUM * (6 + i),
TEXT_Y,SFG_FONT_SIZE_MEDIUM,i == 0 ? 93 : (i == 1 ? 124 : 60));
#undef TEXT_Y
// border indicator // border indicator
if (SFG_gameFrame - SFG_player.lastHurtFrame if (SFG_gameFrame - SFG_player.lastHurtFrame

View File

@ -26,7 +26,7 @@
author: Miloslav "drummyfish" Ciz author: Miloslav "drummyfish" Ciz
license: CC0 1.0 license: CC0 1.0
version: 0.901 version: 0.902
*/ */
#include <stdint.h> #include <stdint.h>
@ -1680,8 +1680,7 @@ RCL_PixelInfo RCL_mapToScreen(RCL_Vector2D worldPosition, RCL_Unit height,
middleColumn + (-1 * toPoint.y * middleColumn) / RCL_nonZero(result.depth); middleColumn + (-1 * toPoint.y * middleColumn) / RCL_nonZero(result.depth);
result.position.y = camera.resolution.y / 2 - result.position.y = camera.resolution.y / 2 -
(((3 * camera.resolution.y) / 4 ) * (((3 * camera.resolution.y) / 4 ) *
// ((camera.resolution.y / 2) *
RCL_perspectiveScale(height - camera.height,result.depth)) RCL_perspectiveScale(height - camera.height,result.depth))
/ RCL_UNITS_PER_SQUARE + camera.shear; / RCL_UNITS_PER_SQUARE + camera.shear;
@ -1760,8 +1759,9 @@ void RCL_moveCameraWithCollision(RCL_Camera *camera, RCL_Vector2D planeOffset,
dir##Collides = 1;\ dir##Collides = 1;\
else if (ceilingHeightFunc != 0)\ else if (ceilingHeightFunc != 0)\
{\ {\
height = ceilingHeightFunc(s1,s2);\ RCL_Unit height2 = ceilingHeightFunc(s1,s2);\
if (height < topLimit)\ if ((height2 < topLimit) || ((height2 - height) < \
(RCL_CAMERA_COLL_HEIGHT_ABOVE + RCL_CAMERA_COLL_HEIGHT_BELOW)))\
dir##Collides = 1;\ dir##Collides = 1;\
}\ }\
}\ }\