You are here

dcfedor's blog

Advanced Rendering, and OOO Monday

Hey Folks! I did some more experimenting with the orbital plotter today, and delved into Unity's more advanced rendering features.

The biggest change was in the way the orbital plotter was rendered. Previously, it drew vector lines directly onto a GUI canvas. This was simple, and fairly powerful, but it made things a bit hard when it came to mixed UI elements (e.g. a truetype font and texture-mapped vector lines).

So as an experiment, I tried using render-to-texture instead. This basically means the UI gets rendered to a bitmap in memory, and then that bitmap can be used on any mesh, including the GUI's canvas. And one of the cool things about that is that it can be passed through deferred rendering and post process effects. I can apply certain filters, shaders or other visual effects to the GUI that would normally be reserved for 3D meshes and scenes.

It's not quite there yet. At least, not pretty. But it's working! And the toybox of really fun visual effects is now open :)

Also, just a heads-up: Monday is a holiday here, so I'll be out of the office. Technically, I'll still be around (probably sipping a beer on the porch, if fate shines upon me), but may not reply right away. Have a good weekend all, and see you Tuesday!

Orbital Layout, Music

Hey Folks! Almost a whole day of dev, today! I had a few admin tasks this morning when I got started, but after that, I spent the whole day on the orbital plotter.

I think I've finally managed to tame the plotter. Up until now, I've half been learning how to use Vectrosity to render vector art, and half trying to get accurate orbits plotted. As of today, I think I've got the hang of both, and the plotter is working at a very basic level.

In other words, it plots orbits accurately.

It also has some set dressing that I couldn't help fooling around with. Things like grid lines, borders, some text, and some sub-panels. I've got it to the point now where adding more UI elements is pretty easy.

Unfortunately, I think it also has a bit of a glass ceiling in terms of aesthetic appeal. The additive vector plotting looks nice on the orbital tracks, but the planets, text, and fames look a little lackluster. I spent some time trying to beautify them, but I think I need to put that on the shelf for a bit and focus on the important remaining piece: interactivity.

This plotter is meant to be part of the main nav controls for the ship, so the player needs to "steer" the ship through it. I have no idea how that's going to work yet, but at least I can now see the system map, zoom in/out, and pan.

I think the next step would be to get the ship's current position and trajectory plotted. And then, some way to designate course and confirm. Once those are in, I can then return to the onboard crew sim part to plot a course, launch, see how they deal with the trip, and reach the destination to "refuel."

It's a pretty basic game loop, but an important one.

In other news, Josh sent me a revision for his bar track, and it's right on target this time. He's going to do a bit more tweaking, but it has this nice eastern/western fusion to it, which should fit the multicultural setting well!

Loose Web and Music Ends

Hey Folks! More webdev and some music work today. And a teensy bit of orbital doodling.

The webdev was just finishing up the download changes I made yesterday, and testing. I had to make sure each user type on the site had access to the right things (e.g. Yukon edition, normal edition, registered, and anonymous users). And there are still some legacy file folders I need to work out with the webdev team. Basically, do we keep the legacy stuff as-is, or try to integrate into a new folder system?

I ended up composing some music today, too! It was super fun, and I really wish I had the luxury of time to do more of it. Josh sent me his most recent track for a backwater dive bar, and while it's good, it doesn't quite fit. His piece is more like a film score for a sinister scene, while I was hoping for something more like a jukebox or live band setpiece for the bar. I.e. what the patrons are listening to when the player enters.

It probably wasn't necessary, but I opened up FL Studio and started doodling with some sampled guitar, rhythm, and bass. And in about an hour, I had a short loop that illustrated what I had in mind. I've sent this to him, and I hope he doesn't mind my indulgence :)

Finally, I cracked open the orbital plotter for a bit at the end of the day. I didn't do a ton, but I did manage to get the accuracy issues figured out with plotting celestial bodies. It turns out the issue was that I was plotting the bodies relative to the center of the ellipse instead of the ellipse's focus. And when you later rotate that orbit and translate it, it just gets worse and worse.

So that's working now! Ugly as sin, since there's all that debug drawing in there. And I'm bummed I can't use MakeCircle (simpler code), but it works!

Bug Wrap-Up, and Webdev

Hey Folks! Split time pretty evenly today between webdev, mobile, and the space prototype.

The space prototyping was more experimenting with the orbital plotter and rendering. Now that I've got accurate orbital tracks, I'm working on the bodies themselves, and some markers for the plotter.

The markers are things like grid lines, and maybe tick marks. I started out by trying to use textures for the dotted lines, but soon discovered some issues. For one thing, they are a bit smudged. And unless you have really specific textures and settings, the tickmarks are for show only: they don't line up with any measurements.

