Assistant to the Lounge-Abouthttp://www.chadweisshaar.com/blog
The fun begins when you quit your day job.Sun, 26 Jul 2015 00:48:36 +0000en-UShourly1http://wordpress.org/?v=4.2.3Microsoft Windows Text-to-Speech for Unityhttp://www.chadweisshaar.com/blog/2015/07/02/microsoft-speech-for-unity/
http://www.chadweisshaar.com/blog/2015/07/02/microsoft-speech-for-unity/#commentsThu, 02 Jul 2015 18:42:55 +0000http://www.chadweisshaar.com/blog/?p=789I’ve made a wrapper around the Windows-only Microsoft Speech API for use in Unity. The Microsoft Speech API is a Windows COM capability that first appeared in windows Vista. It is an easy way to get text to speech in a windows application.

This post will go through the steps of making the C++ DLL and the C# behavior for Unity. If you don’t care about the “how” and just want to use the plugin skip to the end for the download and usage instructions.

The goal of my wrapper is to startup the text-to-speech engine when the game loads, and provide a function to speak a string of text. I’ll need this to run in a thread so that it doesn’t disrupt the main Unity thread.

Native C++

The first step is to write the C++ code that will initialize COM, manage a speech queue and call the Speech API.

Declare functions

I’m going to export three functions in the C++ DLL. These functions will be available to the C# code.

Init

To startup speech, I need to create a thread for speech to run in, initialize COM and create the Microsoft Voice resource. When it is time to shut down, I need to send a signal to the thread to free the Voice resource, then shutdown COM.

Since this code will be executing in the main thread and is modifying the shared speech queue, I need to use a mutex to lock the shared queue. The memory that I allocate in this function will need to be freed by the speech thread after the text has been spoken.

Speech

Finally I need to modify the while loop in the speechThreadFunc to monitor the speech queue and call Microsoft Speech to do the real work. I also don’t want to repeat the same text, because I often tie speech to button presses and don’t want to queue up a bunch of the same text if the user presses the button multiple times.

I’ve named my C++ DLL “WindowsVoice.dll” and I’ve put that DLL and this .cs file in Assets/Plugins.

Using the Plugin

Here is the visual studio project and code needed to build the WindowsVoice.dll. You only need to download this if you want to change how the speech queue works or need a 32 bit DLL. WindowsVoiceDLL

Here is the finished plugin with a 64 bit DLL and the WindowsVoice.cs behavior. WindowsVoiceBehavior

Instructions

To use the plugin, unzip the behavior file into <your project>/Assets/Plugins/WindowsVoice.

Create an game object in your scene to hold the behavior. This game object will be marked DontDestroyOnLoad, so you only need to put this object in your first scene. It is OK to include an extra copy of this in a second scene if you want. Speech will only be initialized once.

Use the static WindowsVoice.theVoice.speak(string) function to use the text to speech capability anywhere in your scripts. No need to worry about init or cleanup since that is tied to the life cycle of the game object.

IMPORTANT: You must build your game for 64 bit Windows. This plugin will not work for any other configuration.

]]>http://www.chadweisshaar.com/blog/2015/07/02/microsoft-speech-for-unity/feed/0Touch Table 7 Wondershttp://www.chadweisshaar.com/blog/2015/07/01/touch-table-7-wonders/
http://www.chadweisshaar.com/blog/2015/07/01/touch-table-7-wonders/#commentsWed, 01 Jul 2015 19:16:11 +0000http://www.chadweisshaar.com/blog/?p=781I’ve finished converting 7 Wonders for the touch table and PC. It is the first game that I have made with the Unity engine, so this was also a learning experience. I’m pretty happy with how the game turned out and with the Unity game engine.

7 Wonders is a game for 3 to 7 players. Everyone simultaneously chooses one card from their hand. Then everyone plays their card, adding the building to their city or constructing their monument. The players then pass the remaining cards to their neighbor. Repeat playing and passing till all but one card is played, then compare the military strength of neighboring cities and award points. Repeat all that three times and the game is over.

The best feature of 7 Wonders is how fast the game plays. Since everyone picks their card and plays at the same time, adding more players doesn’t change the play time much. It is also one of the few games that can play 7.

