Geomys Games Beginneth

Welp, after talking about it and diddling around for years, I’ve finally cinched up my belt and gotten to work. No more grandiose dreamy kitchen-sink projects; no more build-it-all-from-scratch mentality. Just modest and achievable indie ideas, leveraging the latest tools for rapid game development and deployment. This time I’m serious, and I’m doing it right.

I should’ve been blogging as I went along, but… I didn’t. So here’s the last few weeks in a nutshell.  About two weeks ago, I downloaded Unity and started going over some basic introduction to unity articles and videos. Evaluated a few other options as well, but Unity seemed like the best option for what I wanted. That Wednesday I started working to learn Unity in earnest. Ran through the official tutorials, and was wowed by how powerful and efficient the toolset seemed to be, so Thursday afternoon, I decided to try to throw together something simple, to test what I’d learned. I quickly realized that I’d hardly learned a thing! The official tutorials I’d done were filled with sleight-of-hand, depending entirely on the pre-fabricated projects where most of the real work had been done already. It’s possible the problem was that I skipped many of the introductory tutorials and went straight into the more advanced ones, I don’t know. In any case, I was discouraged at the end of Thursday, and considering other options.

Went out of town for the weekend to visit family; had a good time, good food, plenty of alcohol, and came back the next Monday ready to get moving again. I decided I would make another effort to learn Unity before abandoning it, and found a tutorial series by Walker Boys Studio. No slight of hand this time; the tutorials started from empty projects, and while their final results were not nearly as impressive as those for some of the official tutorials, they helped me bridge the gap from getting started in a blank unity project to where the official tutorials I’d reviewed had picked up.

The intro videos felt a bit spoon-fed for someone who’d been programming as long as I have, so I skipped the warm-up stuff and dove straight into their fifth video tutorial series on making your first game. Came out the other side feeling like I’d picked up quite a bit, and started on the 2nd game tutorial the next day, filled with enthusiasm and confidence.

During the introduction of the 2nd game tutorial, it became clear how simple the shooter game it was walking me through creating was, and feeling confident as I did, I decided to follow the process from this series, but to make a different game. The tutorials produced a simple vertical-scrolling shooter, I decided to make an asteroids clone instead. 12 hours later, I reached the end of the tutorial and had a playable web build of my asteroids clone. It was amazing. I could probably have produced the same game in the same time using my old from-scratch C++ method, I figured, but Unity let me build web, windows, and mac versions with just a few clicks, without changing a line of code! In the process, I had started learning to think like Unity, and I was liking it.  And that 12 hours included a huge amount of time spent watching the tutorial videos and burying my nose in the unity script reference, so in the future I could expect to reproduce the same it in far less time than that!

So by the end of Wednesday, one week after downloading Unity, I was completely sold on it’s virtues. Next up was putting Unity to the test as a mobile platform. Thursday was devoted to setting up an apple developer license and getting my dusty old Mac Mini reconnected, updated, and prepped for work.

So was Friday.

And half of saturday.

Yeah, me and the mac, we were not on the same page, at all. I’d toyed with iOS development before – it’s half the reason I owned a mac mini in the first place – and this was the point where those past efforts had come unravelled. Not this time, though. This was the final battle in a drawn-out war, and I was determined to win. I was committed. I was not giving up. In the end, just getting the entire unity->xcode->iphone build process working at all took around 30 hours, twice as long as it had taken to build my asteroids game for the web. I neglected my body, my house, and my dog. I barely ate, hardly slept, and didn’t shower. I uninstalled and reinstalled xcode at least a dozen times, with different settings, different versions, different orders of installation. Eventually, I emerged on the other side Saturday afternoon with my asteroids clone on my iPhone. It wasn’t playable – it was setup to use keyboard controls, so you couldn’t turn or thrust, just shoot by tapping the screen – but it was still a momentous occassion, which I celebrated by drinking until I passed out – from fatigue, not alcohol, though it was a close race!

Sunday started, obviously, with a hangover, and was otherwise devoted to catching up on chores around the house that had been neglected during the war. Started contacting artists – just a few I was friends with, to start – to get some idea what contracting art would cost me. Realized about this point that I was going to need branding assets for Geomys Games, so started thinking about what I wanted for that. Otherwise, I took it easy: played some video games, watched some tv, played with the dog. Gave my mind and body a chance to recover.

