No such place as far away











{December 1, 2009}   I’m alive!

Okay, so I’ve just disappeared from this blog for the past…uh, 4 months and a few days. And now I popped out of nowhere to say I’m still alive and well! I had very good reasons to disappear, though! I was busy :-D

Well, that’s not a good reason, is it? I guess I simply didn’t feel like writing here, then, because I was too consumed with lots of decision making. Soon before and soon after graduating, I reflected intensely about my goals and what to do with my time and skills (we are in this life for only a short blink of a time before vanishing for good, after all). Since I’m a believer of the “walk as you talk” attitude, I’ve been trying to redirect my life according to my brand-new (but well thought-out, or so I hope) priorities.
The main change is that I don’t want to be a game developer anymore. Yeah, really. I know I’ve been preaching about my “I wanna be a rock star…ops, game programmer when I grow up” dream since forever, but come on. Who am I to lie to myself? The truth is, I fully respect those who make games. They are generally skillful, they are generally hopeful, and they go through A LOT. I’m not talking here only about my experiences at Tectoy or Overplay, which are both nice companies whose owners are bold enough to foment the Brazilian game industry even with all its gigantic obstacles. It’s just that I don’t want to sit all day on a (possibly uncomfortable) chair coding gameplay rules, and then talk about games with my work colleagues, and play games during lunch break. And get no paid overtime, and earn less than the average programmer guy or girl. And THEN, possibly get laid off after a project is done, because, you know, “the games industry is recession-proof” as the top executives of some companies (like EA, Gameloft, and so on) liked to say before laying off from hundreds to thousands of employees worldwide recently. Fortunately, I wasn’t laid off, and I never had to do overtime because I was an intern, who have special rights since they are studying and all. However, I got a glimpse of all this, both from people who work with games abroad (U.S, UK, etc) and from seeing this sort of thing happen to people I know and care for. So…this isn’t the life I want for me. Ever.

I’m not saying I’m special. I’m not saying I won’t sit down for hours on end, coding. Actually I do that. I love programming, and that’s what I do. The difference is: that’s what I know how to do, *among many other things*, and I want to decide *to which cause* I will devote my skills and my time and my blood (so to speak) to. And making games just doesn’t seem right, at least not games who are really cool or cute but actually disposable, or don’t even impact positively on people (not to mention those that are arguably damaging). Playing and making games are 2 things I really like, no doubt. But the point is, I do prefer talking about politics, and studying applied computer graphics, and reading about business. I prefer reading Fortune, and not Nintendo World. And believe me: I don’t know how all this transformation from who I was (when?) came out to be, and why it took me so long to realize my absolute passion for games has pretty much faded.

Anyway. As you may have guessed, I’m on a new wavelength now. I’m working at Eldorado Research Institute, as Junior Software Engineer. It’s amazing over there, and I’m being given a degree of responsibility over the project I’m working on that I had never had before, to my utmost joy. This semester at University is almost finished as well, although I still have a project (modifying the way ray-casting is done here) to hand out and an exam.

By the way, besides working, I’m taking graduate-level and Computer Science courses this semester and the next one, until I receive some sort of answer from DigiPen and University of Alberta, the 2 schools I ended up applying for. The reasons I still applied for DigiPen even though I don’t intend to work necessarily in the games industry, and how in the world an University from the far, cold Canadian province of Alberta is my top choice of graduate school are to be dissected in a future post.

Which, let’s all pray, will come before another 4 months have passed! x-)

P.S: I’m 22 now. Hooray! And have an XBOX 360 with Fable 2, Assassin’s Creed and Bioshock to play on my free time. Which is almost none theoretically, even though I do manage to play some hours a week. Somehow o_O



{July 26, 2009}   A Journey’s End

