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

This commit is contained in:
Marcin Kurczewski 2025-04-23 07:41:34 +02:00
commit e22bf087f6
No known key found for this signature in database
GPG key ID: CC65E6FD28CAE42A
691 changed files with 17342 additions and 19282 deletions

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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 }}

View file

@ -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
View file

@ -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/

View file

@ -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.

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 305 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 413 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 MiB

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.9 KiB

File diff suppressed because one or more lines are too long

BIN
data/tr1/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 273 KiB

View file

@ -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"},

View file

@ -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",

View file

@ -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",

View file

@ -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},
],
}

View file

@ -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",

View file

@ -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",
},

Binary file not shown.

Before

Width:  |  Height:  |  Size: 410 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 346 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 444 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 322 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 268 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 689 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 592 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 669 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 383 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 701 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 454 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 628 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 461 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 314 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 261 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View 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;
}

View 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

View file

@ -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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6 KiB

File diff suppressed because it is too large Load diff

BIN
data/tr2/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 376 KiB

View file

@ -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"},

View file

@ -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",
],
},
],

View file

@ -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"},

View file

@ -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?",

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 139 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 184 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 180 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show more