mirror of
https://gitlab.com/drummyfish/anarch.git
synced 2024-11-23 17:32:16 -05:00
Take cards
This commit is contained in:
parent
6c57ef314a
commit
b7ba33a77a
1
TODO.txt
1
TODO.txt
@ -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
BIN
assets/item_card.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 547 B |
20
images.h
20
images.h
@ -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
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
7
levels.h
7
levels.h
@ -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}},
|
||||||
|
41
main.c
41
main.c
@ -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,10 +3056,17 @@ 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
|
||||||
|
|
||||||
|
10
raycastlib.h
10
raycastlib.h
@ -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;\
|
||||||
}\
|
}\
|
||||||
}\
|
}\
|
||||||
|
Loading…
Reference in New Issue
Block a user