Latest Entries »

My friend and I have decided to build a title for the Playstation Vita. Knowing C# and XNA, I thought it would be a good experience to dig deep into the PSM SDK and the Game2D framework. There have been some struggles and frustrations getting up and running. We’re not certain that we’ll ever finish but we figured it would be fun to document the process. The dated sections here are going to be in reverse-chronological order (newest first). Enjoy!

10/3/13
I fixed up some issues with collision detection and set up a fun scenario where tons of birds are attacking the hero.

10/2/13

It’s been a couple months since an update but there is a lot of new logic in place. The game now has it’s first enemies. Each enemy is written as a separate class that implements it’s own specific behavior. For example, an armored guard will run directly at you if he sees you. If you change direction then he follows closely behind, changing direction as well. If a bird sees you he delays for a moment, chooses a flight path, and dives at you very quickly. Each of these enemies are spawned from a spawn zone that is defined in a file that parallels the World Map XML. Any enemy listed in the spawn file references a global Enemy Repository XML which defines the parameters necessary for enemy creation. The second half of the video is shown with the Debug_DrawAll directive active. Specific logic was added to check for this directive and draw additional boxes that show where the Collision and Vision areas live. You can see that when the hero enters the vision of an enemy, their attack behavior is activated. When an enemy’s collision box runs into another collision box, it is not allowed to pass through.

8/6/13

Things may not look much different, but behind the scenes a World Map framework was implemented along with the ability for a character to walk from one area to the next. The PSM SDK Game2D Director is utilized to replace the current scene with a new instance of the same scene with different parameters. Map textures, NPCs, and various other map-specific parameters are loaded dynamically from a global World Map XML file. Updates were also made to the camera so that it will not longer scroll past the edge of the map, making for a much cleaner viewport into the virtual world.

7/27/13

In order to get NPCs to speak, we needed to figure out a proper object model that could be queried at runtime. The NPC dialog scripts are loaded along with the map and associated with the corresponding on screen characters. It’s starting to look like a real town!

7/24/13

We are using the Tiled format for building maps and the this video shows a Tiled map with a freely roaming NPC loaded from XML and a main character with full animation sprite running at 60 fps. It took a considerable amount of time to understand how to load this map without negatively affecting performance.

7/15/13

The first task is understanding the development environment and getting some animated sprites on the screen. This is a boring video that shows progress after only a couple days of development.

Comic RPG – Episode 1 is the latest Windows Phone game in the works from Rehlander Technologies.

Follow our hero through a journey of good vs. evil. Stop the Evil Tyrant Mostron from eradicating all of the people of the planet Mousington-5. Mostron plans to use a genetically altered strain of catnip to destroy the primary food source of the Mousingtonians. Fight along side of your sharp shooting friend Notch to destroy Mostron and save the world.

Comic RPG – Episode 1 has been in development since May 2012 and is planned for release in early 2013 on Windows Phone 7. Following the initial release versions will be made for to Windows 8 RT, iPhone, and Android. These version are all planned as a mid-late 2013 release.

Shake the Apple Tree is a fun game for people of all ages. Farmer Joe has given you the task of collecting apples from the tree out behind the barn. Collect as many apples as you can in the time alotted to get the high score. Golden apples are worth more points and can increase the time you have left. Avoid the apples with worms in them or you could lose the game.

Game Play Video

Shake the Apple Tree is brought to you by Rehlander Technologies. Check out additional images from the game below.

I have been writing more and more apps that need to pull data from the Cloud. These apps are at the mercy of the API that is provided by the cloud service. JSON.net is an invaluable tool that has helped alleviate a lot of the annoyance associated with pulling data over HTTP. In this post, I aim to show you the routes I took to standardize some annoying XML for use in a Windows Phone 7 application.

PHP XML->JSON for WP7

This application needs to pull an XML formatted menu that is published weekly for a college campus cafeteria. The XML format is not one that I would have personally used. To make it an appropriate format, I decided to write a PHP script to deserialize the XML and re-serialize it into JSON. One immediate advantage of parsing the XML and reformatting it is that a change to the third party format, although breaking the app temporarily, would allow me to make a fix on the script level rather than having to recompile and redeploy the WP7 app to all my current users. This parsing only required a few lines of code using PHP5′s built in serialization tools.

JSON Output for WP7

With my data now in the format that I want, I can focus attention on the Windows Phone 7 (WP7) client.

JsonNet C# WP7 nuget

I pulled down the latest JSON.net package using nuget in Visual Studio.

Web Request wp7 JSON

Then I created a class to handle all data transactions. I called this the DataGrabber. It essentially makes calls asynchronously and stores the result in a collection that can be retrieved by the consumer(s) of this class. When the request finishes, the result is parsed into a C# object created using JSON.net and an online JSON->C# object creation tool. This tool is incredibly handy and can be found at http://json2csharp.com/. A callback is fired once the deserialization is complete and allows the consumer to retrieve the data using a unique request identifier provided in said callback.

The consumer can then set the ViewModel property by farming the data required out of the request’s return value. With a bit more work and some UI polish a Pubcenter ad can be inserted and the app is ready to be posted to the WP7 Apphub!

It’s been about 4 months since my last post on WP7 monetization so I wanted to give an update to those who are interested. I made my last post around the time that I submitted my second app called Let Er Ride. It is a card game which is a casino poker variant played mostly in the US. My previous app is a utility shopping list called EZ Shopping List. Both apps are free and are monetized using Microsoft Pubcenter ads. Following are my results for both apps that I have on the market.

First up is a graph showing the eCPM for both applications over the last 4 months. I can’t explain the massive fluctuation that is seen at times. My best guess is that Microsoft has been trying to refine their algorithm for determining eCPM. As this image shows, EZ Shopping List has a much higher eCPM than Let Er Ride. My theory is that eCPMs are probably higher because I have a targeted demographic of those who are shopping for grocery items. It would be more desirable for advertisers to serve impressions in a shopping app than a game. EZ Shopping List eCPMs hover at about $1.50 whereas Let Er Ride is much more consistent around $.05-$.10.

Combined eCPM WP7 Monetization

Next is a graph of the number of impressions for EZ Shopping List. EZ Shopping List is much more popular than Let Er Ride with a large amount of fluctuation hovering around 150 impressions a day. See the graph below for a nice view of the numbers.

EZ Shopping List WP7 Monetization Impressions

See also the number of impressions for Let Er Ride. I would say that you could call this app a flop. The first month there are a decent number of impressions. This is due to the app being listed in the New section of the marketplace. Without marketing, the only place people can find your app is in the marketplace itself. If you do not make the leap from the New section to the Top section then your app is likely doomed to fail (especially given a lack of marketing efforts). One region to note here, however, is the second week in October. Here the app was released with an update. An update to your app is like free advertising. Anyone who has your application on their phone will see the update and some of them will be curious to see what was actually updated. This is a good lesson learned from an app that really had no other value.

Let Er Ride WP7 Monetization Impressions

The next graph shows my actual revenue from both apps. Given the low impressions and low eCPM, you can see that Let Er Ride really doesn’t make any money. Daily revenue from Let Er Ride is consistently under $.05. I do wonder if the low number of impressions translates to a low eCPM. I haven’t done much with the actual ad units, but I suspect that with some tweaking I could increase the eCPM slightly. However, EZ Shopping List provides a consistent revenue stream with spikes at over $1.00 a day. The fluctuation in revenue is due solely to the fluctuation of eCPM. Revenues for the most part have stayed somewhat consistent from $.25-$.50 a day.

Combined Revenue WP7 Monetization

The last graph I’m somewhat disappointed to post because I’d like these numbers to be much higher. It provides a good view into the total amount of money I have made over the past 4 months. The top shows the total number of impressions for both apps. The bottom shows the total amount of revenue. With only ads for monetization and no outside marketing for either app, I have made a total of just over $30.00 in 4 months.

Total Revenue vs Impressions WP7 Monetization

In conclusion, I don’t really have a large number of impressions for my apps but I do have some tangible revenue. I can pay off my $100.00 a year fee to Microsoft at least. I have just submitted a new game called Shake The Weasel and I plan to monetize it a bit differently. The plan is to release it for free and switch to a $.99 price tag after I get a few thousand downloads and some reviews. I have implemented some Facebook integration as well and some fun hooks to keep people playing. Look for my next post on monetization results for this technique. Thanks a lot for reading! Please follow me on Twitter at @scottrehlander and don’t forget to support indie apps!!

Shake the Weasel is the greatest casual game to share with your friends, family, and coworkers. See who is the best at Shaking their Weasel. Fire up the game and start a quick match. You have 15 seconds to shake your weasel as hard as you can. If you are feeling particularly randy you can challenge your friends to the marathon mode where you have to shake for 60 seconds. Give it a shot, it sounds much easier than it is.

Once you have finished shaking your weasel you can submit your score to the online and local leaderboards. You can also brag to your friends on Facebook telling them how well you Shake your Weasel. Facebook stats include the total shakes and how many times you can shake your weasel per second. Try having a few drinks and passing it around the room, it is sure to be a big hit.

Update 1.1:

-Due to popular demand, the High Scores view now shows the top 50 in each category.

-The background for the Shaking View has been updated to the Weasel’s home habitat.

Game Play Video

The Marathon Tripod with Transition to the Tired Two-Hander

Little Stroker to Long Range to Tired Facial

Shake the Weasel is brought to you by Rehlander Technologies. Check out additional images from the game below.

If you run into a scenario where you need to use a WPF behavior and you want to inject it right into your XAML, you may have some difficulty. I have no explanation as to why the designer can’t load when I add a behavior to my Grid, but it happened and I lived with it for the longest time.

I have a behavior that I am attaching to a grid to make it draggable across the screen. See the first part of the behavior definition here:

WPF Behavior Definition

Fairly standard stuff. This utilizes some of the framework found in the Microsoft Expression Blend Interactions Assembly. So we add all the necessary references and namespaces to our XAML then go ahead and add the behavior to our Grid. See it done in the following picture.

WPF Designer Behavior Error

This breaks our designer! The application runs fine and the behavior works as expected, however the designer tells us “The type ‘local:DragBehavior’ was not found. Verify that you are not missing an assembly reference and that all referenced assemblies have been built.” This is not the end of the world, but we can no longer visualize our XAML as we write it. My solution was to comment out the behavior to make the changes necessary then uncomment it again before I debugged. That was annoying.

We don’t need the behavior during design time so why not just add it in the code behind in our constructor? I’m the developer and I’m making the UI, so why not…

To attach a WPF behavior to a UIElement in the code behind you need to utilize the Windows Interactivity assembly. Just make the following call (legendBezel is the name of my WPF Grid – DragBehavior is the class I defined for the behavior):

I have been experimenting with ad-based applications exclusively due to the advice of Elbert Perez over at OccasionalGamer.com. I want to share some of my stats with you so that you can learn from my experiences before you start using Microsoft PubCenter for your Wp7 Apps.

My first application was EZ Shopping List. It is a simple application that allows a user to add free-text items to a list box. They can then be simply removed by pressing a “x” that is located on the right side of the item. It really doesn’t do much more than that, but was one of the first Shopping List apps on the market. It has since been updated a few times and is more user friendly with more features. I want to share with you my pre-ad download counts.

Ez Shopping List Downloads Before Ads

As you can see by the chart above, downloads took off out of the gate with a range of 25-85 per day for the first month or so. I think we can attribute this spike in downloads due to the list being in the “New Apps” section of the marketplace for an extended period. The “New Apps” section seems to be the place that you can do the most damage with your app. If you are releasing a new app, think twice about how polished it is before put it in for that initial submission. The better it is at the beginning, the better chance you will have for more downloads and a chance at the “Top Apps” section. When analyzing the chart further we see that after the first month the daily downloads drop dramatically and even out a bit (with a bit of a downward trend). I can say this probably occurred because a number of other shopping list apps came out at that time and I had no desire to update mine to keep up with the competition. This was still pre-ads, so I had no real motivation to keep up with it.

Around the June 2011 timeframe I looked back at my cumulative numbers and was surprised to see that I had about 2,700 total downloads. This was much more than I had expected for such a simple app. I wondered if there was any way I could capitalize on this. I had been following Elbert Perez’s blog for a bit and decided to experiment with ads. I signed up for a Microsoft Pubcenter account and started the update process. I linked the EZ Shopping List App and created an Ad Unit in pubcenter. I then used Microsoft’s Silverlight AdControl to host the ad. Following are the numbers I have seen since.

Ez Shopping List Downloads After Ads

Ez Shopping List Revenue 6-9 to 7-27

Ez Shopping List Impressions 6-30 tp 7-26

You can see by the graphs that I’m getting a good range of impressions from 125-270 a day. I’m not sure how this compares to other apps out there but it made me relatively happy. This range of impressions was yielding about $.15-$.40 a day. This seems pretty good for getting $0.00 the months before. I haven’t seen much of a drop in revenue since I first posted the ads.

Since placing ads on EZ Shopping List, I have also created a card game app called “Let Er Ride.” It is a Let It Ride clone. I chose to make this game because my wife loves to play it and there wasn’t much competition on the marketplace. It took only a few nights to make it using Silverlight. I’ll jump right in with my download stats out of the gate.

Let It Ride Downloads

And my Impressions.

Let Er Ride Impressions 7-18-7-26

And Revenue.

Let Er Ride Revenue 6-9 to 7-27

This app follows the same download pattern as EZ Shopping List. There is a huge boost right away due to it’s presence on the “New Apps” section. I was gettting over 200 downloads a day for the first couple days and dropped quickly to under 100. This game has only 5 days of downloads stats, but has 496 cumulitive downloads. This is great compared to EZ Shopping List, but it’s eCPM is much less for some reason. If I figure out why, I will update this. Impressions evened out to about 400 a day after the initial spike yielding about $.15-$.35 cents a day. Twice the impressions as the shopping list, but the same payout. I don’t yet understand this figure. Lastly, I will leave you with my grand total numbers so far.

Grand Total

As you can see, I have been experimenting with Ads since mid June (about a month and a half). I have almost 12,000 total impressions and have made $17.60. I have seen eCPMs much higher than mine (which is $1.48) so I am on a mission to find out how I can increase that number. Thanks for taking a look, I hope some of this info helps you out on your journey to Wp7 monetization!

I was all excited to submit my first update to my Let Er Ride Wp7 app just to be met with total and utter frustration. Usually the Wp7 AppHub submission process is relatively good. Every once in awhile you run into something a little out of the ordinary though. This time I met a roadblock immediately upon submission of my .XAP. Let Er Ride was an app posted just before the new AppHub updates. It looks like the new AppHub looks for some more attributes on the assembly than the previous did.

Step 1: Submission of the App fails due to the NeutralResourceLanguage Attribute not being set.When I tried to submit the app I got the error The [NeutralResourceLanguage

On submission of my XAP it says The [NeutralResourceLanguage] attribute is missing on the entry assembly. (2003). Googling the error and digging through some forums showed me that I need to set this attribute on my Project.

The Properies for the Assembly of My Wp7 Project

I got to this Assembly Information screen by right clicking on my Wp7 Project in Visual Studio and clicking on the “Assembly Information…” button. If you don’t see it right away, it is under the “Application” tab. The problem is evident here. The “Neutral Language” is set to “(none).”

Naturally I would choose English (United States)

Being from the United States, it seemed to be a no-brainer that I should choose that option. Unfortunately this is -not- correct. Since I had already submitted the app before language-agnostic it gives me another error.

App cannot be submitted because it doesn't support enough languages!

Upon submission I was met with another error: “An update cannot support fewer languages than the previous app instance supported. (1047).” Now I’m thinking, “oh snap am I going to have to delete my app completely and resubmit the whole thing rather than update?” Luckily, no.

Select the base "English" selection.

You need to select the base “English” selection in the “Neutral Language” combo box. I did this, recompiled, resubmitted and all was gravy.

Success!

And finally we have a submitted app. Now let’s pray that it passes the testing procedure! Be sure to check out my app “Let Er Ride” if you have a Wp7. A good rating is always appreciated.

Let ‘Er Ride is a casino variation of poker where the player wagers on the five-card poker hand formed by their own three cards and two community cards. Let It Ride is played at a relaxed pace relative to other casino card games, which has made it attractive to all players and to table game neophytes.

If you like this game please give it a good review. Please help support Indie Game Developers to keep mobile games free!