diff --git a/TODO.txt b/TODO.txt index 8ce3a1b..3acd3c3 100644 --- a/TODO.txt +++ b/TODO.txt @@ -1,9 +1,7 @@ general: -- Add SW buttons to emscripten version so that it's playable on mobiles. - Refactor. - Port to OpenDingux. -- Port to some fantasy console? - Rewrite python scripts to C (faster, less bloat). - Try to recolor textures and give them a bit more of variety. - automatic tests: a frontend that will play the game, check the state, rendered @@ -12,6 +10,7 @@ general: - compile on BSD and WinShit - make SFML frontend - add time slowdown constant +- Port to some fantasy console? - run on raspbery pi level ideas: @@ -199,6 +198,7 @@ done: a build script that creates multiple binaries (with different combinations of compilers and settings) - High pitch noise in SDL music AGAIN! +- Add SW buttons to emscripten version so that it's playable on mobiles. scratched: - option for disabling wall transparency, for performance? diff --git a/game.h b/game.h index 989bab0..cd5448a 100755 --- a/game.h +++ b/game.h @@ -448,7 +448,7 @@ struct uint8_t bossCount; uint8_t monstersDead; uint8_t backgroundImage; - uint8_t teleportCount; + uint8_t teleporterCount; uint16_t mapRevealMask; /**< Bits say which parts of the map have been revealed. */ uint8_t itemCollisionMap[(SFG_MAP_SIZE * SFG_MAP_SIZE) / 8]; @@ -1407,7 +1407,7 @@ void SFG_getItemSprite( case SFG_LEVEL_ELEMENT_TREE: case SFG_LEVEL_ELEMENT_RUIN: case SFG_LEVEL_ELEMENT_LAMP: - case SFG_LEVEL_ELEMENT_TELEPORT: + case SFG_LEVEL_ELEMENT_TELEPORTER: *spriteSize = 2; break; @@ -1493,7 +1493,7 @@ void SFG_setAndInitLevel(uint8_t levelNumber) SFG_currentLevel.checkedDoorIndex = 0; SFG_currentLevel.doorRecordCount = 0; SFG_currentLevel.projectileRecordCount = 0; - SFG_currentLevel.teleportCount = 0; + SFG_currentLevel.teleporterCount = 0; SFG_currentLevel.mapRevealMask = #if SFG_REVEAL_MAP 0xffff; @@ -1553,8 +1553,6 @@ void SFG_setAndInitLevel(uint8_t levelNumber) { if (SFG_LEVEL_ELEMENT_TYPE_IS_MOSTER(e->type)) { - SFG_LOG("adding monster"); - monster = &(SFG_currentLevel.monsterRecords[SFG_currentLevel.monsterRecordCount]); @@ -1575,20 +1573,17 @@ void SFG_setAndInitLevel(uint8_t levelNumber) else if ((e->type < SFG_LEVEL_ELEMENT_LOCK0) || (e->type > SFG_LEVEL_ELEMENT_LOCK2)) { - SFG_LOG("adding item"); SFG_currentLevel.itemRecords[SFG_currentLevel.itemRecordCount] = i; SFG_currentLevel.itemRecordCount++; - if (e->type == SFG_LEVEL_ELEMENT_TELEPORT) - SFG_currentLevel.teleportCount++; + if (e->type == SFG_LEVEL_ELEMENT_TELEPORTER) + SFG_currentLevel.teleporterCount++; if (SFG_itemCollides(e->type)) SFG_setItemCollisionMapBit(e->coords[0],e->coords[1],1); } else { - SFG_LOG("adding door lock"); - uint8_t properties; SFG_getMapTile(level,e->coords[0],e->coords[1],&properties); @@ -1766,18 +1761,14 @@ uint8_t SFG_launchProjectile( p.position[0] = shootFrom.x + (direction.x * offsetDistance) / RCL_UNITS_PER_SQUARE; - p.position[1] = shootFrom.y + (direction.y * offsetDistance) / RCL_UNITS_PER_SQUARE; - p.position[2] = shootFromHeight; p.direction[0] = (direction.x * SFG_GET_PROJECTILE_SPEED_UPS(type)) / RCL_UNITS_PER_SQUARE; - p.direction[1] = (direction.y * SFG_GET_PROJECTILE_SPEED_UPS(type)) / RCL_UNITS_PER_SQUARE; - p.direction[2] = verticalSpeed; return SFG_createProjectile(p); @@ -1807,9 +1798,7 @@ uint8_t SFG_pushAway( l = RCL_UNITS_PER_SQUARE; } else if (l >= distance) - { return 0; - } RCL_Vector2D offset; @@ -3268,7 +3257,7 @@ void SFG_gameStepPlaying() } } - uint8_t collidesWithTeleport = 0; + uint8_t collidesWithTeleporter = 0; /* item collisions with player (only those that don't stop player's movement, as those are handled differently, via itemCollisionMap): */ @@ -3347,8 +3336,8 @@ void SFG_gameStepPlaying() SFG_player.cards |= 1 << (e->type - SFG_LEVEL_ELEMENT_CARD0); break; - case SFG_LEVEL_ELEMENT_TELEPORT: - collidesWithTeleport = 1; + case SFG_LEVEL_ELEMENT_TELEPORTER: + collidesWithTeleporter = 1; eliminate = 0; break; @@ -3378,14 +3367,14 @@ void SFG_gameStepPlaying() #endif } else if ( - e->type == SFG_LEVEL_ELEMENT_TELEPORT && - SFG_currentLevel.teleportCount > 1 && + e->type == SFG_LEVEL_ELEMENT_TELEPORTER && + SFG_currentLevel.teleporterCount > 1 && !SFG_player.justTeleported) { - // teleport to random destination teleport + // teleport to random destination teleporter - uint8_t teleportNumber = - SFG_random() % (SFG_currentLevel.teleportCount - 1) + 1; + uint8_t teleporterNumber = + SFG_random() % (SFG_currentLevel.teleporterCount - 1) + 1; for (uint16_t j = 0; j < SFG_currentLevel.itemRecordCount; ++j) { @@ -3394,10 +3383,10 @@ void SFG_gameStepPlaying() [SFG_currentLevel.itemRecords[j] & ~SFG_ITEM_RECORD_ACTIVE_MASK]; - if ((e2.type == SFG_LEVEL_ELEMENT_TELEPORT) && (j != i)) - teleportNumber--; + if ((e2.type == SFG_LEVEL_ELEMENT_TELEPORTER) && (j != i)) + teleporterNumber--; - if (teleportNumber == 0) + if (teleporterNumber == 0) { SFG_player.camera.position.x = SFG_ELEMENT_COORD_TO_RCL_UNITS(e2.coords[0]); @@ -3410,7 +3399,7 @@ void SFG_gameStepPlaying() RCL_CAMERA_COLL_HEIGHT_BELOW; SFG_currentLevel.itemRecords[j] |= SFG_ITEM_RECORD_ACTIVE_MASK; - /* ^ we have to make the new teleport immediately active so + /* ^ we have to make the new teleporter immediately active so that it will immediately collide */ SFG_player.justTeleported = 1; @@ -3426,7 +3415,7 @@ void SFG_gameStepPlaying() } } // item collision check - if (!collidesWithTeleport) + if (!collidesWithTeleporter) SFG_player.justTeleported = 0; #if SFG_PREVIEW_MODE @@ -4551,7 +4540,6 @@ void SFG_draw() for (int_fast16_t i = 0; i < SFG_currentLevel.monsterRecordCount; ++i) { SFG_MonsterRecord m = SFG_currentLevel.monsterRecords[i]; - uint8_t state = SFG_MR_STATE(m); if (state != SFG_MONSTER_STATE_INACTIVE) @@ -4568,8 +4556,7 @@ void SFG_draw() SFG_floorHeightAt( SFG_MONSTER_COORD_TO_SQUARES(m.coords[0]), SFG_MONSTER_COORD_TO_SQUARES(m.coords[1])) - + - SFG_SPRITE_SIZE_TO_HEIGHT_ABOVE_GROUND(spriteSize); + + SFG_SPRITE_SIZE_TO_HEIGHT_ABOVE_GROUND(spriteSize); RCL_PixelInfo p = RCL_mapToScreen(worldPosition,worldHeight,SFG_player.camera); @@ -4624,11 +4611,10 @@ void SFG_draw() if (p.depth > 0 && SFG_spriteIsVisible(worldPosition,worldHeight,spriteSize)) - SFG_drawScaledSprite( - sprite, - p.position.x * SFG_RAYCASTING_SUBSAMPLE,p.position.y, - RCL_perspectiveScaleVertical(SFG_SPRITE_SIZE_PIXELS(spriteSize),p.depth), - p.depth / (RCL_UNITS_PER_SQUARE * 2),p.depth); + SFG_drawScaledSprite(sprite,p.position.x * SFG_RAYCASTING_SUBSAMPLE, + p.position.y, + RCL_perspectiveScaleVertical(SFG_SPRITE_SIZE_PIXELS(spriteSize), + p.depth),p.depth / (RCL_UNITS_PER_SQUARE * 2),p.depth); } } @@ -4660,8 +4646,7 @@ void SFG_draw() RCL_nonZero(SFG_GET_PROJECTILE_FRAMES_TO_LIVE(proj->type) / 2); // grow the explosion/dust sprite as an animation - spriteSize = - ( + spriteSize = ( SFG_SPRITE_SIZE_PIXELS(2) * RCL_sin( ((doubleFramesToLive - diff --git a/levels.h b/levels.h index d448707..83317cb 100644 --- a/levels.h +++ b/levels.h @@ -94,7 +94,7 @@ typedef struct #define SFG_LEVEL_ELEMENT_PLASMA 0x05 #define SFG_LEVEL_ELEMENT_TREE 0x06 #define SFG_LEVEL_ELEMENT_FINISH 0x07 -#define SFG_LEVEL_ELEMENT_TELEPORT 0x08 +#define SFG_LEVEL_ELEMENT_TELEPORTER 0x08 #define SFG_LEVEL_ELEMENT_TERMINAL 0x09 #define SFG_LEVEL_ELEMENT_COLUMN 0x0a #define SFG_LEVEL_ELEMENT_RUIN 0x0b