Wow, I still can’t believe it! My undegraduate days ended in the beginning of July, when Kin and I presented our last programming project. I wish I had posted about this sooner, but I got carried away by all the decisions I had to make during this one month. In my last post I told you guys how I was absolutely piled up with work to do, had lots of projects to program, and exams to study for. So in order to survive through the challenge of actually graduating (and if possible with good grades!),  I ended up getting some days off of work to focus only on studying, and studying, and programming, and then studying some more. Fortunately, and thanks to the ever-present help of my friends (study group rocks!), supportive parents (who were understanding enough to see me gone from home for a few weekends) and even my colleagues at Overplay, I managed to succeed and got quite good results (even a few 10s) in my last semester as a Computer Engineering undergrad. Because, and THAT’S precisely what I haven’t digested yet, I’m a fully-fledged Computer Engineer now.

Scary.

So during July I basically had to decide what to do with my life for at least some months until I finally apply to Digipen, Guildhall and Carnegie-Mellon, and receive some definite answer from them. Since the guys at Overplay wanted me to work full-time, I had to negotiate to work less hours (24 per week, to be precise), so as to be able to take some graduate-level courses at Unicamp. The whole thing was a bit stressful to me because I really, really didn’t want to stop working at Over(it’s a very cool place to work at), but at the same time I know I need to keep on studying. My intention in taking these courses is to better prepare myself for whatever challenges will come my way when I go to US. After all,  I’ll be studying, in English, subjects that would be quite difficult even if I were to learn them in Portuguese, so I’d better acquire a very good knowledge base. Since I’ve been quite inclined to study Visual Computing (a broad designation for Computer Graphics, Image Processing, Computer Vision and derived areas like Information Visualization, Augmented Reality and whatnot), I’m going to take related courses. I still haven’t decided which, though. Oh, and I’m going back to Tae Kwon Do practice as well! This is something that makes me really happy…throwing punches and kicks around is extremely relaxing, and I missed fighting during this last semester.

As anyone who knows me from High School can confirm, University hasn’t changed me much. I still like throwing punches and kicks, playing with swords (and would collect them if only I had spare $ to do so), watching blockbuster movies and barely-known anime series, reading (but never quite finishing) huge books and listening to music from the 80s. I still mostly talk to and hang out with guys, am easily distracted (but somehow very good at listening, or so people say), and, of course, I still do have the habit of falling hopelessly in love with (and only with) close friends. Good thing I’ve been with someone for a long time. Although that probably just confirms my habit, huh?

Well, the one thing that really changed inside me was that which I never thought would change: I’m not  in love with games development anymore. Instead, after all my experience programming games since 2007  I realised I really like some parts of it, and that’s that. I mean, I like it as a job and as a hobby, of course. The whole process in which a game you worked on sees it to the end market as a final, polished product is incredibly fascinating; I bet it’s rare for those programmers who work with, say, databases or any B2B product to feel quite so enthusiastic about what they are doing. However, I’m pretty certain I don’t want to work as a gameplay programmer forever: I like lower level stuff, for example graphics engine programming and developing the hardware-software interface of embedded systems, including but not limited to, videogames. That seems to be my thing, at least for now, so I’m headed for that. But who knows what I’ll be up to next year, or the next, or the next? I’m learning to not be so much worried about the future, and just planning what I can. Having a direction and then enjoying the road to each of my goals, redefining them as I go. It’s nice, though, to feel that whatever road I decide to walk on, a part of me will permanently stay the same. One of these parts is certainly the Engineer in me, born in March 2005. And still growing up.

Since music talks louder than words (and I’m not good with words at all), here is a thank-you gift for some people who have been really important during this journey I call “Going from a Spoiled Teenager Who Thinks She is Incredibly Smart to a Barely-Independent and Sometimes Too Serious Young Adult”. Geez, that’s a long name for a journey. Hope you have a better  name for your own.

A thank-you to The One. Not the ring! Though the power over me is nearly the same, and…Just kidding. You know who you are. And I love you.

http://www.youtube.com/watch?v=27JJmMmB8p8

A thank-you to my friends. You also know who you are. And, well, I love you too.

