tr2: release 1.0
Some checks failed
Publish a pre-release / TR1 (Linux) (push) Waiting to run
Publish a pre-release / TR1 (Windows) (push) Waiting to run
Publish a pre-release / TR1 (Mac) (push) Waiting to run
Publish a pre-release / TR2 (Linux) (push) Waiting to run
Publish a pre-release / TR2 (Windows) (push) Waiting to run
Publish a pre-release / TR2 (Mac) (push) Waiting to run
Publish a pre-release / Create a prerelease (push) Blocked by required conditions
Run code linters / Run code linters (push) Has been cancelled
23
.github/workflows/job_build_tr1.yml
vendored
|
@ -3,6 +3,10 @@ name: Build TR1X and the installer
|
|||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
platform:
|
||||
type: string
|
||||
description: "Platform to build for"
|
||||
required: true
|
||||
target:
|
||||
type: string
|
||||
description: "Target to build for"
|
||||
|
@ -12,15 +16,6 @@ jobs:
|
|||
build:
|
||||
name: Build release assets
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
include:
|
||||
- platform: linux
|
||||
just_target: tr1-package-linux ${{ inputs.target }}
|
||||
- platform: win
|
||||
just_target: tr1-package-win-all ${{ inputs.target }}
|
||||
- platform: win-installer
|
||||
just_target: tr1-package-win-installer ${{ inputs.target }}
|
||||
|
||||
steps:
|
||||
- name: Install dependencies
|
||||
|
@ -37,13 +32,17 @@ jobs:
|
|||
name: Prepare variables
|
||||
run: echo "version=$(just output-current-version 1)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Package asset (${{ matrix.platform }})
|
||||
run: just ${{ matrix.just_target }}
|
||||
- name: Download large assets
|
||||
if: ${{ inputs.target == 'release' }}
|
||||
run: just download-assets 1
|
||||
|
||||
- name: Package asset (${{ inputs.platform }})
|
||||
run: just tr1-package-${{ inputs.platform }} ${{ inputs.target }}
|
||||
|
||||
- name: Upload the artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: TR1X-${{ steps.vars.outputs.version }}-${{ matrix.platform }}
|
||||
name: TR1X-${{ steps.vars.outputs.version }}-${{ inputs.platform }}
|
||||
path: |
|
||||
*.zip
|
||||
*.exe
|
||||
|
|
23
.github/workflows/job_build_tr2.yml
vendored
|
@ -3,6 +3,10 @@ name: Build TR2X and the installer
|
|||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
platform:
|
||||
type: string
|
||||
description: "Platform to build for"
|
||||
required: true
|
||||
target:
|
||||
type: string
|
||||
description: "Target to build for"
|
||||
|
@ -12,15 +16,6 @@ jobs:
|
|||
build:
|
||||
name: Build release assets
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
include:
|
||||
- platform: linux
|
||||
just_target: tr2-package-linux ${{ inputs.target }}
|
||||
- platform: win
|
||||
just_target: tr2-package-win-all ${{ inputs.target }}
|
||||
- platform: win-installer
|
||||
just_target: tr2-package-win-installer ${{ inputs.target }}
|
||||
|
||||
steps:
|
||||
- name: Install dependencies
|
||||
|
@ -37,13 +32,17 @@ jobs:
|
|||
name: Prepare variables
|
||||
run: echo "version=$(just output-current-version 2)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Package asset (${{ matrix.platform }})
|
||||
run: just ${{ matrix.just_target }}
|
||||
- name: Download large assets
|
||||
if: ${{ inputs.target == 'release' }}
|
||||
run: just download-assets 2
|
||||
|
||||
- name: Package asset (${{ inputs.platform }})
|
||||
run: just tr2-package-${{ inputs.platform }} ${{ inputs.target }}
|
||||
|
||||
- name: Upload the artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: TR2X-${{ steps.vars.outputs.version }}-${{ matrix.platform }}
|
||||
name: TR2X-${{ steps.vars.outputs.version }}-${{ inputs.platform }}
|
||||
path: |
|
||||
*.zip
|
||||
*.exe
|
||||
|
|
38
.github/workflows/pr_builds.yml
vendored
|
@ -11,34 +11,52 @@ on:
|
|||
- '!develop'
|
||||
|
||||
jobs:
|
||||
package_tr1_multiplatform:
|
||||
name: Build TR1
|
||||
package_tr1_linux:
|
||||
name: TR1 (Linux)
|
||||
uses: ./.github/workflows/job_build_tr1.yml
|
||||
with:
|
||||
target: 'debug'
|
||||
platform: linux
|
||||
target: debug
|
||||
secrets: inherit
|
||||
|
||||
package_tr1_win:
|
||||
name: TR1 (Windows)
|
||||
uses: ./.github/workflows/job_build_tr1.yml
|
||||
with:
|
||||
platform: win-all
|
||||
target: debug
|
||||
secrets: inherit
|
||||
|
||||
package_tr1_mac:
|
||||
name: Build TR1
|
||||
name: TR1 (Mac)
|
||||
if: vars.MACOS_ENABLE == 'true'
|
||||
uses: ./.github/workflows/job_build_tr1_macos.yml
|
||||
with:
|
||||
target: 'debug'
|
||||
target: debug
|
||||
let_mac_fail: true
|
||||
secrets: inherit
|
||||
|
||||
package_tr2_multiplatform:
|
||||
name: Build TR2
|
||||
package_tr2_linux:
|
||||
name: TR2 (Linux)
|
||||
uses: ./.github/workflows/job_build_tr2.yml
|
||||
with:
|
||||
target: 'debug'
|
||||
platform: linux
|
||||
target: debug
|
||||
secrets: inherit
|
||||
|
||||
package_tr2_win:
|
||||
name: TR2 (Windows)
|
||||
uses: ./.github/workflows/job_build_tr2.yml
|
||||
with:
|
||||
platform: win-all
|
||||
target: debug
|
||||
secrets: inherit
|
||||
|
||||
package_tr2_mac:
|
||||
name: Build TR2
|
||||
name: TR2 (Mac)
|
||||
if: vars.MACOS_ENABLE == 'true'
|
||||
uses: ./.github/workflows/job_build_tr2_macos.yml
|
||||
with:
|
||||
target: 'debug'
|
||||
target: debug
|
||||
let_mac_fail: true
|
||||
secrets: inherit
|
||||
|
|
44
.github/workflows/prerelease.yml
vendored
|
@ -9,16 +9,24 @@ on:
|
|||
- develop
|
||||
|
||||
jobs:
|
||||
package_tr1_multiplatform:
|
||||
name: Build TR1
|
||||
if: vars.PRERELEASE_ENABLE == 'true'
|
||||
package_tr1_linux:
|
||||
name: TR1 (Linux)
|
||||
uses: ./.github/workflows/job_build_tr1.yml
|
||||
with:
|
||||
target: 'debug'
|
||||
platform: linux
|
||||
target: debug
|
||||
secrets: inherit
|
||||
|
||||
package_tr1_win:
|
||||
name: TR1 (Windows)
|
||||
uses: ./.github/workflows/job_build_tr1.yml
|
||||
with:
|
||||
platform: win-all
|
||||
target: debug
|
||||
secrets: inherit
|
||||
|
||||
package_tr1_mac:
|
||||
name: Build TR1
|
||||
name: TR1 (Mac)
|
||||
if: |
|
||||
vars.PRERELEASE_ENABLE == 'true' &&
|
||||
vars.MACOS_ENABLE == 'true'
|
||||
|
@ -28,16 +36,24 @@ jobs:
|
|||
let_mac_fail: true
|
||||
secrets: inherit
|
||||
|
||||
package_tr2_multiplatform:
|
||||
name: Build TR2
|
||||
if: vars.PRERELEASE_ENABLE == 'true'
|
||||
package_tr2_linux:
|
||||
name: TR2 (Linux)
|
||||
uses: ./.github/workflows/job_build_tr2.yml
|
||||
with:
|
||||
target: 'debug'
|
||||
platform: linux
|
||||
target: debug
|
||||
secrets: inherit
|
||||
|
||||
package_tr2_win:
|
||||
name: TR2 (Windows)
|
||||
uses: ./.github/workflows/job_build_tr2.yml
|
||||
with:
|
||||
platform: win-all
|
||||
target: debug
|
||||
secrets: inherit
|
||||
|
||||
package_tr2_mac:
|
||||
name: Build TR2
|
||||
name: TR2 (Mac)
|
||||
if: |
|
||||
vars.PRERELEASE_ENABLE == 'true' &&
|
||||
vars.MACOS_ENABLE == 'true'
|
||||
|
@ -48,12 +64,14 @@ jobs:
|
|||
secrets: inherit
|
||||
|
||||
publish_prerelease:
|
||||
if: vars.PRERELEASE_ENABLE == 'true'
|
||||
if: always() && (vars.PRERELEASE_ENABLE == 'true')
|
||||
name: Create a prerelease
|
||||
needs:
|
||||
- package_tr1_multiplatform
|
||||
- package_tr1_linux
|
||||
- package_tr1_win
|
||||
- package_tr1_mac
|
||||
- package_tr2_multiplatform
|
||||
- package_tr2_linux
|
||||
- package_tr2_win
|
||||
- package_tr2_mac
|
||||
with:
|
||||
draft: false
|
||||
|
|
35
.github/workflows/release_tr1.yml
vendored
|
@ -28,30 +28,51 @@ on:
|
|||
default: github.ref_name
|
||||
|
||||
jobs:
|
||||
package_multiplatform:
|
||||
name: Build release assets
|
||||
package_tr1_linux:
|
||||
name: Build TR1 (Linux)
|
||||
if: vars.RELEASE_ENABLE == 'true'
|
||||
uses: ./.github/workflows/job_build_tr1.yml
|
||||
with:
|
||||
target: "release"
|
||||
platform: linux
|
||||
target: release
|
||||
secrets: inherit
|
||||
|
||||
package_tr1_win:
|
||||
name: Build TR1 (Windows)
|
||||
if: vars.RELEASE_ENABLE == 'true'
|
||||
uses: ./.github/workflows/job_build_tr1.yml
|
||||
with:
|
||||
platform: win-all
|
||||
target: release
|
||||
secrets: inherit
|
||||
|
||||
package_tr1_win_installer:
|
||||
name: Build TR1 (Windows installer)
|
||||
if: vars.RELEASE_ENABLE == 'true'
|
||||
uses: ./.github/workflows/job_build_tr1.yml
|
||||
with:
|
||||
platform: win-installer
|
||||
target: release
|
||||
secrets: inherit
|
||||
|
||||
package_mac:
|
||||
name: "Build release assets (mac)"
|
||||
name: Build TR1 (Mac)
|
||||
if: |
|
||||
vars.RELEASE_ENABLE == 'true' &&
|
||||
vars.MACOS_ENABLE == 'true'
|
||||
uses: ./.github/workflows/job_build_tr1_macos.yml
|
||||
with:
|
||||
target: "release"
|
||||
target: release
|
||||
let_mac_fail: ${{ inputs.let_mac_fail == true || inputs.let_mac_fail == 'true' }}
|
||||
secrets: inherit
|
||||
|
||||
publish_release:
|
||||
if: vars.RELEASE_ENABLE == 'true'
|
||||
if: always() && (vars.RELEASE_ENABLE == 'true')
|
||||
name: Create a GitHub release
|
||||
needs:
|
||||
- package_multiplatform
|
||||
- package_tr1_linux
|
||||
- package_tr1_win
|
||||
- package_tr1_win_installer
|
||||
- package_mac
|
||||
with:
|
||||
draft: ${{ inputs.draft || false }}
|
||||
|
|
36
.github/workflows/release_tr2.yml
vendored
|
@ -28,30 +28,52 @@ on:
|
|||
default: github.ref_name
|
||||
|
||||
jobs:
|
||||
package_multiplatform:
|
||||
name: Build release assets
|
||||
package_tr2_linux:
|
||||
name: Build TR2 (Linux)
|
||||
if: vars.RELEASE_ENABLE == 'true'
|
||||
uses: ./.github/workflows/job_build_tr2.yml
|
||||
with:
|
||||
target: "release"
|
||||
platform: linux
|
||||
target: release
|
||||
secrets: inherit
|
||||
|
||||
package_tr2_win:
|
||||
name: Build TR2 (Windows)
|
||||
if: vars.RELEASE_ENABLE == 'true'
|
||||
uses: ./.github/workflows/job_build_tr2.yml
|
||||
with:
|
||||
platform: win-all
|
||||
target: release
|
||||
secrets: inherit
|
||||
|
||||
package_tr2_win_installer:
|
||||
name: Build TR2 (Windows installer)
|
||||
if: vars.RELEASE_ENABLE == 'true'
|
||||
uses: ./.github/workflows/job_build_tr2.yml
|
||||
with:
|
||||
platform: win-installer
|
||||
target: release
|
||||
secrets: inherit
|
||||
|
||||
package_mac:
|
||||
name: "Build release assets (mac)"
|
||||
name: Build TR2 (Mac)
|
||||
if: |
|
||||
vars.RELEASE_ENABLE == 'true' &&
|
||||
vars.MACOS_ENABLE == 'true'
|
||||
uses: ./.github/workflows/job_build_tr2_macos.yml
|
||||
with:
|
||||
target: "release"
|
||||
target: release
|
||||
let_mac_fail: ${{ inputs.let_mac_fail == true || inputs.let_mac_fail == 'true' }}
|
||||
secrets: inherit
|
||||
|
||||
publish_release:
|
||||
if: vars.RELEASE_ENABLE == 'true'
|
||||
if: always() && (vars.RELEASE_ENABLE == 'true')
|
||||
name: Create a GitHub release
|
||||
needs:
|
||||
- package_multiplatform
|
||||
- package_tr2_linux
|
||||
- package_tr2_win
|
||||
- package_tr2_win_installer
|
||||
- package_mac
|
||||
with:
|
||||
draft: ${{ inputs.draft || false }}
|
||||
prerelease: ${{ inputs.draft || false }}
|
||||
|
|
4
.gitignore
vendored
|
@ -35,3 +35,7 @@ Release/
|
|||
**/subprojects/dwarfstack-*/
|
||||
src/tr1/subprojects/dwarfstack.wrap
|
||||
src/tr2/subprojects/dwarfstack.wrap
|
||||
|
||||
data/tr1/ship/data/images/
|
||||
data/tr2/ship/data/images/
|
||||
data/tr2/ship/music/
|
||||
|
|
|
@ -123,3 +123,9 @@ Please refer to the [detailed documentation](docs/tr2/).
|
|||
further refined our identity by adopting the name TR1X. Meanwhile, TR2Main
|
||||
follows a completely separate and unique path, unconnected to our
|
||||
development work.
|
||||
|
||||
## Credits
|
||||
|
||||
- Endless GitHub contributors.
|
||||
- TR1 title screen image by Kidd Bowyer. HD assets by goblan and posix.
|
||||
- TR2 HD images by Arsunt.
|
||||
|
|
Before Width: | Height: | Size: 2 MiB |
Before Width: | Height: | Size: 2.2 MiB |
Before Width: | Height: | Size: 2.3 MiB |
Before Width: | Height: | Size: 1.8 MiB |
Before Width: | Height: | Size: 1.7 MiB |
Before Width: | Height: | Size: 305 KiB |
Before Width: | Height: | Size: 2.2 MiB |
Before Width: | Height: | Size: 2.6 MiB |
Before Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 413 KiB |
Before Width: | Height: | Size: 2.6 MiB |
Before Width: | Height: | Size: 2.1 MiB |
Before Width: | Height: | Size: 2.7 MiB |
Before Width: | Height: | Size: 2.1 MiB |
Before Width: | Height: | Size: 2.6 MiB |
Before Width: | Height: | Size: 2.3 MiB |
Before Width: | Height: | Size: 1.9 MiB |
Before Width: | Height: | Size: 1.3 MiB |
Before Width: | Height: | Size: 7.9 KiB |
Before Width: | Height: | Size: 7.9 KiB |
1929
data/tr1/logo.ai
BIN
data/tr1/logo.png
Normal file
After Width: | Height: | Size: 273 KiB |
|
@ -8,12 +8,10 @@
|
|||
"savegame_fmt_legacy": "saveati.%d",
|
||||
"savegame_fmt_bson": "save_tr1_%02d.dat",
|
||||
"demo_delay": 16,
|
||||
"water_color": [0.45, 1.0, 1.0],
|
||||
"draw_distance_fade": 22.0,
|
||||
"draw_distance_max": 30.0,
|
||||
"injections": [
|
||||
"data/injections/backpack.bin",
|
||||
"data/injections/braid.bin",
|
||||
"data/injections/bubbles.bin",
|
||||
"data/injections/lara_animations.bin",
|
||||
"data/injections/purple_crystal.bin",
|
||||
"data/injections/uzi_sfx.bin",
|
||||
|
@ -30,7 +28,7 @@
|
|||
"music_track": 2,
|
||||
"inherit_injections": false,
|
||||
"sequence": [
|
||||
{"type": "display_picture", "path": "data/images/eidos.webp", "display_time": 1, "fade_in_time": 1.0, "fade_out_time": 1.0},
|
||||
{"type": "display_picture", "path": "data/images/eidos.webp", "legal": true, "display_time": 1, "fade_in_time": 1.0, "fade_out_time": 1.0},
|
||||
{"type": "play_fmv", "fmv_id": 0},
|
||||
{"type": "play_fmv", "fmv_id": 1},
|
||||
{"type": "play_fmv", "fmv_id": 2},
|
||||
|
@ -59,6 +57,7 @@
|
|||
"injections": [
|
||||
"data/injections/lara_gym_guns.bin",
|
||||
"data/injections/braid.bin",
|
||||
"data/injections/bubbles.bin",
|
||||
"data/injections/gym_textures.bin",
|
||||
"data/injections/lara_animations.bin",
|
||||
"data/injections/uzi_sfx.bin",
|
||||
|
@ -151,6 +150,7 @@
|
|||
"injections": [
|
||||
"data/injections/folly_fd.bin",
|
||||
"data/injections/folly_itemrots.bin",
|
||||
"data/injections/folly_pickup_meshes.bin",
|
||||
"data/injections/folly_textures.bin",
|
||||
],
|
||||
},
|
||||
|
@ -246,6 +246,7 @@
|
|||
"data/injections/khamoon_fd.bin",
|
||||
"data/injections/khamoon_mummy.bin",
|
||||
"data/injections/khamoon_textures.bin",
|
||||
"data/injections/panther_sfx.bin",
|
||||
],
|
||||
},
|
||||
|
||||
|
@ -265,6 +266,7 @@
|
|||
"data/injections/obelisk_meshfixes.bin",
|
||||
"data/injections/obelisk_skybox.bin",
|
||||
"data/injections/obelisk_textures.bin",
|
||||
"data/injections/panther_sfx.bin",
|
||||
],
|
||||
},
|
||||
|
||||
|
@ -306,6 +308,7 @@
|
|||
"data/injections/mines_meshfixes.bin",
|
||||
"data/injections/mines_pushblocks.bin",
|
||||
"data/injections/mines_textures.bin",
|
||||
"data/injections/skate_kid_sfx.bin",
|
||||
],
|
||||
"item_drops": [
|
||||
{"enemy_num": 17, "object_ids": [86]},
|
||||
|
@ -481,8 +484,8 @@
|
|||
{
|
||||
"path": "data/cut4.phd",
|
||||
"music_track": 22,
|
||||
"draw_distance_fade": 12.0,
|
||||
"draw_distance_max": 18.0,
|
||||
"fog_start": 12.0,
|
||||
"fog_end": 18.0,
|
||||
"lara_type": "player_1",
|
||||
"inherit_injections": false,
|
||||
"injections": [
|
||||
|
@ -503,8 +506,8 @@
|
|||
|
||||
// FMVs
|
||||
"fmvs": [
|
||||
{"path": "fmv/core.avi"},
|
||||
{"path": "fmv/escape.avi"},
|
||||
{"path": "fmv/core.avi", "legal": true},
|
||||
{"path": "fmv/escape.avi", "legal": true},
|
||||
{"path": "fmv/cafe.avi"},
|
||||
{"path": "fmv/mansion.avi"},
|
||||
{"path": "fmv/snow.avi"},
|
||||
|
|
|
@ -9,12 +9,10 @@
|
|||
"savegame_fmt_legacy": "save_demo_pc.%d",
|
||||
"savegame_fmt_bson": "save_demo_pc_%02d.dat",
|
||||
"demo_delay": 16,
|
||||
"water_color": [0.45, 1.0, 1.0],
|
||||
"draw_distance_fade": 22.0,
|
||||
"draw_distance_max": 30.0,
|
||||
"injections": [
|
||||
"data/injections/backpack.bin",
|
||||
"data/injections/braid.bin",
|
||||
"data/injections/bubbles.bin",
|
||||
"data/injections/lara_animations.bin",
|
||||
"data/injections/lara_jumping.bin",
|
||||
"data/injections/uzi_sfx.bin",
|
||||
|
|
|
@ -5,12 +5,10 @@
|
|||
"savegame_fmt_legacy": "save_tmp.%d",
|
||||
"savegame_fmt_bson": "save_tmp_%02d.dat",
|
||||
"demo_delay": 0,
|
||||
"water_color": [0.45, 1.0, 1.0],
|
||||
"draw_distance_fade": 22.0,
|
||||
"draw_distance_max": 30.0,
|
||||
"injections": [
|
||||
"data/injections/backpack.bin",
|
||||
"data/injections/braid.bin",
|
||||
"data/injections/bubbles.bin",
|
||||
"data/injections/lara_animations.bin",
|
||||
"data/injections/lara_jumping.bin",
|
||||
"data/injections/uzi_sfx.bin",
|
||||
|
|
|
@ -8,12 +8,10 @@
|
|||
"savegame_fmt_legacy": "saveuba.%d",
|
||||
"savegame_fmt_bson": "save_trub_%02d.dat",
|
||||
"demo_delay": 16,
|
||||
"water_color": [0.45, 1.0, 1.0],
|
||||
"draw_distance_fade": 22,
|
||||
"draw_distance_max": 30,
|
||||
"injections": [
|
||||
"data/injections/backpack.bin",
|
||||
"data/injections/braid.bin",
|
||||
"data/injections/bubbles.bin",
|
||||
"data/injections/lara_animations.bin",
|
||||
"data/injections/uzi_sfx.bin",
|
||||
"data/injections/explosion.bin",
|
||||
|
@ -36,7 +34,7 @@
|
|||
"data/injections/pda_model.bin",
|
||||
],
|
||||
"sequence": [
|
||||
{"type": "display_picture", "path": "data/images/eidos.webp", "display_time": 1, "fade_in_time": 1.0, "fade_out_time": 1.0},
|
||||
{"type": "display_picture", "path": "data/images/eidos.webp", "legal": true, "display_time": 1, "fade_in_time": 1.0, "fade_out_time": 1.0},
|
||||
{"type": "play_fmv", "fmv_id": 0},
|
||||
{"type": "play_fmv", "fmv_id": 1},
|
||||
{"type": "exit_to_title"},
|
||||
|
@ -44,7 +42,7 @@
|
|||
},
|
||||
|
||||
"levels": [
|
||||
// Level 0: Return to Egypt
|
||||
// Level 1: Return to Egypt
|
||||
{
|
||||
"path": "data/egypt.phd",
|
||||
"music_track": 59,
|
||||
|
@ -58,11 +56,12 @@
|
|||
"data/injections/egypt_fd.bin",
|
||||
"data/injections/egypt_meshfixes.bin",
|
||||
"data/injections/egypt_textures.bin",
|
||||
"data/injections/panther_sfx.bin",
|
||||
],
|
||||
"unobtainable_kills": 1,
|
||||
},
|
||||
|
||||
// Level 1: Temple of the Cat
|
||||
// Level 2: Temple of the Cat
|
||||
{
|
||||
"path": "data/cat.phd",
|
||||
"music_track": 59,
|
||||
|
@ -77,11 +76,12 @@
|
|||
"data/injections/cat_itemrots.bin",
|
||||
"data/injections/cat_meshfixes.bin",
|
||||
"data/injections/cat_textures.bin",
|
||||
"data/injections/panther_sfx.bin",
|
||||
],
|
||||
"unobtainable_pickups": 1,
|
||||
},
|
||||
|
||||
// Level 2: Atlantean Stronghold
|
||||
// Level 3: Atlantean Stronghold
|
||||
{
|
||||
"path": "data/end.phd",
|
||||
"music_track": 60,
|
||||
|
@ -98,7 +98,7 @@
|
|||
"unobtainable_kills": 1,
|
||||
},
|
||||
|
||||
// Level 3: The Hive
|
||||
// Level 4: The Hive
|
||||
{
|
||||
"path": "data/end2.phd",
|
||||
"music_track": 60,
|
||||
|
@ -123,7 +123,8 @@
|
|||
|
||||
{"type": "dummy"},
|
||||
|
||||
// Level 5: Current Position
|
||||
// Level 6: Current Position
|
||||
// This level is necessary to read TombATI's save files.
|
||||
{
|
||||
"path": "data/current.phd",
|
||||
"type": "current",
|
||||
|
@ -134,7 +135,7 @@
|
|||
],
|
||||
|
||||
"fmvs": [
|
||||
{"path": "fmv/core.avi"},
|
||||
{"path": "fmv/escape.avi"},
|
||||
{"path": "fmv/core.avi", "legal": true},
|
||||
{"path": "fmv/escape.avi", "legal": true},
|
||||
],
|
||||
}
|
||||
|
|
|
@ -271,7 +271,7 @@
|
|||
"door_8": {"name": "Door 8"},
|
||||
"trapdoor_1": {"name": "Trapdoor 1"},
|
||||
"trapdoor_2": {"name": "Trapdoor 2"},
|
||||
"big_trapdoor": {"name": "Big Trapdoor"},
|
||||
"trapdoor_3": {"name": "Trapdoor 3"},
|
||||
"bridge_flat": {"name": "Bridge Flat"},
|
||||
"bridge_tilt_1": {"name": "Bridge Tilt 1"},
|
||||
"bridge_tilt_2": {"name": "Bridge Tilt 2"},
|
||||
|
@ -341,35 +341,39 @@
|
|||
},
|
||||
|
||||
"game_strings": {
|
||||
"CONTROL_BACKEND_CONTROLLER": "Controller",
|
||||
"CONTROL_BACKEND_KEYBOARD": "Keyboard",
|
||||
"CONTROL_CUSTOMIZE": "Customize Controls",
|
||||
"CONTROL_CUSTOM_1": "User Keys 1",
|
||||
"CONTROL_CUSTOM_2": "User Keys 2",
|
||||
"CONTROL_CUSTOM_3": "User Keys 3",
|
||||
"CONTROL_DEFAULT_KEYS": "Default Keys",
|
||||
"CONTROL_RESET_DEFAULTS": "Reset All: Hold %s",
|
||||
"CONTROL_UNBIND": "Unbind: Hold %s",
|
||||
"CONTROLS_BACKEND_CONTROLLER": "Controller",
|
||||
"CONTROLS_BACKEND_KEYBOARD": "Keyboard",
|
||||
"CONTROLS_CUSTOMIZE": "Customize Controls",
|
||||
"CONTROLS_CUSTOM_1": "User Keys 1",
|
||||
"CONTROLS_CUSTOM_2": "User Keys 2",
|
||||
"CONTROLS_CUSTOM_3": "User Keys 3",
|
||||
"CONTROLS_DEFAULT_KEYS": "Default Keys",
|
||||
"CONTROLS_RESET_DEFAULTS": "Reset All: Hold %s",
|
||||
"CONTROLS_UNBIND": "Unbind: Hold %s",
|
||||
"DETAIL_BILINEAR": "Bilinear",
|
||||
"DETAIL_BRIGHTNESS": "Brightness",
|
||||
"DETAIL_DECIMAL_FMT": "%d",
|
||||
"DETAIL_FBO_FILTER": "FBO filter",
|
||||
"DETAIL_FLOAT_FMT": "%.1f",
|
||||
"DETAIL_FOG_END": "Fog end",
|
||||
"DETAIL_FOG_START": "Fog start",
|
||||
"DETAIL_FPS": "FPS",
|
||||
"DETAIL_PRETTY_PIXELS": "Pretty pixels",
|
||||
"DETAIL_INTEGER_FMT": "%d",
|
||||
"DETAIL_REFLECTIONS": "Reflections",
|
||||
"DETAIL_RENDER_MODE": "Render mode",
|
||||
"DETAIL_RENDER_MODE_FBO": "Framebuffer",
|
||||
"DETAIL_RENDER_MODE_LEGACY": "Window size",
|
||||
"DETAIL_RESOLUTION": "Resolution",
|
||||
"DETAIL_RESOLUTION_FMT": "%dx%d",
|
||||
"DETAIL_SELECT_DETAIL": "Select Detail",
|
||||
"DETAIL_STRING_FMT": "%s",
|
||||
"DETAIL_TEXTURE_FILTER": "Texture filter",
|
||||
"DETAIL_TITLE": "Graphic Options",
|
||||
"DETAIL_TRAPEZOID_FILTER": "Trapezoid filter",
|
||||
"DETAIL_UI_BAR_SCALE": "UI bar scale",
|
||||
"DETAIL_UI_TEXT_SCALE": "UI text scale",
|
||||
"DETAIL_VSYNC": "VSync",
|
||||
"DETAIL_WATER_COLOR_B": "Water color (B)",
|
||||
"DETAIL_WATER_COLOR_G": "Water color (G)",
|
||||
"DETAIL_WATER_COLOR_R": "Water color (R)",
|
||||
"HEADING_GAME_OVER": "GAME OVER",
|
||||
"HEADING_INVENTORY": "INVENTORY",
|
||||
"HEADING_ITEMS": "ITEMS",
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"levels": [
|
||||
// Level 0: Return to Egypt
|
||||
// Level 1: Return to Egypt
|
||||
{
|
||||
"title": "Return to Egypt",
|
||||
"objects": {
|
||||
|
@ -8,7 +8,7 @@
|
|||
},
|
||||
},
|
||||
|
||||
// Level 1: Temple of the Cat
|
||||
// Level 2: Temple of the Cat
|
||||
{
|
||||
"title": "Temple of the Cat",
|
||||
"objects": {
|
||||
|
@ -16,22 +16,22 @@
|
|||
},
|
||||
},
|
||||
|
||||
// Level 2: Atlantean Stronghold
|
||||
// Level 3: Atlantean Stronghold
|
||||
{
|
||||
"title": "Atlantean Stronghold",
|
||||
},
|
||||
|
||||
// Level 3: The Hive
|
||||
// Level 4: The Hive
|
||||
{
|
||||
"title": "The Hive",
|
||||
},
|
||||
|
||||
// Level 4: Title
|
||||
// Level 5: Title
|
||||
{
|
||||
"title": "Title",
|
||||
},
|
||||
|
||||
// Level 5: Current Position
|
||||
// Level 6: Current Position
|
||||
{
|
||||
"title": "Current Position",
|
||||
},
|
||||
|
|
Before Width: | Height: | Size: 410 KiB |
Before Width: | Height: | Size: 346 KiB |
Before Width: | Height: | Size: 444 KiB |
Before Width: | Height: | Size: 322 KiB |
Before Width: | Height: | Size: 268 KiB |
Before Width: | Height: | Size: 100 KiB |
Before Width: | Height: | Size: 689 KiB |
Before Width: | Height: | Size: 592 KiB |
Before Width: | Height: | Size: 69 KiB |
Before Width: | Height: | Size: 71 KiB |
Before Width: | Height: | Size: 669 KiB |
Before Width: | Height: | Size: 383 KiB |
Before Width: | Height: | Size: 701 KiB |
Before Width: | Height: | Size: 454 KiB |
Before Width: | Height: | Size: 628 KiB |
Before Width: | Height: | Size: 461 KiB |
Before Width: | Height: | Size: 314 KiB |
Before Width: | Height: | Size: 261 KiB |
BIN
data/tr1/ship/data/injections/bubbles.bin
Normal file
BIN
data/tr1/ship/data/injections/folly_pickup_meshes.bin
Normal file
BIN
data/tr1/ship/data/injections/panther_sfx.bin
Normal file
BIN
data/tr1/ship/data/injections/skate_kid_sfx.bin
Normal file
|
@ -1,15 +1,26 @@
|
|||
#define WALL_L 1024
|
||||
#define SHADE_NEUTRAL 0x1000
|
||||
#define SHADE_MAX 0x1FFF
|
||||
|
||||
#define VERT_NO_CAUSTICS 0x01
|
||||
#define VERT_FLAT_SHADED 0x02
|
||||
#define VERT_REFLECTIVE 0x04
|
||||
#define VERT_NO_LIGHTING 0x08
|
||||
#define VERT_SPRITE 0x10 // flag for billboarded sprites in mesh shader
|
||||
|
||||
#define WIBBLE_SIZE 32
|
||||
#define MAX_WIBBLE 2
|
||||
#define PI 3.1415926538
|
||||
|
||||
vec3 waterWibble(vec4 position, vec2 viewportSize, float wibbleOffset)
|
||||
vec3 waterWibble(vec4 position, vec2 viewportSize, int time)
|
||||
{
|
||||
// get screen coordinates
|
||||
vec3 ndc = position.xyz / position.w; //perspective divide/normalize
|
||||
vec2 viewportCoord = ndc.xy * 0.5 + 0.5; //ndc is -1 to 1 in GL. scale for 0 to 1
|
||||
vec2 viewportPixelCoord = viewportCoord * viewportSize;
|
||||
|
||||
float amplitude = 2.0;
|
||||
viewportPixelCoord.x += sin((wibbleOffset + viewportPixelCoord.y) * 2.0 * PI / 32) * amplitude;
|
||||
viewportPixelCoord.y += sin((wibbleOffset + viewportPixelCoord.x) * 2.0 * PI / 32) * amplitude;
|
||||
viewportPixelCoord.x += sin((float(time) + viewportPixelCoord.y) * 2.0 * PI / WIBBLE_SIZE) * MAX_WIBBLE;
|
||||
viewportPixelCoord.y += sin((float(time) + viewportPixelCoord.x) * 2.0 * PI / WIBBLE_SIZE) * MAX_WIBBLE;
|
||||
|
||||
// reverse transform
|
||||
viewportCoord = viewportPixelCoord / viewportSize;
|
||||
|
@ -17,6 +28,24 @@ vec3 waterWibble(vec4 position, vec2 viewportSize, float wibbleOffset)
|
|||
return ndc * position.w;
|
||||
}
|
||||
|
||||
float shadeFog(float shade, float depth, vec2 fog)
|
||||
{
|
||||
float fogBegin = fog.x;
|
||||
float fogEnd = fog.y;
|
||||
if (depth < fogBegin) {
|
||||
return shade + 0.0;
|
||||
} else if (depth >= fogEnd) {
|
||||
return shade + float(SHADE_MAX);
|
||||
} else {
|
||||
return shade + (depth - fogBegin) * SHADE_MAX / (fogEnd - fogBegin);
|
||||
}
|
||||
}
|
||||
|
||||
vec3 applyShade(vec3 color, float shade)
|
||||
{
|
||||
return color * (2.0 - (shade / SHADE_NEUTRAL));
|
||||
}
|
||||
|
||||
bool discardTranslucent(sampler2D tex, vec2 uv)
|
||||
{
|
||||
// do not use smoothing for chroma key
|
||||
|
@ -26,11 +55,11 @@ bool discardTranslucent(sampler2D tex, vec2 uv)
|
|||
return texel.a == 0.0;
|
||||
}
|
||||
|
||||
bool discardTranslucent(sampler2DArray tex, vec3 uv)
|
||||
bool discardTranslucent(sampler2DArray tex, vec3 uvw)
|
||||
{
|
||||
// do not use smoothing for chroma key
|
||||
ivec2 size = textureSize(tex, 0).xy;
|
||||
ivec3 texCoordsNN = ivec3(ivec2(uv.xy * size.xy) % size.xy, uv.z);
|
||||
ivec3 texCoordsNN = ivec3(ivec2(uvw.xy * size.xy) % size.xy, uvw.z);
|
||||
vec4 texel = texelFetch(tex, texCoordsNN, 0);
|
||||
return texel.a == 0.0;
|
||||
}
|
||||
|
|
122
data/tr1/ship/shaders/meshes.glsl
Normal file
|
@ -0,0 +1,122 @@
|
|||
#ifdef VERTEX
|
||||
|
||||
uniform int uTime;
|
||||
uniform vec2 uViewportSize;
|
||||
uniform mat4 uMatProjection;
|
||||
uniform mat4 uMatModelView;
|
||||
uniform bool uTrapezoidFilterEnabled;
|
||||
uniform bool uWibbleEffect;
|
||||
|
||||
layout(location = 0) in vec3 inPosition;
|
||||
layout(location = 1) in vec3 inNormal;
|
||||
layout(location = 2) in vec3 inUVW;
|
||||
layout(location = 3) in vec4 inTextureSize;
|
||||
layout(location = 4) in vec2 inTrapezoidRatios;
|
||||
layout(location = 5) in int inFlags;
|
||||
layout(location = 6) in vec4 inColor;
|
||||
layout(location = 7) in float inShade;
|
||||
|
||||
out vec4 gWorldPos;
|
||||
out vec3 gNormal;
|
||||
flat out int gFlags;
|
||||
flat out int gTexLayer;
|
||||
out vec2 gTexUV;
|
||||
flat out vec4 gAtlasSize;
|
||||
out vec2 gTrapezoidRatios;
|
||||
out float gShade;
|
||||
out vec4 gColor;
|
||||
|
||||
void main(void) {
|
||||
// billboard sprites if flagged, else standard vertex transform
|
||||
vec4 eyePos = uMatModelView * vec4(inPosition.xyz, 1.0);
|
||||
if ((inFlags & VERT_SPRITE) != 0) {
|
||||
// inNormal.xy carries sprite displacement for billboarding
|
||||
eyePos.xy += inNormal.xy;
|
||||
}
|
||||
gWorldPos = eyePos;
|
||||
gNormal = inNormal;
|
||||
gl_Position = uMatProjection * eyePos;
|
||||
|
||||
// apply water wibble effect only to non-sprite vertices
|
||||
if (uWibbleEffect && (inFlags & VERT_NO_CAUSTICS) == 0 && (inFlags & VERT_SPRITE) == 0) {
|
||||
gl_Position.xyz =
|
||||
waterWibble(gl_Position, uViewportSize, uTime);
|
||||
}
|
||||
|
||||
gFlags = inFlags;
|
||||
gAtlasSize = inTextureSize;
|
||||
gTexUV = inUVW.xy;
|
||||
gTexLayer = int(inUVW.z);
|
||||
gTrapezoidRatios = inTrapezoidRatios;
|
||||
if (uTrapezoidFilterEnabled) {
|
||||
gTexUV *= inTrapezoidRatios;
|
||||
}
|
||||
gShade = inShade;
|
||||
gColor = inColor;
|
||||
}
|
||||
|
||||
#elif defined(FRAGMENT)
|
||||
|
||||
uniform int uTime;
|
||||
uniform sampler2DArray uTexAtlas;
|
||||
uniform sampler2D uTexEnvMap;
|
||||
uniform bool uSmoothingEnabled;
|
||||
uniform bool uAlphaDiscardEnabled;
|
||||
uniform bool uTrapezoidFilterEnabled;
|
||||
uniform bool uReflectionsEnabled;
|
||||
uniform float uAlphaThreshold;
|
||||
uniform float uBrightnessMultiplier;
|
||||
uniform vec3 uGlobalTint;
|
||||
uniform vec2 uFog; // x = fog start, y = fog end
|
||||
uniform bool uWaterEffect;
|
||||
|
||||
in vec4 gWorldPos;
|
||||
in vec3 gNormal;
|
||||
flat in int gFlags;
|
||||
flat in int gTexLayer;
|
||||
in vec2 gTexUV;
|
||||
flat in vec4 gAtlasSize;
|
||||
in float gShade;
|
||||
in vec4 gColor;
|
||||
in vec2 gTrapezoidRatios;
|
||||
out vec4 outColor;
|
||||
|
||||
vec2 clampTexAtlas(vec2 uv, vec4 atlasSize)
|
||||
{
|
||||
float epsilon = 0.5 / 256.0;
|
||||
return clamp(uv, atlasSize.xy + epsilon, atlasSize.zw - epsilon);
|
||||
}
|
||||
|
||||
void main(void) {
|
||||
vec4 texColor = gColor;
|
||||
vec3 texCoords = vec3(gTexUV.x, gTexUV.y, gTexLayer);
|
||||
if (uTrapezoidFilterEnabled) {
|
||||
texCoords.xy /= gTrapezoidRatios;
|
||||
}
|
||||
texCoords.xy = clampTexAtlas(texCoords.xy, gAtlasSize);
|
||||
|
||||
if ((gFlags & VERT_FLAT_SHADED) == 0 && texCoords.z >= 0) {
|
||||
if (uAlphaDiscardEnabled && uSmoothingEnabled && discardTranslucent(uTexAtlas, texCoords)) {
|
||||
discard;
|
||||
}
|
||||
|
||||
texColor = texture(uTexAtlas, texCoords);
|
||||
if (uAlphaThreshold >= 0.0 && texColor.a <= uAlphaThreshold) {
|
||||
discard;
|
||||
}
|
||||
}
|
||||
if ((gFlags & VERT_REFLECTIVE) != 0 && uReflectionsEnabled) {
|
||||
texColor *= texture(uTexEnvMap, (normalize(gNormal) * 0.5 + 0.5).xy) * 2;
|
||||
}
|
||||
|
||||
if ((gFlags & VERT_NO_LIGHTING) == 0) {
|
||||
float shade = gShade;
|
||||
shade = shadeFog(shade, gWorldPos.z, uFog);
|
||||
texColor.rgb = applyShade(texColor.rgb, shade);
|
||||
texColor.rgb *= uGlobalTint;
|
||||
}
|
||||
|
||||
texColor.rgb *= uBrightnessMultiplier;
|
||||
outColor = vec4(texColor.rgb, gColor.a);
|
||||
}
|
||||
#endif
|
|
@ -1,88 +0,0 @@
|
|||
#define NEW_ZBUFFER 0
|
||||
#define NEUTRAL_SHADE 0x1000
|
||||
|
||||
#ifdef VERTEX
|
||||
|
||||
uniform samplerBuffer uUVW; // texture u, v, layer
|
||||
uniform vec2 uViewportCenter;
|
||||
uniform vec2 uViewportSize;
|
||||
uniform mat4 uMatProjection;
|
||||
uniform mat4 uMatProjectionOG;
|
||||
uniform mat4 uMatModelView;
|
||||
uniform float uWibbleOffset;
|
||||
uniform vec2 uFog; // x = start, y = end
|
||||
|
||||
uniform float uPhdPersp;
|
||||
uniform float uPhdResZ;
|
||||
uniform float uPhdResZBuf;
|
||||
|
||||
layout(location = 0) in vec3 inPosition;
|
||||
layout(location = 1) in vec2 inDisplacement;
|
||||
layout(location = 2) in int inTextureIdx;
|
||||
layout(location = 3) in float inShade;
|
||||
|
||||
out vec3 gUV; // x = u, y = v, z = layer
|
||||
out float gShade;
|
||||
|
||||
void main(void) {
|
||||
#if NEW_ZBUFFER
|
||||
vec4 centerEyeSpace = uMatModelView * vec4(inPosition, 1.0);
|
||||
centerEyeSpace.xy += inDisplacement;
|
||||
gl_Position = uMatProjection * centerEyeSpace;
|
||||
|
||||
if (uWibbleOffset >= 0.0) {
|
||||
gl_Position.xyz =
|
||||
waterWibble(gl_Position, uViewportSize, uWibbleOffset);
|
||||
}
|
||||
#else
|
||||
vec3 localPos = inPosition;
|
||||
vec3 worldPos = (uMatModelView * vec4(localPos, 1)).xyz;
|
||||
|
||||
if ((uMatProjection * vec4(worldPos, 1)).z <= 0) {
|
||||
// Terrible hack:
|
||||
// Push the vertex out of view (e.g. offscreen or behind clip).
|
||||
// Works for entire sprites, because worldPos is the position of the
|
||||
// sprite origin, the same for all vertices.
|
||||
gl_Position = vec4(2.0, 2.0, 1.0, 1.0);
|
||||
return;
|
||||
}
|
||||
|
||||
vec3 screenCenterPos = vec3(
|
||||
uViewportCenter + worldPos.xy * uPhdPersp / worldPos.z,
|
||||
uPhdResZBuf - uPhdResZ / worldPos.z);
|
||||
vec3 screenCornerPos = screenCenterPos;
|
||||
screenCornerPos.xy += inDisplacement * uPhdPersp / worldPos.z;
|
||||
gl_Position = (uMatProjectionOG * vec4(screenCornerPos, 1));
|
||||
#endif
|
||||
|
||||
gUV = texelFetch(uUVW, int(inTextureIdx)).xyz;
|
||||
gShade = inShade;
|
||||
}
|
||||
|
||||
#elif defined(FRAGMENT)
|
||||
|
||||
uniform sampler2DArray uTexture;
|
||||
uniform bool uSmoothingEnabled;
|
||||
uniform float uBrightnessMultiplier;
|
||||
uniform vec3 uGlobalTint;
|
||||
|
||||
in vec3 gUV;
|
||||
in float gShade;
|
||||
out vec4 outColor;
|
||||
|
||||
void main(void) {
|
||||
vec4 texColor = texture(uTexture, gUV);
|
||||
if (uSmoothingEnabled && discardTranslucent(uTexture, gUV)) {
|
||||
discard;
|
||||
}
|
||||
|
||||
if (texColor.a <= 0.0) {
|
||||
discard;
|
||||
}
|
||||
|
||||
texColor.rgb *= 2.0 - (gShade / NEUTRAL_SHADE);
|
||||
texColor.rgb *= uBrightnessMultiplier;
|
||||
texColor.rgb *= uGlobalTint;
|
||||
outColor = vec4(texColor.rgb, 1.0);
|
||||
}
|
||||
#endif
|
Before Width: | Height: | Size: 6 KiB |
Before Width: | Height: | Size: 6 KiB |
1489
data/tr2/logo.ai
BIN
data/tr2/logo.png
Normal file
After Width: | Height: | Size: 376 KiB |
|
@ -2,8 +2,9 @@
|
|||
// NOTE: bad changes to this file may result in crashes.
|
||||
// Lines starting with double slashes are comments and are ignored.
|
||||
|
||||
"main_menu_picture": "data/images/title_eu.png",
|
||||
"main_menu_picture": "data/images/title_eu.webp",
|
||||
"savegame_fmt_legacy": "savegame.%d",
|
||||
"savegame_fmt_bson": "save_tr2_%02d.dat",
|
||||
|
||||
"cmd_init": {"action": "exit_to_title"},
|
||||
"cmd_title": {"action": "noop"},
|
||||
|
@ -27,7 +28,7 @@
|
|||
"path": "data/title.tr2",
|
||||
"music_track": 64,
|
||||
"sequence": [
|
||||
{"type": "display_picture", "path": "data/images/legal.png"},
|
||||
{"type": "display_picture", "path": "data/images/legal_eu.webp", "legal": true},
|
||||
{"type": "play_fmv", "fmv_id": 0},
|
||||
{"type": "play_fmv", "fmv_id": 1},
|
||||
{"type": "exit_to_title"},
|
||||
|
@ -84,6 +85,7 @@
|
|||
{"type": "level_complete"},
|
||||
],
|
||||
"injections": [
|
||||
"data/injections/boat_bits.bin",
|
||||
"data/injections/common_pickup_meshes.bin",
|
||||
],
|
||||
},
|
||||
|
@ -232,6 +234,7 @@
|
|||
{"type": "level_complete"},
|
||||
],
|
||||
"injections": [
|
||||
"data/injections/deck_fd.bin",
|
||||
"data/injections/deck_itemrots.bin",
|
||||
"data/injections/deck_pickup_meshes.bin",
|
||||
"data/injections/living_deck_goon_sfx.bin",
|
||||
|
@ -308,6 +311,7 @@
|
|||
],
|
||||
"injections": [
|
||||
"data/injections/common_pickup_meshes.bin",
|
||||
"data/injections/guardian_death_commands.bin",
|
||||
"data/injections/palace_fd.bin",
|
||||
"data/injections/palace_itemrots.bin",
|
||||
],
|
||||
|
@ -382,15 +386,15 @@
|
|||
{"type": "loop_game"},
|
||||
{"type": "play_music", "music_track": 52},
|
||||
{"type": "level_complete"},
|
||||
{"type": "display_picture", "path": "data/images/credit01.png", "display_time": 15, "fade_in_time": 0.5, "fade_out_time": 0.5},
|
||||
{"type": "display_picture", "path": "data/images/credit02.png", "display_time": 15, "fade_in_time": 0.5, "fade_out_time": 0.5},
|
||||
{"type": "display_picture", "path": "data/images/credit03.png", "display_time": 15, "fade_in_time": 0.5, "fade_out_time": 0.5},
|
||||
{"type": "display_picture", "path": "data/images/credit04.png", "display_time": 15, "fade_in_time": 0.5, "fade_out_time": 0.5},
|
||||
{"type": "display_picture", "path": "data/images/credit05.png", "display_time": 15, "fade_in_time": 0.5, "fade_out_time": 0.5},
|
||||
{"type": "display_picture", "path": "data/images/credit06.png", "display_time": 15, "fade_in_time": 0.5, "fade_out_time": 0.5},
|
||||
{"type": "display_picture", "path": "data/images/credit07.png", "display_time": 15, "fade_in_time": 0.5, "fade_out_time": 0.5},
|
||||
{"type": "display_picture", "path": "data/images/credit08.png", "display_time": 15, "fade_in_time": 0.5, "fade_out_time": 0.5},
|
||||
{"type": "total_stats", "background_path": "data/images/end.png"},
|
||||
{"type": "display_picture", "path": "data/images/credit01.webp", "display_time": 15, "fade_in_time": 0.5, "fade_out_time": 0.5},
|
||||
{"type": "display_picture", "path": "data/images/credit02.webp", "display_time": 15, "fade_in_time": 0.5, "fade_out_time": 0.5},
|
||||
{"type": "display_picture", "path": "data/images/credit03.webp", "display_time": 15, "fade_in_time": 0.5, "fade_out_time": 0.5},
|
||||
{"type": "display_picture", "path": "data/images/credit04.webp", "display_time": 15, "fade_in_time": 0.5, "fade_out_time": 0.5},
|
||||
{"type": "display_picture", "path": "data/images/credit05.webp", "display_time": 15, "fade_in_time": 0.5, "fade_out_time": 0.5},
|
||||
{"type": "display_picture", "path": "data/images/credit06.webp", "display_time": 15, "fade_in_time": 0.5, "fade_out_time": 0.5},
|
||||
{"type": "display_picture", "path": "data/images/credit07.webp", "display_time": 15, "fade_in_time": 0.5, "fade_out_time": 0.5},
|
||||
{"type": "display_picture", "path": "data/images/credit08.webp", "display_time": 15, "fade_in_time": 0.5, "fade_out_time": 0.5},
|
||||
{"type": "total_stats", "background_path": "data/images/end.webp"},
|
||||
],
|
||||
"injections": [
|
||||
"data/injections/house_itemrots.bin",
|
||||
|
@ -485,13 +489,14 @@
|
|||
{"type": "loop_game"},
|
||||
],
|
||||
"injections": [
|
||||
"data/injections/cut4_textures.bin",
|
||||
"data/injections/photo.bin",
|
||||
],
|
||||
},
|
||||
],
|
||||
|
||||
"fmvs": [
|
||||
{"path": "fmv/LOGO.RPL"},
|
||||
{"path": "fmv/LOGO.RPL", "legal": true},
|
||||
{"path": "fmv/ANCIENT.RPL"},
|
||||
{"path": "fmv/MODERN.RPL"},
|
||||
{"path": "fmv/LANDING.RPL"},
|
||||
|
|
|
@ -2,8 +2,9 @@
|
|||
// NOTE: bad changes to this file may result in crashes.
|
||||
// Lines starting with double slashes are comments and are ignored.
|
||||
|
||||
"main_menu_picture": "data/images/title_eu_gm.png",
|
||||
"main_menu_picture": "data/images/title_eu_gm.webp",
|
||||
"savegame_fmt_legacy": "savegame_gm.%d",
|
||||
"savegame_fmt_bson": "save_trgm_%02d.dat",
|
||||
|
||||
"cmd_init": {"action": "exit_to_title"},
|
||||
"cmd_title": {"action": "noop"},
|
||||
|
@ -27,7 +28,7 @@
|
|||
"path": "data/title_gm.tr2",
|
||||
"music_track": 64,
|
||||
"sequence": [
|
||||
{"type": "display_picture", "path": "data/images/legal.png"},
|
||||
{"type": "display_picture", "path": "data/images/legal_eu_gm.webp", "legal": true},
|
||||
{"type": "exit_to_title"},
|
||||
],
|
||||
},
|
||||
|
@ -59,6 +60,10 @@
|
|||
{"type": "level_stats"},
|
||||
{"type": "level_complete"},
|
||||
],
|
||||
"injections": [
|
||||
"data/injections/common_pickup_meshes.bin",
|
||||
"data/injections/shark_sfx.bin",
|
||||
],
|
||||
},
|
||||
|
||||
// 2. Fool's Gold
|
||||
|
@ -71,6 +76,9 @@
|
|||
{"type": "level_stats"},
|
||||
{"type": "level_complete"},
|
||||
],
|
||||
"injections": [
|
||||
"data/injections/fools_pickup_meshes.bin",
|
||||
],
|
||||
},
|
||||
|
||||
// 3. Furnace of the Gods
|
||||
|
@ -83,6 +91,9 @@
|
|||
{"type": "level_stats"},
|
||||
{"type": "level_complete"},
|
||||
],
|
||||
"injections": [
|
||||
"data/injections/furnace_pickup_meshes.bin",
|
||||
],
|
||||
},
|
||||
|
||||
// 4. Kingdom
|
||||
|
@ -93,18 +104,22 @@
|
|||
{"type": "give_item", "object_id": "puzzle_1"},
|
||||
{"type": "loop_game"},
|
||||
{"type": "play_music", "music_track": 52},
|
||||
{"type": "display_picture", "path": "data/images/credit00_gm.png", "display_time": 15, "fade_in_time": 0.5, "fade_out_time": 0.5},
|
||||
{"type": "display_picture", "path": "data/images/credit01.png", "display_time": 15, "fade_in_time": 0.5, "fade_out_time": 0.5},
|
||||
{"type": "display_picture", "path": "data/images/credit02.png", "display_time": 15, "fade_in_time": 0.5, "fade_out_time": 0.5},
|
||||
{"type": "display_picture", "path": "data/images/credit03.png", "display_time": 15, "fade_in_time": 0.5, "fade_out_time": 0.5},
|
||||
{"type": "display_picture", "path": "data/images/credit04.png", "display_time": 15, "fade_in_time": 0.5, "fade_out_time": 0.5},
|
||||
{"type": "display_picture", "path": "data/images/credit05.png", "display_time": 15, "fade_in_time": 0.5, "fade_out_time": 0.5},
|
||||
{"type": "display_picture", "path": "data/images/credit06.png", "display_time": 15, "fade_in_time": 0.5, "fade_out_time": 0.5},
|
||||
{"type": "display_picture", "path": "data/images/credit07_gm.png", "display_time": 15, "fade_in_time": 0.5, "fade_out_time": 0.5},
|
||||
{"type": "display_picture", "path": "data/images/credit08.png", "display_time": 15, "fade_in_time": 0.5, "fade_out_time": 0.5},
|
||||
{"type": "total_stats", "background_path": "data/images/end.png"},
|
||||
{"type": "display_picture", "path": "data/images/credit00_gm.webp", "display_time": 15, "fade_in_time": 0.5, "fade_out_time": 0.5},
|
||||
{"type": "display_picture", "path": "data/images/credit01.webp", "display_time": 15, "fade_in_time": 0.5, "fade_out_time": 0.5},
|
||||
{"type": "display_picture", "path": "data/images/credit02.webp", "display_time": 15, "fade_in_time": 0.5, "fade_out_time": 0.5},
|
||||
{"type": "display_picture", "path": "data/images/credit03.webp", "display_time": 15, "fade_in_time": 0.5, "fade_out_time": 0.5},
|
||||
{"type": "display_picture", "path": "data/images/credit04.webp", "display_time": 15, "fade_in_time": 0.5, "fade_out_time": 0.5},
|
||||
{"type": "display_picture", "path": "data/images/credit05.webp", "display_time": 15, "fade_in_time": 0.5, "fade_out_time": 0.5},
|
||||
{"type": "display_picture", "path": "data/images/credit06.webp", "display_time": 15, "fade_in_time": 0.5, "fade_out_time": 0.5},
|
||||
{"type": "display_picture", "path": "data/images/credit07_gm.webp", "display_time": 15, "fade_in_time": 0.5, "fade_out_time": 0.5},
|
||||
{"type": "display_picture", "path": "data/images/credit08.webp", "display_time": 15, "fade_in_time": 0.5, "fade_out_time": 0.5},
|
||||
{"type": "total_stats", "background_path": "data/images/end.webp"},
|
||||
{"type": "level_complete"},
|
||||
],
|
||||
"injections": [
|
||||
"data/injections/common_pickup_meshes.bin",
|
||||
"data/injections/guardian_death_commands.bin",
|
||||
],
|
||||
},
|
||||
|
||||
// 5. Nightmare in Vegas
|
||||
|
@ -123,6 +138,11 @@
|
|||
{"type": "level_stats"},
|
||||
{"type": "level_complete"},
|
||||
],
|
||||
"injections": [
|
||||
"data/injections/common_pickup_meshes.bin",
|
||||
"data/injections/guardian_death_commands.bin",
|
||||
"data/injections/vegas_fd.bin",
|
||||
],
|
||||
},
|
||||
],
|
||||
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
{
|
||||
// This file is used to enable the -l argument support.
|
||||
|
||||
"main_menu_picture": "data/images/title_eu.png",
|
||||
"savegame_fmt_legacy": "savegame.%d",
|
||||
"main_menu_picture": "data/images/title_eu.webp",
|
||||
"savegame_fmt_legacy": "savegame_custom.%d",
|
||||
"savegame_fmt_bson": "save_tr2_custom_%02d.dat",
|
||||
|
||||
"cmd_init": {"action": "exit_to_title"},
|
||||
"cmd_title": {"action": "noop"},
|
||||
|
|
|
@ -464,13 +464,43 @@
|
|||
},
|
||||
|
||||
"game_strings": {
|
||||
"CONTROL_BACKEND_CONTROLLER": "Controller",
|
||||
"CONTROL_BACKEND_KEYBOARD": "Keyboard",
|
||||
"CONTROL_CUSTOMIZE": "Customize Controls",
|
||||
"CONTROL_CUSTOM_1": "User Keys 1",
|
||||
"CONTROL_CUSTOM_2": "User Keys 2",
|
||||
"CONTROL_CUSTOM_3": "User Keys 3",
|
||||
"CONTROL_DEFAULT_KEYS": "Default Keys",
|
||||
"CONTROLS_BACKEND_CONTROLLER": "Controller",
|
||||
"CONTROLS_BACKEND_KEYBOARD": "Keyboard",
|
||||
"CONTROLS_CUSTOMIZE": "Customize Controls",
|
||||
"CONTROLS_CUSTOM_1": "User Keys 1",
|
||||
"CONTROLS_CUSTOM_2": "User Keys 2",
|
||||
"CONTROLS_CUSTOM_3": "User Keys 3",
|
||||
"CONTROLS_DEFAULT_KEYS": "Default Keys",
|
||||
"DETAIL_ASPECT_MODE": "Aspect mode",
|
||||
"DETAIL_ASPECT_MODE_16_9": "16:9",
|
||||
"DETAIL_ASPECT_MODE_4_3": "4:3",
|
||||
"DETAIL_ASPECT_MODE_ANY": "Any",
|
||||
"DETAIL_BILINEAR": "Bilinear",
|
||||
"DETAIL_DEPTH_BUFFER": "Z-Buffer",
|
||||
"DETAIL_FLOAT_FMT": "%.1f",
|
||||
"DETAIL_FOG_END": "Fog end",
|
||||
"DETAIL_FOG_START": "Fog start",
|
||||
"DETAIL_FOV": "Field of view",
|
||||
"DETAIL_FPS": "FPS",
|
||||
"DETAIL_INTEGER_FMT": "%d",
|
||||
"DETAIL_LIGHTING_CONTRAST": "Lighting contrast",
|
||||
"DETAIL_LIGHTING_CONTRAST_HIGH": "High",
|
||||
"DETAIL_LIGHTING_CONTRAST_LOW": "Low",
|
||||
"DETAIL_LIGHTING_CONTRAST_MEDIUM": "Medium",
|
||||
"DETAIL_RENDER_MODE": "Render mode",
|
||||
"DETAIL_RENDER_MODE_HARDWARE": "Hardware",
|
||||
"DETAIL_RENDER_MODE_SOFTWARE": "Software",
|
||||
"DETAIL_SCALER": "Scaler",
|
||||
"DETAIL_SIZER": "Sizer",
|
||||
"DETAIL_TEXTURE_FILTER": "Texture filter",
|
||||
"DETAIL_TITLE": "Graphic Options",
|
||||
"DETAIL_TRAPEZOID_FILTER": "Trapezoid filter",
|
||||
"DETAIL_UI_BAR_SCALE": "UI bar scale",
|
||||
"DETAIL_UI_TEXT_SCALE": "UI text scale",
|
||||
"DETAIL_USE_PSX_FOV": "Use PSX FOV",
|
||||
"DETAIL_WATER_COLOR_B": "Water color (B)",
|
||||
"DETAIL_WATER_COLOR_G": "Water color (G)",
|
||||
"DETAIL_WATER_COLOR_R": "Water color (R)",
|
||||
"HEADING_GAME_OVER": "GAME OVER",
|
||||
"HEADING_INVENTORY": "INVENTORY",
|
||||
"HEADING_ITEMS": "ITEMS",
|
||||
|
@ -505,7 +535,7 @@
|
|||
"KEYMAP_USE_FLARE": "Flare",
|
||||
"KEYMAP_WALK": "Walk",
|
||||
"MISC_DEMO_MODE": "Demo Mode",
|
||||
"MISC_EMPTY_SLOT": "- EMPTY SLOT -",
|
||||
"MISC_EMPTY_SLOT_FMT": "- EMPTY SLOT -",
|
||||
"MISC_EXIT": "Exit",
|
||||
"MISC_NONE": "None",
|
||||
"MISC_OFF": "Off",
|
||||
|
@ -591,13 +621,22 @@
|
|||
"OSD_UNKNOWN_COMMAND": "Unknown command: %s",
|
||||
"OSD_WIREFRAME_MODE_OFF": "Wireframe mode: off",
|
||||
"OSD_WIREFRAME_MODE_ON": "Wireframe mode: on",
|
||||
"PAGINATION_NAV": "%d / %d",
|
||||
"PASSPORT_EXIT_DEMO": "Exit Demo",
|
||||
"PASSPORT_EXIT_GAME": "Exit Game",
|
||||
"PASSPORT_EXIT_TO_TITLE": "Exit to Title",
|
||||
"PASSPORT_LEGACY_SELECT_LEVEL_1": "Legacy saves do not",
|
||||
"PASSPORT_LEGACY_SELECT_LEVEL_2": "support this feature.",
|
||||
"PASSPORT_LOAD_GAME": "Load Game",
|
||||
"PASSPORT_MODE_NEW_GAME": "New Game",
|
||||
"PASSPORT_MODE_NEW_GAME_JP": "Japanese NG",
|
||||
"PASSPORT_MODE_NEW_GAME_JP_PLUS": "Japanese NG+",
|
||||
"PASSPORT_MODE_NEW_GAME_PLUS": "New Game+",
|
||||
"PASSPORT_NEW_GAME": "New Game",
|
||||
"PASSPORT_SAVE_GAME": "Save Game",
|
||||
"PASSPORT_SELECT_LEVEL": "Select Level",
|
||||
"PASSPORT_SELECT_MODE": "Select Mode",
|
||||
"PASSPORT_STORY_SO_FAR": "Story so far...",
|
||||
"PAUSE_ARE_YOU_SURE": "Are you sure?",
|
||||
"PAUSE_CONTINUE": "Continue",
|
||||
"PAUSE_EXIT_TO_TITLE": "Exit to title?",
|
||||
|
|
Before Width: | Height: | Size: 44 KiB |
Before Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 46 KiB |
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 139 KiB |
Before Width: | Height: | Size: 184 KiB |
Before Width: | Height: | Size: 117 KiB |
Before Width: | Height: | Size: 180 KiB |