Posts tagged ‘Sparrow’

Sparrow Beta Is Live!

Well that took longer than I expected, but finally, we got a playable version of Sparrow in the Windows Phone Store! Currently, it is hidden from the store because we submitted it as an invite-only beta to hunt down the bugs that we couldn’t find. We are planning to end the beta and release publicly once we are sure that we fixed all the reported bugs and balanced the game.

If you have a Windows Phone (7 or 8) device and are interested in testing the game out, let me know. Here are some screenshots from the beta:

 

 

 

 

 

 

 

 

 

 

 

We did a major change with the levels. Instead of having separate missions (which was taking a lot of time to create), we decided to start with a survival mode and procedurally generate the enemy waves. As you play the survival mode, you progress by upgrading your aircraft, switching to the next, more powerful aircraft if you don’t lose all your lives, pick up new weapons etc.

I do not want this post to be the ‘post-mortem’, I’m planning to write that after we release, so I will conclude with a few words about the beta. We worked quite a lot during the mayday and Orthodox Easter holidays to finish the beta version and I thought that’s it, now I can take a break for a few days… Wrong! We had to submit updates and fix bugs that were reported several hours after the beta was released.

There are 20 testers that have played the game and we got some valuable feedback. There were some performance issues, which I believe we finally sorted out and the game should run OK on any device. We still have to decide whether we should switch some effects that we do using the Mercury Particle Engine to ordinary sprite sheet animations to increase performance.

After we release on the WP store, we are planning to finish the Windows 8 port using MonoGame, and then depending on the popularity we will either continue adding more content or move to a new project which might not be a game, but it will probably have some game elements :). 

Until next time.

Advertisements

Sparrow Progress Report #2

Time for another short update on Sparrow. In this post I will briefly write about what I was working on in the last two weeks, and I’ll show you one of the four player aircraft that will be available in the first version.

Levels

As I noted in my last post, I started working on the levels two weeks ago. I am almost done with the fourth level, and I must say I am still not bored from testing and tweaking all those enemy waves. Compared to Aqua Guard, I’m having much more fun creating the levels for Sparrow.

The best part in creating the levels is definitely the boss battles (yes there will be several bosses to blow up!). I was having trouble killing the third boss, but luckily I gave it to a mate, Aleksandar (he worked with me on Aqua Guard, you can check his blog here) who killed it without losing a single life. This proved two things: I suck at my own game 😦 , and I must give early test versions to other people before I come up with any conclusions.

I kinda shot myself in the foot when I was asked in a TV interview (during the crazy local media coverage) about how many levels we planned for the first version. Even though we hadn’t decided yet, I said 10 levels, so now we (read that as I) must create at least 10 levels.

Background Tiles

In the first week of February my brother was working on several enemy aircraft and bosses. I believe we ended up with some nice sprites even though this is the first time he is doing pixelart. Few days ago he started drawing some background tiles, and I like where things are going. I will post a screenshot soon; maybe next week.

In the WOWZAPP build, we were using a full texture for the background which used a lot of resources and you could notice slight FPS drops at times. So now, I had to write some code for tile drawing. First I browsed  the net for open-source level editors where we could quickly use the tiles Alpay created to create backgrounds for the levels. We are now using Tiled which has everything that I needed. It saves the levels in a nice XML file which can easily be parsed.

Alpay is drawing 16×16 tiles and because WP7 has a resolution of 480×800, that means 1500 tiles are drawn on screen at any given time. At first I was stuck with updating the positions of 9000 tiles (6 full screens) which was an OK number and not causing FPS drops. If I increased the number of tiles, I encountered drops in FPS. Then I came up with a simple solution of first loading all the tiles during a loading screen to an array, and then using another array of 1530 tiles (one full screen and one row of 30 tiles just above the top) which was used for drawing the tiles. Now, I only have to update 1530 tiles and check the position of the last row. If the last row is out of the screen I extract the next row from the big array that contains the whole level. Now, I can load a lot of tiles (tested loading 72000, worked without any FPS drops) without the need of updating the ones that are off screen.

Collision Detection

I first decided to go with per-pixel collision on Sparrow, but as soon as I reached Level 3 where I increased the number of objects on screen, I encountered FPS drops. I tried optimizing it by checking every other pixel, but no luck. I narrowed the issue down to a certain Texture2D method, GetData(). Apparently the FPS drops happened when I was extracting the color values from the textures. I was even using collision rectangles (extract only the area covered by the rectangle where the intersection between two sprites happens) rather than extracting the colors of the complete textures.

I was definitely not going to decrease the number of objects on screen, so I decided to return to rectangle collision, but a little more sophisticated one. Now I am using Rectangle arrays for each object that contain several rectangles to cover the objects. For example, I can cover the Su-27’s area with only 3 Rectangles. The performance drastically increased and I can’t notice any visual problems with the collisions.

