What have you accomplished this week?
by Matt Fairfax · 04/16/2004 (10:08 am) · 12 comments
Realized my last .plan was while I was still in San Francisco...which means it is well past time to write a new one =)
So what I done since then...hard to keep track =)
Shape3ds

I finally got around to releasing my Shape3ds Resource. I have gotten a small amount of positive feedback so far and no real negative so either no one is using it or I got it pretty well right =)
Map Viewer

As a part of some other stuff I am working on, I threw together a nice in-game viewer of .map files. I haven't implemented collision or lighting yet but they will get done soon enough. This'll allow you to directly load .map's instead of having to compie them into .dif. I see this as being very useful for preview gui's (with lighting calcs toggled off) or for development where you are willing to wait on longer load times (than if it were a .dif) but wanted to preview the maps faster. I have been thinking of doing a fancier stand-alone show tool with a severly stripped down version of TGE. Not sure when that will make its way onto my plate but the idea is there.
Map to 3ds Convertor

Coded this up yesterday...the idea is that a level designer can use a .dif as an invisible collision shell combined with a .dts visible mesh. They can export the .map to a .3ds and pull it into the modeller of their choice and build the visible geometry around it instead of having to eyeball the .dif in-game and try to match them up. I am going to submit a commandline version very soon and do a gui version not too long afterward. I plan to support exporting the collision brushes with a naming scheme compatible with my Shape3ds class along with the visible meshes. If I can get the collision in my Shape3ds class up to a good speed then it might be possible to use it exclusively. I have talked this over with some in the irc channel and they had some good ideas such as using max/maya to generate the lightmaps (very pretty ones) and other interesting uses of multi-texturing. Potentially could grow into a very cool project if the artists are interested.
Unreal Torque

*click for larger images
I wanted some data in a full CSG format that supported all of the boolean operations like union, subtraction, intersection, and difference so I brushed off my old .t3d (Unreal map text format) loader code and ported it into TGE. I haven't done much more than get the basic rendering in place but it should make for some nice test data. Now, before anyone get's their hopes up...Epic is *extrememly* opposed to UnrealEd being used for any other engine than theirs. They will pursue legal action if need be. That said, I am not planning on releasing this...it was more of a test case than anything. The most I might do is release a free Unreal t3d viewer or some such (would be nicely ironic =P).
Day Job

*click for larger image
Ever wondered what I do for my day job? *Sigh* Currently, I am writing a custom quoting software package in Access with VBA and a MS SQL Server backend...looks fun, eh?
On a good note though, after lengthy discussion with my fiance the plan is for us to move to Eugene, OR (where Garage Games and BraveTree are based) when she finishes her undergrad (2 years). This will be like a dream come true for me and I really apprecoate her supporting me on it! =)
Feedback Time
I find that I tend to be very random when I program. From night to night, I rarely work on the same thing. This helps me to stay fresh on the projects though it tends to spread me thin at times. I really have to reign myself in from starting too many projects and I only have limited success at that. My usual tactic is to pick a goal/milestone/feature to reach for that night (or lunch session) and code till I hit it. Some nights this means very little sleep but I have gotten pretty good at judging how far I can reach in the time alloted. I never feel like I have enough time though and that makes me push myself very hard (I went to bed before 1AM once this week and I have to be up by 7AM). I often wonder if that feeling of urgency will ever slacken...especially when I finally get to do this fulltime. I recently read through my archive of .plan's on GG's site and I was shocked at how fast the last 3 years have flown by. It only seems yesterday when I started on the Quake 3 stuff but in reality I have been working on it in some form for over a year. Lately, I have been focusing more on finishing up a lot of the stuff I started and pushing them out to the community before starting new things (not always succesful at that =).
So my question for you is: how do you work? Are you very organized/structured? Do you plug away at things till they are done? Or do you skip from thing to thing like me? How productive are your techniques/methods? What would you change?
So what I done since then...hard to keep track =)
Shape3ds

I finally got around to releasing my Shape3ds Resource. I have gotten a small amount of positive feedback so far and no real negative so either no one is using it or I got it pretty well right =)
Map Viewer

As a part of some other stuff I am working on, I threw together a nice in-game viewer of .map files. I haven't implemented collision or lighting yet but they will get done soon enough. This'll allow you to directly load .map's instead of having to compie them into .dif. I see this as being very useful for preview gui's (with lighting calcs toggled off) or for development where you are willing to wait on longer load times (than if it were a .dif) but wanted to preview the maps faster. I have been thinking of doing a fancier stand-alone show tool with a severly stripped down version of TGE. Not sure when that will make its way onto my plate but the idea is there.
Map to 3ds Convertor

