Friday, April 29, 2016

Samsung and/or Google: Do it better!

I got a Samsung Note 4 phone, I'm pretty happy with it. Good display, reasonable performance, software is rather stable (thought I'd have preferred if they'd ship it with stock Android).
However, yesterday I noticed something strange, my girlfriend called me and instead of showing the call as a contact, it showed just her number. Indeed, the contact was gone. Today, 2016-04-29, I digged into it, and found that my phone had a different set of contacts than my gmail (I use contacts.google.com for managing my contacts). This is a rather critical thing, in my opinion, I'm trusting my device with remembering phone numbers and email addresses of people whom I may need to contact in urgent situations, so having them randomly disappear seems critically wrong to me. So I spent the better part of a day frustrated, trying all tricks in the book to get them to sync up. I followed the troubleshooting tips from Google, disabling/enabling sync, removing and adding the gmail account, rebooting the phone, all to no avail. What I was left with in each case, was the "sync" icon stuck next to "Contacts" in my gmail account. Everything else worked perfectly for that gmail account (calendar, apps, etc), except for the most important (to me) thing; Contacts. I looked in the marked for a different "Contacts" app, until I realized that this was an issue with whichever component is responsible for actually integrating with gmail, I suspect it is part of the operating system itself, and not something I can do much about. More frustrating is having to search for "sync icon stuck", it's humiliating and reminds me of something you'd have to do with an "I product", not with glorious Android. No error message to help, except for the universally unhelpful "There was a problem with synchronizing, it will be fixed in a moment" which I was shown through several hours of hair pulling frustration. At last, maybe by luck, I stumbled upon a post which helped me, a post more than half a year old (meaning that both Google and Samsung has known and ignored this problem for as long, choosing not to supply a patch). That post, from 2015-07-15, is here:
https://productforums.google.com/forum/?utm_medium=email&utm_source=first_post_notification#!topic/gmail/OzUCbeu_jfk

While the first thing I tried, was wiping all caches and application data, on all programs I could imagine being relevant (…Google and contacts), since there might be some kind of issue with a newer version of contacts attempting to access an older version of its own database (inexcusable to begin with, when the default behavior is "discard information"), I did not have the imagination that the actual "contacts database" was stored in a whole different program, which is "Contacts Storage", except, it is a system component, not showing the Contacts icon (making it difficult to find) and even though it is a system program, some genius decided to name it (in Danish) "Lagerplacering af kontakter" meaning that it is not in any way close to the "Kontakter" app in the list, meaning I'd never have thought to look for it if not for one comment in the thread I linked to, which instructed to clear app-data not only for a "Contacts" app, but also for a "Contact Storage" app.. Nice.

So, in short, what's wrong here is:
  • Erroneously and silently discarding data on the device.
  • Not fixing the problem via automatic update for more than 6 months.
  • Not providing a meaningful error message to the end user about a critical data-access/corruption/migration error, but "playing stupid" and lying about the issue going away by itself (which it gawk-damn never would!)
  • Not contacting or otherwise informing users that their contacts are silently being deleted.
  • Not providing the actual fix in the official trouble shooting documents.

Monday, March 28, 2016

Making games as a single developer (pt. 2)

