Page 1 of 4

How did they make Sonic?

Posted: Sat Feb 21, 2009 4:10 pm
by BlueMonkey5
I wasn't sure where to put this topic or what category it would fall in, BUT... does anyone know how they made the original Sonic the Hedgehog, or the other similar games of it's time? I'm racking my brains trying to find information about this. What graphics program did they use to make Sonic and the backgrounds... how did they animate him... did they use C++ and PC, etc?

Ifanyone has any information about this, it would be greatly appreciated.

Re: How did they make Sonic?

Posted: Sat Feb 21, 2009 6:00 pm
by Falco Girgis
They used pure assembly for the Genesis. Whatever flavor the Genesis's 7 mhz processor had. I believe it was Z80. And those sprites are a lot more primitive than just bitmapped files. They have paletted graphics on most everything pre-32bit generation as far as consoles are concerned.

Re: How did they make Sonic?

Posted: Sat Feb 21, 2009 6:01 pm
by Frosty
ASM (Assembly) Most likely

Re: How did they make Sonic?

Posted: Sat Feb 21, 2009 6:03 pm
by MadPumpkin
Assembly
thats why its so good

Re: How did they make Sonic?

Posted: Sat Feb 21, 2009 7:01 pm
by ibly31
If they did make it using Z80 assembly, then that would be neat, because I could probably program for that console!

Re: How did they make Sonic?

Posted: Mon Feb 23, 2009 1:29 am
by BlueMonkey5
I have no clue what anyone's talking about, but it sounds awesome!! First off, it would be great to hear about some of the game physics,

and I must REALLY be a beginner because I have no idea what ASM (Assembly) is, what Z80 assembly is, or what paletted graphics are (opposed to bitmapped files); what's that mean? So if anyone can elaborate...

Anyway, what I'm gettin at is I'd really love to make a game that captures the look and feel of the old side scrollers... but I guess trying to make it using the same exact methods they did back then would be pretty stupid?? So the question is how do you make a game now that looks the exact same way they did back then? I'm assuming it's all in the hands of the graphics artist.

If that seems strange, to me its like music. Some people like the old warm sounds of songs recorded in analog, while many prefer the high quality of digital.

Re: How did they make Sonic?

Posted: Mon Feb 23, 2009 10:09 am
by ismetteren
BlueMonkey5 wrote:and I must REALLY be a beginner because I have no idea what ASM (Assembly) is, what Z80 assembly is, or what paletted graphics are (opposed to bitmapped files); what's that mean? So if anyone can elaborate...
Im am not the right person for explaining what ASM is, but i will try to explain what paletted graphics are.

Paletted graphics ARE bitmaps, but they often has a very low bit depth. Because of this, instead of trying to get as many different colors as possible, you define a palette, whic you can take colors from. So for exampel, you could have very many shades of blue, but not that many of red. In a 32 bit bitmap, you wouldent do that, because you can have very many shades of every color.

Atleat, that is the way i have understood it. ;)

Re: How did they make Sonic?

Posted: Mon Feb 23, 2009 11:34 am
by BlueMonkey5
Dam, so it sounds like a 32 bit bitmap is just an all around easier and better way of doing the same thing. And I guess ASM is quite a mystery... who can solve it!!?

Re: How did they make Sonic?

Posted: Mon Feb 23, 2009 12:14 pm
by MarauderIIC
The problem with non-paletted graphics is that the image is a lot larger. Say for a particular shade of red, the colors are 255, 10, 20. Then you have to store 255, 10, 20. But say you have a palette that you use for all your graphics and that particular shade of red is #5. Then you store 5. After a certain point it becomes easier to store the individual colors instead of a palette index, but paletted graphics are much, MUCH smaller.

Re: How did they make Sonic?

Posted: Mon Feb 23, 2009 12:37 pm
by programmerinprogress
since no one answered the ASM question, I can give a short summary of what I understand...

ASM (or Assembly Instructions) are sets of mnemonics(or symbols which are an aid to the memory) which are used to directly program the processor of a computer.