Coded this up yesterday...the idea is that a level designer can use a .dif as an invisible collision shell combined with a .dts visible mesh. They can export the .map to a .3ds and pull it into the modeller of their choice and build the visible geometry around it instead of having to eyeball the .dif in-game and try to match them up. I am going to submit a commandline version very soon and do a gui version not too long afterward. I plan to support exporting the collision brushes with a naming scheme compatible with my Shape3ds class along with the visible meshes. If I can get the collision in my Shape3ds class up to a good speed then it might be possible to use it exclusively. I have talked this over with some in the irc channel and they had some good ideas such as using max/maya to generate the lightmaps (very pretty ones) and other interesting uses of multi-texturing. Potentially could grow into a very cool project if the artists are interested.
Unreal Torque

*click for larger images
I wanted some data in a full CSG format that supported all of the boolean operations like union, subtraction, intersection, and difference so I brushed off my old .t3d (Unreal map text format) loader code and ported it into TGE. I haven't done much more than get the basic rendering in place but it should make for some nice test data. Now, before anyone get's their hopes up...Epic is *extrememly* opposed to UnrealEd being used for any other engine than theirs. They will pursue legal action if need be. That said, I am not planning on releasing this...it was more of a test case than anything. The most I might do is release a free Unreal t3d viewer or some such (would be nicely ironic =P).
Day Job