And that brings me to this week, five days ago, Monday. My first priority was making the game actually playable on my iPhone, which meant on-screen controls. I’d researched this a bit over the weekend and had one of two options in mind. First was the joysticks included with Unity in the standard mobile assets package, and the second was the open-source Unity UI Toolkit started by Prime31. The toolkit seemed excellent, but it also seemed like overkill for my immediate touch-thumbstick needs, so I went with the standard asset thumbsticks instead, but bookmarked the site for future reference when my needs were more robust. Dropped them in, wired them up, and they worked like a charm. Strangely, I could not seem to find an equivalent drop-in on-screen game-style button, but making a simple one from scratch didn’t take 10 minutes of scripting. The game was now playable on my phone. Also rebuilt my prefabs to use meshes exported from Blender. The improvement in the game’s appearance was slight, but in the process I learned the ins and outs of importing 3d assets and using them in prefabs. Unfortunately I ran into a problem – my new meshes were having lighting glitches on the iPhone. This is when I discovered UnityAnswers, where I asked my question. No response yet, but I’d already found a work-around by the time I posted the question, so it has not been a roadblock.

Tuesday was a bit of a wash, as I suffered a complete failure of discipline; I was testing on the iPhone, tweaking things, and each tweak required a several-minute-long rebuild-deploy process. It was during these moments that I started compulsively running to UnityAnswers, and long after the build was finished I’d be writing some lengthy answer to someone else’s questions, or just digging through old questions reading up. I learned a bit in the process, so it wasn’t a total waste, but at the end of the day, the measurable progress on my game was close to nil.

Wednesday, I hit the ground running again, avoided UnityAnswers, and focused on cleaning and polishing the game, particularly the iPhone version. Implemented the workaround for my lighting problem with the new meshes under iOS. Many elements were rendering too small on it’s tiny screen, so those got conditionally scaled up or swapped out.  Fonts were baked to textures at fixed resolution on mobile devices, so I had to resolve that as well. The quickie buttons I’d made Monday were using simulated mouse input, and needed to be retooled to properly handle multitouch. The biggest task was retooling the thumbsticks.

I took apart the standard joystick scripts and rebuilt them, adding the ability to drag the sticks around with the mouse in editor mode, so I could do some degree of testing of the iPhone input settings without building and deploying the whole app to my iPhone (Unity Remote was just not functioning in a usable way on the terrible wifi in my house). Also added automatic disabling of the thumbsticks when not targeting the iPhone and integrated unity Input axis checks in those cases so that my actual game scripts could just grab input from the Joystick object without knowing or caring if it was an on-screen thumbstick on the iPhone or a game controller connected to the computer in a stand-alone Win/Mac build. Lastly, I tweaked the on-screen joysticks to allow off-center grabs – the built-in behavior could produce unintentional and potentially fatal movement from your character when first touched. Instead, I made them activate when you touched the joystick anywhere, but rather than snapping the stick to that position relative to it’s on-screen center, it retains the initial touch offset and moves the stick relative to that – like a real thumbstick, if you grab the edge instead of the center, you can still operate it normally. This edge-grab behavior seemed like a reasonable compromise between static always-visible joysticks and dynamic visible-when-touched controls, and I was pleased with the results. By the end of the day, I had a project that I could build as-is to web, desktop, and iPhone, with all the necessary platform-specific details changing automatically. It was beautiful, even if it was still an Asteroids clone with crappy programmer art. And it had only been 14 days since I first downloaded Unity and began looking at tutorials.

Wednesday night I made up a big list of things to do to the game the next day; most of with I promptly threw out Thursday (yesterday) morning, when I realized they revolved around improving the Asteroids clone rather than learning Unity3d and iOS development. This was supposed to be a learning project, after all, to be gotten out of the way so the serious development can begin. One item on the list I kept, and it was a big one – Game Center support. Asked google where to start, and spent the morning and early afternoon in iTunes Connect, getting my game defined and adding a leaderboard and some achievements.

That done, I turned back to Unity and, rather than reinvent the wheel myself, looked for existing plugins. I remembered seeing something like this on Prime31’s site Monday when looking at on-screen control options, and after some searching, this seemed like the easiest and best option, so I bought Prime31’s GameCenter plugin. $75 seemed a bit steep at first, but I decided to bite the bullet and try it out. Less than an hour later, I’d dropped the test scene into my game and was successfully interfacing with Game Center, authenticating and setting achievements. Any concerns about that price were gone.

