Imhotep's revenge Title: Imhotep’s revenge Summary: You are imhotep, pharaoh's greatest architect. But as he was buried in the pyramid he got you buried with him. He was afraid you’d leak the pyramid’s secret, but he forgot you were Imhotep, the architect, the doctor, the vizir, the philosopher, the great priest, etc… In other words, you’ll get out. Genre: Platform / Puzzle Solo/Multi: This is intended as a single player game Public: Goal is to be all ages as long as they can read, explosions are not an issue and some humour might not be understood by younger players. Also death mention might rule out very young players. Platform: The gameplay is aimed exclusively at PC (usage of mouse + keyboard). Target Market: As far as can be told no market should be closed to these kinds of games (except again if some humour is being offensive). Technologies: Unity will most likely be the game engine. C# for scripting. No networking. Unique selling points: - Many ways to go through a room, as the player has a way to shape the level himself - 2 genres in one - higher playtime with against the clock challenges - not many games focused on egypt Game Synopsis: You are imhotep, the pharaoh’s greatest architect and a lot more. You have built the great pyramid to serve as your pharaoh’s tomb. It is a masterpiece labyrinth of traps to fight against grave raiders. But also a jewel of beauty. But today is a sad day, pharaoh died, he will soon be buried in the masterpiece tomb you’ve built. Next thing you know, you’re inside the pyramid itself, in a deep room with funeral decorations. You’re feeling a bit groggy but recover quickly, when reading the hieroglyphs on the wall you understand you’ve been buried in order to keep the pyramid’s secrets, well… secret. When desperation kicks in and a light grows dim, you spot a baboon with a white fur coming towards you. You are surprised as he starts speaking and tells you not to worry, cause he’s bringing a gift from a friend. That gift is a ring, which as the baboon explains, allows you to keep every torch lit, but also to spawn walls and blocks in an instant. Given these new powers, you undertake leaving this place. Intentions The goal in this game is to provide the player with a mix of puzzle and platform. The main mechanic of the game is for the player to be able to spawn new blocks on which he can walk, run and jump. Using this mechanism, and classic platformer moves the player has to get out of a series of rooms. 3C Camera: The game is a 2d side scroller, characters are portrayed from the side (with a slight angle to simulate perspective). The terrain is sliced at a 90° angle. Objects and decorations are represented facing the camera. The game should have a pixel art feel. Reference tile/sprite size is 64x64 pixels For unity this means: - using the pixel perfect camera with a reference resolution of 480x721 - sprites and tiles should be imported using the following settings: - pixels per unit: 64 - filter mode: none - compression: none - using a 2D project template - using a tilemap for most terrain tiling Character: The character is a man, egyptian, with traditional costumes. It’s costume is less fancy than a pharaoh, but still luxurious. There are other characters which will help the player introducing new mechanisms, but also enemies. Controls: The character itself is controlled using the keyboard (let’s assume qwerty) W: jump A: go left D: go right S: unused right now The character can also spawn blocks using the mouse: left click: create an instance of the current block under the mouse cursor left click in the action bar: select a new type of block to instantiate In addition to those, the player can use hotkeys to select block types numeric keys 1-9 allow to switch between block types. (re-configurable) Core Gameplay: The player’s goal is to go from the start of the level (left of the screen), to the end of the level (right of the screen). In each level you are presented with walls, platforms and pits. Initially, given the height at which you can jump and the speed you can attain, there is no way you could reach the other end of the level (represented by a door). Additionally with pits, there are zones of the terrain which would hurt you if you touched them. Some of them are moving (think of a trap, a saw moving along a rail, etc…). You can regain life by collecting ankhs. In order to reach the end of the level, you’ll have to control the character appropriately, but most important: you’ll need to place new blocks at the appropriate places. The most obvious way to use blocks is to create platforms you can step on to be able to re-jump to something else. Other mechanics related to blocks can be to jam tracks, damage ennemies, get pass impossible constructs. Example levels (overview): Win and Loss: You win the current level when you reach the exit door. You lose the current level when you fall down a pit or your health level reaches 0. You win the game when you’ve won all the individual levels You never lose the game. You can replay at any time any of the levels you’ve already completed. Secondary gameplay: Another play mode gives you score proportionally to how fast you end a level. Look and feel: Imothep (first concepts): Very first attempt at creating a demo level Title screen: (font used was stein antik: https://www.dafont.com/fr/steinantik.font) Dialog system: Block selection ui (not shaded): Blocks: The core gameplay is centered around spawning blocks on which imothep can jump or with which he can interact with the environment. This is a draft list of which block the user can use: - Simple block: A platform which the user can walk/jump on, stays in place the whole time and can physically block other entities. The user has access to a limited set of these per rooms. - Timed block: A block which disappears after some amount of time. Other than that it is equivalent to the simple block. The user gets more of these but needs the right timing to use them. - 1X jump block: A block which disappears after the user leaves it. - exploding block: A block which after some times blows off and damages nearby entities - bouncy block: A block which is “bouncier” than other, meaning jumping on it will send the player higher in the airs. - horizontal moving block: A block which acts like an horizontal moving platform. - vertical moving block: same as horizontal but perpendicular - Living cell block: A block which grows in all directions at a fixed rate once it is placed. Cannot crush other entities but can definitely trap the player if misused - portal block: a couple of blocks, when jumping on the first one, the player is teleported on the second one (ignoring any terrain collision, traps, ennemies, etc…) Ennemies In the game, the player has a quantity of health points, if the health points go below 0, the player dies and must start again in the current room. The enemies are a set of entities which can lower the player's health in one way or another. - spikes: these can be on the ground, on the ceiling or on wall, upon touching, the player loses a significant amount of health points, so that he can only touch these a few times. - Static saw: a trap in the form of a circular saw which turns on itself, again damages the player upon contact - Moving saw (vertical/horizontal): A circular saw which moves back and forth against an axis (aligned with either x or y). Spawning a block on the path of the saw should block it - Dart shooter: small holes in the wall from where darts come out at a regular rate. When the dart touches the player, he loses some healthpoints. When the dart touches an entity which doesn’t have health, the dart is destroyed. So spawning a block in front of the shooter prevents the dart from going any further. - Snakes: snakes are “intelligent” enemies which occupy a territory (small zone on the map), they will attack other non-snake entities which enter the zone, dealing healthpoint damages. NB: they can only attack entities on the same horizontal platform. They have health points and are affected by eg: exploding blocks Difficulty: The game is aimed at being quite casual, hence no hard death, the opportunity to restart a level at any given time. The player should be gradually introduced to new mechanics (such as new blocks, new enemies, eventually combinations of blocks). Ideally when a new mechanic is introduced, it should be done by a dialog from a tutor character, and a tutorial level (where leveraging the new mechanism alone is sufficient to get to the end). Secondary characters: Imotheps is not the only one inside the pyramid, here is a list of living beings he’ll meet during his escape. - White baboon: a messenger from Thot, the scribe god who wishes to help you and grants you your first block power. The first character you meet in the game, and one of the tutors. He’ll later bring you the horizontal and vertical moving block powers - Cat: a cat of the sphinx race, it is a messenger of Bastet which offers you the timed block power to challenge your capacity of jumping under constraint - Beetle: the beetle is a messenger of râ/rê , he grants you the 1X jump block - Ptah: Encountered second half of the game, this tuto character is also your father, he’ll grant you the exploding block power - Cow: The cow is Hathor’s messenger, it brings you the Living cell block power - Jackal: A messenger of anubis, brings you the portal block power Scenes and navigation: The navigation to and in between rooms must be thought out to make it possible to respect the win and loss conditions as well as the “you can access any room you already did anytime” constraint. Additionally the fact the user can spawn blocks and the quantity of those is limited means he might get the room in a state where no progress is possible thus we have to provide a reset mechanism. Generalities: - there is a pause menu accessible from within room scenes - the pause menu doesn’t pause the game (enemies still active, physics still applies, etc…) - from the pause menu, the player can restart the room - from the pause menu, the player can go back to level selection screen - a room is a scene in itself - there is a level selection screen which allow the use to select the room he’s going to play - on level selection screen, rooms are clustered in levels - the player can start a room he already finished or the next one in level progression order (if there is a next one, otherwise all of them) - for every room a score level is displayed (cf: secondary gameplay) - when the game starts, the player is directed to the screen title, where he has options to go to - level selection (start) - settings screen - quit the game Schemas: navigation flow: Mockup of the level selection screen: Technical details: Blocks structure - a block is a scriptable object - each block has - the prefab to spawn when that block is created - a thumbnail image to display in the selection cartouche - a description (tooltip) - a name (tooltip) - The creation and the management of blocks is done by the block service, which is a monobehaviour living on an empty gameobject in the scene. The block service is divided this way: - block factory: script responsible for instantiating blocks (if possible) - block registry: keeps count of how many blocks were spawned and how many max of each are available - block controller: holds information about which block is currently being selected and provides feedback to the player on whether the block was spammed or not - block positioner: is responsible for positioning blocks correctly relative to the tilemap (snap them to grid). Basically it snaps position on the grid. - block service: holds the different parts of the block system and provides access from the outside, also allows to parametrize the different blocks metrics. Blocks behavior: Blocks behave on themselves using unity components, for each blocks the behavior can be obtained with a mix of native unity components + monobehaviour - simple block: has a rigid body and therefore acts as a platform out of the box - timed: has a rigid body and a monobehaviour which destroy the block after some time + display a time remaining bar - 1X: this one has an effector which detect player entering the zone and destroy the block on player exiting - exploding: same as timed but with an extra monobehaviour which simulate an explosion upon destruction - bouncy: same has simple block but with a bouncier material - horizontal/vertical: these ones have a rail definition and a monobehaviour which moves them on update (see poc for physic) - living cell: use a monobehaviour on update which creates new blocks using the block factory - portal: both have a reference for each other + an effector which moves entities as they enter the effector (watch for loops) Translations: To begin with a singleton i18n service with translations in code will be enough. We might need a few monobehaviours to update text components through a subscribe/publish pattern for example. Debugging utilities: In order to be able to debug eg: production build, we’ll have an in-game console and logger. External dependencies: - pixel perfect camera - 2d extras: https://github.com/Unity-Technologies/2d-extras Assets structure: - Scenes - Sprites (static and animations) - Tiles (tiles images + tiles objects from unity) - TilePalettes - Ui (ui images) - Animations (animations + controllers) - PhysicsMaterials - Prefabs - Blocks (scriptable objects) - States (scriptable objects) - SoundEffects - SoundTracks - Scripts List of required assets: - tiles: - background: - variation 1 - variation 2 - variation 3 - terrain - wall core - variation 1 - variation 2 - variation 3 - wall top (where the player walks) - top-middle - top-left - top-right - wall side - left - right - ceiling - ceiling-middle - variation 1 - variation 2 - variation 3 - ceiling to left wall junction (ceiling-left) - ceiling to right wall junction (ceiling-right) - column - column top - variation 1 - variation 2 - variation 3 - column middle - variation 1 - variation 2 - variation 3 - column base - variation 1 - variation 2 - sprites (in-game) - imothep (animations) - idle - running - in-air - taking damage - going through door - coming from door - snake: - idle - sliding - biting - Door - opening - closing - spike (static) - circular saw (static, will move with rotation) - dart shooter (canon) - dart - white baboon - idle - walking - cat - idle - walking - beetle - idle - flying - ptah - idle - appearing - disappearing - cow - idle - walking - jackal - idle - walking - torch burning - sarcophagus (decoration) - canopic jar (decoration) - variation 1 - variation 2 - variation 3 - ankh (life bonus) - spinning animation - winged sun (decoration) - hanging bats (animation - variation 1 - variation 2 - variation 3 - blocks: - simple - in game - selection thumbnail - timed - selection thumbnail - 1x - selection thumbnail - exploding - selection thumbnail - explosion animation - bouncy - selection thumbnail - in game - horizontal/vertica - selection thumbnail - rail image - living cell - selection thumbnail - in game variation - portal - selection thumbnail - in game, in block - in game, out block - UI sprites - cartouche button (9 patch) - idle - hover - pressed - block selection cartouche - block selection slot - level selection room slot - level selection level slot - Other sprites: - finished game image - fonts: - stein antik: https://www.dafont.com/fr/steinantik.font - texts: - introduction text - white baboon first encounter - cat first encounter - beetle first encounter - white baboon second encounter - ptah first encounter - cow first encounter - jackal first encounter - thank you for playing text - blocks tooltips - simple - 1X - exploding - bouncy - horizontal - vertical - living cell - portal - buttons: - play - exit - settings - start room - back to level selection - restart room - ok - hotkey 1-8 - volume - music/sounds - theme song - jump sound effect - land sound effect - block spawned sound effect - no more blocks effect - take damage effect - explosion - gliding saw - dart shoot - dart dying - snake rattle - writing sound effect
Enter the password to open this PDF file:
-
-
-
-
-
-
-
-
-
-
-
-