Ultra-Why'd

If you've read my last couple entries, you probably saw this coming.
I got a refurbished ultrawide monitor in the mail, so naturally I had to play with it a bit (mostly Elite: Dangerous) but despite full time work I still managed to sit down and continue to reinforce my game development habit nearly every day, which is good!  Keep this up, and I might actually end up finishing something for once.

With all my highfalutin talk about multiple concurrent "Virtual GM" processes last week, I may have lost track of my situation.  This little Unity Roguelike engine I am making isn't even a month old yet, and when I started I had chosen to scour the rust off my intermediate-at-best programming skills and start work in a hugely powerful IDE I never really seriously tried to make a game in before (though I had done a few tutorials).  So this week reality stepped right in and hit me in the face with the mackerel of Get Real!  Instead of any pie-in-the-sky bits of awesomeness like "Virtual GMs," I ended up revamping my dull-as-dishwater "Chunk Handler" class that is supposed to do the following:
  • Set up a potentially unlimited number of coordinates in the x,y,z planes that can hold roguelike tiles.
  • Divide these tiles into evenly delineated "chunks" of tiles.
  • Allow the other classes of the game to set and read tiles from any coordinate in the game world regardless of whether or not a chunk has already been defined there by creating one automatically.
  • Automatically swap chunks to and from the memory / storage depending on if the game is currently using them.
Might seem even this is a bit too ivory tower, but naw, self-maintaining classes is just object orientation methodology at work.  Unfortunately, while I was saving that last bullet point for later, it turns out I was not doing any of the other ones quite right, either! 

I had already instructed Unity on how to create GameObjects representing tiles depending on what the player was looking at, but the method I was doing so was silly.  My other classes were like, "give me this tile object at this local tile coordinate, give me this chunk object at that chunk coordinate."  Silly me, tiles and chunks and their related coordinate systems belong to the Chunk Handler, everybody else gets global world coordinates and can only ask for or set the data held by the tiles via Chunk Handler interfaces!  (I probably made this mistake because I had created the Chunk Handler so recently that its various parts were on the foremost of my mind.  That's programmer myopia for you.)

So I basically moved the chunk and tile classes inside of the chunk handler as protected sub classes, which broke absolutely everything.  (Good thing there's not a whole lot of "everything" yet, just the classes I created to render the map and some basic overtures towards a procedural generation mechanic.)

Then I fixed the ChunkHandler so it's properly delineating and retrieving existing chunks (it wasn't even doing that!), and set up the proper public interfaces for setting and retrieving tile data (which so far is just comprised of an enum corresponding to tile type).  Would have been nice if I had done it completely right the first time, but I guess I'm too much the novice for that!  Still, I think what I did this week counts as excellent progress, and great practice was had, I just need to keep it up.
Yep, I've decided to take my progress report from reddit and repost it here.

Aside from that, I suppose I could talk a bit about how my new Acer Z35 monitor has changed the way I look at my computer...
...well, the screen is really damn big.  35" inches of pure MVA panel stretched out not five feet from my face feels a tad like Windows 10 ate my head.  As a lifelong computer geek, I'm not complaining about that.

I will say that there is a strong trade off involved with going MVA versus IPS.  On the upshot, dark pixels can produce a delightfully inky black that I can't enjoy on an IPS, where black often looks more like graphite.  On the downside, these MVA dark pixels are persistent buggers, they only update at about 20 FPS despite this being supposedly a panel that can be driven to 200 hz.  That means if you have something moving across a black screen, you'll get a "ghosting" effect that is basically black pixels not quite lighting up enough to display parts of it.  At worst, it feels a bit like my persona in the game must be suffering from blurred version all the time.

Most of my time with my new monitor has been spent in Elite:Dangerous, and this "ghosting" is extremely noticeable when you are observing orbit lines projected against the blackness of space and do any kind of movement, be it a pitch, yaw, or simply moving your virtual head.  This results in the orbit lines thinning or even vanishing entirely as the MVA panel fails to light up its black pixels in time for them to become visible.  Of course, the lines reappear at full thickness once they stop moving on my screen because the game is still running fine and what I was (not) seeing is just the monitor's inability to update its black pixels in time.
On my laptop with a great IPS display, this ship's "black friday" paintjob looks a bit blue-grey.  On my desktop's new MVA panel, it looks mostly black.
But, again, it's a trade-off.  Deep space in Elite: Dangerous is portrayed on the Z35 by lovely inky black that simply is not possible on an IPS panel.  I am hard-pressed to say which I would prefer, because I like me some dark blacks.  Black is like a clean slate for the imagination.

As far as my pocketbook is concerned, there was not really another choice.  Originally, I set out to purchase a good 27" G-Sync IPS monitor, but could not find one for the $400 I was willing to pay.  When I learned it was possible to get a G-Sync 35" curved monitor for $700, due to refurbished Z35s selling on Amazon, I was intrigued.  Had I instead picked up a higher resolution, ghosting-free purely IPS alternative (which would be ideal for most people) then it would have been somewhere in the range of $1000-$1300 and I really did not want to be spending $700 to begin with.  (In addition to being well outside of my price range, those alternatives would not have been 144hz, although it is difficult to say the Z35 truly qualifies as such due to its blurriness.)

A final caveat about going widescreen: not all games are particularly happy being run at 21:9 resolution.  Fallout 4 and Skyrim (enhanced edition) can be shoehorned into doing so by modifying the ini files, but it does not look quite right, particularly the menus and loading screens.  For games with this kind of issue, I recommend just biting the bullet and running them in an aspect ratio native to the game in a window centered on your screen.  Recent advances to NVIDIA's drivers allow for G-sync to function in windowed mode just fine, so you are not missing much.
The Division loves widescreen, and widescreen loves it right back.
Fortunately, there are still a number of great games that can run quite well on the widescreen.  Elite: Dangerous, Bethesda's new Doom, Divinity: Original Sin, and The Division are all excellent uses for such a monitor.  I look forward to dabbling more with them in the coming months.

Comments

Popular Posts