(Link to AcmlmWiki) Offline: thank ||bass
Register | Login
Views: 13,040,846
Main | Memberlist | Active users | Calendar | Chat | Online users
Ranks | FAQ | ACS | Stats | Color Chart | Search | Photo album
06-17-24 04:19 AM
Acmlm's Board - I3 Archive - - Posts by HyperHacker
Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253
User Post
(restricted)
HyperHacker

Star Mario
Finally being paid to code in VB! If only I still enjoyed that. <_<
Wii #7182 6487 4198 1828


 





Since: 11-18-05
From: Canada, w00t!
My computer's specs, if anyone gives a damn.
STOP TRUNCATING THIS >8^(

Last post: 6328 days
Last view: 6328 days
Posted on 05-02-06 04:18 AM, in VB6 Overflowing NES rendering... Link
Ideally you'd use CreateCompatibleBitmap, CreateDC, BitBlt and SetPixel to draw tiles. A bit more complex, but hundreds of times faster than anything built into VB.
HyperHacker

Star Mario
Finally being paid to code in VB! If only I still enjoyed that. <_<
Wii #7182 6487 4198 1828


 





Since: 11-18-05
From: Canada, w00t!
My computer's specs, if anyone gives a damn.
STOP TRUNCATING THIS >8^(

Last post: 6328 days
Last view: 6328 days
Posted on 05-02-06 04:56 AM, in Recursive compression; finding the best match Link
If you used my MIO0 compressor before, you probably noticed (or read in its readme ) that it doesn't compress as well as Nintendo's. I was hoping to address that issue, but I've hit a wall. Between it being 3:00 AM and me not being good at recursive things, I'm quite out of ideas.

For those who don't know MIO0: It's an LZ77-style compression. You have two sections, one which contains raw data and one which contains 16-bit length/distance pairs (4 bytes length, 12 bytes distance), and a bitmap indicating which to read from.

When you compress MIO0 data you look for repeated strings of bytes. Given a string of 3 to 18 bytes, if you find this same string within the previous 4095 bytes, instead of storing the string again you store the location and length of the match relative to the repeated string. That is, if the same 5 bytes appear at 0x10 and 0x50, you just store a length/distance pair; length=5, distance=0x40 (0x50 - 0x40 = 0x10).

Now I don't really feel like typing all this again, so I'll just post part of a document I already wrote. It's long, but you can pretty much just quickly skim through up to the ; it's just describing how to go about compressing the data. The most important part to note is that any match takes up two bytes.


Suppose you find a 10-byte match. Make a note of its position, but check the next 10 bytes for other matches. If you find a match of even one byte, keep going even past the 10th to see how big a match it is. Let's say the very last byte of the 10-byte match is the first byte of an 18-byte match.
Now, it looks like if you skip the 10-byte match in favour of the 18-byte one, you save 8 bytes. However, first you need to take into account the compression overhead. You add two bytes to the filesize for each match, as this is how many bytes it takes to store the length and position, so subtract 2 from the size of both matches. This means by taking an 18-byte match you really only save 16 bytes. This is why the minimum match size is 3 bytes; it's the smallest that does any good.
OK, but this still means you save 8 bytes right? No. You've added more overhead! By skipping the 10-byte match in favour of the 18-byte one, you've added 8 bytes to the filesize - the 10 matching bytes that you decided to ignore, minus the two that they'd consume if you matched them. So you aren't saving any space at all!
But wait, there's more. If you matched those 10 bytes, you haven't removed all 18 of the other matching bytes. There is only one byte of overlap - the last byte of the 10-match is the first byte of the 18-match. By matching the 10, you eliminate that first byte - BUT you still have a 17-byte match, saving 15 bytes, plus the 8 you save by matching the 10, for a total of 23.

Another example: You have an 18-byte match, but the last 10 bytes of it are a 9-byte match and the first of a 10-byte match. 10+9 = 19, so you should skip it, right? Well, consider the overhead. By taking the 18, you save 16 bytes. By taking the 10 and the 9, you save 17, right? No! Only 15. You subtract 2 from the size of each match, not the total - it's not (10+9)-2=17, it's (10-2)+(9-2)=15, versus 18-2=16.
So clearly you're best taking the 18-byte match here. And once again, since this only consumes the first byte of the 10-byte match, you still have a 9-byte match following. Do the math: (18-2)+(9-2) = 16+7=23 bytes saved (again).
Another way to think of this is to subtract 2*(# of matches - 1) from the total. You subtract 1 from the # of matches because you're still going to have one match if you take the 18 bytes.


What really complicates the issue is, as usual, recursiveness. Suppose you find an X-byte match and a Y-byte match overlap. Once you've determined whether to take X or Y (we'll assume Y for simplicity's sake), you then need to check within the match you chose to see whether Y overlaps an even better match.
Even more confusing: Suppose you have match X, and you're checking each byte within it for better matches. You find a match at position A (in the last 4K) which is, including overhead, a better match than X. OK, discard X and take this one. But you must still look through all 4K, so see if you can find one even better (at position B), and do this same procedure to see if A or B is better (having already determined that both are better than X) - check all the bytes in both A and B to see if they're overlapping even better matches, to determine whether A or B is better. Then if you find overlapping matches, check all their bytes, and so on...

Probably the best way to do this is a function. Give it the address and size of a match, and it checks each byte that matches to see if you should take it or not. It returns the address of the match it determines you should take; you would then just add in all bytes up to that address raw, and take the match at the address it returns. However, if the address it returns is not the address it was passed (meaning it found a better match within these bytes) then it would call itself passing the info of the match it did find, to determine whether it should stick with the new match it found, or if there's an even better one.
Very simplified pseudo-code:
function GetBestMatch(MatchAddr, MatchSize)
{
//Some code here would check the bytes at MatchAddr for a better match.
//Set BestMatchAddr = MatchAddr if none is found, else set it to the
//address it was found at. Then:
If BestMatchAddr == MatchAddr
return MatchAddr
else
return GetBestMatch(BestMatchAddr, BestMatchSize)
}

One important note is, however, that this could skip a good match. Suppose that by skipping Match A you can take Match B and save more bytes. In this scenario it will call itself (instance 2) to check Match B. Now suppose it finds that by skipping Match B, you can save more bytes by taking Match C. Again it calls itself (instance 3), and finds that Match C is best. So instance 3 returns Match C; instance 2 returns Match C; instance 1 returns Match C.
See the problem? Instance 2 is only checking Match B - it doesn't know about Match A at all. In this case Match C could very well be 20 bytes from the address passed to instance 1.
What's happened here is it's determined that skipping A to take B is better and skipping B to take C is even better. So now you have to determine if you can take both A and C, and if so, should you? Essentially, ignore B, and compare A and C.


So the question is how to deal with the problem described with this recursive comparison function. I'm way too tired to deal with it now; I figured maybe someone here might have an idea. If anyone's even bothered to read all that.
HyperHacker

Star Mario
Finally being paid to code in VB! If only I still enjoyed that. <_<
Wii #7182 6487 4198 1828


 





Since: 11-18-05
From: Canada, w00t!
My computer's specs, if anyone gives a damn.
STOP TRUNCATING THIS >8^(

Last post: 6328 days
Last view: 6328 days
Posted on 05-02-06 05:00 AM, in .mkv files and their codecs Link
If VLC doesn't play it, I'd suggest you look elsewhere for your downloads.
HyperHacker

Star Mario
Finally being paid to code in VB! If only I still enjoyed that. <_<
Wii #7182 6487 4198 1828


 





Since: 11-18-05
From: Canada, w00t!
My computer's specs, if anyone gives a damn.
STOP TRUNCATING THIS >8^(

Last post: 6328 days
Last view: 6328 days
Posted on 05-03-06 12:29 AM, in VB6 Overflowing NES rendering... Link
Hm, that does sound better. I'll have to try that next time I do something GDI-related.
HyperHacker

Star Mario
Finally being paid to code in VB! If only I still enjoyed that. <_<
Wii #7182 6487 4198 1828


 





Since: 11-18-05
From: Canada, w00t!
My computer's specs, if anyone gives a damn.
STOP TRUNCATING THIS >8^(

Last post: 6328 days
Last view: 6328 days
Posted on 05-03-06 12:37 AM, in Revolution or Wii? Link
Originally posted by Marioman64
We called the Gamecube the "cube"

I call Gamecube Gamecube.

Originally posted by Cheveyo Chowilawu
It's not so much that I dislike the name Wii (though I do, admittedly, but it's just a name)... I just think that such a decision is going to screw them over. It doesn't sound "cool", so no one's going to want to talk about it in school (especially with the people who look for any reason to knock the shit out of someone; I've got plenty of experience with them), and as the <17 crowd seems to generally be Nintendo's target demographic... you see where I'm going with this.

This guy gets it. I'd much rather start a gaming Revolution than ask my friend if he wants to play with my Wii. You can rant all you want about how penis jokes are immature, but face it, 90% of Nintendo's target demographic is immature. These are the people who brought you Nintendo LamePube, GayBoy Advance, Nintendo BS, GayStation 2 and SuXbox. Like they're going to take Wii seriously? People are idiots, they're going to make idiotic jokes.


(edited by HyperMackerel on 05-02-06 11:37 PM)
HyperHacker

Star Mario
Finally being paid to code in VB! If only I still enjoyed that. <_<
Wii #7182 6487 4198 1828


 





Since: 11-18-05
From: Canada, w00t!
My computer's specs, if anyone gives a damn.
STOP TRUNCATING THIS >8^(

Last post: 6328 days
Last view: 6328 days
Posted on 05-03-06 02:51 AM, in Rockman 3 Beta! Link
Unless he has some well-made SNES development tools laying around, it'd probably be easier (and cheaper) to edit the screenshots than to hack the ROM, put the hack on a cartridge, and take them for real.
HyperHacker

Star Mario
Finally being paid to code in VB! If only I still enjoyed that. <_<
Wii #7182 6487 4198 1828


 





Since: 11-18-05
From: Canada, w00t!
My computer's specs, if anyone gives a damn.
STOP TRUNCATING THIS >8^(

Last post: 6328 days
Last view: 6328 days
Posted on 05-03-06 02:52 AM, in N64 ROM Byte Orders Link
What are all the byte orders for N64 ROMs? I know there's Little Endian (DCBA), Big Endian (ABCD) and Dr V64 (BADC); are any others common?
HyperHacker

Star Mario
Finally being paid to code in VB! If only I still enjoyed that. <_<
Wii #7182 6487 4198 1828


 





Since: 11-18-05
From: Canada, w00t!
My computer's specs, if anyone gives a damn.
STOP TRUNCATING THIS >8^(

Last post: 6328 days
Last view: 6328 days
Posted on 05-03-06 03:03 AM, in wondering Link
OK, let's look at the problems here.
1) Super Mario Kart has very little room for expansion. The SNES was hardly capable of handling that, let alone MKDS.

2) Hacking these features into Mario Kart 64 might be feasible, but the game's engine was also quite limited. (It doesn't even use real 3D models in many cases.) However, it'd be very difficult. The only Mario Kart 64 hack I know of is mine, and all it is is two pieces of code and some text changed (speed hack and start with 5 balloons). Track data is compressed and nobody's cracked it yet.

3) Last I checked, PSP couldn't emulate N64. If you want MKDS, how about buying a DS?
HyperHacker

Star Mario
Finally being paid to code in VB! If only I still enjoyed that. <_<
Wii #7182 6487 4198 1828


 





Since: 11-18-05
From: Canada, w00t!
My computer's specs, if anyone gives a damn.
STOP TRUNCATING THIS >8^(

Last post: 6328 days
Last view: 6328 days
Posted on 05-03-06 03:13 AM, in Another ROM hacking idea Link
Originally posted by Disch
Probably not as much as you'd think. How much does SMW actually save anyway? Player position on the map (3 or 4 bytes -- double that if it saves luigi's position too), remaining lives (1 or 2 bytes -- if it even saves this at all, it's been a while), and levels which have been completed (96 paths, right? probably bit-packed, so 96/8 = 12 bytes). Plus maybe the powerups/yoshi you have (maybe 2 or 3 bytes).

SMW doesn't save your powerups, Yoshi, or lives. I believe it decompresses the overworld to SRAM too, so that events can simply modify it in memory as they run instead of having to re-apply them all each time (also providing a convenient way to save the passed event status).

BTW, some NES games such as Super Mario Bros 3 had on-cartridge RAM that wasn't battery-backed, just to use as work RAM.
HyperHacker

Star Mario
Finally being paid to code in VB! If only I still enjoyed that. <_<
Wii #7182 6487 4198 1828


 





Since: 11-18-05
From: Canada, w00t!
My computer's specs, if anyone gives a damn.
STOP TRUNCATING THIS >8^(

Last post: 6328 days
Last view: 6328 days
Posted on 05-03-06 03:15 AM, in I need for help in Fire Emblem 6 and 7 Link
Yeah, with only two bytes you'll probably find a lot of instances, all you can really do is change each one and see what you get. You can look around to see if the other values are familliar, though.
HyperHacker

Star Mario
Finally being paid to code in VB! If only I still enjoyed that. <_<
Wii #7182 6487 4198 1828


 





Since: 11-18-05
From: Canada, w00t!
My computer's specs, if anyone gives a damn.
STOP TRUNCATING THIS >8^(

Last post: 6328 days
Last view: 6328 days
Posted on 05-03-06 10:21 PM, in VB6 Overflowing NES rendering... Link
You can choose in VB whether you want zero- or one-based, but I'm not sure what the default is. Also, check the Scale property of your PictureBox; it needs to be set to Pixels. I dunno WTF Twips are, but they're not very useful.
HyperHacker

Star Mario
Finally being paid to code in VB! If only I still enjoyed that. <_<
Wii #7182 6487 4198 1828


 





Since: 11-18-05
From: Canada, w00t!
My computer's specs, if anyone gives a damn.
STOP TRUNCATING THIS >8^(

Last post: 6328 days
Last view: 6328 days
Posted on 05-03-06 10:34 PM, in Recursive compression; finding the best match Link
OK, I think I understand, but it sounds like you're just describing the problem. In your example there wouldn't be any match for "Big Mute City", so I add the 'B' raw and look for a match for "ig Mute City", and so on. Eventually I'd have added "Big " raw and would find a match for "Mute City". The problem is when the strings are longer. Let's say I don't find a match for "Mute City", only for "Mute". I can take that and save 2 bytes; the 4 bytes that match, minus the 2 bytes it takes to store a match. But what if there's also a match for "ute City" somewhere? I would need to check each byte of the match I find (the word "Mute") to see if such a better match exists. However, if I do find a better match ("ute City"), I need to check all the bytes of that to see if an even better one exists, ad infinium. Eventually I will find a match that doesn't overlap a better match (or hit the end of the file), but by then I could be, say, 400 bytes from the first match. My result then would be "include these 400 bytes raw and take this next match", which just doesn't make sense.


(edited by HyperMackerel on 05-03-06 09:35 PM)
HyperHacker

Star Mario
Finally being paid to code in VB! If only I still enjoyed that. <_<
Wii #7182 6487 4198 1828


 





Since: 11-18-05
From: Canada, w00t!
My computer's specs, if anyone gives a damn.
STOP TRUNCATING THIS >8^(

Last post: 6328 days
Last view: 6328 days
Posted on 05-03-06 10:42 PM, in I just got ten million points in Columns. Link
I get like that with coding. "Ah, gotta go to bed... well I'll do it when I fix this bug. OK that works... hm, I should be able to quickly throw in this feature. [4 hours later] Holy crap, that took longer than I thought... hm, I'll go to bed as soon as I fix this bug..."
HyperHacker

Star Mario
Finally being paid to code in VB! If only I still enjoyed that. <_<
Wii #7182 6487 4198 1828


 





Since: 11-18-05
From: Canada, w00t!
My computer's specs, if anyone gives a damn.
STOP TRUNCATING THIS >8^(

Last post: 6328 days
Last view: 6328 days
Posted on 05-03-06 10:46 PM, in N64 ROM Byte Orders Link
But when what would you call CDAB? That's what I have to actually work in with that format, since x86 is Little Endian already.
HyperHacker

Star Mario
Finally being paid to code in VB! If only I still enjoyed that. <_<
Wii #7182 6487 4198 1828


 





Since: 11-18-05
From: Canada, w00t!
My computer's specs, if anyone gives a damn.
STOP TRUNCATING THIS >8^(

Last post: 6328 days
Last view: 6328 days
Posted on 05-03-06 10:48 PM, in The GameBoy NES Series Link
Hm, so what happens if you only turn on one or two colour emphasis bits in monochrome mode?
HyperHacker

Star Mario
Finally being paid to code in VB! If only I still enjoyed that. <_<
Wii #7182 6487 4198 1828


 





Since: 11-18-05
From: Canada, w00t!
My computer's specs, if anyone gives a damn.
STOP TRUNCATING THIS >8^(

Last post: 6328 days
Last view: 6328 days
Posted on 05-03-06 10:56 PM, in An idea for ROM hacking Link
Originally posted by Glyph Phoenix
The first group seems to encompass extra hardware features. My beef isn't just with roms becoming unusable on their original system, but with other emulators. Compatiblity over platforms and emulators = win. But since emulation entails emulating features made by fans as well, I guess this might count. Though building new features for an ancient system is impractical to the highest degree, it'd still be cool.

Good point there. You'd have to add the new features to at least the most popular emulators for each platform.


The second feature group, debugging, is largely unrelated to the issue. The problem is adding things to ROMs that cause incompatiblities and can't be run on the original system. Debugging tools aren't ROM features, they're emulator features. Emulators should be able to do whatever the hell they want; extra graphical effects, fancy quality sound, what-have-you as long as the ROMs pretty much stay the same. It's when the ROMs start changing to support the emulators when things get really messy.

I mean like adding features that the ROM can use, but only using them for debugging. Extra RAM or a second display screen would be a good example of this.


Your third group, system-specific interface tools and such, doesn't make much sense. It would be a lot harder to make a rom that the system uses as a plugin or interface than to actually write an interface or plugin system and build it directly into the emulator.

Eh, I think it'd be fairly easy and kinda cool to do. Making an interface in Windows can be a huge pain. If you have a ROM doing it, not only is it easier (I'd assume if you can write an emulator for a given console, you can write ROMs for it too), but you get the added bonus that you can work the interface using a joypad.
HyperHacker

Star Mario
Finally being paid to code in VB! If only I still enjoyed that. <_<
Wii #7182 6487 4198 1828


 





Since: 11-18-05
From: Canada, w00t!
My computer's specs, if anyone gives a damn.
STOP TRUNCATING THIS >8^(

Last post: 6328 days
Last view: 6328 days
Posted on 05-03-06 11:06 PM, in Another ROM hacking idea Link
Originally posted by Glyph Phoenix
Hyperhacker, I believe you're thinking of RAM bank 7F. Why would Super Mario's monstrocity of an overworld be loaded into limited SRAM? If the overworld is loaded into SRAM, why would it have to prompt players to save their game? It wouldn't make any sense.

You know when you start a new game, you do that little intro level with the "Bowser kidnapped Peach again!" message box before you actually get to the overworld? That's when the game is decompressing the overworld to memory. It takes a while, and to do this every time you start the game would be a pain. Then you'd have to step through all the passed events again, updating the map in memory. By keeping it in SRAM you avoid this. The save prompt is just to offer a choice. Saving the events passed and player position only takes a few bytes. This is also why you can't edit the overworld in LM, then load an existing save file.


The most practical course of action is to make a hack that uses any memory it wants and to modify the patch as problems show up. Basically, the best change we should make to our current memory practices is no change.

The problems with this should be obvious already. There are many hacks that use the same RAM/ROM addresses and thus aren't compatible with eachother. In many cases they don't get fixed, because of one or more of the following:
1) The author didn't know of the problem and/or doesn't care.
2) The author stopped hacking SMW ages ago, lost the source code, etc etc.
3) It'd take a lot of work to use different addresses (especially ROM) and nobody's up to it. Especially in cases where other hacks, custom blocks etc interact with these hacks, and to change addresses would make them not work anymore.
4) Both people think the other should be the one to change their hack.
HyperHacker

Star Mario
Finally being paid to code in VB! If only I still enjoyed that. <_<
Wii #7182 6487 4198 1828


 





Since: 11-18-05
From: Canada, w00t!
My computer's specs, if anyone gives a damn.
STOP TRUNCATING THIS >8^(

Last post: 6328 days
Last view: 6328 days
Posted on 05-03-06 11:15 PM, in Revolution or Wii? Link
Originally posted by Razman
I know a lot of people that think the NDS is just a super GBA.

Well, the NDS is all the parts of a GBA, minus the GBC CPU and the link port, plus an extra CPU, more RAM, a bigger screen, a touch screen, a microphone, Wifi, a second speaker, X and Y buttons, and a DS card slot. It seriously is just a GBA with extra features.

Originally posted by KATW
Or are we pronouncing it wrong... Like, maybe its pronounced "WHY" instead of "WHEE"

Nintendo Why... I do like the sound of that.

Originally posted by Ailure
I still buy it if they called it poop*.

I'd love if they called it poop. Giving it a name that's supposed to sound good but actually sounds stupid is one thing. Giving it a name that's supposed to sound stupid is another.

Originally posted by Skreename
They're losing money on the Cube? I thought they were still profiting...

Could be losing money in the US and profiting in Japan.
HyperHacker

Star Mario
Finally being paid to code in VB! If only I still enjoyed that. <_<
Wii #7182 6487 4198 1828


 





Since: 11-18-05
From: Canada, w00t!
My computer's specs, if anyone gives a damn.
STOP TRUNCATING THIS >8^(

Last post: 6328 days
Last view: 6328 days
Posted on 05-03-06 11:21 PM, in Weirdest Thing You Ever Saw in a Mario Game Link
I figure Mario just doesn't know WTF it is.
Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253
Acmlm's Board - I3 Archive - - Posts by HyperHacker


ABII

Acmlmboard 1.92.999, 9/17/2006
©2000-2006 Acmlm, Emuz, Blades, Xkeeper

Page rendered in 0.031 seconds; used 482.55 kB (max 630.38 kB)