Return to “[Archived] Daily Dev Logs, 2012 - 2015”

Post

Week of March 10, 2013

#1
Sunday, March 10, 2013

Summary

I wasn't very happy this morning when I realized that someone had stolen an hour from the day, in what was clearly an underhanded attempt to make my already-unusually-short Sunday even shorter :x So, I did what any reasonable person would do: I mounted an attack on time itself. I'm very pleased to report that it went well, and, as a result, I've logged record hours for a Sunday. Take that, daylight savings time 8-)

Lots of great stuff happened today, but one of the most exciting was a huge performance gain!!! I was noticing that pulses were taking up a lot of resources during large battles (understandably, since hundreds of them are being created and destroyed each second). I'm not sure what possessed me to try it, but I decided to change the memory allocation scheme for pulses to use something called a pool allocator, which is generally a good idea for things that are numerous and are created/destroyed often. I could never have expected the result....somewhre between a 50-100% performance gain!!! Wow, that's simply massive!!! The battle of 50 ships that I was testing on went from being a bit of an unsteady 45 to 60 FPS to being consistently 100+ FPS :D One step closer to massive battles!!!

Since I was on a roll with technical things, I decided to take a plunge into the secret sauce that LT uses to make objects look extremely detailed even at very close distances. I ended up vastly improving the quality of the algorithm, and it resulted in significantly more detailed looking objects! Guess what the trick was? Exponential falloff ;) Go figure.

Other than these great technical achievements, I did a boatload of work with the interface today - no, not just internal work, but actually using the blasted thing to make stuff. I'm getting a better and better idea of how I want the menus in the game to work. Today, in particular, I had a few breakthroughs and am now really excited about them!!! Remember when I said I would be thanking myself for that interface overhaul? Well, it's already begun. I am starting to see patterns and paradigms in interface design that I never would have seen with the other systems. It's absurd how quickly this new one allows me to throw together highly-functional, complex interfaces that look great. I am already thanking crazy-ripping-code-out Josh for his good work on burning the old version at the stake :)

Somehow, I have a feeling that someone...perhaps my body...is going to make me pay back the hours that I stole today...which could conceivably mean less hours tomorrow...we'll see. For the time being, I'm really happy to have gotten off to such a great start to the week!

March Josh: making January Josh and February Josh look like lazy sloths. Yeahhh :ugeek:

Hour Tally

Coding: 8.67
Internet: 2.54
Testing: 2.92
Thinking: 0.41
Total Logged Time: 14.55
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford
Post

Re: Week of March 10, 2013

#2
Monday, March 11, 2013

Summary

Well, unfortunately I was right about having to pay back the debt for the hours that I stole yesterday :( I guess in the end all I really did was switch the usual roles of Sunday & Monday... -_-

The biggest part of what I did today was prepare the game for docking / dockable objects. Once upon a time, they were actually already implemented, and you could dock with planets (as shown briefly in the KS video, where I was doing some trading on planets). But it was very primitive, and I didn't really like the docking system. I've implemented a new one today that I like much better! Very simple and clean, basically a dockable object just has some invisible "docking zone," and when you're within range of one of these docking zones, you will get a HUD message that says "Press <key> to dock with <location>." Simple, effective. Maybe it will get more complex in the future with having to request permission / waiting in line / whatever, but right now, I'm liking the simplicity of this. I'm also not a big fan of waiting on pre-baked sequences, like the docking sequence in Freelancer or the X series.

Another big thing that I'm really excited about from today: massive performance boost in rendering text!!! This is the second day in a row that I've achieved a significant performance boost to a bottlenecked subsystem...and I'm so happy!!! LT is running just a little too smoothly these days 8-) (*knocks on wood*). But text rendering was previously a big concern, and it was so slow that when I pulled up a widget with lots of text, it could easily take 50% of the frame time. You know you've got a problem when drawing text is taking the same amount of time as rendering a procedural universe...! But not anymore :) Now I can put loads of text on-screen and not even feel the hit! This is great, as I really don't have to be concerned about using a lot of text-based widgets anymore. I can design interfaces as I like and not worry about it :)

Interestingly, while doing some research on font rendering today (I was considering using a different library for font rendering, but ended up sticking with SFML, just optimizing it), I learned a very, very cool thing about modern font rendering: they use distance fields (aka scalar fields)!! Wow, what a neat little surprise..! Makes total sense too, because storing a glyph as a distance field allows you to perform some beautiful-looking interpolation on the distance field, which yields way smoother edges than naively interpolating color. It also allows you to do effects like glow / drop shadow almost for free!!! I'm always been envious of how scaleform interfaces have a lovely glow effect on the text, and I've wondered how they do that, because the glow looks very high-res - much higher than the usual 4x downsampled bloom filter that we use to achieve glow on other things. And now I know the answer...it's so easy! Someday I will implement a font rendering engine from scratch using distance fields, so that I can get those cool effects...for now, though, I don't have time for that. Fancy text effects coming in LT2 ;)

