v0.6.0 Update – New Character Graphics

I’ve been working on the sprites for the last 3 weeks or so, using the concepts fromΒ Samuel Suarez. Apparently I had to redo over 400 sprites! WOW. But it was worth it. The new characters are more lovable. Hope you like them too.

Pyramid of the Day was tweaked as well. The time bonus was giving too much points. Also I added a 1000 bonus points if you get any of the following perfect:

  • enemies killed
  • loot collected
  • secrets found

Here are the full release notes for v0.6.0.

Added

  • New Graphics for George and Felicie
  • Motion blur when falling to fast
  • Dust cloud when jumping
  • Different animations when jumping vertically/horizontally and landing
  • Offsets while carrying objects
  • Felicie Slide sound effect
  • Option to disable fog from pause menu (useful for slow GPUs)
  • Show hole after finding a secret
  • Semitransparent Flags for multiplayer
  • Show time in multiplayer

Fixed

  • Fixed rare teleporting issues (hopefully)
  • Delayed sounds sometimes wheren’t playing (like burping when eating beans)
  • Fix for Felicie flipping flopping when whistling and she’s directly above you
  • Do not allow entering keys for name if he’s using the keyboard for controls
  • Fix for friend triggering switch when carried
  • Fixed C4 pickup animating the whick when not lit up
  • Fix for when you pick up opponent friend and she is still sliding from a throw, she will be hovering on your head
  • Pulling rope animation and fixed issue where the player would be misaligned by a tile
  • Fix remaining stuck in mid-air when using teleport or zapper
  • Fixed bug with menu selection screen re-appearing if you keep it on English
  • Do not show friend marker if jellyfish
  • Fix for whistling in mid-air (if you press action key a lot while falling)
  • Fixed issue when breathing underwater, where text remained green
  • Don’t pick up friend if dead (especially for multiplayer)
  • When playing pyramid of the day always reset to first world
  • Fixed issue where pyramid of the day of mayan was the same as egypt
  • Scorpion attack wasn’t hitting friend
  • Fixed issue where you couldn’t pick up just spawned loot

Modified

  • Disabled switcheroo for now (as I still need to create graphics for them)
  • You can move horizontally on the ladder
  • You can know pick up and reattach a bomb
  • Can use inventory while running and swimming
  • Show next key to press to continue instead of green triangle in tutorial
  • Switch remains slightly visible when pressed
  • Allow to jump again after jumping on an enemy
  • Tweaked score for time bonus Added +1000 if you get enemies, loot, secrets perfect

v0.5.9 Update – Languages Support

I have added support for the following languages:

  • French
  • Italian
  • German
  • Spanish
  • Portuguese
  • Russian
  • Chinese
  • Japanese
  • (and soon Polish thanks to two guys from the Discord community)

The above were translated by translators (actual persons) but not professionals from the games industry, so I’m expecting there will be a lot of inconsistencies. And Localization QA is quite expensive.

If any of the above languages is your native language, I would really appreciate it if you could double check it and report and weird translations πŸ™‚

Join the community on Discord to give suggestions and get daily updates on art and development.

Meanwhile here’s a preview of the upcoming redesign of the characters

Online multiplayer still on

Quick update for this week. 

Last week was dedicated to  online multiplayer.

I had stopped on it several months ago, I believe back in November. Why did I stop on it in the first place? Well it felt like I should dedicate more time to other things.

But last month I decided to give it another shot. I started from scratch for the online multiplayer, and there’s some good progress. The tricky part is letting the remote player feel like it’s instantaneous as if there’s no lag. I tried playing the game with Parsec, where a remote player connects to another player. This kind of tech records the server’s screen and sends it to the remote player. And the remote player sends the inputs. But the lag just kills the gameplay, because you have to wait for the server to receive your input and send you back the next screen frame to see any kind of feedback.

It’s very tough to debug multiplayer bugs but with adequate logs, and screen recording, and lots of patience the bugs are being fished out. So running, jumping, picking up loot, and throwing things are in place. I’m currently working on killing enemies. There’s also a resynch with server, just in case it gets out of whack.

Ah, and btw here’s a new poster WIP. Join Pyramid Plunge Discord server to see the whole poster in the art channel…

Writing your first discord bot for your indie game

So this week, Pyramid Plunge got featured on alphabetagamer.com and this caused quite a number of people to register with the game’s discord server.
From just 4 members, it quickly jumped to around 60.
I wanted to keep the new players engaged somehow.
I had heard a lot about how discord can be used to create a community around the game, especially from No More Robots’ Mike Rose’s articles/videos. So what could I do to quickly add something for Pyramid Plunge new community?

