mirror of
https://gitlab.com/drummyfish/anarch.git
synced 2025-03-11 07:31:07 -04:00
Start items
This commit is contained in:
parent
39674da1eb
commit
ea973c020c
50
main.c
50
main.c
@ -228,6 +228,20 @@ typedef struct
|
|||||||
|
|
||||||
#define SFG_MAX_DOORS 32
|
#define SFG_MAX_DOORS 32
|
||||||
|
|
||||||
|
/**
|
||||||
|
Holds information about one instance of a level item (a type of level element,
|
||||||
|
e.g. pickable items, decorations etc.). The format is following:
|
||||||
|
|
||||||
|
MSB abbbbbbb LSB
|
||||||
|
|
||||||
|
a: active flag, 1 means the item is nearby to player and is active
|
||||||
|
bbbbbbb: index to elements array of the current level, pointing to element
|
||||||
|
representing this item
|
||||||
|
*/
|
||||||
|
typedef uint8_t SFG_ItemRecord;
|
||||||
|
|
||||||
|
#define SFG_MAX_LEVEL_ITEMS SFG_MAX_LEVEL_ELEMENTS
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Stores the current level and helper precomputed vaues for better performance.
|
Stores the current level and helper precomputed vaues for better performance.
|
||||||
*/
|
*/
|
||||||
@ -235,13 +249,19 @@ struct
|
|||||||
{
|
{
|
||||||
const SFG_Level *levelPointer;
|
const SFG_Level *levelPointer;
|
||||||
const uint8_t* textures[7];
|
const uint8_t* textures[7];
|
||||||
|
|
||||||
uint32_t timeStart;
|
uint32_t timeStart;
|
||||||
uint32_t frameStart;
|
uint32_t frameStart;
|
||||||
|
|
||||||
uint8_t floorColor;
|
uint8_t floorColor;
|
||||||
uint8_t ceilingColor;
|
uint8_t ceilingColor;
|
||||||
SFG_DoorRecord doors[SFG_MAX_DOORS];
|
|
||||||
|
SFG_DoorRecord doorRecords[SFG_MAX_DOORS];
|
||||||
uint8_t doorRecordCount;
|
uint8_t doorRecordCount;
|
||||||
uint8_t checkedDoorIndex; ///< Says which door are currently being checked.
|
uint8_t checkedDoorIndex; ///< Says which door are currently being checked.
|
||||||
|
|
||||||
|
SFG_ItemRecord itemRecords[SFG_MAX_LEVEL_ITEMS]; ///< Holds level items
|
||||||
|
uint8_t itemRecordCount;
|
||||||
} SFG_currentLevel;
|
} SFG_currentLevel;
|
||||||
|
|
||||||
#if SFG_DITHERED_SHADOW
|
#if SFG_DITHERED_SHADOW
|
||||||
@ -497,7 +517,7 @@ RCL_Unit SFG_floorHeightAt(int16_t x, int16_t y)
|
|||||||
{
|
{
|
||||||
for (uint8_t i = 0; i < SFG_currentLevel.doorRecordCount; ++i)
|
for (uint8_t i = 0; i < SFG_currentLevel.doorRecordCount; ++i)
|
||||||
{
|
{
|
||||||
SFG_DoorRecord *door = &(SFG_currentLevel.doors[i]);
|
SFG_DoorRecord *door = &(SFG_currentLevel.doorRecords[i]);
|
||||||
|
|
||||||
if ((door->coords[0] == x) && (door->coords[1] == y))
|
if ((door->coords[0] == x) && (door->coords[1] == y))
|
||||||
{
|
{
|
||||||
@ -572,7 +592,7 @@ void SFG_setAndInitLevel(const SFG_Level *level)
|
|||||||
if ((properties & SFG_TILE_PROPERTY_MASK) == SFG_TILE_PROPERTY_DOOR)
|
if ((properties & SFG_TILE_PROPERTY_MASK) == SFG_TILE_PROPERTY_DOOR)
|
||||||
{
|
{
|
||||||
SFG_DoorRecord *d =
|
SFG_DoorRecord *d =
|
||||||
&(SFG_currentLevel.doors[SFG_currentLevel.doorRecordCount]);
|
&(SFG_currentLevel.doorRecords[SFG_currentLevel.doorRecordCount]);
|
||||||
|
|
||||||
d->coords[0] = i;
|
d->coords[0] = i;
|
||||||
d->coords[1] = j;
|
d->coords[1] = j;
|
||||||
@ -589,6 +609,23 @@ void SFG_setAndInitLevel(const SFG_Level *level)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SFG_LOG("initializing level elements");
|
||||||
|
|
||||||
|
SFG_currentLevel.itemRecordCount = 0;
|
||||||
|
|
||||||
|
for (uint8_t i = 0; i < SFG_MAX_LEVEL_ELEMENTS; ++i)
|
||||||
|
{
|
||||||
|
SFG_LevelElement *e = &(SFG_currentLevel.levelPointer->elements[i]);
|
||||||
|
|
||||||
|
if (e->elementType == SFG_LEVEL_ELEMENT_BARREL)
|
||||||
|
{
|
||||||
|
SFG_currentLevel.itemRecords[SFG_currentLevel.itemRecordCount] =
|
||||||
|
SFG_LEVEL_ELEMENT_BARREL;
|
||||||
|
|
||||||
|
SFG_currentLevel.itemRecordCount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
SFG_currentLevel.timeStart = SFG_getTimeMs();
|
SFG_currentLevel.timeStart = SFG_getTimeMs();
|
||||||
SFG_currentLevel.frameStart = SFG_gameFrame;
|
SFG_currentLevel.frameStart = SFG_gameFrame;
|
||||||
|
|
||||||
@ -600,7 +637,6 @@ void SFG_init()
|
|||||||
SFG_LOG("initializing game")
|
SFG_LOG("initializing game")
|
||||||
|
|
||||||
SFG_gameFrame = 0;
|
SFG_gameFrame = 0;
|
||||||
SFG_lastFrameTimeMs = 0;
|
|
||||||
|
|
||||||
RCL_initRayConstraints(&SFG_rayConstraints);
|
RCL_initRayConstraints(&SFG_rayConstraints);
|
||||||
|
|
||||||
@ -614,6 +650,8 @@ void SFG_init()
|
|||||||
SFG_backgroundScroll = 0;
|
SFG_backgroundScroll = 0;
|
||||||
|
|
||||||
SFG_setAndInitLevel(&SFG_level0);
|
SFG_setAndInitLevel(&SFG_level0);
|
||||||
|
|
||||||
|
SFG_lastFrameTimeMs = SFG_getTimeMs();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -734,7 +772,7 @@ void SFG_gameStep()
|
|||||||
reasons we only check one door and move to another in the next frame. */
|
reasons we only check one door and move to another in the next frame. */
|
||||||
|
|
||||||
SFG_DoorRecord *door =
|
SFG_DoorRecord *door =
|
||||||
&(SFG_currentLevel.doors[SFG_currentLevel.checkedDoorIndex]);
|
&(SFG_currentLevel.doorRecords[SFG_currentLevel.checkedDoorIndex]);
|
||||||
|
|
||||||
door->state = (door->state & ~SFG_DOOR_UP_DOWN_MASK) |
|
door->state = (door->state & ~SFG_DOOR_UP_DOWN_MASK) |
|
||||||
(
|
(
|
||||||
@ -752,7 +790,7 @@ void SFG_gameStep()
|
|||||||
|
|
||||||
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.doors[i]);
|
SFG_DoorRecord *door = &(SFG_currentLevel.doorRecords[i]);
|
||||||
|
|
||||||
int8_t height = door->state & SFG_DOOR_VERTICAL_POSITION_MASK;
|
int8_t height = door->state & SFG_DOOR_VERTICAL_POSITION_MASK;
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@
|
|||||||
How many times the screen resolution will be divided (how many times a game
|
How many times the screen resolution will be divided (how many times a game
|
||||||
pixel will be bigger than the screen pixel).
|
pixel will be bigger than the screen pixel).
|
||||||
*/
|
*/
|
||||||
#define SFG_RESOLUTION_SCALEDOWN 4
|
#define SFG_RESOLUTION_SCALEDOWN 1
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Turn on for previes mode for map editing (flying, noclip, fast movement etc.).
|
Turn on for previes mode for map editing (flying, noclip, fast movement etc.).
|
||||||
|
Loading…
x
Reference in New Issue
Block a user