Took a bit longer to get the leaderboards working and the code setup in my game to gracefully handle scores and achievements. In particular, scores were just not showing up properly no matter what I did, even though I was getting success signals. I suspect the GameCenter sandbox was just having difficulty that night, or perhaps it takes more time than I thought for the leaderboards to be up and running after setting them up on iTunes Connect. Achievements were easy, and confirmed I had things basically right. This morning I started testing and found my scores from the night before were showing up, and new scores were appearing almost immediately.

That settled, I implemented a system for remembering achievements and scores earned and re-submitting them to game center in the event of failure, and tweaked these to store unsubmitted achievements and scores separately for each account you used. Then I set up the project to fully automate the whole process, authenticating on start, automatically re-submitting any unsubmitted scores and achievements on successful authentication. Implemented my game’s three simple achievements, and that was that. All that was left was some final polishing of my on-screen buttons and testing gameplay thoroughly, fixing all the minor bugs I could find.

And then I came over here and blogged about it all.

Still some minor things to do to the game, but this weekend I’ll be starting my first original game design in Unity. Fueled with confidence by the success I’ve had so far, I can’t wait to get started!

You can check out the latest web build here. Still missing an instructions screen, but the controls are simple – left/right turn, up thrusts, ctrl fires.

Did you like this? Share it:
Posted in Uncategorized | Tagged , , | Leave a comment

Response to “7 Lies”

I encountered a video on Facebook, titled “The Seven Biggest Economic Lies,” and I felt compelled to respond. The video features, and was produced by, Robert Reich, J.D.  He is a highly respected man, and he has certainly earned the right to have his opinions heard.  However, it is my opinion that no amount of degrees or accolades entitle a man to pass off their opinions as facts. It is not my intention to attack the man, or his positions, but merely to examine this particular video, and to attempt to dispel the illusion that this video, and the arguments it contains, constitute proof of the 7 specific claims being dismissed as lies in the video. Before I continue, here is the video itself.

 


Now, I’m not an expert on economics, and so I’m not qualified to challenge Reich’s economic theories. Fortunately, there aren’t a lot of economic theories present in this video, just assertions. Any or all of his assertions could even prove to be correct; that is not my point. I’m simply challenging the manner in which he dismisses the claims here. Economics is a complicated subject, and actually defending or challenging most of these 7 claims is a broad and complicated task that could occupy all of the top 10 economists in the world for decades – in fact, a number of them have been debated for decades already, and still no definitive answers are to be found.

Obviously, such prolonged debate has produced far more ideas and information than could be presented in a short video like this one which is intended for laymen. Boiling it down into the simplest terms that everyone can understand is perfectly reasonable. What I consider irresponsible, however, is exclusively presenting one side of such a complex argument, in only the simplest terms, as if the side being presented were just plain, irrefutable facts, and simultaneously smearing anyone who presents a dissenting view by referring to the claims as “lies,” rather than “misconceptions” or “errors.”

So, on with the analysis!

#1 – “Tax cuts to the rich trickle down to the rest of us”

In the form presented, his argument amounts to “A followed B, therefore A caused B.” This is a commonly known as the post hoc fallacy, from the latin “post hoc, ergo proctor hoc.” The reasons this is a fallacy are simple and two-fold: first, it makes no attempt to explain how A caused B; second, it dismisses all other factors which could influence B.

There could be any number of reasons the median income level decreased over this period. Maybe A did cause B, but it is also possible that income levels would have decreased at an even faster rate if not for the tax cuts on the rich.

#2 – “High taxes on the rich hurt the economy”

The arguments here are based on the same fallacy as the first. These first two points have two of the weakest arguments in the video; I am forced to wonder if this is coincidence, or application of basic rhetorical techniques taught in many high school and college writing classes – you always open with your weakest arguments, because they are the ones most likely to go unchallenged, as the last arguments presented are the ones that most stick with the audience, and that most will naturally respond to in a rebuttal.

#3 -“If we shrink government, we will create jobs”

This time, he cherry-picks his examples of government spending based on which employ the most people per dollar invested. Education, emergency services, and infrastructure are hardly at the top of anyone’s list for proposed budget cuts. And a quick google search gives me some numbers for what % of the government budget they represent…

