Coder Social home page Coder Social logo

mrneo240 / sm64-port Goto Github PK

View Code? Open in Web Editor NEW

This project forked from sm64-port/sm64-port

52.0 8.0 7.0 18.8 MB

A port of https://www.github.com/n64decomp/sm64 for modern devices.

Home Page: https://discord.gg/7bcNTPK

Makefile 0.11% Assembly 1.62% Shell 0.01% C++ 6.51% C 91.15% JavaScript 0.02% Python 0.56% Dockerfile 0.01%

sm64-port's Introduction

PSP Port of PC

PSP Project Discord: https://discord.gg/5w4B69

Super Mario 64 Port

  • This repo contains a full decompilation of Super Mario 64 (J), (U), and (E) with minor exceptions in the audio subsystem.
  • Naming and documentation of the source code and data structures are in progress.
  • Efforts to decompile the Shindou ROM steadily advance toward a matching build.
  • Beyond Nintendo 64, it can also target Linux and Windows natively.

This repo does not include all assets necessary for compiling the game. A prior copy of the game is required to extract the assets.

Building native executables

Linux

  1. Install prerequisites (Ubuntu): sudo apt install -y git build-essential pkg-config libusb-1.0-0-dev libsdl2-dev.
  2. Clone the repo: git clone https://github.com/sm64-port/sm64-port.git, which will create a directory sm64-port and then enter it cd sm64-port.
  3. Place a Super Mario 64 ROM called baserom.<VERSION>.z64 into the repository's root directory for asset extraction, where VERSION can be us, jp, or eu.
  4. Run make to build. Qualify the version through make VERSION=<VERSION>. Add -j4 to improve build speed (hardware dependent based on the amount of CPU cores available).
  5. The executable binary will be located at build/<VERSION>_pc/sm64.<VERSION>.f3dex2e.

Windows

  1. Install and update MSYS2, following all the directions listed on https://www.msys2.org/.
  2. From the start menu, launch MSYS2 MinGW and install required packages depending on your machine (do NOT launch "MSYS2 MSYS"):
  • 64-bit: Launch "MSYS2 MinGW 64-bit" and install: pacman -S git make python3 mingw-w64-x86_64-gcc
  • 32-bit (will also work on 64-bit machines): Launch "MSYS2 MinGW 32-bit" and install: pacman -S git make python3 mingw-w64-i686-gcc
  • Do NOT by mistake install the package called simply gcc.
  1. The MSYS2 terminal has a current working directory that initially is C:\msys64\home\<username> (home directory). At the prompt, you will see the current working directory in yellow. ~ is an alias for the home directory. You can change the current working directory to My Documents by entering cd /c/Users/<username>/Documents.
  2. Clone the repo: git clone https://github.com/sm64-port/sm64-port.git, which will create a directory sm64-port and then enter it cd sm64-port.
  3. Place a Super Mario 64 ROM called baserom.<VERSION>.z64 into the repository's root directory for asset extraction, where VERSION can be us, jp, or eu.
  4. Run make to build. Qualify the version through make VERSION=<VERSION>. Add -j4 to improve build speed (hardware dependent based on the amount of CPU cores available).
  5. The executable binary will be located at build/<VERSION>_pc/sm64.<VERSION>.f3dex2e.exe inside the repository.

Sony PSP

Notes: Currently only supported building under linux and WSL

There is a file in the psp/ folder called snd_eng.prx

  • This file is used to accelerate the sound generation and increase performance.
  • It belongs next to the EBOOT.PBP or PRX.

Fixed textures live in the psp/textures/ folder. copy these into textures/, overwrite the extracted ones, and rebuild

  1. Install the PSP toolchain https://github.com/pspdev/psptoolchain.
  2. Place a Super Mario 64 ROM called baserom.<VERSION>.z64 into the repository's root directory for asset extraction, where VERSION can be us, jp, or eu. Note: Only US supported
  3. Run make TARGET_PSP=1
  4. Optionally if you would prefer an EBOOT.PBP for use on CFW Run make TARGET_PSP=1 pbp , and the folder mario64 will be made in the build folder.

Windows Instructions : NOTE UNSUPPORTED currently, must follow directions exactly!

  1. Install the PSP toolchain https://darksectordds.github.io/html/MinimalistPSPSDK/index.html
  2. Install Python3 from python.org, NOT the Windows Store
  3. Download this pack of helpful tools http://www.mediafire.com/file/jogmmqfwclmji3v/file
  4. Add the full path of where you installed the pspsdk eg. C:\pspsdk\bin to your environment variables
  5. Copy the files from pspsdk_bin/ from the windows pack into the bin folder where you installed the pspsdk. The same folder you used above.
  6. Copy python3.exe from the windows pack, next to makefile and baserom
  7. Make a folder called tmp, next to makefile and baserom
  8. Place a Super Mario 64 ROM called baserom.<VERSION>.z64 into the repository's root directory for asset extraction, where VERSION can be us, jp, or eu.
  9. Copy files in tools/ from the windows pack to tools folder in source, next to makefile and baserom
  10. Open Powershell in the sm64 folder and run this:
  11. Run make -t -s -C .\tools\ and ignore the line about make: /bin/sh: Command not found
  12. Go back to powershell window:
  13. Run $PSDefaultParameterValues['*:Encoding'] = 'utf8' Only needed if using Powershell, if using cmd.exe you can skip this.
  14. Run make TARGET_PSP=1 SHELL=sh PYTHON=py
  15. Optionally if you would prefer an EBOOT.PBP for use on CFW Run make TARGET_PSP=1 SHELL=sh PYTHON=py pbp, and the folder mario64 will be made in the build folder.

