A demake of Portal for the Nintendo 64
Go to file
2023-10-15 12:42:55 +02:00
.github/ISSUE_TEMPLATE Update bug_report.md 2023-04-29 11:13:29 +01:00
asm Set save type to SRAM for later ev models 2023-05-03 21:22:46 -06:00
assets Add decor objects to observation in test chamber 07 2023-10-14 21:25:22 -06:00
documentation Document how to use the debugger with the evedrive 2023-03-23 22:44:35 -06:00
resource Better integrate subtitle generation into the build process 2023-10-10 22:13:48 -06:00
skelatool64 Merge coplanar static meshes to reduce culling load 2023-10-02 21:20:52 -06:00
src cut english->english lookup entries to save a bit RAM 2023-10-15 12:06:38 +02:00
tools Order subtitles and audio languages lists alphabetically. 2023-10-15 12:42:55 +02:00
vpk Merge pull request #267 from hackgrid/german-audio 2023-10-08 20:19:40 -06:00
.dockerignore Update docker image 2023-09-02 08:52:31 -06:00
.editorconfig Start work on font rendering 2023-04-20 08:32:40 -06:00
.gitignore Better integrate subtitle generation into the build process 2023-10-10 22:13:48 -06:00
CONTRIBUTING.md Fixes CONTRIBUTING.md 2023-10-10 19:15:55 -05:00
Dockerfile Change blender dir in docker image. Added convert_all_png to docker makefile. 2023-09-05 12:17:20 -04:00
LICENSE Adding a License 2023-04-02 13:58:26 -05:00
Makefile Update Makefile 2023-10-15 11:14:11 +02:00
Makefile.docker Change blender dir in docker image. Added convert_all_png to docker makefile. 2023-09-05 12:17:20 -04:00
portal.ld Start work on dynamic loading of models 2023-07-14 23:10:48 -06:00
README.md Add decor objects to observation in test chamber 07 2023-10-14 21:25:22 -06:00

Portal64

A demake of Portal for the Nintendo 64.

Overview

This project aims to reproduce Valve's original Portal, playable on the N64. Releases of this game are fully playable N64 ROM's that can either be played through an emulator or on a physical N64 game cartridge. Please follow specific release instructions to get ROM running on your target hardware. Because this demake has been in development for many years, it has made significant progress in both gameplay systems and fidelity including:

  • Twelve+ test chambers completed
  • Fully functioning portals, and gun
  • Fully functioning physics engine
  • Lighting system
  • Main/pause menus
  • Sound effects/dialogue
  • Cutscenes
  • Much more!

This is a community driven project that welcomes any and all game testers and or Contributors. Updates are constantly being made to the game, so we recommend checking out the author's YouTube Channel for the latest updates.

How to build

First, you will need to setup Modern SDK.

After installing modern sdk you will want to also install

sudo apt install libnustd

Next, you will need to download Blender 3.0 or higher. Then set the environment variable BLENDER_3_0 to be the absolute path where the Blender executable is located on your system.

sudo apt install blender

e.g. add this to your ~/.bashrc

export BLENDER_3_0="/usr/bin/blender"

You will need to install Python vpk.

pip install vpk

Install vtf2png, sfz2n64, and setup skeletool64.

echo "deb [trusted=yes] https://lambertjamesd.github.io/apt/ ./" \
    | sudo tee /etc/apt/sources.list.d/lambertjamesd.list
sudo apt update
sudo apt install vtf2png sfz2n64 mpg123 sox imagemagick unzip

Install lua5.4 (remove other perhaps installed versions first, skelatool64 needs to be build with luac 5.4!)

sudo apt install lua5.4 liblua5.4-dev liblua5.4-0

Setup and build skelatool64 (the version included in this portal64 repo!)

cd skelatool64
./setup_dependencies.sh
make

You will need to install nodejs. You can use apt for this

sudo apt install nodejs

You will need to add at least one of the following files from where Portal is installed to the folder resource/. You can add multiple languages if desired.

portal/resource/closecaption_english.txt
portal/resource/closecaption_<your desired language 1>.txt
portal/resource/closecaption_<your desired language 2>.txt

You then need to add the following files from where Portal is installed to the folder vpk. (see vpk/add_vpk_here.md for more details!)

portal/portal_pak_000.vpk  
portal/portal_pak_001.vpk  
portal/portal_pak_002.vpk  
portal/portal_pak_003.vpk  
portal/portal_pak_004.vpk  
portal/portal_pak_005.vpk  
portal/portal_pak_dir.vpk

hl2/hl2_sound_misc_000.vpk
hl2/hl2_sound_misc_001.vpk
hl2/hl2_sound_misc_002.vpk
hl2/hl2_sound_misc_dir.vpk

hl/hl2_misc_000.vpk
hl/hl2_misc_001.vpk
hl/hl2_misc_002.vpk
hl/hl2_misc_003.vpk
hl/hl2_misc_dir.vpk

Finally, run make to build the project.

# Clean out any previous build files
make clean

# Build (default english audio build)
make

# In case you have any trouble with ROM running on hardware try
# wine install required to run properly
sudo apt install wine
make fix

Alternatively, you can also build with different audio languages, like this:

make german_audio
make french_audio
make russian_audio
make spanish_audio

This requires additional *.vpk files:

  • German:
portal/portal_sound_vo_german_000.vpk
portal/portal_sound_vo_german_dir.vpk
  • French:
portal/portal_sound_vo_french_000.vpk
portal/portal_sound_vo_french_dir.vpk
  • Russian:
portal/portal_sound_vo_russian_000.vpk
portal/portal_sound_vo_russian_dir.vpk
  • Spanish:
portal/portal_sound_vo_spanish_000.vpk
portal/portal_sound_vo_spanish_dir.vpk

Build with Docker

Using the docker image the only setup step you need is to populating the vpk folder. After that you can build the docker image using

Build the Docker image.

make -f Makefile.docker image

Then build the rom using

make -f Makefile.docker

That will generate the rom at /build/portal64.z64


Current New Feature TODO List

  • polish up subtitles
  • more sound settings
  • rumble pak support
  • pausing while glados is speaking can end her speech early
  • add desk chairs and monitors
  • Add auto save checkpoints
  • Correct elevator timing

Current New Sounds TODO List

  • Box collision sounds
  • Ambient background loop
  • Unstationary scaffolding moving sound

Current Bug TODO List (Hardware Verified) (High->Low priority)

----------------------- v8

  • Two wall portals next to eachother can be used to clip any object out of any level by pushing it into corner, then dropping.
  • Passing into a ceiling portal can sometimes mess with the player rotation
  • various visual glitches when running NTSC on PAL console #65
  • various visual glitches when running PAL on NTSC console #65
  • player can clip through back of elevator by jumping and strafeing at the back corners while inside.