Education: 3%.
Transportation infrastructure:  3%
Emergency services – less than 1%
1

So in principle, 90% of the federal budget could be eliminated without firing a single teacher, policeman, judge, or fireman, or eliminating a single infrastructure-based construction job.

#4 -“Cutting the deficit now is more important than boosting the economy with further spending”

Couple of things wrong here, starting with his statement of the “lie” itself. His statement assumes that further spending will stimulate the economy. While this belief is quite prevalent, especially in Washington, D.C., it is hardly an irrefutable fact. Anyone even vaguely familiar with the last 6 years of U.S. economic policy can surely think of several examples off the top of their head that demonstrate, at the very least, that government investment in the economy is not a guaranteed recipe for economic growth.

In his argument, he points out that, instead of decreasing the deficit, we could instead increase GDP, and asserts that what is important is the ratio between the two, not the absolute values of either. I’m skeptical that this is an absolute truth, but lets just assume it is correct. He then asserts that decreasing the deficit is the wrong approach, and increasing GDP the right one. His only explanation of why this is the case is that “without creating jobs and growth, the ratio will go down.” This would be absolutely correct – if one assumes the deficit stayed the same. But ask yourself – if we increase government spending to invest in the economy, based on the belief that doing so will boost the economy (and as I already mentioned in the previous paragraph, there’s not a lot of recent evidence that it will), is it likely that we will simultaneously stabilize deficit?

It’s not impossible, but unless I am missing something, it would mean a double increase in taxes – one to pay for increased government spending, and another to cover the existing imbalance that causes the deficit to increase each year. I know the 99%’ers will cry “just tax the companies!” – but those same companies are where the government would invest to boost the economy. If the money invested in them comes from their own taxes, how is that supposed to grow the economy or create jobs?

#5 – “Medicare and Medicaid are killing the budget”

Not much to say on the logic here. I’ll just note two things.

First, his assertions about the low administrative cost of medicare are presented as fact, but are in fact widely debated. Rather than overreach my own knowledge by trying to explain how, I’ll just link a report conducted by experts that demonstrates that these figures are anything but irrefutable:

Medicare’s Hidden Administrative Costs: A Comparison of Medicare and the Private Sector, By Merrill Matthews, Ph.D.

And second, I’m rather startled by the insertion of “switching from fee for services to fee for healthy outcomes” in there. I’m sure not having to pay unless you’re cured would make healthcare cheaper, at least for those who die, but what would this do to fields like cancer treatment, where the services are expensive and long-term, and healthy outcomes are never guaranteed, regardless of the quality of care? Could an oncologist reasonably be expected to make a living under such a system? Am I just missing something here?

Also, just as a bit of food for thought, consider: If medicare is such a complete healthcare option, why do you see so many advertisements on TV for medicare supplement plans?

#6 – “Social Security is a ponzi scheme”

He doesn’t actually address the point here at all. I must note first that this “lie” was deliberately and provocatively inflamatory, but lets actually look at what the “lie” is saying first. Merriam-Webster defines a ponzi scheme like this:

An investment swindle in which some early investors are paid off with money put up by later ones in order to encourage more and bigger risks.

Well, right off the bat, we can see that the comparison isn’t completely unfounded; early “investors” (the first generation who paid social security) were in fact paid with the money they invested, and the money invested by the next generation of investors. So, clearly, there are certainly parallels that can be drawn between ponzi schemes and social security. The question, then, becomes “Does social security involve a cycle of more and bigger risk for investors?”

Lets return to his own statements: “Social security has been solid for 26 years,” naturally, even in an actual ponzi scheme, the first investors always profit. He continues, “and it could be for the next 100 years if we lifted the ceiling on income subject to social security payments.” Basically, he’s saying if we increase the amount we ask each new generation of investors to pay, we can continue the system for another 100 years. Well, great; 100 years! That’s plenty of time for me to collect mine, and my kids to collect theirs. But what about my grandkids, and their kids?

Maybe he has worked out a solution to this problem, or maybe he’s just confident that 100 years is plenty of time to find one. I don’t know. But to me, increasing the investment amounts while planning no increase in payouts sounds suspiciously like a cycle of increasing the risk for investors to me. Maybe the “ponzi scheme” line wasn’t so out there after all…

#7 – “It is unfair that lower-income Americans pay lower income taxes”

