Go to file
Weston Salinas b6f3e33a2f Changed How Fix Was Implemented
- save checkpoint is now at a few more places
- removed previous revision
- removed portalgun flag from being saved to a save file in player.c
  this was due to the fact that that information is already saved in
  checkpoints (I think?) and doesnt seem to serve a purpose
- the only downside (or maybe this is intended) is when a player
  loads from a checkpoint it only seems to load from the start of the
  blender file level (so if there are two levels in one blender file
  and the player clipped out or died in the second level then it would load
  back to the first level in that blender file)
2023-03-14 11:21:04 -05:00
asm Get -02 optimizations working 2022-06-27 21:41:33 -06:00
assets Finish up test chamber 06 2023-02-28 20:57:03 -07:00
skelatool64 Update setup instructions 2023-03-03 22:10:50 -07:00
src Changed How Fix Was Implemented 2023-03-14 11:21:04 -05:00
tools Finish up test chamber 06 2023-02-28 20:57:03 -07:00
vpk fix: Closed code block 2022-08-29 12:51:26 +01:00
.gitignore added an exception to the gitignore for the cimg zip that gits downloaded 2023-02-28 20:38:21 -06:00
Dockerfile Work on portal surface hole cutting 2022-06-26 18:57:00 -06:00
Makefile work on test chamber 06 2023-02-26 22:05:06 -07:00
portal.ld Work on portal gun pedestal 2022-08-04 12:58:10 -06:00
README.md Update setup instructions 2023-03-03 22:10:50 -07:00

Portal64

A demake of Portal for the Nintendo 64.

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.


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

Setup and build skelatool64

cd skelatool64
./setup_dependencies.sh
make

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

sudo apt install nodejs

You then need to add the following files from where Portal is installed to the folder vpk.

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

Finally, run make to build the project.


Build with Docker

Build the Docker image.

docker build . -t portal64

Then build.

# Set the environment variable
BLENDER_3_0=/blender/blender

# Build using docker
docker run \
    -v /home/james/Blender/blender-2.93.1-linux-x64:/blender \
    -e BLENDER_3_0 -v /home/james/portal/portal64/vpk:/usr/src/app/vpk \
    -t -v /home/james/portal/portal64/docker-output:/usr/src/app/build portal64

Where /home/james/Blender/blender-2.93.1-linux-x64 is the folder where Blender is located.

/home/james/portal/portal64/vpk is the folder where the portal *.vpk files are located.

/home/james/portal/portal64/docker-output is where you want the output of the build to locate portal.z64 will be put into this folder.


Current TODO list

  • force placing auto portals when there is a conflict
  • fix chell animation problem (fixed itself, investigate)
  • rotate auto uv
  • disable portal surfaces manually on some surfaces
  • Portal not rending recursively sometimes
  • Passing into a ceiling portal can sometimes mess with the player rotation
  • Correct elevator timing
  • Elevator and door sounds
  • Presort portal gun polygon order
  • Signage should not always be on
  • Camera shake
  • [?] Skips audio sometimes
  • sound effects for ball (portal_pak_dir/scripts/npc_sounds_energy_ball.txt)
  • first portal wall
  • the cube bounces the player
  • break constraint after large distance
  • prevent objects from pushing the player around
  • Stop looping sounds betwen levels
  • red light district
  • burn marks
  • close portal in elevator
  • keep stationary portal with fizzle grids
  • add more fizzle grids
  • checkpoint in elevator
  • preserve gun between test chambers
  • Finish up animation pieces (collider/portable surface/culling logic)
  • Implement pedestal button
  • Create piston animaiton test
  • Refactor physics to allow swept collision between two dynamic objects
  • Move constaints to be applied right before contact solving