Instead, I decided to go with a discrete set of lines. Basically, it creates a long line for the whole axis, but only renders it in pieces instead of continuously. It's a bit more code to do it this way, but easier to control accuracy/precision and has fewer asset dependencies.

The bodies are a similar problem, but for different reasons. Like with tracks yesterday, they seem to render at random offsets from where I want them to be. I think both MakeCircle and MakeEllipse must have something going on that I don't understand. So I may have to try MakeSpline like I did with the tracks to keep things consistent.

In webdev news, I think I finally got my download link system working. I hadn't heard from the webdevs yet, so I decided to risk doing it myself. And I learned a bit in the process about crontab, file system permissions, and https. I want to give it one more look before calling it done, but it seems to be working.

And more importantly, I think this means we can move forward again on getting the site launched!

Finally, Tiago sent me his latest status report, and it looks like this could be the week we wrap-up pre-launch bugs! Still several lesser bugs to deal with after launch. And we'll find more after launching, of course. But yay! Let's hope she holds together for the next week :)

Final Testing, and Some Orbital Experiments

Hey Folks! Hope everyone had a good weekend. It was gorgeous here this weekend, and we took every opportunity to enjoy the weather. It almost felt like a vacation!

Back at the office, I had to do a little bit of admin work to catch-up, then see about to final tests on NEO Scavenger mobile. Our main bug is seemingly solved, and we're just waiting to see if any esoteric iOS devices have issues. That, and there are a few smaller changes coming in a new build for better user input (e.g. swiping). But once those are done, we might be ready for launch? This could be it!

Since I had a bit of time until that build was done, and the webdevs haven't advised on server permissions yet, I took another crack at the orbital plotter.

After a bunch more testing with actual data, it seems Vectrosity.MakeEllipse might have some accuracy issues. That, or I'm using it wrong. And since I couldn't figure out if I was, I poked around for some clues. And coincidentally, it seems everyone's favorite space sim (Kerbal Space Program) also uses Vectrosity for orbits! Handy!

One of their devs mentioned that they use MakeSpline instead of MakeEllipse, since they can feed it sample points from their orbits for accuracy. And the code I wrote makes this pretty easy, too, so I set about converting my plotter to splines.

About an hour or so later, I had nice, smooth, and importantly, accurate orbit tracks plotted on the screen. No more low-value precision issues!

Next step, the celestial bodies themselves...

Mobile Rendering Fixed? For Good?

Good news, everyone! It looks like Tiago was able to finally squash the rendering bug in mobile!

His latest change successfully detects the device type, and enables or disables High DPI rendering mode accordingly. And so far, all testing points towards a success! His iPad 2, my iPad3, and several iPhone models are all showing correct behavior, and no crashes now.

Plus, as an added bonus, one of the input bugs on the main menu went away with it. Woohoo! A two-fer!

There are still a few minor bugs left, but...dare I say it, we may be ready to launch! Let's not jinx things by confirming it, but next week might be an interesting one :)

Have a good weekend, all!

Making Downloads Work

Hey Folks! More webdev work today, as I started migrating the download system into the live test server.

It started out pretty straightforward, as I checked-in the files, uploaded them to the server, and began testing. I had a few bumps as I changed things to work in the new environment (e.g. adding some code to bootstrap the content management system on a stand-alone PHP page).

However, I ran into a snag: the PHP I wrote to serve game files seems to have permission issues on this new server. The users/groups must be configured differently, since it worked on my old site but not here. (And manually running the commands on the command-line in SSH works if I use the folder owner user instead of the Apache user.)

So I've changed everything I could to be ready to go, and sent a message to the webdevs to ask for their recommendation on the permissions. There are some standard ways of doing it, according to StackExchange, but it's their hardware, so I don't want to mess things up (or make a security mistake).

Hopefully, that won't take them much time to respond to or do, and I'll be back to testing soon!

Webdev Unlocked

Hey Folks! Another webdev day today, and probably at least one more in store. Today's tasks were twofold: establish access to the test server, and setup the order template.