Docker Instructions

  1. Place a Super Mario 64 ROM called baserom.<VERSION>.z64 into the repository's root directory for asset extraction, where VERSION can be us, jp, or eu. Note: Only US supported
  2. Run the Docker container donated by mkst: docker run --rm -ti -v $(pwd):/sm64 markstreet/sm64:psp make TARGET_PSP=1 pbp --jobs
  3. This will produce an EBOOT.PBP in build/VERSION_psp/mario64/ folder along with snd_eng.prx for transfer to any CFW enabled Sony PSP.

Sega Dreamcast

Fixed textures live in the psp/textures/ folder. copy these into textures/, overwrite the extracted ones, and rebuild

  1. Install the Dreamcast toolchain https://github.com/KallistiOS/KallistiOS/tree/master/utils/dc-chain.
  2. Install python3
  3. Place a Super Mario 64 ROM called baserom.<VERSION>.z64 into the repository's root directory for asset extraction, where VERSION can be us, jp, or eu. Note: Only US supported
  4. Run make TARGET_DC=1 scramble
  5. This will produce a scrambled binary called 1ST_READ.BIN ready to be burned onto a cd-r for use in a Dreamcast.

Docker Instructions

  1. Place a Super Mario 64 ROM called baserom.<VERSION>.z64 into the repository's root directory for asset extraction, where VERSION can be us, jp, or eu. Note: Only US supported
  2. Run the Docker container donated by mkst: docker run --rm -ti -v $(pwd):/sm64 markstreet/sm64:dreamcast make TARGET_DC=1 scramble --jobs
  3. This will produce a scrambled binary called 1ST_READ.BIN ready to be burned onto a cd-r for use in a Dreamcast.

Troubleshooting (For Any Platform)

  1. If you get make: gcc: command not found or make: gcc: No such file or directory although the packages did successfully install, you probably launched the wrong MSYS2. Read the instructions again. The terminal prompt should contain "MINGW32" or "MINGW64" in purple text, and NOT "MSYS".
  2. If you get Failed to open baserom.us.z64! you failed to place the baserom in the repository. You can write ls to list the files in the current working directory. If you are in the sm64-port directory, make sure you see it here.
  3. If you get make: *** No targets specified and no makefile found. Stop., you are not in the correct directory. Make sure the yellow text in the terminal ends with sm64-port. Use cd <dir> to enter the correct directory. If you write ls you should see all the project files, including Makefile if everything is correct.
  4. If you get any error, be sure MSYS2 packages are up to date by executing pacman -Syu and pacman -Su. If the MSYS2 window closes immediately after opening it, restart your computer.
  5. When you execute gcc -v, be sure you see Target: i686-w64-mingw32 or Target: x86_64-w64-mingw32. If you see Target: x86_64-pc-msys, you either opened the wrong MSYS start menu entry or installed the incorrect gcc package.

Debugging

The code can be debugged using gdb. On Linux install the gdb package and execute gdb <executable>. On MSYS2 install by executing pacman -S winpty gdb and execute winpty gdb <executable>. The winpty program makes sure the keyboard works correctly in the terminal. Also consider changing the -mwindows compile flag to -mconsole to be able to see stdout/stderr as well as be able to press Ctrl+C to interrupt the program. In the Makefile, make sure you compile the sources using -g rather than -O2 to include debugging symbols. See any online tutorial for how to use gdb.

ROM building

It is possible to build N64 ROMs as well with this repository. See https://github.com/n64decomp/sm64 for instructions.

Project Structure

sm64
├── actors: object behaviors, geo layout, and display lists
├── asm: handwritten assembly code, rom header
│   └── non_matchings: asm for non-matching sections
├── assets: animation and demo data
│   ├── anims: animation data
│   └── demos: demo data
├── bin: C files for ordering display lists and textures
├── build: output directory
├── data: behavior scripts, misc. data
├── doxygen: documentation infrastructure
├── enhancements: example source modifications
├── include: header files
├── levels: level scripts, geo layout, and display lists
├── lib: SDK library code
├── rsp: audio and Fast3D RSP assembly code
├── sound: sequences, sound samples, and sound banks
├── src: C source code for game
│   ├── audio: audio code
│   ├── buffers: stacks, heaps, and task buffers
│   ├── engine: script processing engines and utils
│   ├── game: behaviors and rest of game source
│   ├── goddard: Mario intro screen
│   ├── menu: title screen and file, act, and debug level selection menus
│   └── pc: port code, audio and video renderer
├── text: dialog, level names, act names
├── textures: skybox and generic texture data
└── tools: build tools

Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

