• Home
  • Blog


Crumbling Towers Workflow

First of all - we've got gameplay video now!

Actually that one is kinda outdated now - couple implemented recently features are not there yet. But still shows a general idea about Crumbling Towers.

Also did some work on site not long ago - like, tracking specific blog tags or blog posts about specific game. Latter ones are also accessible from game info page. Though there's not a lot of content around, surfing felt kinda weird.
And with that I also present a new tag - "workflow". That's going to be something related to work done on current game. Can't say I'm a person that is good with posting on daily/weekly (well, definitely not daily) basis, but I'm working on that :). Actually there's a bunch of things I'd like to write about, but also a lot of stuff to do with game, balancing those is a bit tricky.

So, speaking of that stuff. After beta release we had to work on some reported issues, like lack of loading screen, confusing zero-life respawns and some minor bugs related to level design. And also we applied for participation at DevGAMM 2017 Moscow! Never been to any game conferences yet, must be an interesting experience. Had to take care of several issues and wrap things up to get a decent game build for this. Especially implementing GL ES 2.0 support right before deadline was kinda tricky. But it worked out, though I'm not happy about performance on devices that do not support ES 3.0. That was pretty much a reason we ditched ES 2.0, but I guess having an option is nice. Still not sure which would be better, playing with 20 fps in a pretty high-paced game or not being able to run it at all :).
Going for GL ES 2.0 also uncovered a couple issues. Some sounds refused to load up for unknown reason, and it was a different pack on each launch. android.media.SoundPool was just spitting out messages about failed loads followed by empty error descriptions. I blame memory issues, so now we need to care more about that, which is a pain with Java. No idea how to handle that without diving into NDK, so for now I rely on garbage collector magic :). Workaround for sounds was keeping track on failed-to-load sounds and trying to load those again later. Testing showed that it resolves within 30 seconds tops. Not happy about that hack but don't have other options yet. And that issue never occured for our devices, which do support ES 3.0. Again, who knows how that is related, but my guess would be a problem with memory handling.
Another one is from that type that feeds "Now idea how it worked before" memes. Happens to be that using GLES30.glBindFramebuffer(GLES30.GL_DRAW_FRAMEBUFFER, ...) with ES 2.0 instead of GLES30.GL_FRAMEBUFFER was a bad idea :). Still a lot of stuff to understand about all those OpenGL API's and constants...
Along with that we had to think about workarounds with specific requirement for one of the DevGAMM nominations - owning all IP rights, as music was done for us by Ninichi. So I had to learn a lot of new stuff related to composing. I've been into music for 15 years, I guess, but my knowledge about orchestral instruments and mixing those was almost blank :). Pretty sure there are still ways to go, but I'm kinda happy about the track I managed to create (the one in gameplay video atm). And learing music is fun! Though can be really time consuming, especially if the track you are fine with is, like, your 5th or 6th try and that is going on for several weeks while deadline is staring at you through its evil eyes..
So, we've got two tracks ready! I guess the dream of a track-per-theme is a bit closer now :).

Now to the new stuff! Said themes - finally implemented customizable variety of those. As for now that variety consists of tile color set, window colors, colors and intensity for whole pack of main, back and side lights, and kind-of-post-processing (not really post-, but looks like it) overlay colors. Second theme is still to be configured by Kx, as I don't rely on my sense of color, but here's a screenshot of what I did with that.

And there's also a new object - wooden ramps. They do add up a bit for a climp-directly-up places like shown above.

And one more feature to brag about, which also relied to themes - our external config. Now part of it looks like that:

theme.addWindowColor(2, "70fcd203", "70e7651a", 100);
theme.addTileColor("f0a08844", "f0ffd084", 110)
theme.addTileColor("f0ffffff", "f0a8a8a8", 150)
theme.addTileColor("f0ffffff", "f0a8a8a8", 150)
theme.setLightColor("main", "ffffff")
theme.setLightColor("back", "fbc76c")
theme.setLightColor("side", "A093D9")
theme.setLightADS("main", 0, 75, 85)
theme.setLightADS("back", 0, 50, 30)
theme.setLightADS("side", 0, 35, 10)
theme.setOverlayColor(0, "3b0800", "000018");
theme.setOverlayColor(1, "1b1b00", "00000a");

While prototyping some game ideas I was thinking about some system that would work for dialogues, quests and stuff. And being a programming geek I decided to write a kind-of-object-oriented scripting language that I could use to bring complicated dialogue trees together. Can't say I succeeded with dialogues (though they worked, but were still a mess to write and keep track on), but it worked out perfectly for script-based configs :). Nice to be able to tweak things without rebuilding everything, especially for non-programmers in a team. Probably not an issue with modern engines, but a bit of a pain for custom one.
And as a fun fact - that script do not actually need semicolons, but with my habit of putting those everywhere it was always failing to run. So I had to trunc all semicolons in script code :).

That's it for now. As we are done with second theme appearance we'll roll out an update for Crumbling Towers. Stay tuned!
by Ricane at 24.04.2017 05:13

No comments yet
Leave a reply:
Nickname *
E-mail *
Text *