Are we going to miss another deadline?

Hopefully, we aren’t. There are two more weeks until February ends, and we should have at least 8 levels until then. The menu screens might not be all ready by then, but temporary stuff shouldn’t be a problem when giving the game to several people for testing. If you have a Windows Phone and are interested in testing the game before it is released, let me know.

Rahim is currently working on implementing Scoreoid for achievements and score tracking. In the last two weeks he was also working on save states and menu screens for choosing aircraft, levels and weapons.

The Screenshots

This is a Su-27 Flanker which is a playable aircraft.

OK, I know I said I will only show one aircraft, but I really like how the Su-25 Frogfoot looks, so I must show you that one too. The Su-25 will be an enemy plane.

Thanks for reading!

Sparrow Progress Report

In the last few weeks, the media in Macedonia overhyped our WOWZAPP 2012 first place award. We were interviewed by a few TV and radio stations, internet news portals and our university even arranged a meeting with the President of Macedonia.

There were some hiccups along the way with false reports saying the game is already out, our team got hired by Microsoft, etc. We wasted a lot of time with these false reports, trying to contact the people who made them public so they can correct them. But, the media today is a complete mess, at least ours is. After few minutes of being mentioned in one place (in our case DW), a chain-reaction was started and the news article was already grabbed by few other news portals. I was pretty disappointed because when we were giving the interviews they said we will be contacted when the news article is done so we can check the validity of the information, but this never happened. So on one hand, the game got a pretty cool promotion in Macedonia, but on the other hand… the false reports… ugh. And, yes, the pressure is much greater now since many people are expecting an interesting game.

Enough about the media, the goal of this post is about the game itself and not the media coverage.

The Progress Report

After WOWZAPP 2012, we started refactoring the (ugly) code we wrote during WOWZAPP. In December, we had to focus on our university courses (and we were a bit lazy 🙂 ) so we did not do a lot of progress. We were planning to release a closed beta by the end of January (yes, that’s today) but unfortunately we missed that deadline due to several reasons.

Because Macedonian Developers are not yet supported by the Windows 8 Store, we decided to focus on the Windows Phone version of the game.

The code is fully refactored now and I am currently working on creating levels for the game. I am pretty happy that more or less the weapon and powerup systems are done and very flexible. I also implemented the Mercury Particle Engine for some nice particle effects. Rahim is currently working on setting up the high-score and achievements and he will then move to finishing up the menus and save states.

We also have some news in the art front. Abdullah decided to drop out, and now my brother, Alpay, started doing the sprite work. I do not have any in-game screenshots for you at the moment, but on the left you can see a helicopter that he created, which will be used in the final version of the game.

 

 

Beta Testing

We are planning to start the beta test by the end of February. If you have a Windows Phone (either 7 or 8) and are interested in testing our game (and pinky-swear to give feedback), contact me. I better get back and continue working on those levels before we miss another deadline. Thanks for reading.

Epic 48 Hours at WOWZAPP 2012 Macedonia

WOWZAPP 2012 was a worldwide hackathon where developers all around the world got together in specified places and developed Windows 8, Windows Phone 8 and Windows Azure apps. Thanks to Microsoft Macedonia, we also had the chance to participate in the first hackathon to ever be organized in Macedonia. Macedonia hosted one of the best WOWZAPP events with over 200 prizes for the participants. I would also like to thank the awesome sponsors like Domino’s Pizza, Neotel and Seavus Education and Development Center for not leaving us hungry or without internet connection. Domino’s Pizza for lunch and dinner for two days? Hell yeah!

My team created a 2D top-down shooter game that won ‘Awesome Windows Phone 8 Application’ and ‘Best Hackathon Application’. I also won the ‘Perpetum Coder’ prize for being crazy enough to spend the most time coding at the event. In this post, I will detail the epic journey where we started from zilch, and ended up going home with 2 Windows RT tablets.

Before the event

The hackathon was announced around the beginning of October so there was plenty of time to prepare the tools and experiment with them until the event started. From the start, I was sure that I wanted to create a game during the hackathon, but the main problem was finding a designer. Unfortunately, two of my teammates, including the designer, left the team to pursue other goals in life (get a job, concentrate on academic work etc.). Infinite Loop was now left with two programmers, me and Rahim Islamoski. Two weeks before the hackathon, Abdullah Alioski, agreed on joining the team and taking care of the sprite work that we would need for our game.

We decided that we will make a Windows 8 game with MonoGame. MonoGame is an open-source XNA port that works on many platforms, including Android and iOS. While Rahim worked on porting the Game State Management sample to MonoGame, I was working on a simple shooter prototype to refresh my XNA memory, because I hadn’t done any game development during the summer. I ended up with the prototype shown on the picture below within 4 hours, and Rahim managed to port the Game State Management within a day which solved a huge problem, menu transitions and tombstoning.