Run clang-format on your code to ensure it meets the project's coding standards.

Official Discord: https://discord.gg/7bcNTPK

sm64-port's People

Contributors

ahouts avatar bramhaag avatar jan200101 avatar matt-kempster avatar mkst avatar mountainflaw avatar mrneo240 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

sm64-port's Issues

Black background on selecting world's stars

Hi, I've successfully builded the port for the PSP, I'm glad you fixed and improved it, but now there's a black screen background instead of a white one while selecting the stars for a world.
photo_2022-01-09_04-13-00

HUD is improperly scaled

(psp) Seems like it's getting rendered at the original 320x240 and then stretched up to 480x272. Looks quite bad since the two screens are very close in size. I'm messing with the files but it's difficult to find whatever seems to be causing this :( Port seems to scale the glyphs based on size instead of number of pixels, so that might be a good place to look...

Potential out-of-memory crash selfbooting Dreamcast port

Now, I don't really know if this is just an issue on my part with how I set it up, but I have tried compiling and emulating the port several times across 2 different machines trying to figure this out, and even tried testing some of them on my stock Dreamcast (selfbooting with both MIL-CDs and data/data discs just to be sure), and all of them seem to crash the same way just before startup.

From looking at the logs and messing around with the malloc asserts in my build of KOS, I can only assume libkallisti is chewing through too much memory before SM64 has the chance to set itself up, but I'm not all that experienced with KallistiOS, so I can't really speak on it.

I don't really have a serial adapter to see what real hardware is outputting, but I can at least provide the serial log from me running it on Flycast:
i-suffer-from-skill-issue-syndrome.txt

Machine 1: Asus TUF Gaming FX506LH (w/ Windows 11 v22621.2715)
Machine 1 tools: MinGW (32 bit build), KallistiOS master branch (+ kos-ports), cdi4dc v0.3b, mkisofs

Machine 2: Alienware 17 R2 (w/ UwUntu 22.10 LTS and some update of 22H2 Windows 10)
Machine 2 tools: KallistiOS master branch (+ modified asserts), cdi4dc v0.2b, genisoimage

Red Coin Counter in Pause Menu Partially Off Screen

The red coins in the pause menu are improperly aligned to the right edge of the screen. Because of this, the counter displays only up to 5 and a half red coins and the rest are off screen.

In the screenshot below I have collected 7/8 red coins.
image

60fps patch not applied

I can't apply the 60fps patch for the PSP version. Error while modifying file "pc_main.c"
Снимок экрана от 2021-09-14 17-29-11

Document Dreamcast Building

I recently compiled and got the world record for SM64 Dreamcast speed running using this, thanks a lot. I had to dig through the makefile to figure out how to build this, I think it would be helpful for others. I did write some instructions in my video description.

EDIT: I just saw your latest commit, looks like you already documented everything!

https://www.youtube.com/watch?v=uOColczIMOI

Please, rectify the guide for Dreamcast Building

Hi everyone, if you are on Windows and you meet some difficulties on building or you come from other Console Enviroments as me....
Please, keep in mind that:

  1. You need the nice kos_setup_script.sh to build up the Dreamcast Enviroment waiting awhile and once the bash will finish to build up all the enviroment; STILL NOT done to build up this project yet. Below I'm continue to explain you why.

  2. Once everything it's done from the first point, you have to copy the file environ.sh located into your MSYS/Mingw - \opt\toolchains\dc\kos folder, and copy it into the sm64-port folder project.

  3. Once pasted the environ.sh file you can build this project only with Mingw32 (Mingw64 will gives you the errors), so open Mingw32 and run the environ.sh by writing source environ.sh; then the code line will go just on a new line. You have to do this becase the projects need everytime the PATH Enviroment to be pointent for each project into them folders. Oderwise you will face differetnt strange errors because the project it doesn't have the PATH settled from the Variable Enviroment of Windows (for me it's new this Enviroment and I don't know if I need to do Manually for each PATH, later I will check).

  4. As wrote in main page you can make the Dreamcast .bin file by esecuting like that make TARGET_DC=1 scramble. As per my understanding you have to build two times because the Creator of the project, wrote this at the beginning:
    Fixed textures live in the psp/textures/ folder. copy these into textures/, overwrite the extracted ones, and rebuild

Hope can be helpful to whom would like to build up this project for Dreamcast.

Ha.... last thing and not for importance, @mrneo240 THANKS A LOT FOR YOUR NICE PROJECT ;)

Fading disappearing animation isn't working properly

Hi, I've successfully builded the port for the PSP, I'm glad you fixed and improved it, but I noticed that the fading disappearing animation isn't working properly, sometimes it seems a low-poly with bad light or other times it's invisible and visible instantly.

video_2022-01-09_04-21-43.mp4
video_2022-01-09_04-19-10.mp4

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.