GithubHelp home page GithubHelp logo

hackern64 / hackersm64 Goto Github PK

View Code? Open in Web Editor NEW
327.0 17.0 145.0 52.12 MB

A Super Mario 64 decompilation repo based on CrashOveride95/ultrasm64 that aims to provide a flexible, easy-to-use base for creating romhacks.

Dockerfile 0.01% Makefile 0.08% C 97.20% Assembly 0.45% Python 0.22% Shell 0.01% C++ 2.04% Perl 0.01%

hackersm64's Issues

Chain chomp can unload if CHAIN_CHOMP_NUM_SEGMENTS is set too high

To replicate:

  • set segments to 10 or above
  • bait chain chomp towards bridge
  • run towards bomb-clip bobomb and keep looking at chain chomp until it disappears
  • approach chain chomp: it should be unloaded

Solution:
Source of issue needs to be found, but one idea is to modulate some unloading distance with chain chomp head width + (CHAIN_CHOMP_NUM_SEGMENTS * segment width)

Title screen demo crash

When the KEEP_MARIO_HEAD config option is enabled, the demo sequences will play through one by one like in the original game until it reaches the 6th (index 5, Hazy Maze Cave in the original US version) demo, where it hard crashes on Mupen64Plus/ParaLLEl64 with the error MTC0 instruction writing Index register with TLB index > 31. It works as intended on Project64 and doesn't throw an error; however, I'm unaware whether it also occurs on console or not as I don't have the equipment to properly test it.

==== Build Options ====
Version:        us
Microcode:      f3dzex
Console:        n64
Target:         sm64.us
Compare ROM:    no
Build Matching: no
=======================

[QoL] Config Documentation

These would be good to label for repo accessibility! Should this be in 2.0?

  • START_LEVEL has no safeguard, if undefined it wont compile

  • START_LEVEL should have a comment explaining how to get it to work in other levels

  • EXIT_COURSE_LEVEL should have a comment explaining how to get it to work in other levels

  • DEFAULT_NUM_LIVES should have a comment for the max number of lives (s8)

JRB Eel Star

The eel in JRB Star 2 reportedly does not seem to spawn the star if you come into contact with the star on its tail

Investigate recompiling libultra from ultralib

The n32 ABI is more efficient as it allows the use of 8 registers for passing arguments to functions instead of just 4. It also allows using the native 64 bit operations that the N64 supports. Compiling libultra under a modern compiler instead of a 25 year old one might also net some performance gain as well.

This task will be a very large undertaking and may not yield a large enough performance boost to warrant that amount of work, so it's not high priority.

Star Collect Momentum

Ground pounding into a star does not change Mario's velocity downward like in vanilla. This is mostly just unsatisfying, but can look jank at times. Likely related to poor implementation of GROUND_POUND_WALL_FIX.

[Bug] Water surfaces facing downwards are ignored

This is a new bug on a new feature, the old implementation of water surfaces prevented downwards facing water surfaces whatsoever.


Here's how water surface types were used before:

While loading surfaces:

  • Check if surface->normal.y > 0.01f (a floor)
  • If surface is water, add to water list instead of floor list
  • Downwards or sideways facing water surfs were added to ceil/wall lists respectively

While checking ceil/wall collision

  • If surf->type is water surface then ignore

The feature/fix:

While loading:

  • If surface is water type, add to water list
  • That's it lol

This allowed me to get rid of the water surface checks in walls/ceils!
The issue is that water ceils in the water list are still being ignored even with the new change.

I believe that this is important for usability, like consider a floating water cube - typically a cube like that would have all of its faces facing outwards, including the bottom one. In the past implementation, the user would have to flip the normals of only the bottom face, making for awkward geo, and it would be confusing/difficult to figure out that that's needed. It should be allowed from any direction.

Thoughts on it being a v2.0 bug?

Global variable increments

There are many instances of game code incrementing or otherwise changing global variables by one value at a time. This is most common with gDisplayListHead getting incremented in gbi macros. These cause the compiler to generate a lot of unnecessary loads and stores, which hurt performance and potentially even hurt memory bandwidth. These should be changed to copying the global into a local, working on the local, and then overwriting the global with the local's value at the end of the function.

Considerable lag when displaying dialog

On console, the game chugs during a few specific spots in the baby penguin mission in CCM. Talking to the mother drops the game to around 25 FPS. The star dance cutscene also has lag for some reason, dropping to around 27 FPS and delaying the "HERE WE GO!" voice clip past when it should play in the song.

Z-fighting on doors with AUTO_LOD enabled

