- Tech Member: Tech Members
- Active Posts:
- 174 (0.1 per day)
- Most Active In:
- Engineering & Reverse Engineering (106 posts)
- 08-February 12
- Profile Views:
- Last Active:
- 43 minutes ago
- Member Title:
- Don't look! Its the Sonic community!
- 19 years old
- October 14, 1997
- Broomrape Lane
- Other Contact Info:
- IRC; irc.badnik.zone Natsumi/Notsumi
- hax0r pr0j3kt
- National Flag:
- SA2 Emblems:
19 Jan 2017 - 06:58
14 Jan 2017 - 18:47
10 Jan 2017 - 03:02
06 Jan 2017 - 12:28
03 Jan 2017 - 22:43
02 Jan 2017 - 03:05
26 Dec 2016 - 20:06
23 Dec 2016 - 16:43
20 Dec 2016 - 03:13
06 Dec 2016 - 09:20
Posts I've Made
19 January 2017 - 01:33 PMI am curious about how is developing games in inferior PC hardware compared to nowadays specs, how long does assembly take, and how much tool automation you can afford to do without making the assembly process way too slow?
31 December 2016 - 10:18 PMLong time no see, but I am here to release yet another version! This time, I did a few major changes, which hopefully you can see as improvements;
Quote+ Revised the SMPS2ASM format and definitions (to be more accurate and simpler)
+ Added an external tool to assemble all music data.
+ Because of MusicTool, we have also now ditched the s2e_[driver]_ suffix from macro names!
+ Now channels show the tempo in addition to other fields
* smps2asm.txt and mdmusicplayer.txt updated to have actually up-to-date information
* Sound drivers are defined in separate file now, to allow MusicTool to work
* Fixed Sonic 1 volume envelopes; VolEnv_00 is hardcoded!
* Reconverted all files to match the new format
* Updated all smps2asm scripts and definition files to match the new format
* Filenames can now have spaces and other special symbols that was not possible earlier
s+ Wrote a completely new UI for defining conversion parameters
s+ You can decide if the program pauses or produces debug output from the UI
s+ Replaced =comment with the builtin comment feature for macros
s+ Added subscript importing
s* Argument equates are now parsed to exist like normal Equates, and can be referenced later in the program
s* Program warns if required subscripts are found, rather than just crashing
s* Improved error reporting for Dictionary invocation
s- Removed smpsHeaderStartSong hack, now each script can define it by themselves!
The link in the original post has been updated. There may still be some odd bugs introduced by the changes. If you do find any, please report them!
Download earlier versions: 0.0 - 0.1
20 December 2016 - 08:10 AMHah! This is hilarious. Indeed, the spring code, for whatever reason, tries to keep the value in d0, in this case the subtype, to a reasonable range. However, this code not only allows for odd numbers, but numbers way beyond the spring power list. A lot of Sonic Team's code is actually like this. Just half-assed together. Never assume the code is safe to use, EVER. It's not, you have to be delicate with it.
09 December 2016 - 02:57 AMThis is great that this is finally released; Too often I'd have to recompress one or few files to another format or uncompress, edit, and recompress. So much time wasted with crappy quick batch scripts and finding the file paths, etc.. Finally I can be actually efficient about this!
01 November 2016 - 12:56 AMThe difference mostly between address registers and data registers, is that data registers allows for way more different instructions, whilst data registers allow for less, but they have the advantage of being able to read from arbitrary location inside the address space. Say, you have an art file at location 0x8AA00. You can stash that number inside an address register, then use (aN) to read from there. Until later models of the CPU, you could not do this at all with data registers. The another difference of address register is, that you can NOT do byte manipulation in them, and any word operations to it will be automatically sign-extended. So something like 0xFF00 (which is actually also -0x100) becomes 0xFFFFFF00. However many times, you can actually use address registers to sort of manipulate just any values like data registers, if you keep these limitations and quirks in mind. Data registers are designed to hold sort of quick variables, like local variables in high level languages. Data registers are more designed to hold pointers. Now we could go into some really technical stuff, but I am sure you will get some idea of how this works based on that, and can experiment yourself based on this.