*click for larger image
Ever wondered what I do for my day job? *Sigh* Currently, I am writing a custom quoting software package in Access with VBA and a MS SQL Server backend...looks fun, eh?
On a good note though, after lengthy discussion with my fiance the plan is for us to move to Eugene, OR (where Garage Games and BraveTree are based) when she finishes her undergrad (2 years). This will be like a dream come true for me and I really apprecoate her supporting me on it! =)
Feedback Time
I find that I tend to be very random when I program. From night to night, I rarely work on the same thing. This helps me to stay fresh on the projects though it tends to spread me thin at times. I really have to reign myself in from starting too many projects and I only have limited success at that. My usual tactic is to pick a goal/milestone/feature to reach for that night (or lunch session) and code till I hit it. Some nights this means very little sleep but I have gotten pretty good at judging how far I can reach in the time alloted. I never feel like I have enough time though and that makes me push myself very hard (I went to bed before 1AM once this week and I have to be up by 7AM). I often wonder if that feeling of urgency will ever slacken...especially when I finally get to do this fulltime. I recently read through my archive of .plan's on GG's site and I was shocked at how fast the last 3 years have flown by. It only seems yesterday when I started on the Quake 3 stuff but in reality I have been working on it in some form for over a year. Lately, I have been focusing more on finishing up a lot of the stuff I started and pushing them out to the community before starting new things (not always succesful at that =).
So my question for you is: how do you work? Are you very organized/structured? Do you plug away at things till they are done? Or do you skip from thing to thing like me? How productive are your techniques/methods? What would you change?
About the author
I am a Game Designer at PopCap who has worked on PvZ Adventures, PvZ2, Peggle Blast, and Bejeweled Skies. I am an ex-GarageGames employee who helped ship TGE, TGEA, Torque 3D, and Constructor.
#2
matt, you just rock! :) awesome stuff, again! That map loader and also the map converter will be a very cool thing to play with... :)
as far as "working strategy" goes... I really have to stay focussed on *one* subject at a time (well, at least one main subject... cause otherwise its bugging me all the time if something is lying around unfinished :P
one exception being if I have a bug I cant find or I am stuck with a certain problem... then I like to do something completely different (and if it's no coding at all for 2 or 3 days and instead playing guitar like crazy :P)
keep it up! :)
04/16/2004 (12:47 pm)
Noooooooo, it just ate my post... :( grrrrrrr, trying again... matt, you just rock! :) awesome stuff, again! That map loader and also the map converter will be a very cool thing to play with... :)
as far as "working strategy" goes... I really have to stay focussed on *one* subject at a time (well, at least one main subject... cause otherwise its bugging me all the time if something is lying around unfinished :P
one exception being if I have a bug I cant find or I am stuck with a certain problem... then I like to do something completely different (and if it's no coding at all for 2 or 3 days and instead playing guitar like crazy :P)
keep it up! :)
#3
I work sort of like you, I guess. I bounce around a lot. I usually spend a lot of time avoiding a task before I actually sit down and do it. Not sure if this is a sign of subconscious activity or just procrastination. Hmm. I usually feel empty if I don't have a lot of projects going at once, though. :)
04/16/2004 (1:31 pm)
Nice work, Matt. Keep it up. ;)I work sort of like you, I guess. I bounce around a lot. I usually spend a lot of time avoiding a task before I actually sit down and do it. Not sure if this is a sign of subconscious activity or just procrastination. Hmm. I usually feel empty if I don't have a lot of projects going at once, though. :)
#4
04/16/2004 (1:36 pm)
I am very intersested in the ability to use a .dif as collision, and .dts as visible copy. Keep us posted.
#5
04/16/2004 (1:47 pm)
Yeah i'm the same way as you MAtt. I constantly have a crapload of irons in the fire and I Swap around between them. I can't physically concentrate on one task to the exclusion of everything else until completion. If I try I just dont' get anything done. I NEED to have other projects going on, so I can swap around as my concentration wanes on one in particular.
#6
04/16/2004 (2:28 pm)
WhooHoo!!! I will start looking for houses for you Matt!
#7
Do the collision with convex (csg bsaed) brushes, then do the detailing with max/maya/3dmodellerofchoice.
Only issue, i think, would be that the mesh might need to be shoved into some kind of quadtree/octree, so that you dont load the whole thing.. perhaps some way of referencing parts of the bsp so that the bsp has a containment list for the dts mesh faces associated with it? :)
Anyway, I know you'll figure it out, it'll be uber cool!
04/16/2004 (4:11 pm)
Matt, you KNOW that skinning a .map with a .dts is the way to go! :) do that! :)) seriously.. I thought about it again today.. all the talk of quark and its lameness on the forums and on irc really reinforces this..Do the collision with convex (csg bsaed) brushes, then do the detailing with max/maya/3dmodellerofchoice.
Only issue, i think, would be that the mesh might need to be shoved into some kind of quadtree/octree, so that you dont load the whole thing.. perhaps some way of referencing parts of the bsp so that the bsp has a containment list for the dts mesh faces associated with it? :)
Anyway, I know you'll figure it out, it'll be uber cool!
#8
- Brett
04/16/2004 (8:29 pm)
I type 3 characters per hour, so I'm very focused. I usually finish one project every few millenia.- Brett
#9
So you want to know if i'm interested by a .dts quality mesh with shadows and a good collision detection ?!!!! :p of course !!!!
I try to be organised in my work. I think it is more simple for me than for you because i hate skip from thing to thing. I have one project.
My main technique is very simple : a global todo list and a little todo list (1 or 2 days of work).
But when you only have one long project, the main difficulty is motivation. Mathieu and i are IRL friends, and we have a good solution for that problem : a weekly meeting.
Christophe
04/17/2004 (1:03 am)
Matt,So you want to know if i'm interested by a .dts quality mesh with shadows and a good collision detection ?!!!! :p of course !!!!
I try to be organised in my work. I think it is more simple for me than for you because i hate skip from thing to thing. I have one project.
My main technique is very simple : a global todo list and a little todo list (1 or 2 days of work).
But when you only have one long project, the main difficulty is motivation. Mathieu and i are IRL friends, and we have a good solution for that problem : a weekly meeting.
Christophe
#10
You asked a very interesting question. It will be fun to see people's answers.
Myself, I'm actually kind of embarassed to admit the below. The way I work seems pretty heavy-handed and anal. :)
I operate very differently today than I did a few years ago. I used to get myself going on a bunch of projects, and it'd be rare that any would get more than 70-90% complete before I moved on to the next interesting and shiny thing. There are always so many exciting new ideas to work on, and it's hard to keep focused on an existing project when the challenging and fun stuff is already done.
A few years ago, I changed the way I do things. Part of this was due to paid work. It obviously doesn't fly to leave paid projects 80% complete, and over time I found that operating one way for paid projects, and another way for personal projects hindered my efficiency. Besides that though, I got frustrated with my approach to personal projects in and of themselves. I finished and polished a lot of my stuff, but not enough.
Today, I keep very careful track of the things I'm working on, and limit myself to finishing up projects before starting new ones (unless a sincerely urgent, high-priority project comes along). It's kind of weird for me, considering that I'm not this organized when it comes to anything but serious programming projects that I care about, but I now take a very disciplined and formal approach.
I keep a list of current projects and future project ideas, a formal schedule of project work, and a daily list of goals.
The list of current and future projects is pretty tightly managed. Basically, a project doesn't move from the future list to the current list until a current project is completed. Unless some urgent situation arises, I limit the current list to no more than two large projects, and 1 smaller project.
The schedule of projects is formal too. I set rough estimates as to how much time it might take to complete each project, and then track that against the actual time it took. Every project on the current list has to get at least 5 hours of work each week, but more is better. I save all this scheduling information, and reviewing it has been an excellent source of insight and self-evaluation for me. Associated with the schedule is a daily time sheet, where I punch in and out of each project. If I go eat, I punch out, and punch back in when I begin working again. If I start working on a different project, I punch out from one, and in to the other. So, I know, for example, that I spent 8.5 hours yesterday working on Torque docs, and 2 hours working on my own project.
Finally, I keep fairly aggressive daily and weekly goal lists. I write down and check off goals for the day, every day, and summarize each week. I agree with you Matt, setting daily goals helps motivate and get stuff done. Also, I save these lists and keep rough statistics on my success rate. These records have also been a great source of self-evaluation.
Overall, this process probably seems way, way too cumbersome for most folks. I certainly would've thought so, but now I found it very helpful. I'm vastly more efficient while working from home than I used to be, I always know exactly where I stand on projects, I've learned a lot about how I work best, I complete projects with high-quality and polish much more frequently than I ever have before, and the overhead for tracking all this stuff only costs about 15 minutes a day.
I'm still less formal with personal projects than I am for work projects, but it's nice to have a more uniform system. I think the old way of working was a bit more fun. But this is counter-balanced by the fact that projects get *completed* now, and that yields a lot of satisfaction and useful experience in itself.
Right now, I definitely feel like I'm the most anal, organized programmer I know. That's pretty freaky, since I used to be the complete opposite. Maybe one day I'll back off a bit, and be looser again. In the end, I think it will have been worthwhile to have experienced the trade-offs associated with both methodologies.
Ok, that's probably *way* more detail than you ever wanted from someone, but there ya go.
04/17/2004 (3:05 pm)
Cool stuff Matt, as always.You asked a very interesting question. It will be fun to see people's answers.
Myself, I'm actually kind of embarassed to admit the below. The way I work seems pretty heavy-handed and anal. :)
I operate very differently today than I did a few years ago. I used to get myself going on a bunch of projects, and it'd be rare that any would get more than 70-90% complete before I moved on to the next interesting and shiny thing. There are always so many exciting new ideas to work on, and it's hard to keep focused on an existing project when the challenging and fun stuff is already done.
A few years ago, I changed the way I do things. Part of this was due to paid work. It obviously doesn't fly to leave paid projects 80% complete, and over time I found that operating one way for paid projects, and another way for personal projects hindered my efficiency. Besides that though, I got frustrated with my approach to personal projects in and of themselves. I finished and polished a lot of my stuff, but not enough.
Today, I keep very careful track of the things I'm working on, and limit myself to finishing up projects before starting new ones (unless a sincerely urgent, high-priority project comes along). It's kind of weird for me, considering that I'm not this organized when it comes to anything but serious programming projects that I care about, but I now take a very disciplined and formal approach.
I keep a list of current projects and future project ideas, a formal schedule of project work, and a daily list of goals.
The list of current and future projects is pretty tightly managed. Basically, a project doesn't move from the future list to the current list until a current project is completed. Unless some urgent situation arises, I limit the current list to no more than two large projects, and 1 smaller project.
The schedule of projects is formal too. I set rough estimates as to how much time it might take to complete each project, and then track that against the actual time it took. Every project on the current list has to get at least 5 hours of work each week, but more is better. I save all this scheduling information, and reviewing it has been an excellent source of insight and self-evaluation for me. Associated with the schedule is a daily time sheet, where I punch in and out of each project. If I go eat, I punch out, and punch back in when I begin working again. If I start working on a different project, I punch out from one, and in to the other. So, I know, for example, that I spent 8.5 hours yesterday working on Torque docs, and 2 hours working on my own project.
Finally, I keep fairly aggressive daily and weekly goal lists. I write down and check off goals for the day, every day, and summarize each week. I agree with you Matt, setting daily goals helps motivate and get stuff done. Also, I save these lists and keep rough statistics on my success rate. These records have also been a great source of self-evaluation.
Overall, this process probably seems way, way too cumbersome for most folks. I certainly would've thought so, but now I found it very helpful. I'm vastly more efficient while working from home than I used to be, I always know exactly where I stand on projects, I've learned a lot about how I work best, I complete projects with high-quality and polish much more frequently than I ever have before, and the overhead for tracking all this stuff only costs about 15 minutes a day.
I'm still less formal with personal projects than I am for work projects, but it's nice to have a more uniform system. I think the old way of working was a bit more fun. But this is counter-balanced by the fact that projects get *completed* now, and that yields a lot of satisfaction and useful experience in itself.
Right now, I definitely feel like I'm the most anal, organized programmer I know. That's pretty freaky, since I used to be the complete opposite. Maybe one day I'll back off a bit, and be looser again. In the end, I think it will have been worthwhile to have experienced the trade-offs associated with both methodologies.
Ok, that's probably *way* more detail than you ever wanted from someone, but there ya go.
#11
I think that makes you the most anal, organized programmer I know also =)
I have tried a *wide* variety of ways to manage myself and my projects with various results. The tightly managed approach like yours did not work out for me b/c I found myself putting off working b/c I didn't want to mess with the last bit of hairiness or a particularily ugly and hard piece of code to write. Admittedly, far easier with non-paid stuff than paid =) I also found that the time to research stuff tended to widely throw off estimates and sometimes tasks I expected to be easy ended up being far hard than I anticipated. Experience has helped to temper this a lot but it still happens. A lot of game programming can push you into uncharted territory.
Really, these days I kinda just flow with whatever works at the time. Somedays this means writing out a long list of tasks and organizing them and some days it means picking up a completely separate project for the night (though I do limit myself strictly to projects that are related to the ones already on my plate and/or would help those in some way - for example I am workng on a lighting/shadow tutorial resource that is helping me to understand the lighting code in TGE better so that I can implement it properly for my Quake 3 stuff).
I think what it really boils down to is that there isn't any right way...you just have to find which way works best for you =)
04/18/2004 (1:49 pm)
Nice Josh!I think that makes you the most anal, organized programmer I know also =)
I have tried a *wide* variety of ways to manage myself and my projects with various results. The tightly managed approach like yours did not work out for me b/c I found myself putting off working b/c I didn't want to mess with the last bit of hairiness or a particularily ugly and hard piece of code to write. Admittedly, far easier with non-paid stuff than paid =) I also found that the time to research stuff tended to widely throw off estimates and sometimes tasks I expected to be easy ended up being far hard than I anticipated. Experience has helped to temper this a lot but it still happens. A lot of game programming can push you into uncharted territory.
Really, these days I kinda just flow with whatever works at the time. Somedays this means writing out a long list of tasks and organizing them and some days it means picking up a completely separate project for the night (though I do limit myself strictly to projects that are related to the ones already on my plate and/or would help those in some way - for example I am workng on a lighting/shadow tutorial resource that is helping me to understand the lighting code in TGE better so that I can implement it properly for my Quake 3 stuff).
I think what it really boils down to is that there isn't any right way...you just have to find which way works best for you =)
#12
I actually would like to take a less strict approach. I just found that I'm not discplined enough to do it. That is, if I give myself free reign, I find that I bounce around on a bunch of different projects too much. Too many interesting ideas. I have more fun that way, and I do accomplish and learn a lot. But when it comes to serious stuff that I care about, I pretty much have to take myself to task in order to get things totally completed. Besides, after reviewing all the tracking I've done over the last 3 years or so, I've learned a whole lot about how I work best, and how long it takes me to actually get stuff done.
So, at least for now, this approach works well for me. I would like to get myself to the point though where I can be less heavy-handed but still garner the same benefits. I'm just too much of a spaz. :)
Anyway, great question, too bad it's off the main .plan list now though. Besides that, very interesting stuff you're working on, as always. Your stuff rocks; whatever your approach to programming, it obviously works. :)
04/18/2004 (3:54 pm)
Fully agreed, Matthew. There's definitely not a singular right way. Gotta find what works best for you individually, which is why I think it'd be interesting to see a bunch of people's responses to your question.I actually would like to take a less strict approach. I just found that I'm not discplined enough to do it. That is, if I give myself free reign, I find that I bounce around on a bunch of different projects too much. Too many interesting ideas. I have more fun that way, and I do accomplish and learn a lot. But when it comes to serious stuff that I care about, I pretty much have to take myself to task in order to get things totally completed. Besides, after reviewing all the tracking I've done over the last 3 years or so, I've learned a whole lot about how I work best, and how long it takes me to actually get stuff done.
So, at least for now, this approach works well for me. I would like to get myself to the point though where I can be less heavy-handed but still garner the same benefits. I'm just too much of a spaz. :)
Anyway, great question, too bad it's off the main .plan list now though. Besides that, very interesting stuff you're working on, as always. Your stuff rocks; whatever your approach to programming, it obviously works. :)

Associate Anthony Rosenbaum