http://www.youtube.com/watch?v=P54ybJ0pX9g

A thank-you to an old love, who taught me a lot.

http://www.youtube.com/watch?v=yZc0y0HQO78

A thank-you to  a person who doesn’t like me, but thanks to whom I listen to Led Zepellin to this day. And listening to LZ is a Good Thing.

http://www.youtube.com/watch?v=na_7O9J0tHY&feature=related

See y’all next post, folks!



{June 2, 2009}   Piled Higher and Deeper XD

I’m not a PhD (fortunately, I guess?) , but I’ve certainly been piled higher and deeper than ever before! To the point I simply postponed writing here for nearly 2 months. Wow, this had never happened before…>.<
For all those that read stuff here, my apologies, but I haven't forgotten about you guys. I was really just trying to manage my time properly, amidst too many activities from school and work, all with tight (and coincidental) deadlines and so on.

Well…many things have happened for the past 2 months, as is expected. The best thing was that the game I made for the DS, in a team of 9 people (including me), was finished in May and is to be released in July 21 this year. It is currently on pre-sales at both German and North-American Amazon, and I fiercely wish its success! Although I’m all against stereotypical games for girls (and boys), this particular game isn’t really “all pinks, flowers and butterflies”, although in terms of art it does have too much of those for my liking. Its gameplay, and that’s my point here, is really its strongest point, being a lot funnier than I had expected at first when reading the game’s design document, and WAY funnier than some games I bought for DS when I travelled to U.S last year (yeah, Animal Crossing, I’m talking about YOU). So, all in all, I’m pretty happy that a game I worked on is to be officially published, even more so considering it’s not for PC, but to a dedicated gaming platform. And I haven’t even graduated yet :-)

Right now I’m working on another game, which personally I’m even more motivated about than I was regarding the first one. This game is just too cool, and I’m especially loving its artwork. Since now I’m a bit more experienced with the DS as well, I also get to program more efficiently, losing less time with silly mistakes, and spending more time with things like what the best way to design my code is, in terms of re-usability, resource management and performance. My team’s lead programmer in this aspect has been essential, as he is always patient in teaching me how my code could be modified so as to be simultaneously simple and meaningful.

As for college, things are definitely complicated. During May I was choking full of exams and programming projects to hand out, not to mention my dreaded Electronics’ circuits. Oddly enough these haven’t been giving me as much trouble as, for example, the last Compiler Construction project. That one was rough: building an instruction generator for a given tree-based intermediate representation for code. Or, in other words, given some code in the Minijava language, the compiler I’ve been making throughout the course checks it for lexical correctness, then parses it to build a syntax tree, checks this syntax tree for mistakes (such as inheritance cycles) in 2 passes, transforms this tree into an intermediate representation tree, and now it uses the latter to generate assembly instructions specifically for the x86 architecture. This last step can be divided into the instructions generation itself, that supposes no limits in register quantity, and liveness analysis (basically, verifying which variables are redundant and which can be placed in certain registers or on the stack, without interfering with each other). Jeez! So much trouble for a list of ugly assembly instructions, right? But…there’s no denying compilers are one of the most ingenious inventions of the computer world, and the engineer in me can’t help but sigh, marvelled by the whole compiling process…

Completely changing the subject (but not by much): this week I’m quite desperate, so to speak, for 2 reasons.

First reason: I’m pretty certain I got a horrible grade on an exam about Linear and Network Programming, due to the simple fact that instead of studying extremely hard for the exam (as it turns out I needed to do well), I preferred to explore my new Ubuntu Linux. I decided to adopt Linux as my operating system of choice, after 1. finally admitting that doing stuff by command line is much more appropriate to me (well, I only know Shell script, and no, I don’t have the time to learn DOS commands right now); and 2. realizing Linux (or maybe only Ubuntu, I’m not sure) has a much better energy management system than Windows, effectively keeping my processor and GPU at reasonable temperatures. For some reason, my Windows doesn’t like to keep coolers on when they are needed.