Pyramid Plunge generates the levels procedurally, typical of roguelike. It also has a special mode called Pyramid of the Day where the levels are kept the same for 24 hours. Its leaderboard will reset as well after 24 hours. So I thought this could lend well for the new community on discord.

I thought whoever gets at the top of the leaderboard he would be crowned as Pharaoh of the Day. Perhaps even display a crown near the username too.
I also wanted to let them see the leaderboard directly in discord. And notify the current Pharaoh that he has been dethrowned.

The only problem is I had never created a discord bot before. Luckily there are a lot of resources. And here is a quick rundown to get you started.

Getting started guide

Just visit discord.js guide and it will guide you on how to get started.
I had never used node js before, but the guide is very straight forward to use.
You’ve already coded your game, so this will be easy comparativily πŸ™‚

Do not use any other unofficial guide on youtube or some old article, because the api changes. I’ve wasted 2 hours because I had started off an old tutorial, and then when I tried using the the official documentation, things were not matching up. The helpful official DJS discord channel immediately spotted my problem. I had to restart off the official discord.js guide. This is the reason why this article will not give code examples because the API changes.

I ended up using the following tools on Mac, but it will similar for Windows

  • terminal (to install node js and any packages used. Also to start the bot)
  • Sublime text editor to edit the files
  • Discord itself to test it

In the Discord server I created a bot-test channel and set it private. I also created a Bot Tester role and assigned it to whoever was interested to test it out

If you don’t want to use your local machine, you might be interested in trying out Glitch. As you type it will save and recompile your bot automatically. Once you’re happy with the bot, you can buy their premium service which keeps your bot alive too. (I know there are ways how to keep your free Glitch bot alive, but that’s not cool.)

Hosting on your existing cPanel VPS

I already had a server for PyramidPlunge.com and I wanted to use the same server. Actually it’s a VPS, so it uses cPanel to control the server. But it was relatively easy to set it up. My VPS supports installing node.js. They just have a Setup Node JS icon in cPanel. You just copy your json and js files, and it will automatically download all the packages you’re using. Just make sure to create a subdomain for your bot. That eliminated some weird issue in my case where I couldn’t effectively use the express package.

The only caveat using a cPanel VPS is that after a few minutes of inactivity, the bot would not be responsive anymore. I tried asking customer support for a solution but they were clueless. In some forum online, someone suggested to make a cronjob to ping it every minute or so. But the cPanel cron job setting doesn’t allow fewer than 5minutes interval. So I had to create several cron jobs manually, all doing the same thing but spaced out by a few minutes. That seems to have worked.

The bot so far

So for Pharaoh of the Day, I’ve scheduled a job every 5 minutes (using node-schedule) to check if there were any changes in the Pyramid of the Day leaderboard. If there was any dethroning, it would notify the existing Pharaoh and also post on the pyramid-of-the-day channel.

The Pharaoh is placed in a specific role, so he gets highlighted from the rest of the members of the server. I also change his nickname. Nicknames are like usernames but set for a discord server. So I set the nickname to his username and append a crown universal emoji. Of course, when Pharaohs change, the role is removed and nickname is reset to the username.

Players can also query the current leaderboards for each difficulty in the game. Since the leaderboard system uses a webserver, it already was returning a json string and so it was pretty easy to parse and format the data into a Discord Embed message. An Embed message makes a response from a bot look nicer where you have more options to format the message. Unfortunately there are no tables yet which would be ideal for a leaderboard.

Linking the game with discord

This was kinda hacky. I’m using GameMaker and I couldn’t find a quick way how to make the user “login” with discord. If you have any ideas on this, please fill me in. So what I’ve done is let the player ask the bot to give him his discord id. He copies it and pastes it in the game. His scores will now be linked to his discord id.

What’s next? Teams and Weekly Challenges

I’m hoping I will find some time to add weekly challenges. The discord members will need to choose a team – The Giorgios vs The Felicies. I will make the game let the player select with whom he can play. Currently you can only play with Felicie if you find the Switcheroo curse in some crate. A weekly challenge will tell them on discord what they need to do (e.g. The team who finds most secrets wins). I will be tracking some stats in the game. And then aggregate all stats to know who is the winner. Sounds like a lot of fun (and work πŸ™‚ )

v0.5.5 Update – Discord Leaderboards

Discord Bot

