Yesterday I got Telstra Cable modem installed. As the house had already had cable installed it took all of 15 minutes (plus the time to go back to the depot to replace faulty equipment) to get it installed.
First impressions, was all oohhs and arrhhs. I found reading blogs in RSS Bandit snappier, and got through a large amount of my backlog.
I then loaded up Wolfenstein – Enemy Territory, by gosh that is fun. I ran around the Orcon 6 server. I then jumped onto a few Ozzie servers, but there wasn’t anybody on them. At around 1pm, I jumped back on the Orcon server, and decided that others would come, and they did. Once we got past two aside, and been spawn owned, the game was fun. In fact it was brilliant. I haven’t had that much fun in years (well 1 ½ years). I need to tweak my setting to get better views, because I was having 90 fps the whole time, which is a bit overkill.
Then in the evening I checked my usage, and almost wet myself, 100MB in one day. On a 1 gig plain that’s 10%, and I’m not that keen to go up to the 5 gig plan unless I need it.
So today I started sniffing what’s happening on my link.
5KBps of ARP traffic for one thing. The Telstra tech support person said I get billed for what my modem receives, but to send a log off to Paradise’s helpdesk. At the moment it’s flicking between 13KBps and 6KBps, so if I’m paying for that I’m not impressed, as 2 hours of that a day, and my limit will be used, with me doing nothing.
I’ll post the gist of Paradises response when I get the answers.
I’ve been waiting soo long to get high-speed internet at home (as compared to just at work). The time is coming near. Two days en fact and I’ve been dancing around the home, Calvin and Hobbs style all day.Good bye, to disconnecting in case someone is calling.
Hello to GTalk/Skype/Messenger ‘ing to Matthew in Singapore, and to any other family members out of town. Quite exciting.
I just hope that Telstra can sort-out their billing system. I’ve been talking to them three bills in a row. But I have to say, their support staff are great, and very liberal with the “discounts” due to issues.
I have spent quite some time over the last week working on ‘Curse’ as my other project may have a conflict of interest, so I’m giving that the time it needs to unfold.
Reviewing my subversion log since my 22nd of March post, the following progress has been made.
- Copied large chunks of static data from the data section of the .exe and put it in the global section of the game engine. I had an idea of using reflection to dynamically load this from a bin file, but it was simpler to copy the data as it was required.
- Add EGA emulation, with correct write plan support, and colour palette swapping.
- Display mono colored text correctly, and positioned correctly.
- Inserted ~9000 throw new System.NotSupportedException(); in front of non-translated assembly, so I could translate code as it was hit. Edit-and-Continue is a blessing for this. You just have to remember to write the new code below the line that triggers the exception, so when you delete the exception, the instruction pointer (or what ever it’s called in the CLR) is now pointing at your new code not after it.
- Added keyboard input process, so System.Windows.Forms.Keys are converted to IBM keyboard scan codes, as expected by the game code.
- Started working on the Copy Protection code wheel icon display code. (This turned out later to be the generic icon display cache)
- Put a lock region around the access of the display bitmap, so avoid exceptions from the engine thread, and the main UI thread.
- Added more keyboard input support, once I worked out how the Word was been used (high word control code, low word ASCI code).
- Started working on the character generation code path. Translation of large amounts of assembly or big data tables.
- Completed the character generation, modification and leveling code.
- Finally worked out how the combat icons where stored in RAM and recoded all the access code to use new understanding.
- Recoded how the display stuff worked. Discovered locking bitmaps, and using System.Runtime.InteropServices.Marshal.Copy to do memory copies. This was such a huge speed improvement over SetPixel (which does a lock/unlock per pixel). It also allowed me to have yet another copy of the display picture. One for the EGA colour codes (to allow colour palette remapping), and a copy of the Windows video ram for direct coping. Besides the speed of the memory copy, this removed the odd multi-thread issue I was having.
- Completed the icon display cache, now that I had more examples of how it was used. Did a lot of refactoring (renaming) at this point, was there are three units of measurement, titles (24×24 pixels), cells(8×8 pixels) and pixels. Lots of this was confusing as there where 7 tables used to manage the icon display cache. All sorted now though.
- Rolled my on serialisation module, to allow for my classes based of original data structures, that have a lot of things that now use an int, when a byte was used, but to maintain compatibility, need to be saved/loaded as a byte. It was really learning how to use reflection.
- Translated ~4000 lines of assembly, about 5700 left.
- Fixed up quite a few memory location address name issues, cause by arrays have values index directly, so have unique names for both, but needing to point to the same location. This is where emulating the memory, and having it managed would have been nice. It would have also allowed me to put an layer, to find out what ranges array indices are index by, for overlaying purposes. There are a lot of places that Pascal non-zero based arrays have caused pain.
I’m currently working through the byte code engine in the game, trying to find my errors. So far they have mainly been of the last bullet point type. Gosh it is really fun working these things out though…