Second reason: I’m blindly implementing an article that explains how to obtain an approximate solution to the minimum steiner tree problem, using some heuristic and genetic algorithms to improve the solution. I’m using C++, which is good because I use it every day at work. But I’m also using a bunch of STL stuff I hadn’t used for quite some time (C# and .NET, it’s all your fault for being so damn easy and letting me unused to the hardships of life!). I chose this article because it is well-explained, at least, but definitely its heuristic isn’t one easy to implement, using Floyd, Prim, Kruskal and subgraph inductions to get each possible solution. Hope it all works fine, as I have to deliver a solution until next week, for a class named Algorithm Analysis II. The good part is that I love coding solutions to new and hard problems; the harder, the better!

Lastly, I’m looking to move out of my current small kitchenette to a bigger and/or cheaper place, but equally clean and decent =P Saturday I shall look some, and I’ll tell here what I’ve found, since looking for these things is really an art.

Oh, and since I promised I’d always finish up with a picture…here goes Zeebo who’s been released this week on Rio de Janeiro:

images



{April 11, 2009}   Easter feelings

Hello all,

Since Thursday, I haven’t gone neither to work nor to University classes, because yesterday was a public holiday and tomorrow will be Easter Sunday. Yay! I was REALLY in need of a rest, and admit maybe this semester I’m pushing myself too hard, with the 25 weekly hours of classes, 20 hours of work at Overplay, plus who knows how many hours of studying and assignment programming at home. Not to mention training for the GRE =/ Well, well…it’s all for a good cause, I suppose, namely the cause of graduating soon and spending a whole year (until September 2010), in case I’m approved by Digipen or the Guildhall, just doing whatever I want, with no diploma-related worries.

Of course, though it’s quite reassuring that this semester will be my last in University with actual responsibilities (read: having to take boring and arguably useless courses, like Electronics Laboratory), the problem lately is that I hardly have the time to, you know, reflect about things I’m doing or want to do soon, or simply relish on creative and random thinking. Having ideas and trying to execute them on the side of my main line of work is very important to me; I love learning with no obligations or pressures attached, and that’s exactly the type of thing that makes me, in turn, stand whatever challenges come in my way with few complaints or fear. BUT…since all I do lately are tasks compelled by obligation (as much as I may like them, or not), I end up becoming too stressed out and dramatic, giving too much importance to things that aren’t really important. An example of that would be a complicated translinear circuit I had to build for my Electronics Lab course; since I remember well that theoretical Electronics was the only subject till now I nearly flunked, I got very worried about the circuit, and spent like 6 hours trying to build it on Monday. Now, that was completely uncalled for; it’s cool to be persevering and all, but it’s not OK to persevere in doing things the wrong way, or for the wrong amount of time. As a consequence, I not only didn’t manage to build the circuit, but spent the rest of the week extremely tired as well. Instead of trying to do something I don’t know how to do, I should have, since the beginning, asked the professor to delay the circuit hand-out, and do it with me next class. That’s what I did…but only after suffering. Moral of the story being: work smart, not hard. And know what you are able to do within the available time frame :-)

Aside from all that, I had the pleasure these days to study about K-D Trees, which are a special case of BSP Trees, used to perform nearest-neighbor searches and other stuff, such as raytracing. Quite easy to implement , it seems, on its simplest form. I also found an unbelievably useful 300-page free course on the ACM library site, about collision detection. The course supposes the reader is a newbie on the subject and intends to transform him/her on an expert XD. So I definitely got interested, mainly because I intend to go back to programming Everball soon, and I’m still not satisfied with its physics simulation. It has glitches and some rare unpredictable behaviors, and I’m pretty sure it’s due to the way I perform collision detection.

Last but not least, here is a touching video I found on Youtube. Lately I’m watching more Youtube videos, although I’m classically not a fan of the site because of so much of its content being disposable (in my opinion). But I’m on a search lately for forms of conveying deep feelings that don’t require dialogue. Feelings that are more blurred than simple happiness or sadness. And this is a good example of this mixture shown by actions, and not words.