AUTO_LOD forces GEO_RENDER_RANGE to always read camera distance as 50. For doors this causes z-fighting issues, since doors rely on GEO_RENDER_RANGE to switch decal mode for their labels (star numbers & locks) on/off.

Certain transparent objects render behind env boxes.

Mostly due to env boxes usually being on LAYER_TRANSPARENT_INTER.

Most noticeable on:

Trees which are close to the cutout/transparency switch threshold:
image

The flames in the castle basement:
image

Burn smoke in the LLL volcano:
image

This is technically a vanilla bug, but it is much more noticeable in HackerSM64 due to the proximity transparency, burn smoke fix, and camera angles that couldn't easily be achieved in vanilla.

Floating Point Crash

A crash occurs on console when messing around Castle Grounds. Seems to have been addressed in math utils already; just need it approved.

Fix still unknown.

HMC Crash

Loading into HMC via debug level select causes a crash in HANDLE_DP_COMPLETE, where sCurrentDisplaySPTask is NULL.
The intro demo HMC section also freezes, but with no crash screen.

There are several "half-fixes", such as null checking sCurrentDisplaySPTask, or increasing the number in alloc_display_list in geo_process_background from 7 to 8, and a few others. However, these "half-fixes" cause major flickering after entering another level after HMC, and cause HMC's starting screen transition to be delayed for 1 or 2 frames:

Frame 1

Frame 2

It may potentially be caused by there being too many objects on screen on frame 1, before the level geometry itself loads.

The crash also does not happen if the camera starts at a different angle than normal.

Removing some macro objects or increasing GFX_POOL_SIZE fixes it without the flickering issues, but it would be better to fix the underlying problem.

Ensure README accuracy

The whole readme should be re-evaluated before this release. Correct incorrect statements, and perhaps an upgrade guide to v2.0?

This line in particular is incorrect and should be updated/clarified.

  • Coordinate overflow fix by falcobuster. Your levels will render correctly on console and LLE emulators even when using 2x or 4x bounds, while not hurting anything on HLE plugins. This is automatic now, you don't have to set WORLD_SCALE manually.

Ukiki falls through the star cage

When doing the mystery of the monkey cage star, instead of stomping on the top of the cage, ukiki fell straight through. The star was still able to spawn however.

BitDW Yellow Moving Platform

Attempting to jump on this platform will cause Mario to completely phase through it, often resulting in a crash. It's possible that this issue applies to more than just this platform, though most moving platforms I've seen appear fine.

Coin Score prints incorrectly

When you get > 99 coins in a stage, the coin score (in seemingly all places where the score can be viewed) will incorrectly print as 0XX instead of 1XX

eg. collecting 104 coins will be shown as 004

dist_between_objects

So after alot of testing it seems like Koopa The Quick and Big Penguin Races cause crashes on Console aswell as Emulators (Project 64, Paralell 64 & Mupen64Plus Next)

It only happens when adding modifying those Trajectories i only have tested those cases tho dont know about Metal Balls and other Trajectories of that sort also it happens both in Debug and Normal Mode (aka when debug mode is disabled)

Here are also some Screenschots of the Crash Screen:
image
image

it seems to be because obj1 and/or obj2 is NULL

Optimize surface collision checks and `break` when upperY/lowerY is out of bounds

Right now collision checks will continue after finding a floor or ceil to be very certain that a another tri shouldn't have been hit instead.

In find_floor_from_list, it seems that having if (floor && surf->upperY < floor->lowerY) break; at the top of the loop could improve performance. This is a good check because it insures that you have found a floor, and that the current floors highest point is lower than the previously collided floor's lowest point. And because of sort order, there's no reason to continue checking after this point.

The same but reversed could be done for ceilings.

Billboarded geo issues

There seems to be some issues regarding manually billboarded geo, either not showing up or being warped

One of these may be the cause of a odd grey plane:
image

These two billboards aren't visible at all:
image
image

Debug level select freezes on the 6th time entering a level on RetroArch

When debug level select is enabled, entering 6 levels in one game session (they can be different levels or the same levels) freezes on the 6th level with no crash screen. The first 5 levels load normally. This happens RetroArch but not PJ64. Entering a level via painting does not count toward the 6 levels.

Pyramid Visibility

The top of the pyramid in SSL is not visible unless you are very close to it. This is hopefully just an issue with the pyramid object itself, but it could be indicative of an issue related to global render distance for objects.

JRB Ship Camera

JRB Ship interior camera roll goes absolutely ham like gmod ragdoll when you make the ship rise. Tested with Puppycamera, untested with vanilla cam.

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.