We haven’t converted this game before now because of the hidden information (players pick their card in secret). I decided to make this game for PC and tablet/phone so that the hidden information could be displayed on the player’s private device. The game is a bit better on a flat touch table than playing around a PC because the game relies on buying from and passing to players on your left or right. This is more intuitive when everyone is sitting around the table in front of their city.

To communicate between the computer game and phones, I used the Mongoose web server library to create a web server controlled by the PC game. Then I created a web page that the phones would display. The game serves up the web pages to the phones and uses websockets to communicate what should be displayed.

Here is what the web page looks like when the player is picking a card to play:

To build the web pages, I used a javascript library called React. This library helps with building dynamic HTML and updating that HTML with data changes. I really liked using React. It let me build up my webpage out of simple parts, it renders fast, and was fairly easy to develop and debug. I may do a separate post reviewing React.

Along with private information, another challenge was limited screen space. Over the course of the game, each player plays between 15 and 21 card. Displaying all the cards for all the players would limit me to 120×100 pixels for each card (the cards above are 700×150). And that doesn’t account for showing the player’s monuments, money, military strength and the scoreboard. So, instead of showing all the cards, I built a city view that is a summary of everything the player has done. Here is a nearly finished city:

The left side shows the resource production the player has built, their money, military and science. In the middle, I show all the other bonuses from cards they have built and a summary of the built buildings and free buildings for this age. On the right I show their monument. (When the player builds a stage of their monument, the bonus is drawn in the Bonuses area).

Building this city area was much easier in Unity than it would have been in Torque. I am using the Unity GUI system, and it has text and image elements like Torque did. But is also has a layout system that lets me arrange the parts of the GUI and animate easier. It also has vertical and horizontal layout containers that automatically scale their children to fit. Unity also has controls like checkboxes and scroll regions that had to be built by hand in Torque.

Here is what this player area looks like in the Unity hierarchy view:

This may look like a lot of stuff, but building this GUI would have been hundreds of lines of code in Torque.

Unity also has a concept of “Prefabs”. In 7 wonders, the player city is saved as a prefab and replicated for each player. As I am developing, I can make a change to one city and apply that change to the prefab so that it is replicated to all the players. It also lets me layout a card, or a row in the list of bonuses and create as many of them as I need during gameplay.

The final benefit of Unity is that all the code for game logic and controlling the GUI is written in C#. Torque uses a custom language called Torquescript which has a lot in common with Javascript. Torquescript was fine and had some nice features, but it was an interpreted language without strong typing. This lead to a lot more run-time errors. The C# compiler found a lot of these errors at compile time, and the Visual Studio debugger made run-time debugging easy.

The conversion of this game has improved gameplay compared to the physical game in several ways. Not only is the setup/tear-down instant, it is easier to see what your neighbor has in their city summary than by looking through all their cards. The game also tells the players how many VP and coins they will get for playing a card and highlights cards that can’t be built at all. This speeds up the final round a lot.

The game logic of 7 Wonders is pretty simple. It is probably the easiest of all the large games that I have converted. However, I spent a lot of time learning both Unity and React. Here is a summary of my time and lines of code written for this game:

Game

Script

C++

Other

Total

Hours

Yacht

2218

0

0

2218

?

Fire Platoon

4027

4697

1115

9839

?

Hansa Teutonica

4891

7107

0

11998

?

Le Havre

5117

0

1161

6278

150

Vegas Showdown

4209

0

110

4319

80

7 Wonders

3493

0

1570

5063

86

As always, the LOC counts aren’t really all that meaningful. C# code is “bigger” than Torquescript because it is more formal and declarative. But I save lines over Torquescript because of the anonymous functions, closures and Linq. This game had web code (like fireplatoon) and some XML to define the cities and cards. There are also a lot of “virtual” lines of code hidden for 7 wonders because I don’t have a good way to count the Unity GUI layouts. If I assumed the same LOC/hour that I had for writing the script code, the Unity layout code would be about 2450 lines. But a lot of the Unity time was learning, while I already knew C#.

I kept track of how I spent my time building this game, breaking the hours out by type of work:

I spent 12 hours building the graphics in Photoshop, 24 hours using Unity to build all the GUIs and run the game for testing, 34 hours writing the game logic and control code, 9 hours building the web pages and accompanying CSS and another 7 hours testing and debugging HTML code in Chrome.

The Supreme Court has ruled that gay marriage is protected under the equal protection clause of the 14th amendment, bringing gay marriage to the final 30% of the population.

It is interesting how gay marriage was accomplished and how fast it happened.
Support for gay marriage increased 2.5 percent per year since 2004, going from 32% support to nearly 60%. In 1991, when I graduated from high school, the idea of gay marriage was so unthinkable that pollsters didn’t even ask the question. The only poll done prior to 1996 was in 1989 and it found 12% of the nation in favor. In 1996, The Defense of Marriage act passed with 85% support.

In my opinion, the change has come so fast because of gay people telling their family and friends that they are gay. People needed to see “normal” people, who are also gay, to realize that we aren’t broken and want the same things from a relationship that they do. Here is a Gallup poll from 2009 to back up this opinion.

Never doubt that a small group of thoughtful, committed citizens can change the world; indeed, it’s the only thing that ever has.

-Margaret Mead

The change has certainly NOT come from brave leadership from politicians. The public stance of most politicians has carefully tracked opinion polls. Obama famously “evolved” to support gay marriage in May 2012. Clinton decided to support gay marriage in 2013, right after support in the general public crossed 50%. It is reasonable to suspect that both of them privately supported gay marriage before that (Obama signed a gay rights petition in 1996). But they certainly weren’t driving the change. They were just reacting to it.

There was one notable exception: Bernie Sanders. In 1996 he voted against the defense of marriage act. In fact, when he ran for governor of Vermont in 1972, his platform included the line: “Let’s abolish all laws dealing with abortion, drugs, sexual behavior (adultery, homosexuality, etc.)”

But I don’t think it would have made much difference if Obama and Hillary had championed gay rights. It could even be argued that it would have made things worse. If Obama had been pushing it, it might have become an entrenched political issue (like Al Gore and global warming).

I am happy the Supreme court decided to make gay marriage legal across the US. I do worry a little about a backlash against the ruling. But while it might have been better, in the long term, for the issue to have been resolved slowly state by state, it is certainly better to have it resolved now for the couples living in the holdout states.

]]>http://www.chadweisshaar.com/blog/2015/06/27/774/feed/0Violin Recital 4http://www.chadweisshaar.com/blog/2015/05/29/violin-recital-4/
http://www.chadweisshaar.com/blog/2015/05/29/violin-recital-4/#commentsFri, 29 May 2015 22:13:07 +0000http://www.chadweisshaar.com/blog/?p=764I am preparing for my fourth violin recital. I am going to be playing the second and third movement of “Summer” from Vivaldi’s “Four Seasons”. The “Four Seasons” is a very popular song, but people are most familiar with the first part of Spring. The part that I am playing is less famous, but still fairly popular. The “Four Seasons” is intended to evoke the seasons of the year in the listener, and the music even has little descriptive notes describing what is happening. In the second movement of summer, is is a hot afternoon and a shepherd is trying to sleep through the approaching thunderstorm. In the third movement, the storm has arrived and there is thunder, wind, and hail.

Here is a recording of me practicing for the recital. I have another week to practice, but I’ve already been working on this movement for five weeks, so this is about as good as it is going to get. I am playing at 92 beats per minute while professionals would play at 120 beats per minute. Some parts of this piece sound significantly better at full speed, and while I can play at nearly full speed, I make more mistakes. At the recital, there will be piano accompaniment which should help.

Edit (post recital): The recital went fairly well. We didn’t do a warm-up period; so the recital was shorter, but it was a bit harder to play without the warm-up session. I was a bit less nervous than at the prior recitals and played a bit better. This was the first year where I made it through the piece without having to stop to recover from a mistake.
I brought my camera along and got some video of some of the students to provide a feeling for what the experience is like. The final performance is by the teacher.

