Gamieon is a one-developer part-time studio focused on creating video games for the desktop and mobile platforms. Since 2010 Gamieon has developed and released six games as well as six more prototypes. Including beta distributions, Gamieon's products have netted a combined 300,000 downloads! Below this bio are images from all my games and prototypes. Check them out and don't forget to follow me on Twitter @[Gamieon](members:gamieon:321769)

Report RSS "Paper Cowboys" personal Almost-Game-Jam: Hours 1-16

Posted by on

I've spent the past decade developing games in my spare time (which I don't have much of) with unique game play that aren't side-scrollers, first-person shooters, RPG's, MMO's; and aren't even multi-player. Recently I've been feeling the urge to just stop doing things that way, and just make a good old multi-player side-scroller before I burn myself out. My motivations are:

  • I want to see how fast I can make one by myself using only Unity and very limited amounts of third-party assets
  • I want to jump on the bandwagon of fellow developers who have made side-scrollers
  • I want to make just one game in under three months, and to have released one multi-player action game in my life that people might enjoy.

I decided during a recent hiking trip to do just that; I would try to make my own 8 player "Sunset Riders" game. However, as I'm still committed to finishing my other in-development game Dominoze, I'm putting a cap of a total of 48 hours on this project before I stop and re-evaluate my goals. The actual time will be spaced out for as long as I want (and I'm guessing I'll be done in mid-June).

It's like my own personal 48 hour Game Jam except I don't lose any sleep.

Depending on how it looks, I MAY register it as a new game on IndieDB...I'm really not decided on that yet.

Hour 1

Decided to do the easy part first: The main menu. I created a new Unity project with Photon networking support. I grabbed the main menu script and the game script from my other project Dominoze and stripped them down to the essentials. Found a font on 007fonts for the western text (but I might replace it later), and set the buttons and game list up. Also drew the sun, a cactus and some mountains in MS Paint.

There are two background layers; one for far-away stuff (mountains, forests), and one for closer objects like cactii.


Hour 2

Got the background to animate by using simple texture coordinate translations and repeating textures. The mountains move slowly and the cactii move faster. Also found a good song for the main menu on AudioJungle, and put together a horse animation by grabbing the first gif off the Internet I could find as a reference, and hand drawing every frame. Also spent five minutes playing with my cat.

Hour 3

Cleaned up the main menu (except for the lack of options menu which is another ball of wax). Then I created a new desert background and the basic character animation frames; after that started pondering level 1's design. Just shooting some random baddies in the desert would be rather boring, so I decided I'll need to start drawing some old western buildings; including some foreground elements between the player and the camera. I also need to finish designing the player controls. One thing I liked was the concept of an "Input Focus" interface where the game manager decides what screen element gets your keystrokes. Before I add new scenery, I should get the player walking around and also able to aim and shoot the basic gun.

Hour 4

The player can now spawn in single player-mode and walk forward and backward. The character has a rigidbody so I can leverage Unity's physics engines to handle jumping and falling. I also added the "gun arm" that will ultimately aim toward where the mouse is pointing, but that part doesn't work yet. I also spent a fair bit of time deciding where and when the player is going to spawn. I'll finish that up in an upcoming hour.

Hour 5

The player can now fire bullets from their gun which eventually fall to the floor. It's not much in an hour, but I had to go back and recalibrate the player animation frames so that they were properly centered; and then I replaced all of the Unity "Plane" objects with my own square mesh where a scale of (1,1,1) truly is (1,1,1) and with just four vertices instead of a ton. Next I need to tweak the bullets, big time. They look very small and they may need to glow with the player's color; in fact I'm thinking the player and gun need to be scaled up a little bit as well.