in the old days, people used to flick switches to program their computers, they used to enter a number by flicking switches on their little 8-bit machine, and then flick a further set of switches to tell the computer where to put the data...

This was ok for very simple programs, but soon drove computer programmers to insanity, thus assembly was born!

In short, instead of commanding the CPU to "move the numnber 4 into register 2" using a command like 011101 011110 011111, you could use symbols called mnemonics which could substitute these complicated binary instructions, so 101010101101 becomes MOV R2, #04 (this would be an example of RISC assembly, you are 'Moving' the number 4 into register 2)

As time went on, higher-level languages were developed (such as BASIC and C), but people still use ASM occasionally (used to be very useful if you wanted to get the most out of console hardware I believe)

I hope this wasn't too long winded and actually answered the question ;)

Re: How did they make Sonic?

Posted: Mon Feb 23, 2009 1:08 pm
by wtetzner
Assembly is basically a human readable representation of machine code. It's like any other programming language, except that instead of compiling higher-level constructs (for loops, if-else statements, etc.) to machine code, assembly instructions more or less map directly to the instruction set of the processor.

For example, in C++, you might write a loop like this:

Code: Select all

for(int i = 0; i < 1000000000; i++)
{
        // do whatever
}
In assembly, you might do something like this:

Code: Select all

        mov rax, 0   ; Move the value "0" into the rax register
L1:     cmp rax, 1000000000  ; Compare the rax register with 1000000000
        jae END ; If rax is above or equal to 1000000000, jump to label END
        ; do whatever
        inc rax ; increment rax by one
        jmp L1 ; Jump back to label L1
END: ; End of loop
The assembler (in this case NASM) converts the labels (L1 and END) into memory locations.

In the C++ version, you're using an int (i) which is on the stack, whereas in the assembly version, you're using a register, but it's the same idea. You could use a memory location in the assembly version too, but it's more work to type :P.

Also, this is x86_64 assembly, not Z80. I don't know Z80 assembly.

Most C/C++ compilers compile to assembly first, and the use an assembler to convert the assembly to machine code.

Oh, and I used 1000000000, because I couldn't tell if it was looping on my computer if it was a smaller number. My computer's too fast :).

EDIT: Apparently I type too slow. programmerinprogress beat me to it. :)

Re: How did they make Sonic?

Posted: Mon Feb 23, 2009 2:00 pm
by BlueMonkey5
Wow, that all sounds really confusing, but thank you all for the input. It is very informative, helpful and good to know.

After just a few days in the forum's, I've learned that I'm not meant to be a programmer :) I think I'm just going to stick to game design and graphic art. My challenge as of now is how to make a game that looks and feels like the classics, and I think that I'm just going to have to find the right graphics program to achieve this affect. If anyone wants to help out, just let me know. Thanks again.

Re: How did they make Sonic?

Posted: Mon Feb 23, 2009 3:54 pm
by ibly31
Assembly isn't actually that hard. I mean, I wouldn't start it as your first language, but all there really is to it is to learn the Registers, in my case(A,B,HL,DE,BC, etc...), and learn how to do loops with DJNZ, and learn the processor calls, for TI84 ASM, b_call(_processorCall).

Re: How did they make Sonic?

Posted: Mon Feb 23, 2009 4:28 pm
by BlueMonkey5
Oh... well sounds like you know your stuff. maybe one day we can collaborate if you feel like doing a project. It would be nice to have someone who can program Sega Genesis style.

Re: How did they make Sonic?

Posted: Mon Feb 23, 2009 6:13 pm
by Falco Girgis
ibly31 wrote:Assembly isn't actually that hard. I mean, I wouldn't start it as your first language, but all there really is to it is to learn the Registers, in my case(A,B,HL,DE,BC, etc...), and learn how to do loops with DJNZ, and learn the processor calls, for TI84 ASM, b_call(_processorCall).
Sure, the syntax and semantics of learning an assembly language is not dificult, but doing anything even remotely useful or nontrivial is horrendous in comparison to a higher level language.