Alright, now that I'm all caught up on sleep, I'm hoping for a big day! :D

Hour Tally

Coding: 4.62
Internet: 1.98
Testing: 1.54
Total Logged Time: 8.15
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford
Post

Re: Week of March 10, 2013

#3
Tuesday, March 12, 2013

Summary

Honestly, it was a really bad day to be an AI pilot. Between the new HUD trackers that indicate the relative direction of detected enemies, and the new lead-time-indicator for selected targets, there really wasn't much of a chance for anybody in range of my weapons today. And no, I didn't even have to pull out "The Archangel"...with the help of the lead time indicator, I'm finally able to use non-cheat weapons to do damage ;)

So yes, it was a pretty big day. On top of the HUD improvements (which also included widgets that indicate the integrity of the ship, i.e., shields / armor / hull), I did a huge amount of work on the interface in general (again, not internally, but rather, building stuff with it). I'm really happy to say that I'm becoming more and more pleased with the interface with every day that goes by :) I honestly have no idea how other people will like it, but that's part of the point of the prototype I guess. But I love it, and I know that I'm going to love using it to interact with the infinite universe...and, after all, I was building this game for myself in the first place, so it's a good sign that I love it ;)

I started work on the market interface, which you will use to trade goods when landed on stations / planets. I didn't get that far - basically just a rehashing of the inventory screen - because I'm not yet positive about how I want trading to work yet in terms of the interface. This is just going to take some thought time and experimentation I suppose!

I'm terribly ashamed to say that I spent like an hour or so trying to figure out how to make an arrow icon. I mean, not just any old arrow, but a really nice arrow...like a curved, stylistic arrow to point in the direction of enemies on the HUD. In the end, I gave it a rest and admitted defeat for the time being - apparently my scalar field skills need some more sharpening, because I wasn't able to coax the math into producing the attractive arrows that I was hoping for :oops: Maybe I need to use more exponential falloff next time... :roll:

Oh, by the way, dare I say it....today, I'm pretty sure LT tricked me several times into thinking that it was a game 8-) That's a very good sign!!

Hour Tally

Coding: 8.49
Composing: 0.04
Internet: 3.16
Testing: 3.21
Thinking: 1.17
Total Logged Time: 16.06
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford
Post

Re: Week of March 10, 2013

#4
Wednesday, March 13, 2013

Summary

Hmmm...today I was supposed to implement cruise mode and afterburners...I think I did everything but that :roll: In a good way, though, because I did a lot!

Thinking about implementing some kind of cruise drive / fast travel led me to improving the thrusters, which have needed some attention for some time now. The trails and glare have gotten pretty ugly compared to the rest of the game...so I took care of that, which was like a vacation compared to all this non-graphics-related programming of late! But, alas, after the trails looked better, I realized that the thrusters still sounded horrible, because I had just thrown in a stock loop. Rather than troubling our sound artist, I spent a bit of time to make one myself, just for the time being. Of course, when in the sound zone, one does not simply walk into Mordo...eh, one does not simply make only a single sound without making more...so I cooked up something for railguns. Speaking of which, I finally implemented railguns as a legitimate, first-class weapon type! They've now got their own sound and graphics!

I'm hesitant to divulge the next part of my day, because I really don't want to get anybody's hopes set too high. Let's just say that I was doing this "for fun"...just testing out the waters, if you will. Indulging myself in a little bit of dreaming. So I know we all want voices for LT. And by "we all," I mean me, but also at least a few other people, because one of the largest threads ever on this forum is concerning voices in the game (viewtopic.php?f=5&t=144). You may have noticed that this is one of the largest threads ever, but also impressively devoid of my own presence (I haven't posted at all on that thread). The reason that I've avoided it so much is that I'm so terribly conflicted on voices. I want them so badly, but it's so much extra work! Not just to hire good voice actors, that's not really the problem...but also to program the engine to introduce enough interesting variety so as to remain interesting after hour upon hour of play...that's not easy!

Nonetheless, today, I dipped my foot into dangerous waters, and spent some time working on vocal audio - in particular, trying to match that distinctive space sim "chatter over the ship radio" sound. I played around with recording my own voice, saying silly things like "Lock 'n load boys" :P, and then tried to figure out how to get the radio chatter sound. I'm actually pleasantly surprised by how far I came in one day, and I've already got a few vocal clips that, in my opinion, could actually work for the game! Not that I plan on doing the voice acting work myself - I'm sure I would want to hire professionals for that. But it's actually really comforting to know that this isn't as impossible as I thought it was. Now, please understand, this is not a guarantee that this feature will be in the game. Far from it. But at least you know it's on my mind - and I want it as much as (if not more than) everyone else :)