I looked back at why it took 5 hours just to get to a player shooting, and my answer is: 1. I made the title screen 2. I did all of the art from scratch (it still would have taken a while to import someone else's art though) 3. I needed time to think through an easily maintainable way to make things work. Adding new weapons and items should be very easy to do, and I should almost never have to change existing code to support new items after the first time. 4. This is not a waterfall development model. 5. I'm not going to get everything right the first time.

Hour 6

Cleaned up the bullet appearance and also got it working with a physics collider; problem is it collides with the player so it never gets anywhere. For now I'm making it a trigger until I implement enemies and physics layers. I also made it so the camera can't go backwards to keep things very forward-moving (though I have yet to force the player to not go behind the limit as well). I also added a crosshair to replace the mouse cursor. Finally, the player is more elevated on the screen so that I can properly render a dirt trail under them.

I'll probably use the next hour to add support for jumping and ducking...then I can finally start bringing in the enemies.

Hour 7

I made a crouching texture, and got jumping and ducking to work. The tricky part was trying to make it work smoothly...in the end I ended up constantly polling for keys being up or down rather than just watching for key state change events. Based on all the key states in a frame together (and the player's upward velocity), I would update the player's appearance. It could be optimized, but I'll do that later. I also made the camera Y fixed for now...I may later decide to have levels were players move vertical like on a mountain climb.

Now I need to figure out how the enemies will spawn...and respawn?

Hour 8

I spent a good 20 minutes trying to figure out the enemy spawning system (Should they just appear from the sides of the screen? Should they continually spawn from central points?) until I came to the realization that I was overengineering it. Deciding there was always room for improvement later, I ended up simply going with the "Spawn once from a pre-defined point" model. Then there's the matter of the fact it's a network game; a poor design could easily cause the same enemy to get spawned multiple times. Thankfully there is a variable in the photon library that defines a "master client."

My plan is this: If any player gets close enough to a spawn point, it will broadcast a message that it "got close enough." Everyone who gets it will flag the spawn point as "contacted," meaning if anyone else ever gets close to the spawn point, they will not post a network message. The master client will not only flag the spawn point as contacted; they will also spawn the enemy. This way, we
- Don't crowd the game with a hundred pre-spawned enemies just waiting for players to come around when the game begins
- Ensure each enemy only spawns once
- Minimize the network traffic needed to coordinate enemy spawning

In this hour I created a basic enemy prefab, an Enemy class and a "ThugWithGun" class (which is the simplest enemy); and got part of the way through writing the trigger logic.

I also added a few more cactii in the background...because I'm using a projection view, putting them at different distances from the camera gives an altogether cool effect as you're walking.

Hour 9

Finished the code to make the enemy spawn, and the enemy is stationary for now. There will be time later on to do more advanced stuff (like leaping in from the side of the screen, appearing from windows, maybe initially sitting down playing cards...) and I'd like to keep things simple for now. I also got the enemy to fire to the left in regular intervals, and made the bullets properly pass through other objects of their kind (enemy bullets pass through enemies, player bullets fly through players).

The next natural step is to implement the player and enemy dying; but I'm far behind in network testing. Of course it works fine for one player, but I need to try getting a second and third player in and make sure everything is synchronized.

Hour 10

Got a little accomplished in a long time. Everything in "offline" mode was hunky dorey, but as soon as I tried to play on a server, things went downhill fast. For one thing, I couldn't even host my own game. Turns out my anti-malware software was blocking my connection thinking it was malicious. Then I found that things that used to work "offline" don't work "online," such as calling PhotonNetwork.Instantiate with non-atomic variables (like passing in a component instead of a string or a long integer). I also learned that I was going about observers / synchronizations incorrectly...for example if I didn't own a rigidbody, I needed to make it kinematic so that nobody else's physics engine but mine would try to act on it locally.

I'm close to getting it working; just need to fix the enemy bullet color.

But it's all good because I'm carrying all this knowledge to my other project "Dominoze."

Hour 11

I studied some Photon scripts to learn how to handle player movements. It gave me a new perspective on things -- you have to design around components that may and may not be yours depending on the instance. You also can't bind key commands and player appearance/animation in the same function anymore because now you're at the mercy of the network engine for updating player orientation. A lot of the work in this hour was trying different things and then cleaning up some existing code to make it easier to read. What I have right now kinda works (except for aiming; haven't figured that part out) but I might do a little more cleanup to make it player smoother; I'm disappointed at the latency between the time I move a player and the time I see it move on another screen, but the game should still be playable in these conditions.

Hour 12

After eating a "keep at it until it works" cake with commitment frosting and frustration sprinkles, I'm much happier now because now the players and enemy properly spawn and sync, and I've started work on making enemies and players die. Lesson to the reader: If you're developing a network game, make your own little network sandbox game first, heavily comment it, and keep it around. You will learn a ton!

I also made the title screen look a little better.

I can't believe I'm already 25% toward my deadline...I'd better get in gear and slam down a few sodas if I plan on getting level 1 playable with scoring and loot drops within 12 more hours!

Hour 13

I cleaned up some existing code, and then added support for enemies and players dying (and apparently I need to hide the crosshair in the next hour). Now I just need to do respawning.

Hour 14

Got respawning to work. I made it so when the spawn timer expires, the player asks the master client to tell them where to respawn. If the master client is dead, then the player will respawn where the master client was when they died. Otherwise the dead player will respawn where the master client's character is. Also did a little more code cleanup / odds and ends, and made a new building. All my efforts are now for screenshot saturday on Reddit.

Hour 15

Got the second building done; and I even added a barrel as an obstacle that you can shoot! Also fixed a few little bugs I found along the way, and started working on letting the player jump onto ledges and started a third building.

Hour 16

There are now four buildings and the ledge jumping works despite being real slow and clunky. Right now you just have to press the Up command to get onto a ledge; but Down is already deserved for crouching so I need to re-evaluate the jumping key commands. I also brought a few more enemies and barrel obstacles into the scene although they're quite easy to kill if you just button mash your way around. Having enemies respawn might not be a bad idea.

Stay tuned for hours 17-32!

Check out my homepage and news feeds

And my projects!

Post a comment

Your comment will be anonymous unless you join the community. Or sign in with your social account: