* Assemble through `gcc` instead of `as` directly, so source files are
preprocessed (i.e., `#include`)
* `gcc` does not pass `-I` include directories to `as`. This can
supposedly be fixed by recompiling `gcc` with `--with-gnu-as`. Popular
N64 toolchain binary distributions don't do this, and to lower the
barrier to entry I don't want to force users to have to compile their
own. Work around it by passing `-Wa,-I`.
* CMake only finds assembly dependencies when preprocessing, not when
assembling. Use `#include` instead of `.include` to work around this.
The `.incbin`s used by `sound_data.s` are covered by the
sound_data_tables target dependency.
* When building with CMake, dynamic model lists are now generated
* Factored common code out of generate_*_list.js files to deduplicate
* Better separated generated model lists from main game code
`dynamic_asset_data.c` and `dynamic_animated_asset_data.c`
previously #included the corresponding generated headers, and
`dynamic_asset_loader.c` declared externs for the contents.
This messiness was likely done so the generated code would be built
automatically (the Makefile globs all C files under `src/`).
Now, model list data is output to C source files which are built
explicitly. This, with some refactoring, allows the previously
mentioned source files and externs to be removed.
This is a bit hacky in the Makefile but will be automatic under
CMake by using target properties.
* Reorganized some files under `tools/`
Incidental changes along the way:
* Move `export_level.lua` to `tools/level_scripts/`
* Small reorganizations/fixes to existing `CMakeLists.txt` files
* Support passing absolute paths to level export
It is still necessary to special case extracting the raw WAV from the
video, but now conversion is handled using a .sox file just like the
other sounds.
This simplifies sound processing for the CMake transition.
To better organize generated files, portal_pak_modified/ will be used
for files generated by modifying portal_pak_dir/ contents.
Build/ will be for conversion to a final form needed for compilation,
without content modification.
* started on chamber 15
* fizzler width can now be scaled via blender object's scale.x
* fix fizzler rendering radius (remember, fizzlers are per default 2x2, still their internal width height was 1x1?)
* chamber 15 first room functionally complete
* chamber 15: first room decor
* finished first room of chamber 15
* test chamber 15 second room WIP
* chamber15 hallway from room 2 to room 3 (WIP) and more progress on room 2
* test chamber 15: added observation room to room2, added voice lines add the beginning
* test chamber 15: finishing room 2
* enable "new game" menu entry for chamber 15 & boot into the intro menu again instead of straight into chamber 15
* Start on shamber 15 hazard hallway
Hallway is modeled with collision. No platforms.
* Decals and platform + light cutouts for chamber 15 hazard hallway
* Animate one moving platform in chamber 15 hazard hallway
This one animation is ~19 KB. Look at optimizing.
* Add material for water hazard wall
* Use water hazard wall material in chamber 15
* Start modelling final room of chamber 15
* Chamber 15 final room - side rooms
* Chamber 15 final room - pistons and exit
* Chamber 15 final room - observation room
* Chamber 15 final room - ball launcher and catcher
* Chamber 15 final room - ball trap and indicator lights
* Chamber 15 final room - ball trap doors
* Chamber 15 final room - collision
* Chamber 15 final room - animations and triggers
* Chamber 15 - escape hatch
* Chamber 15 - finish final room
* Chamber 15 - start on room 3
* Chamber 15 - main room 3 layout and collision
* Fix UV translation
Do not translate minimum coordinates, otherwise the translation will be
cancelled out.
* Chamber 15 - room 3 stair room
* Chamber 15 - room 3 dividers and ball launcher/catcher
* Chamber 15 - room 3 finishing touches
* Observation room decor
* Triggers
* Indicator lights
* Decals
* Chamber 15 - merge beginning and end
* Chamber 15 - fix room boundaries
---------
Co-authored-by: Deconimus <pascal.sielski@gmx.de>
Co-authored-by: Deconimus <Deconimus@users.noreply.github.com>
Specifically:
* append all include search paths to LCINCS
* add LDDIRS to group all library search paths
* avoid link libm as math funtions are actually inside libultra
* use the shorthand -lc instead of -l:libc.a to link libc
Some textures cannot be used in their current form, and so they are
transformed at build time by Imagemagick commands (e.g., add shapes,
crop and merge different portions, etc.).
For a very small number of textures, making them usable takes more than
a few simple commands. For example, Chell's eyes and ears are detached
from her face in the texture image, and there are not enough polygons in
her model or pixels in an N64 texture to make a good UV map.
For these few complex textures, James worked around the problem by
checking in pre-edited images. This commit removes those images and
instead performs the necessary transformations at build time. As a result,
some textures are now slightly different (ball launcher/catcher, cube,
Chell). Chell's UV map is redone to accomodate this - for the better.
We use the 6102 boot code by default, but this can be changed (for
example, if flashing to a cartridge with a different CIC).
As with the microcode, the path cannot be easily passed to the
linker script and so the hard-coded name should not be specific to
particular boot code.
Environment variable N64_ROOT optionally sets the root directory of
the N64 toolchain.
To enable this to work with the linker script, the microcode object
files are now copied to the build directory before linking (since
there is no easy way to pass the path to the script dynamically).
An added benefit to this approach is that different microcode can
now be used easily if desired.
Link order matters when generating codesegment*.o. The old sort
order of CODEFILES was OS/file system dependent. Sort the file
paths to ensure consistent linking across environments.