Edit 2: I was wrong about not improving much more in the final week. With another week (probably 15 hours) of practice I did get a bit faster and more consistent. I think that some of the tricky parts are a bit cleaner too. I’ve replaced the original practice video with on that I recorded the day after the recital. Sorry about the bad focus on the new video.

]]>http://www.chadweisshaar.com/blog/2015/05/29/violin-recital-4/feed/0Mongoose for Unityhttp://www.chadweisshaar.com/blog/2015/05/26/mongoose-for-unity/
http://www.chadweisshaar.com/blog/2015/05/26/mongoose-for-unity/#commentsTue, 26 May 2015 22:17:28 +0000http://www.chadweisshaar.com/blog/?p=753Mongoose is a C library for embedding a simple web server in another application. We used Mongoose for all of our web-enabled Torque games and I wanted to be able to continue using it for new games in Unity.

There is an existing extension called UniWeb which provides a web server in unity, but their code doesn’t support web sockets. I’ve just built Mongoose in windows, but it is Linux and Mac compatible as well. However, it wont support any of the mobile platforms.

This post will describe the steps for building Mongoose 5.6 as a windows native DLL, then wrapping it for use in C#, and finally including it in a Unity project.

To create a DLL from the mongoose source code available on github, I created a DLL project in visual studio, set it to 64 bit, and added __declspec(dllexport) declarations for all the functions I want available from C#.

The C# wrapper requires defining all the data types that are passed to the exported functions. There are two data structures declared in the C code which look like this:

Anything that is a char* gets converted to a string, unsigned short becomes UInt16, int is the same, but needs to be marked as I4 to have the right size. The void* pointers are converted to IntPtr which is the C# unmanaged pointer type.

Most of this is standard. I am using the StdCall calling convention and the Ansi character set since this is calling C code instead of C++. The mg_create_server function takes an event handler callback function and returns a pointer to the server. The C library manages the memory for the server pointer, but the event handler that the C# code creates to pass to this function needs to be protected from garbage collection.

Another bit of conversion code is required for any data that is passed to the C# code by pointer from the C code. Examples are the mg_get_option function that returns a const char* and the event handler that takes a takes an mg_connection*. This memory can’t be accessed directly by the managed C# code, so it need to be Marshaled (copied) into managed memory like this:

I wrote a C# class to wrap these functions and to do some basic connection management and provide default behavior. The wrapper class will keep a list of connections that are active so that it can detect dropped connections during the poll. I also abstracted away the mg_connection structure for most functions and just pass the client’s port number as the key to reference a connection. I also setup some defaults (no authentication, default error handling and serving up files from the local filesystem under a given web root). Here is the whole class is you are interested: Mongoose.cs (there is a tiny bit of Unity logging code, if you aren’t using Unity, just remove those lines)

Finally, to use this web server in Unity, I just had to create a behavior that starts, stops and polls the web server using the wrapper class. For default behavior, this code looks like:

Add this behavior to any game object and you have a webserver serving files from <Unity Application Dir>/web on port 8080. A little bit more code allows for websocket connection handling and communication.

]]>http://www.chadweisshaar.com/blog/2015/05/26/mongoose-for-unity/feed/0Jawbone Up3 reviewhttp://www.chadweisshaar.com/blog/2015/05/25/jawbone-up3-review/
http://www.chadweisshaar.com/blog/2015/05/25/jawbone-up3-review/#commentsMon, 25 May 2015 17:25:14 +0000http://www.chadweisshaar.com/blog/?p=746I’ve had a Jawbone Up 3 for two weeks. I’ve read some good and bad reviews, but they don’t describe my experience very well. Keep in mind that this is the first fitness tracker that I have used, so I can’t compare this to other trackers.

The band came with almost no instructions. If you pull up the cardboard lining in the box, there is a slip of paper with a URL to some very simple setup steps. Beyond charging the band and installing the android app, there really isn’t any setup to do.

The band itself has no display and is fairly small. I think it is less ugly than some of it’s competitors, but it is still clearly a fitness tracker. The band is very comfortable. I am picky about things on my wrist, but the UP3 is barely noticeable. It stays in place without being too tight and hasn’t caused any itchiness. It took a couple of days to get used to the latch mechanism, but now it comes on and off quickly and has never come unlatched on its own.

The band comes with a short and proprietary USB charging cable. The cable attaches to four pins on the inside of the band. There is a magnet to keep the band in place. Other reviews have complained about the charger being hard to connect. I can see why they had problems: the magnet can make it feel like the band is connected even when it isn’t. And the band must be facing the right direction to charge. But there are indicator lights to let you know when it is charging, and if you pay attention to put the band on facing the correct orientation, it is pretty easy to link them up.

