From ea6efb8b204fd8e72791eb5a0703a1ffb7286b54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miloslav=20=C4=8C=C3=AD=C5=BE?= Date: Sun, 8 Mar 2020 15:04:02 +0100 Subject: [PATCH] Continue level --- TODO.txt | 25 +++++++++++++++++++++++++ assets/img2map.py | 4 ++-- assets/levelX.gif | Bin 3945 -> 4328 bytes constants.h | 5 +++++ main.c | 2 +- 5 files changed, 33 insertions(+), 3 deletions(-) diff --git a/TODO.txt b/TODO.txt index 7e1642a..113861f 100644 --- a/TODO.txt +++ b/TODO.txt @@ -40,6 +40,31 @@ general: level ideas: +- outline: + 1. City, player sees the big Macrochip building (a smaller one) in the + distance and has to get to its entrance. Beginning of the level is linear + and serves as a tutorial, things like exploding barrels or acess cards are + explained. + 2. Inside Macrochip smaller building. End leads to an elevator that goes + under the ground. + 3. Warehouse: + 4. Factory: + 5. Small boss level: + 6. City, player is on the other side of the smaller Macrochip building, the + level partially overlaps with level 1, but the player can now go further. + Big Macrochip HQ (skyscraper) is seen in the distance, player has to get + to its entrance. + 7. Inside skyscraper, 1st floor. + 8. Inside skyscraper, higher floor. + 9. + 10. Final boss level: on top of the skyscraper, player climbs up in a spiral + towards the roof. There is a boss (or two) on the top with a few smaller + ones, the exit is blocked by a lot of trapped warriors which the player + has to slowly kill, which means he has to first get rid of the other + monsters. + +- boss level: skyscraper top, player goes upwards in a spiral along the OUTSIDE + side of the skyscraper - two levels could partially overlap, e.g. level one, a city, could overlap with a later city level, the player could recognize he's e.g. on the other side of a channel or a wall that he was before diff --git a/assets/img2map.py b/assets/img2map.py index 6699a8a..f451a9b 100644 --- a/assets/img2map.py +++ b/assets/img2map.py @@ -67,8 +67,8 @@ def loadTileDict(x,y): for i in range(64): texture = getPixel(x + i,y + 31) - if texture > 6: - raise(Exception("Texture index can't be higher than 6.")) + if texture > 7: + raise(Exception("Texture index can't be higher than 7.")) height = 0 diff --git a/assets/levelX.gif b/assets/levelX.gif index 66bb4b3c866c4e71b4db973e309ccc247a1902d4..f0fdc60889c454412ffd553159eab2986b3fa212 100644 GIT binary patch delta 3474 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 diff --git a/constants.h b/constants.h index 7ee68b6..3535f04 100644 --- a/constants.h +++ b/constants.h @@ -100,6 +100,11 @@ */ #define SFG_EXPLOSION_RADIUS 2048 +/** + Distance in RCL_Units which the player is pushed away by an explosion. +*/ +#define SFG_EXPLOSION_PUSH_AWAY_DISTANCE 1200 + /** How much damage triggers a barrel explosion. */ diff --git a/main.c b/main.c index 5af910f..fdab1f8 100755 --- a/main.c +++ b/main.c @@ -1659,7 +1659,7 @@ void SFG_createExplosion(RCL_Unit x, RCL_Unit y, RCL_Unit z) uint8_t damage = SFG_getDamageValue(SFG_WEAPON_FIRE_TYPE_FIREBALL); - if (SFG_pushPlayerAway(x,y,SFG_EXPLOSION_RADIUS)) + if (SFG_pushPlayerAway(x,y,SFG_EXPLOSION_PUSH_AWAY_DISTANCE)) SFG_playerChangeHealth(-1 * damage); for (uint16_t i = 0; i < SFG_currentLevel.monsterRecordCount; ++i)