What does a black hole and my drawing skills have in common? They both suck.

After creating this prototype, we stopped working on the project until the hackathon. Where is the fun in attending a hackathon with a complete app or game?

Few days before the event I came across an interesting book – ‘Game Jam Survival Guide’ by Christer Kaitila. It was a fun read, and most of the things mentioned there happened to our team. If you plan to attend a 24 or 48 hour hackathon/gamejam/appathon, give it a read.

Two days before the hackathon, the organizers announced that two Windows RT tablets will be awarded at the event. This is where everything changed for us, the stakes were very high now. It wasn’t just fame, there was fortune as well. I created a Trello board and invited Rahim and Abdullah so we can finalize the features we planned to have in our playable demo for the event.Offtopic, Trello is a great, free web based tool for organizing your projects. Check it out at www.trello.com . Once we finalized the outline of the game, we were ready for the event. We really needed a tablet for our future game/app development.

Hours 0-12

We were so excited while on the road to Skopje that the three hour ride felt like 30 minutes. We reached our destination about 1 hour before kickoff. We set up our computer equipment and started counting down to the start.  15 minutes before kickoff the venue was almost full.

The event hadn’t started yet and we already were getting cool badges and stickers.

 

18:00 local time, the event kicked off with the first presentation by Dejan Dimitrovski, Microsoft Technical Evangelist. After putting the ground rules, all the teams got their first task, the marshmallow challenge. Out of 15 teams, only a few managed to build a tower from the provided materials. My team shared the, lowest tower height prize with several other teams, 0.00cm. After this challenge, everyone started wondering, ‘When are we going to start coding?’. That is when the first batch of Domino’s Pizzas arrived and the previous question was gone until we filled our stomachs with delicious pizza awesomeness.

After reducing our hunger level to zero, it was time to start doing the thing that people at a hackathon are supposed to do, develop apps and games. After seeing that the organizers brought a couple of Windows Phone 8 devices (the HTC 8X and 8S are gorgeous pieces of hardware), we immediately modified our plans. We decided to also create our game for Windows Phone. I started working on my first prototype while Rahim set up XNA and started working on the Game State Management for Windows Phone. During this time, Abdullah started working on the aircraft sprites and the background textures.

Few hours passed and at 23:30 we had our first prototype running on both Windows 8 and Windows Phone 8 with temporary sprites.

My code was a total mess that only I could understand. But, on events like these, the final product matters and not the code behind. Luckily, MonoGame and XNA use the same namespaces, class names and method names. Rahim did not have to spend too much time modifying or analyzing my code. I’m sure I would’ve spent the whole event explaining the code to him and end up with a crappy prototype if I had to explain how everything worked. The game logic was the same on both platforms, so Rahim started working on the input for the Windows Phone. We decided that using touch input would not be the best choice, so he started working on accelerometer input to navigate the player aircraft on the screen. During this time, I was tuning the Enemy superclass to make it easier for me to create various enemy types.

 

Around 5:20, zombie mode started kicking in. My concentration was slowly decreasing, but I decided to not drink any coffee or energy drinks. I hadn’t used coffee or energy drinks to stay awake until now, I wasn’t planning on changing that. Finally, after exactly 12 hours from kickoff we ended up with the following screenshot:

Hours 12-24

The organizers appeared in the morning with new prizes and breakfast. I unlocked my first Wowzapp achievement at 7:35.

After the quality breakfast, it was time to continue working on the game. Since we had not slept for over 24 hours now, our concentration was almost nonexistent. We spent this time to do simple things like animating the afterburners of the planes, fixing minor enemy aircraft bugs and the projectile placement on the player aircraft. I also wrote some randomization code for the background element to make the game more appealing. Moving the clouds and background elements immediately increased the quality of the game. With such minor changes, the game was much more exciting now. Abdullah started working on menu screens and buttons because he was extremely tired. We left the final power up animations for the last 12 hours, first we had to get some sleep.

 

In the afternoon, there was a fun ZAPP activity (the activities that did not involve developing apps were called ZAPP activities) where each team got in front of the others and created a short story based on a given image. After this activity, the organizers announced that there will be an app showcase around 19:00.

This is the part where I did a terrible mistake. I decided to work on implementing new weapons for the player. You shouldn’t do something like this when you are uber tired. The mistake was even bigger because I started thinking about writing more flexible code by using inheritance and what not so I can have some reusable code at my disposal. After the first hour spent on this, I removed everything I had and started over, forgetting everything about OOP principles, and spent another hour debugging the new weapon that I added. Even worse than this, Rahim was also having trouble tracking a bug in the menus and he also spent a lot of time until he finally fixed it. This was a huge warning sign –> “Get some damn sleep!”

At the end of the second 12 hours, we were ready to present our progress on our game to all the other teams.