The battery in the band is supposed to last five days, and that seems accurate. I charge it every day while I shower (it is waterproof enough to shower with, but I’d rather not), and that 10-15 minutes per day is keeping it charged.

It connects with my phone via bluetooth, and the connection with the phone has worked flawlessly. The band sends data to the phone whenever I bring up the app. If it has been a while, it can take up to 30 seconds to finish the sync.

The phone app is how all the data is displayed and also how the band is controlled. The only thing that you can do with the band directly is switch between sleep and awake modes. This is done by tapping the band twice and then pushing the front till it switches modes. Some reviewers have complained about the difficulty of getting the taps to register, and it was difficult for me too, until I tried tapping with a knuckle instead of my finger. Now I can get it to register on the first or second try.

The app allows you to set goals (steps, hours of sleep and weight), create alarms and alerts, and start/stop a workout. The alarm system is pretty nice. You can set an alarm to wake you up within some window before your real deadline, and it will vibrate the band when it senses you’re in light sleep. Unfortunately, the app doesn’t register as an alarm service with the phone, so you can’t set the alarm with Google Now.

The alerts are less useful (at least for me). The app allows you to set a daily alert at a particular time and/or to alert you if you have been idle for some duration. The idle alerts are a nice touch( even if I get them too frequently), and I can imagine the timed alert being very useful if you have medicine to take, or something else that needs to be done at the same time every day.

Using the app to put the band in workout mode lets you track how many steps you took during that workout, but that is it as far as I can tell.

The app is (as far as I know), the only place to see your data. And this is where the app is weakest. My data is spread across four or five different pages in the app that are accessed differently. Today’s sleep and steps are summarized on the home screen along with fitness tips and goals from the “smart coach”. To see details about today’s sleep or activity, you click the summary. From the home page you can also bring up a resting heart rate graph. If you want to compare today’s activity or sleep to yesterday’s, you first have to close the page, change the date on the home page (one day at a time) and then bring up the detailed page for that day. Information about a tracked workout can only be brought up from the daily activity page. The only way that I can find to see how my weight has changed over time is to pretend that I am going to enter my weight again, and that graph doesn’t seem to let you change the date range. There is also a “trends” page where you can display a bar chart for each nutrient or type of sleep and a few other things. But you can only see two things at once and they use one of those wheel selectors where you can’t quickly pick what you want to view.

My main interest in the UP3 is the sleep tracking and resting heart rate. These are the features that made me choose this device over the fitbit or the UP24. These both seem to work pretty well. It seems to log me as sleeping too soon when I am still falling asleep, and it doesn’t catch all the times that I wake up at night. But the light/deep/rem measurement feels accurate. When I wake up groggy, it says I was in deep, when I wake up easily it says I was in light, and when I wake up from a dream it says I was in REM. I don’t have a good way to check the resting heart rate beyond counting my pulse, but it is close and the reading is consistent.

After a night of sleep, the UP app provides a graph that looks like this:

Another reason that I picked Jawbone over Fitbit is their data policy and API. Jawbone clearly states that I own the data that the band collects, and they provide a simple way to download it as a CSV and a full API to get all the data. Unfortunately, there is no way to get the raw sensor data from the band. I am not even sure if it is sent from the band to the phone app. It may all be processed on the band itself. All the data that is displayed on the phone app is uploaded to the Jawbone servers. The API accesses the Jawbone servers to provide all the data that is available on the phone app. I haven’t played with the API yet, but I fully expect to write a small application that will download my data and let me build some more interesting charts.

The UP3 app allows you to manually enter a sleep or workout (if you didn’t put the band into the correct mode before you started), enter your mood, weight, and foods consumed. The mood and weight entry work well. The food entry is a huge hassle. Food tracking takes a long time even in a good program, and the jawbone app is not good. It takes too many clicks to enter things, it doesn’t have a very comprehensive list of foods, and it isn’t easy to build up favorites and recipes.

Along with the problems that I have mentioned with the app, I wish that the app did some things better. I wish that you could see information about the workout (how long, how many steps) as it is happening. I wish that you could get a heart rate reading whenever you wanted one instead of only during the night. I wish that you could just see the raw data from the sensors. I’d like to see the skin temperature and ambient temperature readings along with anything else that it has. Jawbone has promised updates to the firmware and phone app to provide more features. Hopefully that happens.

Overall, I am enjoying the device. I like to see the sleep information each morning and the step data during the day. I think that having sleep, activity, mood and diet information might help me improve my habits or isolate risk factors for my headaches. It also encourages me to walk more and to get up from my desk a few more times.

]]>http://www.chadweisshaar.com/blog/2015/05/25/jawbone-up3-review/feed/0Trip to Mexicohttp://www.chadweisshaar.com/blog/2015/05/03/trip-to-mexico/
http://www.chadweisshaar.com/blog/2015/05/03/trip-to-mexico/#commentsSun, 03 May 2015 17:12:12 +0000http://www.chadweisshaar.com/blog/?p=739We took a trip to San Carlos last week. We decided to drive and to see some sites in New Mexico on the way. We spent three days in San Carlos and saw the Very Large Array, Santa Fe and Taos on the way back.

San Carlos seemed a bit busier than normal. There were more people around and several new buisinesses. We checked in at our favorite restaurants and spent a lot of time on the beach and reading. Our standard breakfast spot, Evie’s, had closed, but the others were still open.

We saw a group of dolphins our first day at the estuary. There were five or more of them and they played in the water near the beach for five or ten minutes. We have seen dolphins in the wild before, but only by taking dolphin viewing boat rides.

Seeing them by chance was strange and cool. We also saw peacocks in our neighborhood at a wedding reception. We thought they were rented for the occasion, but it turns out that family just has them as pets. Which also explains the strange sounds we sometimes hear:

The Very Large Array (as seen in Contact) is pretty neat. I didn’t know that the antennas are mobile and that they have four different configurations that they move between. It is like the zoom lens on a camera: If they put all the antennas close together they can observe a wider chunk of the sky, but if they spread out the antennas, they can get higher resolution images. Because they are using interferometry, having the antennas setup for higher resolution actually renders larger objects invisible. (Here is their description)

We also stopped in Santa Fe and Taos and saw the Rio Grande gorge bridge and the Taos Pueblo.

]]>http://www.chadweisshaar.com/blog/2015/05/03/trip-to-mexico/feed/0Le Havre single player demo videohttp://www.chadweisshaar.com/blog/2015/03/22/le-havre-single-player-demo-video/
http://www.chadweisshaar.com/blog/2015/03/22/le-havre-single-player-demo-video/#commentsSun, 22 Mar 2015 16:06:29 +0000http://www.chadweisshaar.com/blog/?p=732At the suggestion of a friend, I’ve created a video of a single player game of Le Havre where I am using the shipping strategy.

I made this video to demonstrate how to get a score near 400 without using special buildings. On boardgamegeek.com people discuss and debate the expected scores for a single player game. Players have posted demo games before, but only as saves from a computer implementation. Mine will be the first video.

After making Le Havre, one of the pleasant surprises was how much fun the single player game is. I’ve played a lot of games and improved my score quite a bit. Before computerizing the game, I played the single player version on the physical board once. But the setup/tear-down and piece twiddling was just too much for a solo game.

I also made this video to draw attention to the touch table implementation. I’d like for other players to ask the publisher for permission to release my version. I’d also like to make boardgamegeek players more aware of gaming on the touch table.

]]>http://www.chadweisshaar.com/blog/2015/03/22/le-havre-single-player-demo-video/feed/0Setting up RSS feedshttp://www.chadweisshaar.com/blog/2015/03/14/setting-up-rss-feeds/
http://www.chadweisshaar.com/blog/2015/03/14/setting-up-rss-feeds/#commentsSun, 15 Mar 2015 02:02:42 +0000http://www.chadweisshaar.com/blog/?p=726I recently added RSS feeds to darkinfinitysoftware.com so that people could keep up to date with what our company is doing, and get notified when we have new or updated software.

There are lots of ways to setup an RSS feed. For example, this blog is in WordPress and WordPress sets up RSS feeds automatically. There are also computer programs and web apps that will manage your RSS feed.

