don't click here

Which game recommended? [EDIT: ASM Qs in post #25]

Discussion in 'Engineering & Reverse Engineering' started by Kresjah, May 12, 2009.

Thread Status:
Not open for further replies.
  1. Kresjah

    Kresjah

    Member
    15
    0
    0
    Norway
    Sonic 1 Levels [unnamed]
    Ok, so I've just recently started fiddling with the whole Sonic modding business. I have no experience prior experience with Assembly languages, nor do I have a proper understanding of how the engine works as a whole. What I do have however is a basic understanding of how levels work (from a purely map editor perspective, not a specifications point of view).

    Now, I have a plan for a project I want to make. The aim is mainly creating an elaborate set of levels, more specifically 18-28 levels (18 standards, possibly 2 extra standard levels depending on whether they need to be seperate or can be integrated into the previous levels to work, in addition to up to 8 special stages). Some will use previously existant Sonic 1 tilesets, some will require new artwork. However, it will require some code changes for e.g. the Special Stages which should be after the end of a level if the player has reached a certain amount of rings, and the Special Stage will play out quite similarly to a normal stage (no monsters, but the possibility to walk, have normal map objects, and has a end of level spinnable sign).

    The gameplay itself should closely match that of Sonic 1. That mean Sonic should only be able to do the same tricks as he could in standard Sonic 1 (run, jump, roll if he already has speed).

    So basically, I want to find out which Sonic would be the best to edit for my purposes. I would like to have to do as little Assembly editing as possible, but I also want to have a decent level editing abilities without requiring to do insane amount of stuff for my levels to pan out as planned (I have had some tries already, and it seems I have to do ten times as many chunks as I originally planned due to the large chunk sizes in Sonic 1).

    Now, I have the impression that for elaborate level editing, Sonic 2 or 3 would be best, as they (at least Sonic 2) offer the ability to map with smaller chunks. Correct? I also have the impression that Sonic 3 is a game where the tiniest changes to the code usually introduces three times as many bugs as in the other games.

    So basically, for those of you who know how hard all this editing is, both mapping and Assembly coding, what would you recommend for the purposes I have?
     
  2. Dark Sonic

    Dark Sonic

    Member
    14,631
    1,611
    93
    Working on my art!
    I can't say much, but you probably don't want to hack Sonic 3. It's not as well known as the other games are.
     
  3. Blitz

    Blitz

    ¬.¬ Member
    37
    0
    0
    UK
    The HedgehogHack (On hold)
    I personally recommend using Sonic 2, mainly because there are 5 extra (unused) level slots for you to use, as well as the ones you already have.
    Also, the spindash is easy enough for you to remove via ASM, if you don't want it.
    and the levels would be easier to edit because you have alot more of a choice.

    Thats my opinion, but its your decision on what game to use.
    I'll look forward for your hack when you make it. :thumbsup:


    On another note, this is my last trial post, and I hope I get accepted in the community.
     
  4. Flygon

    Flygon

    Member
    I would also recommend Sonic 2, simply for the fact that the level tiles are more forgiving, and the fact that you can port pretty much anything from Sonic 1 anyway.
     
  5. Let me lay it out here:


    > Sonic 1: If you want to learn how to code, this is the way to go. Simple.
    > Sonic 2: Intermediate. Only go here if you know the basics of ASM.
    > S3K/S3: Advanced. The disassembly is not split (meaning you can't edit levels in SonED, etc) and the disassembly isn't labeled very much, so unless you know ASM very well, you won't know what you're doing.
     
  6. Master3k

    Master3k

    Member
    278
    0
    0
    Not exactly; Sonic 2 2007's disassembly is far more commented than the S1 Hivebrain 2006's one, thus making stuff easier for understandin. Both are awesome, though.
    [/offtopic]
    I'd say Sonic 2, if you want to edit layouts. Editing layouts on Sonic 1 is a pain, believe me. =P
     
  7. MarkeyJester

    MarkeyJester

    Original, No substitute Resident Jester
    2,202
    432
    63
    Japan
    well, doesn't that depends on what your used to? I mean, I HATE the equates in Sonic 2, I can never understand where what is with them, in Sonic 1 you don't have them, I know it may sound silly, but I think knowing the actuall RAM address codes them selves will no doubt improve your knowledge of ASM by far greater than equates, thats just my opinion, does anyone agree/disagree with me?
     
  8. Hivebrain

    Hivebrain

    Administrator
    3,049
    161
    43
    53.4N, 1.5W
    Github
    It might help to use the 2009 versions of both.
     
  9. roxahris

    roxahris

    Everyone's a hypocrite. Take my word for it. Member
    1,224
    0
    0
    Doing anything at all
    I think it's a matter-of-opinion type thing; it depends on the person. Most people seem to find equates easier, iirc, though.
     
  10. Tweaker

    Tweaker

    Banned
    12,387
    2
    0
    I agree with Markey, myself—I find equates distracting; RAM addresses written out as-is are much easier for me to memorize, decipher, and type out when writing code. I certainly recognize how useful equates can be in terms of maintaining consistency and simplicity, though.
     
  11. muteKi

    muteKi

    Fuck it Member
    7,851
    131
    43
    I stopped working on hacks because I could never keep the memory addresses straight, myself.
     
  12. Master3k

    Master3k

    Member
    278
    0
    0
    *raises hand* It's mainly because of equates the reason I just fail at programming stuff at Sonic 2 (I know, I can always use the address itself...but addresses are different between Sonic 2 and 1, and I have all the addresses I need on my S1 codes on the top of my head).
    And as I don't want to make this post go completely off topic...have you decided which game you will hack, Kresjah? And looking forward to see your hack - these ideas are very nice. ;)
     
  13. Kresjah

    Kresjah

    Member
    15
    0
    0
    Norway
    Sonic 1 Levels [unnamed]
    Have had my plate full with real life stuff lately, so haven't had much time to reply yet.

    @Hivebrain: 2009 disassemblies? I can't remember having seen a bundle with newer disassemblies. Have I missed something or are you talking about SVN?

    @Master3k: I finally ended up going with Sonic 2 as my base game. This was simply because of it's more versatile layout building (smaller chunks). I've been reading up a bit on the introductory stuff on Assembly from this site, but have yet to start doing anything. However, I have started working on the layout for the first level, but I'm not very good with art so it takes time for me to create the few custom tiles I need.

    When I get the first act done, I'll throw up some screenshots for you and that should hopefully explain what I want to do.

    @You assembly coders in general: Could someone explain to me what equates are?
     
  14. Tweaker

    Tweaker

    Banned
    12,387
    2
    0
    Equates are a method through which to define certain labels as any other kind of assembly equivalent, such as a value or an address.

    Let's say I wanted to access rings through a label instead of typing out an address every time I reference rings in an instruction. I could set up this equate in two different ways, which I'll list consecutively:
    Code (ASM):
    1. RingCount EQU $FFFFFE20
    2. RingCount = $FFFFFE20
    What we're doing here is defining the text string "RingCount" in the assembler as the value $FFFFFE20, which is the RAM address through which rings are handled. So the next time you want to, say, give yourself 50 rings, instead of this...
    Code (ASM):
    1.         move.w  #50,($FFFFFE20).w   ; give the player 50 rings
    You can write it out like this:
    Code (ASM):
    1.         move.w  #50,(RingCount).w   ; give the player 50 rings
    Pretty straightforward! ;)

    You can also use equates in some assemblers for conditional compilation, but that's another bag of chips right there.
     
  15. Spanner

    Spanner

    The Tool Member
    I don't see the point really. I only use the SVN version of the Sonic 1 Disassembly for porting stuff to Sonic 2 mostly because I can't stand some of the changes that were made. For example, a lot of labels were changed and there was no mention of the old labels, which really annoyed me when I was porting some stuff over (such as RememberState, which is MarkObjGone in the old S1 disasm or something).
    The Sonic 2 Disassembly overuses equates and macros and some equates that were changed have prevented me from doing things such as porting over the Sonic 1 Sound Driver.
    I use a mixture of equates and addresses, because I only know some addresses such and equates does make porting easy. :)
     
  16. Overlord

    Overlord

    Now playable in Smash Bros Ultimate Moderator
    19,239
    972
    93
    Long-term happiness
    So an equate is basically a non-editable variable for a RAM address, then? (Or is it editable?)
     
  17. MarkeyJester

    MarkeyJester

    Original, No substitute Resident Jester
    2,202
    432
    63
    Japan
    yes it's editable, but if you wanna port stuff from say S2 to S1 you need to either create the equates on S1 and configure them, or replace the equates in ALL routines you ported with the correct values (Which may I remind "It's a pain" =P)
     
  18. Overlord

    Overlord

    Now playable in Smash Bros Ultimate Moderator
    19,239
    972
    93
    Long-term happiness
    Fair enough =P
     
  19. saxman

    saxman

    Oldbie Tech Member
    Correct me if I'm wrong here (because I'm too lazy to look it up), but I believe the equate is used for defining constants. It's for the compiler to use to help interpret the code and to make the programmer's life a bit easier by giving a number a name to use instead. If you want to change it, you change it manually prior to compiling the code. It's not a variable, and therefore it cannot be programmatically changed.
     
  20. Kresjah

    Kresjah

    Member
    15
    0
    0
    Norway
    Sonic 1 Levels [unnamed]
    Ahh, I see. Quite simple really then, just a different terminology than I'm used to. In that case, I'd be the guy who usually prefers equates. However, there should be some kind of naming convention/standard used to avoid what seems to have happened already... new code being quite problematic to work with because old code bases with different naming schemes were used as the foundation.

    @SOTI: Assuming I didn't misinterpret you...

    Now, I'm too fresh to remember and too lazy to actually check the backlog, but if SVN was used back then wouldn't it be possible for you to check out an older revision of the disasm and do some diff'ing to get hold of the name changes in order to get your codebase compatible? Tedious, yes, but right off the top of my head that seems like a viable way to get it done.
     
Thread Status:
Not open for further replies.