After the presentation, many other participants congratulated us for doing a great job on the game. Many people liked what we showed on the projector. This boosted our morale that we needed for the upcoming 24 hours.

Hours 24-36

Now, it was definitely time to get some sleep. Abdullah’s hands started shaking, my brain was going nuts, and Rahim’s back was killing him. We had to miss some cool ZAPP activities like Pictionary and some Kinect action, but hey, 2 Windows RT tablets are at stake here. We went to Bojan Veljanovski’s apartment (kudos for the invitation mate) that was about 5 minutes from the hackathon venue. We decided to sleep for 6 hours and then carry on with development until the end of the event without more sleep. That did not turn out so well because I and Rahim ended up with 1 hour of sleep due to excitement. Luckily Abdullah slept about 3 hours, because he was the one that needed to drive us 180km back home after the event ended. I couldn’t help but keep thinking on how to complete the prototype in the next few hours before the final app showcase that was at 14:00 Sunday. We had 12 hours until then. Here is a list of what I needed to implement:

  1. Weapons for enemy aircraft
  2. Power up system
  3. Sounds and music
  4. Bonus: Make the enemies move sideways/diagonally on screen instead of disappearing at the bottom of the screen.

When we got back to the event venue, I was feeling really fresh, like I had slept for 8 hours. I started with the weapons for the enemies. I already had a shooting logic for the player so I used 90% of the same code. I had to add some randomization code to determine the time when an enemy fired. At this time, Abdullah kept giving me new sprites (power ups, UI icons, animated barrier etc.) so I kept going back and forth with the tasks just so he can see if it looks good in-game.

Next it was time for the power ups which was quite simple to implement. First we added static icons for them, but Abdullah decided it will be better if we animated them (scale up and down until player picks it up). When this was done, it was time to change the annoying ‘Fire’ sound I had used for the weapons. I feel lucky for not getting punched by some other participant during the test runs of the game because it was damn irritating. We did not have a sound engineer in the team, so I had to use some sound generator to quickly create some sounds. I used SFXR, a free 8-bit sound generator. Rahim was taking care of the music, and that is when we noticed that MonoGame still does not support the Song class, so we did not bother in putting music on the Windows 8 version of the game. When we entered the final 12 hours, we only had small tasks to complete and some overall polishing to do.

Hours 36-48

When I looked at the clock, it was already 9:00 and breakfast had arrived. I hadn’t moved from my chair for 5 straight hours. Time passes fast when you don’t encounter any major bugs or get stuck somewhere. I implemented the bonus feature mentioned above, but after Hajan Selmani, mentor at the event, play tested the game, he didn’t like it that much and suggested we change it back the way it was. We listened to the feedback and changed it back (apparently this move was rewarded by extra points for listening to user feedback when our app was judged).

 

Around 12:00, I was droopy again and I couldn’t look at code anymore. I decided to do some test runs, fix some minor animation drawing bugs on screen and around 13:00 we finished working on our game. We started counting down to the final app showcase that was going to take place in front of all the mentors (judges).

There were a total of 15 teams, which meant 15 apps. I was really surprised to see all the cool apps the other teams had developed. The judges definitely had hard choices to make when choosing the winner.

Our presentation went quite well. We had the final version installed on the Windows Phone devices, and that made us the only team with a fully working demo that was given to the judges to test. One of the best choices we did at the event was to develop for two platforms at the same time, Windows 8 and Windows Phone.

The presentations ended around 16:00 and now it was time to wait for the final results. The judges went to a different room to analyze all the apps and choose the winners. Many participants started congratulating us for winning the event, but I really liked what some of the other teams had made and I couldn’t say for sure that we won.

By the time the results came, I kept having frequent blackouts and I had almost no peripheral vision due to being awake for such a long time. The others where doing the usual gangnam style dance. They first started giving the minor prizes, and that is when I won the ‘Perpetum Coder’ prize for being the longest coder at the event. After getting the prize I realized I had coded for over 35 hours.

Next, it was time for the serious awards. The first one was ‘Awesome Windows Phone Application’ which we won. Things looked good, we had a chance to win the 1st prize. But right after this, another team won the “Best Hackathon Game’ award, and this is when I thought we will not be the winners of the event. The folks that created a point and click adventure game deserved to win the event as much as we did. The ‘Awesome Windows 8 Application’ was won by an app for journalists created by Bojan Veljanovski, Jasna Trengoska (former Infinite Loop designer) and  William Asiama Nyako. Finally, it was time to announce the 1st prize. One team would win 2 Windows RT tablets for their effort at the Wowzapp 2012 event. While announcing Dejan Dimitrovski kept looking back and forth to the teams that won the other major awards. While thinking about the game and whether we had messed something up, I kept thinking that we won’t be the winners. And then, I heard Dejan say “Sparrow!”