I set it up manually for Dark Infinity, so I thought I would give the steps here.

First of all, RSS is really just an XML file on the web that you update when you post new content. Here is what the XML looks like:

Whenever you have new content to publish, you simply add a new <item> element to this file and update the <lastBuildDate> element. Once this XML file is online (it should have a .xml extension), you can point any RSS reader to the full URL of the file.

To make it easier for the average user, you should also add a <link> element to your website’s html.

This will tell browser plugins that there is an RSS feed available for this page. It also allows people to simply put the URL of your website into their RSS reader instead of the full URL to the feed.xml file.

Finally, you should add a link somewhere on your site to your feed.xml file and use the standard RSS image. The html looks like this:

<a href="software.xml"><img src="img/rss.gif"/></a>

And here is a link to download the image:

]]>http://www.chadweisshaar.com/blog/2015/03/14/setting-up-rss-feeds/feed/0PAX East 2015http://www.chadweisshaar.com/blog/2015/03/11/pax-east-2015/
http://www.chadweisshaar.com/blog/2015/03/11/pax-east-2015/#commentsWed, 11 Mar 2015 18:41:22 +0000http://www.chadweisshaar.com/blog/?p=719We attended PAX East with Mesa Mundi again this year. We had a lot of fun and got some good feedback about our games. It was great to see Toby, Rebecca, Matt and Laura again and nice to meet Liz and the guys from Lifeform Entertainment. It was also exhausting and stressful, but it is worth it to see people enjoying our games.

This year we stayed with the rest of the Mesa Mundi team in Norwood (about 25 miles out of town) and rode with them to and from the convention. We got to spend a lot more time with them this year and even met Toby and Rebecca’s kids. It felt more like we were members of the team.

As usual, we had one touch table and 1/4 of the booth to use to run our games. We were busy all the time. Convention goers were always quick to step up to play a game though lines were rare. It is hard to describe how big this convention is. The expo hall was expanded this year and there are 255 exhibitors. When the convention is running it takes 5-10 minutes just to walk from one end to the other and there are always people walking by or checking out the booth.

We mostly played Pair Soup and Dungeon Raiders along with quite a bit of Fas Jack and Got It. But we played most of our quick games at some point during the weekend. The new games – 20 Questions Wrong and Egyptian Ratslap, were popular among the competitive groups. We also had some very competitive Pair Soup groups. One group from 2014 came back to set a high score. They set a great score, but they were blown away by a new group that stopped by a couple times on Sunday.

This year we had a new game launcher that was full screen and looked more professional. A combination of that and having eight new games changed people’s reaction to our table. After finishing an intro game and dropping back to the launcher, people often commented at the quantity of games available. I don’t know if that will turn into any touch table sales but it did seem to help people’s opinion of spending $4000 on a gaming system.

We didn’t get out to see much of the rest of the convention. Bill got a ring from CritSuccess. Also nearby was a board game booth selling Pixel Glory. Bill bought the game and talked to the creator about making a touch conversion. He was familiar with Mesa Mundi and our other board game conversions from Gen Con, and was excited to see his game converted. I guess it wasn’t new this year, but this was the first time we saw the “Condom against Humanity” from the “Cards against Humanity” booth.

While it didn’t snow much at while we were in town, Boston was still recovering from the blizzards. The parking lot at PAX had a 20-30 ft mountain of snow, but more impressive was the ubiquitous hedge of snow next to the roads. It was around 6 feet tall all along every road we saw. There were cut outs for the driveways and parking lot entrances. It was difficult to spot the entrances to stores and to see traffic when pulling out onto the roads.

I always feel a little out of place in the exhibit hall at PAX. The exhibit space is not cheap and the exhibitors, including Mesa Mundi, have spent a lot of money to be there. While we are selling games, we aren’t really expecting/needing to make a living from it. So there is a dissonance between how the other exhibitors are behaving/feeling, what the convention goers are expecting, and what we are doing. This year, one of the other exhibitors openly expressed confusion about why we had created so many games – many of them freeware or not for sale – for such a small market. We are excited to just get some positive feedback from attendees and one or two sales, while other booths are trying to sell some number of units to break even, and other booths are just staffed by employees of a big company.