Before I continue my rant about how everything was better in the olden days.. err about creating a completed computer game as only one person. I want to take a moment to define a few concepts as I see them in relation to games created by only one developer. The concepts that require refinement, are in no particular order; complete, game, successful and good. Starting with successful, you usually think of a game as being successful if you and your friends have heard about it, it sold well for its time or some other less obvious metric. Those metrics will not work well for you if you apply them to your own one-man games. Surely, there are several examples of games made by a single developer that fit those criteria, but for each of those, there will be hundreds that do not. So, unless you can reasonably expect to create the next Minecraft, I offer a another, and softer definition of success, which I believe work well for the hobby developer. Success is when your game is picked up by others, when it is distributed by magazines, mentioned on blogs and forums and, if it is open-source, is included in third-party or official software repositories for popular and less well-known Linux distributions. Further criteria are mentions/pages on wikis or archive sites such as moby games, is being ported to new platforms by other people without your knowing or consent, or is being distributed by a platform such as portableapps. I realize that a single developer could achieve some of these things by themselves, but if other people are doing it, it shows that others like your creation enough to do work to spread it, and in my opinion that is a great honor. I must admit that these criteria comes from how my own games have fared, I've not put a large amount of work into spreading the word myself, and I've been so greatly positively surprised when I Google my stuff and find it spread throughout the Internet, for me, personally, that is a great motivation to try to do good stuff which brings me to the next definition that I would like to make; Good, what is it? It is highly subjective, and it is a requirement for any worthwhile game to be it. I've read a definition elsewhere with which I agree and shall repeat here. A game is good when it meets or surpasses the expectations of the player. Simple as that. If you're like me, the type who sometimes go to MC. Donald's, you know what I'm talking about. I'm so very rarely disappointed at Mc.D, not because the food is amazing, but because my expectations are usually met, a warm slob of fat, just like the last one I got, with the correct amount of ketchup, served fast and relatively inexpensive. Thanks. Expectations met, happy fat guy who will say, "the food was good" without meaning great. You can make the MC. Donald's burger of computer games, if you adjust not only your own but also your players expectations. You're trying to make something that feels finished, complete and, for what it is, good, which, in turn brings me to the last definition: Complete. When is something complete ? As a developer, and especially programmer, nothing is ever complete. Games are large enough that there will forever be something to improve upon, be it some algorithm which is less than elegant, a pixel that's definitely wrongly placed on a sprite, or the way difficulty increases. So again, with no other credentials than the wish to write something down, I give you a definition of done that I'm struggling to accept myself. A single-developer game is complete when there are no placeholders, no dead-ends and nothing missing from the menus. When you can start the game without knowing any of the command-line parameters, configure the game and have the settings be saved in a configuration file, have a way to store and retrieve progress so that the player does not have to start over each time, and when the game is long enough that anyone would actually want to be able to continue. This of course, depends on the type of game you're making, and the type of audience you're trying to entertain, but making load/save functionality is great fun, and shows that you've got at least some idea of the state of your game. Your game should not only start and exit flawlessly, it should be packaged in such a way that players can download and play it. That means that the game is either web-based and hosted somewhere, or that it can be downloaded for Linux and Windows without the need to compile from source-code. But a game is not really complete before users can add their own stuff to it, and change the existing stuff, if your game is loading levels from files, are those levels going to be created in a specialized tool ? If so, that tool will likely need the same rendering routines as your game, and it will need to be able to load the data the same way as your game, so, how would it be less than obvious to build the level-editor right into the game, design and implement it already from the beginning, with the idea that someone else is also going to see/use it, this way, you also get a nicer level-creation tool and a more enjoyable time creating levels yourself. The last thing I want to touch on, is game. To the purist, a game is a set of rules, or laws, under which the player must complete a specific task or set of tasks. To the holist, a game is the whole system. So, to make your own game, you first need to go to the beach and dig sand for the transistors you will use to build your CPU. Okay, that's taking it too far, let's skip the CPU architecture and also the operating system (if you're making a game on a platform which has one, which I'm going to assume). So, the game is the whole executable and all the linked libraries. It's the OpenGL library and audio driver, it's the joysticks, mice, keyboards and monitors, and it's also about defining entertaining rules and enforcing them in an entertaining manner, because, entertain. The reason I include the whole executable program in the definition of game, is that every choice is going to affect the finished product, the things that limit you will have you find alternative solutions, the things that are easy will have you sink way too much time into trying to come up with the right shade of pink for your invisible unicorn. To the player, the game is the executable they start up, the whole thing. Your players won't distinguish between the graphics library, your drawing routine or the reason behind there being entirely too little ammo on level 2. The experience is holistic, how files are handled will affect your decisions on level sizes and loading screens. The input latency will affect (along with the genre, and intended audience, surely) the tightness of the controls. Rendering methods will affect not only how the game looks to the player, but how moving and looking around "feels". In some games, such as Quake3, vsync on makes me feel "weird", and I always notice it, even if the game is stuck on 60 fps, it's just "weird".

With that rant out of the way, maybe next time, I will talk about my thoughts on creating a complete RTS game.

Making games as a single developer (pt. 1)

You can create a whole, entertaining, complete and polised game as a single developer. I mean games that are good enough that people who are not your friends or even know you will play them, and share them with their friends. This is my personal observations and opinions as someone who is not (and has no wish to be) a professional game developer, someone who is not a professional gamer or reviewer, someone who just find playing and creating games entertaining.

First off, what you've been told everywhere else, so I will keep it short; Adjust your expectations. You're not going to create Doom, if you're good, you can create wolfenstein as a single guy, but don't get your hopes up. If you want to create a 3d MMORPG (not a tech-demo, but an actual, finish product that people will like), this article is likely not for you.

