Jabiveir: The Adventure
Jabiveir: The Adventure is a fairly challenging platformer game, made using JavaScript's canvas. The game has 18 levels, with a very inconsistent difficulty curve. This game kept in many poor design choices during
development, but most were fixed in Jabiveir: The Adventure Redux. Guides to each level can be found in this video.
> History
vHistory
As of writing this, the exact dates of when the development of this game started and ended are unknown, but it is believed that the game was released around the start of August, 2022. This was the second Jabiveir
Website game to be developed, and the first to involve any actual JavaScript, allowing it to be much more technically advanced. The game was partially designed with speedrunning in mind, leaving in some glitches and
design quirks that would allow for shortcuts.
> Mechanics
vMechanics
This game's mechanics are relatively simple, with the left and right arrow keys being used to move left and right, respectively, and the up arrow key being used to jump; the player must traverse obstacles and avoid
danger to reach the green flag at the end of each level. With specificity, however, the mechanics of this game become much more complex. If you need more detail than these subsections provide, I would recommend
simply reading the code for this game on the GitHub page for this website.
Frames
In game design, a "frame" is a single, discrete instance of gameplay, accompanied by a single image displayed on the screen; the game looks smooth and continuous when many frames are displayed sequentially in a short
amount of time. In this game along with many other Jabiveir games, the framerate is limited to a maximum of 60 frames per second, and because DeltaTime is not used to account for differences in framerate, playing
this game with lower than 60 FpS effectively slows down the game. Additionally, in each frame of gameplay, there are 4 "subframes", in which Jabiveir moves in increments of a quarter of the current velocities, and
collision detection takes place in each of these subframes, making the game's collision significantly more accurate. All acceleration is applied within each subframe (except friction).
Collision Detection
Level data in this game is stored in a large array of "Block" objects, which consisted only of dictionaries that stored the X and Y coordinates of a block, as well as its block type and any other block-specific info;
this may have been the worst way to possibly handle storing levels. Similarly foolishly, the tile collision detection iterates through every Block object in the level array (even ones that are nowhere close to
Jabiveir), doing this every subframe. Oops. In detecting the collision of a single block, the X and Y coordinates of Jabiveir and the block are compared, with 1 pixel of lenience on each side for lava, key, portal,
and flag tiles, and 2 pixels of lenience on each side for the death hitbox of solid red, blue, and purple tiles (color tiles). The order in which block collision is detected is as follows: full block collision, top
of block collision, smaller full block collision (for color tiles), left of block collision, right of block collision, and bottom of block collision. Colliding with the top, left, or right of a block typically sets
Jabiveir's Y or X velocity to zero (and snaps Jabiveir's position to the proper side of the block), but colliding with the bottom of a block sets Y velocity to negative one. The state of red/blue blocks switches
every 128 frames (2.133 seconds at 60 FpS), while purple blocks switch state every 8 frames (0.133 seconds at 60 FpS).
Player Movement
When a button is pushed, player movement is changed within each subframe. If the relevant velocity (X for left and right, Y for up) is equal to zero, it is set to a value; otherwise, a smaller value is added to it
within each subframe that the button is held. Because of this, holding the jump button while falling will (slightly) slow Jabiveir's descent, which is very useful in some parts of the game. A quarter of a gravity
constant is subtracted from the Y velocity within each subframe to make Jabiveir fall; friction, however, is applied to X velocity only every frame, and it is applied exponentially (instead of linearly, like normal
acceleration).
Level Saving
Game progress is saved through the use of browser cookies. Every time a level is loaded, the cookie is created/updated with the current level, and the Level variable is set to whatever this cookie stored when the
page is loaded. The "wipe save" button sets the Level variable to the first level without changing the cookie, thus allowing for the save wipe to be undone by refreshing the page before loading into the first level,
which would otherwise reset the cookie by storing the first level.
> Speedrunning
vSpeedrunning
Run Title & Link |
Time |
User |
Date |
First Run |
13:03.833 |
Jabiveir |
28/08/2024 |
History
Currently, this game has no speedrunning history, as I am the only person who has submitted a run. I would appreciate it if you tried beating my time!
> Trivia
vTrivia
-Many parts of this game's programming are laughably inefficient. I would know; I do laugh at them.
-The cookie that saves level progress in this game used to be, unintentionally, the exact same cookie that saved level progress in JabiGear, which could be used for a unique type of speedrun.
-The portal maze level has portals that do not always lead to their partner when entered, and may lead to entirely different portals by mistake. Oops.
-Level 16, the level with lava ceilings above upward boost tiles, took me 2 hours to beat when first playtesting. I do not know why I didn't make it easier.
-Level 17 can very easily be beaten be moving left immediately after Jabiveir spawns in, as there is a tiny window of time in which the flag can be reached. It's so easy that you can even do it accidentally while
you're trying to record a tutorial on how to beat the level normally and then, since there's no way to go back a level, you have to play through the entire game again to try and record it properly.
Page last updated: 16/09/2024