So this week Pyramid Plunge has been listed on alphabetagamer (https://www.alphabetagamer.com/pyramid-plunge-beta-sign-up/) and that has caused quite a big surge on Discord.  There’s over 60 users now on the channel which is awesome!

As soon as I saw those players coming in, I decided to pause on everything, and add something to Discord to make hopefully make it more interesting to the players.

The game already had leaderboards for each difficulty of the single player (Tourists = Beginner, Returning Visitor = Medium, Badass = Hard). There’s also the leaderboard for Pyramid of the Day (which resets every 24 hours). And I thought … “wouldn’t it be cool if the player got some kind of recognition in Discord when they top the leaderboards?”. So that is what I focused on this week.

I created a bot (which I called Giorgio πŸ™‚ ), and through it you can query the current leaderboard status directly from Discord. Moreover, the bot will check if those in the top 10 should be given a title. So they would be shown under TouristsReturning Visitor or Badass according to the difficulty they played in.

In the case of Pyramid of the Day, only the first one will be recognized and highlighted in Discord as Pharaoh of the Day, and a crown will also be placed near his username. Of course this only lasts for one day πŸ™‚

There are instructions in this new build how to link  your discord in order for your scores to be recognized by the discord bot.

Multiplayer session with Judo Cruise Gaming (Youtuber)

Also this week I had the pleasure to record a multiplayer session with Judo Cruise Gaming. We used Parsec for this. Enjoy!https://www.youtube.com/embed/LassmCCs98s

v0.5.4 Update – Wishlist on Steam, Customize Keys & Trello board

Hi there…

Hope you’re all fine. Here’s a quick update of last week.

Wishlist on Steam!

I’ve prepared the page for Steam for now marked as coming soon Q4 2020. You can wishlist it here

The builds on itch.io will not be free anymore. BUT you can still be in the beta for free by signing up here.

Customizable Keys

I’ve been getting this quite a lot since the first builds … “I cannot customize the keys…”

Now you can πŸ™‚

In the pause menu you can customize the keys to your heart’s content.

Trello board

Also, you can now vote for tasks to be prioritized in a trello board. I migrated the tasks/bugs from my local todo list to a trello board. You can see it here: https://trello.com/b/fhkZsXV4/pyramid-plunge. So some fixes/features will have a link to the card directly to the trello board.

Quick Update on Online Multiplayer

Besides this minor feature, I’ve been busy as well on the online multiplayer netcode. So far throwing, killing enemies and arrows are synched properly. So online multiplayer is not in this build, but hopefully soon πŸ™‚

Release Notes

Here are the release notes for v0.5.4:

Added

Customizable keys https://trello.com/c/lU4le4Dp/89-remap-keyboard-buttons

Fixed

Fix #122 https://trello.com/c/1YNKIFyS/122-after-pressing-esc-to-pause-the-tutorial-the-w… Put the figure images on another layer on top of the backgrounds. Seems that after reactivating, their ordered is messed up by GameMaker.

Fix #19 https://trello.com/c/tando7Kw/19-when-whistling-cannot-be-hit

Fix #128 https://trello.com/c/ED7mBPJx/128-fix-for-stone-hitting-the-opponent-without-throwing-it

v0.5.3 Update – Explosions, Trails and Rainbows

In this release:

Pyramid Plunge Explosion improved
Pyramid Plunge Invincibility trail
Pyramid Plunge stones trails

Added

  • Added trail to stones
  • Added dash to thrown objects
  • Added rainbow trail when invincible

Modified

  • Improved explosion effect
  • Brighter ambient light (see screenshot & trailer in main game page)
  • Tweaked loot item chances for crates so more dynamite spawn
  • Tweaked camera shake (now using perlin noise and to be more in the y than in the x)
  • Explosions now throw objects away including coins and dead bodies

Fixed

  • Fixed collider of dynamite (was slightly big)
  • Fixed a crash when a dead body triggers an arrow and kills another enemy (deployed by player was assumed to be filled)

v0.5.2 Minor update (quarter damage, fixes)

Added

  • Added back button support for menu
  • Added Exit option in main menu
  • Infestation roll sound effect
  • Support for partial damage, with hearts now having 4 quarters. Support for partial damage, with hearts having 4 quarters. This was done as it was a bit stupid that in 2p, the opponent cannot damage your friend (as she would be killed pretty quickly). So instead now this is introduced, so that throwables damage you by one quarter, while enemies, boulders, arrows, etc damage you be 1 whole heart.

Fixed

  • Dead bodies should be behind pickups
  • Switcheroo ghost should not chase exited players
  • Fixed issue with some pingponging animations
  • Fixed pivot points for Felicie swimming as it was very jarring when flipping direction
  • Draw friend avatar in multiplayer according to chosen color
  • Fix for multiplayer where player can pickup opponent friend while she’s climbing up the rop, causing a bit of a glitch
  • Do not allow to deploy explosives at edges of level
  • Fixed depths of characters when switcherooed

Modified

  • Tweak to tutorial so bomb part is easier
  • Improved exit animations
  • Chest can be flipped horizontally randomly in level generation
  • Tweaks for pause menu
  • Do not decrement flood timer when exiting the level
  • Tweak so you can steal back your stolen friend while being carried (As previously you had to be above the other player to steal back your friend)

v0.5.1 New Theme and Multiplayer improvements

It’s been a couple of long months with the pandemic lockdown going on. Nevertheless I found something on what to focus on – Pyramid Plunge!

This update is pretty huge and here’s a rundown of the biggest changes.

New graphics for the Egypt theme

I wasn’t happy with how the Egypt theme was looking which is the first theme players will be playing. So I experimented a bit with different color schemes and settled on this:

So the Egypt theme is almost complete. Need to create an improved Boss graphics, as for now the same graphic as the mummy is being used. I’ll be adding an evil Pharaoh kinda vibe to the boss where he will be getting angry and scarabs coming from his mouth, as well as farting spiders.

A New Theme

When killing the boss level of each world, a new theme will be used. There will be four in all, and the next theme to be implemented was the Mayan/Aztech theme. It’s still a WIP and the boss for this theme has not been implemented yet.

Switcheroo

You can now play as the female character. It’s pretty hilarious seeing thin Felicie throwing fat George against an enemy! Controlling Felicie will only happen when you find a Switcheroo ghost in a crate, which will hunt you down and if it comes in contact with George or Felicie, they will get switched. This “powerup” was quite hectic to implement especially with all the animation frames that had to be done, so you could control Felicie, and have George act as the one needing all the help. Surprisingly there were more animations for George to be done.

Multiplayer

I really believe multiplayer mode in this game is a lot fun. I know because I play it with my kids and it gets hilarious very quickly. If you’re not careful, your opponent can take your Felicie and put it on a trap to get hurt and subsequently killed. You can throw anything at each other, and if you get hit, half of your coins get thrown out. This results in some crazy action where if someone got a lot of loot from the level, the other opponent will try to hunt him down to steal from him. You can see some of this action in this gameplay trailerhttps://www.youtube.com/embed/PG8OAEEcE58



Implementing multiplayer correctly is tough. I’m trying to get some help on this as I got stuck back in November. Meanwhile Parsec can be used which is free software for 60fps online coach multiplayer. It’s pretty amazing at what it can do! I tried it with a friend of mine, and it was butter smooth and pretty lag free.

Secrets

This has been put off for a long time. I always wanted to have some sort of secret in the level. But I couldn’t nail down an easy way how to implement it which would make sense also in a multiplayer game. I finally found an easy way how to add secret. Randomly, on murals, there will be a specific spot which if hit by some thrown object, it spews out a number of coins. It’s quite satisfactory to hit jackpot, especially in a multiplayer scenario

New Music for Jelly-fish time

In multiplayer, if you exit the level before your opponent, the flood is triggered and you can control a jellyfish to hunt down your opponent. Initially I had made the jellyfish remove 1 heart to the player on touching them, but that was too punishing. So Instead I made it that you would be just zapping your opponent if you touch them, and so decrease his breath since he’s under water. The jelly fish isn’t as fast as the human player, and so he has to be careful how to control the jelly fish to continue zapping and annoying his opponent. This adds another layer of fun in the multiplayer

Give Up option in multiplayer

Sometimes a good opponent will take all the loot and exit. There isn’t any loot left so the only option was to die by the hands of some enemy or let the flood come up and remove all  your breath. But that was killing (pun intended) the fun. So now there’s an option where you can give up by pressing the shoulder buttons simultaneously.

Make sure to check out this update as it’s a lot of fun. And I encourage you to try out Parsec with a friend to get a laugh.

Update #4 on Multiplayer

This week’s focus was on lag compensation for carrying objects. However I got stuck with delay when throwing an object.

When the player is carrying something (including the Felicie), the item is switched to skip interpolation, meaning that it is not part of the 100ms lag of other objects, so it appears responsive. The problem arises when the player throws the object. There’s a delay between the sending of the throw command and  the first server response showing the result. The 100ms lag compensation delay induced when switching off skip interpolation was subdued by recalculating from the render tick (which is 100ms in the past) to the present tick and also sending them to server. But there is still the transmission delay.

Something I will be working on next week is trying to get rid of this delay by letting the remote player simulate the throw similar to how we’re handling input prediction. For input prediction we are 

  • doing the player movement simulation, 
  • sending the keypress together with the x,y coordinates as calculated by the remote client to the server (and keeping track of the position and the current tick)
  • the server replies with its own calculation according to the keypress
  • the remote client verifies if its calculations match with the server and if it doesn’t it will correct the position.

We need to do something similar for the throw. The only difference is that no keypresses are done