The first task was basically getting me setup to start editing files on our test server. Until now, the webdev team I hired made all changes, and anything I asked for was done indirectly through them. This worked for the most part (indeed, it's why I hired them!), but we recently ran into a snag with the game download system. It seems the CMS we're using doesn't have a good fit for the way NEO Scavenger file access is controlled.

Ultimately, we decided to revert to the file access system I wrote on the old site. It works, and has no known issues for now. Well, except for one: I'm the only one who is familiar with it :)

Hence getting me direct access to the server. This was always something I intended to get at some point, if nothing more than to satisfy curiosity. But this system setup pushed that need up a bit in our schedule. Fortunately, getting access wasn't as hard as I expected. The main thing was to get an SSH key setup on the remote server so I could log in and use git to update the server files. Also, it lets me use SCP (a fancier FTP) to upload game files to the server, which was the main reason I'd use it later on anyway.

So far, so good. My minor test edit is now live, and tomorrow, I'll likely start the bulk upload of the system for testing.

The second task was a lot less glamorous (yes, really). You know when you buy NEO Scavenger from my site, how it goes through FastSpring to process payment? (Of course you do! Wink wink.) Well, that shopping cart/payment flow needs the new site design, too. And the way it works is to basically copy the html and css files from the new site and make a template out of it.

It involved a lot of trimming unnecessary code, copying and pasting, minor tweaks, and trial and error. However, there is now a shiny new order template sitting on deck at FastSpring for when we flip the switch. One less thing on the list!

And that was it! That was my exciting webdev day. As I said above, tomorrow will likely require some more as I upload the file access code and test it. But hopefully, that's the last major thing I need to do for the new website.

Webdev Setup, and Some Orbital UIs

Hey Folks! Still a bit of downtime as Tiago finishes up the DPI-switching code, so I continued my resurrection of the orbital plotter prototype today. I now have the orbit plots aligned with the display center, and scaled to "kiss" the edges of the display. This will be my default 100% zoom of an orbit, from which I can start scaling up or down to represent zooming in/out.

The next step will be mapping a combination of zoom amount and physical distance to the display, so I can just pump some actual planet data into it and still see them on the screen. Eventually, the idea will be to start animating them based on the passage of time, and hook up some nav UI to plot the ship's position in the System.

I'm expecting flight to be somewhat indirect. It'll be mostly plotting routes, calculating supply needs, and waiting. I may have small sections where the controls are more direct, for things like docking clamp alignment, or maybe mid-route orientation reversal to begin deceleration. But no dogfighting or anything.

I think. I did rather enjoy planetfall in Starflight, so I'll have to see how that feels when I get there.

Before I could get too far along, however, the webdev team sent me notification that I was granted git repository access. Basically, this is access to the version control for the new website, so I can start uploading some of the more custom game-file-download system I built for the old site.

Unfortunately, this means ramping-up my knowledge on a constellation of systems, from types of git flows and bitbucket, to SCP, bash, and RSA keygens. I'm half annoyed that I have to do this, but on the other hand, I should really learn how to do this in case the poop hits the fan. Once this stuff is in place, I can still rely on the webdevs to maintain 95% of the site. But I may need to get in there for edits to this custom job if there's a hurry (or I want to save money by not paying for their ramp-up of my systems).

Anyway, more of that tomorrow!

Hope for a Crash Fix? Plus New Track, and Orbits

Hey Folks! Hope everyone had a good weekend. We decided to have fun this weekend, as opposed to unpacking/cleaning/fixing the house. Hawaiian poke, gourmet cupcakes, pho, and lakeside burgers were among the highlights. Yum!

I apologize for the lack of news Friday. Part of said weekend o' fun involved quitting early Friday since there wasn't much on my plate for once.

Exciting news from Friday, nevertheless: Tiago figured out what causes iPad 3 crashes! It turns out our very own fix to make it look good on high DPI devices (e.g. iPhones 6 and later) didn't sit well with iPad 3. Our guess is that since iPad 3 lives in a weird limbo where it has a retina screen but pre-retina hardware to run it, things get bogged-down on that device. The iPad 2 lasts a bit longer due to the lower screen resolution, and probably, the iPad 4 would last longer due to the beefier hardware to run the Retina screen.

So that's the good news. The bad news, is we don't have a way to make it work on both High and non-High DPI devices yet. The current plan is to see if there's a way to switch this rendering mode at runtime by detecting the device before launch. But this sort of device polling has already proven tricky, if the iPhone 6 fix was any indication.

I also finally finished uploading screenshots for all app stores and device sizes Friday. It took longer than it should've, but I should hopefully be set for a while.

For today, work mostly focused on admin stuff, and providing feedback to Josh on his latest track. He sent me a new piece to be used in a slick lounge/bar where players can recruit folks, or just get some R&R. His track was good, but there as this one bit I really loved and wanted to hear more of. His revision pushed it a bit more, and I think it'll fit well.

I'm planning to have three "styles" of bar. The aforementioned "slick" one, a techno one I've mentioned in earlier posts (like the bars in Shadowrun Genesis version mixed with Tech Noir from Terminator), and a backwater bar. This last one is where I spent a bunch of time collecting some examples of what I have in mind. We'll have to see if Josh thinks he can make it work or not.

Finally, since I'm still in a holding pattern on just about all things, I dusted off the old space prototype. Took me a while to figure out where I left off. I had to disable an audio-looping experiment that I wired-up when Josh and I were tinkering, and then I had to re-enable orbital track plotting for a UI I was working on. But that's back up and running now, and I started working on making the orbital plotting use actual data instead of test values.

It feels good to be playing with that code again. I'm anxious to resume!

Pages