#30 Creating a Website
Welcome to the thirtieth devlog!
A few days ago, I published the latest major version of the game (version 0.3, with 13 levels). I’m very proud of it and hope you enjoy it as well :)
I also just uploaded a patch (v0.31), because I found a game-breaking bug and needed to fix that as soon as possible.
Because the holidays are just around the corner, I decided to take a little break from the game and postpone work on version 0.4 until after New Year. (Like everyone, I have family commitments, desperately need some rest, and think it’s always wise to take some time to get fresh ideas.)
Instead, I worked on some “peripherals” this week, which are:
- Creating a website for my game studio (which also includes a landing page for this game, of course)
- Working on the overall story and structure of the game and deciding the best direction to take from here. (This mostly resulted in resolving those annoying physics issues again, which I’ll explain in a moment.)
Where is the video devlog? Unfortunately, I'm sick at the moment and can't record my voice :( Well, not in a pleasant sounding way. So the video devlog will have to wait. Hopefully, I can record it later, because I really want to talk about the content of this devlog, as it's really interesting :)
Pandaqi – Indie Game Studio
Before I created games, I developed websites. As such, I always want to create my own websites from scratch, instead of using existing systems/providers/libraries.
This also has some other advantages:
- The website will be extremely small. I only need to code whatever functionality I need, and don’t need to include any external libraries, systems, etc. which all cause overhead.
- I get some more experience and practice with coding and design :)
- I can do unique/weird/innovative stuff, as I have total control over the website.
(Of course, there is the disadvantage of “you have to do absolutely everything yourself with no help”. But hey, a good challenge is a good challenge.)
After a few days of too much work and too little sleep, the website was done!
You can visit my official game studio website here: http://pandaqi.com
About the website
The website’s primary goal is to showcase my games and the general “mood” or “atmosphere” connected with my game studio.
That’s why I chose the following design:
- Big, wide images for all games. When you hover over the image, it even plays an animated GIF of the game (if available).
- As much elements as possible are wobbly/curvy/rounded. The transition between game images is a wave, there’s a wavy underline underneath headers, most buttons are rounded rectangles. (Why? Because this gives a soft and friendly vibe. Nevertheless, I also left many elements square and straight, because I don’t want the design to look childish or cluttered.)
- Colorful. Extremely colorful.
- I implemented a system that automatically creates a color palette from the dominant colors in the game images.
- It then uses these colors for the text/headers/button that overlays the image.
- When no image is present, it selects colors from a custom palette I defined in the code manually. This custom palette has 5 different color schemes that are as far apart as possible, yet still fit together.
- The result is that each page has loads of color, and even has different colors every time you visit the page, but the design remains clear and consistent.
Each game has its own “subdomain” on the website, which functions as the game’s landing page or home base. Because these pages are completely separated, I can style and structure them however I want, which allows me to create a unique design that fits the game.
(Whenever it seemed applicable, I did expose functions from the main website for easy re-use. For example, all landing pages still have the same footer as the whole website. It will save me a lot of time in the long run, connects all the pages (so visitors have somewhere to go once they’re interested), and keeps the website a little more consistent.)
Last but certainly not least, I added a mailing list. I’ve wanted to create one for a long time, as email is still my primary social platform, and I follow many other developers/games using a mailing list. I just never found a good place to put it.
At first, I wanted to code the system myself, but after some research I decided that would be foolish. Too many things to worry about, for too little reward.
I eventually put the free and open source PHPList on my website, which worked like a charm … after spending 5 hours pulling my hairs out because it just wouldn’t work :p
(Turns out my hosting provider uses a weird address for SMTP email. It’s usually something like “smtp.pandaqi.com”, but no, theirs was something completely unexpected.)
What makes this website unique
I always try to include at least one thing that makes the website unique. Not only to engage visitors, but also to challenge myself and make the design process worthwhile.
And so I thought: “What better way to showcase a game portfolio … than to make the website itself a game!”
I did some research and found only a handful of “gamified” websites. Most of them, however, were completely unusable. You had to play a platformer, grab a key, open a door, before you could even access the page you wanted to access.
I decided to push the game on my website more to the background. Eventually, I landed on a quest system.
- When you access the website, you automatically receive a quest. (It’s a small button in the bottom corner. Click on it to show/hide your quest.)
- The first quest you get is always “collect the pandas”. I’ve hidden 10 pandas all over the website, and you need to find them!
- Once you’ve finished that quest, you get a random new one. This can be specific to my website, like “collect the pandas”. But most of the quests are general ones: “go outside”, “give someone a hug”, “learn something new”, stuff like that :)
For every quest you finish, you get points. Those points don’t actually do anything, but that hasn’t stopped everyone around me from trying to find all those pandas :p It’s about the game, not the reward.
If you don’t want to participate, or need more information, there are also clear buttons for that.
In the end, I hope the website looks and feels like a fun place, and that it shows off my games very well.
At the moment, there are only three games. Which looks kind of sad. But soon enough, I hope to put some more projects on there and further fill the website.
Cool. Now talk about Package Party again.
As you wish! My latest playtests went really well, which makes me sure that world 0 (tutorial) and world 1 are as good as finished. (Gameplay-wise, not visually of course. Half of the assets are just default cubes at the moment.)
However, a lot has changed the past few months, which means my original plan for the game is wildly outdated.
For example, I had originally planned to start “multi-component deliveries” in world 2. The first level of world 2 would explain that from now on:
- Packages can contain up to four different components.
- To add a component, drop the package on the corresponding zone (for example, “The Wood Factory” to get wood) and wait 10 seconds.
- Of course, you can only deliver a package once all the necessary components are inside.
… and then it turned out that players already had difficulties with the easiest parts of the game, so adding this step in world 2 would be waaaay too difficult.
I’ve updated the plan to spread all the fancy mechanics evenly across all the 10 worlds. (Multi-component deliveries will probably appear somewhere around world 5.)
It’s still very much a work in process, though. To be honest: designing levels is hard. Even harder than I expected.
You want a good difficulty curve, but you also want a good challenge curve. Each new level must be fresh and challenging, but not too complex and overwhelming.
That’s why I constantly have doubts about introducing mechanics. Isn’t it too early? Or is it too late? Is this mechanic enough to keep players engaged, or do I need something more “grandiose”?
That’s also the reason why I want to take a short break over the coming month. I need time to generate fresh ideas and to find the absolute best way to structure the rest of the game. Of course, I’ll still be working on things and fixing issues with the current game/levels.
Talking about issues …
Physics – the bane of my existence
Trampolines should be easy, right? They’re the default element present in any game that has the slightest hint of platforming elements.
Well, guess again.
It took me an insane amount of tries to get them working, which is partly my fault, but also turned out to be a great learning experience about implementing physics.
My first implementation was something like this:
- Something touches trampoline?
- Apply upward force to this something
But there was a big problem: the force was inconsistent. Sometimes you jumped very high, sometimes you didn’t jump at all. (Why? Because the upward force would just be added to the current velocity of that “something”. Also, if something was falling very quickly, it could just get stuck in the trampoline or bypass the sensors.)
I fixed it with this:
- Turn trampoline into a RigidBody, instead of a StaticBody.
- But … disable all movement and rotation on all axes. (So it practically becomes static.)
- Now, because we have a RigidBody, we can monitor collisions.
- I listen to the signal “Body Enter”, which is when a body starts touching the trampoline.
- When that happens, I apply the upward force.
- (I also added a physics material to the trampoline and set “bounce” to 1. Just in case.)
Worked nicely, no more issues, no more getting stuck.
A few levels later … I jumped on a trampoline with packages stuck to the player.
(If you don’t know: at the start of this game, all players are automatically made of glue. This means you can just walk against a package and it will stick to you. This makes it very easy to get into the game and to carry packages without having to learn a button.)
My feet barely left the ground this time. Why? Because those packages made the player heavier.
I tried a bazillion different methods, until I figured out that high school physics formulas were all I needed.
- Instead of setting a “force” on the trampoline, I set a “desired height”
- Then I work backwards to calculate “which force do I need to always reach this height”
- When you look into this, the formula is actually quite simple: V = sqrt(2*g*h)
- V = velocity required to reach height
- g = gravitational force
- h = height we want to reach
- Whenever a player hits a trampoline, I determine the player’s weight. (By counting how many packages are attached.) I let the formula do its thing and BAM: trampolines reach exactly the desired height every time :)
This isn’t even the full story, but it’s the most important/interesting part I think.
(For example: in another level, I wanted angled trampolines. In that case, we don’t have a desired height, but a desired distance. That required a far more difficult formula, but it still worked flawlessly once I had figured it out. If you ever want a tutorial/explanation on that, just send me a message!)
It’s funny how I keep learning new stuff about physics as I develop this game. For example, a few months ago I tried to make a catapult, but just couldn’t make it work. (Even more problematic than trampolines, as you might expect.) A few days ago, I tried again, and got it working smoothly within five minutes.
Physics can be extremely annoying, but once you get the hang of it, you can do really nice things :)
- I have an official game studio website now: http://pandaqi.com Go check it out!
- Version 0.3 is available now. Go check it out!
- There will be no updates the next few weeks, as I take a break and create a plan for the next worlds. But no worries: I know myself, I can never just let go of something, I will probably still work on the game anyway :p
- (I’m also planning on doing some different content on my YouTube channel. Small side-projects, reviewing different game engines, that kind of things. If you’re interested in that, let me know!)
- Physics are weird.
Until the next devlog,
Get Package Party
Leave a comment
Log in with itch.io to leave a comment.