Actually, I don’t entirely disagree with this one; he chose well which point to end his presentation on. However, one point needs to be made. While it seems perfectly fair that people making 7 figures pay more taxes than people struggling to get by on low 5 figures, it does not follow that you can tax the richer ones any arbitrarily high amount and it will continue to be fair. This becomes clear if you consider the extreme case – if you exclusively tax the richest people, so 95% of the population paid no taxes, while the top 5% paid everything, would you still consider that fair? If your answer is “yes,” well, I don’t even know what to say, except to suggest you study the definition of fair.

Summary

Mr. Reich may be wrong, or he may be right about most of these points. The point I am trying to make with this article, is that it is irresponsible to blindly accept a video like this as fact. I do not claim that no justifications for his assertions exist, only that they do not exist in this video. If you find his positions compelling, don’t just assume they are all correct, and don’t decide that you, too, are suddenly an expert, just like Mr. Reich. He worked very hard to study the subject for years. You watched a 2 minute and 30 second video. If challenged directly, I’m sure he could go on at length and to great depth explaining in detail why he believes these seven things to be lies. If you have only watched the video, you almost certainly cannot.

And also remember, there are other experts out there, people who have studied the same subjects as Mr. Reich, for as many years, and garnered as much respect and as many accolades, while reaching completely different conclusions. Don’t mistake a bullet-point summary for an irrefutable argument. If you’re interested in the subject, study it. Clearly, you have access to the internet. Search. Look deeper into the explanations, and actively look for dissenting opinions. You don’t have to get a post-graduate degree in the subject to hold opinions on it, but you ought at least learn enough about it to appreciate that it is a subject with enough depth and complexity to occupy thousands of great minds for a lifetime.

1 much of the funding for these services is state and local, or comes from fines collected by local courts

Did you like this? Share it:
Posted in Uncategorized | Leave a comment

Oh dear.

How can it have been that long since I wrote anything here? For shame, Me. Shaaaaaame! This will not stand. Time to get to work.

Did you like this? Share it:
Posted in Uncategorized | Leave a comment

Week of Potatoes

Been rather a long time since I’ve updated my blog here. Ran into a design issue week before last; I ultimately solved it but it robbed me of my momentum – and then Portal 21 came out, so between playing through that and catching up on sleep afterwords, the first half  of the week was gone. But eventually I got back to work, and have begun to pick up momentum again. Continue reading

Did you like this? Share it:
Posted in Uncategorized | Leave a comment

Foundation work is never done

After around 7 days of work on the geomys foundation libraries, and an 8th day spent updating the Stockings and then MU projects to use them, and I’m calling it done. Of course, it most certainly isn’t.

For one, I’ve completely left out the stockings library for now; it’ll need to be rearchitectured the same way as the platform-specific classes are in gfl. The Stockings class will become paltform-independent, wrapping up an instance of a new ASocket class, with concrete WinSocket/etc subclasses. I also have to rewrite it to  new Thread classes I’ve added to gfl. In addition to making the core ready for porting,  this will also break up the current ridiculously huge Stockings.cpp  file into multiple smaller files, making that code more manageable.

That is the largest example, but there are plenty of other smaller ones. The basic application structure could use some tuning; pWindow was pulled to the base class AApplication but it is never addressed there except by the constructor; while I’d like to retain the ability to build console apps that run like the current ones, behaving like an ordinary console, but I’d also like to be able to run a console app using the same event model windowed applications use as well, having  Update function rather than a Run. Not sure if this should be just an option with the AConsoleApplication class, or a separate sub-class, though, and it is not critical for now.

In any event, that is down the road; for now, I’ll return to the main project. First task is getting the client and server to share assets across the network; after that’s going, it’ll finally be time to tackle integrating some of my gui code. First tasks for the guis in the project are simple dialogs, the very first being a login dialog to replace the text mode login message in the gl client. There’s a lot of code overlap with the gui project, and it’s been left out of date for a long time, so I’m not looking forward to integrating it.  I am looking forward to the results, though, as from there I’ll be able to start writing code to attach buttons to things, popping up nametags and labels on mouseover, and generally interacting with the world in a graphical rather than text-based way. Might want to implement a click-based walk-to method as well, while I’m at it.

Time to stop avoiding and start doing, in any case.

Did you like this? Share it:
Posted in Uncategorized | Leave a comment