During my search I ended up finding this other video with one of my favorite musics, Mad World, by my favorite band of all times (seconded, maybe, only by Cure): Tears For Fears. Yeah, old bands, I know…but good, meaningful music never gets old.

Happy Easter for all! And, if you truly feel happy on Easter, don’t forget to wish for the happiness of all those who aren’t quite so happy. On this mad world we live, too few people are truly happy for my liking…

nintendoeaster



Hello!

It’s been 2 weeks or so since I last wrote here, mostly because I didn’t have anything THAT interesting to write about, and was into a programming marathon to complete assignments from both my practical Compiler Construction and Distributed Systems programming courses.
And I say marathon, because I really prefer steady-paced, mild races to get to something instead of short-lived, unbearably tiresome sprints (you know, the kind that makes anyone’s stress levels skyrocket). So…I really tried not to hurry so much about these 2 assignments, but started them out as soon as they were given to me and my team-mate.

The compiler-related work was building a semantic analyzer as I’ve explained on a previous post. The little devil was a bit hard to do, but at least it helped that the whole compiler architecture was planned to be as decoupled as possible, so in the end there wasn’t so much code to look for (although I did develop a lexer and a parser as previous project phases, this was around a year ago at the theoretical part of the Compiler construction course, and the professor decided it was better to give standard versions of both to everybody). The hardest challenges, in my opinion, were:
1. Actually using a Visitor design pattern to traverse the syntax tree without forgetting to traverse any proper node (there are so many node types it gets confusing).
2. Coding the call stack’s type-checking procedure, that recursively checks if methods calling one another are returning valid things, not only in relation to their signatures, but to their callers’ signatures as well.
3. Accounting for details in the language the compiler is being made for, Minijava. This is a completely object-oriented language, but has some limitances, so my team-mate and me had to be careful about that.

The Distributed Systems project, on the other hand, has been OK up until now, mostly because all I have to hand out (today, by the way) is a 30-page specification document. What I liked the most about it were the interface prototypes my team-mate created, having as a starting point some sketchy initial prototypes I drew on- guess what – good n’ ol’ Paintbrush. She’s very good at making interfaces!

inicial

Last but definetly not least (in fact, what follows was supposed to be the main and only topic of this post. I have no idea why I’m throwing this talk about projects and whatnot at you guys o.O), yesterday was the first day I played the game I’m making at Overplay since the beginning. Up until now, I had developed things and then tested them on modular fashion, that is, only seeing parts of the game relative to whatever I was coding. Our code is decoupled like that, so we can do it; but at the same time, this caused me not to realize before yesterday just how damn cool our game is turning out! You guys probably remember how I was a bit sad that professional development is quite different from indie development, in that programmers (specially interns like me) don’t have much say concerning the design of the game they are working so hard to finish. And that I had always known things were like this, specially when you have very little experience, but was quite disappointed anyway.

Well, then! For the first time since my work with this game started I can say I’m as proud of it as I would be of any indie game I made with friends, or even more, because nobody is having to pull all-nighters as I so frequently had to during my own indie games’ development. I’m learning to plan properly regarding when and how I’ll do my programming tasks, and trying to predict what can go wrong instead of always being optimistic about schedules. Because I am WAY TOO optimistic, although I hadn’t realized that until recently. And what’s best of all, since our team’s producer sits next me, I try to observe how he works and does things when I’m not too busy; this has been quite useful to me. So yeah; maybe I was being far too immature about the whole working as professional thing. It does have much more advantages than disadvantages, no doubt anymore about that. Ironically enough, being now a senior student in university and on top of my almighty 21 years of life, I thought that I could come to quick conclusions like “professional game programming is just systems programming with nothing more to it!”. Guess not. Games do have that unidentifiable something after all.



Excellent article sent by a friend of mine:

http://www.inter-sections.net/2007/11/13/how-to-recognise-a-good-programmer/

Thanks, 19!



{March 8, 2009}   Youtube videos

Added some more videos showing past projects of mine. Band Hero, Gariman’s 1st version and Gariman’s final version are featured. They have no sound because my sound capturing equipment is basically non-existent, and Camtasia Studio still doesn’t help me with that. Enjoy! :-)
Band Hero

Gariman – 1st Version

Gariman – Final Version (WARNING: poor, very poor quality. Even worse than the others! For some reason, when I compressed the video it got extremely slow and with horrid resolution…Didn’t have the time to fix this yet, though)



{March 7, 2009}   Isn’t that…?

This Monday, classes have started all over again, and I’m already fully focused on this which will probably be my last undergraduation semester. I’ve decided to try to graduate before the usual time of 10 semesters because, then, I’ll be able to send all my grades to Digipen/Guildhall at once, instead of sending part of them in September and the rest only in December. As my last undergraduation courses, I picked compulsory classes, plus some electives in the entrepreneurship area.

The most interesting course as of now is a practical one on compiler construction. The goal is building the most significant parts of a small compiler for a language named Minijava. Right now I have the grammar descriptor and the parser ready (from the first part of this course, which I took around a year ago), and must finish the semantic analyzer before next month. Basically, what the semantic analyzer does is traversing twice the abstract syntax tree generated by the parser: once to build all symbol tables (which are used, as far as I understand, as a reference to do bindings between whatever names show up in the code being compiled, and objects in memory later on), and once again to type-check things like variables, return values and arguments sent to function calls, etc. I must say I’m currently fascinated by the way compilers work and are implemented.

In fact, my interest in other Computer Science areas besides graphics programming has been really increasing lately, a process that is probably due to my equally increasing perception that games development isn’t the only cool and challenging career option for me. Yes, at Overplay I’m learning as never before about professional game programming. But I constantly find myself thinking that what I like about working there and working with games in general is that I’m actually doing interesting programming, and not the precise fact that I’m programming games. I don’t know if that makes much sense yet, as I’m still munching about it, but the real thing is, it is clear to me right now that the enormously rewarding sensation of accomplishment (and even victory) I felt while developing Gariman is probably due, for its most part, to Gariman being a complete creation of my friends and me. However, as a professional game programmer, or producer, or whatever, I can’t possibly expect to have all the creation and execution powers I had while developing Gariman, or whatever small demo games I made throughout college years. As I’ve read to exhaustion in sites like Gamasutra, publishers do control most of the game content and decide what really goes into the final product, and the conflict and negotiation of interests between developer studio and publisher is what keeps the game business machine functional. So, the truth is (for me, up until now), that the feeling of creating an indie game is unique, and working as a programmer who is part of a bigger team (and doesn’t take part on creation decisions, or at least doesn’t have to) simply pales in comparison. Not because working as a programmer is bad: it’s excellent. But it’s also completely different from idealizing a game, planning to make this idealization real and then going for it. Programming a game as a professional is just that: programming a very interesting system, for a possibly even more interesting platform (and the Nintendo DS is EXTREMELY interesting, no doubt). It’s cool, it’s difficult…

But still…while making Gariman, I thought I had found the most perfect way of putting art and programming together, and somehow deluded myself into thinking that I’d eventually be able to work on both sides of this dichotomic coin. As I come closer and closer to my long fought-for goals, however, I doubt that working like that is even possible outside of the indie world. And I was aware of that already, since the very beginning. It’s just…I don’t know. Isn’t that quite sad?



Hi all!

Stopped by to recommend 2 incredible readings.