PS ~ Lots of internet time today, but most of it was spent watching / reading / learning about manipulating audio to achieve certain effects, as well as perusing online sample libraries to get the right source material for the thrusters and railguns. Oh, and also an unfortunate amount of playtesting time, spent nailing pesky fighters with said railguns ;)

Hour Tally

Coding: 4.16
Composing: 2.33
Internet: 3.44
Testing: 3.16
Total Logged Time: 13.09
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford
Post

Re: Week of March 10, 2013

#5
Thursday, March 14, 2013

Summary

Hmm...just woke up from an unintentional nap...turns out I do still require sleep :| Shame, shame.

Today, my primary focus was more, more, and more!!! One of the things that I pitched in the Kickstarter was large fleet combat - epic space battles. It's true, I have every intention of fulfilling that promise..but doing so isn't going to come without some serious technical pizazz. There's a reason that you don't often participate in all-out fleet warfare from the 1st-person perspective in games: it's hard to get that many ships drawn and simulated in 16 milliseconds (which is the amount of time that we have to do everything we want to do each frame if we want to maintain 60 FPS). After a pretty intense day of optimization, I'm sitting nicely at 50-ship battles without a problem. I'm thrilled about that, because it does already look fairly epic on screen. But we need more! We need at least 100. This is just going to require more days like this throughout development, and a lot of thinking time. I doubt the Prototype will be able to handle 100+ ships, but I will try as hard as I can to make sure that 100-ship battles are perfectly feasible for the real LT! :)

Interestingly, although I keep saying that the player can own and fly any kind of ship, I've never actually tried piloting a capital ship before...weird :| Today I did that, and made the necessary adjustments to bring it back into balance and make sure that piloting a battleship is hard but not painfully so. It's quite fun, being massive and all :) But it turns out I had to cheat the physics just a wee bit, because, in reality, piloting a battleship is truly painful, at least according to the equation for the moment of inertia of a block. But I've found a good compromise that makes steering one of these beasts challenging but still fun. It's pretty cool having that larger inertia...it really does make you feel like you're commanding a beast, rather than a quick and agile fighter. I'm glad I tried it :D I still need to add multiple views for capitals, though, as it's much more important to be able to gun from many angles when you've got a hulking beast.

Oh, and I finally got that cruise mode implemented, which I said I was going to do yesterday! I love cruise mode :D

Tomorrow's slated to be a big day, as it says on my list that I'm supposed to implement squads. Oh boy. That thing I keep avoiding..but now it's in writing, so I can't avoid it anymore :? Hoping for an intense day, with less unintentional sleep :|

Hour Tally

Coding: 5.05
Composing: 1.68
Internet: 2.41
Testing: 2.45
Thinking: 0.55
Total Logged Time: 12.13

Comments
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford
Post

Re: Week of March 10, 2013

#6
Friday, March 15, 2013

Summary

Really wasn't the big day I was hoping for :( Not sure why, but this week is turning out to be pretty underwhelming compared to last week. Maybe I can slap myself into high gear for the last day..

I set out to make squads/fleets happen today, as stated in yesterday's log. But, as usual, I got sidetracked by a million and two different things that ultimately resulted in a less-than-spectacular 25% or so on the fleet implementation. The good news is that a host of random things now work better...yay? Random things like interface bug-fixes, improvements to the HUD, fixed target tracking in the command interface, less greedy sound engine, etc. It's all stuff that needed to be done, but I wish I had been able to pull some harder hours and make fleets happen on top of all this garbage.

Since the rest of my log has been a bit downcast, I'll share with you a very exciting little technical detail that made me happy today. This really won't make sense unless you're a programmer, but I'll share it nonetheless. It's probably the most useful thing I ever learned in that operating systems class I took :) So you know linked lists? Yeah, cool stuff, but usually I avoid them like the plague, because, traditionally, they operate on non-contiguous, dynamic memory. That's asking for trouble in a real-time application. Usually I prefer contiguous storage (a "vector") when I need to keep a list of things. However, sometimes, there is an option that blows both a vector and a traditional linked list out of the water. It's called an internal linked list, and it makes a super clever observation: if you can guarantee that a given element is only going to be a part of one list at a time, then you can directly place a linked list "element" (which could be a forward pointer, or forward & backward pointers, depending on the type of list) inside the type that you're keeping a list of, and use that to do all of the bookkeeping! This way, traversing the list is the same as traversing the elements of the list! It also means that keeping track of the list is the same as keeping track of the elements of the list! Zero extra memory required, zero extra indirections, zero extra cache misses. Whoa!!! It's almost magical. Not sure why I didn't remember this neat trick earlier, but, for some reason, I remembered it today when looking through some code that was using vectors to keep track of things, and I realized I could make the whole thing a lot cleaner, simpler, and less memory-hungry with this approach. After a bit of low-level pain, I had it working, and had replaced several parts of the engine :D I love these kinds of clever programming tricks. Thanks CS140!

Alright, really need to kick it in high gear today :geek:

Hour Tally

Business: 1.06
Coding: 6.04
Composing: 2.22
Internet: 1.93
Testing: 1.38
Total Logged Time: 12.63
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford
Post

Re: Week of March 10, 2013

#7
Saturday, March 16, 2013

Summary

A fairly average day, which is kind of a shame, but I guess they all can't be extraordinary, otherwise..that would kind of defeat the meaning of extraordinary :| Worked most of the day on the command interface, doing various fixes and touch-ups.

One of the nicer, small changes that I made today was to make it easier to select unis in the command interface. Previously, I used precise raycasting to determine whether or not you're hovering over an object. That means that, basically, the thing was exact: if you were hovering over a pixel that the object occupied, then the object would get selected, otherwise it wouldn't. There are many times when exactness is a great thing, but after using the command interface for some time now, I can firmly say that this is NOT one of those times! With exact casting, it's almost impossible to select small fighters, especially at any high level of zoom. The reason is that a fighter may well project to no more than a single pixel on the screen - so to select it, you would have to hover exactly over that pixel. Not intuitive! Today I changed the way this works to make it less accurate. In particular, I now use bounding boxes for all objects. This allows some amount of error when hovering over the object. More importantly, however, I expand the effective bounding boxes when the object projects to very small area on the screen. This means that you can now select fighters if you're within 5 to 10 pixels (of course, this radius is adjustable) of where they project on the screen. This makes a huge different in the usability of the interface!

I started to implement right-click actions for the command interface today, and got so far as being able to order units to move/attack/follow via right-click, but I quickly realized that I have some re-thinking to do with respect to the AI engine in order to properly implement order-giving. I'll need to spend some serious thinking time on this one in order to complete the relatively-simple task.

In other news, I started working on the procedural name generator for weapons in particular. All items will probably end up using the same generating technology, but weapons are, naturally, a fun place to start. I really love thinking about name generation, because it's a realm of pure constructiveness. Trying to design procedural algorithms to construct things with coherence and structure is probably one of my favorite things ever :) Lucky me, because there's still a LONG way to go with constructing things in LT...so I guess I've got a lot of exciting work ahead of me :D

Hour Tally

Coding: 5.40
Composing: 1.91
Internet: 2.48
Testing: 1.21
Thinking: 0.90
Total Logged Time: 11.90
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford
Post

Re: Week of March 10, 2013

#8
Week Summary

General Sentiment

Well, let's face it...it would have been impossible to beat a week like last week! Still, this week saw a lot of improvements, especially in the realm of LT feeling like a "game." With all the HUD work that happened this week, it's really been feeling a lot more like a game to me, and that's super exciting :D There's still a long way to go for the prototype, though, so I can't afford to waste any time in the coming weeks. We're halfway through March already (!?!?!?!) ...things are going well, but they need to start going even better. Onto next week!!!

Major Accomplishments
  • Significant performance optimizations in several areas yielded dramatic increases in framerate
  • Greatly improved "FDM" technology for making objects appear detailed at all distances
  • Greatly improved thruster visuals
  • Implemented docking zones
  • Implemented HUD target trackers and target lead indicators
  • Implemented cruise mode
  • Implemented railguns as their own weapon type (including new visuals)
  • Started on market interface'
  • Started on fleet creation interface
  • Lots of improvements to the command interface
Combined Hour Tally

Business: 1.06
Coding: 42.81
Composing: 8.17
Internet: 18.01
Testing: 15.96
Thinking: 3.02
Total Logged Time: 89.04
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford

Online Now

Users browsing this forum: No registered users and 2 guests

cron