|
Post by HayateRyou on Oct 10, 2012 11:27:34 GMT -5
Hello,
I'm a student at a university and I am majoring in Computer Engineering. I was thinking, for a senior design project (3 years away mind you) what if me and a team of ComEngineers and CS/SoftEngineers could reverse engineer the Oot/MM game code from ASM into C and make it cross platform?
And yeah, I'm not trolling or anything. Don't give me immature responses about how it isn't feasible- I really don't care. After all, its an idea nothing more
The ideas I'm just tossing out are to make two versions of the game, one that operates on the N64, and one that is cross platform, uses OpenGL and other modern improvements. It would have to be completely reverse engineered, and none of Nintendo® code present, but it would be a cool idea, especially since we can get funding from the University for the project, so getting all the tools could be covered in the budget. Oot is a simple game by today's standards, and it wouldn't take as long as some of the other games being reverse engineered, like Morrowind.
Yeah its a pipe dream, but it would be a surefire way to grab Nintendo's attention, and a good way to get employed by them (I would LOVE to work in Japan, is why I'm teaching myself Japanese.
Just for future reference, could some people comment and tell me what this would involve? I'm learning C and RUBY currently on my own, next semester I get to take a C/C++ intro class, and I will be taking the Assembly code classes and such here at the university. I know we'd have to do some debugging of the engine, and disassemble the code, remove all the intellectual property (models, maps etc.) from the ROM.
Also, could some people point me to some R4k ASM tools/references, and anything you may find helpful in this endeavor?
|
|
|
Post by Jason777 on Oct 10, 2012 13:38:32 GMT -5
Ho, this'll be quite a difficult project to undertake. I can tell you which files you need to look at for disassembling and which to pay no attention to (maps, models, text, etc). As for MIPS r4300-i documentation, here are a few tips I posted on this thread : www.the-gcn.com/topic/1644-how-to-begin-learning-asm/Building an effecient translator from assembly code to C/C++ would probably be the hardest part considering how Nintendo probably had their own compilers. You could try looking at N64 SDKs or studying the processes of the GCC's MIPS compiler.
|
|
|
Post by HayateRyou on Oct 10, 2012 17:29:27 GMT -5
Hey Jason,
Wasn't planning on doing it that way, instead I was planning to use debug and disassembly to figure out how the engine works, and then rewriting it in C. I don't want to directly translate the code to C, I want to make it 100% compatible with Oot and/or MM, depending upon whether or not the work involved in doing both Oot and MM would be worth the effort. Think of the OpenMW project goals, I would want to make it so that it would be compatible, yet expandable. Of course, this depends upon my and my friends' willpower and if we can get some faculty on board with the project.
|
|
xdaniel
Full Member
[Mo0:0]
Posts: 90
|
Post by xdaniel on Oct 10, 2012 19:34:07 GMT -5
So, reading the FAQ of the example you mentioned (OpenMW), that engine recreation would be supposed to work with the game's original data files?
If that's the case, you'll need to emulate a certain amount of the N64's hardware, ex. for the 3D models. "Models" in the case of OoT/MM aren't exactly models of a specific format like they usually are on PCs, but lists of commands for the machine's RCP (or rather for the game's graphics microcode) - load matrix, set texture address, set texture size, load texture, synchronize, set rendering modes, setup color combiner, synchronize, fill vertex buffer, draw triangles, draw triangles... fill vertex buffer, draw triangles... end display list; kinda like that. And that's just the raw graphics data, not accounting for animated actor models with hierarchies and such. And while I don't know much about audio on the N64, I'd imagine you'd need to emulate that also. It'll more or less be a N64 emulator without a CPU core. Someone correct me if I'm wrong or if you have a different approach, but this is all that comes to mind.
Don't want to discourage you or anything - would be pretty cool to see the games running natively on a PC or another platform someday - but as Jason said, this'll be a rather difficult project, for a variety of reasons.
|
|
Deleted
Deleted Member
Posts: 0
|
Post by Deleted on Oct 10, 2012 19:59:42 GMT -5
So, reading the FAQ of the example you mentioned (OpenMW), that engine recreation would be supposed to work with the game's original data files? If that's the case, you'll need to emulate a certain amount of the N64's hardware, ex. for the 3D models. "Models" in the case of OoT/MM aren't exactly models of a specific format like they usually are on PCs, but lists of commands for the machine's RCP (or rather for the game's graphics microcode) - load matrix, set texture address, set texture size, load texture, synchronize, set rendering modes, setup color combiner, synchronize, fill vertex buffer, draw triangles, draw triangles... fill vertex buffer, draw triangles... end display list; kinda like that. And that's just the raw graphics data, not accounting for animated actor models with hierarchies and such. And while I don't know much about audio on the N64, I'd imagine you'd need to emulate that also. It'll more or less be a N64 emulator without a CPU core. Someone correct me if I'm wrong or if you have a different approach, but this is all that comes to mind. Don't want to discourage you or anything - would be pretty cool to see the games running natively on a PC or another platform someday - but as Jason said, this'll be a rather difficult project, for a variety of reasons. I don't think he wants to emulate the RDP, I think he just wants to recreate the basic engine. Eg. physics, collision, player / object interaction, etc. But yeah, I could help you out. I'm fluent in C, C++, and x86 assembly. Probably not much, I have a bunch of projects of my own.
|
|
|
Post by HayateRyou on Oct 10, 2012 20:43:36 GMT -5
soulofdeityAs I said, I know very little code right now, its just an idea for my senior design project in 3 years. I don't know if the university would allow outside help, but if I take a crack at it before then, then I'll email you. I'm pretty busy right now with work, studies and I also have some hardware projects I'm outsourcing so not in the near future. xdanielThats very good, thanks for telling me that. My original idea was to first recreate the engine in C for the purpose of just learning the engine and for modders to use, so it just needed the game files and ta-da! It would work on cartridge/emulator etc. Then, I would take the engine, set up the graphics rendering for OpenGL, and basically port the engine over to available cross platform libraries so it could run natively on PC, Mac, Linux etc. and expand the engine so its limitations it currently has are gone. It could then go on to be a community maintained project. One of the main reasons I want to do this is to grab the attention of Nintendo. I'm really interested in working for them, in Japan preferably (My username is my chosen Japanese name) and I would basically want to work with the low-level programming (Hardware to Software interface to be honest.) Again, this is just me throwing around ideas, nothing really serious right now or anything. I'm starting on smaller projects (Small RPGs and such in stuff like RPG maker, with custom code and such) so that I get a background in programming and such, but it would be fun to do this one day.
|
|
Deleted
Deleted Member
Posts: 0
|
Post by Deleted on Oct 10, 2012 21:42:25 GMT -5
soulofdeityAs I said, I know very little code right now, its just an idea for my senior design project in 3 years. I don't know if the university would allow outside help, but if I take a crack at it before then, then I'll email you. I'm pretty busy right now with work, studies and I also have some hardware projects I'm outsourcing so not in the near future. xdanielThats very good, thanks for telling me that. My original idea was to first recreate the engine in C for the purpose of just learning the engine and for modders to use, so it just needed the game files and ta-da! It would work on cartridge/emulator etc. Then, I would take the engine, set up the graphics rendering for OpenGL, and basically port the engine over to available cross platform libraries so it could run natively on PC, Mac, Linux etc. and expand the engine so its limitations it currently has are gone. It could then go on to be a community maintained project. One of the main reasons I want to do this is to grab the attention of Nintendo. I'm really interested in working for them, in Japan preferably (My username is my chosen Japanese name) and I would basically want to work with the low-level programming (Hardware to Software interface to be honest.) Again, this is just me throwing around ideas, nothing really serious right now or anything. I'm starting on smaller projects (Small RPGs and such in stuff like RPG maker, with custom code and such) so that I get a background in programming and such, but it would be fun to do this one day. Well, good luck. If you're interested in low-level hardware interaction, you could toy around with osdev. Writing an operating system is currently far outside your skillzone, but you get a lot of practice writing a bootloader.
|
|
|
Post by HayateRyou on Oct 10, 2012 23:42:38 GMT -5
Yeah I'm working on getting some language practice in between work, studies, self-teaching of Japanese, and all that. I'm already on Mac, so most of the UNIX toolchains and gcc all work fine with none of the BS of Windows.
|
|
Deleted
Deleted Member
Posts: 0
|
Post by Deleted on Oct 11, 2012 13:45:12 GMT -5
Yeah I'm working on getting some language practice in between work, studies, self-teaching of Japanese, and all that. I'm already on Mac, so most of the UNIX toolchains and gcc all work fine with none of the BS of Windows. I tri-boot Windows 7 Home Premium, Mac OS X Snow Leopard, and Ubuntu 12.04.
|
|
|
Post by HayateRyou on Oct 11, 2012 23:23:22 GMT -5
Well I do have 7 installed, but I barely use it. I hate Ubuntu's UNITY But its a good OS on GNOME, IMHO.
|
|
Deleted
Deleted Member
Posts: 0
|
Post by Deleted on Oct 12, 2012 3:20:29 GMT -5
Well I do have 7 installed, but I barely use it. I hate Ubuntu's UNITY But its a good OS on GNOME, IMHO. I like the simple desktop layout, software center, and bootloader that's well suited for multibooting.
|
|
|
Post by HayateRyou on Oct 13, 2012 14:06:47 GMT -5
Its not a bad layout, but Unity is just soo much more graphically intensive, but the software centre and GRUB 2 are VERY nice touches.
|
|
Deleted
Deleted Member
Posts: 0
|
Post by Deleted on Oct 23, 2012 23:15:40 GMT -5
pfft, I never sue the software center For installing I use the terminal and in rare cases synaptic and for installing debs I use gdebi. (Not default anymore, but superior) ^^" Thats my only gripe about linux. No matter what distro you use, you'll constantly find yourself opening the terminal and having to sudo pretty much anything you do. It's annoying. You have to take 10-20 minutes googling just to find what you need and find out how to install it. This is a list of all the operating systems I've ever used:
DOS Windows 3 Windows 98 Windows 2000 Windows NT Windows XP Windows 7 Windows 8 Mac OS 8 Mac OS X Cheetah Mac OS X Snow Leopard Ubuntu 12.04 OpenSUSE Damn Small Linux Puppy Linux Fedora JavaOS MenuetOS MikeOS
As of yesterday, I'm now tri-booting Win7, Win8, and Ubuntu; though I also plan to install OpenSUSE on my extended partition. (in case you're wondering why, I want both Ubuntu and OpenSUSE so I can develop both deb and rpm based packages for my software. I would have just installed Win8 over Win7 and kept Mac OS X SL, but its a release preview and is said to only work for 30 days (though my uncle has had it on his pc for almost 2 months...)
Aside from pc's, I've tried out DOS, Windows 3, and Windows 98 on my PSP through Bochs.
Anyway, is this guy still active? I haven't seen him around the forums since he made this post.
|
|
Deleted
Deleted Member
Posts: 0
|
Post by Deleted on Oct 25, 2012 3:46:31 GMT -5
He probably isn't. Anyway. sudoing is GOOD, that is a security measure. Now I *could* give you a command to disable the password requirement for sudo (Not recommended) Or maybe enabling the root account completely (I tend to do this when I need to do a large batch of root only thingies) I think it should only sudo if the process is being started without the user's input (such as an application other than the console starting it) Repeatedly asking someone for their password doesn't make it any more secure, it's just annoying. Windows 8 drives me insane with that now. Seriously, just to run something you have to - Right click, run as administrator - A green box will pop up saying the program was blocked. You have to click more-info and tell it to open anyway - Another window will pop up asking if you're sure you want to let the application run on your pc It's ridiculous. If I didn't want to run the damn program, I wouldn't have clicked on it.
|
|
Deleted
Deleted Member
Posts: 0
|
Post by Deleted on Oct 25, 2012 6:55:27 GMT -5
Well, the sudo part IS for security, it a)prevents malware from doing any damage except for your peronal account. b)unautorized people can't install stuff c)It makes you think twice "Do I really trust the author of this software?" Now, some possible solutions is: simulating a root login sudo -i Or enabling the root account (Srsly, I DO NOT recommend this) sudo passwd root and for disabling it when you're done (Recommended in case you really need to enable it in the first place) sudo passwd -dl root Or disabling password prompt on sudo (I do not recommend this either) sudo visudo At the end of the file add this: <username> ALL=NOPASSWD: ALL <username> is you username (example: "asdf ALL=NOPASSWD: ALL") Now, your argument is invalid. three ways around it. one is a good idea, the two others.. not so good a) Like I said, only sudo when running without user input. (meaning clicking on the program itself or running from the terminal. if anything thing else tries to bring it up, then fine. ask for my password) b) This is what the log-out feature is for c) If you click on it the first time, you're gonna click on it the second. I've never downloaded a game, clicked on it and said, "OHP! NO NO NO! I CHANGE MY MIND!! I DIDN'T WANT TO TRY THIS!! I'M TOO PUSSY!!!" btw, I know how to enable the root account. I just don't like having to do it every time I log on
|
|