The first is a CodeProject article about a well-known (and horrid, in my opinion) problem of the C++ language: it doesn’t natively support delegates. What does that mean? Well, anyone who programs in C or C++ has probably made use of function pointers, and knows how they can be useful when implementing user interfaces or in whatever situation in which you want to put client-defined code to work inside yours, or even change which piece of code gets to be used at run-time. The point of the matter is, function pointers are a construct that only work if your function is NOT member of a class, or if it’s a static member function, because then its starting address (the one that goes into the pointer) is independent. When you have a non-static member function, its address is dependent on the “this” pointer (the one indicating the starting point for the class code), so the implementation of a function pointer that deals with member functions turns out to be different from your usual C-based function pointer. The ideal is having the same syntax for both types of pointers, and that’s what a delegate is. However, in C++ delegates aren’t part of the standard, and thus, compiler writers don’t necessarily have to make them available for programmers (even if they did, their compiler would then be considered non-standard, I suppose). Of course, there is a way out of it: using member function pointers, who are a language construct of their own, to implement a delegate.

Member function pointers are pretty much the same as normal function pointers, except they use the “this” pointer as base for address calculations, at least in the simplest of cases (the pointer being member of a base class or of a single-inherited class). Things start getting murky, though, when virtual functions, abstract base classes (which should be declared as such, in my humble opinion, using an “abstract” keyword just like in C#, instead of by the usage of pure virtual functions), and multiple inheritance comes into play. The article detailedly explains all these dilemmas and gives a nice, well-round (albeit not final) solution to them.

The other highly recommended reading is a book I found about just yesterday, named Professional Linux Kernel Architecture. This book is AMAZING, and I’m totally addicted to it. In some aspects, and I’m glad for this, it reminds me of the classical Modern Operating Systems by Tanenbaum, except Linux Kernel Architecture supposes you already know the basics of how operating systems work (like threads, processes, device drivers, and so on) and reveals in painful but delicious details how all of these principles and many more are applied to the Linux kernel specifically.

There’s nothing like a good book (or article), is there?



{February 12, 2009}   EverBall demo!

Hi folks!

OK, I know I promised to write a lesson here on pattern recognition. But it’s not ready yet, so today it’s just the usual post about how things are going and whatnot.

This week at work I gave C++ a little rest (well, not really) so I could learn and use ExtendScript, a scripting language that, like most of its kind, is pretty similar to ECMAScript. ExtendScript is used in Photoshop to automate boring or otherwise too complicated tasks. Moreover, it can be used to create and format files, having all basic functionalities that JavaScript does, without the whole DOM thing. Instead of DOM, it uses some classes of its own to access and manipulate Photoshop-specific aspects.

This week I also made a small, extremely low-quality video showing the neat physics I’ve managed to cram into EverBall up until now. The physics effects can be put into any game by using a small engine I created from scratch (or as “from scratch” as having only XNA below it implies). The engine is completely modular, and thus if you want basic 3D physics effects in your game and doesn’t want the bother of coding your own, drop me an e-mail and I can send you the code. If I sympathize with your situation, that is =).

Funcionalities I implemented in the engine are: general force handling that can be easily extended (for now the only forces being dealt with are gravity and usual normal forces between objects); impulse; proper collision handling that uses an elasticity coefficient to calculate each object’s reaction; and, of course, drag. It’s not much and it’s not perfect, but the code is clean and almost hack-free. The physics engine and all other modules that compose the game’s architecture were mostly coded during December, and, since in January I didn’t even touch EverBall, there are still basic features lacking. For example, it’s clear in the video that the ball doesn’t roll; however, it does. The problem is that I had to set its rotational speed to 0, because a friend of mine who made the 3D model shifted its origin. As a consequence, the ball rotates in a very weird and unrealistic way that I’d rather not show in public XD He has fixed this already, at least, so as soon as I start coding EverBall again the ball will start rotating.

Below is the game’s architecture as I originally planned it. It doesn’t include the level editor I’m planning for it, and the yellow-colored classes are still to be made.

classdiagram
And here is the video. I used Camtasia Studio to record the screen, but for some reason Camtasia didn’t want to compress the resulting .AVI file. So I used a free .AVI to .MPG compressor named TPMEG. And this is the awful result =P



et cetera