Yesterday, a friends of mine had his 26th birthday party at Chuck E' Cheese in Farifield. I'd say I had a good time, played some ticket games, ate some terrible pizza. The kids seemed to be going nuts there, but I was relatively unimpressed. Then again I seem to remember liking to go to Shakey's pizza as a kid, and they only had maybe a dozen video games. But man three and a half hours at chuck e' cheese is enough for a whole decade, if not a whole lifetime.
Went from Fairfield out to Davis, mostly because we where 2/3rds the way there. Hung out a little, walked around downtown, played some PiU NX2, had a burger and beer at Froggy's. Picked up some stuff from lifftchi's storage unit to take back to the south Bay. That experience just reinforced how much I'm not looking forward to moving. I got back to the south bay around 10:30pm.
It's drink o'clock. You get full points for a Maibock, half points for a classic two or three ingredient cocktail, and honorable mention for any other German style lager. Myself, I'm going to settle for a gin highball.
My wife is out of town visiting with her parents before she goes back to work. I haven't been sleeping well while she's been away which is unfortunate. I went down to the mall to stop by the bev'mo, play in the arcade a little, and to just generally get out. Had a gin and tonic and played three games of PiU; I absolutely destroyed FA2 NM. I don't like playing in the evening, there are too many people and I end up attracting a crowd.
There are people at the mall, this is good because it keeps me from becoming a shut in, but it is also bad because is piques my "get off my lawn" tendencies. It may be uncouth, but there are no white women in their early twenties in the south bay. As a male who grew up in a tourist town in southern California, there's precious little eye candy here. I'm displeased that everyone seems to have ignored my moratorium on the baby doll dress. I still think they look like they belong in the bedroom.
Works been crummy but there's light at the end of the tunnel, new assignments will come down in mid-July. Well not "new" but I'll go back to working on what I was working on in November and December of last year. One of my co-workers is redesigning the memory controller, I looked at a picture of his design and said, "I don't think you need all this junk," while pointing to a large section of the design. "You need it to cover the 70ns row cycle time." "No you don't, it just ads latency and serves no purpose." "Are you crazy what are you talking about?" After 20 or 30 minutes of "discussion", he said my idea was just crazy enough that it might work, and retreated to a conference room for a couple hours to pencil it out. I find those kinds of conversations the best part of my job. I don't think we'll go with my crazy idea, it's a large departure from conventional wisdom, and it introduces a lot of risk; but I think my co-worker is going to write a simulator for my design and see how well it works.
I have new neighbors in my apartment building, they've been here two days, and their already fighting. This doesn't bode well.
The XBLA port of Ikaruga came out. I played the demo, level one, I played poorly but finished it (C++), and decided not to get it. It looks great, it has both left and right TATE, and 19:10 monitor compensation. The xbox360 controller makes the game nearly unplayable.
It also turns out that they changed the timing of the bullet patterns the homing laser, completely destroyed the bullet pattern of Shigi (aka the fish, aka the 3rd stage mini-boss), and the third stage bonus enemies. You can find numerous JP blogs with side by side pictures of how "broken" it is. I find it funny how dedicated some of these players are.
That and it turns out I don't like Treasures games that much, too much memorization, not enough mindless shooting. Lets hope Ketsui DS and the new Bangai-O are not as disappointing.
So against my better judgement I've started trying to learn flash without the aid of Adobe's tools. Only open source tools for me. I started by downloading and reading half of the flash spec, it's not terribly written but it sort of assumes some familiarity with flash concepts. ActionScript and the class library are not mentioned or explained; only the virtual machine bytecode that ActionScript compiles down to.
The tools available are sort of lackluster. There is a compiler (mtasc), but it's only designed to compile full blown classes which you are supposed to attach to other objects (sprites? timelines? i don't know what regular people call them), through Adobe's tool. People say the compiler is good (well far better than Adobe's). I think the people who make it are too arrogant, and it doesn't produce very good bytecode. Through great pains I was able to use the compiler to compile the bulk of my code, and then edit the bytecode (using flasm) to attach the guts of a function to a frame (this is how I know the output quality of mtasc isn't very good). I built the SWF with swfmill, which converts from the on the wire bit stream to XML and vice-versa. I'm not impressed with swfmill; it has zero error checking, happily dropping misspelled tags from of the output file, that and it uses XML which I despise. I generated the vector graphic object by hand with graph paper.
The vector format for flash is highly optimized and quite impressive. I think I need to build a SVG to flash vector converter, but that's a non-trivial amount of work. But then at least I could more easily make vector assets (hopefully with inkscape). I think I need something besides swfmill for output, the python binding to libming has promise; or I could roll my own. I need to write some tools for manipulating the output of mtasc, and possibly a simple pigeon hole optimizer.
MovieClip._rotation always returns a value between [-180, 180), no matter what you last wrote to it. May that be a lesson for you, a lesson that took me over an hour of debugging to discover.
Continuing on my little side project, I added the spans which wrap across zero. Once this happens we start to get graphs that have as many active spans as we have routing channels, but are un-colorable (about 10% in the 3 channel case). We want spans to wrap across zero so that I can wrap this around a square without a seam. Perhaps a picture of a completed game board will make this clear(er).
I realized last night as I was trying to sleep that graph coloring is overkill for register allocation, if you don't need to spill. If you sort the active variable spans by their left edge, and then pick any free register from them in order you'll get a valid allocation. I hope that the coloring solutions show why they're worth the trouble in situations where you have to spill. This new method is O(n log n) instead of the O(n^2) of the restricted graph coloring algorithm used for register allocation. Since I pre-screen my boards to ensure that they never have more than n (=3) spans overlapping this new method would work.
The proof is straightforward; I'll outline it. When you go to allocate a register for a variable, you know that because the spans are allocated in order you can only interfere with other live variables at your left end. Because of this, if you were out of registers you must have n+1 active variables, thus requiring a spill.
I plan on making the board circular, i.e. a span from 1-12 in the diagram below could go from 1 to 0 to 15 to 14 to 13 to 12. In which case I do need something like the the register coloring algorithm; so my effort is not completely wasted.
I took two days off of work to relax from the deluge of home and work stress I've been under. I've been using this time, perhaps, unwisely.
When I was in high school a friend of mine came up with what we would call today, "a casual game". He played a few times using paper and pencil and thought it would be interesting and playable; I'm still unconvinced. The game board is randomly generated, consisting of pairs of points connected by lines. It is key that the player is able to easily tell which points are connected. Back in HS I took a shot at implementing the game, but I couldn't manage to create random boards.
I was trying to create boards by taking a pair of points, using a shortest path algorithm to connect them, and then trying with the next set of points. Repeating with random boards until you actually managed to route a board successfully. This has two problems; it took millions and millions of tries before you got a working board, and the resulting boards were not ascetically pleasing, or easy to understand.
I realized this morning in the shower that I could apply compiler theory to the problem. Every path has to go through 1 of n squares. So we think of those squares as 'n' registers, and the paths as the lifetimes of variables. I implemented Chaitin's global register allocation using graph coloring in Python. I was again impressed at the speed of development and succinctness of Python, my complete register allocator, printer, and random board generator is less than 250 lines and took 3 or 4 hours to develop. I'm still, however, dismayed by Python's execution speed (i can generate a small board in 2/100th of a second, which isn't too bad for a single game, but it's bad for testing a lot of boards). I need to adjust the heuristics of my allocator to produce more "visually" appealing boards.
I may yet implement the full game as a Java applet. But I don't look forward to porting my allocator to Java. I guess the cool kids use flash these days, ActionScript is probably worse than Java though. What does flash cost these days anyway?
This week $EMPLOYER announced the product I was working on. Obviously my comments are restricted by NDA.
It's nice to be able to sort of talk about something I've worked on. And $DUDE here does a good job of selling it, don't look at the video with $LADY she does a terrible job. Amazingly the HDMI is really nice looking, it rivals most blu-ray disk players at 720p. I remember when they said they where adding HDMI to the chip, everyone I knew thought it was stupid, hell I still think it's stupid, but it's gotten us a lot of press.
I take Pat's to win, but loose against the 12 point spread, and under the 55pt over/under.
I got invited to a SuperBowl party this year. Danielle didn't want to go, because she doesn't like it when people holler and yell at the television. Isn't yelling at the television is the whole point, but what do I know. It does remind me of this comic though.
For Christmas I "got" Cave's curtain fire shooter ESPgaluda. I say "got" because my wife encouraged me to buy it and it was the only thing I wanted. I told my wife she could wrap it if she wanted, she laughed, and didn't give me anything. Having played ESPgaluda for a couple of hours so far I've determined that it is probably Cave's easiest game, but that it's system is innovative without throwing away the genre, and very enjoyable.
I've leaned some things about ESPgaluda's system. First, the game has rank, that is the game gets harder the better you do. However, in ESPgaluda you get to max rank relativity quickly, and the only real way to play the game is at max rank (goodbye rank management). The game encourages even poor players to try and achieve max rank, which is unique. Higher rank, gives you more bullets, which translate into more points (getting you to the extends faster), and more green crystals. The green crystals can be used to slow down the enemy bullets. I really like the the game both rewards you for aggressive play and punishes you for aggressive play. Also, there's a hidden extend at the end of the 3rd stage right before the boss.
I've learned some things about my television. First it really doesn't like to be TATEd (turned on its side). It scans wobbly, which I assume is from poor shielding on the side from the earths magnetic field. It over scans off the top and right pretty bad, and it makes a high pitched wailing/whining noise. Hover it does make the TV 78% bigger, which improved my play quite a bit. I made it to the 4th stage boss 11.8 million (just shy of the 14 million point second extend).
In other news, noisetube is back, firing on all most cylinders.