Now that your expectations are low enough to be realistic, think about games through time, was space-invaders a complete, polished game ? Yes, it was, and it made someone filthy rich. Space-invaders is a technically, conceptually and graphically simple game, which runs on simple hardware, which creates consistency. Everything presented to the player is consistent with the players expectations, of the game, of the hardware, of the "system". This is important, and I'm not sure if anyone has stressed it before, but I will, because to me, an important parameter in what makes a game "finished" or "good" is a percieved (subjective) consistency between the game implementation and its engine. If you take an engine with UDK5 capabilities, throw in assets of Quake1 resolution/density/quality, and mix it with amazing shading and accurate physics, you get a freak. Maybe the concept in your game IS to be a freak (Voxelstein3D for example), then great, that's not the kind of game I'm talking about here, I think it's really cool, but in my opinion, it stays well within the realm of the tech-demo. Now, let's take the actual Quake1, you can think what you will about the visual graphics, but they are consistent, it feels like "this is what I'm going to get, this is my life now" it helps the player immerse themselves, to believe the environment. My opinion is that it looks "real" in a sense, because the fidelity and content are aligned and consistent with everything else within the game. It avoids such comments as "Oh! I know it's possible for ABC to happen right here! I've just done that before! Someone made the choice to disable that feature here, just so I have to play the game differently!" That's annoying as hell. The build games did not have real destructible environments, but they had movable ceilings and floors, and the level designer could trigger something that looked like environment destruction, it usually worked by inserting a few special sprites to tell the engine "Before activated, these floors should have full height" and then place a sprite looking like a crack in the wall, to hint the player "here's a place where you can destroy the environment". Consistent. Games like Red Faction, which did allow almost fully destructible environments, used different materials to hint to the player where the environment could be destroyed. This should sound a lot like game-design, and less about technical consistency, but they are conneceted, because the more feature-rich an engine you have available for your game, the more features you want to pick from, and, if you chose to use a feature once, you must keep it in mind for every single decision you're making in your entire game, something which even many AAA titles get wrong (and I know they're trying hard), but you're just one developer, you can't make AAA graphics and AAA physics and AAA everything. But the A's go together, if a game has AAA graphics, we, the players, expect AAA everything else too, and you can't deliver! So think hard about your choice of technology.

Depending on the type of developer you are, you may be more interested in graphics, or in level-design or in programming. Pick a genre that presents interesting challenges in the field you enjoy, but is more forgiving in the fields that are not your primary interest. A first person shooter may be one of the worst types of games to implement as a lone developer, so as someone who's only ever thought of making one, I'll give my opinion on where it can go wrong, and what could be done to make it go right. An FPS is heavy in programming, assets and level design. It can be pretty forgiving in story and puzzle (and by that, I mean that making interesting puzzles for an FPS can be pretty easy). If you chose 3D models over sprites, you're doomed, because, try modelling and rigging one 3D character, unless you're a savant, that's already a few days work, just drop it! Afterwards you'll spend half a life on character animation code, and then you'll be dead. I'd go with a low-resolution friendly technology for an fps, either a raycaster or a 3D engine with limitations in place to keep you from making something too technically inconsistent, like smoothed wall textures and sprites. Upon seeing a smoothed wall texture, the player will expect 3D models, and you're doomed. If you want to create and finish a FPS as a single developer, go lowres, no filtering and use sprites. This also helps a lot with the math if you're limited in that aspect (as I am), as 2D math is usually a bit easier to understand and implement (go write a raytracer if you want to practice 3D, but don't call it a game). Player expectations to raycasted games are usually easier to fulfill, because you can concentrate on the things they let you do well, like interesting puzzles, textures (lowres textures can look great, and they are easier to maken repeat in a nice way, and they are better okay!?). A raycasted game frees you from rigging character models, to do interesting and creative stuff with the story, weapons, design and gameplay, so go exploit that. Now you might ask, who's going to play a raycaster in 2016 ? Well, me for once, and while I'm definitely odd, I'm not the only one, and I'd rather play a packed and rich raycaster than a barren and incomplete fully 3D game. As for tools and tech, that's up to you, I think I'd personally (because 2016) implement a raycaster in the GLSL shading language, but other options are to use an existing engine, such as Build (which was opensourced iirc) or use a lot of dicipline with UDK or Unity. I know at least one studio is making a build game in 2016.

Next time (if I continue this), I will write about RTS games from the point of view of someone with a lot of opinions and no real experience to back them up.

Random rant about FPS games

This is just something I felt like writing, it may be too long for your taste, or too short, or it may not be something you want to read at all, it will be about nothing in particular, but a bit about FPS games, so let's begin. As a kid, I was an atypical nerd, physically weak, socially awkward and also not very bright, so it would not surprise anyone that I, as most nerds, sought escape in computergames, but while the bright nerds dwelved into more complex genres, such as point and click adventures, real time strategy and role playing games, I sought to the first person shooter. FPS games such as Doom, Duke Nukem 3D, and Quake, game me a place to call my own. I remember vividly the first time I saw the difficulty/episode selection map in Quake, I must have been 11 years old at the time, and I felt right at home. I imagined, with virtual reality, a multiplayer game of quake, where people would just hang out in that map, not shooting each other, just hanging out and being friends, their true faces and voices hidden by glorious polygon models with brightly colored armor. I wanted to disconnect from the physical world as much as possible, and live inside a more comfortable, artificial world, and still connect to people. Had it not turned into a decadent sex party, SecondLife might have become exactly what I day-dreamed about as a 11 year old kid. Eventually, running around in an empty world becomes boring, and then you start to play the game, or you quit it like I did, and start up the Duke3D map editor (build.exe) and create your own worlds. I made quite a few, shopping centers, post-apocalyptic survival shelters, my own house, a rough outline of the street I lived on. None of the maps featured monsters, only a few weapons, where they looked cool, and lots of architecture. I didn't give much thought to gameplay, I just liked to create environments in which one might artificially dwell.

At some point, I moved on to WorldCrafy, building maps for ActionQuake2, only a few maps, and I don't believe any of them ever reached the internet. That's besides the point, this was during a time where LAN parties where still the only way to connect your computer to a high-speed network, exchange files, and play computer games with other human being, who were also guaranteed to be at least somewhat interested in the same stuff as oneself. I started makig maps to be played during LAN parties, and we had some fun playing those. This was about the time that I started seeing the virtual environments as my home, they were places I knew well, where I felt comfortable being. Knowing a multiplayer map like the back of your hand, even when you're only ever playing multiplayer at LANs mean that you must be spending a lot of time within those empty maps at home, and I did, much of the time, I was just walking around, looking at things I've already seen a million times before (at least if each frame counts for a "time"), anyway, I didn't do much but practice jumping and think lightly about attack patterns and where peoples heads were likely to pop out. There were no real analysis (remember, not too bright, just not the analytical type). This behaviour of walking around in empty maps may have come from a lack of access to new games, because there are very natural limits to the amount of new media a 12 year old kid without Internet access can be exposed to. Not much later, Quake3 came and changed everything, it was an awesome game, raw and fast and tight, it was the last real Quake, and it was home. Quake3 was made for people like me, who liked to repeat the same mindless task again and again in persuit of perfection. A place where the brain could be fully saturated with tasks, without having to do any of that difficult and annoying thinking. It was, and still is, a place to waste time while feeling like you're having a great time. True escapism. I never mastered Quake3 to the point where I could consistently go through the whole thing on the toughest difficulty, but, leave for a few maps, I think I could take most of the AIs on Nightmare! Anyway, more advanced FPS games have taken over the popularity from the puritan (by choice or technical constraints, who knows, who cares?) Quake3 style games, and that is where my interest in the genre largely stops. I've got nothing against the Modern Warfare, Battlefields, Borderlands or CounterStrikes, they are just not for me. I've been out of hardcore gaming for too long, so when I do once in a while join a Warsow or UrbanTerror server, I got my behind served to me, and that's the way it should be. I'm going back to the basics, realizing I've never completed a lot of my childhood games, I've only most recently completed Max Payne, Redneck Rampage and Blood, and I'm going through Duke3D and (the new, then the old) Shadow Warror. The new Shadow Warrior is a rant for another time. I am also, so very rarely, playing Action Quake 2, when I can find the time and friend willing to waste an evening in front of a Pentium3-666 mhz with a Voodoo2 card, greetings to HiFi and the others who are keeping that game alive so far past it's technical and cultural expiration date! I just recently saw a major code-cleanup and PERFORMANCE!! enhancements on this old piece, which, by the way, will run just fine on a raspberry pi, it is a true joy to see that love is still given to my favorite game.

Saturday, October 10, 2015

Wizznic got a real home

So, I've been busy with a lot of things, my own projects not included.. But I have found a bit of time to set up a nice home for Wizznic, at wizznic.org.
I noticed that people had quite a lot of trouble with the first level, and also with level4 (which was waay to difficult), so I've moved things around a bit, hopefully making the difficulty advance a bit smoother.. I also added a small tutorial level, showing new players the basic concept of the game.