Compare commits

..

5 commits

Author SHA1 Message Date
Ethan Lee
f1ae40a7c5 2.3.1 2021-09-01 12:26:53 -04:00
Ethan Lee
d501a6245f Added my quick script to fixup Mac dylib paths 2021-09-01 12:08:12 -04:00
Ethan Lee
514d56ee20 Minor VS buildfix 2021-08-31 19:07:36 -04:00
Misa
9cfbd1ae51 Fix not-Flip-Mode flag turning off when returning from options menu
We need to check for graphics.setflipmode, not graphics.flipmode,
because graphics.flipmode only gets assigned at the end of the frame
(due to the deferred callback). Otherwise, returning from the options
menu would always turn flag 73 on, which would make you ineligible to
get the Flip Mode trophy, even if you're in Flip Mode.
2021-08-31 15:34:32 -07:00
Ethan Lee
96812f8046 Default to VSync being enabled 2021-08-31 15:09:07 -04:00
624 changed files with 77013 additions and 162570 deletions

View file

@ -13,8 +13,6 @@ things for you to read through first:
- New platforms are acceptable if they use SDL + PhysicsFS and don't mess with
the game source too much.
- (No homebrew console targets, sorry! Maybe do the work in SDL instead?)
- Translations and localizations of the game are not a community effort. If you
want to translate the game, you should contact Terry.
- Pull requests that do not fill out the Legal Stuff will be closed
automatically.
@ -34,4 +32,4 @@ By submitting this pull request, I confirm that...
- [ ] My changes may be used in a future commercial release of VVVVVV
- [ ] I will be credited in a `CONTRIBUTORS` file and the "GitHub Friends"
section of the credits for all of said releases, but will NOT be compensated
for these changes unless there is a prior written agreement
for these changes

View file

@ -1,81 +0,0 @@
name: CI (Android)
# Only trigger workflow when Android-specific code could have changed.
# This includes C/C++ files that have __ANDROID__ ifdefs.
# If adding new ifdefs, make sure to update these lists.
on:
push:
paths:
- "desktop_version/CMakeLists.txt"
- "desktop_version/src/ButtonGlyphs.cpp"
- "desktop_version/src/FileSystemUtils.cpp"
- "desktop_version/src/Screen.cpp"
- "desktop_version/src/Vlogging.c"
- "desktop_version/VVVVVV-android/gradlew"
- "desktop_version/VVVVVV-android/gradlew.bat"
- "desktop_version/VVVVVV-android/**/CMakeLists.txt"
- "desktop_version/VVVVVV-android/**.java"
- "desktop_version/VVVVVV-android/**.xml"
- "desktop_version/VVVVVV-android/**.pro"
- "desktop_version/VVVVVV-android/**.mk"
- "desktop_version/VVVVVV-android/**.gradle"
- "desktop_version/VVVVVV-android/**.jar"
- "desktop_version/VVVVVV-android/**.properties"
- ".github/workflows/android.yml"
pull_request:
paths:
- "desktop_version/CMakeLists.txt"
- "desktop_version/src/ButtonGlyphs.cpp"
- "desktop_version/src/FileSystemUtils.cpp"
- "desktop_version/src/Screen.cpp"
- "desktop_version/src/Vlogging.c"
- "desktop_version/VVVVVV-android/gradlew"
- "desktop_version/VVVVVV-android/gradlew.bat"
- "desktop_version/VVVVVV-android/**/CMakeLists.txt"
- "desktop_version/VVVVVV-android/**.java"
- "desktop_version/VVVVVV-android/**.xml"
- "desktop_version/VVVVVV-android/**.pro"
- "desktop_version/VVVVVV-android/**.mk"
- "desktop_version/VVVVVV-android/**.gradle"
- "desktop_version/VVVVVV-android/**.jar"
- "desktop_version/VVVVVV-android/**.properties"
- ".github/workflows/android.yml"
env:
SRC_DIR_PATH: VVVVVV/desktop_version/VVVVVV-android
jobs:
build:
name: Build (Android)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: true
path: 'VVVVVV'
- uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '17'
cache: 'gradle'
- uses: actions/checkout@v4
with:
repository: libsdl-org/SDL
ref: release-2.30.8
path: 'SDL'
- name: Build SDL
run: |
sudo apt-get -y install ninja-build
cd SDL
./build-scripts/android-prefab.sh
mvn install:install-file -Dfile=build-android-prefab/prefab-2.30.8/SDL2-2.30.8.aar -DpomFile=build-android-prefab/prefab-2.30.8/SDL2-2.30.8.pom
- name: Build
run: |
cd ${SRC_DIR_PATH}
./gradlew build

View file

@ -1,32 +1,7 @@
name: CI
# Only trigger workflow when code changes, or this file is changed.
# Android has a different workflow and different rules.
on:
push:
paths:
- "desktop_version/CMakeLists.txt"
- "desktop_version/src/**.cpp"
- "desktop_version/src/**.c"
- "desktop_version/src/**.h"
- "third_party/**"
- ".github/workflows/ci.yml"
pull_request:
paths:
- "desktop_version/CMakeLists.txt"
- "desktop_version/src/**.cpp"
- "desktop_version/src/**.c"
- "desktop_version/src/**.h"
- "third_party/**"
- ".github/workflows/ci.yml"
permissions:
contents: read
statuses: write
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
# Trigger this workflow on push or pull request
on: [push, pull_request]
env:
SRC_DIR_PATH: desktop_version
@ -40,31 +15,17 @@ jobs:
env:
CXXFLAGS: -I/usr/local/include/SDL2
LDFLAGS: -L/usr/local/lib
HOMEBREW_NO_ENV_HINTS: 1 # Suppress brew update hints
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Cache Homebrew packages
id: cache-brew
uses: actions/cache@v3
with:
path: |
/usr/local/Cellar/ninja
/usr/local/Cellar/sdl2
/usr/local/opt/sdl2 # Symlink often used
key: ${{ runner.os }}-brew-${{ hashFiles('/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/ninja.rb', '/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/sdl2.rb') }} # Using hash of formula files if available, or a fixed key for simplicity if not easily determined
- uses: actions/checkout@v1
- name: Install dependencies
if: steps.cache-brew.outputs.cache-hit != 'true'
run: brew install ninja sdl2
run: brew install ninja sdl2 sdl2_mixer
- name: CMake configure (default version)
run: |
mkdir -p ${SRC_DIR_PATH}/build && cd ${SRC_DIR_PATH}/build
cmake -G Ninja ..
mkdir ${SRC_DIR_PATH}/build && cd ${SRC_DIR_PATH}/build
cmake -GNinja ..
- name: Build (default version)
run: ninja -C ${SRC_DIR_PATH}/build
@ -83,98 +44,126 @@ jobs:
- name: Build (M&P)
run: ninja -C ${SRC_DIR_PATH}/build
- name: CMake configure (no custom levels)
run: |
cd ${SRC_DIR_PATH}/build
cmake -DMAKEANDPLAY=OFF -DCUSTOM_LEVEL_SUPPORT=DISABLED ..
- name: Build (no custom levels)
run: ninja -C ${SRC_DIR_PATH}/build
- name: CMake configure (no editor)
run: |
cd ${SRC_DIR_PATH}/build
cmake -DCUSTOM_LEVEL_SUPPORT=NO_EDITOR ..
- name: Build (no editor)
run: ninja -C ${SRC_DIR_PATH}/build
build-lin:
name: Build (Steam Linux Runtime Sniper)
name: Build (CentOS 7)
runs-on: ubuntu-latest
container: registry.gitlab.steamos.cloud/steamrt/sniper/sdk:latest
container: ghcr.io/leo60228/vvvvvv-build@sha256:485448ad437653d47ceb068a0f2b910f4eb336107d340a1f0d828ca95c987985
env:
CXXFLAGS: -I/usr/local/include/SDL2
LDFLAGS: -L/usr/local/lib
steps:
- uses: actions/checkout@v4
with:
submodules: true
- uses: actions/checkout@v1
- name: CMake configure (default version)
run: |
mkdir -p ${SRC_DIR_PATH}/build && cd ${SRC_DIR_PATH}/build
cmake -G Ninja ..
mkdir ${SRC_DIR_PATH}/build && cd ${SRC_DIR_PATH}/build
cmake ..
- name: Build (default version)
run: ninja -C ${SRC_DIR_PATH}/build
run: make -j $(nproc) -C ${SRC_DIR_PATH}/build
- name: CMake configure (official)
run: |
cd ${SRC_DIR_PATH}/build
cmake -G Ninja -DOFFICIAL_BUILD=ON ..
cmake -DOFFICIAL_BUILD=ON ..
- name: Build (official)
run: ninja -C ${SRC_DIR_PATH}/build
run: |
make -j $(nproc) -C ${SRC_DIR_PATH}/build
- name: CMake configure (M&P)
run: |
cd ${SRC_DIR_PATH}/build
cmake -G Ninja -DOFFICIAL_BUILD=OFF -DMAKEANDPLAY=ON ..
cmake -DOFFICIAL_BUILD=OFF -DMAKEANDPLAY=ON ..
- name: Build (M&P)
run: ninja -C ${SRC_DIR_PATH}/build
run: make -j $(nproc) -C ${SRC_DIR_PATH}/build
- name: CMake configure (no custom levels)
run: |
cd ${SRC_DIR_PATH}/build
cmake -DMAKEANDPLAY=OFF -DCUSTOM_LEVEL_SUPPORT=DISABLED ..
- name: Build (no custom levels)
run: make -j $(nproc) -C ${SRC_DIR_PATH}/build
- name: CMake configure (no editor)
run: |
cd ${SRC_DIR_PATH}/build
cmake -DCUSTOM_LEVEL_SUPPORT=NO_EDITOR ..
- name: Build (no editor)
run: make -j $(nproc) -C ${SRC_DIR_PATH}/build
build-win:
name: Build (windows-latest)
runs-on: windows-latest
env:
SDL_VERSION: 2.26.0
steps:
- uses: actions/checkout@v4
with:
submodules: true
- uses: actions/checkout@v1
- name: Cache SDL
id: cache-windows-sdl
uses: actions/cache@v3
env:
cache-name: cache-sdl
with:
path: C:\SDL2-*
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.SDL_VERSION }}
- if: ${{ steps.cache-windows-sdl.outputs.cache-hit != 'true' }}
name: Download SDL if not cached
- name: Install dependencies (Windows)
run: |
Invoke-WebRequest "https://github.com/libsdl-org/SDL/releases/download/release-$env:SDL_VERSION/SDL2-devel-$env:SDL_VERSION-VC.zip" -OutFile C:\SDL.zip
Expand-Archive C:\SDL.zip -DestinationPath C:\
- name: CMake initial configure/generate
run: |
mkdir $env:SRC_DIR_PATH/build
cd $env:SRC_DIR_PATH/build
$env:LDFLAGS = "/LIBPATH:C:\SDL2-$env:SDL_VERSION\lib\x86 "
cmake -G "Visual Studio 17 2022" -A Win32 `
-DSDL2_INCLUDE_DIRS="C:\SDL2-$env:SDL_VERSION\include" `
-DSDL2_LIBRARIES="SDL2;SDL2main" ..
vcpkg install sdl2 sdl2-mixer
- name: CMake configure (default version)
run: |
cd $env:SRC_DIR_PATH/build
cmake ..
cd $env:SRC_DIR_PATH
$env:LDFLAGS = "/LIBPATH:$env:VCPKG_INSTALLATION_ROOT\installed\x86-windows\lib "
$env:LDFLAGS += "/LIBPATH:$env:VCPKG_INSTALLATION_ROOT\installed\x86-windows\lib\manual-link"
cmake -G "Visual Studio 16 2019" -A Win32 `
-DSDL2_INCLUDE_DIRS="$env:VCPKG_INSTALLATION_ROOT\installed\x86-windows\include\SDL2" `
-DSDL2_LIBRARIES="SDL2;SDL2main;SDL2_mixer" .
- name: Build (default version)
run: |
cd $env:SRC_DIR_PATH/build
cd $env:SRC_DIR_PATH
cmake --build .
- name: CMake configure (official)
run: |
cd $env:SRC_DIR_PATH/build
cmake -DOFFICIAL_BUILD=ON ..
cd $env:SRC_DIR_PATH
cmake -DOFFICIAL_BUILD=ON .
- name: Build (official)
run: |
cd $env:SRC_DIR_PATH/build
cd $env:SRC_DIR_PATH
cmake --build .
- name: CMake configure (M&P)
run: |
cd $env:SRC_DIR_PATH/build
cmake -DOFFICIAL_BUILD=OFF -DMAKEANDPLAY=ON ..
cd $env:SRC_DIR_PATH
cmake -DOFFICIAL_BUILD=OFF -DMAKEANDPLAY=ON .
- name: Build (M&P)
run: |
cd $env:SRC_DIR_PATH/build
cd $env:SRC_DIR_PATH
cmake --build .
- name: CMake configure (no custom levels)
run: |
cd $env:SRC_DIR_PATH
cmake -DMAKEANDPLAY=OFF -DCUSTOM_LEVEL_SUPPORT=DISABLED .
- name: Build (no custom levels)
run: |
cd $env:SRC_DIR_PATH
cmake --build .
- name: CMake configure (no editor)
run: |
cd $env:SRC_DIR_PATH
cmake -DCUSTOM_LEVEL_SUPPORT=NO_EDITOR .
- name: Build (no editor)
run: |
cd $env:SRC_DIR_PATH
cmake --build .

18
.gitmodules vendored
View file

@ -1,18 +0,0 @@
[submodule "third_party/lodepng"]
path = third_party/lodepng
url = https://github.com/lvandeve/lodepng
[submodule "third_party/physfs"]
path = third_party/physfs
url = https://github.com/icculus/physfs/
[submodule "third_party/tinyxml2"]
path = third_party/tinyxml2
url = https://github.com/leethomason/tinyxml2/
[submodule "third_party/FAudio"]
path = third_party/FAudio
url = https://github.com/FNA-XNA/FAudio
[submodule "third_party/c-hashmap"]
path = third_party/c-hashmap
url = https://github.com/Mashpoe/c-hashmap
[submodule "third_party/SheenBidi"]
path = third_party/SheenBidi
url = https://github.com/Tehreer/SheenBidi

View file

@ -1,5 +1,3 @@
VVVVVV's source code is made available under a custom license. Basically, you can compile yourself a copy, for free, for personal use. But if you want to distribute a compiled version of the game, you might need permission first. See the [License exceptions](License%20exceptions.md) page for more information.
VVVVVV Source Code License v1.0
-------
Last updated on January 7th, 2020.

View file

@ -1,26 +1,24 @@
VVVVVV's source code is made available under a [custom license](LICENSE.md), which states that you must not distribute any materials from the game (i.e. the game's assets) which are not included in this repo unless approved by us in writing. In general, if you're interested in creating something that falls outside the license terms, get in touch with [Terry](http://distractionware.com/email/)!
There is an important general exception: if you're compiling a [Make
and Play](https://thelettervsixtim.es/makeandplay/) version of the game, then you can you freely distribute the game's assets.
The following is a list of projects which have been given permission by Terry to distribute the assets with distributions of the game, and under what conditions.
Exceptions granted to the VVVVVV source code license
-------
Last updated on January 23rd, 2024.
Last updated on November 22nd, 2020.
VVVVVV's source code is made available under a [custom license](LICENSE.md), which states that you must not distribute any materials from the game (i.e. the game's assets) which are not included in this repo unless approved by us in writing. The following is a list of projects which have been given permission by Terry to distribute the assets with distributions of the game, and under what conditions.
| Project | Creator | Description | Conditions | Link |
|---|---|---|---|---|
| Any distribution of the VVVVVV: Make and Play edition | | All distributions and packages of the Make and Play edition can freely distribute the data assets, so long as they compile with the makeandplay define and do not distribute the original levels.| Must compile with the makeandplay define set, cannot distribute the original levels. | |
| VVVVVV: Make and Play Edition |[Terry Cavanagh](http://distractionware.com/)|The free and official version of VVVVVV that includes player levels, and the tools to create your own levels, but does not include the original levels from the game.| Must compile with the makeandplay define set, cannot distribute the original levels. | [download](https://thelettervsixtim.es/makeandplay/) |
| Ved | [Dav999 and InfoTeddy](https://github.com/Daaaav/Ved/graphs/contributors) | An external editor for VVVVVV levels. | No conditions. | [download](https://tolp.nl/ved/), [github repo](https://github.com/Daaaav/Ved) |
| Ved | [Dav999 and InfoTeddy](https://gitgud.io/Dav999/ved/-/graphs/master) | An external editor for VVVVVV levels. | No conditions. | [download](https://tolp.nl/ved/), [gitlab](https://gitgud.io/Dav999/ved) |
| VVVVVV: Community Edition | https://github.com/v6cord/VVVVVV-CE/graphs/contributors | Community fork of VVVVVV focused on expanding the capabilities of player levels. | Must compile with the makeandplay define set, cannot distribute the original levels. | [github repo](https://github.com/v6cord/VVVVVV-CE) |
| VVVVVVwasm|kotborealis|Web Assembly port of VVVVVV| Must compile with the makeandplay define set, cannot distribute the original levels. | [github repo](https://github.com/kotborealis/VVVVVVwasm) |
| cursed_vvvvvv.exe | [MustardBucket](https://twitter.com/mustard_bucket/) | Modified version of VVVVVV where instead of flipping gravity you jump normally, can jump multiple times, and wall jump. | Make it impossible to revert to ordinary flipping behaviour. | [download](https://mustardbucket.itch.io/cursed-vvvvvv?secret=O0KvS02wD473pXBF9avreZsww), [twitter gif](https://twitter.com/mustard_bucket/status/1216272971779670016) |
| Haiku Port | [Julius C. Enriquez](https://github.com/win8linux) | Port for the Haiku operating system. | Display the following text in the Haiku package to make it clear that this is an exception: "VVVVVV is a commercial game! The author has given special permission to make this Haiku version available for free. If you enjoy the game, please consider purchasing a copy at [thelettervsixtim.es](http://thelettervsixtim.es)." | [haiku recipe](https://github.com/haikuports/haikuports/tree/master/games-arcade/vvvvvv), [haiku data.zip recipe](https://github.com/haikuports/haikuports/tree/master/games-arcade/vvvvvv_data) |
| Dreamcast Port | [Gustavo Aranda](https://github.com/gusarba/) | Port for the Sega Dreamcast. | Permission is given to distribute a ready-to-use CD image file for the Sega Dreamcast containing the data.zip assets for non commercial use only. | [github repo](https://github.com/gusarba/VVVVVVDC)|
| XBox One/UWP Port | [tunip3](https://github.com/tunip3) | Port for XBOX ONE (DURANGO) via UWP. | Permission is given to distribute a pre-compiled package (containing the data.zip assets) for people to run on development mode xboxes, for non commercial use only. | [github repo](https://github.com/tunip3/DURANGO-V6)|
| armhf Port | [johnnyonFlame](https://github.com/johnnyonFlame/) | Armhf port for Raspberry PI and other SBC devices| Permission is for non commercial use only. Display the following text in the readme to make it clear that this is an exception: "VVVVVV is a commercial game! The author has given special permission to make this port available for free. If you enjoy the game, please consider purchasing a copy at [thelettervsixtim.es](http://thelettervsixtim.es)."| [github release](https://github.com/JohnnyonFlame/VVVVVV/releases/tag/v2.4-r1) |
| PortMaster distributions of the game for Linux Handheld devices | [portmaster](https://portmaster.games/) | A port manager GUI for Linux handheld devices | Permission is for non commercial use only. Display the following text in the readme to make it clear that this is an exception: "VVVVVV is a commercial game! The author has given special permission to make this port available for free. If you enjoy the game, please consider purchasing a copy at [thelettervsixtim.es](http://thelettervsixtim.es)."| [website](https://portmaster.games/detail.html?name=vvvvvv) |
| Wii Port | [Alberto Mardegan](https://github.com/mardy/) | Port for the Nintendo Wii. | Permission is given to distribute a ready-to-use build for the Nintendo Wii containing the data.zip assets for non commercial use only. | [github repo](https://github.com/mardy/VVVVVV/tree/wii) |
| Recalbox Port | [digitalLumberjack](https://gitlab.com/recalbox/recalbox) | Port for Recalbox project. | Display the following text in the readme to make it clear that this is an exception: "VVVVVV is a commercial game! The author has given special permission to make this port available for free. If you enjoy the game, please consider purchasing a copy at [thelettervsixtim.es](http://thelettervsixtim.es)." | [website](https://recalbox.com/) |
In addition, the following exceptions apply for any projects that match these descriptions:
| Project | Description | Conditions |
|---|---|---|
| Any distribution of the VVVVVV: Make and Play edition | All distributions and packages of the Make and Play edition can freely distribute the data assets, so long as they compile with the makeandplay define and do not distribute the original levels.| Must compile with the makeandplay define set, cannot distribute the original levels. |
In general, if you're interested in creating something that falls outside the license terms, [get in touch with Terry!](http://distractionware.com/email/)

View file

@ -1,23 +1,22 @@
![logo](logo.gif "VVVVVV")
This is the source code to VVVVVV, version 2.0+. For more context about this release, see the [announcement](http://distractionware.com/blog/2020/01/vvvvvv-is-now-open-source/) on Terry's blog!
This is the source code to VVVVVV, the 2010 indie game by [Terry Cavanagh](http://distractionware.com/), with music by [Magnus Pålsson](http://souleye.madtracker.net/). You can read the [announcement](http://distractionware.com/blog/2020/01/vvvvvv-is-now-open-source/) of the source code release on Terry's blog!
License
-------
VVVVVV's source code is made available under a custom license. See [LICENSE.md](LICENSE.md) for more details.
The source code for the desktop version is in [this folder](desktop_version).
In general, if you're interested in creating something that falls outside the license terms, get in touch with Terry and we'll talk about it!
VVVVVV is still commercially available at [thelettervsixtim.es](https://thelettervsixtim.es/) if you'd like to support it, but you are completely free to compile the game for your own personal use. If you're interested in distributing a compiled version of the game, see [LICENSE.md](LICENSE.md) for more information.
Discussion about VVVVVV updates mainly happens on the "unofficial" [VVVVVV discord](https://discord.gg/Zf7Nzea), in the `vvvvvv-code` channel.
Credits
Authors
-------
- Created by [Terry Cavanagh](http://distractionware.com/)
- Room Names by [Bennett Foddy](http://www.foddy.net)
- Music by [Magnus Pålsson](https://magnuspalsson.com/)
- Metal Soundtrack by [FamilyJules](https://link.space/@familyjules)
- Music by [Magnus Pålsson](http://souleye.madtracker.net/)
- Metal Soundtrack by [FamilyJules](http://familyjules7x.com/)
- 2.0 Update (C++ Port) by [Simon Roth](http://www.machinestudios.co.uk)
- 2.2 Update (SDL2/PhysicsFS/Steamworks port) by [Ethan Lee](http://www.flibitijibibo.com/)
- Additional coding by [Misa Kai](https://infoteddy.info/)
- Beta Testing by Sam Kaplan and Pauli Kohberger
- Ending Picture by Pauli Kohberger
- Localisations by [our localisation teams](desktop_version/TRANSLATORS.txt)
- With additional contributions by [many others here on github](desktop_version/CONTRIBUTORS.txt) <3
Versions
------------
There are two versions of the VVVVVV source code available - the [desktop version](https://github.com/TerryCavanagh/VVVVVV/tree/master/desktop_version) (based on the C++ port, and currently live on Steam), and the [mobile version](https://github.com/TerryCavanagh/VVVVVV/tree/master/mobile_version) (based on a fork of the original flash source code, and currently live on iOS and Android).

View file

@ -10,7 +10,6 @@ VVVVVV
*.a
*.gch
src/Version.h.out
src/InterimVersion.out.c
# Game data
data.zip

Binary file not shown.

Before

Width:  |  Height:  |  Size: 287 KiB

View file

@ -1,14 +0,0 @@
{
"images" : [
{
"filename" : "AppIcon.png",
"idiom" : "universal",
"platform" : "ios",
"size" : "1024x1024"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View file

@ -1,6 +0,0 @@
{
"info" : {
"author" : "xcode",
"version" : 1
}
}

View file

@ -1,13 +1,16 @@
# CMake File for VVVVVV
# Written by Ethan "flibitijibibo" Lee
cmake_minimum_required(VERSION 2.8.12...3.5)
cmake_minimum_required(VERSION 2.8.12)
# CMake Options
option(ENABLE_WARNINGS "Enable compilation warnings" ON)
option(ENABLE_WERROR "Treat compilation warnings as errors" OFF)
option(BUNDLE_DEPENDENCIES "Use bundled TinyXML-2, PhysicsFS, and FAudio (if disabled, TinyXML-2, PhysicsFS, and FAudio will be dynamically linked; LodePNG, C-HashMap and SheenBidi will still be statically linked)" ON)
option(BUNDLE_DEPENDENCIES "Use bundled TinyXML-2, PhysicsFS, and UTF8-CPP (if disabled, TinyXML-2 and PhysicsFS will be dynamically linked, LodePNG and UTF8-CPP will still be statically linked)" ON)
set(CUSTOM_LEVEL_SUPPORT ENABLED CACHE STRING "Optionally disable playing and/or editing of custom levels")
set_property(CACHE CUSTOM_LEVEL_SUPPORT PROPERTY STRINGS ENABLED NO_EDITOR DISABLED)
option(STEAM "Use the Steam API" OFF)
option(GOG "Use the GOG API" OFF)
@ -17,489 +20,316 @@ option(OFFICIAL_BUILD "Compile an official build of the game" OFF)
option(MAKEANDPLAY "Compile a version of the game without the main campaign (provided for convenience; consider modifying MakeAndPlay.h instead" OFF)
if(OFFICIAL_BUILD AND NOT MAKEANDPLAY)
set(STEAM ON)
set(GOG ON)
set(STEAM ON)
set(GOG ON)
endif()
option(REMOVE_ABSOLUTE_PATHS "If supported by the compiler, replace all absolute paths to source directories compiled into the binary (if any) with relative paths" ON)
if(${CMAKE_VERSION} VERSION_LESS "3.1.3")
message(WARNING "Your CMake version is too old; set -std=c90 -std=c++98 yourself!")
else()
set(CMAKE_C_STANDARD 90)
set(CMAKE_C_EXTENSIONS OFF)
set(CMAKE_CXX_STANDARD 98)
set(CMAKE_CXX_EXTENSIONS OFF)
endif()
# Architecture Flags
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
# Wow, Apple is a huge jerk these days huh?
set(OSX_10_9_SDK_PATH /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk)
if(NOT CMAKE_OSX_SYSROOT)
if(IS_DIRECTORY ${OSX_10_9_SDK_PATH})
set(CMAKE_OSX_SYSROOT ${OSX_10_9_SDK_PATH})
else()
message(WARNING "CMAKE_OSX_SYSROOT not set and macOS 10.9 SDK not found! Using default one.")
endif()
endif()
set(CMAKE_OSX_DEPLOYMENT_TARGET 10.9)
link_directories(/usr/local/lib)
add_compile_options(-Werror=partial-availability)
elseif(CMAKE_SYSTEM_NAME STREQUAL "iOS")
set(CMAKE_OSX_DEPLOYMENT_TARGET 12.0) # SDL goes back to iOS 8.0, but modern Xcode doesn't
if(APPLE)
# Wow, Apple is a huge jerk these days huh?
set(OSX_10_9_SDK_PATH /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk)
if(NOT CMAKE_OSX_SYSROOT)
if(IS_DIRECTORY ${OSX_10_9_SDK_PATH})
set(CMAKE_OSX_SYSROOT ${OSX_10_9_SDK_PATH})
else()
message(WARNING "CMAKE_OSX_SYSROOT not set and macOS 10.9 SDK not found! Using default one.")
endif()
endif()
set(CMAKE_OSX_DEPLOYMENT_TARGET 10.9)
link_directories(/usr/local/lib)
add_compile_options(-Werror=partial-availability)
endif()
project(VVVVVV)
if(APPLE)
message(STATUS "Using macOS SDK at ${CMAKE_OSX_SYSROOT}")
message(STATUS "Using macOS SDK at ${CMAKE_OSX_SYSROOT}")
endif()
# RPATH
if(NOT WIN32)
if(CMAKE_SYSTEM_NAME STREQUAL "iOS")
set(BIN_LIBROOT "Frameworks")
set(BIN_RPATH "@executable_path/Frameworks")
elseif(APPLE)
set(BIN_LIBROOT "osx")
set(BIN_RPATH "@executable_path/osx")
elseif(CMAKE_SIZEOF_VOID_P MATCHES "8")
set(BIN_LIBROOT "lib64")
set(BIN_RPATH "\$ORIGIN/lib64")
set(CMAKE_EXE_LINKER_FLAGS "-Wl,--disable-new-dtags")
else()
set(BIN_LIBROOT "lib")
set(BIN_RPATH "\$ORIGIN/lib")
endif()
set(CMAKE_SKIP_BUILD_RPATH TRUE)
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
set(CMAKE_INSTALL_RPATH ${BIN_RPATH})
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH FALSE)
if(APPLE)
set(BIN_LIBROOT "osx")
set(BIN_RPATH "@executable_path/osx")
elseif(CMAKE_SIZEOF_VOID_P MATCHES "8")
set(BIN_LIBROOT "lib64")
set(BIN_RPATH "\$ORIGIN/lib64")
else()
set(BIN_LIBROOT "lib")
set(BIN_RPATH "\$ORIGIN/lib")
endif()
set(CMAKE_SKIP_BUILD_RPATH TRUE)
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
set(CMAKE_INSTALL_RPATH ${BIN_RPATH})
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH FALSE)
endif()
# Source Lists
set(VVV_CXX_SRC
src/BinaryBlob.cpp
src/BlockV.cpp
src/ButtonGlyphs.cpp
src/CustomLevels.cpp
src/CWrappers.cpp
src/Editor.cpp
src/Ent.cpp
src/Entity.cpp
src/FileSystemUtils.cpp
src/Finalclass.cpp
src/Font.cpp
src/FontBidi.cpp
src/Game.cpp
src/Graphics.cpp
src/GraphicsResources.cpp
src/GraphicsUtil.cpp
src/IMERender.cpp
src/Input.cpp
src/KeyPoll.cpp
src/Labclass.cpp
src/LevelDebugger.cpp
src/Localization.cpp
src/LocalizationMaint.cpp
src/LocalizationStorage.cpp
src/Logic.cpp
src/Map.cpp
src/Music.cpp
src/Otherlevel.cpp
src/preloader.cpp
src/Render.cpp
src/RenderFixed.cpp
src/RoomnameTranslator.cpp
src/Screen.cpp
src/Script.cpp
src/Scripts.cpp
src/Spacestation2.cpp
src/TerminalScripts.cpp
src/Textbox.cpp
src/Tower.cpp
src/UtilityClass.cpp
src/WarpClass.cpp
src/XMLUtils.cpp
src/main.cpp
)
set(VVV_C_SRC
src/DeferCallbacks.c
src/GlitchrunnerMode.c
src/Network.c
src/Textbook.c
src/ThirdPartyDeps.c
src/UTF8.c
src/VFormat.c
src/Vlogging.c
src/Xoshiro.c
../third_party/physfs/extras/physfsrwops.c
set(VVV_SRC
src/BinaryBlob.cpp
src/BlockV.cpp
src/Ent.cpp
src/Entity.cpp
src/FileSystemUtils.cpp
src/Finalclass.cpp
src/Game.cpp
src/Graphics.cpp
src/GraphicsResources.cpp
src/GraphicsUtil.cpp
src/Input.cpp
src/KeyPoll.cpp
src/Labclass.cpp
src/Logic.cpp
src/Map.cpp
src/Music.cpp
src/Otherlevel.cpp
src/preloader.cpp
src/Render.cpp
src/RenderFixed.cpp
src/Screen.cpp
src/Script.cpp
src/Scripts.cpp
src/SoundSystem.cpp
src/Spacestation2.cpp
src/TerminalScripts.cpp
src/Textbox.cpp
src/Tower.cpp
src/UtilityClass.cpp
src/WarpClass.cpp
src/XMLUtils.cpp
src/main.cpp
src/DeferCallbacks.c
src/GlitchrunnerMode.c
src/Network.c
src/ThirdPartyDeps.c
src/Xoshiro.c
)
if(NOT CUSTOM_LEVEL_SUPPORT STREQUAL "DISABLED")
list(APPEND VVV_SRC src/editor.cpp)
endif()
if(STEAM)
list(APPEND VVV_C_SRC src/SteamNetwork.c)
list(APPEND VVV_SRC src/SteamNetwork.c)
endif()
if(GOG)
list(APPEND VVV_C_SRC src/GOGNetwork.c)
list(APPEND VVV_SRC src/GOGNetwork.c)
endif()
if(CMAKE_SYSTEM_NAME STREQUAL "iOS")
list(APPEND VVV_C_SRC src/SDL_uikit_main.c)
endif()
set(VVV_SRC ${VVV_CXX_SRC} ${VVV_C_SRC})
# Executable information
if(WIN32)
add_executable(VVVVVV WIN32 ${VVV_SRC} icon.rc)
elseif(ANDROID)
add_library(VVVVVV SHARED ${VVV_SRC})
elseif(CMAKE_SYSTEM_NAME STREQUAL "iOS")
file(GLOB_RECURSE REPO_RESOURCES "fonts/*" "lang/*")
add_executable(VVVVVV MACOSX_BUNDLE ${VVV_SRC} ${DATA_ZIP} AppIcon.xcassets ${REPO_RESOURCES})
set_target_properties(VVVVVV PROPERTIES
XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "com.distractionware.vvvvvvmobile"
XCODE_ATTRIBUTE_PRODUCT_NAME "VVVVVV"
XCODE_ATTRIBUTE_TARGETED_DEVICE_FAMILY "1,2" # iPhone, iPad
XCODE_ATTRIBUTE_CURRENT_PROJECT_VERSION "2.5"
XCODE_ATTRIBUTE_MARKETING_VERSION "2.5"
XCODE_ATTRIBUTE_ASSETCATALOG_COMPILER_APPICON_NAME AppIcon
XCODE_ATTRIBUTE_GENERATE_INFOPLIST_FILE YES
MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/Info.plist"
XCODE_ATTRIBUTE_INFOPLIST_KEY_LSSupportsOpeningDocumentsInPlace YES
XCODE_ATTRIBUTE_INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents YES
RESOURCE "${DATA_ZIP};AppIcon.xcassets"
)
foreach(REPO_FILE ${REPO_RESOURCES})
file(RELATIVE_PATH REPO_FILE_REL "${CMAKE_CURRENT_SOURCE_DIR}" ${REPO_FILE})
get_filename_component(REPO_FILE_DIR ${REPO_FILE_REL} DIRECTORY)
set_property(SOURCE ${REPO_FILE} PROPERTY MACOSX_PACKAGE_LOCATION "Resources/${REPO_FILE_DIR}")
source_group("Resources/${REPO_FILE_DIR}" FILES "${REPO_FILE}")
endforeach()
add_executable(VVVVVV WIN32 ${VVV_SRC} icon.rc)
else()
add_executable(VVVVVV ${VVV_SRC})
add_executable(VVVVVV ${VVV_SRC})
endif()
# Include Directories
if(BUNDLE_DEPENDENCIES)
target_include_directories(
VVVVVV PRIVATE
src
../third_party
../third_party/tinyxml2
../third_party/physfs/src
../third_party/physfs/extras
../third_party/lodepng
../third_party/c-hashmap
../third_party/FAudio/include
../third_party/FAudio/src
../third_party/SheenBidi/Headers
)
target_include_directories(
VVVVVV PRIVATE
src
../third_party/tinyxml2
../third_party/physfs
../third_party/lodepng
../third_party/utfcpp/source
)
else()
target_include_directories(
VVVVVV PRIVATE
src
../third_party
../third_party/lodepng
../third_party/physfs/extras
../third_party/c-hashmap
../third_party/FAudio/src
../third_party/SheenBidi/Headers
)
target_include_directories(
VVVVVV PRIVATE
src
../third_party/lodepng
)
endif()
if(MAKEANDPLAY)
target_compile_definitions(VVVVVV PRIVATE -DMAKEANDPLAY)
target_compile_definitions(VVVVVV PRIVATE -DMAKEANDPLAY)
endif()
if(STEAM)
target_compile_definitions(VVVVVV PRIVATE -DSTEAM_NETWORK)
target_compile_definitions(VVVVVV PRIVATE -DSTEAM_NETWORK)
endif()
if(GOG)
target_compile_definitions(VVVVVV PRIVATE -DGOG_NETWORK)
target_compile_definitions(VVVVVV PRIVATE -DGOG_NETWORK)
endif()
set(XML2_SRC
../third_party/tinyxml2/tinyxml2.cpp
)
set(FAUDIO_SRC
../third_party/FAudio/src/FAudio.c
../third_party/FAudio/src/FAudio_internal.c
../third_party/FAudio/src/FAudio_internal_simd.c
../third_party/FAudio/src/FAudio_operationset.c
../third_party/FAudio/src/FAudio_platform_sdl2.c
../third_party/tinyxml2/tinyxml2.cpp
)
set(PFS_SRC
../third_party/physfs/src/physfs.c
../third_party/physfs/src/physfs_archiver_dir.c
../third_party/physfs/src/physfs_archiver_unpacked.c
../third_party/physfs/src/physfs_archiver_zip.c
../third_party/physfs/src/physfs_byteorder.c
../third_party/physfs/src/physfs_unicode.c
../third_party/physfs/src/physfs_platform_posix.c
../third_party/physfs/src/physfs_platform_unix.c
../third_party/physfs/src/physfs_platform_windows.c
../third_party/physfs/src/physfs_platform_haiku.cpp
../third_party/physfs/src/physfs_platform_android.c
../third_party/physfs/physfs.c
../third_party/physfs/physfs_archiver_dir.c
../third_party/physfs/physfs_archiver_unpacked.c
../third_party/physfs/physfs_archiver_zip.c
../third_party/physfs/physfs_byteorder.c
../third_party/physfs/physfs_unicode.c
../third_party/physfs/physfs_platform_posix.c
../third_party/physfs/physfs_platform_unix.c
../third_party/physfs/physfs_platform_windows.c
../third_party/physfs/physfs_platform_haiku.cpp
)
if(APPLE)
# Are you noticing a pattern with this Apple crap yet?
set(PFS_SRC ${PFS_SRC} ../third_party/physfs/src/physfs_platform_apple.m)
# Are you noticing a pattern with this Apple crap yet?
set(PFS_SRC ${PFS_SRC} ../third_party/physfs/physfs_platform_apple.m)
endif()
set(PNG_SRC src/lodepng_wrapper.c)
set(CHM_SRC ../third_party/c-hashmap/map.c)
set(SBIDI_SRC ../third_party/SheenBidi/Source/SheenBidi.c)
set(PNG_SRC ../third_party/lodepng/lodepng.c)
if(NOT OFFICIAL_BUILD)
# Add interim commit hash and its date to the build
# Add interim commit hash and its date to the build
# These filenames have to be qualified, because when we run
# the CMake script, its work dir gets set to the build folder
set(VERSION_INPUT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/src/InterimVersion.in.c)
set(VERSION_OUTPUT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/src/InterimVersion.out.c)
# find_package sets GIT_FOUND and GIT_EXECUTABLE
find_package(Git)
add_custom_command(
# This OUTPUT line is required for this to be ran every time
OUTPUT ${VERSION_OUTPUT_FILE} ${CMAKE_CURRENT_SOURCE_DIR}/src/_dummy.c
COMMAND ${CMAKE_COMMAND}
# These args have to be passed through, otherwise the script can't see them
# Also, these args have to come BEFORE `-P`! (Otherwise it fails with an unclear error)
-DINPUT_FILE=${VERSION_INPUT_FILE}
-DOUTPUT_FILE=${VERSION_OUTPUT_FILE}
-P ${CMAKE_CURRENT_SOURCE_DIR}/version.cmake
)
if(GIT_FOUND)
# These filenames have to be qualified, because when we run
# the CMake script, its work dir gets set to the build folder
set(VERSION_INPUT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/src/Version.h.in)
set(VERSION_OUTPUT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/src/Version.h.out)
target_compile_definitions(VVVVVV PRIVATE -DINTERIM_VERSION_EXISTS)
add_custom_target(
GenerateVersion ALL
# This BYPRODUCTS line is required for this to be ran every time
BYPRODUCTS ${VERSION_OUTPUT_FILE}
COMMAND ${CMAKE_COMMAND}
# These args have to be passed through, otherwise the script can't see them
# Also, these args have to come BEFORE `-P`! (Otherwise it fails with an unclear error)
-DGIT_EXECUTABLE=${GIT_EXECUTABLE}
-DINPUT_FILE=${VERSION_INPUT_FILE}
-DOUTPUT_FILE=${VERSION_OUTPUT_FILE}
-P ${CMAKE_CURRENT_SOURCE_DIR}/version.cmake
)
add_library(InterimVersion STATIC src/InterimVersion.out.c)
list(APPEND STATIC_LIBRARIES InterimVersion)
add_dependencies(VVVVVV GenerateVersion)
# This lets Version.h know that Version.h.out exists
add_definitions(-DVERSION_H_OUT_EXISTS)
endif()
endif()
# Build options
if(ENABLE_WARNINGS)
# The weird syntax is due to CMake generator expressions.
# Saves quite a few lines and boilerplate at the price of readability.
target_compile_options(VVVVVV PRIVATE
$<$<OR:$<CXX_COMPILER_ID:GNU>,$<CXX_COMPILER_ID:Clang>,$<CXX_COMPILER_ID:AppleClang>>:
-Wall -Wpedantic $<$<BOOL:${ENABLE_WERROR}>:-Werror>>
$<$<CXX_COMPILER_ID:MSVC>:
/W4 $<$<BOOL:${ENABLE_WERROR}>:/WX>>)
# The weird syntax is due to CMake generator expressions.
# Saves quite a few lines and boilerplate at the price of readability.
target_compile_options(VVVVVV PRIVATE
$<$<OR:$<CXX_COMPILER_ID:GNU>,$<CXX_COMPILER_ID:Clang>,$<CXX_COMPILER_ID:AppleClang>>:
-Wall -Wpedantic $<$<BOOL:${ENABLE_WERROR}>:-Werror>>
$<$<CXX_COMPILER_ID:MSVC>:
/W4 $<$<BOOL:${ENABLE_WERROR}>:/WX>>)
endif()
if(CUSTOM_LEVEL_SUPPORT STREQUAL "NO_EDITOR")
add_definitions(-DNO_EDITOR)
elseif(CUSTOM_LEVEL_SUPPORT STREQUAL "DISABLED")
add_definitions(-DNO_CUSTOM_LEVELS -DNO_EDITOR)
endif()
if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
set(SUPPORTS_IMPLICIT_FALLTHROUGH TRUE)
set(SUPPORTS_IMPLICIT_FALLTHROUGH TRUE)
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 7.0)
set(SUPPORTS_IMPLICIT_FALLTHROUGH TRUE)
else()
set(SUPPORTS_IMPLICIT_FALLTHROUGH FALSE)
endif()
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 7.0)
set(SUPPORTS_IMPLICIT_FALLTHROUGH TRUE)
else()
set(SUPPORTS_IMPLICIT_FALLTHROUGH FALSE)
endif()
else()
set(SUPPORTS_IMPLICIT_FALLTHROUGH FALSE)
set(SUPPORTS_IMPLICIT_FALLTHROUGH FALSE)
endif()
if(SUPPORTS_IMPLICIT_FALLTHROUGH)
target_compile_options(VVVVVV PRIVATE -Werror=implicit-fallthrough)
target_compile_options(VVVVVV PRIVATE -Werror=implicit-fallthrough)
endif()
if(MSVC)
# Disable MSVC warnings about implicit conversion
target_compile_options(VVVVVV PRIVATE /wd4244)
# Disable MSVC warnings about implicit conversion
target_compile_options(VVVVVV PRIVATE /wd4244)
endif()
# Disable warnings about `long long` in C++03 (from including PhysFS)
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
target_compile_options(VVVVVV PRIVATE -Wno-long-long)
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
target_compile_options(VVVVVV PRIVATE -Wno-c++11-long-long)
endif()
# Disable warnings about flexible array members in C++ (from including FAudio)
if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
target_compile_options(VVVVVV PRIVATE -Wno-c99-extensions)
endif()
# Set standards version, disable exceptions and RTTI
if(MSVC)
# MSVC doesn't have /std:c99 or /std:c++98 switches!
# Disable exceptions
string(REGEX REPLACE "/EH[a-z]+" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc")
# MSVC does not officially support disabling exceptions,
# so this is as far as we are willing to go to disable them.
string(REGEX REPLACE "/EH[a-z]+" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
string(REPLACE "/GR" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
set_source_files_properties(${VVV_CXX_SRC} PROPERTIES COMPILE_FLAGS "/EHsc /GR-")
if(MSVC_VERSION GREATER 1900)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /utf-8")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /utf-8")
endif()
# Disable RTTI
string(REGEX REPLACE "/GR" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /GR-")
else()
string(REGEX REPLACE "-std=[a-z0-9]+" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
set_source_files_properties(${VVV_C_SRC} PROPERTIES COMPILE_FLAGS -std=c99)
# Disable exceptions
string(REGEX REPLACE "-fexceptions" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions")
string(REGEX REPLACE "-std=[a-z0-9+]+" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
string(REPLACE "-fexceptions" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
string(REPLACE "-frtti" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
set_source_files_properties(${VVV_CXX_SRC} PROPERTIES COMPILE_FLAGS "-std=c++98 -fno-exceptions -fno-rtti")
# Dependencies (as needed)
set_source_files_properties(${FAUDIO_SRC} PROPERTIES COMPILE_FLAGS -std=c99)
set_source_files_properties(${CHM_SRC} PROPERTIES COMPILE_FLAGS -std=c99)
# Disable RTTI
string(REGEX REPLACE "-frtti" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti")
endif()
# Unfortunately, it doesn't seem like distros package LodePNG
add_library(lodepng-static STATIC ${PNG_SRC})
target_compile_definitions(lodepng-static PRIVATE
-DLODEPNG_NO_COMPILE_ALLOCATORS
-DLODEPNG_NO_COMPILE_DISK
)
add_library(c-hashmap-static STATIC ${CHM_SRC})
add_library(sheenbidi-static STATIC ${SBIDI_SRC})
target_compile_definitions(sheenbidi-static PRIVATE
-DSB_CONFIG_UNITY
)
target_include_directories(sheenbidi-static PRIVATE
../third_party/SheenBidi/Headers
-DLODEPNG_NO_COMPILE_ALLOCATORS
-DLODEPNG_NO_COMPILE_DISK
-DLODEPNG_NO_COMPILE_ENCODER
)
if(BUNDLE_DEPENDENCIES)
list(APPEND STATIC_LIBRARIES physfs-static tinyxml2-static lodepng-static c-hashmap-static faudio-static sheenbidi-static)
add_library(tinyxml2-static STATIC ${XML2_SRC})
add_library(physfs-static STATIC ${PFS_SRC})
target_compile_definitions(physfs-static PRIVATE
-DPHYSFS_SUPPORTS_DEFAULT=0 -DPHYSFS_SUPPORTS_ZIP=1
)
# PhysFS needs some extensions...
if(${CMAKE_VERSION} VERSION_GREATER "3.1.3"
OR ${CMAKE_VERSION} VERSION_EQUAL "3.1.3")
set_property(TARGET physfs-static PROPERTY C_EXTENSIONS ON)
endif()
target_link_libraries(VVVVVV physfs-static tinyxml2-static lodepng-static)
else()
list(APPEND STATIC_LIBRARIES lodepng-static c-hashmap-static sheenbidi-static)
find_package(utf8cpp CONFIG)
target_link_libraries(VVVVVV physfs tinyxml2 utf8cpp lodepng-static)
endif()
if(BUNDLE_DEPENDENCIES)
add_library(tinyxml2-static STATIC ${XML2_SRC})
add_library(physfs-static STATIC ${PFS_SRC})
target_compile_definitions(physfs-static PRIVATE
-DPHYSFS_SUPPORTS_DEFAULT=0 -DPHYSFS_SUPPORTS_ZIP=1
)
add_library(faudio-static STATIC ${FAUDIO_SRC})
target_include_directories(
faudio-static PRIVATE
../third_party/FAudio/include
)
# Disable FAudio debug stuff in release mode. This needs a generator expression for CMake reasons(TM)
target_compile_definitions(faudio-static PRIVATE $<$<CONFIG:Release>:FAUDIO_DISABLE_DEBUGCONFIGURATION>)
target_link_libraries(VVVVVV ${STATIC_LIBRARIES})
else()
target_link_libraries(VVVVVV ${STATIC_LIBRARIES} physfs tinyxml2 FAudio)
endif()
if(MSVC)
# Statically link Microsoft's runtime library so end users don't have to install it (/MT)
# Also, build with multiple processors (/MP)
list(APPEND GLOBAL_COMPILE_FLAGS /MT /MP)
endif()
if(REMOVE_ABSOLUTE_PATHS)
if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 3.8)
set(SUPPORTS_DEBUG_PREFIX_MAP TRUE)
else()
set(SUPPORTS_DEBUG_PREFIX_MAP FALSE)
endif()
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 10.0)
set(SUPPORTS_FILE_PREFIX_MAP TRUE)
else()
set(SUPPORTS_FILE_PREFIX_MAP FALSE)
endif()
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
set(SUPPORTS_DEBUG_PREFIX_MAP TRUE)
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 8.0)
set(SUPPORTS_FILE_PREFIX_MAP TRUE)
else()
set(SUPPORTS_FILE_PREFIX_MAP FALSE)
endif()
else()
set(SUPPORTS_DEBUG_PREFIX_MAP FALSE)
set(SUPPORTS_FILE_PREFIX_MAP FALSE)
endif()
get_filename_component(REPO_DIR ../ ABSOLUTE)
# Remove absolute source paths from compiled binary
if(SUPPORTS_FILE_PREFIX_MAP)
list(APPEND GLOBAL_COMPILE_FLAGS -ffile-prefix-map=${REPO_DIR}=.)
elseif(SUPPORTS_DEBUG_PREFIX_MAP)
list(APPEND GLOBAL_COMPILE_FLAGS -fdebug-prefix-map=${REPO_DIR}=.)
endif()
endif()
target_compile_options(VVVVVV PRIVATE ${GLOBAL_COMPILE_FLAGS})
foreach(static_library IN LISTS STATIC_LIBRARIES)
target_compile_options(${static_library} PRIVATE ${GLOBAL_COMPILE_FLAGS})
endforeach(static_library)
# SDL2 Dependency (Detection pulled from FAudio)
if(DEFINED SDL2_INCLUDE_DIRS AND DEFINED SDL2_LIBRARIES)
message(STATUS "Using pre-defined SDL2 variables SDL2_INCLUDE_DIRS and SDL2_LIBRARIES")
target_include_directories(VVVVVV SYSTEM PRIVATE "$<BUILD_INTERFACE:${SDL2_INCLUDE_DIRS}>")
target_link_libraries(VVVVVV ${SDL2_LIBRARIES})
if(BUNDLE_DEPENDENCIES)
target_include_directories(faudio-static SYSTEM PRIVATE "$<BUILD_INTERFACE:${SDL2_INCLUDE_DIRS}>")
target_link_libraries(faudio-static ${SDL2_LIBRARIES})
endif()
elseif (EMSCRIPTEN)
message(STATUS "Using Emscripten SDL2")
target_compile_options(VVVVVV PUBLIC -sUSE_SDL=2)
target_link_libraries(VVVVVV -sUSE_SDL=2)
if(BUNDLE_DEPENDENCIES)
target_compile_options(faudio-static PUBLIC -sUSE_SDL=2)
target_link_libraries(faudio-static -sUSE_SDL=2)
endif()
elseif(DEFINED SDL2_FRAMEWORK)
message(STATUS "Using pre-defined SDL2 variable SDL2_FRAMEWORK")
target_include_directories(VVVVVV SYSTEM PRIVATE "$<BUILD_INTERFACE:${SDL2_FRAMEWORK}/Headers>")
target_link_libraries(VVVVVV ${SDL2_FRAMEWORK})
if(BUNDLE_DEPENDENCIES)
target_include_directories(faudio-static SYSTEM PRIVATE "$<BUILD_INTERFACE:${SDL2_FRAMEWORK}/Headers>")
target_link_libraries(faudio-static ${SDL2_FRAMEWORK})
endif()
set_target_properties(VVVVVV PROPERTIES XCODE_EMBED_FRAMEWORKS ${SDL2_FRAMEWORK})
message(STATUS "Using pre-defined SDL2 variables SDL2_INCLUDE_DIRS and SDL2_LIBRARIES")
target_include_directories(VVVVVV SYSTEM PRIVATE "$<BUILD_INTERFACE:${SDL2_INCLUDE_DIRS}>")
target_link_libraries(VVVVVV ${SDL2_LIBRARIES})
else()
# Only try to autodetect if both SDL2 variables aren't explicitly set
find_package(SDL2 CONFIG)
if(TARGET SDL2::SDL2)
message(STATUS "Using TARGET SDL2::SDL2")
target_link_libraries(VVVVVV SDL2::SDL2)
if(BUNDLE_DEPENDENCIES)
target_link_libraries(faudio-static SDL2::SDL2)
endif()
elseif(TARGET SDL2)
message(STATUS "Using TARGET SDL2")
target_link_libraries(VVVVVV SDL2)
if(BUNDLE_DEPENDENCIES)
target_link_libraries(faudio-static SDL2)
endif()
else()
message(STATUS "No TARGET SDL2::SDL2, or SDL2, using variables")
target_include_directories(VVVVVV SYSTEM PRIVATE "$<BUILD_INTERFACE:${SDL2_INCLUDE_DIRS}>")
target_link_libraries(VVVVVV ${SDL2_LIBRARIES})
if(BUNDLE_DEPENDENCIES)
target_include_directories(faudio-static SYSTEM PRIVATE "$<BUILD_INTERFACE:${SDL2_INCLUDE_DIRS}>")
target_link_libraries(faudio-static ${SDL2_LIBRARIES})
endif()
endif()
# Only try to autodetect if both SDL2 variables aren't explicitly set
find_package(SDL2 CONFIG)
if(TARGET SDL2::SDL2)
message(STATUS "Using TARGET SDL2::SDL2")
target_link_libraries(VVVVVV SDL2::SDL2 SDL2_mixer)
elseif(TARGET SDL2)
message(STATUS "Using TARGET SDL2")
target_link_libraries(VVVVVV SDL2 SDL2_mixer)
else()
message(STATUS "No TARGET SDL2::SDL2, or SDL2, using variables")
find_path(SDL2_MIXER_INCLUDE_DIRS NAMES SDL_mixer.h PATH_SUFFIXES SDL2)
target_include_directories(VVVVVV SYSTEM PRIVATE "$<BUILD_INTERFACE:${SDL2_INCLUDE_DIRS}>" ${SDL2_MIXER_INCLUDE_DIRS})
target_link_libraries(VVVVVV ${SDL2_LIBRARIES} SDL2_mixer)
endif()
endif()
# Yes, more Apple Crap
if(APPLE)
find_library(FOUNDATION NAMES Foundation)
find_library(IOKIT NAMES IOKit)
target_link_libraries(VVVVVV objc ${IOKIT} ${FOUNDATION})
find_library(FOUNDATION NAMES Foundation)
find_library(IOKIT NAMES IOKit)
target_link_libraries(VVVVVV objc ${IOKIT} ${FOUNDATION})
endif()
# But hey, also some Haiku crap
if(HAIKU)
find_library(BE_LIBRARY be)
find_library(ROOT_LIBRARY root)
target_link_libraries(VVVVVV ${BE_LIBRARY} ${ROOT_LIBRARY})
endif()
if(EMSCRIPTEN)
# 256MB is enough for everybody
target_link_libraries(VVVVVV -sFORCE_FILESYSTEM=1 -sTOTAL_MEMORY=256MB)
find_library(BE_LIBRARY be)
find_library(ROOT_LIBRARY root)
target_link_libraries(VVVVVV ${BE_LIBRARY} ${ROOT_LIBRARY})
endif()

View file

@ -3,24 +3,22 @@ Contributors
(Ordered alphabetically by first name.)
* Alexandra Fox
* AlexApps99 (@AlexApps99)
* Allison Fleischer (AllisonFleischer)
* AllyTally (@AllyTally)
* Brian Callahan (@ibara)
* Charlie Bruce (@charliebruce)
* Christoph Böhmwalder (@chrboe)
* Daniel Lee (@ddm999)
* Dav999 (@Daaaav)
* Dav999 (@Dav999-v)
* Elijah Stone (@moon-chilled)
* Elliott Saltar (@eboyblue3)
* Emmanuel Vadot (@evadot)
* fraZ0R (@f-raZ0R)
* Fredrik Ljungdahl (@FredrIQ)
* iliana etaoin (@iliana)
* Jules de Sartiges (@strikersh)
* Keith Stellyes (@keithstellyes)
* KyoZM (@lsaa)
* leo vriska (@leo60228)
* leo60228 (@leo60228)
* MAO3J1m0Op (@MAO3J1m0Op)
* Malte Grimm (@trelbutate)
* Marvin Scholz (@ePirat)
@ -31,11 +29,8 @@ Contributors
* Pierre-Alain TORET (@daftaupe)
* Reese Rivers (@ReeseTheRivers)
* Rémi Verschelde (@akien-mga)
* SnDream (@SnDream)
* Space-G (@Space-G)
* Thomas Sänger (@HorayNarea)
* Tynan Richards (@tzann)
* Wouter (@Xesxen)
* viri (viri.moe)
* Vittorio Romeo (@SuperV1234)
* Yussur Mustafa Oraji (@N00byKing)

View file

@ -2,9 +2,12 @@ FROM centos:7
# run first to improve caching (other things update more often than SDL2)
WORKDIR /tmp
RUN curl -LJO https://github.com/libsdl-org/SDL/releases/download/release-2.24.0/SDL2-2.24.0.tar.gz
RUN tar -xf SDL2-2.24.0.tar.gz
RUN mkdir SDL2-2.24.0/build
RUN curl -O https://www.libsdl.org/release/SDL2-2.0.14.tar.gz
RUN tar -xf SDL2-2.0.14.tar.gz
RUN mkdir SDL2-2.0.14/build
RUN curl -O https://www.libsdl.org/projects/SDL_mixer/release/SDL2_mixer-2.0.4.tar.gz
RUN tar -xf SDL2_mixer-2.0.4.tar.gz
RUN mkdir SDL2_mixer-2.0.4/build
# add EPEL (for SDL2)
RUN yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
@ -13,6 +16,8 @@ RUN yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.n
RUN yum -y install \
# used below
yum-utils \
# SDL2_mixer dependencies
libogg-devel libvorbis-devel \
# VVVVVV dependencies
gcc-c++ cmake make
@ -20,12 +25,17 @@ RUN yum-builddep -y SDL2
RUN yum clean all
WORKDIR /tmp/SDL2-2.24.0/build
WORKDIR /tmp/SDL2-2.0.14/build
RUN ../configure
RUN make -j $(nproc)
RUN make install
WORKDIR /tmp/SDL2_mixer-2.0.4/build
RUN ../configure
RUN make -j $(nproc)
RUN make install
WORKDIR /tmp
RUN rm -rf SDL2-2.24.0.tar.gz SDL2-2.24.0/
RUN rm -rf SDL2-2.0.14.tar.gz SDL2-2.0.14/ SDL2_mixer-2.0.4.tar.gz SDL2_mixer-2.0.4/
WORKDIR /

View file

@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>UIFileSharingEnabled</key>
<true/>
</dict>
</plist>

View file

@ -6,56 +6,83 @@ VVVVVV's official desktop versions are built with the following environments:
- macOS: Xcode CLT, currently targeting 10.9 SDK
- GNU/Linux: CentOS 7
The engine depends solely on [SDL2](https://libsdl.org/) 2.24.0+. All other dependencies
The engine depends solely on [SDL2](https://libsdl.org/) 2.0.14+ and
[SDL2_mixer](https://www.libsdl.org/projects/SDL_mixer/). All other dependencies
are statically linked into the engine. The development libraries for Windows can
be downloaded from SDL's website, Linux developers can find the dev libraries from their
respective repositories, and macOS developers should compile and install from source.
(If you're on Ubuntu and your Ubuntu is too old to have this SDL version, then
[see here](https://github.com/TerryCavanagh/VVVVVV/issues/618#issuecomment-968338212)
for workarounds.)
Since VVVVVV 2.4, git submodules are used for the
[third party libraries](https://github.com/TerryCavanagh/VVVVVV/tree/master/third_party).
After cloning, run `git submodule update --init` to set all of these up.
You can also use this command whenever the submodules need to be updated.
be downloaded from their respective websites, Linux developers can find the dev
libraries from their respective repositories, and macOS developers should
compile and install from source (including libogg/libvorbis/libvorbisfile).
Steamworks support is included and the DLL is loaded dynamically, you do not
need the SDK headers and there is no special Steam or non-Steam version. The
current implementation has been tested with Steamworks SDK v1.46.
To build the Make and Play edition of the game, uncomment `#define MAKEANDPLAY`
in `MakeAndPlay.h`.
To generate the projects on Windows:
```
# Put your SDL2 folders somewhere nice!
mkdir build
cd build
cmake -A Win32 -G "Visual Studio 10 2010" .. -DSDL2_INCLUDE_DIRS="C:\SDL2-2.24.0\include" -DSDL2_LIBRARIES="C:\SDL2-2.24.0\lib\x86\SDL2;C:\SDL2-2.24.0\lib\x86\SDL2main"
# Put your SDL2/SDL2_mixer folders somewhere nice!
mkdir flibitBuild
cd flibitBuild
cmake -A Win32 -G "Visual Studio 10 2010" .. -DSDL2_INCLUDE_DIRS="C:\SDL2-2.0.14\include;C:\SDL2_mixer-2.0.4\include" -DSDL2_LIBRARIES="C:\SDL2-2.0.14\lib\x86\SDL2;C:\SDL2-2.0.14\lib\x86\SDL2main;C:\SDL2_mixer-2.0.4\lib\x86\SDL2_mixer"
```
Then to compile the game, open the solution and click Build.
Note that on some systems, the `SDL2_LIBRARIES` list on Windows may need
SDL2/SDL2main/SDL2_mixer to have `.lib` at the end of them. The reason for this
inconsistency is unknown.
For more detailed information and troubleshooting, see the [Compiling VVVVVV
Guide](https://vsix.dev/wiki/Guide:Compiling_VVVVVV_on_Windows_with_Visual_Studio)
on the Viki.
Also note that if you're using a Visual Studio later than 2010, you will need to
change the `-G` string accordingly; otherwise you will get a weird cryptic
error. Refer to the list below:
- VS 2012: `"Visual Studio 11 2012"`
- VS 2013: `"Visual Studio 12 2013"`
- VS 2015: `"Visual Studio 14 2015"`
- VS 2017: `"Visual Studio 15 2017"`
- VS 2019: `"Visual Studio 16 2019"`
- VS 2022: `"Visual Studio 17 2022"`
To generate everywhere else:
```
mkdir build
cd build
mkdir flibitBuild
cd flibitBuild
cmake ..
```
Then to compile the game, type `make`.
macOS may be fussy about the SDK version. How to fix this is up to the whims of
however Apple wants to make CMAKE_OSX_SYSROOT annoying to configure and retain
each time Xcode updates.
Including data.zip
------------
You'll need the data.zip file from VVVVVV to actually run the game! You can grab
it from your copy of the game, or you can just download it for free from the [Make
and Play](https://thelettervsixtim.es/makeandplay/) page. Put this file next to
your executable and the game should run.
You'll need the data.zip file from VVVVVV to actually run the game! It's
available to download separately for free in the
[Make and Play](https://thelettervsixtim.es/makeandplay/)
edition of the game. Put this file next to your executable and the game should
run.
This is intended for personal use only - our license doesn't allow you to
actually distribute this data.zip file with your own forks without getting
permission from us first. See [LICENSE.md](../LICENSE.md) for more details.
permission from us first. See [LICENSE.md](../LICENSE.md) for more details. (If
you've got a project in mind that requires distributing this
file, [get in touch](http://distractionware.com/email/)!)
A Word About Compiler Quirks
----------------------------
_(Note: This section only applies to version 2.2 of the source code, which is
the initial commit of this repository. Since then, much hard work has been put
in to fix many undefined behaviors. If you're compiling the latest version of
the source code, ignore this section.)_
This engine is _super_ fussy about optimization levels and runtime checks. In
particular, the Windows version _absolutely positively must_ be compiled in
Debug mode, with /RTC enabled. If you build in Release mode, or have /RTC
disabled, the game behaves dramatically different in ways that were never fully
documented (bizarre softlocks, out-of-bounds issues that don't show up in tools
like Valgrind, stuff like that). There are lots of things about this old code
that could be cleaned up, polished, rewritten, and so on, but this is the one
that will probably bite you the hardest when setting up your own build,
regardless of platform.
We hope you'll enjoy messing with the source anyway!
Love, flibit

View file

@ -1,87 +0,0 @@
Translators
------------
Arabic (Eternal Dream Arabization):
- Montassar Ghanmi
- Mohammed Seif Eddine Chaib
Catalan:
- Eduard Ereza Martínez
Welsh:
- Morgan Roberts
German:
- Thomas Faust
Esperanto:
- Reese Rivers
Spanish (ES):
- Felipe Mercader
- Sara Marín
Spanish (LATAM):
- LocQuest
- Guido Di Carlo
Spanish (ARG.):
- LocQuest
- Guido Di Carlo
French:
- Words of Magic
Irish:
- Úna-Minh Kavanagh
- Seaghán Ó Modhráin
- Davis Sandefur
Italian (gloc.team):
- Alain Dellepiane
- Matteo Scarabelli
- Lorenzo Bertolucci
- Fabio Bortolotti
Japanese:
- Nicalis, Inc.
- KabanFriends
Korean:
- Bada Im
- Hyungseok Cho
Dutch:
- Dav999
Polish:
- Kuba Kallus
Brazilian Portuguese:
Translators:
- Lucas Araujo
- Thiago Araujo
Editing and LQA:
- Ivan Lopes
- Lucas Nunes
European Portuguese:
- Locsmiths
Russian:
- TheMysticSword
Silesian:
- Kuba Kallus
Turkish:
- Engin İlkiz
Ukrainian:
- Olya Sushytska
Chinese (Simplified):
- Sound of Mystery
Chinese (Traditional):
- Sound of Mystery / craft

View file

@ -1,34 +0,0 @@
# Gradle files
.gradle/
build/
# Local configuration file (sdk path, etc)
local.properties
# Log/OS Files
*.log
# Android Studio generated files and folders
captures/
.externalNativeBuild/
.cxx/
*.apk
output.json
output-metadata.json
# IntelliJ
*.iml
.idea/
misc.xml
deploymentTargetDropDown.xml
render.experimental.xml
# Keystore files
*.jks
*.keystore
# Google Services (e.g. APIs or Firebase)
google-services.json
# Android Profiling
*.hprof

View file

@ -1,37 +0,0 @@
Android port for C++ version
============================
This is _not_ the other existing mobile version (which is a fork of the original Flash
version). This is a port of the C++ desktop version, because the C++ version has gotten
many improvements since the source release (along with Flash being deprecated in
general).
How to Build
------------
The recommended way is to install Android Studio and Maven. These instructions are for
SDL 2.30.8; adapt your SDL version accordingly.
1. Place a copy of `data.zip` in `desktop_version/VVVVVV-android/app/src/main/assets/`.
(If the `assets/` folder doesn't exist, then create it.)
2. Obtain the SDL 2.30.8 Maven package. As of writing, SDL currently does not publish
Maven packages, so here is one way to obtain them (other methods are possible):
1. Download the SDL 2.30.8 source code.
2. Run the `build-scripts/android-prefab.sh` script in the SDL repository.
3. After building, run `mvn install:install-file
-Dfile=build-android-prefab/prefab-2.30.8/SDL2-2.30.8.aar
-DpomFile=build-android-prefab/prefab-2.30.8/SDL2-2.30.8.pom` to install it to
Maven Local.
3. Open the `desktop_version/VVVVVV-android/` folder in Android Studio.
4. Click 'Build'.
How to Install and Play
-----------------------
After building, go to `desktop_version/VVVVVV-android/app/build/outputs/apk/`, copy the
APK of the appropriate architecture to your device, and install it.
Touchscreen support is currently not implemented, so you will need to connect a keyboard
or controller to your device in order to play the game.

View file

@ -1,114 +0,0 @@
def buildAsLibrary = project.hasProperty('BUILD_AS_LIBRARY');
def buildAsApplication = !buildAsLibrary
if (buildAsApplication) {
apply plugin: 'com.android.application'
} else {
apply plugin: 'com.android.library'
}
android {
if (buildAsApplication) {
namespace "com.distractionware.vvvvvv"
}
compileSdkVersion 34
defaultConfig {
minSdkVersion 29
targetSdkVersion 34
versionCode 20005000
versionName "2.5"
applicationId "air.com.distractionware.vvvvvvmobile"
externalNativeBuild {
cmake {
arguments "-DANDROID_STL=c++_shared"
}
}
}
buildFeatures {
prefab true
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
applicationVariants.all { variant ->
tasks["merge${variant.name.capitalize()}Assets"]
.dependsOn("externalNativeBuild${variant.name.capitalize()}")
}
if (!project.hasProperty('EXCLUDE_NATIVE_LIBS')) {
sourceSets.main {
jniLibs.srcDir 'libs'
}
externalNativeBuild {
cmake {
path 'jni/CMakeLists.txt'
}
}
}
lint {
abortOnError false
}
aaptOptions {
noCompress 'zip'
}
if (buildAsLibrary) {
libraryVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith(".aar")) {
def fileName = "org.libsdl.app.aar";
output.outputFile = new File(outputFile.parent, fileName);
}
}
}
}
splits {
abi {
enable true
}
}
sourceSets {
main {
assets {
srcDir layout.buildDirectory.dir("generated/main/assets")
}
}
}
}
def zipRepoAssetsTask = tasks.register("zipRepoAssets", Zip) {
from('../../fonts') { spec ->
spec.into('graphics')
}
from('../../lang') { spec ->
spec.into('lang')
}
archiveFileName.set('repo.zip')
destinationDirectory.value(layout.buildDirectory.dir("generated/main/assets"))
}
project.android.applicationVariants.configureEach { variant ->
def compressAssetsTask = project.tasks.named("merge${variant.name.capitalize()}Assets")
compressAssetsTask.configure { task ->
task.dependsOn zipRepoAssetsTask
}
}
afterEvaluate {
[lintReportDebug, lintAnalyzeDebug, lintReportRelease, lintAnalyzeRelease, lintVitalReportRelease, lintVitalAnalyzeRelease].each { task ->
task.dependsOn zipRepoAssetsTask
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'org.jetbrains:annotations:15.0'
implementation 'androidx.core:core:1.10.1'
implementation 'androidx.exifinterface:exifinterface:1.3.6'
implementation 'org.libsdl.android:SDL2:2.30.8'
}

View file

@ -1 +0,0 @@
include $(call all-subdir-makefiles)

View file

@ -1,10 +0,0 @@
# Uncomment this if you're using STL in your project
# You can find more information here:
# https://developer.android.com/ndk/guides/cpp-support
# APP_STL := c++_shared
APP_ABI := armeabi-v7a arm64-v8a x86 x86_64
# Min runtime API level
APP_PLATFORM=android-16

View file

@ -1,15 +0,0 @@
cmake_minimum_required(VERSION 3.6)
project(VVVVVV_android)
# armeabi-v7a requires cpufeatures library
# include(AndroidNdkModules)
# android_ndk_import_module_cpufeatures()
# Compilation of companion libraries
#add_subdirectory(SDL_image)
#add_subdirectory(SDL_mixer)
#add_subdirectory(SDL_ttf)
add_subdirectory(../../.. desktop_version)

View file

@ -1,17 +0,0 @@
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in [sdk]/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# Add any project specific keep options here:
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}

View file

@ -1,112 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Replace com.test.game with the identifier of your game below, e.g.
com.gamemaker.game
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:versionCode="1"
android:versionName="1.0"
android:installLocation="auto">
<!-- OpenGL ES 2.0 -->
<uses-feature android:glEsVersion="0x00020000" />
<!-- Touchscreen support -->
<uses-feature
android:name="android.hardware.touchscreen"
android:required="false" />
<!-- Game controller support -->
<uses-feature
android:name="android.hardware.bluetooth"
android:required="false" />
<uses-feature
android:name="android.hardware.gamepad"
android:required="false" />
<uses-feature
android:name="android.hardware.usb.host"
android:required="false" />
<!-- External mouse input events -->
<uses-feature
android:name="android.hardware.type.pc"
android:required="false" />
<!-- Audio recording support -->
<!-- if you want to capture audio, uncomment this. -->
<!-- <uses-feature
android:name="android.hardware.microphone"
android:required="false" /> -->
<!-- Allow downloading to the external storage on Android 5.1 and older -->
<!-- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="22" /> -->
<!-- Allow access to Bluetooth devices -->
<!-- Currently this is just for Steam Controller support and requires setting SDL_HINT_JOYSTICK_HIDAPI_STEAM -->
<!-- <uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" /> -->
<!-- <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" /> -->
<!-- Allow access to the vibrator -->
<uses-permission android:name="android.permission.VIBRATE" />
<!-- if you want to capture audio, uncomment this. -->
<!-- <uses-permission android:name="android.permission.RECORD_AUDIO" /> -->
<!-- Create a Java class extending SDLActivity and place it in a
directory under app/src/main/java matching the package, e.g. app/src/main/java/com/gamemaker/game/MyGame.java
then replace "SDLActivity" with the name of your class (e.g. "MyGame")
in the XML below.
An example Java class can be found in README-android.md
-->
<application android:label="@string/app_name"
android:icon="@mipmap/ic_launcher"
android:allowBackup="true"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
android:hardwareAccelerated="true" >
<!-- Example of setting SDL hints from AndroidManifest.xml:
<meta-data android:name="SDL_ENV.SDL_ACCELEROMETER_AS_JOYSTICK" android:value="0"/>
-->
<meta-data android:name="SDL_ENV.SDL_IOS_ORIENTATIONS" android:value="LandscapeLeft LandscapeRight"/>
<activity android:name="VVVVVV"
android:label="@string/app_name"
android:alwaysRetainTaskState="true"
android:launchMode="singleInstance"
android:configChanges="layoutDirection|locale|orientation|uiMode|screenLayout|screenSize|smallestScreenSize|keyboard|keyboardHidden|navigation"
android:preferMinimalPostProcessing="true"
android:screenOrientation="landscape"
android:exported="true"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<!-- Let Android know that we can handle some USB devices and should receive this event -->
<intent-filter>
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
</intent-filter>
<!-- Drop file event -->
<!--
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="*/*" />
</intent-filter>
-->
</activity>
<provider
android:name="com.distractionware.vvvvvv.BaseDirProvider"
android:authorities="com.distractionware.vvvvvv.basedir"
android:grantUriPermissions="true"
android:exported="true"
android:permission="android.permission.MANAGE_DOCUMENTS">
<intent-filter>
<action android:name="android.content.action.DOCUMENTS_PROVIDER" />
</intent-filter>
</provider>
</application>
</manifest>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 132 KiB

View file

@ -1,85 +0,0 @@
package com.distractionware.vvvvvv;
import android.database.Cursor;
import android.database.MatrixCursor;
import android.database.MatrixCursor.RowBuilder;
import android.net.Uri;
import android.provider.DocumentsContract;
import android.provider.DocumentsContract.Document;
import android.provider.DocumentsContract.Root;
import java.io.File;
import java.io.FileNotFoundException;
public class BaseDirProvider extends FileSystemProvider {
private static final String AUTHORITY = "com.distractionware.vvvvvv.basedir";
private static final String DOC_ID_ROOT = "vvvvvv";
private static final String[] DEFAULT_ROOT_PROJECTION = new String[]{
Root.COLUMN_ROOT_ID, Root.COLUMN_FLAGS, Root.COLUMN_ICON, Root.COLUMN_TITLE,
Root.COLUMN_DOCUMENT_ID,
};
private static final String[] DEFAULT_DOCUMENT_PROJECTION = new String[]{
Document.COLUMN_DOCUMENT_ID, Document.COLUMN_MIME_TYPE, Document.COLUMN_DISPLAY_NAME,
Document.COLUMN_LAST_MODIFIED, Document.COLUMN_FLAGS, Document.COLUMN_SIZE,
};
private File mRoot;
@Override
public boolean onCreate() {
super.onCreate(DEFAULT_DOCUMENT_PROJECTION);
mRoot = getContext().getExternalFilesDir(null);
return true;
}
@Override
public Cursor queryRoots(String[] projection) throws FileNotFoundException {
final MatrixCursor result = new MatrixCursor(resolveRootProjection(projection));
final RowBuilder row = result.newRow();
row.add(Root.COLUMN_ROOT_ID, DOC_ID_ROOT);
row.add(Root.COLUMN_FLAGS,
Root.FLAG_LOCAL_ONLY | Root.FLAG_SUPPORTS_CREATE | Root.FLAG_SUPPORTS_SEARCH |
Root.FLAG_SUPPORTS_IS_CHILD);
row.add(Root.COLUMN_ICON, R.mipmap.ic_launcher);
row.add(Root.COLUMN_TITLE, "VVVVVV");
row.add(Root.COLUMN_DOCUMENT_ID, DOC_ID_ROOT);
return result;
}
@Override
protected Uri buildNotificationUri(String docId) {
return DocumentsContract.buildChildDocumentsUri(AUTHORITY, docId);
}
private static String[] resolveRootProjection(String[] projection) {
return projection != null ? projection : DEFAULT_ROOT_PROJECTION;
}
private static String[] resolveDocumentProjection(String[] projection) {
return projection != null ? projection : DEFAULT_DOCUMENT_PROJECTION;
}
@Override
protected String getDocIdForFile(File file) {
return "raw:" + file.getAbsolutePath();
}
@Override
protected File getFileForDocId(String documentId, boolean visible)
throws FileNotFoundException {
if (DOC_ID_ROOT.equals(documentId)) {
return mRoot;
} else if (documentId.startsWith("raw:")) {
final String name = documentId.substring(4);
final File file = new File(name);
if (!file.exists()) {
throw new FileNotFoundException("File not found: " + name);
}
return file;
} else {
throw new FileNotFoundException("Invalid document ID: " + documentId);
}
}
}

View file

@ -1,936 +0,0 @@
/*
* Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.distractionware.vvvvvv;
import static android.provider.DocumentsContract.EXTRA_ORIENTATION;
import static android.provider.DocumentsContract.QUERY_ARG_DISPLAY_NAME;
import static android.provider.DocumentsContract.QUERY_ARG_EXCLUDE_MEDIA;
import static android.provider.DocumentsContract.QUERY_ARG_FILE_SIZE_OVER;
import static android.provider.DocumentsContract.QUERY_ARG_LAST_MODIFIED_AFTER;
import static android.provider.DocumentsContract.QUERY_ARG_MIME_TYPES;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.res.AssetFileDescriptor;
import android.database.Cursor;
import android.database.MatrixCursor;
import android.database.MatrixCursor.RowBuilder;
import android.graphics.Point;
import android.media.MediaScannerConnection;
import android.net.Uri;
import android.os.Bundle;
import android.os.CancellationSignal;
import android.os.FileObserver;
import android.os.Handler;
import android.os.ParcelFileDescriptor;
import android.provider.DocumentsContract;
import android.provider.DocumentsContract.Document;
import android.provider.DocumentsProvider;
import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.Log;
import android.webkit.MimeTypeMap;
import androidx.core.content.MimeTypeFilter;
import androidx.exifinterface.media.ExifInterface;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.Locale;
import java.util.Objects;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.function.Predicate;
/**
* A helper class for {@link android.provider.DocumentsProvider} to perform file operations on local
* files.
*/
public abstract class FileSystemProvider extends DocumentsProvider {
private static final String TAG = "FileSystemProvider";
private static final boolean LOG_INOTIFY = false;
protected static final String SUPPORTED_QUERY_ARGS = joinNewline(
QUERY_ARG_DISPLAY_NAME,
QUERY_ARG_FILE_SIZE_OVER,
QUERY_ARG_LAST_MODIFIED_AFTER,
QUERY_ARG_MIME_TYPES);
private static String joinNewline(String... args) {
return TextUtils.join("\n", args);
}
private String[] mDefaultProjection;
private final ArrayMap<File, DirectoryObserver> mObservers = new ArrayMap<>();
private Handler mHandler;
protected abstract File getFileForDocId(String docId, boolean visible)
throws FileNotFoundException;
protected abstract String getDocIdForFile(File file) throws FileNotFoundException;
protected abstract Uri buildNotificationUri(String docId);
/**
* Callback indicating that the given document has been modified. This gives the provider a hook
* to invalidate cached data, such as {@code sdcardfs}.
*/
protected void onDocIdChanged(String docId) {
// Default is no-op
}
/**
* Callback indicating that the given document has been deleted or moved. This gives the
* provider a hook to revoke the uri permissions.
*/
protected void onDocIdDeleted(String docId) {
// Default is no-op
}
@Override
public boolean onCreate() {
throw new UnsupportedOperationException(
"Subclass should override this and call onCreate(defaultDocumentProjection)");
}
protected void onCreate(String[] defaultProjection) {
mHandler = new Handler();
mDefaultProjection = defaultProjection;
}
private static boolean contains(String dirPath, String filePath) {
if (dirPath.equals(filePath)) {
return true;
}
if (!dirPath.endsWith("/")) {
dirPath += "/";
}
return filePath.startsWith(dirPath);
}
private static boolean contains(File dir, File file) {
if (dir == null || file == null) return false;
return contains(dir.getAbsolutePath(), file.getAbsolutePath());
}
@Override
public boolean isChildDocument(String parentDocId, String docId) {
try {
final File parent = getFileForDocId(parentDocId).getCanonicalFile();
final File doc = getFileForDocId(docId).getCanonicalFile();
return contains(parent, doc);
} catch (IOException e) {
throw new IllegalArgumentException(
"Failed to determine if " + docId + " is child of " + parentDocId + ": " + e);
}
}
protected final List<String> findDocumentPath(File parent, File doc)
throws FileNotFoundException {
if (!doc.exists()) {
throw new FileNotFoundException(doc + " is not found.");
}
if (!contains(parent, doc)) {
throw new FileNotFoundException(doc + " is not found under " + parent);
}
LinkedList<String> path = new LinkedList<>();
while (doc != null && contains(parent, doc)) {
path.addFirst(getDocIdForFile(doc));
doc = doc.getParentFile();
}
return path;
}
private static boolean isValidFatFilenameChar(char c) {
if ((0x00 <= c && c <= 0x1f)) {
return false;
}
switch (c) {
case '"':
case '*':
case '/':
case ':':
case '<':
case '>':
case '?':
case '\\':
case '|':
case 0x7F:
return false;
default:
return true;
}
}
private static String buildValidFatFilename(String name) {
if (TextUtils.isEmpty(name) || ".".equals(name) || "..".equals(name)) {
return "(invalid)";
}
final StringBuilder res = new StringBuilder(name.length());
for (int i = 0; i < name.length(); i++) {
final char c = name.charAt(i);
if (isValidFatFilenameChar(c)) {
res.append(c);
} else {
res.append('_');
}
}
// Even though vfat allows 255 UCS-2 chars, we might eventually write to
// ext4 through a FUSE layer, so use that limit.
trimFilename(res, 255);
return res.toString();
}
private static String trimFilename(String str, int maxBytes) {
final StringBuilder res = new StringBuilder(str);
trimFilename(res, maxBytes);
return res.toString();
}
private static void trimFilename(StringBuilder res, int maxBytes) {
byte[] raw = res.toString().getBytes(StandardCharsets.UTF_8);
if (raw.length > maxBytes) {
maxBytes -= 3;
while (raw.length > maxBytes) {
res.deleteCharAt(res.length() / 2);
raw = res.toString().getBytes(StandardCharsets.UTF_8);
}
res.insert(res.length() / 2, "...");
}
}
private static File buildFile(File parent, String name, String ext) {
if (TextUtils.isEmpty(ext)) {
return new File(parent, name);
} else {
return new File(parent, name + "." + ext);
}
}
private static File buildUniqueFileWithExtension(File parent, String name, String ext)
throws FileNotFoundException {
File file = buildFile(parent, name, ext);
// If conflicting file, try adding counter suffix
int n = 0;
while (file.exists()) {
if (n++ >= 32) {
throw new FileNotFoundException("Failed to create unique file");
}
file = buildFile(parent, name + " (" + n + ")", ext);
}
return file;
}
private static String[] splitFileName(String mimeType, String displayName) {
String name;
String ext;
if (Document.MIME_TYPE_DIR.equals(mimeType)) {
name = displayName;
ext = null;
} else {
String mimeTypeFromExt;
// Extract requested extension from display name
final int lastDot = displayName.lastIndexOf('.');
if (lastDot >= 0) {
name = displayName.substring(0, lastDot);
ext = displayName.substring(lastDot + 1);
mimeTypeFromExt = MimeTypeMap.getSingleton().getMimeTypeFromExtension(
ext.toLowerCase());
} else {
name = displayName;
ext = null;
mimeTypeFromExt = null;
}
if (mimeTypeFromExt == null) {
mimeTypeFromExt = "application/octet-stream";
}
final String extFromMimeType;
if ("application/octet-stream".equals(mimeType)) {
extFromMimeType = null;
} else {
extFromMimeType = MimeTypeMap.getSingleton().getExtensionFromMimeType(mimeType);
}
if (Objects.equals(mimeType, mimeTypeFromExt) || Objects.equals(ext, extFromMimeType)) {
// Extension maps back to requested MIME type; allow it
} else {
// No match; insist that create file matches requested MIME
name = displayName;
ext = extFromMimeType;
}
}
if (ext == null) {
ext = "";
}
return new String[]{name, ext};
}
private static File buildUniqueFile(File parent, String mimeType, String displayName)
throws FileNotFoundException {
final String[] parts = splitFileName(mimeType, displayName);
return buildUniqueFileWithExtension(parent, parts[0], parts[1]);
}
@Override
public String createDocument(String docId, String mimeType, String displayName)
throws FileNotFoundException {
displayName = buildValidFatFilename(displayName);
final File parent = getFileForDocId(docId);
if (!parent.isDirectory()) {
throw new IllegalArgumentException("Parent document isn't a directory");
}
final File file = buildUniqueFile(parent, mimeType, displayName);
final String childId;
if (Document.MIME_TYPE_DIR.equals(mimeType)) {
if (!file.mkdir()) {
throw new IllegalStateException("Failed to mkdir " + file);
}
childId = getDocIdForFile(file);
onDocIdChanged(childId);
} else {
try {
if (!file.createNewFile()) {
throw new IllegalStateException("Failed to touch " + file);
}
childId = getDocIdForFile(file);
onDocIdChanged(childId);
} catch (IOException e) {
throw new IllegalStateException("Failed to touch " + file + ": " + e);
}
}
updateMediaStore(getContext(), file);
return childId;
}
private static File buildUniqueFile(File parent, String displayName)
throws FileNotFoundException {
final String name;
final String ext;
// Extract requested extension from display name
final int lastDot = displayName.lastIndexOf('.');
if (lastDot >= 0) {
name = displayName.substring(0, lastDot);
ext = displayName.substring(lastDot + 1);
} else {
name = displayName;
ext = null;
}
return buildUniqueFileWithExtension(parent, name, ext);
}
@Override
public String renameDocument(String docId, String displayName) throws FileNotFoundException {
// Since this provider treats renames as generating a completely new
// docId, we're okay with letting the MIME type change.
displayName = buildValidFatFilename(displayName);
final File before = getFileForDocId(docId);
final File beforeVisibleFile = getFileForDocId(docId, true);
final File after = buildUniqueFile(before.getParentFile(), displayName);
if (!before.renameTo(after)) {
throw new IllegalStateException("Failed to rename to " + after);
}
final String afterDocId = getDocIdForFile(after);
onDocIdChanged(docId);
onDocIdDeleted(docId);
onDocIdChanged(afterDocId);
final File afterVisibleFile = getFileForDocId(afterDocId, true);
updateMediaStore(getContext(), beforeVisibleFile);
updateMediaStore(getContext(), afterVisibleFile);
if (!TextUtils.equals(docId, afterDocId)) {
return afterDocId;
} else {
return null;
}
}
@Override
public String moveDocument(String sourceDocumentId, String sourceParentDocumentId,
String targetParentDocumentId)
throws FileNotFoundException {
final File before = getFileForDocId(sourceDocumentId);
final File after = new File(getFileForDocId(targetParentDocumentId), before.getName());
final File visibleFileBefore = getFileForDocId(sourceDocumentId, true);
if (after.exists()) {
throw new IllegalStateException("Already exists " + after);
}
if (!before.renameTo(after)) {
throw new IllegalStateException("Failed to move to " + after);
}
final String docId = getDocIdForFile(after);
onDocIdChanged(sourceDocumentId);
onDocIdDeleted(sourceDocumentId);
onDocIdChanged(docId);
// update the database
updateMediaStore(getContext(), visibleFileBefore);
updateMediaStore(getContext(), getFileForDocId(docId, true));
return docId;
}
private static void updateMediaStore(@NotNull Context context, File file) {
if (file != null) {
final ContentResolver resolver = context.getContentResolver();
final String noMedia = ".nomedia";
// For file, check whether the file name is .nomedia or not.
// If yes, scan the parent directory to update all files in the directory.
if (!file.isDirectory() && file.getName().toLowerCase(Locale.ROOT).endsWith(noMedia)) {
MediaScannerConnection.scanFile(context, new String[]{file.getParent()}, null,
null);
} else {
MediaScannerConnection.scanFile(context, new String[]{file.getParent()}, null,
null);
}
}
}
private static boolean deleteContents(File dir) {
File[] files = dir.listFiles();
boolean success = true;
if (files != null) {
for (File file : files) {
if (file.isDirectory()) {
success &= deleteContents(file);
}
if (!file.delete()) {
Log.w(TAG, "Failed to delete " + file);
success = false;
}
}
}
return success;
}
@Override
public void deleteDocument(String docId) throws FileNotFoundException {
final File file = getFileForDocId(docId);
final File visibleFile = getFileForDocId(docId, true);
final boolean isDirectory = file.isDirectory();
if (isDirectory) {
deleteContents(file);
}
// We could be deleting pending media which doesn't have any content yet, so only throw
// if the file exists and we fail to delete it.
if (file.exists() && !file.delete()) {
throw new IllegalStateException("Failed to delete " + file);
}
onDocIdChanged(docId);
onDocIdDeleted(docId);
updateMediaStore(getContext(), visibleFile);
}
@Override
public Cursor queryDocument(String documentId, String[] projection)
throws FileNotFoundException {
final MatrixCursor result = new MatrixCursor(resolveProjection(projection));
includeFile(result, documentId, null);
return result;
}
/**
* This method is similar to
* {@link DocumentsProvider#queryChildDocuments(String, String[], String)}. This method returns
* all children documents including hidden directories/files.
*
* <p>
* In a scoped storage world, access to "Android/data" style directories are hidden for privacy
* reasons. This method may show privacy sensitive data, so its usage should only be in
* restricted modes.
*
* @param parentDocumentId the directory to return children for.
* @param projection list of {@link Document} columns to put into the cursor. If
* {@code null} all supported columns should be included.
* @param sortOrder how to order the rows, formatted as an SQL {@code ORDER BY} clause
* (excluding the ORDER BY itself). Passing {@code null} will use the
* default sort order, which may be unordered. This ordering is a hint
* that can be used to prioritize how data is fetched from the network,
* but UI may always enforce a specific ordering
* @throws FileNotFoundException when parent document doesn't exist or query fails
*/
protected Cursor queryChildDocumentsShowAll(
String parentDocumentId, String[] projection, String sortOrder)
throws FileNotFoundException {
return queryChildDocuments(parentDocumentId, projection, sortOrder, File -> true);
}
@Override
public Cursor queryChildDocuments(
String parentDocumentId, String[] projection, String sortOrder)
throws FileNotFoundException {
// Access to some directories is hidden for privacy reasons.
return queryChildDocuments(parentDocumentId, projection, sortOrder, this::shouldShow);
}
private static @NotNull File[] listFilesOrEmpty(@Nullable File dir) {
if (dir == null) {
return new File[]{};
} else {
File[] files = dir.listFiles();
if (files == null) {
return new File[]{};
} else {
return files;
}
}
}
private Cursor queryChildDocuments(
String parentDocumentId, String[] projection, String sortOrder,
@NotNull Predicate<File> filter) throws FileNotFoundException {
final File parent = getFileForDocId(parentDocumentId);
final MatrixCursor result = new DirectoryCursor(
resolveProjection(projection), parentDocumentId, parent);
if (!filter.test(parent)) {
Log.w(TAG, "No permission to access parentDocumentId: " + parentDocumentId);
return result;
}
if (parent.isDirectory()) {
for (File file : listFilesOrEmpty(parent)) {
if (filter.test(file)) {
includeFile(result, null, file);
}
}
} else {
Log.w(TAG, "parentDocumentId '" + parentDocumentId + "' is not Directory");
}
return result;
}
private static String[] getHandledQueryArguments(Bundle queryArgs) {
if (queryArgs == null) {
return new String[0];
}
final ArrayList<String> args = new ArrayList<>();
if (queryArgs.keySet().contains(QUERY_ARG_EXCLUDE_MEDIA)) {
args.add(QUERY_ARG_EXCLUDE_MEDIA);
}
if (queryArgs.keySet().contains(QUERY_ARG_DISPLAY_NAME)) {
args.add(QUERY_ARG_DISPLAY_NAME);
}
if (queryArgs.keySet().contains(QUERY_ARG_FILE_SIZE_OVER)) {
args.add(QUERY_ARG_FILE_SIZE_OVER);
}
if (queryArgs.keySet().contains(QUERY_ARG_LAST_MODIFIED_AFTER)) {
args.add(QUERY_ARG_LAST_MODIFIED_AFTER);
}
if (queryArgs.keySet().contains(QUERY_ARG_MIME_TYPES)) {
args.add(QUERY_ARG_MIME_TYPES);
}
return args.toArray(new String[0]);
}
/**
* Searches documents under the given folder.
* <p>
* To avoid runtime explosion only returns the at most 23 items.
*
* @param folder the root folder where recursive search begins
* @param projection projection of the returned cursor
* @param exclusion absolute file paths to exclude from result
* @param queryArgs the query arguments for search
* @return cursor containing search result. Include {@link ContentResolver#EXTRA_HONORED_ARGS}
* in {@link Cursor} extras {@link Bundle} when any QUERY_ARG_* value was honored during the
* preparation of the results.
* @throws FileNotFoundException when root folder doesn't exist or search fails
* @see ContentResolver#EXTRA_HONORED_ARGS
*/
protected final Cursor querySearchDocuments(
File folder, String[] projection, Set<String> exclusion, Bundle queryArgs)
throws FileNotFoundException {
final MatrixCursor result = new MatrixCursor(resolveProjection(projection));
final LinkedList<File> pending = new LinkedList<>();
pending.add(folder);
while (!pending.isEmpty() && result.getCount() < 24) {
final File file = pending.removeFirst();
if (shouldHide(file)) continue;
if (file.isDirectory()) {
for (File child : listFilesOrEmpty(file)) {
pending.add(child);
}
}
if (!exclusion.contains(file.getAbsolutePath()) && matchSearchQueryArguments(file,
queryArgs)) {
includeFile(result, null, file);
}
}
final String[] handledQueryArgs = getHandledQueryArguments(queryArgs);
if (handledQueryArgs.length > 0) {
final Bundle extras = new Bundle();
extras.putStringArray(ContentResolver.EXTRA_HONORED_ARGS, handledQueryArgs);
result.setExtras(extras);
}
return result;
}
@Override
public String getDocumentType(String documentId) throws FileNotFoundException {
return getDocumentType(documentId, getFileForDocId(documentId));
}
private String getDocumentType(final String documentId, final File file)
throws FileNotFoundException {
if (file.isDirectory()) {
return Document.MIME_TYPE_DIR;
} else {
final int lastDot = documentId.lastIndexOf('.');
if (lastDot >= 0) {
final String extension = documentId.substring(lastDot + 1).toLowerCase();
final String mime = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
if (mime != null) {
return mime;
}
}
return "application/octet-stream";
}
}
@Override
public ParcelFileDescriptor openDocument(
String documentId, String mode, CancellationSignal signal)
throws FileNotFoundException {
final File file = getFileForDocId(documentId);
final File visibleFile = getFileForDocId(documentId, true);
final int pfdMode = ParcelFileDescriptor.parseMode(mode);
if (visibleFile == null || pfdMode == ParcelFileDescriptor.MODE_READ_ONLY) {
return ParcelFileDescriptor.open(file, pfdMode);
} else {
try {
// When finished writing, kick off media scanner
return ParcelFileDescriptor.open(
file, pfdMode, mHandler, (IOException e) -> {
onDocIdChanged(documentId);
scanFile(visibleFile);
});
} catch (IOException e) {
throw new FileNotFoundException("Failed to open for writing: " + e);
}
}
}
public static boolean matchSearchQueryArguments(Bundle queryArgs, String displayName,
String mimeType, long lastModified, long size) {
if (queryArgs == null) {
return true;
}
final String argDisplayName = queryArgs.getString(QUERY_ARG_DISPLAY_NAME, "");
if (!argDisplayName.isEmpty()) {
// TODO (118795812) : Enhance the search string handled in DocumentsProvider
if (!displayName.toLowerCase().contains(argDisplayName.toLowerCase())) {
return false;
}
}
final long argFileSize = queryArgs.getLong(QUERY_ARG_FILE_SIZE_OVER, -1 /* defaultValue */);
if (argFileSize != -1 && size < argFileSize) {
return false;
}
final long argLastModified = queryArgs.getLong(QUERY_ARG_LAST_MODIFIED_AFTER,
-1 /* defaultValue */);
if (argLastModified != -1 && lastModified < argLastModified) {
return false;
}
final String[] argMimeTypes = queryArgs.getStringArray(QUERY_ARG_MIME_TYPES);
if (argMimeTypes != null && argMimeTypes.length > 0) {
mimeType = Intent.normalizeMimeType(mimeType);
for (String type : argMimeTypes) {
if (MimeTypeFilter.matches(mimeType, Intent.normalizeMimeType(type))) {
return true;
}
}
return false;
}
return true;
}
/**
* Test if the file matches the query arguments.
*
* @param file the file to test
* @param queryArgs the query arguments
*/
private boolean matchSearchQueryArguments(File file, Bundle queryArgs) {
if (file == null) {
return false;
}
final String fileMimeType;
final String fileName = file.getName();
if (file.isDirectory()) {
fileMimeType = DocumentsContract.Document.MIME_TYPE_DIR;
} else {
int dotPos = fileName.lastIndexOf('.');
if (dotPos < 0) {
return false;
}
final String extension = fileName.substring(dotPos + 1);
fileMimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
}
return matchSearchQueryArguments(queryArgs, fileName, fileMimeType,
file.lastModified(), file.length());
}
private void scanFile(File visibleFile) {
final Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
intent.setData(Uri.fromFile(visibleFile));
getContext().sendBroadcast(intent);
}
private static AssetFileDescriptor openImageThumbnail(File file) throws FileNotFoundException {
final ParcelFileDescriptor pfd = ParcelFileDescriptor.open(
file, ParcelFileDescriptor.MODE_READ_ONLY);
try {
final ExifInterface exif = new ExifInterface(file.getAbsolutePath());
final long[] thumb = exif.getThumbnailRange();
if (thumb != null) {
// If we use thumb to decode, we need to handle the rotation by ourselves.
Bundle extras = null;
switch (exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, -1)) {
case ExifInterface.ORIENTATION_ROTATE_90:
extras = new Bundle(1);
extras.putInt(EXTRA_ORIENTATION, 90);
break;
case ExifInterface.ORIENTATION_ROTATE_180:
extras = new Bundle(1);
extras.putInt(EXTRA_ORIENTATION, 180);
break;
case ExifInterface.ORIENTATION_ROTATE_270:
extras = new Bundle(1);
extras.putInt(EXTRA_ORIENTATION, 270);
break;
}
return new AssetFileDescriptor(pfd, thumb[0], thumb[1], extras);
}
} catch (IOException ignored) {
}
// Do full file decoding, we don't need to handle the orientation
return new AssetFileDescriptor(pfd, 0, AssetFileDescriptor.UNKNOWN_LENGTH, null);
}
@Override
public AssetFileDescriptor openDocumentThumbnail(
String documentId, Point sizeHint, CancellationSignal signal)
throws FileNotFoundException {
final File file = getFileForDocId(documentId);
return openImageThumbnail(file);
}
protected RowBuilder includeFile(final MatrixCursor result, String docId, File file)
throws FileNotFoundException {
final String[] columns = result.getColumnNames();
final RowBuilder row = result.newRow();
if (docId == null) {
docId = getDocIdForFile(file);
} else {
file = getFileForDocId(docId);
}
final String mimeType = getDocumentType(docId, file);
row.add(Document.COLUMN_DOCUMENT_ID, docId);
row.add(Document.COLUMN_MIME_TYPE, mimeType);
final int flagIndex = Arrays.asList(columns).indexOf(Document.COLUMN_FLAGS);
if (flagIndex != -1) {
int flags = 0;
if (file.canWrite()) {
if (mimeType.equals(Document.MIME_TYPE_DIR)) {
flags |= Document.FLAG_DIR_SUPPORTS_CREATE;
flags |= Document.FLAG_SUPPORTS_DELETE;
flags |= Document.FLAG_SUPPORTS_RENAME;
flags |= Document.FLAG_SUPPORTS_MOVE;
} else {
flags |= Document.FLAG_SUPPORTS_WRITE;
flags |= Document.FLAG_SUPPORTS_DELETE;
flags |= Document.FLAG_SUPPORTS_RENAME;
flags |= Document.FLAG_SUPPORTS_MOVE;
}
}
if (mimeType.startsWith("image/")) {
flags |= Document.FLAG_SUPPORTS_THUMBNAIL;
}
if (typeSupportsMetadata(mimeType)) {
flags |= Document.FLAG_SUPPORTS_METADATA;
}
row.add(Document.COLUMN_FLAGS, flags);
}
final int displayNameIndex = Arrays.asList(columns).indexOf(Document.COLUMN_DISPLAY_NAME);
if (displayNameIndex != -1) {
row.add(Document.COLUMN_DISPLAY_NAME, file.getName());
}
final int lastModifiedIndex = Arrays.asList(columns).indexOf(Document.COLUMN_LAST_MODIFIED);
if (lastModifiedIndex != -1) {
final long lastModified = file.lastModified();
// Only publish dates reasonably after epoch
if (lastModified > 31536000000L) {
row.add(Document.COLUMN_LAST_MODIFIED, lastModified);
}
}
final int sizeIndex = Arrays.asList(columns).indexOf(Document.COLUMN_SIZE);
if (sizeIndex != -1) {
row.add(Document.COLUMN_SIZE, file.length());
}
// Return the row builder just in case any subclass want to add more stuff to it.
return row;
}
protected boolean shouldHide(@NotNull File file) {
return false;
}
private boolean shouldShow(@NotNull File file) {
return !shouldHide(file);
}
protected boolean typeSupportsMetadata(String mimeType) {
return Document.MIME_TYPE_DIR.equals(mimeType);
}
protected final File getFileForDocId(String docId) throws FileNotFoundException {
return getFileForDocId(docId, false);
}
private String[] resolveProjection(String[] projection) {
return projection == null ? mDefaultProjection : projection;
}
private void startObserving(File file, Uri notifyUri, DirectoryCursor cursor) {
synchronized (mObservers) {
DirectoryObserver observer = mObservers.get(file);
if (observer == null) {
observer =
new DirectoryObserver(file, getContext().getContentResolver(), notifyUri);
observer.startWatching();
mObservers.put(file, observer);
}
observer.mCursors.add(cursor);
if (LOG_INOTIFY) Log.d(TAG, "after start: " + observer);
}
}
private void stopObserving(File file, DirectoryCursor cursor) {
synchronized (mObservers) {
DirectoryObserver observer = mObservers.get(file);
if (observer == null) return;
observer.mCursors.remove(cursor);
if (observer.mCursors.size() == 0) {
mObservers.remove(file);
observer.stopWatching();
}
if (LOG_INOTIFY) Log.d(TAG, "after stop: " + observer);
}
}
private static class DirectoryObserver extends FileObserver {
private static final int NOTIFY_EVENTS = ATTRIB | CLOSE_WRITE | MOVED_FROM | MOVED_TO
| CREATE | DELETE | DELETE_SELF | MOVE_SELF;
private final File mFile;
private final ContentResolver mResolver;
private final Uri mNotifyUri;
private final CopyOnWriteArrayList<DirectoryCursor> mCursors;
DirectoryObserver(File file, ContentResolver resolver, Uri notifyUri) {
super(file.getAbsolutePath(), NOTIFY_EVENTS);
mFile = file;
mResolver = resolver;
mNotifyUri = notifyUri;
mCursors = new CopyOnWriteArrayList<>();
}
@Override
public void onEvent(int event, String path) {
if ((event & NOTIFY_EVENTS) != 0) {
if (LOG_INOTIFY) Log.d(TAG, "onEvent() " + event + " at " + path);
for (DirectoryCursor cursor : mCursors) {
cursor.notifyChanged();
}
mResolver.notifyChange(mNotifyUri, null, false);
}
}
@Override
public String toString() {
String filePath = mFile.getAbsolutePath();
return "DirectoryObserver{file=" + filePath + ", ref=" + mCursors.size() + "}";
}
}
private class DirectoryCursor extends MatrixCursor {
private final File mFile;
public DirectoryCursor(String[] columnNames, String docId, File file) {
super(columnNames);
final Uri notifyUri = buildNotificationUri(docId);
boolean registerSelfObserver = false; // Our FileObserver sees all relevant changes.
setNotificationUris(getContext().getContentResolver(), Arrays.asList(notifyUri));
mFile = file;
startObserving(mFile, notifyUri, this);
}
public void notifyChanged() {
onChange(false);
}
@Override
public void close() {
super.close();
stopObserving(mFile, this);
}
}
}

View file

@ -1,21 +0,0 @@
package com.distractionware.vvvvvv;
import org.libsdl.app.SDLActivity;
public class VVVVVV extends SDLActivity {
@Override
protected String[] getLibraries() {
return new String[] {
"SDL2",
"VVVVVV"
};
}
@Override
protected String[] getArguments() {
// always pass -debug, logcat has level filtering anyway
return new String[] {
"-debug"
};
}
}

View file

@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background"/>
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
</adaptive-icon>

View file

@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background"/>
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
</adaptive-icon>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

View file

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#3F51B5</color>
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color>
</resources>

View file

@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="ic_launcher_background">#000000</color>
</resources>

View file

@ -1,3 +0,0 @@
<resources>
<string name="app_name">VVVVVV</string>
</resources>

View file

@ -1,8 +0,0 @@
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
<!-- Customize your theme here. -->
</style>
</resources>

View file

@ -1,26 +0,0 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
mavenCentral()
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:8.1.1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
mavenCentral()
google()
mavenLocal()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}

View file

@ -1,20 +0,0 @@
# Project-wide Gradle settings.
# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
org.gradle.jvmargs=-Xmx1536m -XX:-UseContainerSupport
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
android.useAndroidX=true
android.enableJetifier=true

View file

@ -1,6 +0,0 @@
#Thu Nov 11 18:20:34 PST 2021
distributionBase=GRADLE_USER_HOME
distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-rc-2-bin.zip
distributionPath=wrapper/dists
zipStorePath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME

View file

@ -1,160 +0,0 @@
#!/usr/bin/env bash
##############################################################################
##
## Gradle start up script for UN*X
##
##############################################################################
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
warn ( ) {
echo "$*"
}
die ( ) {
echo
echo "$*"
echo
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
esac
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >/dev/null
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD="java"
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
MAX_FD="$MAX_FD_LIMIT"
fi
ulimit -n $MAX_FD
if [ $? -ne 0 ] ; then
warn "Could not set maximum file descriptor limit: $MAX_FD"
fi
else
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi
# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|grep -E -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|grep -E -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=$((i+1))
done
case $i in
(0) set -- ;;
(1) set -- "$args0" ;;
(2) set -- "$args0" "$args1" ;;
(3) set -- "$args0" "$args1" "$args2" ;;
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
function splitJvmOpts() {
JVM_OPTS=("$@")
}
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"

View file

@ -1,90 +0,0 @@
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS=
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:init
@rem Get command-line arguments, handling Windowz variants
if not "%OS%" == "Windows_NT" goto win9xME_args
if "%@eval[2+2]" == "4" goto 4NT_args
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
goto execute
:4NT_args
@rem Get arguments from the 4NT Shell from JP Software
set CMD_LINE_ARGS=%$
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega

View file

@ -1 +0,0 @@
include ':app'

View file

@ -3,5 +3,6 @@
# flibit has this solely for convenience when cleaning up Mac binaries.
install_name_tool -change /usr/local/lib/libSDL2-2.0.0.dylib @rpath/libSDL2-2.0.0.dylib VVVVVV
install_name_tool -change /usr/local/lib/libSDL2_mixer-2.0.0.dylib @rpath/libSDL2_mixer-2.0.0.dylib VVVVVV
strip -S VVVVVV
otool -L VVVVVV

View file

@ -1,57 +0,0 @@
=== I N T R O D U C T I O N ===
This file will explain the font format.
If you need a font (like a TTF) converted into the format that the game can read, for now you might want to ask Dav, who has tools for it.
=== F O N T F O R M A T ===
Fonts consist of two files: a .png and a .fontmeta. The .png contains all the "images" for all glyphs, and the .fontmeta is an XML document containing all information about which characters are in the file and other metadata.
For example, a font for Japanese might be called font_ja.png and font_ja.fontmeta.
The fontmeta file looks like this:
<?xml version="1.0" encoding="UTF-8"?>
<font_metadata>
<display_name>日本語</display_name>
<width>12</width>
<height>12</height>
<white_teeth>1</white_teeth>
<chars>
<range start="0x20" end="0x7F"/>
<range start="0xA0" end="0x17F"/>
<range start="0x18F" end="0x18F"/>
<range start="0x218" end="0x21B"/>
<range start="0x259" end="0x25A"/>
<!-- ... -->
</chars>
<special>
<range start="0x00" end="0x1F" advance="6"/>
<range start="0xEB00" end="0xEBFF" color="1"/>
</special>
<fallback>buttons_12x12</fallback>
</font_metadata>
* type: not specified for normal fonts. <type>buttons</type> is used in button glyph fonts.
* display_name: the name of the language the font is specifically meant for - in the language itself. Users will see this in the level editor when choosing a font to use. If this font is used equally by multiple translations, this could be set to a combination like "繁體中文/한국어". (If you are creating a custom player level: don't worry about this)
* width/height: the width and height of each glyph in the font. Every character will always be drawn as a rectangle of this size. VVVVVV is rated to support fonts up to 12 pixels high - anything higher may cause text overlapping or not fitting in place.
* white_teeth: indicates that all characters in the font are white, so the game itself doesn't have to remove all color from the image and make all pixels white like it would in old versions of the game. If this is not set to 1, this font cannot have colored (button) glyphs, and the game has to specifically process the font every time it is loaded, so 1 is highly recommended.
* chars: defines which characters are in the image. Starting at the top left of the image, each character is simply a rectangle of equal size (defined in <width> and <height>) from left to right, top to bottom. In the example given above, the image first has Unicode every character from U+0020 up to and including U+007F, then every character from U+00A0 to U+017F, and so on. To include a single character, simply use a range with equal start and end attributes equal.
* special: defines special attributes that will be applied to a range of characters. One or more of the following attributes can be used:
- color: set to 1 if these glyphs should be drawn with its original colors (for button glyphs, or even emoji...)
- advance: instead of <width>, the cursor (for drawing the next character) should be advanced this amount of pixels to the right. This controls the width of a character, but it does not affect how characters are arranged in the image, and the full glyph will still be drawn. While this means the font system has support for variable-width fonts, it's recommended to not use this option. There are some problems arising from using a variable-width font (especially in text boxes), so please consider copying the font's fullwidth forms (U+FF01-U+FF5E) to ASCII U+0021-U+007E instead. One may argue that a monospaced font also fits more with the game's style.
* fallback: specifies the button glyphs font to use. Make sure to choose one that fits fully within your [width]x[height] rectangle, so for an 8x12 font, choose buttons_8x8, not buttons_12x12.

View file

@ -1,13 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<font_metadata>
<type>buttons</type>
<width>10</width>
<height>10</height>
<white_teeth>1</white_teeth>
<chars>
<range start="0xEB00" end="0xEB36"/>
</chars>
<special>
<range start="0xEB00" end="0xEB36" color="1"/>
</special>
</font_metadata>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

View file

@ -1,13 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<font_metadata>
<type>buttons</type>
<width>12</width>
<height>12</height>
<white_teeth>1</white_teeth>
<chars>
<range start="0xEB00" end="0xEB36"/>
</chars>
<special>
<range start="0xEB00" end="0xEB36" color="1"/>
</special>
</font_metadata>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

View file

@ -1,13 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<font_metadata>
<type>buttons</type>
<width>8</width>
<height>8</height>
<white_teeth>1</white_teeth>
<chars>
<range start="0xEB00" end="0xEB36"/>
</chars>
<special>
<range start="0xEB00" end="0xEB36" color="1"/>
</special>
</font_metadata>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

View file

@ -1,108 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<font_metadata>
<display_name>english/…</display_name>
<width>8</width>
<height>8</height>
<white_teeth>1</white_teeth>
<chars>
<range start="0x00" end="0x7F"/>
<range start="0xA0" end="0x17F"/>
<range start="0x18F" end="0x18F"/>
<range start="0x218" end="0x21B"/>
<range start="0x259" end="0x25A"/>
<range start="0x37E" end="0x37E"/>
<range start="0x386" end="0x386"/>
<range start="0x388" end="0x38A"/>
<range start="0x38C" end="0x38C"/>
<range start="0x38E" end="0x3A1"/>
<range start="0x3A3" end="0x3CE"/>
<range start="0x400" end="0x45F"/>
<range start="0x490" end="0x491"/>
<range start="0x49A" end="0x49B"/>
<range start="0x4A2" end="0x4A3"/>
<range start="0x5D0" end="0x5EA"/>
<range start="0x5F0" end="0x5F4"/>
<range start="0x16A0" end="0x16F0"/>
<range start="0x1E9E" end="0x1E9E"/>
<range start="0x2014" end="0x2014"/>
<range start="0x2018" end="0x2019"/>
<range start="0x201C" end="0x201E"/>
<range start="0x2026" end="0x2026"/>
<range start="0x203C" end="0x203D"/>
<range start="0x2070" end="0x2070"/>
<range start="0x2074" end="0x2079"/>
<range start="0x20AC" end="0x20AC"/>
<range start="0x2122" end="0x2122"/>
<range start="0x2190" end="0x2199"/>
<range start="0x21B0" end="0x21B3"/>
<range start="0x21B6" end="0x21B7"/>
<range start="0x21BA" end="0x21C3"/>
<range start="0x21C5" end="0x21C6"/>
<range start="0x21CB" end="0x21CC"/>
<range start="0x2318" end="0x2318"/>
<range start="0x2325" end="0x2325"/>
<range start="0x237C" end="0x237C"/>
<range start="0x23B2" end="0x23B3"/>
<range start="0x23CE" end="0x23CE"/>
<range start="0x23E9" end="0x23EF"/>
<range start="0x23F4" end="0x23FA"/>
<range start="0x2500" end="0x25A2"/>
<range start="0x25B2" end="0x25B3"/>
<range start="0x25B6" end="0x25B7"/>
<range start="0x25BC" end="0x25BD"/>
<range start="0x25C0" end="0x25C1"/>
<range start="0x2600" end="0x2606"/>
<range start="0x2609" end="0x2609"/>
<range start="0x260E" end="0x260F"/>
<range start="0x261C" end="0x2620"/>
<range start="0x2622" end="0x2623"/>
<range start="0x262E" end="0x262E"/>
<range start="0x263A" end="0x2640"/>
<range start="0x2642" end="0x2653"/>
<range start="0x2660" end="0x2660"/>
<range start="0x2663" end="0x2663"/>
<range start="0x2665" end="0x2666"/>
<range start="0x2669" end="0x266B"/>
<range start="0x2690" end="0x2691"/>
<range start="0x2693" end="0x2693"/>
<range start="0x269B" end="0x269B"/>
<range start="0x26A0" end="0x26A1"/>
<range start="0x26A5" end="0x26A6"/>
<range start="0x26B3" end="0x26B6"/>
<range start="0x26B8" end="0x26B8"/>
<range start="0x26C4" end="0x26C4"/>
<range start="0x26CF" end="0x26CF"/>
<range start="0x26D3" end="0x26D4"/>
<range start="0x26E2" end="0x26E2"/>
<range start="0x26EC" end="0x26EC"/>
<range start="0x26F6" end="0x26F6"/>
<range start="0x26FA" end="0x26FA"/>
<range start="0x2709" end="0x2709"/>
<range start="0x270F" end="0x270F"/>
<range start="0x2713" end="0x2713"/>
<range start="0x274C" end="0x274C"/>
<range start="0x2753" end="0x2753"/>
<range start="0x2962" end="0x296F"/>
<range start="0x2BD3" end="0x2BD3"/>
<range start="0x2E18" end="0x2E18"/>
<range start="0xE0A0" end="0xE0A3"/>
<range start="0xFFFD" end="0xFFFD"/>
<range start="0x1F311" end="0x1F318"/>
<range start="0x1F451" end="0x1F451"/>
<range start="0x1F4BF" end="0x1F4BF"/>
<range start="0x1F700" end="0x1F705"/>
<range start="0x1F707" end="0x1F707"/>
<range start="0x1F709" end="0x1F709"/>
<range start="0x1F70B" end="0x1F70B"/>
<range start="0x1F70D" end="0x1F70D"/>
<range start="0x1F713" end="0x1F716"/>
<range start="0x1F71A" end="0x1F71A"/>
<range start="0x1F728" end="0x1F728"/>
<range start="0x1F741" end="0x1F741"/>
<range start="0x1FA99" end="0x1FA99"/>
</chars>
<special>
<range start="0x00" end="0x1F" advance="6"/>
</special>
<fallback>buttons_8x8</fallback>
</font_metadata>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

View file

@ -1,20 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<font_metadata>
<display_name>العربية/فارسی</display_name>
<width>8</width>
<height>10</height>
<white_teeth>1</white_teeth>
<chars>
<range start="0x00" end="0x7F"/>
<range start="0xA0" end="0xFF"/>
<range start="0xFE80" end="0xFEFF"/>
<range start="0x0600" end="0x06FF"/>
<range start="0xFB50" end="0xFBFF"/>
<range start="0x2190" end="0x2193"/>
</chars>
<special>
<range start="0x064B" end="0x065F" advance="0"/>
<range start="0xFBB2" end="0xFBC1" advance="0"/>
</special>
<fallback>buttons_8x8</fallback>
</font_metadata>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 67 KiB

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 94 KiB

View file

@ -1,94 +0,0 @@
This is a Modified Version.
Original Version: Copyright (c) 2019-2023 Minseo Lee (itoupluk427@gmail.com)
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 239 KiB

View file

@ -1,426 +0,0 @@
This is a Modified Version.
Original Version: Copyright (c) 2022, TakWolf (https://takwolf.com),
with Reserved Font Name 'Fusion Pixel'.
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.
The following font is part of the Original Version of the font
with Reserved Font Name 'Fusion Pixel' above:
Copyright (c) 2021, TakWolf (https://takwolf.com),
with Reserved Font Name 'Ark Pixel'.
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.
The following font is part of the Original Version of the font
with Reserved Font Name 'Fusion Pixel' above:
Copyright (c) 2019-2023 Minseo Lee (itoupluk427@gmail.com)
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.
The following font is part of the Original Version of the font
with Reserved Font Name 'Fusion Pixel' above:
[Cubic 11]
These fonts are free software.
Unlimited permission is granted to use, copy, and distribute them, with or without modification, either commercially or noncommercially.
THESE FONTS ARE PROVIDED "AS IS" WITHOUT WARRANTY.
此字型是免費的。
無論您是否進行對本字型進行商業或非商業性修改,均可無限制地使用,複製和分發它們。
本字型的衍生品之授權必須與此字型相同,且不作任何擔保。
[JF Dot M+H 12]
Copyright(c) 2005 M+ FONTS PROJECT
[M+ BITMAP FONTS]
Copyright (C) 2002-2004 COZ
These fonts are free software.
Unlimited permission is granted to use, copy, and distribute it, with or without modification, either commercially and noncommercially.
THESE FONTS ARE PROVIDED "AS IS" WITHOUT WARRANTY.
これらのフォントはフリー(自由な)ソフトウエアです。
あらゆる改変の有無に関わらず、また商業的な利用であっても、自由にご利用、複製、再配布することができますが、全て無保証とさせていただきます。
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
https://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 239 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 41 KiB

Before After
Before After

View file

@ -1,177 +0,0 @@
=== I N T R O D U C T I O N ===
This file will explain what you need to know when maintaining translations of VVVVVV (like adding new strings to the game and syncing them across languages).
For making new translations of the game, read README-translators.txt instead.
=== A D D I N G N E W S T R I N G S ===
If you want to add some new text to the game, all you generally need to do to make it translatable is wrap loc::gettext() around your raw strings in the code (you may need to add an #include "Localization.h"), and add the same strings to the English language file. The new strings can be automatically synced from English to all other language files using the translator menu.
For example, "Game paused" can be made translatable by changing it to loc::gettext("Game paused"). Its entry in the English language file could look like this:
<string english="Game paused" translation="" explanation="pause screen" max="40"/>
The max value indicates how many characters of space there is for the text, and is further described below. It looks like "40" for single-line text, and "38*5" for multi-line text. The max value may not be applicable or may be hard to define, so this attribute can be completely left out. For example, when it's a diagonally-placed menu option, or because the limit depends on the lengths of other strings (like Low/Medium/High in the joystick menu), or a string looks progressively worse the longer it gets. As a general rule: if defining a hard limit would be misleading, then it can be exempt from having a limit.
=== E D I T I N G E X I S T I N G S T R I N G S ===
Sometimes you need to make a partial change to text that has already been translated.
For example: you need to change the string "Press ENTER to stop" to "Press {button} to stop" (because you made that hotkey configurable).
Please do *not* simply find-and-replace the text in the language files, nor remove the old string when you add the new one. (Whether you keep the translations or not.)
Instead, duplicate the string in the English language file, putting your version underneath the old version, and mark the old version with the explanation "***OUTDATED***".
For example:
<string english="Press ENTER to stop" translation="" explanation="stop super gravitron"/>
↓ ↓ ↓
<string english="Press ENTER to stop" translation="" explanation="***OUTDATED***"/>
<string english="Press {button} to stop" translation="" explanation="stop super gravitron"/>
The game won't be using the outdated string anymore - it's only still in the language files to carry the existing translations for reference. Once a translator updates the language files, they can reuse parts of the old translation for the new version of the string.
english | translation | explanation
=================================================================================
Press ENTER to stop | Appuyez sur ENTRÉE pour arrêter | ***OUTDATED***
---------------------------------------------------------------------------------
Press {button} to stop | ? ? ? | stop super gravitron
Eventually, once all languages are up-to-date, these outdated strings can be cleaned up.
Of course, when you remove strings without replacement, you can simply remove them from the (English) language file.
=== T E X T P R I N T I N G ===
These are the text printing functions:
font::print(flags, x, y, text, r, g, b)
font::print_wrap(flags, x, y, text, r, g, b, linespacing = -1, maxwidth = -1)
The flags argument can be 0, or a set of flags that do things like centering, enlarging, etc.
Some examples (can also be found in Font.h):
Standard print
font::print(0, 50, 50, "Hello world!", 255, 255, 255);
Centered text
font::print(PR_CEN, -1, 50, "Hello world!", 255, 255, 255);
(set X to -1, unless you want to center *around* X)
2x scale
font::print(PR_2X, 50, 50, "V", 255, 255, 255);
Centered 2x scale
font::print(PR_CEN | PR_2X, -1, 50, "V", 255, 255, 255);
Right-aligned 3x scale with a border around it
font::print(PR_RIGHT | PR_3X | PR_BOR, 320, 50, "V", 255, 255, 255);
Wordwrapped centered text
font::print_wrap(PR_CEN, -1, 50, "Hello world, this will wordwrap to the screen width", 255, 255, 255);
A not-technically-exhaustive list of all flags (which are defined in Font.h):
- PR_2X/PR_3X/.../PR_8X Print at larger scale (PR_1X is default)
- PR_FONT_INTERFACE [DEFAULT] Use interface (VVVVVV language) font
- PR_FONT_LEVEL Use level-specific font (room names, cutscenes, etc)
- PR_FONT_8X8 Use 8x8 font no matter what
- PR_BRIGHTNESS(value) Use this brightness 0-255 (this value is mixed with
r, g and b for an alpha effect, and accounts for
colored glyphs correctly)
- PR_BOR Draw a black border around the text
- PR_LEFT [DEFAULT] Left-align text/place at X coordinate
- PR_CEN Center-align text relative to X (X is center)
or to screen if X == -1
- PR_RIGHT Right-align text to X
(X is now the right border, not left border)
- PR_CJK_CEN [DEFAULT] Large fonts (Chinese/Japanese/Korean) should
stick out on top and bottom compared to 8x8 font
- PR_CJK_LOW Larger fonts should stick out fully on the bottom
(draw at Y)
- PR_CJK_HIGH Larger fonts should stick out fully on the top
- PR_RTL_XFLIP In RTL languages, mirror the X axis, so left is 320
and right is 0, and invert the meaning of PR_LEFT and
PR_RIGHT
=== S T R I N G F O R M A T T I N G ===
Instead of sprintf-family functions, it is preferred to use VVVVVV's own formatting system, VFormat.
Strings sometimes have placeholders, which look like {name} or {name|flags}. For example, "{n_trinkets} of {max_trinkets}".
Placeholders can also have "flags" that modify their behavior. These can be added or removed in the translation as needed. Flags are separated by | (pipe).
For more info, see the documentation at the top of VFormat.h.
Full example:
char buffer[100];
vformat_buf(buffer, sizeof(buffer),
"{crewmate} got {number} out of {total} trinkets in {m}:{s|digits=2}.{ms|digits=3}",
"number:int, total:int, crewmate:str, m:int, s:int, ms:int",
2, 20, "Vermilion", 2, 3, 1
);
=> "Vermilion got 2 out of 20 trinkets in 2:03.001"
=== T R A N S L A T O R M E N U ===
The translator menu has options for both translators and maintainers - it allows testing menus, translating room names within the game, syncing all language files with the English template files, getting statistics on translation progress, and more.
VVVVVV will show a "translator" menu in the main menu if either:
- The "lang" folder is NOT next to data.zip, and the game is running somewhere within a "desktop_version" folder, and desktop_version/lang IS found. This normally happens when compiling the game from source;
- The command line argument (or launch option) "-translator" is passed.
- ALWAYS_SHOW_TRANSLATOR_MENU is defined during compilation (see top of Localization.h)
To add new strings, add them to only the English strings.xml or strings_plural.xml, and use the option to sync all languages from the translator menu. This will copy the new strings to all translated language files.
The language file sync option has differing support for the language files. As indicated in the menu itself, it handles each file as follows:
[Full syncing EN→All]
For these files, the English version of the file is fully copied and overwrites every language's version, while all existing translations and customizations are inserted for every language. This means newly added strings are copied to every language, and removed strings are simultaneously removed from every language, bringing them fully up-to-date.
- meta.xml
- strings.xml
- strings_plural.xml
- cutscenes.xml
- roomnames.xml
- roomnames_special.xml
[Syncing not supported]
These files are untouched by the syncing feature.
- numbers.xml
=== F I L E S ===
* meta.xml: This file contains some general information about a translation.
* strings.xml: This file contains general strings for the interface and some parts of the game.
* strings_plural.xml: Similar usage to strings.xml, but for strings that need different plural forms ("1 trinket", "2 trinkets")
* numbers.xml: This file contains all numbers from 0 to 100 written out (Zero, One, etc). This file also allows you to define the plural forms used in strings_plural.xml.
* cutscenes.xml: This file contains nearly all the cutscenes that appear in the main game.
* roomnames.xml: This file contains nearly all the room names for the main game.
* roomnames_special.xml: This file contains some special cases for roomnames, some names for rooms that usually aren't displayed as regular (like The Ship), and some general area names.

View file

@ -1,382 +0,0 @@
=== I N T R O D U C T I O N ===
This file will explain everything you need to know when making translations of VVVVVV.
WARNING TO VOLUNTEERS: VVVVVV translation is not a community effort where anyone can submit translations! It's *possible* that, on a case-by-case basis, someone can volunteer to become an official translator. But you would need to get approval from Terry first (or you can express interest in there being an official translation into your language, it may already be planned!)
Likewise, you're welcome to report issues in existing translations (or to submit PRs to fix these issues), but it's not a good idea to rewrite significant parts of a translation, and then contribute it without warning. If you think there are errors or things that could be improved, please give an explanation as to why. (We may decide to discuss it with the official translator.)
It *is* possible to make a fan translation for fun, for sharing with others, etc. But it probably won't be distributed with the game officially.
=== A D D I N G A N E W L A N G U A G E ===
The English language files are basically templates for other languages (all the translations are empty).
To create a new language, simply copy the `en` folder, and start by filling out meta.xml (further explained below).
Alternatively, you can create an empty language folder, and then use the in-game sync tool (translator > maintenance > sync language files) to populate it.
=== E X C E L ===
The game uses XML files for storing the translations. If you prefer, there is an .xlsm file which can be used as an editor. This can load in all the XML files, and then save changes back as XML.
If you're an official translator, you should have received a version of this spreadsheet. If not, a blank version can be found here: https://github.com/Daaaav/TranslationEditor
=== T R A N S L A T O R M E N U ===
The translator menu has options for both translators and maintainers - it allows testing menus, translating room names within the game, syncing all language files with the English template files, getting statistics on translation progress, and more. The translator menu is hidden from players in regular versions of the game.
When the translator menu is unlocked, you can also press F8 anywhere in the game to reload the current language files. So you can save translations and immediately preview them (except for menu buttons and the current cutscene dialogue, which can't be reloaded on the fly). You will hear a coin sound when the language files have been reloaded via F8.
=== L O W E R C A S E A N D U P P E R C A S E ===
If lowercase and uppercase does not exist in your language (Chinese, Japanese and Korean for example), you can set toupper to 0 in meta.xml, and ignore any directions about using lowercase or uppercase.
VVVVVV's menu system has the style of using lowercase for unselected options and uppercase for selected options, for example:
play
levels
[ OPTIONS ]
translator
credits
quit
The menu options are stored as their full-lowercase version, and they're normally commented as "menu option" in the translation files. A built-in function (toupper in Localization.cpp) automatically converts the lowercase text to uppercase when needed. This function has support for a good number of accented characters, Cyrillic and Greek, but more could be added if needed. It also accounts for special cases in Turkish and Irish.
Turkish: The uppercase of i is İ, for example, "dil" becomes "DİL" and not "DIL". To enable this, set toupper_i_dot to 1 in meta.xml.
Irish: Specific letters may be kept in lowercase when making a string full-caps. For example, "mac tíre na hainnise" should be "MAC TÍRE NA hAINNISE" instead of "MAC TÍRE NA HAINNISE". If enabled, you can use the ~ character before the letter which should be forced in lowercase: "mac tíre na ~hainnise". This ~ character only has an effect in strings which are subject to automatic uppercasing (otherwise it'll be visible as å). This can be enabled by setting toupper_lower_escape_char to 1 in meta.xml.
=== W O R D W R A P P I N G A N D L E N G T H L I M I T S ===
For most languages, VVVVVV can automatically wordwrap based on spaces. This may not work for some languages (like Chinese, Japanese and Korean), so instead, newlines can be inserted manually (see below) and automatic wordwrapping can be disabled in meta.xml.
VVVVVV's resolution is 320x240, and the default font is 8x8, which means there is a 40x30 character grid (although we don't adhere to this grid for the UI, but it gives a good indication). Naturally, if the font has a different size like 12x12, less characters will fit on the screen too.
Strings are usually annotated with their limits (for example, max="38*3"). This can be formatted like one of the following:
(A) 33
(B) 33*3
(A) if it's a single number (for example "33"): the hard maximum number of characters that are known to fit. Being exactly on the limit may not look good, so try to go at least a character under it if possible.
(B) if X*Y (for example 33*3): the text should fit within an area of X characters wide and Y lines high. The text is automatically word-wrapped to fit (unless disabled in meta.xml). If automatic word-wrapping is disabled, you need to manually insert newlines with |, or possibly as a literal newline.
If your language uses a font with a different size than 8x8, there will be two limits given: `max`, which is the original limit based on the 8x8 font, and `max_local`, which is adapted to the size of your font. To get this notation, use the maintenance option to sync language files from within VVVVVV. Ensure the correct font is set in meta.xml first.
The translator menu has an option ("limits check") to automatically find strings that break the given limits. There may be a few cases where this detection isn't perfect, but it should be a helpful quality assurance tool.
The maximum lengths are not always given. Notoriously, menu option buttons are placed diagonally, thus they have maximums that are hard to look up. Even more so, making an option differ too much in length from the other options might make it look out of place. Best thing to do there is probably just translate as usual and then test all menus via the "menu test" option in the translator menu. However, menus do automatically reposition based on the text length, so worst-case scenario, if an option is 36 characters long, all options are displayed right underneath each other.
=== F O N T S ===
The game uses an 8x8 pixel font by default (font.png and font.fontmeta in the "fonts" folder). If your language can be represented in 8x8 characters, it is preferable to use this font, or for this font to be extended.
The fonts directory also has a README.txt file that explains how the font format works.
=== N U M B E R S A N D P L U R A L F O R M S ===
In certain places, VVVVVV (perhaps unconventionally) writes out numbers as full words. For example:
- One out of Fifteen
- Two crewmates remaining
- Two remaining
These words can be found in numbers.xml. The numbers Zero through Twenty will be the most commonly seen. It's always possible for numbers up to One Hundred to be seen though (players can put up to 100 trinkets and crewmates in a custom level).
Your language may not allow the same word to be used for the same number in different scenarios. For example, in Polish, "twenty out of twenty" may be "dwadzieścia z dwudziestu". Right now, you have two sets of wordy numbers to choose from, `translation` and `translation2`, but this will likely change to a more customizable system in the future. You can choose when these "wordy" numbers are used and when numeric forms (20 out of 20) are used (see "STRING FORMATTING" below). It's also possible to leave the translations for all the numbers empty. In that case, numeric forms will always be used.
In English, using Title Case is appropriate, but in most other languages, it probably isn't. Therefore, you may want to translate all numbers in lowercase, when it's more appropriate to use "twenty out of twenty" than "Twenty out of Twenty". You can then apply auto-uppercasing to any placeholder you choose (see "STRING FORMATTING" below), making it possible to display "Twenty out of twenty".
As for plural forms: English and some other languages have a singular (1 crewmate) and a plural (2 crewmates). Some languages may have different rules (like for 0, or numbers that end in 2, 3 and 4). VVVVVV can accommodate these rules and allows you to translate certain strings (strings_plural.xml) in different ways depending on the number. The different forms can be defined by changing the "form" attribute on each number in numbers.xml. For English, form "1" is used for singular, and form "0" is used for plural. You can set up any amount of plural forms you will need.
Numbers that identify the forms do not need to be sequential, you may use any number between 0 and 254 to identify the different forms. So instead of using forms 0, 1, 2 and 3, you could also name them 1, 2, 5 and 7.
Suppose you need a different form for the number 1, the numbers 2-4, and all other numbers. You could use "form 1" for the number 1, "form 2" for 2-4, and "form 0" for all other numbers:
<numbers>
<number value="0" form="0" ... />
<number value="1" form="1" ... />
<number value="2" form="2" ... />
<number value="3" form="2" ... />
<number value="4" form="2" ... />
<number value="5" form="0" ... />
<number value="6" form="0" ... />
...
When translating the plural strings, you can add translations for every unique form. For example:
<string english_plural="You rescued {n_crew} crewmates" english_singular="You rescued {n_crew} crewmate">
<translation form="0" translation="You saved {n_crew} crewmates"/>
<translation form="1" translation="You saved {n_crew} crewmate"/>
<translation form="2" translation="You saved {n_crew} crewmateys"/>
</string>
Plural forms can appear both for wordy numbers ("you saved one crewmate") as well as numbery numbers ("you died 136 times in this room"), so we need the plural forms to go further than 100.
For the numbers 100 and higher: as far as I can find (with information about plural rules across 160 languages) - the plural forms always repeat themselves every 100 numbers. So numbers 100-199 always have the same forms as 200-299, 300-399, and so on. However, 100-119 (200-219, etc) don't always work the same as 0-19 do (in English for example, it's not "101 trinket" despite ending in 01). Therefore, forms for 100-119 can also be filled in. The system will simply copy 20-99 for 120-199, and that should be enough to cover all numbers from 0 to infinity. Technically the system supports providing forms until 199, but it should never be necessary to go higher than 119, so they're not in the language files by default.
Numbers higher than 100 cannot have a written out translation ("one hundred and one" does not exist).
=== S T R I N G F O R M A T T I N G ===
Strings sometimes have placeholders, which look like {name} or {name|flags}. For example, "{n_trinkets} of {max_trinkets}".
Placeholders can also have "flags" that modify their behavior. These can be added or removed in the translation as needed. Flags are separated by | (pipe).
For example, "{n_trinkets|wordy}" makes the number of trinkets display as a "wordy" number (twenty instead of 20) (See "NUMBERS AND PLURAL FORMS"). "{n_trinkets|wordy|upper}" makes that word start with a capital letter (Twenty instead of twenty). So for example, "{n_trinkets|wordy|upper} of {max_trinkets|wordy}" may be displayed as "Twenty out of twenty" - assuming numbers.xml is translated all-lowercase.
The valid flags are:
- wordy [ints only] use number words (Twenty) of the first set (translation), instead of digits (20)
- wordy2 [ints only] use number words of the second set (translation2), instead of digits
- digits=n [ints only] force minimum n digits, like n=5 --> 00031
- spaces [only if using digits=n] use leading spaces instead of 0s
- upper uppercase the first character with loc::toupper_ch
=== S T O R Y A N D C H A R A C T E R I N F O R M A T I O N ===
This is a brief story and character overview for reference. Any further questions can be directed to Terry: https://distractionware.com/email/
== The Crewmates ==
VVVVVV is about a crew of curious and super-intelligent aliens exploring the universe. There are six crewmates onboard the ship, in six different colours. They are:
* Viridian (Cyan, the player character)
* Verdigris (Green)
* Vitellary (Yellow)
* Vermilion (Red)
* Victoria (Blue)
* Violet (Purple)
All six characters have names that start with V. In addition, each crewmate's name is an obscure word that suggests their colour - for example, Verdigris is the name of the green pigment that forms on copper when it oxidises. This might be hard to translate! (So, potentially it just makes sense not to translate the names at all, unless you have a good idea about how to do it - for example, if you can pull off the same colour/name beginning with V trick in your language.)
Each crewmate has the following "rank", i.e. their job on the ship. These are all basically just Star Trek inspired roles:
* "Captain" Viridian (Captain as in leader)
* "Chief" Verdigris (Chief as in Lead Engineer)
* "Professor" Vitellary (Kind of the senior scientist on board)
* "Officer" Vermilion (Officer as in Away-Officer, the one who usually goes out exploring)
* "Doctor" Victoria (Doctor in the scientific sense)
* "Doctor" Violet (Doctor in the medical sense)
Verdigris, Vitellary and Vermilion are male. Victoria and Violet are female. Viridian is deliberately unspecified - when translating cutscenes, if at all possible, try to avoid specifying their gender, even if that leads to some otherwise awkward phrasing or requires the use of some cutting edge grammar tricks in your language.
== Personalities ==
If it helps with tone: the running joke in VVVVVV's writing is that all six characters are hyper intelligent prodigies, who will nevertheless speak to each other as if they're small children. E.g. Viridian "we were just playing with it!", Vermilion "I'm helping!", Verdigris "I'm an engineer!", etc. More specifically:
* Viridian is a classic hero - unphased by danger, never worried, always completely certain that they'll be able to fix everything.
* Verdigris is a romantic - he has a huge (reciprocated!) crush on Violet, which he does a terrible job of keeping secret.
* Vitellary is an academic - he loves science, and has a dry and long winded science thing to tell you in almost every cutscene.
* Vermilion is bold and adventurous - after you rescue him, you'll find him exploring different parts of the world on his own quest to find the rest of the crew (he's not much help, though).
* Victoria is a worrier - she's quick to feelings of despair. Victoria's sprite is almost always sad!
* Violet is a caretaker - she's the ship's Doctor, and most of her cutscenes are status updates about the other crewmates.
== Dimension VVVVVV ==
The world you're exploring is filled with terminals, with text logs from the previous inhabitants, who we never see. We don't know much about them.
The ship you're all on is called the "D.S.S. Souleye", which is a minor easter egg. D.S.S. just stands for "Dimensional Space Ship" - a craft that warps between different dimensions. Souleye is the pseudonym for Magnus Pålsson, the game's composer.
=== S P R I T E S T R A N S L A T I O N ===
There are several enemies in the game which contain words: STOP, YES, OBEY, LIES and TRUTH. These, as well as the C on checkpoints, can be translated.
This may be a bit tricky - the sizes of the translated graphics should be as close to the original English as possible, which means that even though letters can be compressed a bit, they will quickly be too long. For example, if you'd like to translate LIES with 5 letters, it really doesn't help if one of those 5 letters is not an I (the most slim letter).
Fortunately, the translation does not have to be literal, as the words themselves are only referenced in room names at most, and the exact meanings aren't that important, only the spirit of them is. OBEY is a They Live reference, so there are a lot of other signs you could use. Some inspiration:
* STOP: this is on a stop sign, so may not need to be translated
* OBEY: maybe something like FOLLOW, or one of the other words in "They Live" (WORK, BUY, CONSUME, CONFORM, ...)
* LIES: maybe singular LIE, maybe some form of NONSENSE (as in BS but non-offensive), FALSE, FAKE, BLAH, FABLE
* TRUTH: maybe FACTS
== Implementation of translated sprites ==
If you'd like to pixel translated sprites yourself: Take sprites.png and flipsprites.png from the graphics folder in data.zip. These spritesheets are a 32x32 grid - for example, you cannot extend OBEY upwards or to the left.
The translated file does not have to contain any untranslated sprites - these can simply be made transparent, for optimization. So: the files should be transparent sheets with some translations in the middle.
The translated versions of sprites.png and flipsprites.png can be placed in a "graphics" subfolder of your language folder.
Then, put a file next to them called "spritesmask.xml", with the following contents:
<?xml version="1.0" encoding="UTF-8"?>
<spritesmask sprite_w="32" sprite_h="32">
<sprite x="8" y="1" w="2"/> <!-- Checkpoints -->
<sprite x="4" y="2" w="4"/> <!-- STOP -->
<sprite x="4" y="3" w="4"/> <!-- YES -->
<sprite x="3" y="4"/> <!-- OBEY -->
<sprite x="2" y="5" w="2"/> <!-- LIES receiver and LIES -->
<sprite x="4" y="5" w="2"/> <!-- TRUTH -->
</spritesmask>
This file defines which sprites in the translated files should overwrite the original ones. Remove any lines for sprites you did not translate. After that, your translated sprites should work!
For completeness: sprite_w and sprite_h on the <spritesmask> tag define the size of each unit in the attributes of <sprite>. The possible attributes of <sprite> are:
* x, y: the position of the sprite to copy (in blocks of sprite_w by sprite_h)
* w, h: the width and height of the sprite to copy (default 1 for both)
* dx, dy: the destination position of the sprite (default x,y; so the same position as copied from)
=== F I L E S ===
== meta.xml ==
This file contains some general information about this translation. It contains the following attributes:
* active: If 0, this language will not be shown in the languages menu
* nativename: The name of the language in itself, fully in lowercase (so not "spanish" or "Español", but "español"). A language name can be at most 16 characters wide (in the 8x8 font)
* credit: You can fill in credit here that will appear on the language screen, like "Spanish translation by X". May be in your language. Max 38*2 @8x8
* action_hint: This is displayed at the bottom of the language screen when your language is highlighted, to show that Space/Z/V sets the selected option as the language. Max 40 @8x8
* gamepad_hint: The same as action_hint, but now a gamepad button will be filled into {button}, such as (A), (X), etc
* autowordwrap: Whether automatic wordwrapping is enabled. Can be disabled for CJK (in which case newlines have to be inserted manually in text)
* toupper: Whether to enable automatic uppercasing of menu options (unselected, SELECTED). May be disabled for languages such as CJK that don't have lowercase and uppercase.
* toupper_i_dot: When automatically uppercasing, map i to İ, as in Turkish.
* toupper_lower_escape_char: When automatically uppercasing, allow ~ to be used to stop the next letter from being uppercased, for Irish.
* rtl: This should be enabled for languages that are written right-to-left. It will horizontally flip many parts of the interface and allows text to be right-aligned in places like textboxes.
* menu_select: The indication that a certain menu option or button is selected, in addition to the automatic uppercasing if "toupper" is enabled. For example, "[ {label} ]" looks like "[ SELECTED ]"
* menu_select_tight: Similar to menu_select, except used in cases where space is a bit more limited (like the map screen). "[{label}]" looks like "[SELECTED]"
* font: The filename of the font to use. The 8x8 font is called "font", the Japanese font is "font_ja", et cetera.
== strings.xml ==
This file contains general strings for the interface and some parts of the game. In the XML, the tag for one string looks like this:
<string english="Game paused" translation="" explanation="pause screen" max="40"/>
To translate a string, simply fill in the translation attribute, like this:
<string english="Game paused" translation="Spel gepauzeerd" explanation="pause screen" max="40"/>
If the translation is left blank, the English text will be used as a fallback. Translations should NOT be left blank on purpose if the text is the same however; the string will be counted as untranslated and it'll be harder to keep track of what's new. Always just copy-paste the English string into the translation in that case.
The following attributes may be found for each string:
* english: the English text.
* translation: the translation.
* case: a number (1, 2, etc) for separate strings that are identical in English but may need different translations.
* explanation: an explanation about the context, location and possibly the formatting.
* max: length restrictions, described above in "WORDWRAPPING AND LENGTH LIMITS"
== strings_plural.xml ==
See "NUMBERS AND PLURAL FORMS" above.
You can define the plural forms in numbers.xml.
Then, simply add translations for each form you set up in numbers.xml. For example:
<translation form="0" translation="Shows up for all numbers with form=0"/>
<translation form="1" translation="Shows up for all numbers with form=1"/>
<translation form="2" translation="Shows up for all numbers with form=2"/>
The "wordy" flag indicates a word will be filled in (like twelve), otherwise a number (12). As described above in "STRING FORMATTING", you can change this as needed in your translations.
The `var` attribute indicates which placeholder will be filled in, the `expect` attribute indicates how high the values are that you may expect to be filled in. For example, expect="20" means any value above 20 will probably not be used in this string. This is mainly needed so that the limits check knows not to worry about a number like "seventy seven" making the string too long, but it may also be a useful context clue.
== numbers.xml ==
This file contains all numbers from 0 to 100 written out (Zero, One, etc).
This will be filled in strings like:
- One out of Fifteen
- Two crewmates remaining
- Two remaining
If this can't work for your language, or wordy numbers are really unfitting, you can leave all of these empty, in which case numbers will be used (20 out of 20).
You may want to do it all-lowercase in order to not get English-style title casing. "Twenty out of Twenty" may be grammatically incorrect in MANY languages, and "twenty out of twenty" would be better. Translating the numbers all-lowercase allows you to apply context-specific uppercasing, like "Twenty out of twenty" (see "STRING FORMATTING" above)
This file also allows you to define the plural forms used in strings_plural.xml.
For more information, see "NUMBERS AND PLURAL FORMS" above.
== cutscenes.xml ==
This file contains nearly all the cutscenes that appear in the main game. Each line has a "speaker" attribute, which is not used by the game - it's just for translators to know who says what and to establish context.
The dialogues are automatically text-wrapped, except if automatic wrapping is disabled in meta.xml. In that case, the maximum line length is 36 8x8 characters (288 pixels) or 24 12x12 characters.
In the few cases where the same text appears multiple times in a cutscene, these have the attribute "case" added to them (for example case="1", case="2", etc), so they can be translated separately if needed. (These match up with textcase(x) commands in the scripts themselves)
You may find some additional formatting attributes on each <dialogue> tag. These are used to make spacing and formatting in translations consistent with the original English text (for example, centered text, padding on both sides, etc). You can change any of these if you need, and you can also add them yourself to ANY dialogue tag.
* tt: teletype. if "1", disable automatic word wrapping, even if autowordwrap is enabled in meta.xml. You will have to add newlines manually for this textbox, either with hard enters, or with |
* wraplimit: change the maximum width of the text before it wordwraps, in pixels. Only if tt is not enabled. Example:
[Hello world!] --[wraplimit="56"]--> [Hello ] (56=7*8)
[world!]
If autowordwrap is disabled in meta.xml, this also doesn't work, but it does give you an advisory maximum text width.
The default is 288 (36*8 or 24*12).
* centertext: center the text (but keep it aligned to the grid), for example:
[You have rescued] --[centertext="1"]--> [You have rescued]
[a crewmember!] [ a crewmember! ]
* pad: pad each line of text with a number of spaces (0 by default), for example:
[You have rescued] --[pad="2"]--> [ You have rescued ]
[ a crewmember! ] [ a crewmember! ]
This will automatically make the wrap limit smaller accordingly, unless a custom wraplimit is given.
* pad_left/pad_right: same as pad, but only affects the left or right side. For example:
[You have rescued] --[ pad_left="5"]--\ [ You have rescued ]
[ a crewmember! ] --[pad_right="2"]--/ [ a crewmember! ]
* padtowidth: pad the text on both sides if it's not this many pixels wide. For example:
[-= Personal Log =-] --[padtowidth="224"]--> [ -= Personal Log =- ] (224=28*8)
== roomnames.xml ==
This file contains nearly all the room names for the main game. The limit is always 40 8x8 characters (320 pixels) or 26 12x12 characters.
It's recommended to translate the room names in-game to see why all rooms are called what they are. To do this, enable room name translation mode in translator > translator options > translate room names.
== roomnames_special.xml ==
This file contains some special cases for roomnames, some names for rooms that usually aren't displayed as regular (like The Ship), and some general area names.
One room ("Prize for the Reckless") is intentionally missing spikes in a time trial and no death mode so the player does not have to die there, and the room is called differently in both cases (for time trial "Imagine Spikes There, if You Like", and for no death mode "I Can't Believe You Got This Far").
There are also some roomnames in the game which gradually transform into others or cycle through a few minor variations.

View file

@ -1,948 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Please read README.txt for information about the language files -->
<cutscenes>
<cutscene id="intro" explanation="">
<dialogue speaker="cyan" english="Uh oh..." translation="أوه... أه لا..."/>
<dialogue speaker="purple" english="Is everything ok?" translation="هل الأوضاع بخير؟"/>
<dialogue speaker="cyan" english="No! We&apos;ve hit some kind of interference..." translation="كلا! اعترضنا تشويش ما..."/>
<dialogue speaker="cyan" english="Something&apos;s wrong! We&apos;re going to crash!" translation="نواجه مشكلة...! ارتطام السفينة وشيك!"/>
<dialogue speaker="cyan" english="Evacuate!" translation="علينا إخلاء المكان!"/>
<dialogue speaker="blue" english="Oh no!" translation="مصيبة!"/>
<dialogue speaker="red" english="Everyone off the ship!" translation="غادروا السفينة جميعا!"/>
<dialogue speaker="yellow" english="This shouldn&apos;t be happening!" translation="لا يفترض هذا... لا يعقل!"/>
<dialogue speaker="cyan" english="Phew! That was scary!" translation="هوف! خفت جدا قبل قليل!"/>
<dialogue speaker="cyan" english="At least we all escaped, right guys?" translation="على الأقل نجونا جميعا سالمين، أليس كذلك يا..."/>
<dialogue speaker="cyan" english="...guys?" translation="...جماعة؟"/>
</cutscene>
<cutscene id="firststeps" explanation="">
<dialogue speaker="cyan" english="I wonder why the ship teleported me here alone?" translation="يا ترى لماذا نقلتني السفينة إلى هنا لوحدي؟"/>
<dialogue speaker="cyan" english="I hope everyone else got out ok..." translation="أتمنى أن بقية الطاقم خرجوا دون أن يصيبهم أذى..."/>
</cutscene>
<cutscene id="communicationstation" explanation="">
<dialogue speaker="cyan" english="Violet! Is that you?" translation="فايولت! أليس كذلك؟"/>
<dialogue speaker="purple" english="Captain! You&apos;re ok!" translation="قبطان! يسعدني أنك بخير!"/>
<dialogue speaker="purple" english="Something has gone horribly wrong with the ship&apos;s teleporter!" translation="حصل خلل رهيب في آلة تنقيل السفينة!"/>
<dialogue speaker="purple" english="I think everyone has been teleported away randomly! They could be anywhere!" translation="أظن أنه بعثر أفراد طاقمنا إلى أماكن عشوائية! لا أستغرب أي مكان أرسلوا إليه!"/>
<dialogue speaker="cyan" english="Oh no!" translation="أه لا!"/>
<dialogue speaker="purple" english="I&apos;m on the ship - it&apos;s damaged badly, but it&apos;s still intact!" translation="أنا قرب السفينة. صحيح أنها تضررت كثيرا، لكنها لا تزال صالحة!"/>
<dialogue speaker="purple" english="Where are you, Captain?" translation="أين أنت يا قبطان؟"/>
<dialogue speaker="cyan" english="I&apos;m on some sort of space station... It seems pretty modern..." translation="أنا قرب محطة فضائية ما... تبدو لي حديثة بعض الشيء..."/>
<dialogue speaker="purple" english="There seems to be some sort of interference in this dimension..." translation="يبدو أن في هذا البعد نوعا ما من التشويش..."/>
<dialogue speaker="purple" english="I&apos;m broadcasting the coordinates of the ship to you now." translation="سأرسل إليك إحداثيات السفينة."/>
<dialogue speaker="purple" english="I can&apos;t teleport you back, but..." translation="لا يمكنني أن أجلبك بآلة التنقيل، لكن على الأقل..."/>
<dialogue speaker="purple" english="If YOU can find a teleporter anywhere nearby, you should be able to teleport back to me!" translation="لو عثرت بنفسك على آلة تنقيل قريبة منك، يمكنك التنقل والعودة إلي!"/>
<dialogue speaker="cyan" english="Ok! I&apos;ll try to find one!" translation="حاضر! سأحاول أن أجد أحد هذه الأجهزة!"/>
<dialogue speaker="purple" english="Good luck, Captain!" translation="حظا موفقا، يا قبطان!"/>
<dialogue speaker="purple" english="I&apos;ll keep trying to find the rest of the crew..." translation="أما أنا، سأواصل البحث عن بقية أفراد الطاقم..."/>
</cutscene>
<cutscene id="trenchwarfare" explanation="player finds Trench Warfare trinket, if no trinkets found yet">
<dialogue speaker="cyan" english="Ohh! I wonder what that is?" translation="أوووه! يا ترى ما هذا الشيء اللماع؟"/>
<dialogue speaker="cyan" english="I probably don&apos;t really need it, but it might be nice to take it back to the ship to study..." translation="لا أظنني بحاجة إليه، لكن لا بأس في العودة به للسفينة كي نتفحصه هناك..."/>
</cutscene>
<cutscene id="newtrenchwarfare" explanation="player finds Trench Warfare trinket, if other trinket already found">
<dialogue speaker="cyan" english="Oh! It&apos;s another one of those shiny things!" translation="أوه! شيء آخر من نفس نوع تلك الأشياء اللماعة!"/>
<dialogue speaker="cyan" english="I probably don&apos;t really need it, but it might be nice to take it back to the ship to study..." translation="لا أظنني بحاجة إليه، لكن لا بأس في العودة به للسفينة كي نتفحصه هناك..."/>
</cutscene>
<cutscene id="teleporterback" explanation="">
<dialogue speaker="cyan" english="A teleporter!" translation="آلة تنقيل!"/>
<dialogue speaker="cyan" english="I can get back to the ship with this!" translation="جميل، بهذا أستطيع العودة إلى السفينة!"/>
</cutscene>
<cutscene id="levelonecomplete_ending" explanation="">
<dialogue speaker="purple" english="Captain!" translation="قبطان!"/>
</cutscene>
<cutscene id="bigopenworld" explanation="">
<dialogue speaker="player" english="So, Doctor - have you any idea what caused the crash?" translation="أخبريني يا دكتورة - هل عندك فكرة عن سبب الحادث؟"/>
<dialogue speaker="purple" english="There&apos;s some sort of bizarre signal here that&apos;s interfering with our equipment..." translation="توجد هنا إشارة غريبة تتداخل مع سير عمل تجهيزاتنا..."/>
<dialogue speaker="purple" english="It caused the ship to lose its quantum position, collapsing us into this dimension!" translation="تسبب ذلك بضياع الإحداثية الكمية للسفينة، فوقع تسطيحنا إلى هذا البعد!"/>
<dialogue speaker="player" english="Oh no!" translation="أه لا!"/>
<dialogue speaker="purple" english="But I think we should be able to fix the ship and get out of here..." translation="مع هذا لن نعجز عن إصلاح السفينة والمغادرة..."/>
<dialogue speaker="purple" english="... as long as we can find the rest of the crew." translation="... بشرط أن نجمع شمل بقية الطاقم."/>
<dialogue speaker="purple" english="We really don&apos;t know anything about this place..." translation="لا نعرف عن هذا المكان شيئا..."/>
<dialogue speaker="purple" english="Our friends could be anywhere - they could be lost, or in danger!" translation="من يدري أين أصدقاؤنا - هل هم تائهون؟ هل يتعرضون للأخطار؟"/>
<dialogue speaker="player" english="Can they teleport back here?" translation="هل يمكنهم التنقيل والعودة إلينا؟"/>
<dialogue speaker="purple" english="Not unless they find some way to communicate with us!" translation="كلا، طالما لم يتواصلوا معنا بطريقة ما!"/>
<dialogue speaker="purple" english="We can&apos;t pick up their signal and they can&apos;t teleport here unless they know where the ship is..." translation="لم نلتقط إشارتهم، ولن يتنقلوا هنا إلا لو عرفوا مكان السفينة..."/>
<dialogue speaker="player" english="So what do we do?" translation="هكذا إذن، لكن ما الحل؟"/>
<dialogue speaker="purple" english="We need to find them! Head out into the dimension and look for anywhere they might have ended up..." translation="أن نجدهم! لو غامرت في هذا البعد الجديد وبحثت في كل مكان ربما نلقاهم..."/>
<dialogue speaker="player" english="Ok! Where do we start?" translation="هذا مقدور عليه... طيب! من أين نبدأ؟"/>
<dialogue speaker="purple" english="Well, I&apos;ve been trying to find them with the ship&apos;s scanners!" translation="حاولت أن أجدهم براصدات سفينتنا!"/>
<dialogue speaker="purple" english="It&apos;s not working, but I did find something..." translation="لم ينفع ذلك، لكن وجدت أمرا يستحق الذكر..."/>
<dialogue speaker="purple" english="These points show up on our scans as having high energy patterns!" translation="تلك النقاط في أرصادنا تشير إلى أنساق طاقة فائقة!"/>
<dialogue speaker="purple" english="There&apos;s a good chance they&apos;re teleporters - which means they&apos;re probably built near something important..." translation="من المرجح أنها آلات تنقيل - يدل هذا أن مكان بنائها قرب شيء مهم..."/>
<dialogue speaker="purple" english="They could be a very good place to start looking." translation="قد تكون تلك النقاط أفضل بداية لبحثنا."/>
<dialogue speaker="player" english="Ok! I&apos;ll head out and see what I can find!" translation="واضح! إذن سأخرج وأرى ماذا عساي أجد!"/>
<dialogue speaker="purple" english="I&apos;ll be right here if you need any help!" translation="سأنتظرك هنا في حال ما احتجت أي مساعدة!"/>
</cutscene>
<cutscene id="bigopenworldskip" explanation="">
<dialogue speaker="purple" english="I&apos;ll be right here if you need any help!" translation="سأنتظرك هنا في حال ما احتجت أي مساعدة!"/>
</cutscene>
<cutscene id="talkpurple_intro" explanation="">
<dialogue speaker="player" english="I&apos;m feeling a bit overwhelmed, Doctor." translation="المهمة ضخمة، يا دكتورة."/>
<dialogue speaker="player" english="Where do I begin?" translation="من أين أبدأ؟"/>
<dialogue speaker="purple" english="Remember that you can press {b_map} to check where you are on the map!" translation="هل نسيت؟ يمكنك بضغط {b_map} التأكد من مكانك في الخريطة!" buttons="1"/>
<dialogue speaker="purple" english="Look for areas where the rest of the crew might be..." translation="أقترح عليك البحث في الأماكن التي ربما نقل إليها بقية أفراد طاقمنا..."/>
<dialogue speaker="purple" english="If you get lost, you can get back to the ship from any teleporter." translation="ولو ضعت، يمكنك العودة للسفينة من أي آلة تنقيل."/>
<dialogue speaker="purple" english="And don&apos;t worry! We&apos;ll find everyone!" translation="ولا تشغلن بالك! مهما حصل سنعثر على الجميع!"/>
<dialogue speaker="purple" english="Everything will be ok!" translation="وكل شيء سيمر على ما يرام...!"/>
</cutscene>
<cutscene id="talkpurple_3" explanation="only one player string is shown">
<dialogue speaker="purple" english="Are you doing ok, Captain?" translation="هل أنت بخير يا قبطان؟"/>
<dialogue speaker="player" english="I&apos;m worried about Victoria, Doctor!" translation="يقلقني أمر فيكتوريا يا دكتورة!"/>
<dialogue speaker="player" english="I&apos;m worried about Vitellary, Doctor!" translation="يقلقني أمر فيتيلاري يا دكتورة!"/>
<dialogue speaker="player" english="I&apos;m worried about Verdigris, Doctor!" translation="يقلقني أمر فيرديغري يا دكتورة!"/>
<dialogue speaker="player" english="I&apos;m worried about Vermilion, Doctor!" translation="يقلقني أمر فارميليون يا دكتورة!"/>
<dialogue speaker="player" english="I&apos;m worried about you, Doctor!" translation="يقلقني أمرك يا دكتورة!"/>
<dialogue speaker="purple" english="Oh - well, don&apos;t worry, they&apos;ll show up!" translation="أوه، لا داع للقلق. عن قريب ستلتقيان بلا شك!"/>
<dialogue speaker="purple" english="Here! Have a lollipop!" translation="هاك! مصاصة هدية مني!"/>
</cutscene>
<cutscene id="trinketcollector" explanation="if no trinkets found yet">
<dialogue speaker="cyan" english="This seems like a good place to store anything I find out there..." translation="يبدو مكانا مناسبا لتخزين أي شيء ألقاه..."/>
<dialogue speaker="cyan" english="Victoria loves to study the interesting things we find on our adventures!" translation="كانت فيكتوريا مهتمة بدراسة ما نجلبه لها، كلما وجدنا ما يثير الاهتمام أثناء مغامراتنا!"/>
</cutscene>
<cutscene id="newtrinketcollector" explanation="if at least one trinket found">
<dialogue speaker="cyan" english="This seems like a good place to store those shiny things." translation="يبدو المكان مستودعا مناسبا لتلك الأغراض اللماعة."/>
<dialogue speaker="cyan" english="Victoria loves to study the interesting things we find on our adventures!" translation="كانت فيكتوريا مهتمة بدراسة ما نجلبه لها، كلما وجدنا ما يثير الاهتمام أثناء مغامراتنا!"/>
</cutscene>
<cutscene id="new2trinketcollector" explanation="">
<dialogue speaker="cyan" english="I hope she&apos;s ok..." translation="أرجو أنها بخير..."/>
</cutscene>
<cutscene id="rescuegreen" explanation="nuance: `she&apos;s BACK on the ship` means more `she&apos;s home` and not `she has returned to the ship`. She has never left the ship">
<dialogue speaker="green" english="Captain! I&apos;ve been so worried!" translation="قبطان! كم كنت قلقا!"/>
<dialogue speaker="player" english="Chief Verdigris! You&apos;re ok!" translation="القائد فيرديغري! أحوالك بخير!"/>
<dialogue speaker="green" english="I&apos;ve been trying to get out, but I keep going around in circles..." translation="حاولت الخروج، لكني كنت أدور وأدور وأعود من حيث بدأت..."/>
<dialogue speaker="player" english="I&apos;ve come from the ship. I&apos;m here to teleport you back to it." translation="جئتك من السفينة. أتيت كي أرجعك إليها بآلة التنقيل."/>
<dialogue speaker="green" english="Is everyone else alright? Is Violet..." translation="هل الجمع بخير؟ ماذا عن فايوليت، أهي..."/>
<dialogue speaker="player" english="She&apos;s fine - she&apos;s back on the ship!" translation="لا تقلق عليها، عادت سالمة معافاة للسفينة!"/>
<dialogue speaker="green" english="Oh! Great - Let&apos;s get going, then!" translation="أوه! عظيم إذن - فلننطلق دونما تأجيل!"/>
</cutscene>
<cutscene id="rescueblue" explanation="">
<dialogue speaker="blue" english="Oh no! Captain! Are you stuck here too?" translation="قبطان! مصيبة! حتى أنت علقت هنا؟"/>
<dialogue speaker="player" english="It&apos;s ok - I&apos;m here to rescue you!" translation="لا بأس - جئت لإنقاذك!"/>
<dialogue speaker="player" english="Let me explain everything..." translation="فلتسمحي لي أن أشرح لك كل شيء..."/>
<dialogue speaker="blue" english="What? I didn&apos;t understand any of that!" translation="كيف...؟ لم أفهم حرفا من كلامك!"/>
<dialogue speaker="player" english="Oh... well, don&apos;t worry." translation="أوه... معذرة، المهم لا تقلقي."/>
<dialogue speaker="player" english="Follow me! Everything will be alright!" translation="اتبعيني! ولا خوف عليك!"/>
<dialogue speaker="blue" english="Sniff... Really?" translation="إهئ... حقا حقا؟"/>
<dialogue speaker="blue" english="Ok then!" translation="حسنا. أثق بك يا قبطان!"/>
</cutscene>
<cutscene id="rescuered" explanation="">
<dialogue speaker="red" english="Captain!" translation="قبطان!!"/>
<dialogue speaker="red" english="Am I ever glad to see you! I thought I was the only one to escape the ship..." translation="ما أسعدني برؤيتك حقا! ظننت أني الناجي الوحيد من السفينة..."/>
<dialogue speaker="player" english="Vermilion! I knew you&apos;d be ok!" translation="فارميليون! لم يراودني شك أنك ستنجو!"/>
<dialogue speaker="red" english="So, what&apos;s the situation?" translation="لكن، كيف الأوضاع؟"/>
<dialogue speaker="red" english="I see! Well, we&apos;d better get back then." translation="فهمت... إذن فلنتحرك ونرجع."/>
<dialogue speaker="red" english="There&apos;s a teleporter in the next room." translation="توجد آلة تنقيل في الغرفة المجاورة."/>
</cutscene>
<cutscene id="rescueyellow" explanation="">
<dialogue speaker="yellow" english="Ah, Viridian! You got off the ship alright too?" translation="أه ، فيريديان! حتى أنت نجوت بدون إصابات من حادث السفينة؟"/>
<dialogue speaker="player" english="It&apos;s good to see you&apos;re alright, Professor!" translation="أستاذ؟ يسعدني أنك بخير!"/>
<dialogue speaker="yellow" english="Is the ship ok?" translation="هل السفينة بخير؟"/>
<dialogue speaker="player" english="It&apos;s badly damaged, but Violet&apos;s been working on fixing it." translation="تعرضت لأضرار بليغة، لكن فايولت تعمل على إصلاحها."/>
<dialogue speaker="player" english="We could really use your help..." translation="ستفيدنا مساعدتك جدا..."/>
<dialogue speaker="yellow" english="Ah, of course!" translation="أه، عن طيب خاطر!"/>
<dialogue speaker="yellow" english="The background interference in this dimension prevented the ship from finding a teleporter when we crashed!" translation="منع تشويش المحيط في نطاق هذا البعد سفينتنا من إيجاد آلة تنقيل قبيل الارتطام!"/>
<dialogue speaker="yellow" english="We&apos;ve all been teleported to different locations!" translation="تفرقنا ونقلنا إلى أماكن مختلفة!"/>
<dialogue speaker="player" english="Er, that sounds about right!" translation="همم، يبدو لي كلامك منطقيا!"/>
<dialogue speaker="yellow" english="Let&apos;s get back to the ship, then!" translation="فلنرجع إلى السفينة!"/>
<dialogue speaker="yellow" english="After you, Captain!" translation="من بعدك يا قبطان!"/>
</cutscene>
<cutscene id="int1blue_1" explanation="">
<dialogue speaker="blue" english="Waaaa!" translation="وااااء!" case="1"/>
<dialogue speaker="blue" english="Captain! Are you ok?" translation="قبطان! هل أنت بخير؟"/>
<dialogue speaker="player" english="I&apos;m ok... this... this isn&apos;t the ship..." translation="أنا بخير... لكن... لسنا في السفينة..."/>
<dialogue speaker="player" english="Where are we?" translation="يا ترى... أين نحن؟"/>
<dialogue speaker="blue" english="Waaaa!" translation="وااااء!" case="2"/>
<dialogue speaker="player" english="Something&apos;s gone wrong... We should look for a way back!" translation="حصلت مشكلة... فلنبحث عن طريق العودة!"/>
</cutscene>
<cutscene id="int1blue_2" explanation="">
<dialogue speaker="player" english="Follow me! I&apos;ll help you!" translation="اتبعيني! سأنقذك!"/>
<dialogue speaker="blue" english="Promise you won&apos;t leave without me!" translation="أرجوك! أريد منك وعدا بعدم المغادرة وتركي!"/>
<dialogue speaker="player" english="I promise! Don&apos;t worry!" translation="وعد! لا تقلقي!"/>
</cutscene>
<cutscene id="int1blue_3" explanation="">
<dialogue speaker="player" english="Are you ok down there, Doctor?" translation="هل نزلت على خير يا دكتورة؟"/>
<dialogue speaker="blue" english="I wanna go home!" translation="آه، أريد العودة للديار!"/>
<dialogue speaker="blue" english="Where are we? How did we even get here?" translation="أين نحن؟ كيف جئنا هنا؟"/>
<dialogue speaker="player" english="Well, Violet did say that the interference in the dimension we crashed in was causing problems with the teleporters..." translation="صحيح، قالت فايولت أن في هذا البعد تشويشا يعرقل عمل آلات التنقيل..."/>
<dialogue speaker="player" english="I guess something went wrong..." translation="فأظن مشكلة حصلت في الأثناء..."/>
<dialogue speaker="player" english="But if we can find another teleporter, I think we can get back to the ship!" translation="لكن لو عثرنا على آلة تنقيل بديلة، يمكننا العودة للسفينة على ما أظن!"/>
<dialogue speaker="blue" english="Sniff..." translation="إهئ..."/>
</cutscene>
<cutscene id="int1blue_4" explanation="the split paths merge">
<dialogue speaker="blue" english="Captain! Captain! Wait for me!" translation="قبطان! قبطان! أرجوك الانتظار!"/>
<dialogue speaker="blue" english="Please don&apos;t leave me behind! I don&apos;t mean to be a burden!" translation="أرجوك، لا أريد أن تتخلى عني! لا أقصد أن أكون عبئا عليك!"/>
<dialogue speaker="blue" english="I&apos;m scared!" translation="كل ما في الأمر... أني خائفة!"/>
<dialogue speaker="player" english="Oh... don&apos;t worry Victoria, I&apos;ll look after you!" translation="أوه... لا تقلقي يا فيكتوريا، سأعتني بك!"/>
</cutscene>
<cutscene id="int1blue_5" explanation="">
<dialogue speaker="blue" english="We&apos;re never going to get out of here, are we?" translation="لن نخرج من هنا أبدا، أليس كذلك؟"/>
<dialogue speaker="player" english="I.. I don&apos;t know..." translation="أنا... لا أدري..."/>
<dialogue speaker="player" english="I don&apos;t know where we are or how we&apos;re going to get out..." translation="لا أعرف أين نحن، ولا كيف سنخرج..."/>
</cutscene>
<cutscene id="int1blue_6" explanation="">
<dialogue speaker="blue" english="We&apos;re going to be lost forever!" translation="سنضيع فيها إلى الأبد!"/>
<dialogue speaker="player" english="Ok, come on... Things aren&apos;t that bad." translation="لحظة، صبرا... لا داع للتشاؤم إلى هذا الحد."/>
<dialogue speaker="player" english="I have a feeling that we&apos;re nearly home!" translation="عندي إحساس أننا اقتربنا من طريق العودة للديار!"/>
<dialogue speaker="player" english="We can&apos;t be too far from another teleporter!" translation="لسنا بعيدين عن آلة تنقيل أخرى بلا شك!"/>
<dialogue speaker="blue" english="I hope you&apos;re right, captain..." translation="أتمنى أنك على حق يا قبطان..."/>
</cutscene>
<cutscene id="int1blue_7" explanation="">
<dialogue speaker="blue" english="Captain! You were right! It&apos;s a teleporter!" translation="قبطان! كلامك كان صحيحا! توجد آلة تنقيل!"/>
<dialogue speaker="player" english="Phew! You had me worried for a while there... I thought we were never going to find one." translation="هوف! تنفست الصعداء بعد طول قلق... خشيت أننا لن نجد آلة تنقيل أخرى."/>
<dialogue speaker="blue" english="What? Really?" translation="كيف؟ حقا؟"/>
<dialogue speaker="player" english="Anyway, let&apos;s go back to the ship." translation="على كل! فلنعد إلى السفينة."/>
</cutscene>
<cutscene id="int1green_1" explanation="">
<dialogue speaker="green" english="Huh? This isn&apos;t the ship..." translation="هاه؟ ليست هذه السفينة..."/>
<dialogue speaker="green" english="Captain! What&apos;s going on?" translation="قبطان! ما الخطب؟"/>
<dialogue speaker="player" english="I... I don&apos;t know!" translation="أنا... لا أعرف السبب!"/>
<dialogue speaker="player" english="Where are we?" translation="أين نحن الآن؟"/>
<dialogue speaker="green" english="Uh oh, this isn&apos;t good... Something must have gone wrong with the teleporter!" translation="أوه لا، لا يسر هذا... حصلت مشكلة في آلة التنقيل بلا شك!"/>
<dialogue speaker="player" english="Ok... no need to panic!" translation="طيب... لا داعي للجزع!"/>
<dialogue speaker="player" english="Let&apos;s look for another teleporter!" translation="فلنبحث عن آلة تنقيل أخرى!"/>
</cutscene>
<cutscene id="int1green_2" explanation="">
<dialogue speaker="player" english="Let&apos;s go this way!" translation="من هذا الطريق!"/>
<dialogue speaker="green" english="After you, Captain!" translation="معك يا قبطان!"/>
</cutscene>
<cutscene id="int1green_3" explanation="just like in rescuegreen, `Violet is back on the ship` does not mean she was ever off the ship and has *returned* to it. Or maybe Verdigris thinks Violet was warped off the ship as well just like him and she *has* made her way back to the ship?">
<dialogue speaker="green" english="So Violet&apos;s back on the ship? She&apos;s really ok?" translation="إذن فايوليت عادت للسفينة؟ حقا هي بخير؟"/>
<dialogue speaker="player" english="She&apos;s fine! She helped me find my way back!" translation="اطمئن! هي من ساعدتني على الاهتداء لطريق العودة!"/>
<dialogue speaker="green" english="Oh, phew! I was worried about her." translation="أوه، هوف! خفت عليها."/>
<dialogue speaker="green" english="Captain, I have a secret..." translation="قبطان، سأبوح لك بسر..."/>
<dialogue speaker="green" english="I really like Violet!" translation="حقا أحب فايولت!"/>
<dialogue speaker="player" english="Is that so?" translation="أحقا هذا؟"/>
<dialogue speaker="green" english="Please promise you won&apos;t tell her!" translation="أترجاك عدم البوح بهذا السر أمامها!"/>
</cutscene>
<cutscene id="int1green_4" explanation="the split paths merge">
<dialogue speaker="green" english="Hey again!" translation="أهلا مجددا!"/>
<dialogue speaker="player" english="Hey!" translation="أهلا!"/>
<dialogue speaker="player" english="Are you doing ok?" translation="أأنت بخير؟"/>
<dialogue speaker="green" english="I think so! I really hope we can find a way back to the ship..." translation="أظن! أرجو حقا أن نجد طريق العودة للسفينة..."/>
</cutscene>
<cutscene id="int1green_5" explanation="">
<dialogue speaker="green" english="So, about Violet..." translation="أردت سؤالك يا قبطان، بخصوص فايولت..."/>
<dialogue speaker="player" english="Um, yeah?" translation="همم؟ عم السؤال؟"/>
<dialogue speaker="green" english="Do you have any advice?" translation="هل عندك نصائح لي؟"/>
<dialogue speaker="player" english="Oh!" translation="... أوه!"/>
<dialogue speaker="player" english="Hmm..." translation="هممم، أمهلني كي أفكر...."/>
<dialogue speaker="player" english="Um... you should... be yourself!" translation="اممم... أنصحك أن... تتصرف على طبيعتك!"/>
<dialogue speaker="green" english="Oh." translation="أوه."/>
<dialogue speaker="green" english="Thanks Captain!" translation="شكرا قبطاني!"/>
</cutscene>
<cutscene id="int1green_6" explanation="">
<dialogue speaker="player" english="So, do you think you&apos;ll be able to fix the ship?" translation="ب‍المناسبة، هل تقدر على إصلاح السفينة؟"/>
<dialogue speaker="green" english="Depends on how bad it is... I think so, though!" translation="حسب فداحة الأضرار... لكني أظن أني على قدر المهمة!"/>
<dialogue speaker="green" english="It&apos;s not very hard, really. The basic dimensional warping engine design is pretty simple, and if we can get that working we shouldn&apos;t have any trouble getting home." translation="ليس الأمر من الصعوبة بمكان. أما عن أساس فكرة التصميم لمحرك التنقيل ما بين الأبعاد، فمسألته بسيطة، وإن شغلناه فلن نلقى عقبة في العودة للديار."/>
<dialogue speaker="player" english="Oh! Good!" translation="أوه! جميل!"/>
</cutscene>
<cutscene id="int1green_7" explanation="">
<dialogue speaker="green" english="Finally! A teleporter!" translation="أخيرا! آلة تنقيل!"/>
<dialogue speaker="green" english="I was getting worried we wouldn&apos;t find one..." translation="بدأت أقلق وأتساءل ماذا لو لم نجدها..."/>
<dialogue speaker="player" english="Let&apos;s head back to the ship!" translation="فلنرجع إلى السفينة!"/>
</cutscene>
<cutscene id="int1red_1" explanation="">
<dialogue speaker="red" english="Wow! Where are we?" translation="واو! أين نحن؟"/>
<dialogue speaker="player" english="This... isn&apos;t right... Something must have gone wrong with the teleporter!" translation="لا... لا يصح هذا... حصلت مشكلة في آلة التنقيل بدون شك!"/>
<dialogue speaker="red" english="Oh well... We can work it out when we get back to the ship!" translation="حقا... لكن لا بأس، سنتوصل إلى جواب بعد أن نرجع إلى السفينة!"/>
<dialogue speaker="red" english="Let&apos;s go exploring!" translation="فلننطلق في رحلة استكشاف جديدة!"/>
<dialogue speaker="player" english="Ok then!" translation="هيا بنا إذن!"/>
</cutscene>
<cutscene id="int1red_2" explanation="">
<dialogue speaker="player" english="Follow me!" translation="فلتتبعني!"/>
<dialogue speaker="red" english="Aye aye, Captain!" translation="لا يأمر عليك ظالم، يا قبطان!"/>
</cutscene>
<cutscene id="int1red_3" explanation="">
<dialogue speaker="red" english="Hey Viridian... how did the crash happen, exactly?" translation="ها فيريديان... كيف حصل حادث الارتطام بالضبط؟"/>
<dialogue speaker="player" english="Oh, I don&apos;t really know - some sort of interference..." translation="أوه، لا أدري عن التفاصيل - كأنها إشارة تشويش..."/>
<dialogue speaker="player" english="...or something sciencey like that. It&apos;s not really my area." translation="...أو كلام علماء من هذا النوع. خارج عن تخصصي."/>
<dialogue speaker="red" english="Ah! Well, do you think we&apos;ll be able to fix the ship and go home?" translation="أه! طيب، هل تظننا سنتمكن من إصلاح السفينة والعودة للديار؟"/>
<dialogue speaker="player" english="Of course! Everything will be ok!" translation="طبعا بلا شك! ستحل كل الأمور!"/>
</cutscene>
<cutscene id="int1red_4" explanation="the split paths merge">
<dialogue speaker="red" english="Hi again! You doing ok?" translation="أهلا مجددا! أحوالك بخير؟"/>
<dialogue speaker="player" english="I think so! But I really want to get back to the ship..." translation="أظن! لكني بدأت أشتاق جدا للسفينة..."/>
<dialogue speaker="red" english="We&apos;ll be ok! If we can find a teleporter somewhere we should be able to get back!" translation="لا خوف علينا! لو عثرنا على آلة تنقيل سنتمكن من العودة!"/>
</cutscene>
<cutscene id="int1red_5" explanation="">
<dialogue speaker="red" english="Are we there yet?" translation="هل وصلنا أم ما زلنا؟"/>
<dialogue speaker="player" english="We&apos;re getting closer, I think..." translation="أظننا نقترب..."/>
<dialogue speaker="player" english="I hope..." translation="لعل وعسى..."/>
</cutscene>
<cutscene id="int1red_6" explanation="">
<dialogue speaker="player" english="I wonder where we are, anyway?" translation="يا ترى أين نحن أصلا؟"/>
<dialogue speaker="player" english="This seems different from that dimension we crashed in, somehow..." translation="يبدو هذا النطاق مختلفا عن البعد الذي سقطنا فيه، لا أدري كيف..."/>
<dialogue speaker="red" english="I dunno... But we must be close to a teleporter by now..." translation="ما أدراني... لكن لا شك أننا اقتربنا من آلة تنقيل بعد هذا المسير..."/>
</cutscene>
<cutscene id="int1red_7" explanation="">
<dialogue speaker="player" english="We&apos;re there!" translation="وصلنا!"/>
<dialogue speaker="red" english="See? I told you! Let&apos;s get back to the ship!" translation="رأيت؟ قلت لك! فلنرجع للسفينة!"/>
</cutscene>
<cutscene id="int1yellow_1" explanation="">
<dialogue speaker="yellow" english="Oooh! This is interesting..." translation="أوووه! مثير..."/>
<dialogue speaker="yellow" english="Captain! Have you been here before?" translation="قبطان! هل سبق وجئت إلى هنا؟"/>
<dialogue speaker="player" english="What? Where are we?" translation="ما هذا... أين نحن؟"/>
<dialogue speaker="yellow" english="I suspect something deflected our teleporter transmission! This is somewhere new..." translation="يخامرني شك أن شيئا ما أثر في بث تنقيلتنا وأحادها عن مسارها! هذا المكان جديد علينا..."/>
<dialogue speaker="player" english="Oh no!" translation="مصيبة!"/>
<dialogue speaker="player" english="We should try to find a teleporter and get back to the ship..." translation="فلنحاول أن نجد آلة تنقيل حتى نرجع للسفينة..."/>
</cutscene>
<cutscene id="int1yellow_2" explanation="">
<dialogue speaker="player" english="Follow me!" translation="اتبعني!"/>
<dialogue speaker="yellow" english="Right behind you, Captain!" translation="على خطاك نسير، يا قبطان!"/>
</cutscene>
<cutscene id="int1yellow_3" explanation="">
<dialogue speaker="player" english="What do you make of all this, Professor?" translation="...بروفيسور، ما استنتاجاتك؟"/>
<dialogue speaker="yellow" english="I&apos;m guessing this dimension has something to do with the interference that caused us to crash!" translation="أخمن أن لهذا البعد يدا في سبب التشويش الذي سبب حادث ارتطام سفينتنا!"/>
<dialogue speaker="yellow" english="Maybe we&apos;ll find the cause of it here?" translation="لعلنا نلقى أصل السبب هنا؟"/>
<dialogue speaker="player" english="Oh wow! Really?" translation="أوه واو! حقا؟"/>
<dialogue speaker="yellow" english="Well, it&apos;s just a guess. I&apos;ll need to get back to the ship before I can do any real tests..." translation="لكنه تخمين لا أكثر. أحتاج العودة للسفينة قبل أن أجري أي اختبارات جادة..."/>
</cutscene>
<cutscene id="int1yellow_4" explanation="the split paths merge, and Vitellary sees a checkpoint">
<dialogue speaker="yellow" english="Ohh! What was that?" translation="أووو! ما هذا؟"/>
<dialogue speaker="player" english="What was what?" translation="ما هذا الذي تقول عنده ما هذا؟"/>
<dialogue speaker="yellow" english="That big... C thing! I wonder what it does?" translation="تلك... الحاء الكبيرة! في ذلك الشيء! ماذا يفعل يا ترى؟"/>
<dialogue speaker="player" english="Em... I don&apos;t really know how to answer that question..." translation="احم... لا أعرف كيف أجيبك على سؤالك هذا..."/>
<dialogue speaker="player" english="It&apos;s probably best not to acknowledge that it&apos;s there at all." translation="الأفضل أن نتجاهل وجوده، ونمر عليه مرور الكرام."/>
<dialogue speaker="yellow" english="Maybe we should take it back to the ship to study it?" translation="ألا يجدر بنا جلبه للسفينة حتى نجري عليه دراسات؟"/>
<dialogue speaker="player" english="We really shouldn&apos;t think about it too much... Let&apos;s keep moving!" translation="حقا من الأفضل ألا نفرط في التفكير في أمره... ولنتحرك!"/>
</cutscene>
<cutscene id="int1yellow_5" explanation="">
<dialogue speaker="yellow" english="You know, there&apos;s something really odd about this dimension..." translation="لو علمت بم أفكر الآن... أحس أن في هذا البعد أمرا في غاية الغرابة..."/>
<dialogue speaker="player" english="Yeah?" translation="صحيح؟"/>
<dialogue speaker="yellow" english="We shouldn&apos;t really be able to move between dimensions with a regular teleporter..." translation="لا يفترض بنا أن نتمكن من التنقل بين الأبعاد بمجرد آلة تنقيل عادية..."/>
<dialogue speaker="yellow" english="Maybe this isn&apos;t a proper dimension at all?" translation="ألا يحتمل إذن أن هذا ليس ببعد قائم الذات؟"/>
<dialogue speaker="yellow" english="Maybe it&apos;s some kind of polar dimension? Something artificially created for some reason?" translation="ربما هو بعد قطبي، أو شيء من ذلك النوع؟ بمعنى أنه شيء كونوه اصطناعيا لسبب من الأسباب؟"/>
<dialogue speaker="yellow" english="I can&apos;t wait to get back to the ship. I have a lot of tests to run!" translation="لا أطيق الصبر على العودة للسفينة. كم عندي اختبارات كثيرة أجريها!"/>
</cutscene>
<cutscene id="int1yellow_6" explanation="">
<dialogue speaker="yellow" english="I wonder if there&apos;s anything else in this dimension worth exploring?" translation="أتساءل هل في هذا البعد مكانا آخرا يستحق الاستطلاع؟"/>
<dialogue speaker="player" english="Maybe... but we should probably just focus on finding the rest of the crew for now..." translation="ربما... لكن يجدر بنا أن نركز على إنجاد بقية أفراد طاقمنا، ثم للحديث بقية..."/>
</cutscene>
<cutscene id="int1yellow_7" explanation="">
<dialogue speaker="yellow" english="At last!" translation="أخيرا!"/>
<dialogue speaker="yellow" english="Let&apos;s go back to the ship!" translation="فلنرجع إلى السفينة!"/>
</cutscene>
<cutscene id="intermission_2" explanation="">
<dialogue speaker="player" english="Uh oh..." translation="أوه لا..."/>
<dialogue speaker="player" english="Not again!" translation="فاجأتنا مرة أخرى!"/>
</cutscene>
<cutscene id="int2intro_blue" explanation="">
<dialogue speaker="player" english="Victoria? Where are you?" translation="فيكتوريا؟ أين أنت؟"/>
<dialogue speaker="blue" english="Help!" translation="أنقذوني!"/>
<dialogue speaker="player" english="Hang on! I&apos;ll save you!" translation="اصبري! سأنقذك فورا!"/>
</cutscene>
<cutscene id="int2intro_green" explanation="">
<dialogue speaker="player" english="Verdigris? Where are you?" translation="فارديغري؟ أين أنت؟"/>
<dialogue speaker="green" english="Aaagghh!" translation="هاااااع!"/>
<dialogue speaker="player" english="Hang on! I&apos;ll save you!" translation="مهلا! جئت لأنقذك!"/>
</cutscene>
<cutscene id="int2intro_red" explanation="">
<dialogue speaker="player" english="Vermilion? Where are you?" translation="فارميليون؟ أين أنت؟"/>
<dialogue speaker="red" english="Wheeeee!" translation="ويييييه!"/>
<dialogue speaker="player" english="Hang on! I&apos;ll save you!" translation="صبرا! سأنقذك!"/>
</cutscene>
<cutscene id="int2intro_yellow" explanation="">
<dialogue speaker="player" english="Vitellary? Where are you?" translation="فيتيلاري؟ أين ذهبت؟"/>
<dialogue speaker="yellow" english="Captain!" translation="قبطان!"/>
<dialogue speaker="player" english="Hang on! I&apos;ll save you!" translation="تحمل! سأنقذك!"/>
</cutscene>
<cutscene id="int2_blue" explanation="after gravitron">
<dialogue speaker="blue" english="I think I&apos;m going to be sick..." translation="يكفيني، سأصاب بالغثيان..."/>
<dialogue speaker="player" english="I feel dizzy..." translation="آه، يا للدوار..."/>
</cutscene>
<cutscene id="int2_green" explanation="after gravitron">
<dialogue speaker="green" english="Phew! You&apos;re ok!" translation="هووف! أنت بخير!"/>
<dialogue speaker="player" english="I feel dizzy..." translation="آه، يا للدوار..."/>
</cutscene>
<cutscene id="int2_red" explanation="after gravitron">
<dialogue speaker="red" english="Again! Let&apos;s go again!" translation="مرة ثانية! لنجربها مرة ثانية!"/>
<dialogue speaker="player" english="I feel dizzy..." translation="آه، يا للدوار..."/>
</cutscene>
<cutscene id="int2_yellow" explanation="after gravitron">
<dialogue speaker="yellow" english="That was interesting, wasn&apos;t it?" translation="ألم تكن نزهة مثيرة للحماس؟"/>
<dialogue speaker="player" english="I feel dizzy..." translation="آه، يا للدوار..."/>
</cutscene>
<cutscene id="talkpurple_1" explanation="">
<dialogue speaker="purple" english="... I hope Verdigris is alright." translation="... أرجو أن فارديغري بخير."/>
<dialogue speaker="purple" english="If you can find him, he&apos;d be a big help fixing the ship!" translation="ليتك وجدته، لأنه سيكون عونا كبيرا في إصلاح السفينة!"/>
</cutscene>
<cutscene id="talkpurple_2" explanation="">
<dialogue speaker="purple" english="Chief Verdigris is so brave and ever so smart!" translation="كم القائد فيرديغري شجاع، وشهم، وذكي على الدوام!"/>
</cutscene>
<cutscene id="talkpurple_4" explanation="">
<dialogue speaker="purple" english="Welcome back, Captain!" translation="أهلا بعودتك بالسلامة يا قبطان!"/>
<dialogue speaker="purple" english="I think Victoria is quite happy to be back on the ship." translation="أحسب أن فيكتوريا سعيدة جدا بعودتها للسفينة."/>
<dialogue speaker="purple" english="She really doesn&apos;t like adventuring. She gets very homesick!" translation="لا تحب أجواء المغامرات كثيرا. لأنها سرعان ما تحن للبيت!"/>
</cutscene>
<cutscene id="talkpurple_5" explanation="only one of the last 6 strings is shown">
<dialogue speaker="purple" english="Vermilion called in to say hello!" translation="اتصل فارميليون، ويسلم عليك!"/>
<dialogue speaker="purple" english="He&apos;s really looking forward to helping you find the rest of the crew!" translation="يتوق حقا لمساعدتك في إيجاد بقية الطاقم!"/>
<dialogue speaker="purple" english="He&apos;s really looking forward to helping you find Victoria!" translation="يتوق حقا لمساعدتك في إيجاد فيكتوريا!"/>
<dialogue speaker="purple" english="He&apos;s really looking forward to helping you find Vitellary!" translation="يتوق حقا لمساعدتك في إيجاد فيتيلاري!"/>
<dialogue speaker="purple" english="He&apos;s really looking forward to helping you find Verdigris!" translation="يتوق حقا لمساعدتك في إيجاد فارديغري!"/>
<dialogue speaker="purple" english="He&apos;s really looking forward to helping you find Vermilion!" translation="يتوق حقا لمساعدتك في إيجاد فارميليون!"/>
<dialogue speaker="purple" english="He&apos;s really looking forward to helping you find you!" translation="يتوق حقا لمساعدتك في التوصل لإيجاد مكانك!"/>
</cutscene>
<cutscene id="talkpurple_6" explanation="">
<dialogue speaker="purple" english="Captain! You found Verdigris!" translation="قبطان! عثرت على فارديغري!"/>
<dialogue speaker="purple" english="Thank you so much!" translation="حقا أشكرك! شكرا جزيلا!"/>
</cutscene>
<cutscene id="talkpurple_7" explanation="">
<dialogue speaker="purple" english="I&apos;m glad Professor Vitellary is ok!" translation="سعيدة أن البروفيسور فيتيلاري بخير!"/>
<dialogue speaker="purple" english="He had lots of questions for me about this dimension." translation="سألني أسئلة كثيرة عن هذا البعد."/>
<dialogue speaker="purple" english="He&apos;s already gotten to work with his research!" translation="وسرعان ما عاد إلى العمل على أبحاثه!"/>
</cutscene>
<cutscene id="talkpurple_intermission1" explanation="">
<dialogue speaker="player" english="Doctor, something strange happened when we teleported back to the ship..." translation="دكتور، حصل شيء غريب عندما انتقلنا راجعين للسفينة..."/>
<dialogue speaker="player" english="We got lost in another dimension!" translation="تهنا في بعد آخر!"/>
<dialogue speaker="purple" english="Oh no!" translation="أوه لا!"/>
<dialogue speaker="purple" english="Maybe that dimension has something to do with the interference that caused us to crash here?" translation="ربما لذلك البعد دخل في التشويش الذي تسبب في حادث ارتطامنا؟"/>
<dialogue speaker="purple" english="I&apos;ll look into it..." translation="سأنظر في الموضوع..."/>
</cutscene>
<cutscene id="talkpurple_intermission2" explanation="">
<dialogue speaker="player" english="Doctor! Doctor! It happened again!" translation="دكتور! دكتور! تكرر الأمر!"/>
<dialogue speaker="player" english="The teleporter brought us to that weird dimension..." translation="أوصلتنا آلة التنقيل إلى ذلك البعد الغريب..."/>
<dialogue speaker="purple" english="Hmm, there&apos;s definitely something strange happening..." translation="همممم، بالتأكيد يحصل شيء غريب..."/>
<dialogue speaker="purple" english="If only we could find the source of that interference!" translation="ليتنا نتوصل إلى مصدر ذلك التشويش!"/>
</cutscene>
<cutscene id="talkpurple_intermission3" explanation="">
<dialogue speaker="player" english="Doctor, something strange has been happening when we teleport back to the ship..." translation="دكتور، حصل شيء غريب عندما انتقلنا راجعين للسفينة..."/>
<dialogue speaker="player" english="We keep getting brought to another weird dimension!" translation="يوجد بعد غريب، وأرغمنا مجددا على الانتقال إليه!"/>
<dialogue speaker="purple" english="Oh no!" translation="أوه لا!"/>
<dialogue speaker="purple" english="Maybe that dimension has something to do with the interference that caused us to crash here?" translation="ربما لذلك البعد دخل في التشويش الذي تسبب في حادث ارتطامنا؟"/>
<dialogue speaker="purple" english="Hmm, there&apos;s definitely something strange happening..." translation="همممم، بالتأكيد يحصل شيء غريب..."/>
<dialogue speaker="purple" english="If only we could find the source of that interference!" translation="ليتنا نتوصل إلى مصدر ذلك التشويش!"/>
</cutscene>
<cutscene id="talkpurple_8" explanation="">
<dialogue speaker="purple" english="Hey Captain! Now that you&apos;ve turned off the source of the interference, we can warp everyone back to the ship instantly, if we need to!" translation="هيه يا قبطان! بعد أن أغلقت مصدر التشويش، صرنا نستطيع أن ننقل الجميع إلى متن السفينة فور ما نشاء، وقتما نحتاج!"/>
<dialogue speaker="purple" english="Any time you want to come back to the ship, just select the new SHIP option in your menu!" translation="متى أردت العودة للسفينة، يمكنك اختيار خيار السفينة في القائمة!"/>
</cutscene>
<cutscene id="talkgreen_1" explanation="">
<dialogue speaker="green" english="I&apos;m an engineer!" translation="أنا مهندس!"/>
</cutscene>
<cutscene id="talkgreen_2" explanation="">
<dialogue speaker="green" english="I think I can get this ship moving again, but it&apos;s going to take a while..." translation="أستطيع جعل السفينة تتحرك ثانية، لكن عملي سيستغرق فترة..."/>
</cutscene>
<cutscene id="talkgreen_3" explanation="">
<dialogue speaker="green" english="Victoria mentioned something about a lab? I wonder if she found anything down there?" translation="حكت لك فايوليت عن مخبر؟ ترى هل وجدت فيه شيئا؟"/>
</cutscene>
<cutscene id="talkgreen_4" explanation="">
<dialogue speaker="green" english="Vermilion&apos;s back! Yey!" translation="فارميليون عاد! يا لفرحتي، ياي!!"/>
</cutscene>
<cutscene id="talkgreen_5" explanation="">
<dialogue speaker="green" english="The Professor had lots of questions about this dimension for me..." translation="سألني البروفيسور أسئلة كثيرة بخصوص هذا البعد..."/>
<dialogue speaker="green" english="We still don&apos;t really know that much, though." translation="ومع هذا لا زلنا لا نعرف الكثير."/>
<dialogue speaker="green" english="Until we work out what&apos;s causing that interference, we can&apos;t go anywhere." translation="إلى أن نتوصل لمعرفة ما الذي يتسبب بالتداخل، لن نستطيع التحرك قيد أنملة."/>
</cutscene>
<cutscene id="talkgreen_6" explanation="">
<dialogue speaker="green" english="I&apos;m so glad that Violet&apos;s alright!" translation="كم أنا سعيد أن فايوليت بخير!"/>
</cutscene>
<cutscene id="talkgreen_7" explanation="">
<dialogue speaker="green" english="That other dimension we ended up in must be related to this one, somehow..." translation="هل تذكرت ذلك البعد البديل الذي انتهى المطاف بنا إليه؟ أظن بينه وهذا البعد علاقة ما..."/>
</cutscene>
<cutscene id="talkgreen_8" explanation="">
<dialogue speaker="green" english="The antenna&apos;s broken! This is going to be very hard to fix..." translation="الهوائي مكسور! سيصعب التصليح جدا..."/>
</cutscene>
<cutscene id="talkgreen_9" explanation="">
<dialogue speaker="green" english="It looks like we were warped into solid rock when we crashed!" translation="يبدو أننا عندما ارتطمنا هنا، حصلت تنقيلة للسفينة إلى داخل كتلة صخرية!"/>
<dialogue speaker="green" english="Hmm. It&apos;s going to be hard to separate from this..." translation="هممم. سيصعب فصل السفينة عنها..."/>
</cutscene>
<cutscene id="talkgreen_10" explanation="">
<dialogue speaker="green" english="The ship&apos;s all fixed up. We can leave at a moment&apos;s notice!" translation="أصلحت السفينة بأكملها. يمكننا المغادرة في أي لحظة، والأمر رهن إشارتك!"/>
</cutscene>
<cutscene id="talkred_1" explanation="">
<dialogue speaker="red" english="Don&apos;t worry, Sir!" translation="لا قلق، يا فندم!"/>
<dialogue speaker="red" english="We&apos;ll find a way out of here!" translation="سنبحث عن طريق للخروج من هنا!"/>
</cutscene>
<cutscene id="talkred_2" explanation="">
<dialogue speaker="red" english="I hope Victoria is ok..." translation="أرجو أن فيكتوريا بخير..."/>
<dialogue speaker="red" english="She doesn&apos;t handle surprises very well..." translation="أعرفها، ولا تتحمل المفاجآت جيدا..."/>
</cutscene>
<cutscene id="talkred_3" explanation="">
<dialogue speaker="red" english="I don&apos;t know how we&apos;re going to get this ship working again!" translation="لا أدري كيف سنتصرف لتشغيل هذه السفينة مجددا!"/>
<dialogue speaker="red" english="Chief Verdigris would know what to do..." translation="لو كان القائد فارديغري هنا، لكان يعرف الحل..."/>
</cutscene>
<cutscene id="talkred_4" explanation="">
<dialogue speaker="red" english="I wonder what caused the ship to crash here?" translation="يا ترى ما الذي سبب ارتطام السفينة في هذا المكان؟"/>
<dialogue speaker="red" english="It&apos;s the shame the Professor isn&apos;t here, huh? I&apos;m sure he could work it out!" translation="خسارة أن البروفيسور ليس هنا. أليس كذلك؟ أنا متأكد أنه لن يحير في إيجاد الجواب!"/>
</cutscene>
<cutscene id="talkred_5" explanation="">
<dialogue speaker="red" english="It&apos;s great to be back!" translation="ما أحلى العودة!"/>
<dialogue speaker="red" english="I can&apos;t wait to help you find the rest of the crew!" translation="أتوق بفارغ الصبر لمساعدتك على إيجاد بقية الطاقم!"/>
<dialogue speaker="red" english="It&apos;ll be like old times, huh, Captain?" translation="مثل الأيام الخوالي، أليس كذلك يا قبطان؟"/>
</cutscene>
<cutscene id="talkred_6" explanation="">
<dialogue speaker="red" english="It&apos;s good to have Victoria back with us." translation="جيد أن فيكتوريا عادت إلينا."/>
<dialogue speaker="red" english="She really seems happy to get back to work in her lab!" translation="بدت لي في غاية السعادة عندما رجعت للعمل في مخبرها!"/>
</cutscene>
<cutscene id="talkred_7" explanation="">
<dialogue speaker="red" english="I think I saw Verdigris working on the outside of the ship!" translation="أظن أني رأيت فارديغري منهمكا في العمل خارج السفينة!"/>
</cutscene>
<cutscene id="talkred_8" explanation="">
<dialogue speaker="red" english="You found Professor Vitellary! All right!" translation="وجدت البروفيسور فيتيلاري! أحلى الأخبار!"/>
<dialogue speaker="red" english="We&apos;ll have this interference thing worked out in no time now!" translation="ما دام الأمر هكذا، فسرعان ما سنحل مشكلة التشويش هذه!"/>
</cutscene>
<cutscene id="talkred_9" explanation="">
<dialogue speaker="red" english="That other dimension was really strange, wasn&apos;t it?" translation="كان ذلك البعد البديل في غاية الغرابة، أليس كذلك؟"/>
<dialogue speaker="red" english="I wonder what caused the teleporter to send us there?" translation="ترى ما الذي جعل آلة التنقيل ترسلنا إلى هناك؟"/>
</cutscene>
<cutscene id="talkred_10" explanation="">
<dialogue speaker="red" english="Heya Captain!" translation="ويه يا قبطان!"/>
<dialogue speaker="red" english="This way looks a little dangerous..." translation="هذا الطريق يبدو لي خطيرا قليلا..."/>
</cutscene>
<cutscene id="talkred_11" explanation="">
<dialogue speaker="red" english="I&apos;m helping!" translation="سأساعدك!"/>
</cutscene>
<cutscene id="talkred_12" explanation="">
<dialogue speaker="red" english="Hey Captain!" translation="أهلا يا قبطان!"/>
<dialogue speaker="red" english="I found something interesting around here - the same warp signature I saw when I landed!" translation="عثرت على شيء مثير للاهتمام هنا - نفس بصمة الطاقة لآلة التنقيل التي رأيتها عندما نزلت!"/>
<dialogue speaker="red" english="Someone from the ship must be nearby..." translation="لا بد أن أحد أفراد طاقم السفينة قربنا..."/>
</cutscene>
<cutscene id="talkred_13" explanation="">
<dialogue speaker="red" english="This dimension is pretty exciting, isn&apos;t it?" translation="هذا البعد حافل بالتشويق والإثارة، صح أو لا؟"/>
<dialogue speaker="red" english="I wonder what we&apos;ll find?" translation="يا ترى ماذا سنلقى؟"/>
</cutscene>
<cutscene id="talkblue_1" explanation="">
<dialogue speaker="blue" english="Any signs of Professor Vitellary?" translation="هل من علامات تدل على مكان البروفيسور فيتيلاري؟"/>
<dialogue speaker="player" english="Sorry, not yet..." translation="معذرة، لم أجده بعد..."/>
<dialogue speaker="blue" english="I hope he&apos;s ok..." translation="أتمنى أنه بخير..."/>
</cutscene>
<cutscene id="talkblue_2" explanation="">
<dialogue speaker="blue" english="Thanks so much for saving me, Captain!" translation="شكرا من القلب لإنقاذي يا قبطان!"/>
</cutscene>
<cutscene id="talkblue_3" explanation="">
<dialogue speaker="blue" english="I&apos;m so glad to be back!" translation="كم أنا سعيدة بعودتي!"/>
<dialogue speaker="blue" english="That lab was so dark and scary! I didn&apos;t like it at all..." translation="كم كان ذلك المخبر مظلما... موحشا... مخيفا! لم أستلطفه إطلاقا..."/>
</cutscene>
<cutscene id="talkblue_4" explanation="">
<dialogue speaker="blue" english="Vitellary&apos;s back? I knew you&apos;d find him!" translation="عاد فيتيلاري؟ كنت واثقة أنكما ستلتقيان!"/>
<dialogue speaker="blue" english="I mean, I admit I was very worried that you wouldn&apos;t..." translation="بل أعترف... أني خفت جدا أنك ربما ذهبت ورجعت دون إيجاده..."/>
<dialogue speaker="blue" english="or that something might have happened to him..." translation="أو أن مكروها حصل له، حاشا وكلا..."/>
<dialogue speaker="blue" english="sniff..." translation="... إهئ!"/>
<dialogue speaker="player" english="Doctor Victoria? He&apos;s ok!" translation="دكتورة فيكتوريا؟ هوني عليك. لم يحصل شر له، فلا داعي للقلق!"/>
<dialogue speaker="blue" english="Oh! Sorry! I was just thinking about what if he wasn&apos;t?" translation="أوه! متأسفة! تخيلت أنه لم يكن بخير، ماذا كنت لأفعل وقتها؟"/>
<dialogue speaker="blue" english="Thank you, Captain!" translation="أشكرك جزيلا، يا قبطان!"/>
</cutscene>
<cutscene id="talkblue_5" explanation="">
<dialogue speaker="blue" english="You found Vermilion! Great!" translation="وجدت فارميليون! هذا خبر رائع!"/>
<dialogue speaker="blue" english="I wish he wasn&apos;t so reckless!" translation="ليته يقلل من طيشه!"/>
<dialogue speaker="blue" english="He&apos;ll get himself into trouble..." translation="سيودي به تهوره إلى مشكلة كبيرة..."/>
</cutscene>
<cutscene id="talkblue_6" explanation="">
<dialogue speaker="blue" english="Verdigris is ok! Violet will be so happy!" translation="فارديغري بخير! ستسعد فايولت كثيرا!"/>
<dialogue speaker="blue" english="I&apos;m happy!" translation="أنا سعيدة!"/>
<dialogue speaker="blue" english="Though I was very worried..." translation="مع ذلك كنت قلقة جدا..."/>
</cutscene>
<cutscene id="talkblue_7" explanation="">
<dialogue speaker="blue" english="Why did the teleporter send us to that scary dimension?" translation="لماذا أرسلتنا آلة التنقيل تلك إلى ذلك البعد الموحش؟"/>
<dialogue speaker="blue" english="What happened?" translation="ماذا حصل وقتها؟"/>
<dialogue speaker="player" english="I don&apos;t know, Doctor..." translation="لا أدري يا دكتورة..."/>
<dialogue speaker="blue" english="Why?" translation="لماذا؟"/>
</cutscene>
<cutscene id="talkblue_8" explanation="">
<dialogue speaker="blue" english="Heya Captain!" translation="يا أهلا يا قبطان!"/>
<dialogue speaker="blue" english="Are you going to try and find the rest of these shiny things?" translation="هل نويت محاولة جمع بقية هذه الأغراض اللماعة؟"/>
</cutscene>
<cutscene id="talkblue_trinket1" explanation="">
<dialogue speaker="blue" english="Hey Captain, I found this in that lab..." translation="أهلا يا قبطان، وجدت هذا في ذلك المخبر..."/>
<dialogue speaker="blue" english="Any idea what it does?" translation="هل عندك فكرة بم يفيدنا؟"/>
<dialogue speaker="player" english="Sorry, I don&apos;t know!" translation="أتأسف، لا أدري!"/>
<dialogue speaker="player" english="They seem important, though..." translation="لكنه يبدو مهما..."/>
<dialogue speaker="player" english="Maybe something will happen if we find them all?" translation="ربما لو جمعناهم كلهم يحصل شيء؟"/>
</cutscene>
<cutscene id="talkblue_trinket2" explanation="">
<dialogue speaker="blue" english="Captain! Come have a look at what I&apos;ve been working on!" translation="قبطان! عندي شيء كنت أعمل عليه، لو أردت رؤيته هيا!"/>
<dialogue speaker="blue" english="It looks like these shiny things are giving off a strange energy reading!" translation="يبدو أن تلك اللماعات الغريبات ترصد منها إشارة طاقة غريبة!"/>
<dialogue speaker="blue" english="So I analysed it..." translation="ولهذا السبب أجريت دراسة تحليلية عليها..."/>
</cutscene>
<cutscene id="talkblue_trinket3" explanation="">
<dialogue speaker="blue" english="Captain! Come have a look at what I&apos;ve been working on!" translation="قبطان! عندي شيء كنت أعمل عليه، لو أردت رؤيته هيا!"/>
<dialogue speaker="blue" english="I found this in that lab..." translation="وجدت هذا في ذلك المخبر..."/>
<dialogue speaker="blue" english="It seemed to be giving off a weird energy reading..." translation="مما بدا لي، صدر منه إشارة طاقة غريبة..."/>
<dialogue speaker="blue" english="So I analysed it..." translation="ولهذا السبب أجريت دراسة تحليلية عليه..."/>
</cutscene>
<cutscene id="talkblue_trinket4" explanation="">
<dialogue speaker="blue" english="...and I was able to find more of them with the ship&apos;s scanner!" translation="...واستطعت أن أجد المزيد منهم بفضل ماسحة السفينة!"/>
<dialogue speaker="blue" english="If you get a chance, it might be worth finding the rest of them!" translation="لو سنحت لك الفرصة، ربما يستحق العناء جمع بقية تلك الأغراض!"/>
<dialogue speaker="blue" english="Don&apos;t put yourself in any danger, though!" translation="لكن... إياك وتعريض نفسك للأخطار!"/>
</cutscene>
<cutscene id="talkblue_trinket5" explanation="">
<dialogue speaker="blue" english="...but it looks like you&apos;ve already found all of them in this dimension!" translation="...إلا أنك وجدتها كلها في هذا البعد قبل حديثنا!"/>
<dialogue speaker="player" english="Oh? Really?" translation="أوه؟ حقا تقولين؟"/>
<dialogue speaker="blue" english="Yeah, well done! That can&apos;t have been easy!" translation="أجل، أحسنت حقا! لا أظن ذلك كان بالمهمة السهلة!"/>
</cutscene>
<cutscene id="talkblue_trinket6" explanation="">
<dialogue speaker="blue" english="...and they&apos;re related. They&apos;re all a part of something bigger!" translation="...كما أن علاقة تجمع بينها. كل منها [بعض] من [كل]!"/>
<dialogue speaker="player" english="Oh? Really?" translation="أوه؟ حقا تقولين؟"/>
<dialogue speaker="blue" english="Yeah! There seem to be twenty variations of the fundamental energy signature..." translation="أجل! يبدو أن للإشارة الأساسية الطاقية عشرون نوعا بتغييرات طفيفة..."/>
<dialogue speaker="blue" english="Wait..." translation="صبرا لحظة..."/>
<dialogue speaker="blue" english="Does that mean you&apos;ve found all of them?" translation="هل عنيت بكلامك أنك وجدتها كلها؟"/>
</cutscene>
<cutscene id="talkyellow_1" explanation="">
<dialogue speaker="yellow" english="I&apos;m making some fascinating discoveries, captain!" translation="توصلت إلى اكتشافات مدهشة، يا قبطان!"/>
</cutscene>
<cutscene id="talkyellow_2" explanation="">
<dialogue speaker="yellow" english="This isn&apos;t like any other dimension we&apos;ve been to, Captain." translation="هذا البعد لا يشبه الأبعاد الأخرى التي زرناها يا قبطان."/>
<dialogue speaker="yellow" english="There&apos;s something strange about this place..." translation="في هذا المكان أمر غريب..."/>
</cutscene>
<cutscene id="talkyellow_3" explanation="">
<dialogue speaker="yellow" english="Captain, have you noticed that this dimension seems to wrap around?" translation="قبطان، هل لاحظت أن هذا البعد يبدو وكأنه يلتف حول نفسه؟"/>
<dialogue speaker="player" english="Yeah, it&apos;s strange..." translation="أجل، غريب ذلك..."/>
<dialogue speaker="yellow" english="It looks like this dimension is having the same stability problems as our own!" translation="يبدو أن هذا البعد يتشاطر مع بعدنا في ديارنا نفس مشاكل الاستقرار!"/>
<dialogue speaker="yellow" english="I hope we&apos;re not the ones causing it..." translation="أرجو أننا لسنا المتسببين بذلك..."/>
<dialogue speaker="player" english="What? Do you think we might be?" translation="ماذا؟ أتظننا سببا؟"/>
<dialogue speaker="yellow" english="No no... that&apos;s very unlikely, really..." translation="لا لا... ذلك احتمال ضئيل، لا يؤخذ به حقا..."/>
</cutscene>
<cutscene id="talkyellow_4" explanation="">
<dialogue speaker="yellow" english="My guess is that whoever used to live here was experimenting with ways to stop the dimension from collapsing." translation="حسب تخميناتي، فمن كانوا يعيشون هنا أجروا تجارب كثيرة وبحثوا في طرق إيقاف انهيار هذا البعد."/>
<dialogue speaker="yellow" english="It would explain why they&apos;ve wrapped the edges..." translation="يفسر هذا لماذا حاولوا ربط الحواف ببعضها..."/>
<dialogue speaker="yellow" english="Hey, maybe that&apos;s what&apos;s causing the interference?" translation="هيه، ربما ذلك ما يسبب التشويش؟"/>
</cutscene>
<cutscene id="talkyellow_5" explanation="">
<dialogue speaker="yellow" english="I wonder where the people who used to live here have gone?" translation="أتساءل إلى أين سافر الناس الذين كانوا يعيشون هنا؟"/>
</cutscene>
<cutscene id="talkyellow_6" explanation="">
<dialogue speaker="yellow" english="I think it&apos;s no coincidence that the teleporter was drawn to that dimension..." translation="لا أظنها صدفة أن آلة التنقيل استقطبتنا إلى هذا البعد..."/>
<dialogue speaker="yellow" english="There&apos;s something there. I think it might be causing the interference that&apos;s stopping us from leaving..." translation="يوجد هناك شيء. وأظنه السبب في التشويش الذي يمنعنا من المغادرة..."/>
</cutscene>
<cutscene id="talkyellow_7" explanation="">
<dialogue speaker="yellow" english="I&apos;m glad Verdigris is alright." translation="سعيد أن فارديغري بخير."/>
<dialogue speaker="yellow" english="It&apos;ll be a lot easier to find some way out of here now that we can get the ship working again!" translation="سيسهل كثيرا إيجاد مخرج من هنا بعد أن صارت السفينة تعمل!"/>
</cutscene>
<cutscene id="talkyellow_8" explanation="">
<dialogue speaker="yellow" english="Ah, you&apos;ve found Doctor Victoria? Excellent!" translation="أه، وجدت الدكتورة فيكتوريا! أخبار رائعة!"/>
<dialogue speaker="yellow" english="I have lots of questions for her!" translation="عندي أسئلة كثيرة أطرحها عليها!"/>
</cutscene>
<cutscene id="talkyellow_9" explanation="">
<dialogue speaker="yellow" english="Vermilion says that he was trapped in some sort of tunnel?" translation="قال فارميليون أنه كان عالقا في نفق ما؟"/>
<dialogue speaker="player" english="Yeah, it just seemed to keep going and going..." translation="أجل، بدا وكأنه يستمر بلا نهاية..."/>
<dialogue speaker="yellow" english="Interesting... I wonder why it was built?" translation="معلومة تفيد... يا ترى ما سبب بنائه على تلك الحالة؟"/>
</cutscene>
<cutscene id="talkyellow_10" explanation="">
<dialogue speaker="yellow" english="It&apos;s good to be back!" translation="ما أحلى العودة!"/>
<dialogue speaker="yellow" english="I&apos;ve got so much work to catch up on..." translation="عندي شغل كثير فاتني يجب أن أتداركه..."/>
</cutscene>
<cutscene id="talkyellow_11" explanation="">
<dialogue speaker="yellow" english="I know it&apos;s probably a little dangerous to stay here now that this dimension is collapsing..." translation="أعرف أن البقاء في هذا البعد، وهو آهل للانهيار، مجازفة بعض الشيء..."/>
<dialogue speaker="yellow" english="...but it&apos;s so rare to find somewhere this interesting!" translation="...لكن يندر أن تجد في الحياة أمرا مثيرا للاهتمام بنفس القدر!"/>
<dialogue speaker="yellow" english="Maybe we&apos;ll find the answers to our own problems here?" translation="ربما قد نجد هنا حلولا للمشاكل التي اعترضتنا في ديارنا؟"/>
</cutscene>
<cutscene id="talkyellow_trinket1" explanation="">
<dialogue speaker="yellow" english="Captain! I&apos;ve been meaning to give this to you..." translation="قبطان! أردت أن أعطيك هذا..."/>
<dialogue speaker="player" english="Professor! Where did you find this?" translation="بروفيسور! من أين لك هذا؟"/>
<dialogue speaker="yellow" english="Oh, it was just lying around that space station." translation="أوه، كان غرضا منسيا في تلك المحطة الفضائية."/>
<dialogue speaker="yellow" english="It&apos;s a pity Doctor Victoria isn&apos;t here, she loves studying that sort of thing..." translation="خسارة أن فيكتوريا ليست هنا، لأنها تعشق دراسة تلك الأشياء..."/>
<dialogue speaker="player" english="Any idea what it does?" translation="هل عندك فكرة عن فائدته؟"/>
<dialogue speaker="yellow" english="Nope! But it is giving off a strange energy reading..." translation="أبدا! لكنه يصدر إشارة طاقة غريبة.."/>
</cutscene>
<cutscene id="talkyellow_trinket2" explanation="">
<dialogue speaker="yellow" english="...so I used the ship&apos;s scanner to find more of them!" translation="...ولهذا السبب استغليت راصدات السفينة كي أبحث عن المزيد منه!"/>
<dialogue speaker="yellow" english="...Please don&apos;t let them distract you from finding Victoria, though!" translation="...لكن أتمنى ألا يشتت هذا اهتمامك عن إنقاذ فيكتوريا!"/>
<dialogue speaker="yellow" english="I hope she&apos;s ok..." translation="أرجو أنها بخير..."/>
</cutscene>
<cutscene id="talkyellow_trinket3" explanation="">
<dialogue speaker="yellow" english="Can&apos;t seem to detect any more of them nearby, though." translation="لم أعد أستطيع استكشاف المزيد منه على مقربة منا."/>
<dialogue speaker="yellow" english="Maybe you&apos;ve found them all?" translation="ربما يعني هذا أنك وجدتهم كلهم؟"/>
</cutscene>
<cutscene id="finallevel_teleporter" explanation="">
<dialogue speaker="purple" english="Welcome back!" translation="يا أهلا، يا أهلا بالعودة!"/>
<dialogue speaker="purple" english="..." translation="..."/>
<dialogue speaker="purple" english="Um, where&apos;s Captain Viridian?" translation="احم، أين القبطان فيريديان؟"/>
<dialogue speaker="player" english="... Hello?" translation="... يا جمع؟"/>
<dialogue speaker="player" english="Is anyone there?" translation="هل من أحد معي؟"/>
</cutscene>
<cutscene id="terminal_finallevel" explanation="">
<dialogue speaker="gray" english="* DIMENSIONAL STABILITY GENERATOR *
[ Currently Generating ]
Maximum Stability
[ Status ]
Online
READY _" translation=" * فارض استقرار البعد *
[ جار توليد الفرض ]
أشد درجات الاستقرار
[ الوضع الحالي ]
يـعـمـل
جاهز_" tt="1"/>
<dialogue speaker="cyan" english="Aha! This must be what&apos;s causing the interference!" translation="آ-هاه! هذا مسبب التشويش بلا شك!"/>
<dialogue speaker="cyan" english="I wonder if I can turn it off?" translation="هل يمكنني إطفاؤه يا ترى؟"/>
<dialogue speaker="gray" english="WARNING: Disabling the Dimensional Stability Generator may lead to instability! Are you sure you want to do this?" translation="تحذير: تعطيل عمل فارض استقرار البعد قد يؤدي لحصول اختلال في الاستقرار! أواثق أن هذه نيتك حقا؟
[ نعم / لا ]"/>
<dialogue speaker="cyan" english="Yes!" translation="نعم!" case="1"/>
<dialogue speaker="gray" english="Seriously! The whole dimension could collapse! Just think about this for a minute!
Are you really sure you want to do this?" translation="ويحك أرجوك! قد يودي هذا بهذا البعد برمته إلى الانهيار الشامل! هلا تعقلت؟ هلا فكرت في التبعات ببعض الجدية، ولو لبرهة؟ ما هو قرارك؟
[ نعم / لا ]"/>
<dialogue speaker="cyan" english="Yes!" translation="نعم!" case="2"/>
</cutscene>
<cutscene id="finalterminal_finish" explanation="">
<dialogue speaker="gray" english="-= WARNING =-
DIMENSIONAL STABILISER OFFLINE" translation="-= تحذير =-
فارض استقرار البعد معطل" centertext="1" pad="1"/>
<dialogue speaker="cyan" english="Uh oh..." translation="أه لا، أه لا..."/>
</cutscene>
<cutscene id="gamecomplete" explanation="">
<dialogue speaker="yellow" english="Any moment now..." translation="صبرا جميلا..."/>
</cutscene>
<cutscene id="gamecomplete_ending" explanation="">
<dialogue speaker="player" english="Hello!" translation="أهلا يا جماعة!"/>
<dialogue speaker="purple" english="Captain!" translation="قبطان!" case="1" pad_right="8"/>
<dialogue speaker="yellow" english="Captain!" translation="قبطان!" case="2" pad_right="6"/>
<dialogue speaker="red" english="Captain!" translation="قبطان!" case="3" pad_right="4"/>
<dialogue speaker="green" english="Captain!" translation="قبطان!" case="4" pad_right="2"/>
<dialogue speaker="blue" english="Captain!" translation="قبطان!" case="5"/>
<dialogue speaker="blue" english="You&apos;re alright!" translation="أنت بخير..."/>
<dialogue speaker="blue" english="I knew you&apos;d be ok!" translation="كنت على ثقة بنجاتك!"/>
<dialogue speaker="purple" english="We were very worried when you didn&apos;t come back..." translation="قلقنا كثيرا عندما تأخرت عودتك..."/>
<dialogue speaker="green" english="...but when you turned off the source of the interference..." translation="...لكن عندما أطفأت أنت مصدر التشويش..."/>
<dialogue speaker="yellow" english="...we were able to find you with the ship&apos;s scanners..." translation="...تمكننا براصدات السفينة من تحديد مكانك..."/>
<dialogue speaker="red" english="...and teleport you back on board!" translation="...وقمنا بتنقيلك على متن السفينة!"/>
<dialogue speaker="player" english="That was lucky!" translation="ذلك من حسن حظي!"/>
<dialogue speaker="player" english="Thanks guys!" translation="شكرا يا جماعة!"/>
<dialogue speaker="yellow" english="...it looks like this dimension is starting to destabilise, just like our own..." translation="...يبدو أن استقرار هذا البعد يختل، مثل ما حصل مع بعدنا..."/>
<dialogue speaker="red" english="...we can stay and explore for a little longer, but..." translation="...يمكننا أن نبقى قليلا بعد هنا لاستطلاع المكان..."/>
<dialogue speaker="yellow" english="...eventually, it&apos;ll collapse completely." translation="...لكن ستأتي لحظة ينهار فيها هذا البعد برمته."/>
<dialogue speaker="green" english="There&apos;s no telling exactly how long we have here. But the ship&apos;s fixed, so..." translation="لا سبيل لنحدد بالضبط كم المهلة الزمنية المتبقية لنا هنا. لكن سفينتنا أصلحت على كل حال..."/>
<dialogue speaker="blue" english="...as soon as we&apos;re ready, we can go home!" translation="...لذا، فور أن نستعد، نستطيع العودة لديارنا!"/>
<dialogue speaker="purple" english="What now, Captain?" translation="والآن يا قبطان، ماذا نحن فاعلون؟"/>
<dialogue speaker="player" english="Let&apos;s find a way to save this dimension!" translation="فلنبحث عن طريقة لإنقاذ هذا البعد!"/>
<dialogue speaker="player" english="And a way to save our home dimension too!" translation="وكذلك... عن طريقة لإنقاذ بعدنا الأصلي!"/>
<dialogue speaker="player" english="The answer is out there, somewhere!" translation="الجواب ينتظرنا في مكان ما!"/>
<dialogue speaker="player" english="Let&apos;s go!" translation="هيا، فلننطلق!"/>
</cutscene>
<cutscene id="startepilogue" explanation="">
<dialogue speaker="blue" english="Wow! You found all of them!" translation="واو! وجدتها كلها!"/>
<dialogue speaker="player" english="Really? Great!" translation="صحيح؟ هذا خبر عظيم!"/>
<dialogue speaker="blue" english="I&apos;ll run some tests and see if I can work out what they&apos;re for..." translation="سأجري بعض الاختبارات كي أحدد ما فائدتها..."/>
<dialogue speaker="player" english="That... that didn&apos;t sound good..." translation="ليس... ليس هذا مطمئنا..."/>
<dialogue speaker="blue" english="Run!" translation="اهربوا!"/>
<dialogue speaker="player" english="Oh no!" translation="أه لا!"/>
<dialogue speaker="red" english="Not again!" translation="آه ليس مجددا!"/>
<dialogue speaker="player" english="Wait! It&apos;s stopped!" translation="صبرا! توقف الصوت!"/>
<dialogue speaker="purple" english="This is where we were storing those shiny things? What happened?" translation="هنا كنا نخزن تلك الأغراض اللماعة؟ ماذا حصل لها؟"/>
<dialogue speaker="player" english="We were just playing with them, and..." translation="كنا نعبث بها فحسب، وإذ بها..."/>
<dialogue speaker="player" english="...they suddenly exploded!" translation="...تنفجر فجأة!"/>
<dialogue speaker="blue" english="But look what they made! Is that a teleporter?" translation="لكن انظروا ماذا صنعت! أليست آلة تنقيل؟"/>
<dialogue speaker="yellow" english="I think so, but..." translation="أظن، لكنها..."/>
<dialogue speaker="yellow" english="I&apos;ve never seen a teleporter like that before..." translation="مختلفة عن آلات التنقيل التي رأيتها..."/>
<dialogue speaker="red" english="We should investigate!" translation="ضروري أن نتحرى الأمر!"/>
<dialogue speaker="purple" english="What do you think, Captain?" translation="ما رأيك يا قبطان؟"/>
<dialogue speaker="purple" english="Should we find out where it leads?" translation="هل يجدر بنا أن نتحقق من وجهته؟"/>
<dialogue speaker="player" english="Let&apos;s go!" translation="هيا بنا!"/>
<dialogue speaker="blue" english="Oh no! We&apos;re trapped!" translation="أوه لا! احتجزنا!"/>
<dialogue speaker="yellow" english="Oh dear..." translation="يا ويلي..."/>
<dialogue speaker="player" english="Hmm... how should we get out of this?" translation="هممم... كيف سنفلت من هذا المأزق؟"/>
<dialogue speaker="player" english="COMBINE!" translation="اتحاد!" case="1"/>
<dialogue speaker="purple" english="COMBINE!" translation="اتحاد!" case="2"/>
<dialogue speaker="yellow" english="COMBINE!" translation="اتحاد!" case="3"/>
<dialogue speaker="red" english="COMBINE!" translation="اتحاد!" case="4"/>
<dialogue speaker="green" english="COMBINE!" translation="اتحاد!" case="5"/>
<dialogue speaker="blue" english="COMBINE!" translation="اتحاد!" case="6"/>
<dialogue speaker="purple" english="Or, you know... we could have just warped back to the ship..." translation="هل تعلمون... عوض هذا، كنا نستطيع التنقل للسفينة..."/>
<dialogue speaker="green" english="Wow! What is this?" translation="واو! ما هذا؟"/>
<dialogue speaker="yellow" english="It looks like another laboratory!" translation="كأنه مخبر آخر!"/>
<dialogue speaker="red" english="Let&apos;s have a look around!" translation="فلنلق نظرة في الأنحاء!"/>
</cutscene>
<cutscene id="talkpurple_9" explanation="">
<dialogue speaker="purple" english="Look at all this research! This is going to be a big help back home!" translation="يا سلام، هل رأيت كل هذه الأبحاث؟ ستفيدنا فائدة جمة لو رجعنا بها للوطن!"/>
</cutscene>
<cutscene id="talkgreen_11" explanation="">
<dialogue speaker="green" english="I wonder why they abandoned this dimension? They were so close to working out how to fix it..." translation="يا ترى لماذا هجروا هذا البعد؟ مع أنهم أوشكوا على اكتشاف الحل لإصلاحه..."/>
<dialogue speaker="green" english="Maybe we can fix it for them? Maybe they&apos;ll come back?" translation="ربما نصلحه نيابة عنهم؟ ربما يعودون بعد ذلك؟"/>
</cutscene>
<cutscene id="talkblue_9" explanation="">
<dialogue speaker="blue" english="This lab is amazing! The scientists who worked here know a lot more about warp technology than we do!" translation="مخبر رائع! علماؤه يعرفون أكثر منا بكثير عن تقنيات علوم التنقيل المكاني!"/>
</cutscene>
<cutscene id="talkyellow_12" explanation="">
<dialogue speaker="yellow" english="Captain! Have you seen this?" translation="قبطان! هل سبق ورأيت هذا؟"/>
<dialogue speaker="yellow" english="With their research and ours, we should be able to stabilise our own dimension!" translation="لو جمعنا بين أبحاثهم وأبحاثنا، سنتوصل للحل الذي يحقق استقرار بعد أوطاننا!"/>
<dialogue speaker="yellow" english="We&apos;re saved!" translation="حقا نجونا!"/>
</cutscene>
<cutscene id="talkred_14" explanation="super gravitron (difficult minigame)">
<dialogue speaker="red" english="Look what I found!" translation="شاهدوا ماذا وجدت!"/>
<dialogue speaker="red" english="It&apos;s pretty hard, I can only last for about 10 seconds..." translation="اللعبة صعبة جدا، لم أستطع الصمود أكثر من 10 ثوان..."/>
</cutscene>
<cutscene id="terminal_jukebox" explanation="">
<dialogue speaker="gray" english="-= JUKEBOX =-
Songs will continue to play until you leave the ship.
Collect trinkets to unlock new songs!" translation="-= مشغل الموسيقى =-
يستمر عزف الأغنية حتى مغادرة السفينة.
كلما جمعت تذكارات، فتحت أغان جديدة!" centertext="1" padtowidth="264"/>
</cutscene>
<cutscene id="terminal_jukeunlock1" explanation="">
<dialogue speaker="gray" english="NEXT UNLOCK:
5 Trinkets
Pushing Onwards" translation="الشرط: 5 تذكارات
يفتح الأغنية القادمة
Pushing Onwards" tt="1" pad="1"/>
</cutscene>
<cutscene id="terminal_jukeunlock2" explanation="">
<dialogue speaker="gray" english="NEXT UNLOCK:
8 Trinkets
Positive Force" translation="الشرط: 8 تذكارات
يفتح الأغنية القادمة
Positive Force" tt="1" pad="1"/>
</cutscene>
<cutscene id="terminal_jukeunlock3" explanation="">
<dialogue speaker="gray" english="NEXT UNLOCK:
10 Trinkets
Presenting VVVVVV" translation="الشرط: 10 تذكارات
يفتح الأغنية القادمة
Presenting VVVVVV" tt="1" pad="1"/>
</cutscene>
<cutscene id="terminal_jukeunlock4" explanation="">
<dialogue speaker="gray" english="NEXT UNLOCK:
12 Trinkets
Potential for Anything" translation="الشرط: 12 تذكار
يفتح الأغنية القادمة
Potential for Anything" tt="1" pad="1"/>
</cutscene>
<cutscene id="terminal_jukeunlock41" explanation="">
<dialogue speaker="gray" english="NEXT UNLOCK:
14 Trinkets
Pressure Cooker" translation="الشرط: 14 تذكار
يفتح الأغنية القادمة
Pressure Cooker" tt="1" pad="1"/>
</cutscene>
<cutscene id="terminal_jukeunlock5" explanation="">
<dialogue speaker="gray" english="NEXT UNLOCK:
16 Trinkets
Predestined Fate" translation="الشرط: 16 تذكار
يفتح الأغنية القادمة
Predestined Fate" tt="1" pad="1"/>
</cutscene>
<cutscene id="terminal_jukeunlock6" explanation="">
<dialogue speaker="gray" english="NEXT UNLOCK:
18 Trinkets
Popular Potpourri" translation="الشرط: 18 تذكار
يفتح الأغنية القادمة
Popular Potpourri" tt="1" pad="1"/>
</cutscene>
<cutscene id="terminal_jukeunlock7" explanation="">
<dialogue speaker="gray" english="NEXT UNLOCK:
20 Trinkets
Pipe Dream" translation="الشرط: 20 تذكار
يفتح الأغنية القادمة
Pipe Dream" tt="1" pad="1"/>
</cutscene>
<cutscene id="terminal_station_1" explanation="">
<dialogue speaker="gray" english="-= PERSONAL LOG =-" translation="-= مذكرات شخصية =-" padtowidth="280"/>
<dialogue speaker="gray" english="Almost everyone has been evacuated from the space station now. The rest of us are leaving in a couple of days, once our research has been completed." translation="أخلينا الجميع من المحطة الفضائية. سيغادر من تبقى منا بعد يومين، عقب انتهاء أبحاثنا. ؝" pad="1"/>
</cutscene>
<cutscene id="terminal_station_2" explanation="">
<dialogue speaker="gray" english="-= Research Notes =-" translation="-= ملاحظات الباحثين =-" padtowidth="264"/>
<dialogue speaker="gray" english="...everything collapses, eventually. It&apos;s the way of the universe." translation="...كل شيء سائر إلى الانهيار، طال الزمان أو قصر. هكذا سنة الحياة في الكون. ؝" centertext="1" pad="1"/>
</cutscene>
<cutscene id="terminal_station_3" explanation="">
<dialogue speaker="gray" english="I wonder if the generator we set up in the polar dimension is what&apos;s affecting our teleporters?" translation="أتساءل... هل للمولد الذي شغلناه في البعد القطبي دخل في التأثير الطارئ على آلات تنقيلنا؟"/>
<dialogue speaker="gray" english="No, it&apos;s probably just a glitch." translation="لا أظن، ذلك مجرد عيب تقني خفيف على الأرجح. ؝"/>
</cutscene>
<cutscene id="terminal_station_4" explanation="a trinket that&apos;s difficult to get">
<dialogue speaker="gray" english="-= PERSONAL LOG =-" translation="-= مذكرات شخصية =-" padtowidth="280"/>
<dialogue speaker="gray" english="Hah! Nobody will ever get this one." translation="هاع! أتحدى أي مخلوق أن يفوز بهذه بالذات. ؝" pad="1"/>
</cutscene>
<cutscene id="terminal_warp_1" explanation="">
<dialogue speaker="gray" english="...The other day I was chased down a hallway by a giant cube with the word AVOID on it." translation="... قبل كم يوم، طاردني في أحد الأروقة مكعب عملاق يتدحرج وعليه كلمة [تفادى]."/>
<dialogue speaker="gray" english="These security measures go too far!" translation="بالغوا حقا في إجراءات الحماية!! ؝"/>
</cutscene>
<cutscene id="terminal_warp_2" explanation="">
<dialogue speaker="gray" english="The only way into my private lab anymore is by teleporter." translation="لم تبق أي طريقة لدخول مخبري الخاص سوى آلة التنقيل."/>
<dialogue speaker="gray" english="I&apos;ve made sure that it&apos;s difficult for unauthorised personnel to gain access." translation="حرصت أن أصعب الدخول على غير العمال المسموح لهم. ؝"/>
</cutscene>
<cutscene id="terminal_outside_1" explanation="">
<dialogue speaker="gray" english="-= Research Notes =-" translation="-= ملاحظات الباحثين =-" padtowidth="264"/>
<dialogue speaker="gray" english="... our first breakthrough was the creation of the inversion plane, which creates a mirrored dimension beyond a given event horizon ..." translation="... إنجازنا وسبقنا الأول بدأ من إنشاء مستوي التعاكس، مما من شأنه إنشاء بعد معكوس جديد عند زمكان ما بعد نقطة أفق حدث معروفة في معطياتنا ..." pad="1"/>
</cutscene>
<cutscene id="terminal_outside_2" explanation="">
<dialogue speaker="gray" english="-= Research Notes =-" translation="-= ملاحظات الباحثين =-" padtowidth="264"/>
<dialogue speaker="gray" english="...with just a small modification to the usual parameters, we were able to stabilise an infinite tunnel!" translation="...بإدخال تعديل بسيط على المتغيرات المعتادة، نجحنا في الحفاظ على استقرار نفق لا متناه! ؝"/>
</cutscene>
<cutscene id="terminal_outside_3" explanation="">
<dialogue speaker="gray" english="-= Research Notes =-" translation="-= ملاحظات الباحثين =-" padtowidth="264"/>
<dialogue speaker="gray" english="... the final step in creating the dimensional stabiliser was to create a feedback loop ..." translation="... وآخر خطوة لإنشاء فارض استقرار البعد أن نصنع حلقة ارتجاع ..." pad="1"/>
</cutscene>
<cutscene id="terminal_outside_4" explanation="">
<dialogue speaker="gray" english="-= Research Notes =-" translation="-= ملاحظات الباحثين =-" padtowidth="264"/>
<dialogue speaker="gray" english="...despite our best efforts, the dimensional stabiliser won&apos;t hold out forever. Its collapse is inevitable..." translation="... مهما بذلنا من جهود، لن يتحمل فارض توازن البعد إلى ما لا نهاية. انهياره محتوم عاجلا أم آجلا..." pad="1"/>
<dialogue speaker="cyan" english="Huh? These coordinates aren&apos;t even in this dimension!" translation="عجبا؟ هذه الإحداثيات خارجة عن نطاق هذا البعد!"/>
</cutscene>
<cutscene id="terminal_outside_5" explanation="">
<dialogue speaker="gray" english="-= Personal Log =-" translation="-= مذكرات شخصية =-" padtowidth="232"/>
<dialogue speaker="gray" english="... I&apos;ve had to seal off access to most of our research. Who knows what could happen if it fell into the wrong hands? ..." translation="... اضطررت لتعطيل الدخول إلى معظم أبحاثنا. من يدري ماذا قد يحصل لو وقعت في أيادي السوء؟ ..." centertext="1" pad="1"/>
</cutscene>
<cutscene id="terminal_outside_6" explanation="">
<dialogue speaker="gray" english="-= Research Notes =-" translation="-= ملاحظات الباحثين =-" padtowidth="264"/>
<dialogue speaker="gray" english="... access to the control center is still possible through the main atmospheric filters ..." translation="... الدخول إلى مركز التحكم لا يزال ممكنا لو كان عبر مصافي الأغلفة الجوية الأساسية ..."/>
</cutscene>
<cutscene id="terminal_lab_1" explanation="">
<dialogue speaker="gray" english="... it turns out the key to stabilising this dimension was to create a balancing force outside of it!" translation="... اتضح أن الحل لاستقرار هذا البعد يكمن في إنشاء قوة خارجه لإحلال التوازن!"/>
<dialogue speaker="gray" english="Though it looks like that&apos;s just a temporary solution, at best." translation="إلا أن هذا مجرد حل وقتي، ولن يدوم حتى في أحسن الظروف."/>
<dialogue speaker="gray" english="I&apos;ve been working on something more permanent, but it seems it&apos;s going to be too late..." translation="حاولت العمل على حل دائم يرسخ مفعوله، لكن يبدو لي أن الأوان سيفوت قبل تطبيقه. ؝"/>
</cutscene>
<cutscene id="terminal_lab_2" explanation="">
<dialogue speaker="gray" english="?SYNTAX ERROR" translation="؟خطأ صياغة؟"/>
</cutscene>
<cutscene id="terminal_letsgo" explanation="">
<dialogue speaker="player" english="Now that the ship is fixed, we can leave anytime we want!" translation="بعد أن أصلحنا السفينة، يمكننا المغادرة متى شئنا!"/>
<dialogue speaker="player" english="We&apos;ve all agreed to keep exploring this dimension, though." translation="لكننا اتفقنا جميعا أن نواصل استكشاف هذا البعد."/>
<dialogue speaker="player" english="Who knows what we&apos;ll find?" translation="من يدري ماذا قد نجد؟"/>
</cutscene>
<cutscene id="terminal_radio" explanation="">
<dialogue speaker="gray" english="-= SHIP RADIO =-
[ Status ]
Broadcasting" translation="-= راديو السفينة =-
[ الوضع الحالي ]
الإرسال قيد البث" tt="1" centertext="1" pad="2"/>
</cutscene>
<cutscene id="terminal_secretlab" explanation="">
<dialogue speaker="gray" english="-= WARNING =-
The Super-Gravitron is intended for entertainment purposes only." translation="-= تحذير =-
أتون الجاذبية الخارق مجعول حصرا لأغراض ترفيهية." centertext="1" pad="1"/>
<dialogue speaker="gray" english="Anyone found using the Super Gravitron for educational purposes may be asked to stand in the naughty corner." translation="لو افتضح أمر شخص يستخدمه لأغراض تعليمية، سنطلب منه أن يبكي في زاوية العقاب."/>
</cutscene>
<cutscene id="terminal_shipcomputer" explanation="">
<dialogue speaker="gray" english="-= D.S.S. SOULEYE =-
Ship Navigation Controls" translation="-= سفينة D.S.S. سول آي =-
لوحة التحكم الملاحية للسفينة" centertext="1" pad="1"/>
<dialogue speaker="gray" english="Error! Error! Cannot isolate dimensional coordinates! Interference detected!" translation="خطأ! خطأ! يتعذر عزل الإحداثيات البعدية! لوحظ تشويش يتداخل مع الإشارة!"/>
</cutscene>
<cutscene id="alreadyvisited" explanation="">
<dialogue speaker="cyan" english="...oh, I&apos;ve already found this." translation="...أوه، سبق أن وجدته."/>
</cutscene>
<cutscene id="disableaccessibility" explanation="">
<dialogue speaker="gray" english="Please disable invincibility and/or slowdown before entering the Super Gravitron." translation="يرجى تعطيل الحصانة وتبطئة اللعبة قبل دخول غرفة أتون الجاذبية الخارق."/>
</cutscene>
</cutscenes>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

View file

@ -1,9 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<spritesmask sprite_w="32" sprite_h="32">
<sprite x="8" y="1" w="2"/> <!-- Checkpoints -->
<sprite x="4" y="2" w="4"/> <!-- STOP -->
<sprite x="4" y="3" w="4"/> <!-- YES -->
<sprite x="3" y="4"/> <!-- OBEY -->
<sprite x="2" y="5" w="2"/> <!-- LIES receiver and LIES -->
<sprite x="4" y="5" w="2"/> <!-- TRUTH -->
</spritesmask>

View file

@ -1,39 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<langmeta>
<active>1</active>
<!-- should be lowercase because menu style, and should be in the language itself -->
<nativename>العربية</nativename>
<!-- English translation by X -->
<credit>الترجمة العربية من
Eternal Dream Arabization</credit>
<!-- On the language screen, hard limit 40 8x8 characters. Space/Z/V sets this as the language -->
<action_hint>اضغط مسافة، زر Z، أو زر V للاختيار</action_hint>
<!-- Same as above, but for a gamepad button (hard limit 40 8x8 characters) -->
<gamepad_hint>اضغط {button} للاختيار</gamepad_hint>
<!-- Enable automatic word wrapping instead of having to manually insert newlines -->
<autowordwrap>1</autowordwrap>
<!-- Enable automatic full-caps display of selected menu options ([SELECTED] not selected) -->
<toupper>1</toupper>
<!-- When automatically uppercasing, map i to İ (for Turkish) -->
<toupper_i_dot>0</toupper_i_dot>
<!-- When automatically uppercasing, allow ~ to be used to stop the next letter from being uppercased (for Irish) -->
<toupper_lower_escape_char>0</toupper_lower_escape_char>
<!-- Enable for RTL languages like Arabic or Hebrew -->
<rtl>1</rtl>
<!-- The indication that a certain menu option or button is selected -->
<menu_select>[ {label} ]</menu_select>
<menu_select_tight>[{label}]</menu_select_tight>
<!-- The filename of the font to use. For example, "font_cn" means font_cn.png and font_cn.fontmeta. -->
<font>font_ar</font>
</langmeta>

View file

@ -1,124 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Please read README.txt for information about the language files -->
<numbers>
<number value="0" form="0" english="Zero" translation="صفر" translation2="صفر"/>
<number value="1" form="1" english="One" translation="واحد" translation2="واحدة"/>
<number value="2" form="2" english="Two" translation="اثنان" translation2="اثنتان"/>
<number value="3" form="3" english="Three" translation="ثلاثة" translation2="ثلاث"/>
<number value="4" form="3" english="Four" translation="أربعة" translation2="أربع"/>
<number value="5" form="3" english="Five" translation="خمسة" translation2="خمس"/>
<number value="6" form="3" english="Six" translation="ستة" translation2="ست"/>
<number value="7" form="3" english="Seven" translation="سبعة" translation2="سبع"/>
<number value="8" form="3" english="Eight" translation="ثمانية" translation2="ثمان"/>
<number value="9" form="3" english="Nine" translation="تسعة" translation2="تسع"/>
<number value="10" form="3" english="Ten" translation="عشرة" translation2="عشر"/>
<number value="11" form="11" english="Eleven" translation="أحد عشر" translation2="إحدى عشرة"/>
<number value="12" form="11" english="Twelve" translation="إثنا عشر" translation2="إثنتا عشرة"/>
<number value="13" form="11" english="Thirteen" translation="ثلاثة عشر" translation2="ثلاث عشرة"/>
<number value="14" form="11" english="Fourteen" translation="أربعة عشر" translation2="أربع عشرة"/>
<number value="15" form="11" english="Fifteen" translation="خمسة عشر" translation2="خمس عشرة"/>
<number value="16" form="11" english="Sixteen" translation="ستة عشر" translation2="ست عشرة"/>
<number value="17" form="11" english="Seventeen" translation="سبعة عشر" translation2="سبع عشرة"/>
<number value="18" form="11" english="Eighteen" translation="ثمانية عشر" translation2="ثماني عشرة"/>
<number value="19" form="11" english="Nineteen" translation="تسعة عشر" translation2="تسع عشرة"/>
<number value="20" form="11" english="Twenty" translation="عشرين" translation2="عشرين"/>
<number value="21" form="11" english="Twenty One" translation="واحدا وعشرين" translation2="واحدة وعشرين"/>
<number value="22" form="11" english="Twenty Two" translation="اثنان وعشرين" translation2="اثنتان وعشرين"/>
<number value="23" form="11" english="Twenty Three" translation="ثلاثة وعشرين" translation2="ثلاثا وعشرين"/>
<number value="24" form="11" english="Twenty Four" translation="أربعة وعشرين" translation2="أربعا وعشرين"/>
<number value="25" form="11" english="Twenty Five" translation="خمسة وعشرين" translation2="خمسة وعشرين"/>
<number value="26" form="11" english="Twenty Six" translation="ستة وعشرين" translation2="ستة وعشرين"/>
<number value="27" form="11" english="Twenty Seven" translation="سبعة وعشرين" translation2="سبعة وعشرين"/>
<number value="28" form="11" english="Twenty Eight" translation="ثمانية وعشرين" translation2="ثمانية وعشرين"/>
<number value="29" form="11" english="Twenty Nine" translation="تسعة وعشرين" translation2="تسعة وعشرين"/>
<number value="30" form="11" english="Thirty" translation="ثلاثين" translation2="ثلاثين"/>
<number value="31" form="11" english="Thirty One" translation="واحدا وثلاثين" translation2="واحدة وثلاثين"/>
<number value="32" form="11" english="Thirty Two" translation="اثنان وثلاثين" translation2="اثنتان وثلاثين"/>
<number value="33" form="11" english="Thirty Three" translation="ثلاثة وثلاثين" translation2="ثلاثا وثلاثين"/>
<number value="34" form="11" english="Thirty Four" translation="أربعة وثلاثين" translation2="أربعا وثلاثين"/>
<number value="35" form="11" english="Thirty Five" translation="خمسة وثلاثين" translation2="خمسة وثلاثين"/>
<number value="36" form="11" english="Thirty Six" translation="ستة وثلاثين" translation2="ستة وثلاثين"/>
<number value="37" form="11" english="Thirty Seven" translation="سبعة وثلاثين" translation2="سبعة وثلاثين"/>
<number value="38" form="11" english="Thirty Eight" translation="ثمانية وثلاثين" translation2="ثمانية وثلاثين"/>
<number value="39" form="11" english="Thirty Nine" translation="تسعة وثلاثين" translation2="تسعة وثلاثين"/>
<number value="40" form="11" english="Forty" translation="أربعين" translation2="أربعين"/>
<number value="41" form="11" english="Forty One" translation="واحدا وأربعين" translation2="واحدة وأربعين"/>
<number value="42" form="11" english="Forty Two" translation="اثنان وأربعين" translation2="اثنتان وأربعين"/>
<number value="43" form="11" english="Forty Three" translation="ثلاثة وأربعين" translation2="ثلاثا وأربعين"/>
<number value="44" form="11" english="Forty Four" translation="أربعة وأربعين" translation2="أربعا وأربعين"/>
<number value="45" form="11" english="Forty Five" translation="خمسة وأربعين" translation2="خمسة وأربعين"/>
<number value="46" form="11" english="Forty Six" translation="ستة وأربعين" translation2="ستة وأربعين"/>
<number value="47" form="11" english="Forty Seven" translation="سبعة وأربعين" translation2="سبعة وأربعين"/>
<number value="48" form="11" english="Forty Eight" translation="ثمانية وأربعين" translation2="ثمانية وأربعين"/>
<number value="49" form="11" english="Forty Nine" translation="تسعة وأربعين" translation2="تسعة وأربعين"/>
<number value="50" form="11" english="Fifty" translation="خمسين" translation2="خمسين"/>
<number value="51" form="11" english="Fifty One" translation="واحدا وخمسين" translation2="واحدة وخمسين"/>
<number value="52" form="11" english="Fifty Two" translation="اثنان وخمسين" translation2="اثنتان وخمسين"/>
<number value="53" form="11" english="Fifty Three" translation="ثلاثة وخمسين" translation2="ثلاثا وخمسين"/>
<number value="54" form="11" english="Fifty Four" translation="أربعة وخمسين" translation2="أربعا وخمسين"/>
<number value="55" form="11" english="Fifty Five" translation="خمسة وخمسين" translation2="خمسة وخمسين"/>
<number value="56" form="11" english="Fifty Six" translation="ستة وخمسين" translation2="ستة وخمسين"/>
<number value="57" form="11" english="Fifty Seven" translation="سبعة وخمسين" translation2="سبعة وخمسين"/>
<number value="58" form="11" english="Fifty Eight" translation="ثمانية وخمسين" translation2="ثمانية وخمسين"/>
<number value="59" form="11" english="Fifty Nine" translation="تسعة وخمسين" translation2="تسعة وخمسين"/>
<number value="60" form="11" english="Sixty" translation="ستين" translation2="ستين"/>
<number value="61" form="11" english="Sixty One" translation="واحدا وستين" translation2="واحدة وستين"/>
<number value="62" form="11" english="Sixty Two" translation="اثنان وستين" translation2="اثنتان وستين"/>
<number value="63" form="11" english="Sixty Three" translation="ثلاثة وستين" translation2="ثلاثا وستين"/>
<number value="64" form="11" english="Sixty Four" translation="أربعة وستين" translation2="أربعا وستين"/>
<number value="65" form="11" english="Sixty Five" translation="خمسة وستين" translation2="خمسة وستين"/>
<number value="66" form="11" english="Sixty Six" translation="ستة وستين" translation2="ستة وستين"/>
<number value="67" form="11" english="Sixty Seven" translation="سبعة وستين" translation2="سبعة وستين"/>
<number value="68" form="11" english="Sixty Eight" translation="ثمانية وستين" translation2="ثمانية وستين"/>
<number value="69" form="11" english="Sixty Nine" translation="تسعة وستين" translation2="تسعة وستين"/>
<number value="70" form="11" english="Seventy" translation="سبعين" translation2="سبعين"/>
<number value="71" form="11" english="Seventy One" translation="واحدا وسبعين" translation2="واحدة وسبعين"/>
<number value="72" form="11" english="Seventy Two" translation="اثنان وسبعين" translation2="اثنتان وسبعين"/>
<number value="73" form="11" english="Seventy Three" translation="ثلاثة وسبعين" translation2="ثلاثا وسبعين"/>
<number value="74" form="11" english="Seventy Four" translation="أربعة وسبعين" translation2="أربعا وسبعين"/>
<number value="75" form="11" english="Seventy Five" translation="خمسة وسبعين" translation2="خمسة وسبعين"/>
<number value="76" form="11" english="Seventy Six" translation="ستة وسبعين" translation2="ستة وسبعين"/>
<number value="77" form="11" english="Seventy Seven" translation="سبعة وسبعين" translation2="سبعة وسبعين"/>
<number value="78" form="11" english="Seventy Eight" translation="ثمانية وسبعين" translation2="ثمانية وسبعين"/>
<number value="79" form="11" english="Seventy Nine" translation="تسعة وسبعين" translation2="تسعة وسبعين"/>
<number value="80" form="11" english="Eighty" translation="ثمانين" translation2="ثمانين"/>
<number value="81" form="11" english="Eighty One" translation="واحدا وثمانين" translation2="واحدة وثمانين"/>
<number value="82" form="11" english="Eighty Two" translation="اثنان وثمانين" translation2="اثنتان وثمانين"/>
<number value="83" form="11" english="Eighty Three" translation="ثلاثة وثمانين" translation2="ثلاثا وثمانين"/>
<number value="84" form="11" english="Eighty Four" translation="أربعة وثمانين" translation2="أربعا وثمانين"/>
<number value="85" form="11" english="Eighty Five" translation="خمسة وثمانين" translation2="خمسة وثمانين"/>
<number value="86" form="11" english="Eighty Six" translation="ستة وثمانين" translation2="ستة وثمانين"/>
<number value="87" form="11" english="Eighty Seven" translation="سبعة وثمانين" translation2="سبعة وثمانين"/>
<number value="88" form="11" english="Eighty Eight" translation="ثمانية وثمانين" translation2="ثمانية وثمانين"/>
<number value="89" form="11" english="Eighty Nine" translation="تسعة وثمانين" translation2="تسعة وثمانين"/>
<number value="90" form="11" english="Ninety" translation="تسعين" translation2="تسعين"/>
<number value="91" form="11" english="Ninety One" translation="واحدا وتسعين" translation2="واحدة وتسعين"/>
<number value="92" form="11" english="Ninety Two" translation="اثنان وتسعين" translation2="اثنتان وتسعين"/>
<number value="93" form="11" english="Ninety Three" translation="ثلاثة وتسعين" translation2="ثلاثا وتسعين"/>
<number value="94" form="11" english="Ninety Four" translation="أربعة وتسعين" translation2="أربعا وتسعين"/>
<number value="95" form="11" english="Ninety Five" translation="خمسة وتسعين" translation2="خمسة وتسعين"/>
<number value="96" form="11" english="Ninety Six" translation="ستة وتسعين" translation2="ستة وتسعين"/>
<number value="97" form="11" english="Ninety Seven" translation="سبعة وتسعين" translation2="سبعة وتسعين"/>
<number value="98" form="11" english="Ninety Eight" translation="ثمانية وتسعين" translation2="ثمانية وتسعين"/>
<number value="99" form="11" english="Ninety Nine" translation="تسعة وتسعين" translation2="تسعة وتسعين"/>
<number value="100" form="11" english="One Hundred" translation="مئة" translation2="مئة"/>
<number value="101" form="11"/>
<number value="102" form="11"/>
<number value="103" form="11"/>
<number value="104" form="11"/>
<number value="105" form="11"/>
<number value="106" form="11"/>
<number value="107" form="11"/>
<number value="108" form="11"/>
<number value="109" form="11"/>
<number value="110" form="11"/>
<number value="111" form="11"/>
<number value="112" form="11"/>
<number value="113" form="11"/>
<number value="114" form="11"/>
<number value="115" form="11"/>
<number value="116" form="11"/>
<number value="117" form="11"/>
<number value="118" form="11"/>
<number value="119" form="11"/>
</numbers>

View file

@ -1,193 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- You can translate these in-game to get better context! See README.txt -->
<roomnames>
<roomname x="0" y="18" english="Single-slit Experiment" translation="التجربة 1: ثغرة مفردة" explanation="(Many of the rooms in the Lab stage have science themed names.)"/>
<roomname x="0" y="19" english="Don&apos;t Flip Out" translation="لا ينقلبن مزاجك" explanation="Flip as in gravity flip, but also the expression in english, as in, keep your cool"/>
<roomname x="1" y="0" english="I&apos;m Sorry" translation="آسف" explanation="The room below this one is Please Forgive Me. There is also a secret path to the right which leads to the rooms &apos;Anomaly&apos; and &apos;Purest Unobtainium&apos;."/>
<roomname x="1" y="1" english="Please Forgive Me!" translation="سامحني أرجوك!" explanation="The room above this one is I&apos;m Sorry"/>
<roomname x="1" y="17" english="Rascasse" translation="الأسماك الشائكة" explanation="This is a type of fish with lots of thorny spikes on its back"/>
<roomname x="1" y="18" english="Keep Going" translation="نواصل" explanation="Literally just &apos;Keep Going&apos;, through the room"/>
<roomname x="1" y="19" english="Shuffled Hallway" translation="رواق منحاز" explanation="Just describes how the room looks. &apos;Shuffled&apos; as in offset."/>
<roomname x="2" y="0" english="Kids His Age Bounce" translation="الصبيان في عمره ينطون" explanation="An old saying for when e.g. a small child falls out of a tree. A trampoline joke in this case."/>
<roomname x="2" y="1" english="Playing Foosball" translation="كرة قدم الطاولة" explanation="This room resembles a Foosball table - https://en.wikipedia.org/wiki/Table_football"/>
<roomname x="2" y="4" english="Philadelphia Experiment" translation="تجربة فيلاديلفيا" explanation="There is a teleporter in this room. The Philadelphia Experiment is the name of 80&apos;s film about teleportation."/>
<roomname x="2" y="16" english="Get Ready To Bounce" translation="نستعد لننط" explanation="The first room in the Lab zone. In the next room, you immediately come into contact with a gravity line, and flip back up."/>
<roomname x="2" y="17" english="It&apos;s Perfectly Safe" translation="كله أمان فعليك بالاطمئنان" explanation="The second room in the lab zone. Don&apos;t worry, it&apos;s perfectly safe."/>
<roomname x="2" y="18" english="Young Man, It&apos;s Worth the Challenge" translation="بني، التحدي يستحق المجهود" explanation="Not a reference to anything in particular - Bennett explains that this is just something that his high school chemistry teacher used to say to students. He thinks the teacher was probably misquoting George Bernard Shaw, who said &apos;Life is not meant to be easy, my child - but take courage: it can be delightful.&apos;."/>
<roomname x="2" y="19" english="Double-slit Experiment" translation="التجربة 2: ثغرة مثناة" explanation="(Many of the rooms in the Lab stage have science themed names.)"/>
<roomname x="3" y="0" english="Merge" translation="التحام" explanation="A wide section connecting to a narrower section - merge as in traffic"/>
<roomname x="3" y="1" english="A Difficult Chord" translation="عزفت على الوتر الحساس" explanation="This room resembles a guitar chord"/>
<roomname x="3" y="4" english="Why So Blue?" translation="يا نهار أزرق! لماذا الحزن؟" explanation="The crewmate Victoria is found here. Victoria is always sad! She&apos;s feeling blue."/>
<roomname x="3" y="16" english="Brought to you by the letter G" translation="برعاية الحرف G" explanation="Reference to Seseme Street - also, this room resembles the letter G"/>
<roomname x="3" y="17" english="Thorny Exchange" translation="تراشق إبر الكلام" explanation="Two people having a polite argument could be described as having a Thorny Exchange of words."/>
<roomname x="3" y="18" english="Square Root" translation="الجذر التربيعي" explanation="This room resembles a Square Root symbol."/>
<roomname x="3" y="19" english="They Call Him Flipper" translation="صديق الإنسان، شقلوب" explanation="This is a line from an American TV show intro about a Dolphin - https://www.youtube.com/watch?v=azEOeTX1LqM"/>
<roomname x="4" y="0" english="Vibrating String Problem" translation="إشكالية الوتر المتذبذب" explanation="Another science themed room name, this one has two gravity lines that you bounce between."/>
<roomname x="4" y="1" english="The Living Dead End" translation="الطرف المستطرف المتطرف" explanation="&apos;The living end&apos; is an idiom meaning &apos;the most extreme form of something&apos;, here it&apos;s an extreme dead end, i.e. a cul-de-sac"/>
<roomname x="4" y="2" english="AAAAAA" translation="آآآآآآ" explanation="The player falls through this room without having time to stop - AAAAAA suggests a scream in English. Also, it&apos;s six As, like the title."/>
<roomname x="4" y="3" english="Diode" translation="صمام" explanation="This room can only be passed through in one direction. It resembles the electrical component."/>
<roomname x="4" y="4" english="I Smell Ozone" translation="شممت الأوزون" explanation="When you use a photocopier, it produces a distinctive smell (from the Ozone produced). This room has a background pattern that suggests a teleportation has recently happened here."/>
<roomname x="4" y="16" english="Free Your Mind" translation="حرر دماغك" explanation="Reference to the film The Matrix, where Morpheus jumps from the top of a Skyscaper - https://www.youtube.com/watch?v=ef_agVIvh0A"/>
<roomname x="4" y="17" english="I Changed My Mind, Thelma..." translation="بدلت رأيي يا ثيلما..." explanation="The room below Free Your Mind. Reference to the film Thelma and Louise, which ends with Thelma and Louise driving off a cliff, sorry, spoilers"/>
<roomname x="4" y="18" english="Hitting the Apex" translation="ذروة المنعطف" explanation="&apos;Hitting the Apex&apos; is the term used by race drivers for the optimal path around a corner"/>
<roomname x="4" y="19" english="Three&apos;s a Crowd" translation="سر الثلاثة سر الجمهرة" explanation="From the expression Two&apos;s Company, Three&apos;s a Crowd. This room has two challenges - the first has two gaps to cross, the second has three."/>
<roomname x="5" y="0" english="Spike Strip Deployed" translation="فلتنشر الأشواك" explanation="This room has some spikes on a gravity line. The name is a reference to the device that police might use to blow out the tyres of a speeding car."/>
<roomname x="5" y="1" english="Anomaly" translation="الظاهرة الغريبة" explanation="As in, a strange result in science. This room has lots of different colours, unlike other rooms in this stage."/>
<roomname x="5" y="16" english="In a Single Bound" translation="بوثبة واحدة" explanation="Superman is described as being able to leap tall buildings in a single bound."/>
<roomname x="5" y="17" english="Indirect Jump Vector" translation="متجه قفزة غير مباشرة" explanation="If you miss the gap in &apos;In a Single Bound&apos; above, you will end up back in this room - hence, your trajectory was off!"/>
<roomname x="6" y="0" english="Topsy Turvyism" translation="عاليها سافلها" explanation="Topsy Turvy is Australian slang for upside down"/>
<roomname x="6" y="1" english="Purest Unobtainium" translation="معدن المجهولنديوم الخالص" explanation="Unobtainium is a jokey made up term from science fiction for an impossible substance - https://en.wikipedia.org/wiki/Unobtainium"/>
<roomname x="6" y="16" english="Barani, Barani" translation="شقلبة، شقلبتان" explanation="A Barani is a technical term for doing a flip on a trampoline"/>
<roomname x="6" y="17" english="Safety Dance" translation="رقصة الأمان" explanation="Named after the 80s song by Men Without Hats."/>
<roomname x="7" y="0" english="Standing Wave" translation="الموجة الموقوفة" explanation="Many of the rooms in the Lab stage have science themed names. This one is at the beginning of a section with gravity lines above and below you, before the section begins."/>
<roomname x="7" y="15" english="Entanglement Generator" translation="كم تشابكا ستولد بآلتك؟" explanation="This room contains a teleporter. Entanglement is an idea from quantum mechanics."/>
<roomname x="7" y="16" english="Heady Heights" translation="الرأس الأعلى" explanation="Just below the highest point in the level."/>
<roomname x="7" y="17" english="Exhausted?" translation="النشاط العادم" explanation="This room has an exit that sort of suggests an Exhaust Pipe in a car."/>
<roomname x="7" y="18" english="The Tantalizing Trinket" translation="سأتذكر التذكار" explanation="You see this Trinket just out of reach as you fall through the room."/>
<roomname x="7" y="19" english="The Bernoulli Principle" translation="مبدأ بيرنولي" explanation="Many of the rooms in the Lab stage have science themed names - this one is just named after a formula relating to flight."/>
<roomname x="8" y="9" english="Teleporter Divot" translation="أثر التنقيلة" explanation="There is a pattern in the background of this room that indicates that a teleporter has sent someone to this room"/>
<roomname x="9" y="9" english="The Tower" translation="البرج" explanation="This room is a single vertically scrolling stage, about 20 rooms high. The name is from the Tarot card."/>
<roomname x="10" y="4" english="Seeing Red" translation="العين الحمراء" explanation="This is the room that you find the red crewmate in. (Seeing Red is an expression in English about being filled with rage, but that doesn&apos;t really apply here)"/>
<roomname x="10" y="5" english="Energize" translation="تنشيط" explanation="There is a teleporter in this Room. Energize is what they say on Star Trek when they use the teleporters."/>
<roomname x="10" y="6" english="Down Under" translation="تحت أم الدنيا في آخر الدنيا" explanation="Australia is sometimes called The Land Down Under because of its position on a globe. You complete this room by going down and under some moving platforms"/>
<roomname x="10" y="7" english="A Deception" translation="أخدوعة" explanation="This room appears trivial at first, but is connected to a difficult trinket challenge"/>
<roomname x="11" y="4" english="Building Apport" translation="توطيد الروابط الزمكانية" explanation="An &apos;Apport&apos; is a kind of paranormal teleportation. Building Apport is a pun on the concept of &apos;building rapport&apos; (except that to &apos;apport&apos; is to teleport)."/>
<roomname x="11" y="5" english="Frown Upside Down" translation="اقلب عبوس حواجبك" explanation="To &apos;Turn that Frown Upside Down&apos; is an expression in English, like &apos;cheer up&apos;, basically means to stop being unhappy"/>
<roomname x="11" y="6" english="Shenanigan" translation="ألعوبة" explanation="Shenanigan as in a prank, or practical joke. This room is connected to the &apos;Prize for the Reckless&apos; puzzle, and like the room &apos;A Deception&apos;, it appears trivial unless you know the secret"/>
<roomname x="11" y="7" english="Prize for the Reckless" translation="جائزة للمتهورين" explanation="This room contains a trinket that can only be collected by doing something difficult"/>
<roomname x="11" y="11" english="Conveying a New Idea" translation="توصيل الفكرة ببساط-ة" explanation="This is the first room you encounter that has conveyor belts in it"/>
<roomname x="11" y="12" english="One Way Room" translation="دخول الحمام ليس كخروجه" explanation="Can only be travelled through in one direction"/>
<roomname x="11" y="13" english="Boldly To Go" translation="بجرأة فلنمض" explanation="Star Trek reference, this rooms is near the entrance to the space station level"/>
<roomname x="11" y="14" english="The Filter" translation="الغربال" explanation="Like a filter from an air conditioning vent"/>
<roomname x="12" y="3" english="Security Sweep" translation="تمشيط أمني" explanation="Contains a single, fast moving enemy that moves up and down."/>
<roomname x="12" y="4" english="Gantry and Dolly" translation="الرافعة الجسرية" explanation="Gantry and Dolly are the names for types of cranes that move crates around. This room has two different types of platforms."/>
<roomname x="12" y="5" english="The Yes Men" translation="عشاق كلمة نعم" explanation="Contains a number of enemies with briefcases and the word -YES- for a head. An expression for people who work at large companies and agree a lot with their bosses"/>
<roomname x="12" y="6" english="Stop and Reflect" translation="وقفة تأمل" explanation="Expression meaning to take a moment and think about what you&apos;re doing. In this room, a small puzzle where you need to use the underside of a moving platform to progress."/>
<roomname x="12" y="7" english="V Stitch" translation="غرزة مثلثة" explanation="A V Stitch is a type of crochet stitch."/>
<roomname x="12" y="11" english="Upstream Downstream" translation="مع التيار، عكس التيار" explanation="As in swimming upstream or downstream, with or against a current in a river"/>
<roomname x="12" y="12" english="The High Road is Low" translation="أعلى الطريقين مقاما أدناهما" explanation="This room has two paths - a high path and a low path. The &apos;low&apos; path leads to a trinket, so the roomname is a sort of clue about which way to go."/>
<roomname x="12" y="13" english="Give Me A V" translation="صفحة! سبعة! صعبة!" explanation="Room is in the shape of a big letter V. The roomname suggests the common american cheerleading chant - e.g. Give me an L! Give me an O! Give me a C! Give me an A! Give me an L! Give me an I! Give me an S! Give me an A! Give me a T! Give me an I! Give me an O! Give me an N! What does it spell? LOCALISATION!"/>
<roomname x="12" y="14" english="Outer Hull" translation="المتن الخارجي" explanation="The entrance to the Space Station 2 level - the outer hull of a space station."/>
<roomname x="13" y="0" english="It&apos;s Not Easy Being Green" translation="الخضرة صعبة" explanation="References a song by Kermit from the Muppets. This room is where you find the green crewmate."/>
<roomname x="13" y="3" english="Linear Collider" translation="المصادم الخطي" explanation="An early room, name is just meant to suggest something sciency. Room contains long, wave like enemies."/>
<roomname x="13" y="4" english="Comms Relay" translation="ناقل البث" explanation="This room contains some communication equipment, like a radio."/>
<roomname x="13" y="5" english="Welcome Aboard" translation="مرحبا بك" explanation="The first room in the game"/>
<roomname x="13" y="6" english="Trench Warfare" translation="حرب الخنادق" explanation="Room contains a couple of pits with soldier-like enemies in them. Loosely references the 1983 videogame Hunchback."/>
<roomname x="13" y="7" english="B-B-B-Busted" translation="هههذه المصيدة حافلة" explanation="Room contains a large Bus. &apos;Bus&apos;ted as in &apos;Caught&apos;."/>
<roomname x="13" y="8" english="Level Complete!" translation="ختمت المستوى!" explanation="This room has a teleporter, which is normally found at the end of a level. However this room is midway through the stage."/>
<roomname x="13" y="9" english="Lighter Than Air" translation="أخف من الهواء" explanation="This room has clouds that rise from the bottom of the screen to the top, which the player is faster than, implying that the player is lighter than air."/>
<roomname x="13" y="10" english="The Solution is Dilution" translation="الحل في الانحلال" explanation="This room has a factory and pollution clouds in it. Apparently this phrase was once used by industrialists to advocate for not worrying too much about pollution."/>
<roomname x="13" y="11" english="The Cuckoo" translation="كوكو الكذوب" explanation="This room contains a speaker that emits the word &apos;LIES&apos; over and over. A cuckoo&apos;s call decieves other birds!"/>
<roomname x="13" y="12" english="Backsliders" translation="بساط الريح، بساط الرجع" explanation="A conveyor belt in this room pushes against you as you try to move, so you slide backwards."/>
<roomname x="13" y="13" english="Select Track" translation="مساران ولك الخيار" explanation="There are two paths you can pick between here"/>
<roomname x="14" y="0" english="Green Dudes Can&apos;t Flip" translation="الخضر لا يعكسون" explanation="You have a green crewmate with you in this room! A reference to the 90&apos;s film &apos;White Guy&apos;s Can&apos;t Jump&apos;."/>
<roomname x="14" y="1" english="This is how it is" translation="هكذا الحال" explanation="literally as in, this is how the mechanic of this stage works - also an expression as in &apos;this is the way things are&apos;"/>
<roomname x="14" y="2" english="That&apos;s Why I Have To Kill You" translation="لهذا سأضطر لقتلك" explanation="The follows the room named &apos;I love you&apos;. &apos;I love you, that&apos;s why I have to kill you&apos; is kind of a slasher horror trope."/>
<roomname x="14" y="3" english="Atmospheric Filtering Unit" translation="وحدة المصفاة الجوية" explanation="An early room, looks a bit like an air filter"/>
<roomname x="14" y="4" english="It&apos;s a Secret to Nobody" translation="سر مفضوح للجميع" explanation="A reference to the infamous Zelda quote &apos;It&apos;s a secret to everybody&apos;. This room contains the first trinket."/>
<roomname x="14" y="5" english="Conundrum" translation="حيرة" explanation="Conundrum as in puzzle, riddle, problem to be solved"/>
<roomname x="14" y="6" english="Boo! Think Fast!" translation="بعو! بسرعة فلنفكر!" explanation="Contains a challenge that you need to react very quickly to. You might say &apos;Boo, think fast&apos; if you threw something at someone, expecting them to catch it."/>
<roomname x="14" y="7" english="The Sensible Room" translation="الغرفة العقلانية" explanation="Early corridor room containing no challenges. Sensible as in the opposite of Foolish - you might call someone sensible in english if they are excessively cautious."/>
<roomname x="14" y="8" english="The Hanged Man, Reversed" translation="مشنوق، لكن بالعكس" explanation="Named after the Tarot Card, reversed as in Upside Down. The room contains a stationary enemy which resembles a Wheel of Fortune. The name is supposed to suggest a kind of out-of-place quality."/>
<roomname x="14" y="9" english="Green Grotto" translation="المغارة الخضراء" explanation="A peaceful green room."/>
<roomname x="14" y="10" english="Manic Mine" translation="المنجم المجنون" explanation="A reference to the 8-bit game Manic Miner."/>
<roomname x="14" y="11" english="Clarion Call" translation="نداء الكاذب" explanation="A &apos;Clarion Call&apos; is an idiom used when somebody makes a case for a course of action, for example in a politician&apos;s speech, or a call to battle. It sometimes has an association with dishonesty - in this room, the words &apos;LIES&apos; appear over and over."/>
<roomname x="14" y="12" english="Gordian Knot" translation="المعقودة الغوردية" explanation="As in the Gordian Knot from greek history. A complicated room that can be passed through twice."/>
<roomname x="14" y="13" english="You Chose... Poorly" translation="اختيارك... لم يكن في محله" explanation="This room comes right after a choice between two paths. It&apos;s a quote from an Indiana Jones film."/>
<roomname x="15" y="0" english="Murdering Twinmaker" translation="آلة التوأمة الذباحة" explanation="Room contains a teleporter. A &apos;Murdering Twinmaker&apos; is, uh, one way teleportation might work..."/>
<roomname x="15" y="1" english="A Bisected Spiral" translation="دوامة مشطورة" explanation="Room is a spiral, cut down the middle"/>
<roomname x="15" y="2" english="Take the Red Pill" translation="عليك بالحبة الحمراء" explanation="This is a Matrix reference that hasn&apos;t aged well, lol"/>
<roomname x="15" y="3" english="Traffic Jam" translation="زحمة مرور" explanation="The enemies in this room are Stop Signs"/>
<roomname x="15" y="4" english="Leap of Faith" translation="نتوكل ونقفز" explanation="To take a leap of faith means to do something without knowing how it&apos;s going to turn out."/>
<roomname x="15" y="5" english="Solitude" translation="عزلة" explanation="As in being alone, or in this case, lost by yourself"/>
<roomname x="15" y="6" english="Driller" translation="الكابتن حفار" explanation="Technically references the name of a C64 game, but that doesn&apos;t matter much"/>
<roomname x="15" y="7" english="Exhaust Chute" translation="مسقط النفايات" explanation="Like a factory exhaust chute for disposing of rubbish"/>
<roomname x="15" y="8" english="Sorrow" translation="يا للأحزان" explanation="A difficult room that you might die in a lot"/>
<roomname x="15" y="9" english="doomS" translation="قبر حرب في rbb nlSo" explanation="The room is above &apos;Swoop&apos;, and is a copy of the room rotated 180 degrees! The room name &apos;doomS&apos; is the word &apos;Swoop&apos; rotated 180 degrees. When localising this room, don&apos;t worry too much about trying to keep the meaning of the words Dooms and Swoop, because they&apos;re not that important - instead, focus on picking words that have this 180 degree flip quality!"/>
<roomname x="15" y="10" english="Swoop" translation="nrc rib في مكان قفر" explanation="See the note for room (15,9), doomS."/>
<roomname x="15" y="11" english="Chinese Rooms" translation="الغرف الصينية" explanation="This refers to a famous philosophical argument about artifical intelligence - https://en.wikipedia.org/wiki/Chinese_room."/>
<roomname x="15" y="12" english="You Just Keep Coming Back" translation="ستغيب، ستروح، وسترجع يا حياتي" explanation="You can pass through this room up to three times, depending on which route you take through the level."/>
<roomname x="15" y="13" english="Hyperspace Bypass 5" translation="متخطى الفضاء الفائق رقم 5" explanation="A conveyor belt will take you through this room without you needing to press any buttons, hench the bypass. The phrase Hyperspace Bypass is a reference to Hitchhiker&apos;s Guide to the Galaxy."/>
<roomname x="16" y="0" english="I Love You" translation="أحبك" explanation="The room contains a couple of heart shaped enemies"/>
<roomname x="16" y="1" english="As you like it" translation="كما شئت" explanation="This room can be approached in two different equivilent ways, whichever way you like it. &apos;As you like it&apos; is the name of a Shakespeare play."/>
<roomname x="16" y="2" english="Short Circuit" translation="دارة مقصورة" explanation="Probably named after the 80s film Short Circuit. Also works because you&apos;ll hit a dead end if you keep walking forwards."/>
<roomname x="16" y="3" english="Twisty Little Passages" translation="طرق تقلصت وتشعبت" explanation="A maze like room. Refers to the section from the 1976 text game Colossal Cave Adventure - you are in a maze of twisty little passages, all alike"/>
<roomname x="16" y="6" english="Quicksand" translation="الرمال المتحركة" explanation="Contains lots of dissolving platforms."/>
<roomname x="16" y="7" english="The Tomb of Mad Carew" translation="قبر كارو المجنون" explanation="A very obscure reference to the C64 game Dizzy"/>
<roomname x="16" y="8" english="Parabolica" translation="العدسة الشلجمية" explanation="This room contains a section of wall in the shape of a parabolic arch."/>
<roomname x="16" y="9" english="$eeing Dollar $ign$" translation="أرى ﺷ$ﻞ دولار" explanation="This is a green room that resembles a dollar sign shape"/>
<roomname x="16" y="10" english="What Lies Beneath?" translation="تحت الأكاذيب؟" explanation="The room below this contains enemies in the shape of the word &apos;Lies&apos;. So there&apos;s a double meaning here - as in, a question, &apos;what is below this room&apos;, and that the word LIES is literally beneath this room."/>
<roomname x="16" y="11" english="Spikes Do!" translation="تحصد الأشواك!" explanation="This rooms is below the room named &apos;What lies Beneath?&apos;, and answers the question: Spikes do!"/>
<roomname x="16" y="12" english="Ha Ha Ha Not Really" translation="هه هه هه صدقتني" explanation="This is a difficult room that follows one called &apos;Plain Sailing from here on&apos;. It&apos;s taunting the player. "/>
<roomname x="16" y="13" english="Plain Sailing from Here On" translation="طريق سالكة من الآن فصاعدا" explanation="This room is at the end of a long section, and promises &apos;Plain Sailing&apos; afterwards, as in, no further challenges. This is a lie"/>
<roomname x="17" y="0" english="As we go up, we go down" translation="صعودنا سقوط" explanation="Named after the 1995 song by Guided by Voices"/>
<roomname x="17" y="1" english="Maze With No Entrance" translation="متاهة بلا مدخل" explanation="This room is a maze which has no entrance, due to the nature of the warping mechanic."/>
<roomname x="17" y="2" english="The Brown Gate" translation="البوابة البنية" explanation="I think this is an Ultima 7 reference? A literal translation is fine here"/>
<roomname x="17" y="3" english="Edge Games" translation="نلعب على حافة الخطر" explanation="Contains a trinket that you get by navigating around the edge of the screen. The use of the word EDGE is deliberate, refering to the trademark of a notoriously litigious individual who sued an indie developer around the time VVVVVV was made"/>
<roomname x="17" y="7" english="Brass Sent Us Under The Top" translation="كتيبة المتسلقين" explanation="The enemies in this room look like little army guys"/>
<roomname x="17" y="8" english="The Warning" translation="من أنذر فقد أعذر" explanation="This room has lots of checkpoints in it. It&apos;s beside the game&apos;s most difficult challenge, the Veni, Vidi, Vici section. The checkpoints don&apos;t really do anything, but they&apos;re a warning of the challenge ahead."/>
<roomname x="17" y="9" english="Just Pick Yourself Down" translation="التقط نفسك من تحت" explanation="A two part room name. From the expression &apos;If you fall down, just pick yourself up&apos;."/>
<roomname x="17" y="10" english="If You Fall Up" translation="لو سقطت إلى فوق" explanation="A two part room name. From the expression &apos;If you fall down, just pick yourself up&apos;."/>
<roomname x="17" y="11" english="Chipper Cipher" translation="شفرة بهجة" explanation="Just some nice wordplay. Chipper means &apos;Jolly&apos; or &apos;Happy&apos;."/>
<roomname x="18" y="0" english="Time to get serious" translation="حان وقت الجد" explanation="Literal, this is the first room in the stage which is fairly difficult"/>
<roomname x="18" y="1" english="Wheeler&apos;s Wormhole" translation="الثقب الدودي، حسب ويلر" explanation="Apparently a scientist named John Wheeler coined the phrase &apos;Wormhole&apos;! I just found that out. Anyway, this room has a teleporter in it."/>
<roomname x="18" y="2" english="Sweeney&apos;s Maze" translation="متاهة سويني" explanation="Contains enemies that move strangly and resemble enemies from ZZT, an old game by Tim Sweeney"/>
<roomname x="18" y="3" english="Mind The Gap" translation="حذار من الفجوة" explanation="Refers to what train announcers say on the London Underground when you leave the train - mind the gap between the train and the station platform"/>
<roomname x="18" y="7" english="A Wrinkle in Time" translation="بين طيات الزمان" explanation="The name of a 60&apos;s science fiction book. There is a teleporter in this room."/>
<roomname x="18" y="8" english="Getting Here is Half the Fun" translation="الوصول نصف المتعة" explanation="The top of the Veni Vidi Vici sequence. When you get to the top, you have to go all the way back down - hence, this room is the halfway point of the challenge."/>
<roomname x="18" y="9" english="Your Bitter Tears... Delicious" translation="بكيت بمرارة... دموعك حلاوة" explanation="Part of the Veni Vidi Vici sequence. Taunting the player."/>
<roomname x="18" y="10" english="Easy Mode Unlocked" translation="فتحت الطور السهل" explanation="Part of the Veni Vidi Vici sequence. Taunting the player - the &apos;easy mode&apos; refers to the second passageway on the right side that is easier to take when going back through this room on the way down, but that passageway leads to death."/>
<roomname x="18" y="11" english="Vici!" translation="جئت!" explanation="The rooms Veni, Vidi, Vici! appear in sequence. Famous latin phrase attributed to Julius Caesar meaning I came, I saw, I conquered. The hardest challenge in the game."/>
<roomname x="18" y="12" english="Vidi" translation="نظرت!" explanation="The rooms Veni, Vidi, Vici! appear in sequence. Famous latin phrase attributed to Julius Caesar meaning I came, I saw, I conquered. The hardest challenge in the game."/>
<roomname x="18" y="13" english="Veni" translation="فزت!" explanation="The rooms Veni, Vidi, Vici! appear in sequence. Famous latin phrase attributed to Julius Caesar meaning I came, I saw, I conquered. The hardest challenge in the game."/>
<roomname x="18" y="14" english="Doing Things The Hard Way" translation="صعبت الطريق على نفسك" explanation="The starting room from the Veni, Vidi, Vici! challenge."/>
<roomname x="19" y="0" english="To The Batcave!" translation="إلى مغارة الوطواط!" explanation="The Batcave, as in Batman&apos;s hideout."/>
<roomname x="19" y="1" english="Ascending and Descending" translation="صواعد ونوازل" explanation="Just meant as in literally Ascending and Descending, going up and down. There is a room later in the game called Upstairs, Downstairs, which is a callback to this."/>
<roomname x="19" y="2" english="Shockwave Rider" translation="راكب الموجات" explanation="Named after a 70&apos;s Science Fiction novel"/>
<roomname x="19" y="3" english="This will make you flip" translation="سيقلب هذا مزاجك" explanation="Flip is used here in the sense &apos;Flip out&apos;, as in, to lose your temper"/>
<roomname x="41" y="51" english="1950 Silverstone Grand V" translation="كأvv سلفرستون 1950" explanation="Refers to 1950 Silverstone Grand Prix (The final stage has room names that suggest old black and white TV shows.)"/>
<roomname x="41" y="52" english="DIY V Repair" translation="تصليح V بدون معلم" explanation="DIY TV repair - this room has a television you can interact with, which changes the theme from black and white to colour"/>
<roomname x="41" y="56" english="Now Take My Lead" translation="والآن ستمشي ورائي" explanation="This entire intermission section has a tone of a strict schoolteacher leading a small child."/>
<roomname x="42" y="52" english="Party Time!" translation="حفلة بلا ميعاد!" explanation="The first room after the black and white section. Doesn&apos;t refer to any TV show."/>
<roomname x="42" y="56" english="What Are You Waiting For?" translation="ماذا تنتظر؟" explanation="This entire intermission section has a tone of a strict schoolteacher leading a small child."/>
<roomname x="43" y="51" english="The Voon Show" translation="برنامج القلاﺑvv" explanation="Named after The Goon Show (The final stage has room names that suggest old black and white TV shows.)"/>
<roomname x="43" y="52" english="Upstairs, Downstairs" translation="طالع، نازل" explanation="Named after the 70s TV show - but also, refers to the earlier room Ascending and Descending, which this room is an updated version of. (Second part of the final stage has references to Colour TV shows)"/>
<roomname x="43" y="56" english="Don&apos;t Get Ahead of Yourself!" translation="إياك واستباق الأمور!" explanation="This entire intermission section has a tone of a strict schoolteacher leading a small child."/>
<roomname x="44" y="51" english="Vertigo" translation="‏٧وار المرتفعات" explanation="Named after the Hitchcock film (The final stage has room names that suggest old black and white TV shows.)"/>
<roomname x="44" y="52" english="Timeslip" translation="مخطوف الزمان" explanation="Named after the 70s TV show - name also suggests a connection to the earlier room Backsliders, which this room is an updated version of (Second part of the final stage has references to Colour TV shows)"/>
<roomname x="44" y="56" english="Very Good" translation="حسن جدا" explanation="This entire intermission section has a tone of a strict schoolteacher leading a small child."/>
<roomname x="45" y="52" english="Three&apos;s Company" translation="سر الثلاثة في حفظ الأمناء" explanation="Named after the 70s sitcom - but also, suggests a connection to the earlier room Two&apos;s Company, which this room is an updated version of (Second part of the final stage has references to Colour TV shows)"/>
<roomname x="45" y="56" english="Must I Do Everything For You?" translation="هل أساعدك في الصغيرة والكبيرة؟" explanation="This entire intermission section has a tone of a strict schoolteacher leading a small child."/>
<roomname x="46" y="54" english="Temporary Fault..." translation="عطل مؤقت..." explanation="Opening room of the final level."/>
<roomname x="46" y="56" english="Now Stay Close To Me..." translation="فلنمش قريبين من بعض..." explanation="This entire intermission section has a tone of a strict schoolteacher leading a small child."/>
<roomname x="47" y="52" english="Cosmic Creepers" translation="المتلصص الفضائي" explanation="Named after the cat from the 70s film Bedknobs and Broomsticks. Not sure why!"/>
<roomname x="47" y="54" english="Do Not Adjust the V-hold" translation="لا حاجة لتحريك الهوائي ٧" explanation="I don&apos;t think V-hold is a real thing, it&apos;s supposed to just suggest &apos;Do not adjust your TV settings&apos;. (The final stage has room names that suggest old black and white TV shows.)"/>
<roomname x="47" y="56" english="...But Not Too Close" translation="...لكن بدون قرب زائد" explanation="In this room, if you go too quickly, your crewmate will walk into spikes."/>
<roomname x="48" y="52" english="The Villi People" translation="معي غليظ" explanation="Bennett just thought this room looked &apos;intestinal&apos;. Villi as in part of the intestinal system. Also refers to the 80s band The Village People."/>
<roomname x="48" y="54" english="Regular Service Will Return Shortly" translation="سنعود بعد قليل" explanation="This is something you might hear on a TV station if they had lost reception. (The final stage has room names that suggest old black and white TV shows. A really, really good way to translate this level would be to use the names of black and white TV shows that are well known in your language, rather than trying to keep the exact meaning of the TV shows used here.)"/>
<roomname x="48" y="56" english="Don&apos;t Be Afraid" translation="لا داع للخوف" explanation="This entire intermission section has a tone of a strict schoolteacher leading a small child."/>
<roomname x="49" y="52" english="Panic Room" translation="غرفة الذعر" explanation="A panic room is a safe room that you can hide in during an emergency, but I don&apos;t think that was Bennett&apos;s intention with this name. This room suddenly starts scrolling as soon as you enter, causing a panic."/>
<roomname x="49" y="54" english="Origami Room" translation="غرفة في طي النسيان" explanation="As in folded paper - this room is mirrored around the center point."/>
<roomname x="49" y="56" english="Do as I Say..." translation="طالما سمعت كلامي..." explanation="This entire intermission section has a tone of a strict schoolteacher leading a small child."/>
<roomname x="50" y="51" english="The V Stooges" translation="البطل الخماسي" explanation="Refers to the 3 Stooges (The final stage has room names that suggest old black and white TV shows.)"/>
<roomname x="50" y="52" english="1954 World Cup Vinyl" translation="فينيل كأvv العالم 1954" explanation="Refers to the World Cup Final (The final stage has room names that suggest old black and white TV shows.)"/>
<roomname x="50" y="56" english="...Not as I Do" translation="...بدل تقليد أفعالي" explanation="This entire intermission section has a tone of a strict schoolteacher leading a small child."/>
<roomname x="51" y="53" english="The Final Challenge" translation="التحدي النهائي" explanation="One of the last challenges in the game."/>
<roomname x="51" y="56" english="Mind Your Head" translation="حذار، رأسك والسقف" explanation="This entire intermission section has a tone of a strict schoolteacher leading a small child."/>
<roomname x="52" y="53" english="The Last Straw" translation="القشة التي قصمت" explanation="One more little challenge, just after the room called The Final Challenge"/>
<roomname x="52" y="56" english="Do Try To Keep Up" translation="هلا لحقتني، بدون تباطئ؟" explanation="This entire intermission section has a tone of a strict schoolteacher leading a small child."/>
<roomname x="53" y="48" english="Whee Sports" translation="`v´ ويهي ما أحلى الرياضة `v´" explanation="Refers to Wii Sports, the Nintendo Wii launch title. &apos;Whee&apos; as in what a child might say while going down a slide (this room has a long drop in it)"/>
<roomname x="53" y="49" english="Whizz Down The Shaft" translation="الصعوv إلى الهاوية" explanation="Whizz is Australian slang for doing something quickly, I think"/>
<roomname x="53" y="50" english="The Gravitron" translation="أتون الجاذبية" explanation="A special arcade section where you have to survive for 60 seconds. Bennett named this one so as to suggest a funfair ride (though not any one in particular)."/>
<roomname x="53" y="51" english="Tunnel of Terror" translation="أنفاق الأهوال" explanation="Another name inspired by funfairs."/>
<roomname x="53" y="52" english="House of Mirrors" translation="متاهة المرايا" explanation="Another name inspired by funfairs."/>
<roomname x="53" y="53" english="W" translation="W" explanation="This room has platforms in a W shape."/>
<roomname x="53" y="56" english="You&apos;re Falling Behind" translation="تأخرت في النزول!" explanation="This entire intermission section has a tone of a strict schoolteacher leading a small child."/>
<roomname x="54" y="48" english="VVVVVV" translation="VVVVVV" explanation="Final sequence of rooms that spell out V-V-V-V-V-V, 6/6"/>
<roomname x="54" y="49" english="VVVVV" translation="VVVVV" explanation="Final sequence of rooms that spell out V-V-V-V-V-V, 5/6"/>
<roomname x="54" y="50" english="VVVV" translation="VVVV" explanation="Final sequence of rooms that spell out V-V-V-V-V-V, 4/6"/>
<roomname x="54" y="51" english="VVV" translation="VVV" explanation="Final sequence of rooms that spell out V-V-V-V-V-V, 3/6"/>
<roomname x="54" y="52" english="VV" translation="VV" explanation="Final sequence of rooms that spell out V-V-V-V-V-V, 2/6"/>
<roomname x="54" y="53" english="V" translation="V" explanation="Final sequence of rooms that spell out V-V-V-V-V-V, 1/6"/>
<roomname x="54" y="56" english="Class Dismissed!" translation="انتهى الدرس!" explanation="This entire intermission section has a tone of a strict schoolteacher leading a small child."/>
</roomnames>

View file

@ -1,71 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Please read README.txt for information about the language files -->
<roomnames_special>
<roomname english="Outer Space" translation="الفضاء الخارجي" explanation="Literally Outer Space"/>
<roomname english="Dimension VVVVVV" translation="البعد VVVVVV" explanation="The overall area that the game takes place in."/>
<roomname english="The Ship" translation="السفينة" explanation="The dimension exploring spaceship"/>
<roomname english="Secret Lab" translation="المخبر السري" explanation="An endgame section containing achievement trophys"/>
<roomname english="Laboratory" translation="المخبر" explanation="One of the stages"/>
<roomname english="The Tower" translation="البرج" explanation="One of the stages"/>
<roomname english="Warp Zone" translation="منطقة النقلة" explanation="One of the stages"/>
<roomname english="Space Station" translation="المحطة الفضائية" explanation="One of the stages"/>
<roomname english="Outside Dimension VVVVVV" translation="خارج نطاق البعد VVVVVV" explanation="For rare rooms outside the normal area"/>
<roomname english="???" translation="؟؟؟" explanation=""/>
<roomname english="The Super Gravitron" translation="أتون الجاذبية الخارق" explanation="An expanded version of the room at 53, 50"/>
<roomname english="I Can&apos;t Believe You Got This Far" translation="لا أصدق وصولك هذا الحد" explanation="If you&apos;re playing No Death Mode, the room Prize for the Reckless has this roomname instead (the room is altered to make it possible to do this section without dying)"/>
<roomname english="Imagine Spikes There, if You Like" translation="يمكنك تخيل أشواك هناك لو شئت" explanation="If you&apos;re playing a time trial, the room Prize for the Reckless has this roomname instead (the room is altered to make it possible to do this section without dying)"/>
<!-- - -->
<roomname english="Rear Window" translation="النافذة الخلفية" explanation="Named after the Hitchcock film (The final stage has room names that suggest old black and white TV shows.)"/>
<roomname english="Rear Vindow" translation="ﺍﻟﻨﺎﻓ٧ﺓ الخلفية" explanation=""/>
<!-- - -->
<roomname english="On the Waterfront" translation="على جبهة البحر" explanation="Named after the 1954 film (The final stage has room names that suggest old black and white TV shows.)"/>
<roomname english="On the Vaterfront" translation="على ٧بهة البحر" explanation=""/>
<!-- - -->
<roomname english="The Untouchables" translation="أناس فوق مستوى النقد" explanation="Before it was a film, the Untouchables was a TV series in 1959 (The final stage has room names that suggest old black and white TV shows.)"/>
<roomname english="The Untouchavles" translation="أناس فوق مستوى ﺍﻟﻨﻘ٧" explanation=""/>
<!-- - -->
<roomname english="Television Newsveel" translation="نشرة الأنباء" explanation="Refers to Television Newsreel. (The final stage has room names that suggest old black and white TV shows.)"/>
<roomname english="Television Newsvel" translation="ثشرة الأثپاء" explanation=""/>
<roomname english="TelevisvonvNewsvel" translation="ثشژڤ‍ الأثپاء" explanation=""/>
<roomname english="TvlvvvsvonvNevsvel" translation="ث٧٧ژڤ‍ ا٧ثپا٧" explanation=""/>
<roomname english="vvvvvvsvovvNe svel" translation="٨‍‏٧٧٨‍‏٧ ا٧٨‍‏٧ا٧" explanation=""/>
<roomname english="vhv vvv&apos;vvovv vevl" translation="٨‍‏٧٧٨‍‏٧ا٧٨‍‏٧ا٧" explanation=""/>
<roomname english="vhv V v&apos;Cvovv vewv" translation="ا٨‍‏٧٨‍‏ا٨‍‏٧٨‍‏ا٧٧" explanation=""/>
<roomname english="vhe 9 v&apos;Cvovv vewv" translation="ا٨‍‏٧ا٨‍‏ا٨‍‏ا٨‍‏٨‍‏٧" explanation=""/>
<roomname english="vhe 9 v&apos;Cvovv Newv" translation="ا٨‍‏٧ا٨‍‏ ال‍٨‍‏ا٨‍‏٨‍‏٧" explanation=""/>
<roomname english="The 9 O&apos;Cvovk Newv" translation="أڅپاژ الثاشڄڤ‍" explanation=""/>
<roomname english="The 9 O&apos;Clock News" translation="أخبار التاسعة" explanation="(Second part of the final stage has references to Colour TV shows)"/>
<!-- - -->
<roomname english="Vwitched" translation="المسحورة" explanation="Reference to early black and white sitcom Bewitched (The final stage has room names that suggest old black and white TV shows.)"/>
<roomname english="Vwitvhed" translation="المشحو٧ الڤشچڤژڤ‍" explanation=""/>
<roomname english="vVwivcvedv" translation="ال‍٧٨‍‏٧٧٨‍‏٧ ال‍٧٨‍‏٧٧٨‍‏٧" explanation=""/>
<roomname english="vvvwMvcvMdvv" translation="ال‍٧٨‍‏٧٧٧ ال‍٧٨‍‏٧٧٧ ال‍٧" explanation=""/>
<roomname english="DvvvwMvfvvMdvvv" translation="ال‍٧٨‍‏٧٧٧ ٨‍‏٧٧ الكا٧ل‍٧" explanation=""/>
<roomname english="Dvav Mvfvr Mdvvvv" translation="الچژپڤڤ‍ شپه الكاڤلڤ‍" explanation=""/>
<roomname english="Diav M for Mdrver" translation="الجريمة شبه الكاملة" explanation=""/>
<roomname english="Dial M for Murder" translation="الجري‍[‌م]‌‍ة شبه الكاملة" explanation="Named after the Hitchcock film (Second part of the final stage has references to Colour TV shows)"/>
<!-- - -->
<roomname english="Gvnsmoke" translation="ويسترن" explanation="Gunsmoke was a black and white Western (The final stage has room names that suggest old black and white TV shows.)"/>
<roomname english="Gvnsmove" translation="ڤپشثرن" explanation=""/>
<roomname english="Gvnvmovevv" translation="٧٧٨‍‏٨‍‏٧٧" explanation=""/>
<roomname english="Gunvmove1vv6" translation="٨‍‏ا٨‍‏٨‍‏٧٧٨‍‏ " explanation=""/>
<roomname english="Vunsmoke 19v6" translation="ڄاثشڤڤك ١٨٧٧" explanation=""/>
<roomname english="Gunsmoke 1966" translation="غانسموك 1966" explanation="Gunsmoke changed to colour in 1966 (Second part of the final stage has references to Colour TV shows)"/>
<!-- - -->
<roomname english="Please enjoy these repeats" translation="استمتعوا بالإعادة" explanation="This stage also has a number of rooms which are harder versions of easier challenges, like this one. (The final stage has room names that suggest old black and white TV shows.)"/>
<roomname english="Please envoy theve repeats" translation="اشثڤثڄڤ‍ا پالإڄاڎڤ‍" explanation=""/>
<roomname english="Plse envoy tse rvpvas" translation="ا٨‍‏٨‍‏٧٨‍‏٨‍‏٧ا ٨‍‏ا٧٨‍‏ا٨‍‏٧" explanation=""/>
<roomname english="Vl envoy te rvevs" translation="٨‍‏ا٧٨‍‏٨‍‏ا٨‍‏٨‍‏ا٨‍‏٧٨‍‏" explanation=""/>
<roomname english="Vv evo tv vevs" translation="٨‍‏ل٧ ٨‍‏ل‍٧٧ا٧٨‍‏" explanation=""/>
<roomname english="Iv vhv Mvrvivs" translation="ڄلى الهڤا‍ڤش" explanation=""/>
<roomname english="In the Margins" translation="على الهوامش" explanation="Not sure if this has a TV show reference, might just be meant literally (Second part of the final stage has references to Colour TV shows)"/>
<!-- - -->
<roomname english="Try Jiggling the Antenna" translation="فلنجرب خرخشة الهوائي" explanation="(The final stage has room names that suggest old black and white TV shows.)"/>
<roomname english="Try Viggling the Antenna" translation="ڤلثچژپ څژڅشڤ‍ الهڤائي" explanation=""/>
<roomname english="TryJivglvng theAvtevna" translation="٧ل‍٨‍‏٧٨‍‏٧ ٨‍‏٨‍‏٨‍‏٨‍‏٧ ٨‍‏ل‍٨‍‏٧‍‍‍ا٨‍‏٧" explanation=""/>
<roomname english="Tvvivglvng thAvtvvv" translation="٨‍‏٨‍‏٧٨‍‏٧ ٨‍‏٨‍‏٨‍‏٧ ٨‍‏٨‍‏٧٨‍‏٧" explanation=""/>
<roomname english="Vvvgglvnv tvnvva" translation="٨‍‏٨‍‏٧٨‍‏٧ ٨‍‏٨‍‏٧٨‍‏٧٨‍‏٧" explanation=""/>
<roomname english="Vvavvnvs vvtv" translation="ا٧٧ا٧ ٨‍‏ل‍٧٨‍‏٧" explanation=""/>
<roomname english="Veavvn&apos;s Gvte" translation="أپڤاپ الچثڤ‍" explanation="Named after the 1980&apos;s film (Second part of the final stage has references to Colour TV shows)"/>
<roomname english="Heaven&apos;s Gate" translation="أبواب الجنة" explanation="Named after the 1980&apos;s film (Second part of the final stage has references to Colour TV shows)"/>
</roomnames_special>

View file

@ -1,819 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Please read README.txt for information about the language files -->
<strings max_local_for="8x10">
<string english="LOADING... {percent|digits=2|spaces}%" translation="جار التحميل...{percent|digits=2|spaces}%" explanation="on loading screen. {percent} = number from 0-100" max="26" max_local="26"/>
<string english="Game paused" translation="راحة" explanation="pause screen" max="40" max_local="40"/>
<string english="[click to resume]" translation="[نضغط أي زر للمواصلة]" explanation="pause screen" max="40" max_local="40"/>
<string english="Press M to mute in game" translation="نضغط M لكتم الصوت أثناء اللعب" explanation="pause screen" max="40" max_local="40"/>
<string english="Press N to mute music only" translation="نضغط N لكتم الموسيقى فقط" explanation="pause screen" max="40" max_local="40"/>
<string english="MAKE AND PLAY EDITION" translation="إصدار اصنع والعب" explanation="" max="27" max_local="27"/>
<string english="[MMMMMM Mod Installed]" translation="[تعديل MMMMMM منصب]" explanation="" max="32" max_local="32"/>
<string english="play" translation="لعب" explanation="main menu option"/>
<string english="levels" translation="مراحل" explanation="main menu option"/>
<string english="options" translation="خيارات" explanation="main menu option"/>
<string english="translator" translation="مترجم" explanation="main menu option"/>
<string english="credits" translation="فريق" explanation="main menu option"/>
<string english="quit" translation="خروج" explanation="main menu option"/>
<string english="gameplay" translation="اللعبة" explanation="options menu option"/>
<string english="Gameplay Options" translation="إعدادات اللعبة" explanation="title" max="20" max_local="20"/>
<string english="Adjust various gameplay settings." translation="لتغيير إعدادات مختلفة تخص اللعبة." explanation="" max="38*5" max_local="38*5"/>
<string english="graphics" translation="البصريات" explanation="options menu option"/>
<string english="Graphics Options" translation="إعدادات الصور" explanation="title" max="20" max_local="20"/>
<string english="Adjust screen settings." translation="لتغيير إعدادات الشاشة." explanation="" max="38*5" max_local="38*5"/>
<string english="audio" translation="الصوتيات" explanation="options menu option"/>
<string english="Audio Options" translation="إعدادات الصوت" explanation="title" max="20" max_local="20"/>
<string english="Adjust volume settings and soundtrack." translation="لضبط إعدادات مستوى الصوت والموسيقى." explanation="" max="38*5" max_local="38*5"/>
<string english="Adjust volume settings." translation="لضبط إعدادات مستوى الصوت." explanation="" max="38*5" max_local="38*5"/>
<string english="continue" translation="مواصلة" explanation="menu option"/>
<string english="continue from teleporter" translation="مواصلة من التنقيلة" explanation="menu option, game save that was made at a teleporter"/>
<string english="Tele Save" translation="تخزينة تنقيلة" explanation="title, game save that was made at a teleporter" max="20" max_local="20"/>
<string english="continue from quicksave" translation="مواصلة من التخزينة السريعة" explanation="menu option, game save that was made freely from the menu (at any checkpoint)"/>
<string english="Quick Save" translation="تخزينة سريعة" explanation="title, game save that was made freely from the menu (at any checkpoint)" max="20" max_local="20"/>
<string english="proceed" translation="استمرار" explanation="menu option"/>
<string english="new game" translation="لعبة جديدة" explanation="menu option"/>
<string english="start new game" translation="بدء لعبة جديدة" explanation="menu option, extra confirmation"/>
<string english="secret lab" translation="مخبر سري" explanation="menu option"/>
<string english="play modes" translation="أطوار اللعب" explanation="menu option"/>
<string english="ERROR: No levels found." translation="خطأ: لم نجد المراحل." explanation="" max="38*3" max_local="38*3"/>
<string english="ERROR: This level has no start point!" translation="خطأ: لم نجد نقطة بدء لهذه المرحلة!" explanation="" max="38*5" max_local="38*5"/>
<string english="ERROR" translation="خطأ" explanation="title" max="20" max_local="20"/>
<string english="WARNING" translation="تحذير" explanation="title" max="20" max_local="20"/>
<string english="unlock play modes" translation="فتح أطوار اللعب" explanation="menu option"/>
<string english="Unlock Play Modes" translation="فتح أطوار اللعب" explanation="title" max="20" max_local="20"/>
<string english="Unlock parts of the game normally unlocked as you progress." translation="فتح أطوار اللعب فتحا عاديا حسب تقدمك في اللعبة." explanation="" max="38*5" max_local="38*5"/>
<string english="From here, you may unlock parts of the game that are normally unlocked as you play." translation="يمكنك من هنا فتح أجزاء من اللعبة فورا، كان من المفروض أن تفتح تدريجيا أثناء اللعب العادي." explanation="" max="38*5" max_local="38*5"/>
<string english="unlock ship jukebox" translation="فتح صندوق ألحان السفينة" explanation="menu option"/>
<string english="unlock secret lab" translation="فتح المخبر السري" explanation="menu option"/>
<string english="game pad" translation="يد التحكم" explanation="menu option"/>
<string english="Game Pad Options" translation="إعدادات يد التحكم" explanation="title" max="20" max_local="20"/>
<string english="Rebind your controller&apos;s buttons and adjust sensitivity." translation="يمكنك تعيين أزرار يد التحكم
وضبط حساسيتها." explanation="" max="38*5" max_local="38*5"/>
<string english="language" translation="اللغة" explanation="menu option"/>
<string english="Language" translation="اللغة" explanation="title" max="20" max_local="20"/>
<string english="Change the language." translation="تغيير اللغة." explanation="" max="38*2" max_local="38*2"/>
<string english="Can not change the language while a textbox is displayed in-game." translation="لا يمكن تغيير اللغة أثناء ظهور نص في اللعبة." explanation="" max="38*3" max_local="38*3"/>
<string english="clear main game data" translation="حذف بيانات اللعبة الأساسية" explanation="menu option"/>
<string english="clear custom level data" translation="حذف بيانات المراحل الاختيارية" explanation="menu option"/>
<string english="Clear Data" translation="حذف البيانات" explanation="title" max="20" max_local="20"/>
<string english="Delete your main game save data and unlocked play modes." translation="حذف بيانات حفظ اللعبة الأساسية وما يخص أطوار اللعب المفتوحة." explanation="" max="38*5" max_local="38*5"/>
<string english="Delete your custom level save data and completion stars." translation="حذف بيانات المراحل الاختيارية وما يخص نجوم الإكمال." explanation="completion stars: when completing a level you get either 1 or 2 stars" max="38*5" max_local="38*5"/>
<string english="Are you sure? This will delete your current saves..." translation="أحقا قررت ذلك؟
ستحذف تخزيناتك الحالية..." explanation="" max="38*7" max_local="38*7"/>
<string english="Are you sure you want to delete all your saved data?" translation="هل تأكدت من قرارك بحذف كل بياناتك المحفوظة؟" explanation="" max="38*7" max_local="38*7"/>
<string english="Are you sure you want to delete your quicksave?" translation="هل تأكدت من قرارك بحذف تخزينتك السريعة؟" explanation="only the quicksave of a custom level" max="38*7" max_local="38*7"/>
<string english="no! don&apos;t delete" translation="لا! دعها ولا تحذفها" explanation="menu option"/>
<string english="yes, delete everything" translation="أجل، احذف كل شيء" explanation="menu option"/>
<string english="yes, delete save" translation="أجل، احذف التخزينة" explanation="menu option"/>
<string english="soundtrack" translation="الموسيقى" explanation="menu option"/>
<string english="Soundtrack" translation="الموسيقى" explanation="title" max="20" max_local="20"/>
<string english="Toggle between MMMMMM and PPPPPP." translation="التبديل بين MMMMMM و PPPPPP." explanation="" max="38*2" max_local="38*2"/>
<string english="Current soundtrack: PPPPPP" translation="الموسيقى الحالية: PPPPPP" explanation="" max="38*3" max_local="38*3"/>
<string english="Current soundtrack: MMMMMM" translation="الموسيقى الحالية: MMMMMM" explanation="" max="38*3" max_local="38*3"/>
<string english="toggle fullscreen" translation="تفعيل الشاشة الكاملة" explanation="menu option"/>
<string english="Toggle Fullscreen" translation="تفعيل الشاشة الكاملة" explanation="title" max="20" max_local="20"/>
<string english="Change to fullscreen/windowed mode." translation="التبديل بين وضع الشاشة الكاملة
ووضع النافذة." explanation="" max="38*3" max_local="38*3"/>
<string english="Current mode: FULLSCREEN" translation="الوضع الحالي: الشاشة الكاملة" explanation="" max="38*2" max_local="38*2"/>
<string english="Current mode: WINDOWED" translation="الوضع الحالي: النافذة" explanation="" max="38*2" max_local="38*2"/>
<string english="scaling mode" translation="وضع تكبير الصورة" explanation="menu option"/>
<string english="Scaling Mode" translation="وضع تكبير الصورة" explanation="title" max="20" max_local="20"/>
<string english="Choose letterbox/stretch/integer mode." translation="طريقة تكبير الصورة لتملأ الشاشة." explanation="See the `Current mode` explanations for more details on the modes" max="38*3" max_local="38*3"/>
<string english="Current mode: INTEGER" translation="الوضع الحالي: مضاعف صحيح" explanation="integer (whole number) mode only enlarges the game in exact multiples of 320x240" max="38*2" max_local="38*2"/>
<string english="Current mode: STRETCH" translation="الوضع الحالي: تمطيط الصورة" explanation="stretch mode just stretches the game to fill the window content" max="38*2" max_local="38*2"/>
<string english="Current mode: LETTERBOX" translation="الوضع الحالي: حواف سوداء" explanation="letterbox mode enlarges the game to the window, but adds black bars to make the aspect ratio 4:3" max="38*2" max_local="38*2"/>
<string english="resize to nearest" translation="التكبير لأقرب مضاعف" explanation="menu option. The game will be resized to the closest multiple of the normal resolution, 320x240, so for example if your window is 682x493, it will resize to 640x480"/>
<string english="Resize to Nearest" translation="تكبير لأقرب مضاعف" explanation="title. The game will be resized to the closest multiple of the normal resolution, 320x240, so for example if your window is 682x493, it will resize to 640x480" max="20" max_local="20"/>
<string english="Resize to the nearest window size that is of an integer multiple." translation="تكبير لأقرب حجم شاشة يكون عددا مضاعفا صحيحا للأبعاد الأصلية." explanation="The game will be resized to the closest multiple of the normal resolution, 320x240, so for example if your window is 682x493, it will resize to 640x480" max="38*3" max_local="38*3"/>
<string english="You must be in windowed mode to use this option." translation="يشترط هذا الخيار وضع النافذة." explanation="The game cannot be in fullscreen to resize the window" max="38*2" max_local="38*2"/>
<string english="toggle filter" translation="تفعيل فلتر الصورة" explanation="menu option"/>
<string english="Toggle Filter" translation="تفعيل فلتر الصورة" explanation="title" max="20" max_local="20"/>
<string english="Change to nearest/linear filter." translation="تغيير طريقة معالجة جودة الصورة." explanation="" max="38*3" max_local="38*3"/>
<string english="Current mode: LINEAR" translation="الوضع الحالي: خطي" explanation="" max="38*2" max_local="38*2"/>
<string english="Current mode: NEAREST" translation="الوضع الحالي: أقرب جار" explanation="nearest neighbor filter" max="38*2" max_local="38*2"/>
<string english="toggle analogue" translation="تفعيل صورة البث التناظري" explanation="menu option, analogue mode simulates distortion from bad signal"/>
<string english="Analogue Mode" translation="صورة البث التناظري" explanation="title, analogue mode simulates distortion from bad signal" max="20" max_local="20"/>
<string english="There is nothing wrong with your television set. Do not attempt to adjust the picture." translation="تلفازك بخير. لا تحاول تصحيح صورته." explanation="" max="38*5" max_local="38*5"/>
<string english="toggle fps" translation="تفعيل حد الإطارات" explanation="menu option, kind of a misnomer, toggle between 30 FPS and more than 30 FPS"/>
<string english="Toggle 30+ FPS" translation="تجاوز 30 إطار/ثانية" explanation="title" max="20" max_local="20"/>
<string english="Change whether the game runs at 30 or over 30 FPS." translation="هل تعرض صور اللعبة بنسق
30 إطار/ثانية أو أكثر." explanation="" max="38*3" max_local="38*3"/>
<string english="Current mode: 30 FPS" translation="الوضع الحالي: 30 إطار/ثانية" explanation="" max="38*2" max_local="38*2"/>
<string english="Current mode: Over 30 FPS" translation="الوضع الحالي: أكثر من 30 إطار/ثانية" explanation="" max="38*2" max_local="38*2"/>
<string english="toggle vsync" translation="تفعيل التزامن العمودي" explanation="menu option"/>
<string english="Toggle VSync" translation="تفعيل التزامن العمودي" explanation="title" max="20" max_local="20"/>
<string english="Turn VSync on or off." translation="تفعيل التزامن العمودي Vsync من عدمه." explanation="" max="38*2" max_local="38*2"/>
<string english="Current mode: VSYNC OFF" translation="الوضع الحالي: VSYNC OFF (لا)" explanation="" max="38*2" max_local="38*2"/>
<string english="Current mode: VSYNC ON" translation="الوضع الحالي: VSYNC ON (نعم)" explanation="" max="38*2" max_local="38*2"/>
<string english="music volume" translation="مستوى الموسيقى" explanation="audio menu option"/>
<string english="Music Volume" translation="مستوى الموسيقى" explanation="title" max="20" max_local="20"/>
<string english="Change the volume of the music." translation="تغيير مستوى صوت الموسيقى." explanation="" max="38*3" max_local="38*3"/>
<string english="sound volume" translation="مستوى الأصوات" explanation="audio menu option"/>
<string english="Sound Volume" translation="مستوى الأصوات" explanation="title" max="20" max_local="20"/>
<string english="Change the volume of sound effects." translation="تغيير مستوى مؤثرات الصوت." explanation="" max="38*3" max_local="38*3"/>
<string english="Credits" translation="فريق العمل" explanation="credits" max="20" max_local="20"/>
<string english="VVVVVV is a game by" translation="لعبة VVVVVV من" explanation="credits" max="40" max_local="40"/>
<string english="and features music by" translation="ومن تلحين" explanation="credits" max="40" max_local="40"/>
<string english="Roomnames are by" translation="وأسماء غرفها من إعداد" explanation="credits" max="40" max_local="40"/>
<string english="C++ version by" translation="ونسخة ++C من تطوير" explanation="credits" max="40" max_local="40"/>
<string english="Beta Testing by" translation="واختبار البيتا بفضل" explanation="credits" max="30" max_local="30"/>
<string english="Ending Picture by" translation="وصورة النهاية من رسم" explanation="credits" max="30" max_local="30"/>
<string english="Created by" translation="صنعها" explanation="credits" max="30" max_local="30"/>
<string english="With Music by" translation="موسيقاها من" explanation="credits" max="30" max_local="30"/>
<string english="Rooms Named by" translation="أسماء غرفها من" explanation="credits" max="30" max_local="30"/>
<string english="C++ Port by" translation="نقلها إلى ++C من" explanation="credits" max="30" max_local="30"/>
<string english="Patrons" translation="داعموها" explanation="credits, people who donated a certain amount before the game originally released" max="13" max_local="13"/>
<string english="VVVVVV is supported by the following patrons" translation="لعبة VVVVVV يدعمها المتبرعون المذكورون" explanation="credits" max="38*3" max_local="38*3"/>
<string english="and also by" translation="علاوة على" explanation="credits, VVVVVV is also supported by the following people" max="38*2" max_local="38*2"/>
<string english="and" translation="ومعهم" explanation="credits. This list of names, AND furthermore, this other list of names" max="38" max_local="38"/>
<string english="GitHub Contributors" translation="مساهمو غيتهب" explanation="credits. This doesn&apos;t _really_ need `GitHub` specifically, it could be replaced with `Code`" max="20" max_local="20"/>
<string english="With contributions on GitHub from" translation="مع مساهمات برمجة غيتهب من" explanation="credits" max="40" max_local="40"/>
<string english="and thanks also to:" translation="مع شكر خاص كذلك:" explanation="credits, and thanks also to ... you!" max="38*3" max_local="38*3"/>
<string english="You!" translation="لك أنت!" explanation="credits, and thanks also to ... you!" max="20" max_local="20"/>
<string english="Your support makes it possible for me to continue making the games I want to make, now and into the future." translation="دعمكم يمكنني من الاستمرار في صنع الألعاب التي أريدها اليوم ومستقبلا." explanation="credits" max="38*5" max_local="38*5"/>
<string english="Thank you!" translation="أشكركم!" explanation="credits" max="38*5" max_local="38*5"/>
<string english="Good luck!" translation="حظا موفقا!" explanation="" max="38*3" max_local="38*3"/>
<string english="You cannot save in this mode." translation="لا يمكنك الحفظ في هذا الطور." explanation="" max="38*3" max_local="38*3"/>
<string english="Would you like to disable the cutscenes during the game?" translation="هل تأكدت من قرارك بتعطيل المشاهد أثناء اللعبة؟" explanation="" max="38*6" max_local="38*6"/>
<string english="disable cutscenes" translation="تعطيل المشاهد" explanation="menu option"/>
<string english="enable cutscenes" translation="تفعيل المشاهد" explanation="menu option"/>
<string english="analog stick sensitivity" translation="حساسية عصا يد التحكم" explanation="menu option"/>
<string english="Stick Sensitivity" translation="حساسية العصا" explanation="title" max="20" max_local="20"/>
<string english="Change the sensitivity of the analog stick." translation="تغيير حساسية عصا التحكم." explanation="" max="38*3" max_local="38*3"/>
<string english="Low" translation="منخفضة" explanation="analog stick sensitivity, game pad menu"/>
<string english="Medium" translation="متوسطة" explanation="analog stick sensitivity, game pad menu"/>
<string english="High" translation="عالية" explanation="analog stick sensitivity, game pad menu"/>
<string english="bind flip" translation="تعيين العكس" explanation="menu option"/>
<string english="Bind Flip" translation="تعيين زر العكس" explanation="title" max="20" max_local="20"/>
<string english="bind enter" translation="تعيين الدخول" explanation="menu option"/>
<string english="Bind Enter" translation="تعيين زر الدخول" explanation="title" max="20" max_local="20"/>
<string english="bind menu" translation="تعيين القائمة" explanation="menu option"/>
<string english="Bind Menu" translation="تعيين زر القائمة" explanation="title" max="20" max_local="20"/>
<string english="bind restart" translation="تعيين إعادة الغرفة" explanation="menu option. In-game death key to restart at checkpoint"/>
<string english="Bind Restart" translation="تعيين زر الإعادة" explanation="title" max="20" max_local="20"/>
<string english="bind interact" translation="تعيين التفاعل" explanation="menu option"/>
<string english="Bind Interact" translation="تعيين زر التفاعل" explanation="title" max="20" max_local="20"/>
<string english="Flip is bound to: " translation="العكس معين للزر: " explanation="controller binds, bound to A, B, X, Y, etc. These strings end with a space!" max="32" max_local="32"/>
<string english="Enter is bound to: " translation="الدخول معين للزر: " explanation="controller binds, bound to A, B, X, Y, etc. These strings end with a space!" max="32" max_local="32"/>
<string english="Menu is bound to: " translation="القائمة معينة للزر: " explanation="controller binds, bound to A, B, X, Y, etc. These strings end with a space!" max="32" max_local="32"/>
<string english="Restart is bound to: " translation="إعادة الغرفة معينة للزر: " explanation="in-game death key to restart at checkpoint. Controller binds, bound to A, B, X, Y, etc. These strings end with a space!" max="32" max_local="32"/>
<string english="Interact is bound to: " translation="التفاعل معين للزر: " explanation="controller binds, bound to A, B, X, Y, etc. These strings end with a space!" max="32" max_local="32"/>
<string english="Press a button...|(or press ↑↓)" translation="يرجى ضغط زر...|(أو ضغط ↑↓)" explanation="the arrows represent up/down buttons, or stick movement... So: press a controller button, or navigate away" max="38*2" max_local="38*2"/>
<string english="Add {button}?|Press again to confirm" translation="إضافة {button}؟|اضغط ثانية للتأكيد" explanation="Bind the X button to this action? Press X again to really add it" max="38*2" max_local="38*2"/>
<string english="Remove {button}?|Press again to confirm" translation="إزالة {button}؟|اضغط ثانية للتأكيد" explanation="Remove the binding of the X button for this action? Press X again to really remove it" max="38*2" max_local="38*2"/>
<string english="Interact is currently Enter!|See speedrunner options." translation="زر التفاعل حاليا Enter !|راجع إعدادات التختيم السريع." explanation="the Interact action can&apos;t be configured now because it&apos;s the same as the Enter action. There&apos;s an option in the Speedrunner options to split it off" max="38*2" max_local="38*2"/>
<string english="ERROR: No language files found." translation="خطأ: لم نجد ملفات اللغة." explanation="" max="38*3" max_local="38*3"/>
<string english="Language folder:" translation="مجلد اللغة: " explanation="" max="39" max_local="39"/>
<string english="Repository language folder:" translation="مجلد اللغة في غيتهب: " explanation="Language folder from the Git repository" max="39" max_local="39"/>
<string english="translator options" translation="إعدادات المترجم" explanation="menu option"/>
<string english="Translator options" translation="إعدادات المترجم" explanation="title" max="20" max_local="20"/>
<string english="Some options that are useful for translators and developers." translation="بعض الاختيارات التي قد تفيد المترجمين والمطورين" explanation="" max="38*6" max_local="38*6"/>
<string english="maintenance" translation="صيانة" explanation="menu option, menu that allows you to apply maintenance to translations"/>
<string english="Maintenance" translation="صيانة" explanation="title" max="20" max_local="20"/>
<string english="open lang folder" translation="فتح مجلد اللغة" explanation="menu option. Button that opens the folder with language files (which is called lang) in a file explorer"/>
<string english="Sync all language files after adding new strings." translation="مزامنة كل ملفات اللغة بعد إضافة سطور جديدة." explanation="" max="38*6" max_local="38*6"/>
<string english="translate room names" translation="ترجمة أسماء الغرف" explanation="menu option"/>
<string english="Translate rooms" translation="ترجمة الغرف" explanation="title" max="20" max_local="20"/>
<string english="Enable room name translation mode, so you can translate room names in context. Press I for invincibility." translation="تفعيل وضع ترجمة أسماء الغرف، حتى تترجمها في سياقها. اضغط I للحصانة." explanation="" max="38*4" max_local="38*4"/>
<string english="You have not enabled room name translation mode!" translation="لم يفعل وضع ترجمة أسماء الغرف." explanation="" max="38*4" max_local="38*4"/>
<string english="menu test" translation="اختبار القوائم" explanation="menu option"/>
<string english="Menu test" translation="اختبار القوائم" explanation="title" max="20" max_local="20"/>
<string english="Cycle through most menus in the game. The menus will not actually work, all options take you to the next menu instead. Press Escape to stop." translation="يتفحص معظم قوائم اللعبة. لا تعمل عملها الأصلي، بل تنقلك للقائمة المختبرة الأخرى. اضغط ESC للتوقف." explanation="" max="38*6" max_local="38*6"/>
<string english="cutscene test" translation="اختبار المشاهد" explanation="menu option"/>
<string english="Cutscene test" translation="اختبار المشاهد" explanation="title" max="20" max_local="20"/>
<string english="Display all text boxes from cutscenes.xml. Only tests the basic appearance of each individual text box." translation="إظهار كل صناديق النصوص من cutscenes.xml لكنه لا يختبر إلا المظهر العام للنص دون سواه." explanation="" max="38*6" max_local="38*6"/>
<string english="from clipboard" translation="من ذاكرة النسخ" explanation="menu option, paste script name from clipboard"/>
<string english="explore game" translation="استطلاع اللعبة" explanation="menu option"/>
<string english="Explore game" translation="استطلاع اللعبة" explanation="title" max="20" max_local="20"/>
<string english="Explore the rooms of any level in the game, to find all room names to translate." translation="استطلاع غرف أي مستوى من اللعبة لكشف كل أسماء الغرف التي تحتاج ترجمات." explanation="" max="38*6" max_local="38*6"/>
<string english="limits check" translation="تحقق الحد" explanation="menu option"/>
<string english="global limits check" translation="تحقق الحد الشامل" explanation="menu option"/>
<string english="Limits check" translation="التحقق من الحدود" explanation="title" max="20" max_local="20"/>
<string english="Find translations that don&apos;t fit within their defined bounds." translation="البحث عن ترجمات جاوزت حدودها." explanation="" max="38*6" max_local="38*6"/>
<string english="No text overflows found!" translation="لم نجد فيضان نصوص!" explanation="limits check. no strings go outside their max bounds" max="38*6" max_local="38*6"/>
<string english="No text overflows left!" translation="لم نبق على فيضان نصوص!" explanation="limits check. we have seen all strings that go outside their max bounds" max="38*6" max_local="38*6"/>
<string english="Note that this detection isn&apos;t perfect." translation="مع الملاحظة أن هذا التحقق ليس متقنا." explanation="limits check" max="38*6" max_local="38*6"/>
<string english="sync language files" translation="مزامنة ملفات اللغة" explanation="menu option"/>
<string english="Sync language files" translation="مزامنة ملفات اللغة" explanation="title, translation maintenance menu" max="20" max_local="20"/>
<string english="sync" translation="مزامنة " explanation="menu option, verb"/>
<string english="Merge all new strings from the template files into the translation files, keeping existing translations." translation="توحيد كل السطور الجديدة من ملفات التمبليت إلى ملفات الترجمة بالحفاظ على السطور الكاملة السابقة." explanation="translation maintenance menu" max="38*6" max_local="38*6"/>
<string english="language statistics" translation="إحصائيات اللغة" explanation="menu option"/>
<string english="global statistics" translation="إحصائيات عامة" explanation="menu option"/>
<string english="Statistics" translation="إحصائيات" explanation="title, translation maintenance menu" max="20" max_local="20"/>
<string english="Count the amount of untranslated strings for this language." translation="عدد السطور التي لم تترجم لهذه اللغة" explanation="" max="38*6" max_local="38*6"/>
<string english="Count the amount of untranslated strings for each language." translation="عدد السطور التي لم تترجم لكل لغة" explanation="translation maintenance menu" max="38*6" max_local="38*6"/>
<string english="If new strings were added to the English template language files, this feature will insert them in the translation files for all languages. Make a backup, just in case." translation="لو أضيفت سطور إنكليزية، تضيفها هذه الميزة لنصوص اللغات الأخرى. احتياطا، احتفظ بنسخة سلفا." explanation="translation maintenance menu" max="38*7" max_local="38*7"/>
<string english="Full syncing EN→All:" translation="مزامنة شاملة من الانكليزية للكل:" explanation="translation maintenance menu. The following list of language files can be fully synced from English to all other languages by pressing this button - new strings will be inserted in all languages" max="40" max_local="40"/>
<string english="Syncing not supported:" translation="المزامنة غير مدعومة:" explanation="translation maintenance menu. The following list of language files are untouched by the sync button" max="40" max_local="40"/>
<string english="advanced options" translation="إعدادات متقدمة" explanation="menu option"/>
<string english="Advanced Options" translation="إعدادات متقدمة" explanation="title" max="20" max_local="20"/>
<string english="All other gameplay settings." translation="كل إعدادات اللعبة الأخرى" explanation="description for advanced options" max="38*5" max_local="38*5"/>
<string english="unfocus pause" translation="إزالة تركيز الراحة" explanation="menu option. Turns the pause screen on/off, which shows up when the window is unfocused/inactive (only one window is normally in focus/active at a time). Possible alternative: auto pause screen"/>
<string english="Unfocus Pause" translation="إزالة تركيز الراحة" explanation="title. Turns the pause screen on/off, which shows up when the window is unfocused/inactive (only one window is normally in focus/active at a time). Possible alternative: auto pause screen" max="20" max_local="20"/>
<string english="Toggle if the game will pause when the window is unfocused." translation="يحدد هل ستتوقف اللعبة لو زال التركيز عن النافذة." explanation="" max="38*3" max_local="38*3"/>
<string english="Unfocus pause is OFF" translation="تركيز الراحة معطل" explanation="Making another window active will not show the pause screen." max="38*2" max_local="38*2"/>
<string english="Unfocus pause is ON" translation="تركيز الراحة مفعل" explanation="Making another window active will show the pause screen." max="38*2" max_local="38*2"/>
<string english="unfocus audio pause" translation="الكتم عند زوال التركيز" explanation="menu option. Allows the user to choose whether the music should pause, or continue to play, when the window is unfocused/inactive (only one window is normally in focus/active at a time). Possible alternative: auto audio pause"/>
<string english="Unfocus Audio" translation="الكتم عند زوال التركيز" explanation="title. Allows the user to choose whether the music should pause, or continue to play, when the window is unfocused/inactive (only one window is normally in focus/active at a time). Possible alternative: auto audio pause" max="20" max_local="20"/>
<string english="Toggle if the audio will pause when the window is unfocused." translation="يحدد هل سيكتم صوت اللعبة لو زال التركيز عن النافذة." explanation="" max="38*3" max_local="38*3"/>
<string english="Unfocus audio pause is OFF" translation="الصمت عند زوال التركيز معطل" explanation="Making another window active will leave the music keep playing." max="38*2" max_local="38*2"/>
<string english="Unfocus audio pause is ON" translation="الصمت عند زوال التركيز مفعل" explanation="Making another window active will pause the music." max="38*2" max_local="38*2"/>
<string english="toggle in-game timer" translation="خيار إظهار المؤقت أثناء اللعبة" explanation="menu option"/>
<string english="In-Game Timer" translation="المؤقت أثناء اللعبة" explanation="title" max="20" max_local="20"/>
<string english="Toggle the in-game timer outside of time trials." translation="إظهار المؤقت في اللعبة حتى لغير التحدي ضد الساعة." explanation="" max="38*3" max_local="38*3"/>
<string english="In-Game Timer is ON" translation="المؤقت أثناء اللعبة مفعل" explanation="" max="38*2" max_local="38*2"/>
<string english="In-Game Timer is OFF" translation="المؤقت أثناء اللعبة معطل" explanation="" max="38*2" max_local="38*2"/>
<string english="english sprites" translation="الصور الإنكليزية" explanation="menu option"/>
<string english="English Sprites" translation="الصور الإنكليزية" explanation="title" max="20" max_local="20"/>
<string english="Show the original English word enemies regardless of your language setting." translation="تظهر صور الأعداء بنسختها الإنكليزية الأصلية، بصرف النظر عن اللغة المختارة." explanation="" max="38*3" max_local="38*3"/>
<string english="Sprites are currently translated" translation="صور الأعداء مترجمة الآن" explanation="" max="38*2" max_local="38*2"/>
<string english="Sprites are currently ALWAYS ENGLISH" translation="صور الأعداء دوما بالإنكليزية الآن" explanation="" max="38*2" max_local="38*2"/>
<string english="interact button" translation="زر التفاعل" explanation="menu option"/>
<string english="Interact Button" translation="زر التفاعل" explanation="title, lets the user change the key for interacting with objects or crewmates" max="20" max_local="20"/>
<string english="Toggle whether you interact with prompts using ENTER or E." translation="هل التفاعل مع النصوص بزر ENTER أو E." explanation="prompts: see the `Press {button} to talk to .../activate terminal/teleport` below" max="38*3" max_local="38*3"/>
<string english="E" translation="E" explanation="keyboard key E. Speedrunner options menu"/>
<string english="ENTER" translation="ENTER" explanation="keyboard key ENTER. Speedrunner options menu"/>
<string english="ESC" translation="ESC" explanation="keyboard key ESC"/>
<string english="TAB" translation="TAB" explanation="keyboard key TAB"/>
<string english="ACTION" translation="زر الفعل" explanation="the ACTION key is either the SPACE key, Z or V (this is explained on the title screen). It&apos;s used in strings like `Press ACTION to advance text`"/>
<string english="Interact button: {button}" translation="زر التفاعل: {button}" explanation="keyboard key (E or ENTER) is filled in for {button}. Speedrunner options menu" max="38*2" max_local="38*2"/>
<string english="fake load screen" translation="شاشة التحميل المزيفة" explanation="menu option"/>
<string english="Fake Load Screen" translation="شاشة التحميل المزيفة" explanation="title, allows the loading screen which counts to 100% to be turned off" max="20" max_local="20"/>
<string english="Disable the fake loading screen which appears on game launch." translation="تعطيل شاشة التحميل المزيفة التي تظهر قبل اللعبة." explanation="" max="38*3" max_local="38*3"/>
<string english="Fake loading screen is OFF" translation="شاشة التحميل المزيفة معطلة" explanation="allows the loading screen which counts to 100% to be turned off" max="38*2" max_local="38*2"/>
<string english="Fake loading screen is ON" translation="شاشة التحميل المزيفة تعمل" explanation="allows the loading screen which counts to 100% to be turned off" max="38*2" max_local="38*2"/>
<string english="room name background" translation="خلفية اسم الغرفة" explanation="menu option, background behind room names"/>
<string english="Room Name BG" translation="خلفية اسم الغرفة" explanation="title, background behind room names" max="20" max_local="20"/>
<string english="Lets you see through what is behind the name at the bottom of the screen." translation="وضوح رؤية ما وراء اسم الغرفة أسفل الشاشة." explanation="" max="38*3" max_local="38*3"/>
<string english="Room name background is TRANSLUCENT" translation="خلفية اسم الغرفة شفافة" explanation="" max="38*2" max_local="38*2"/>
<string english="Room name background is OPAQUE" translation="خلفية اسم الغرفة ليست شفافة" explanation="" max="38*2" max_local="38*2"/>
<string english="checkpoint saving" translation="تخزين نقطة الحفظ" explanation="menu option"/>
<string english="Checkpoint Saving" translation="تخزين نقطة الحفظ" explanation="title, makes checkpoints save the game" max="20" max_local="20"/>
<string english="Toggle if checkpoints should save the game." translation="تفعيل تخزين التقدم عند كل نقطة حفظ." explanation="" max="38*3" max_local="38*3"/>
<string english="Checkpoint saving is OFF" translation="نقاط الحفظ لا تخزن التقدم" explanation="makes checkpoints save the game" max="38*2" max_local="38*2"/>
<string english="Checkpoint saving is ON" translation="نقاط الحفظ تخزن التقدم" explanation="makes checkpoints save the game" max="38*2" max_local="38*2"/>
<string english="speedrun options" translation="إعدادات التختيم السريع" explanation="menu option"/>
<string english="Speedrunner Options" translation="إعدادات التختيم السريع" explanation="title" max="20" max_local="20"/>
<string english="Access some advanced settings that might be of interest to speedrunners." translation="دخول إعدادات متقدمة قد تحظى باهتمام
من يختمون الألعاب بسرعة." explanation="description for speedrunner options" max="38*5" max_local="38*5"/>
<string english="glitchrunner mode" translation="إعدادات صائد العيوب" explanation="menu option, a glitchrunner is a speedrunner who takes advantage of glitches to run through the game faster"/>
<string english="Glitchrunner Mode" translation="إعدادات صائد العيوب" explanation="title, a glitchrunner is a speedrunner who takes advantage of glitches to run through the game faster" max="20" max_local="20"/>
<string english="Re-enable glitches that existed in previous versions of the game." translation="صائد العيوب يستغلها ليختم اللعبة بسرعة. هذا الوضع يعيد تفعيل عيوب برمجية من إصدارات سابقة سبق إصلاحها." explanation="glitchrunner mode" max="38*3" max_local="38*3"/>
<string english="Glitchrunner mode is OFF" translation="وضع صائد العيوب السريع معطل." explanation="" max="38*2" max_local="38*2"/>
<string english="Glitchrunner mode is {version}" translation="وضع صائد العيوب السريع مفعل." explanation="a version number is filled in for {version}, such as 2.0 or 2.2" max="38*2" max_local="38*2"/>
<string english="Select a new glitchrunner version below." translation="يرجى اختيار إصدار جديد لصائد العيوب السريع." explanation="" max="38*3" max_local="38*3"/>
<string english="none" translation="بدون" explanation="menu option, do not emulate any older version"/>
<string english="2.0" translation="2.0" explanation="VVVVVV version number for glitchrunner mode"/>
<string english="2.2" translation="2.2" explanation="VVVVVV version number for glitchrunner mode"/>
<string english="input delay" translation="تأجيل الضغطة" explanation="menu option, enable 1 frame of delay after pressing input"/>
<string english="Input Delay" translation="تأجيل الضغطة" explanation="title, enable 1 frame of delay after pressing input" max="20" max_local="20"/>
<string english="Re-enable the 1-frame input delay from previous versions of the game." translation="إرجاع تأجيل الضغطة بإطار واحد كما كان الحال في تحديثات اللعبة السابقة" explanation="input delay" max="38*3" max_local="38*3"/>
<string english="Input delay is ON" translation="تأجيل الضغطة يعمل" explanation="" max="38*2" max_local="38*2"/>
<string english="Input delay is OFF" translation="تأجيل الضغطة معطل" explanation="" max="38*2" max_local="38*2"/>
<string english="accessibility" translation="تسهيل الاستعمال" explanation="menu option"/>
<string english="Accessibility" translation="تسهيل الاستعمال" explanation="title" max="20" max_local="20"/>
<string english="Disable screen effects, enable slowdown modes or invincibility." translation="تعطيل بعض مؤثرات الشاشة، تفعيل أطوار لإبطاء اللعبة أو للحصانة من الأذى." explanation="" max="38*5" max_local="38*5"/>
<string english="animated backgrounds" translation="الخلفيات المتحركة" explanation="menu option"/>
<string english="Backgrounds" translation="الخلفيات" explanation="title" max="20" max_local="20"/>
<string english="Disable animated backgrounds in menus and during gameplay." translation="تعطيل الخلفيات المتحركة في القوائم وأثناء اللعب." explanation="" max="38*3" max_local="38*3"/>
<string english="Backgrounds are ON." translation="الخلفيات تعمل." explanation="" max="38*2" max_local="38*2"/>
<string english="Backgrounds are OFF." translation="الخلفيات معطلة." explanation="" max="38*2" max_local="38*2"/>
<string english="screen effects" translation="تأثيرات الشاشة" explanation="menu option"/>
<string english="Screen Effects" translation="تأثيرات الشاشة" explanation="title" max="20" max_local="20"/>
<string english="Disables screen shakes and flashes." translation="تعطيل مؤثرات ارتجاج الشاشة وومضات الضوء." explanation="" max="38*2" max_local="38*2"/>
<string english="Screen Effects are ON." translation="تأثيرات الشاشة تعمل." explanation="" max="38*3" max_local="38*3"/>
<string english="Screen Effects are OFF." translation="تأثيرات الشاشة معطلة." explanation="" max="38*3" max_local="38*3"/>
<string english="text outline" translation="برواز الحروف" explanation="menu option"/>
<string english="Text Outline" translation="برواز الحروف" explanation="title" max="20" max_local="20"/>
<string english="Disables outline on game text." translation="تعطيل البرواز الذي يحيط بالنصوص." explanation="" max="38*2" max_local="38*2"/>
<string english="Text outlines are ON." translation="برواز الحروف يعمل." explanation="" max="40" max_local="40"/>
<string english="Text outlines are OFF." translation="برواز الحروف معطل." explanation="" max="40" max_local="40"/>
<string english="invincibility" translation="حصانة" explanation="menu option"/>
<string english="Invincibility" translation="حصانة" explanation="title" max="20" max_local="20"/>
<string english="Explore the game freely without dying. (Can cause glitches.)" translation="للتجول بحرية في اللعبة بدون أن تموت. قد تظهر عيوب برمجية." explanation="invincibility mode" max="38*3" max_local="38*3"/>
<string english="Invincibility is ON." translation="الحصانة تعمل." explanation="" max="38*2" max_local="38*2"/>
<string english="Invincibility is OFF." translation="الحصانة معطلة." explanation="" max="38*2" max_local="38*2"/>
<string english="Are you sure you want to enable invincibility?" translation="ستفعل الحصانة من الأضرار.
أحقا قررت ذلك؟" explanation="" max="38*7" max_local="38*7"/>
<string english="no, return to options" translation="لا، أريد العودة للخيارات" explanation="menu option"/>
<string english="yes, enable" translation="نعم، أريد تفعيلها" explanation="menu option"/>
<string english="slowdown" translation="تبطئة اللعبة" explanation="menu option"/>
<string english="Slowdown" translation="تبطئة اللعبة" explanation="title" max="20" max_local="20"/>
<string english="Game Speed" translation="سرعة اللعبة" explanation="title" max="20" max_local="20"/>
<string english="Reduce the game speed." translation="خفض سرعة اللعبة." explanation="" max="38*2" max_local="38*2"/>
<string english="Select a new game speed below." translation="يمكنك اختيار سرعة لعبة جديدة." explanation="" max="38*2" max_local="38*2"/>
<string english="Game speed is normal." translation="سرعة اللعبة عادية." explanation="" max="38*2" max_local="38*2"/>
<string english="Game speed is at 80%" translation="سرعة اللعبة 80%." explanation="" max="38*2" max_local="38*2"/>
<string english="Game speed is at 60%" translation="سرعة اللعبة 60%." explanation="" max="38*2" max_local="38*2"/>
<string english="Game speed is at 40%" translation="سرعة اللعبة 40%." explanation="" max="38*2" max_local="38*2"/>
<string english="normal speed" translation="سرعة عادية" explanation="menu option"/>
<string english="80% speed" translation="سرعة 80%" explanation="menu option"/>
<string english="60% speed" translation="سرعة 60%" explanation="menu option"/>
<string english="40% speed" translation="سرعة 40%" explanation="menu option"/>
<string english="play intermission 1" translation="لعب وصلة الفاصل 1" explanation="menu option"/>
<string english="play intermission 2" translation="لعب وصلة الفاصل 2" explanation="menu option"/>
<string english="Who do you want to play the level with?" translation="مع من أردت لعب هذا المستوى؟" explanation="choose your NPC companion" max="38*8" max_local="38*8"/>
<string english="time trials" translation="تحدي ضد الساعة" explanation="menu option"/>
<string english="Time Trials" translation="تحدي ضد الساعة" explanation="title" max="20" max_local="20"/>
<string english="Replay any level in the game in a competitive time trial mode." translation="يمكنك إعادة أي مستوى في اللعبة في طور تنافسي ضد الساعة." explanation="" max="38*4" max_local="38*4"/>
<string english="Time Trials are not available with slowdown or invincibility." translation="تحدي ضد الساعة لا يتوفر مع الحصانة أو التبطئة." explanation="" max="38*3" max_local="38*3"/>
<string english="unlock time trials" translation="فتح تحدي ضد الساعة" explanation="menu option"/>
<string english="Unlock Time Trials" translation="فتح تحدي ضد الساعة" explanation="title" max="20" max_local="20"/>
<string english="You can unlock each time trial separately." translation="يمكنك فتح كل تحدي ضد الساعة على حدة." explanation="" max="38*5" max_local="38*5"/>
<string english="intermissions" translation="وصلات الفواصل" explanation="menu option"/>
<string english="Intermissions" translation="وصلات الفواصل" explanation="title" max="20" max_local="20"/>
<string english="Replay the intermission levels." translation="إعادة لعب مراحل وصلات الفواصل" explanation="" max="38*3" max_local="38*3"/>
<string english="unlock intermissions" translation="فتح وصلات الفواصل" explanation="menu option"/>
<string english="TO UNLOCK: Complete the intermission levels in-game." translation="الشرط: ختم مستويات وصلات الفواصل أثناء اللعب." explanation="" max="38*4" max_local="38*4"/>
<string english="no death mode" translation="تحدي بدون الموت" explanation="menu option"/>
<string english="No Death Mode" translation="تحدي بدون الموت" explanation="title" max="20" max_local="20"/>
<string english="Play the entire game without dying once." translation="تختيم اللعبة بأكملها دون الموت ولا مرة." explanation="" max="38*4" max_local="38*4"/>
<string english="No Death Mode is not available with slowdown or invincibility." translation="تحدي بدون الموت لا يتوفر مع الحصانة أو التبطئة." explanation="" max="38*3" max_local="38*3"/>
<string english="unlock no death mode" translation="فتح تحدي بدون الموت" explanation="menu option"/>
<string english="TO UNLOCK: Achieve an S-rank or above in at least 4 time trials." translation="الشرط: تحقيق الرتبة S أو ما فوق في 4 تحديات ضد الساعة على الأقل." explanation="ranks are B A S V, see below" max="38*3" max_local="38*3"/>
<string english="flip mode" translation="الوضع المعكوس" explanation="menu option, mirrors the entire game vertically"/>
<string english="Flip Mode" translation="الوضع المعكوس" explanation="title, mirrors the entire game vertically" max="20" max_local="20"/>
<string english="Flip the entire game vertically." translation="يعكس اللعبة بأكملها عموديا." explanation="" max="38*2" max_local="38*2"/>
<string english="Flip the entire game vertically. Compatible with other game modes." translation="يعكس اللعبة بأكملها عموديا. يتوافق مع أطوار اللعبة الأخرى." explanation="" max="38*4" max_local="38*4"/>
<string english="unlock flip mode" translation="فتح الوضع المعكوس" explanation="menu option"/>
<string english="Currently ENABLED!" translation="حاليا مفعل!" explanation="flip mode" max="38*3" max_local="38*3"/>
<string english="Currently Disabled." translation="حاليا معطل." explanation="flip mode" max="38*3" max_local="38*3"/>
<string english="TO UNLOCK: Complete the game." translation="الشرط: ختم اللعبة." explanation="" max="38*3" max_local="38*3"/>
<string english="Invincibility mode enabled" translation="فعلت وضع الحصانة" explanation="in-game message" max="39" max_local="39"/>
<string english="Glitchrunner mode enabled ({version})" translation="فعلت وضع صائد العيوب ({version})" explanation="in-game message" max="39" max_local="39"/>
<string english="Flip Mode enabled" translation="فعلت الوضع المعكوس" explanation="in-game message" max="39" max_local="39"/>
<string english="Are you sure you want to quit?" translation="هل قررت المغادرة حقا؟" explanation="quit the program" max="38*4" max_local="38*4"/>
<string english="GAME OVER" translation="انتهت اللعبة" explanation="bigger title" max="13" max_local="13"/>
<string english="You managed to reach:" translation="نجحت في وصول الغرفة:" explanation="you managed to reach the following room" max="40" max_local="40"/>
<string english="Keep trying! You&apos;ll get there!" translation="فلنواصل المحاولة! سندرك هدفنا!" explanation="player died before managing to save anybody" max="38*2" max_local="38*2"/>
<string english="Nice one!" translation="جميل!" explanation="player died after saving one crewmate" max="38*2" max_local="38*2"/>
<string english="Wow! Congratulations!" translation="واو! مبارك، تهانينا!" explanation="player died after saving two crewmates" max="38*2" max_local="38*2"/>
<string english="Incredible!" translation="شيء مذهل!" explanation="player died after saving three crewmates" max="38*2" max_local="38*2"/>
<string english="Unbelievable! Well done!" translation="لا أصدق! أحسنت صنيعا!" explanation="player died after saving four crewmates" max="38*2" max_local="38*2"/>
<string english="Er, how did you do that?" translation="هع، أنى لك هذا؟" explanation="player died even though they were finished, lol" max="38*2" max_local="38*2"/>
<string english="WOW" translation="واو!" explanation="even bigger title" max="10" max_local="10"/>
<string english="You rescued all the crewmates!" translation="أنقذت كل أفراد الطاقم!" explanation="" max="40" max_local="40"/>
<string english="A new trophy has been awarded and placed in the secret lab to acknowledge your achievement!" translation="أهديت جائزة جديدة ووضعت في المخبر السري إشادة بإنجازك!" explanation="" max="38*4" max_local="38*4"/>
<string english="[Trinkets found]" translation="[ التذكارات التي وجدتها ]" explanation="amount of shiny trinkets found" max="40" max_local="40"/>
<string english="[Number of Deaths]" translation="[ الميتات التي تكبدتها ]" explanation="" max="40" max_local="40"/>
<string english="[Time Taken]" translation="[ الوقت الذي استغرقته ]" explanation="stopwatch time" max="40" max_local="40"/>
<string english="Trinkets Found:" translation="التذكارات التي وجدتها:" explanation="game complete screen" max="22" max_local="22"/>
<string english="Game Time:" translation="وقت اللعب:" explanation="game complete screen" max="22" max_local="22"/>
<string english="Total Flips:" translation="مجموع العكسات:" explanation="game complete screen" max="22" max_local="22"/>
<string english="Total Deaths:" translation="مجموع الميتات:" explanation="game complete screen" max="22" max_local="22"/>
<string english="Results" translation="النتائج:" explanation="bigger title" max="13" max_local="13"/>
<string english="TIME TAKEN:" translation="الوقت المستغرق:" explanation="time the player took playing the level" max="32" max_local="32"/>
<string english="NUMBER OF DEATHS:" translation="عدد الميتات:" explanation="amount of times the player died" max="32" max_local="32"/>
<string english="SHINY TRINKETS:" translation="التذكارات اللماعات:" explanation="amount of trinkets collected" max="32" max_local="32"/>
<string english=" / " translation="/" explanation="inserted between two times, ex: 0:46.90 / 1:15.99. Time trial results"/>
<string english="{n_trinkets}/{max_trinkets}" translation="{n_trinkets}/{max_trinkets}" explanation="ex: 2/5"/>
<string english="{n_trinkets} of {max_trinkets}" translation="{n_trinkets} من أصل {max_trinkets}" explanation="ex: 2 of 5"/>
<string english="{n_trinkets|wordy} out of {max_trinkets|wordy}" translation="{n_trinkets|wordy} من أصل {max_trinkets|wordy}" explanation="ex: One out of Twenty, see numbers.xml. You can add |upper for an uppercase letter." max="34" max_local="34"/>
<string english="{savebox_n_trinkets|wordy}" translation="{savebox_n_trinkets|wordy}" explanation="trinket count in telesave/quicksave information box. You can add |upper for an uppercase letter."/>
<string english="{gamecomplete_n_trinkets|wordy}" translation="{gamecomplete_n_trinkets|wordy}" explanation="trinket count on Game Complete screen (after Trinkets Found:) You can add |upper for an uppercase letter."/>
<string english="+1 Rank!" translation="+1 للرتبة!" explanation="time trial rank was upgraded (B → A → S → V). B is minimum, which is purposefully high (see it as 7/10) - S is a popular rank above A in a lot of games, so VVVVVV added a rank above that." max="12" max_local="12"/>
<string english="Rank:" translation="الرتبة:" explanation="time trial rank" max="9" max_local="9"/>
<string english="B" translation="B" explanation="time trial rank" max="5" max_local="5"/>
<string english="A" translation="A" explanation="time trial rank" max="5" max_local="5"/>
<string english="S" translation="S" explanation="time trial rank" max="5" max_local="5"/>
<string english="V" translation="V" explanation="time trial rank" max="5" max_local="5"/>
<string english="space station 1" translation="المحطة الفضائية 1" explanation="area name as menu option"/>
<string english="Space Station 1" translation="المحطة الفضائية 1" explanation="area name as title" max="20" max_local="20"/>
<string english="space station 2" translation="المحطة الفضائية 2" explanation="area name as menu option"/>
<string english="Space Station 2" translation="المحطة الفضائية 2" explanation="area name as title" max="20" max_local="20"/>
<string english="the laboratory" translation="المخبر" explanation="area name as menu option"/>
<string english="The Laboratory" translation="المخبر" explanation="area name as title" max="20" max_local="20"/>
<string english="the tower" translation="البرج" explanation="area name as menu option"/>
<string english="The Tower" translation="البرج" explanation="area name as title" max="20" max_local="20"/>
<string english="the warp zone" translation="منطقة التنقيل" explanation="area name as menu option"/>
<string english="The Warp Zone" translation="منطقة التنقيل" explanation="area name as title" max="20" max_local="20"/>
<string english="the final level" translation="المستوى الأخير" explanation="area name as menu option"/>
<string english="The Final Level" translation="المستوى الأخير" explanation="area name as title" max="20" max_local="20"/>
<string english="intermission 1" translation="وصلة الفاصل 1" explanation="area name as menu option"/>
<string english="Intermission 1" translation="وصلة الفاصل 1" explanation="area name as title" max="20" max_local="20"/>
<string english="intermission 2" translation="وصلة الفاصل 2" explanation="area name as menu option"/>
<string english="Intermission 2" translation="وصلة الفاصل 2" explanation="area name as title" max="20" max_local="20"/>
<string english="???" translation="؟؟؟" explanation="locked area" max="20" max_local="20"/>
<string english="Not yet attempted" translation="لم تجرب من قبل" explanation="" max="38*2" max_local="38*2"/>
<string english="TO UNLOCK:" translation="شرط الفتح:" explanation="followed by `Rescue XX`/`Complete the game`, and then `Find XX trinkets`" max="40" max_local="40"/>
<string english="Rescue Violet" translation="إنقاذ فايولت" explanation="" max="40" max_local="40"/>
<string english="Rescue Victoria" translation="إنقاذ فيكتوريا" explanation="" max="40" max_local="40"/>
<string english="Rescue Vermilion" translation="إنقاذ فارميون" explanation="" max="40" max_local="40"/>
<string english="Rescue Vitellary" translation="إنقاذ فيتلاري" explanation="" max="40" max_local="40"/>
<string english="Rescue Verdigris" translation="إنقاذ فارديغري" explanation="" max="40" max_local="40"/>
<string english="Complete the game" translation="ختم اللعبة" case="0" explanation="" max="40" max_local="40"/>
<string english="Find three trinkets" translation="إيجاد ثلاث تذكارات" explanation="" max="40" max_local="40"/>
<string english="Find six trinkets" translation="إيجاد ست تذكارات" explanation="" max="40" max_local="40"/>
<string english="Find nine trinkets" translation="إيجاد تسع تذكارات" explanation="" max="40" max_local="40"/>
<string english="Find twelve trinkets" translation="إيجاد إثنتا عشر تذكار" explanation="" max="40" max_local="40"/>
<string english="Find fifteen trinkets" translation="إيجاد خمسة عشر تذكار" explanation="" max="40" max_local="40"/>
<string english="Find eighteen trinkets" translation="إيجاد ثمانية عشر تذكار" explanation="" max="40" max_local="40"/>
<string english="RECORDS" translation="السجلات" explanation="followed by a list of personal bests for TIME, SHINY and LIVES. So `records` as in `world records`, except for yourself" max="15" max_local="15"/>
<string english="TIME" translation="الوقت" explanation="record time" max="8" max_local="8"/>
<string english="SHINY" translation="اللماعات" explanation="record number of trinkets" max="8" max_local="8"/>
<string english="LIVES" translation="الحيوات" explanation="record lowest number of deaths" max="8" max_local="8"/>
<string english="PAR TIME" translation="وقت الهدف" explanation="followed by the goal time for this time trial" max="14" max_local="14"/>
<string english="TIME:" translation="الوقت:" explanation="in time trial. Stopwatch time, not too long"/>
<string english="DEATH:" translation="الميتات:" explanation="in time trial. Number of times player died, not too long"/>
<string english="SHINY:" translation="اللماعات:" explanation="in time trial. Number of shiny trinkets collected, not too long"/>
<string english="PAR TIME:" translation="وقت الهدف:" explanation="in time trial. Goal time for time trial"/>
<string english="BEST RANK" translation="أفضل رتبة" explanation="ranks are B A S V" max="17" max_local="17"/>
<string english="GO!" translation="هيا!" explanation="3, 2, 1, GO!" max="13" max_local="13"/>
<string english="Go!" translation="هيا!" explanation="3, 2, 1, Go!" max="10" max_local="10"/>
<string english="Congratulations!" translation="تهانينا!" explanation="title" max="20" max_local="20"/>
<string english="Your save files have been updated." translation="حدثت بيانات تخزيناتك." explanation="player completed game" max="38*6" max_local="38*6"/>
<string english="If you want to keep exploring the game, select CONTINUE from the play menu." translation="لو شئت مواصلة استكشاف اللعبة، فعليك بخيار المواصلة من قائمة اللعب." explanation="" max="38*9" max_local="38*9"/>
<string english="You have unlocked a new Time Trial." translation="فتحت تحديا من جملة التحديات ضد الساعة." explanation="" max="38*7" max_local="38*7"/>
<string english="You have unlocked some new Time Trials." translation="فتحت تحديا جديدا من جملة التحديات ضد الساعة." explanation="" max="38*7" max_local="38*7"/>
<string english="You have unlocked No Death Mode." translation="فتحت تحدي بدون الموت." explanation="" max="38*7" max_local="38*7"/>
<string english="You have unlocked Flip Mode." translation="فتحت الوضع المعكوس." explanation="" max="38*7" max_local="38*7"/>
<string english="You have unlocked the intermission levels." translation="فتحت مستويات وصلات الفواصل." explanation="" max="38*7" max_local="38*7"/>
<string english="play a level" translation="لعب مرحلة" explanation="menu option"/>
<string english="level editor" translation="محرر المراحل" explanation="menu option"/>
<string english="open level folder" translation="فتح مجلد المراحل" explanation="menu option. Button that opens the folder with level files in a file explorer"/>
<string english="show level folder path" translation="إظهار مسار مجلد المراحل" explanation="menu option"/>
<string english="return" translation="عودة" explanation="menu option"/>
<string english="return to levels" translation="عودة للمراحل" explanation="menu option"/>
<string english="no, don&apos;t show me" translation="لا، لا ترني" explanation="menu option"/>
<string english="yes, reveal the path" translation="أجل، اكشف عن المسار" explanation="menu option. Path to the levels folder"/>
<string english="return to play menu" translation="عودة لقائمة اللعب" explanation="menu option" max="36" max_local="36"/>
<string english="try again" translation="محاولة جديدة" explanation="menu option, retry time trial" max="36" max_local="36"/>
<string english="ok" translation="موافقة" explanation="button, which is a menu option, so lowercase"/>
<string english="next page" translation="الصفحة التالية" explanation="menu option"/>
<string english="previous page" translation="الصفحة السابقة" explanation="menu option"/>
<string english="first page" translation="الصفحة الأولى" explanation="menu option"/>
<string english="last page" translation="الصفحة الأخيرة" explanation="menu option"/>
<string english="silence" translation="تجاهل" explanation="menu option, silence error message - do not show this message again"/>
<string english="continue from save" translation="المواصلة من التخزينة" explanation="menu option"/>
<string english="start from beginning" translation="البدء من البداية" explanation="menu option"/>
<string english="delete save" translation="حذف التخزينة" explanation="menu option"/>
<string english="back to levels" translation="العودة للمستويات" explanation="menu option"/>
<string english="The level editor is not currently supported on Steam Deck, as it requires a keyboard and mouse to use." translation="محرر المستويات يحتاج لوح مفاتيح وفأرة. لهذا السبب، ليس مدعوما على منصة Steam Deck." explanation="" max="38*5" max_local="38*5"/>
<string english="The level editor is not currently supported on this device, as it requires a keyboard and mouse to use." translation="محرر المستويات يحتاج لوح مفاتيح وفأرة. لهذا السبب، ليس مدعوما على جهازك." explanation="" max="38*5" max_local="38*5"/>
<string english="To install new player levels, copy the .vvvvvv files to the levels folder." translation="لتنصيب مراحل اللاعبين الجديدة، تنسخ ملفات .vvvvvv إلى مجلد levels." explanation="" max="38*5" max_local="38*5"/>
<string english="Are you sure you want to show the levels path? This may reveal sensitive information if you are streaming." translation="قبل إظهار مسار المستويات، يرجى التأكد لتجنب افتضاح أي معلومات حساسة أثناء البثوث. هل نظهره؟" explanation="" max="38*4" max_local="38*4"/>
<string english="The levels path is:" translation="مسار مجلد levels للمستويات:" explanation="" max="40" max_local="40"/>
<string english="[ Press {button} to Start ]" translation="[ نضغط {button} للبدء]" explanation="title screen. Expect `ACTION`" max="38*2" max_local="38*2"/>
<string english="ACTION = Space, Z, or V" translation="زر الفعل = المسافة أو Z أو V" explanation="title screen" max="38*3" max_local="38*3"/>
<string english="[Press {button} to return to editor]" translation="[نضغط {button} للعودة للمحرر]" explanation="`to editor` is sorta redundant" max="40" max_local="40"/>
<string english="- Press {button} to advance text -" translation="- نضغط {button} للتقدم في النص -" explanation="to dismiss a textbox. Expect `ACTION`" max="40" max_local="40"/>
<string english="Press {button} to continue" translation="نضغط {button} للمواصلة" explanation="Expect `ACTION`" max="34" max_local="34"/>
<string english="[Press {button} to unfreeze gameplay]" translation="[نضغط {button} لوقف تجميد اللعب العادي]" explanation="in level debugger: {button} makes everything start moving as normal. Limit is treacherous, expect TAB for {button}. Frozen is the initial state, so this is the first string of the two that users will see!" max="39" max_local="39"/>
<string english="[Press {button} to freeze gameplay]" translation="[نضغط {button} لتجميد اللعب العادي]" explanation="in level debugger: {button} makes everything stop moving. Limit is treacherous, expect TAB for {button}." max="39" max_local="39"/>
<string english="Current Time" translation="وقتك الحالي" explanation="super gravitron, stopwatch time" max="20" max_local="20"/>
<string english="Best Time" translation="أفضل وقت" explanation="super gravitron, best stopwatch time" max="20" max_local="20"/>
<string english="Next Trophy at 5 seconds" translation="الجائزة القادمة بعد 5 ثوان" explanation="" max="38*2" max_local="38*2"/>
<string english="Next Trophy at 10 seconds" translation="الجائزة القادمة بعد 10 ثوان" explanation="" max="38*2" max_local="38*2"/>
<string english="Next Trophy at 15 seconds" translation="الجائزة القادمة بعد 15 ثانية" explanation="" max="38*2" max_local="38*2"/>
<string english="Next Trophy at 20 seconds" translation="الجائزة القادمة بعد 20 ثانية" explanation="" max="38*2" max_local="38*2"/>
<string english="Next Trophy at 30 seconds" translation="الجائزة القادمة بعد 30 ثانية" explanation="" max="38*2" max_local="38*2"/>
<string english="Next Trophy at 1 minute" translation="الجائزة القادمة بعد دقيقة" explanation="" max="38*2" max_local="38*2"/>
<string english="All Trophies collected!" translation="كل الجوائز جمعت!" explanation="" max="38*2" max_local="38*2"/>
<string english="New Record!" translation="رقم قياسي جديد!" explanation="" max="20" max_local="20"/>
<string english="New Trophy!" translation="جائزة جديدة!" explanation="" max="20" max_local="20"/>
<string english="[Press {button} to stop]" translation="[نضغط {button} للتوقف]" explanation="stop super gravitron" max="40" max_local="40"/>
<string english="SUPER GRAVITRON" translation="أتون الجاذبية الخارق" explanation="" max="20" max_local="20"/>
<string english="SUPER GRAVITRON HIGHSCORE" translation="أفضل نتيجة لأتون الجاذبية الخارق" explanation="" max="38*4" max_local="38*4"/>
<string english="MAP" translation="خريطة" explanation="in-game menu" max="8" max_local="8"/>
<string english="GRAV" translation="جاذبية" explanation="in-game menu, Gravitron" max="8" max_local="8"/>
<string english="SHIP" translation="سفينة" explanation="in-game menu, spaceship" max="8" max_local="8"/>
<string english="CREW" translation="طاقم" explanation="in-game menu" max="8" max_local="8"/>
<string english="STATS" translation="إحصاء" explanation="in-game menu" max="8" max_local="8"/>
<string english="SAVE" translation="حفظ" explanation="in-game menu" max="8" max_local="8"/>
<string english="[ PAUSE ]" translation="[ راحة ]" explanation="in-game menu" max="40" max_local="40"/>
<string english="[ QUIT ]" translation="[ خروج ]" explanation="in-game menu" max="40" max_local="40"/>
<string english="[ GRAVITRON ]" translation="[ أتون جاذبية ]" explanation="in-game menu" max="40" max_local="40"/>
<string english="NO SIGNAL" translation="لا إشارة" explanation="map screen. So like a TV/computer monitor" max="29" max_local="29"/>
<string english="Press {button} to warp to the ship." translation="للتنقيل إلى السفينة، نضغط {button}." explanation="spaceship. Warp = teleport. Expect `ACTION`" max="38*7" max_local="38*7"/>
<string english="Missing..." translation="مفقود..." case="1" explanation="this male crew member is missing" max="15" max_local="15"/>
<string english="Missing..." translation="مفقودة..." case="2" explanation="this female crew member is missing" max="15" max_local="15"/>
<string english="Missing..." translation="أين أنت..." case="3" explanation="Viridian is missing (final level). You could even fill in something like `Uh-oh...` here if you really have to specify gender otherwise - everyone else is rescued, but the player is missing" max="15" max_local="15"/>
<string english="Rescued!" translation="أنقذته!" case="1" explanation="this male crew member is not missing anymore" max="15" max_local="15"/>
<string english="Rescued!" translation="أنقذتها!" case="2" explanation="this female crew member is not missing anymore" max="15" max_local="15"/>
<string english="(that&apos;s you!)" translation="(ها أنت!)" explanation="this crew member is you (Viridian)" max="15" max_local="15"/>
<string english="Cannot Save in Level Replay" translation="لا يحق الحفظ عند مشاهدة المستوى" explanation="in-game menu" max="38*7" max_local="38*7"/>
<string english="Cannot Save in No Death Mode" translation="لا يحق الحفظ في تحدي بدون الموت" explanation="in-game menu" max="38*7" max_local="38*7"/>
<string english="How&apos;d you get here?" translation="كيف وصلت هنا؟" explanation="in-game menu" max="38*7" max_local="38*7"/>
<string english="Cannot Save in Secret Lab" translation="لا يحق الحفظ في المخبر السري" explanation="in-game menu" max="38*7" max_local="38*7"/>
<string english="ERROR: Could not save game!" translation="خطأ: فشل حفظ تقدم اللعبة!" explanation="in-game menu" max="34*2" max_local="34*2"/>
<string english="ERROR: Could not save settings file!" translation="خطأ: فشل حفظ ملف الإعدادات!" explanation="" max="38*2" max_local="38*2"/>
<string english="Game saved ok!" translation="حفظت اللعبة على خير!" explanation="in-game menu" max="38*2" max_local="38*2"/>
<string english="[Press {button} to save your game]" translation="[نضغط {button} لحفظ لعبتك]" explanation="in-game menu. Expect `ACTION`" max="40" max_local="40"/>
<string english="(Note: The game is autosaved at every teleporter.)" translation="(اللعبة تحفظ تلقائيا عند كل آلة تنقيل.)" explanation="in-game menu" max="38*3" max_local="38*3"/>
<string english="Last Save:" translation="آخر تخزينة:" explanation="in-game menu" max="40" max_local="40"/>
<string english="Return to main menu?" translation="هل بودك العودة للقائمة الرئيسية؟" explanation="in-game menu" max="38*4" max_local="38*4"/>
<string english="Do you want to quit? You will lose any unsaved progress." translation="هل قررت المغادرة؟ قد يضيع
أي تقدم لم يحفظ بعد." explanation="in-game menu" max="38*4" max_local="38*4"/>
<string english="Do you want to return to the secret laboratory?" translation="هل بودك العودة للمخبر السري؟" explanation="in-game menu" max="38*4" max_local="38*4"/>
<string english="no, keep playing" translation="لا، سأواصل اللعب" explanation="in-game menu option" max="28" max_local="28"/>
<string english="[ NO, KEEP PLAYING ]" translation="[ لا، سأواصل اللعب ]" explanation="in-game menu option" max="32" max_local="32"/>
<string english="yes, quit to menu" translation="نعم، سأغادر" explanation="in-game menu option" max="24" max_local="24"/>
<string english="[ YES, QUIT TO MENU ]" translation="[ نعم، سأغادر ]" explanation="in-game menu option" max="28" max_local="28"/>
<string english="yes, return" translation="نعم، سأعود" explanation="in-game menu option" max="24" max_local="24"/>
<string english="[ YES, RETURN ]" translation="[ نعم، سأعود ]" explanation="in-game menu option" max="28" max_local="28"/>
<string english="no, return" translation="لا، سأعود" explanation="quit program menu option"/>
<string english="yes, quit" translation="نعم، سأخرج" explanation="quit program menu option"/>
<string english="return to game" translation="العودة للعبة" explanation="pause menu option" max="27" max_local="27"/>
<string english="quit to menu" translation="الخروج للقائمة" explanation="pause menu option" max="19" max_local="19"/>
<string english="Press Left/Right to choose a Teleporter" translation="نضغط يسار/يمين لاختيار آلة تنقيل" explanation="tight fit, so maybe `Left/Right: choose teleporter`, or use ←/→" max="40" max_local="40"/>
<string english="Press {button} to Teleport" translation="نضغط {button} للتنقل" explanation="keyboard key (E or ENTER) or controller button glyph is filled in for {button}. max is when displayed" max="40" max_local="40"/>
<string english="- Press {button} to Teleport -" translation="- نضغط {button} للتنقل -" explanation="keyboard key (E or ENTER) or controller button glyph is filled in for {button}" max="40" max_local="40"/>
<string english="Press {button} to explode" translation="نضغط {button} للتفجر" explanation="keyboard key (E or ENTER) or controller button glyph is filled in for {button}. max is when displayed. This was for testing, but people sometimes find it in custom levels" max="37" max_local="37"/>
<string english="Press {button} to talk to Violet" translation="نضغط {button} للحديث مع فايولت" explanation="keyboard key (E or ENTER) or controller button glyph is filled in for {button}. max is when displayed" max="37" max_local="37"/>
<string english="Press {button} to talk to Vitellary" translation="نضغط {button} للحديث مع فيتيلاري" explanation="keyboard key (E or ENTER) or controller button glyph is filled in for {button}. max is when displayed" max="37" max_local="37"/>
<string english="Press {button} to talk to Vermilion" translation="نضغط {button} للحديث مع فارميليون" explanation="keyboard key (E or ENTER) or controller button glyph is filled in for {button}. max is when displayed" max="37" max_local="37"/>
<string english="Press {button} to talk to Verdigris" translation="نضغط {button} للحديث مع فارديغري" explanation="keyboard key (E or ENTER) or controller button glyph is filled in for {button}. max is when displayed" max="37" max_local="37"/>
<string english="Press {button} to talk to Victoria" translation="نضغط {button} للحديث مع فيكتوريا" explanation="keyboard key (E or ENTER) or controller button glyph is filled in for {button}. max is when displayed" max="37" max_local="37"/>
<string english="Press {button} to activate terminal" translation="نضغط {button} لتفعيل الحاسب" explanation="keyboard key (E or ENTER) or controller button glyph is filled in for {button}. max is when displayed" max="37" max_local="37"/>
<string english="Press {button} to activate terminals" translation="نضغط {button} لتفعيل الحواسيب" explanation="keyboard key (E or ENTER) or controller button glyph is filled in for {button}. max is when displayed. there are 3 next to each other in the ship" max="37" max_local="37"/>
<string english="Press {button} to interact" translation="نضغط {button} للتفاعل" explanation="keyboard key (E or ENTER) or controller button glyph is filled in for {button}. max is when displayed" max="37" max_local="37"/>
<string english="- Press {button} to skip -" translation="- نضغط {button} للتجاوز -" explanation="keyboard key (ENTER) or controller button glyph is filled in for {button}. max is when displayed. This prompt is for skipping cutscenes" max="40" max_local="40"/>
<string english="Passion for Exploring" translation="Passion for Exploring" explanation="jukebox prompt. song name should probably not be translated" max="37*2" max_local="37*2"/>
<string english="Pushing Onwards" translation="Pushing Onwards" explanation="jukebox prompt. song name should probably not be translated" max="37*2" max_local="37*2"/>
<string english="Positive Force" translation="Positive Force" explanation="jukebox prompt. song name should probably not be translated" max="37*2" max_local="37*2"/>
<string english="Presenting VVVVVV" translation="Presenting VVVVVV" explanation="jukebox prompt. song name should probably not be translated" max="37*2" max_local="37*2"/>
<string english="Potential for Anything" translation="Potential for Anything" explanation="jukebox prompt. song name should probably not be translated" max="37*2" max_local="37*2"/>
<string english="Predestined Fate" translation="Predestined Fate" explanation="jukebox prompt. song name should probably not be translated" max="37*2" max_local="37*2"/>
<string english="Pipe Dream" translation="Pipe Dream" explanation="jukebox prompt. song name should probably not be translated" max="37*2" max_local="37*2"/>
<string english="Popular Potpourri" translation="Popular Potpourri" explanation="jukebox prompt. song name should probably not be translated" max="37*2" max_local="37*2"/>
<string english="Pressure Cooker" translation="Pressure Cooker" explanation="jukebox prompt. song name should probably not be translated" max="37*2" max_local="37*2"/>
<string english="ecroF evitisoP" translation="ecroF evitisoP" explanation="jukebox prompt. song name should probably not be translated" max="37*2" max_local="37*2"/>
<string english="Map Settings" translation="إعدادات الغرفة" explanation="title, editor, Level Settings, map is kinda inconsistent with everything else" max="20" max_local="20"/>
<string english="edit scripts" translation="تحرير السكربتات" explanation="level editor menu option"/>
<string english="change music" translation="تغيير الموسيقى" explanation="level editor menu option"/>
<string english="editor ghosts" translation="أشباح المحرر" explanation="level editor menu option. Toggles option to show a repetition of the player&apos;s path after playtesting"/>
<string english="Editor ghost trail is OFF" translation="مسار شبح المحرر معطل" explanation="level editor. Repetition of the player&apos;s path after playtesting is disabled" max="40" max_local="40"/>
<string english="Editor ghost trail is ON" translation="مسار شبح المحرر مفعل" explanation="level editor. Repetition of the player&apos;s path after playtesting is enabled" max="40" max_local="40"/>
<string english="load level" translation="فتح المستوى" explanation="level editor menu option"/>
<string english="save level" translation="حفظ المستوى" explanation="level editor menu option"/>
<string english="quit to main menu" translation="الخروج للقائمة الرئيسية" explanation="level editor menu option" max="22" max_local="22"/>
<string english="change name" translation="تبديل الاسم" explanation="level editor menu option"/>
<string english="change author" translation="تبديل المؤلف" explanation="level editor menu option"/>
<string english="change description" translation="تبديل الوصف" explanation="level editor menu option"/>
<string english="change website" translation="تبديل موقع النت" explanation="level editor menu option"/>
<string english="change font" translation="تبديل الخطوط" explanation="level editor menu option"/>
<string english="Level Font" translation="خط نص المستوى" explanation="title, editor, font that a custom level will show up in. You can select a language name here (like Chinese or Japanese which have different fonts, or `other`)" max="20" max_local="20"/>
<string english="Select the language in which the text in this level is written." translation="اختيار اللغة التي كتب بها نص هذا المستوى." explanation="" max="38*3" max_local="38*3"/>
<string english="Font: " translation="الخط: " explanation="level options, followed by name of font (mind the space)" max="15" max_local="15"/>
<string english="Map Music" translation="موسيقى الغرفة" explanation="title, editor, music that starts playing when a level is started. Can be changed with scripting later, so this is really just initial music" max="20" max_local="20"/>
<string english="Current map music:" translation="موسيقى الغرفة الحالية:" explanation="editor, followed by the number and name of a song, or `No background music`. Can be changed with scripting later, so this is really just initial music" max="38*2" max_local="38*2"/>
<string english="No background music" translation="لا موسيقى" explanation="editor, level starts with no song playing" max="38*2" max_local="38*2"/>
<string english="1: Pushing Onwards" translation="1: Pushing Onwards" explanation="editor, song name should probably not be translated" max="38*2" max_local="38*2"/>
<string english="2: Positive Force" translation="2: Positive Force" explanation="editor, song name should probably not be translated" max="38*2" max_local="38*2"/>
<string english="3: Potential for Anything" translation="3: Potential for Anything" explanation="editor, song name should probably not be translated" max="38*2" max_local="38*2"/>
<string english="4: Passion for Exploring" translation="4: Passion for Exploring" explanation="editor, song name should probably not be translated" max="38*2" max_local="38*2"/>
<string english="N/A: Pause" translation="N/A: Pause" explanation="editor, song name should probably not be translated" max="38*2" max_local="38*2"/>
<string english="5: Presenting VVVVVV" translation="5: Presenting VVVVVV" explanation="editor, song name should probably not be translated" max="38*2" max_local="38*2"/>
<string english="N/A: Plenary" translation="N/A: Plenary" explanation="editor, song name should probably not be translated" max="38*2" max_local="38*2"/>
<string english="6: Predestined Fate" translation="6: Predestined Fate" explanation="editor, song name should probably not be translated" max="38*2" max_local="38*2"/>
<string english="N/A: ecroF evitisoP" translation="N/A: ecroF evitisoP" explanation="editor, song name should probably not be translated" max="38*2" max_local="38*2"/>
<string english="7: Popular Potpourri" translation="7: Popular Potpourri" explanation="editor, song name should probably not be translated" max="38*2" max_local="38*2"/>
<string english="8: Pipe Dream" translation="8: Pipe Dream" explanation="editor, song name should probably not be translated" max="38*2" max_local="38*2"/>
<string english="9: Pressure Cooker" translation="9: Pressure Cooker" explanation="editor, song name should probably not be translated" max="38*2" max_local="38*2"/>
<string english="10: Paced Energy" translation="10: Paced Energy" explanation="editor, song name should probably not be translated" max="38*2" max_local="38*2"/>
<string english="11: Piercing the Sky" translation="11: Piercing the Sky" explanation="editor, song name should probably not be translated" max="38*2" max_local="38*2"/>
<string english="N/A: Predestined Fate Remix" translation="N/A: Predestined Fate Remix" explanation="editor, song name should probably not be translated" max="38*2" max_local="38*2"/>
<string english="?: something else" translation="?: شيء آخر" explanation="editor, song was not recognized" max="38*2" max_local="38*2"/>
<string english="next song" translation="اللحن التالي" explanation="level editor menu option"/>
<string english="previous song" translation="اللحن السابق" explanation="level editor menu option"/>
<string english="back" translation="عودة" explanation="level editor menu option"/>
<string english="Save before quitting?" translation="هل تود الحفظ قبل الخروج؟" explanation="level editor" max="38*4" max_local="38*4"/>
<string english="yes, save and quit" translation="أجل، حفظ ثم خروج" explanation="level editor menu option"/>
<string english="no, quit without saving" translation="لا، خروج بدون حفظ" explanation="level editor menu option"/>
<string english="return to editor" translation="عودة للمحرر" explanation="level editor menu option"/>
<string english="Untitled Level" translation="مستوى بلا عنوان" explanation="" max="20" max_local="20"/>
<string english="Unknown" translation="مجهول" explanation="by Unknown [author]"/>
<string english="Tile:" translation="خلية: " explanation="editor, selected " max="34" max_local="34"/>
<string english="SCRIPT BOX: Click on the first corner" translation="هامش السكربت: انقر الزاوية الأولى للصندوق" explanation="editor, a script box is an invisible box that runs a script when touched" max="39*3" max_local="39*3"/>
<string english="SCRIPT BOX: Click on the last corner" translation="هامش السكربت: انقر الزاوية المقابلة للصندوق" explanation="editor, a script box is an invisible box that runs a script when touched" max="39*3" max_local="39*3"/>
<string english="ENEMY BOUNDS: Click on the first corner" translation="هامش الأعداء: انقر الزاوية الأولى للصندوق" explanation="editor, invisible box which enemies always stay inside of" max="39*3" max_local="39*3"/>
<string english="ENEMY BOUNDS: Click on the last corner" translation="هامش الأعداء: انقر الزاوية المقابلة للصندوق" explanation="editor, invisible box which enemies always stay inside of" max="39*3" max_local="39*3"/>
<string english="PLATFORM BOUNDS: Click on the first corner" translation="هامش المنصات: انقر الزاوية الأولى للصندوق" explanation="editor, invisible box which moving platforms always stay inside of" max="39*3" max_local="39*3"/>
<string english="PLATFORM BOUNDS: Click on the last corner" translation="هامش المنصات: انقر الزاوية المقابلة للصندوق" explanation="editor, invisible box which moving platforms always stay inside of" max="39*3" max_local="39*3"/>
<string english="Click on the first corner" translation="انقر الزاوية الأولى" explanation="" max="39*3" max_local="39*3"/>
<string english="Click on the last corner" translation="انقر الزاوية الأخيرة" explanation="" max="39*3" max_local="39*3"/>
<string english="**** VVVVVV SCRIPT EDITOR ****" translation="**** محرر سكربتات VVVVVV ****" explanation="supposed to look like a Commodore 64 screen" max="36" max_local="36"/>
<string english="PRESS ESC TO RETURN TO MENU" translation="اضغط ESC للعودة للقائمة" explanation="Commodore 64-style script editor, TO MENU is redundant" max="36" max_local="36"/>
<string english="NO SCRIPT IDS FOUND" translation="لم نجد معرف ID للسكربتات" explanation="Commodore 64-style script editor, basically NO SCRIPTS FOUND" max="36" max_local="36"/>
<string english="CREATE A SCRIPT WITH EITHER THE TERMINAL OR SCRIPT BOX TOOLS" translation="أنشئ سكربتا إما بالواجهة النصية أو بأدوات السكربتات" explanation="Commodore 64-style script editor" max="36*5" max_local="36*5"/>
<string english="CURRENT SCRIPT: {name}" translation="السكربت الحالي: {name}" explanation="Commodore 64-style script editor. Char limit is soft, but the longer this is, the more often users&quot; script names run offscreen. Consider SCRIPT: instead" max="20" max_local="20"/>
<string english="Left click to place warp destination" translation="نقرة يسرى بالفأرة لوضع وجهة التنقيل" explanation="warp token: small teleporter with entrance and destination" max="39" max_local="39"/>
<string english="Right click to cancel" translation="نقرة يمنى بالفأرة للتراجع" explanation="" max="39" max_local="39"/>
<string english="{button1} and {button2} keys change tool" translation="الأزرار {button1} و {button2} لتغيير الأداة" explanation="These keys can be used to switch between tools" max="36" max_local="36"/>
<string english="1: Walls" translation="1: جدران" explanation="editor tool. Solid tiles" max="32" max_local="32"/>
<string english="2: Backing" translation="2: خلفيات" explanation="editor tool. Non-solid background tiles" max="32" max_local="32"/>
<string english="3: Spikes" translation="3: أشواك" explanation="editor tool" max="32" max_local="32"/>
<string english="4: Trinkets" translation="4: مقتنيات" explanation="editor tool. Shiny trinkets/collectibles" max="32" max_local="32"/>
<string english="5: Checkpoints" translation="5: نقاط حفظ" explanation="editor tool. You restart at the last checkpoint after death" max="32" max_local="32"/>
<string english="6: Disappearing Platforms" translation="6: منصات تتلاشى" explanation="editor tool. Platform that disappears when you step on it (disappearing platform, crumbling platform)" max="32" max_local="32"/>
<string english="7: Conveyors" translation="7: بساط متحرك" explanation="editor tool. Conveyor belt" max="32" max_local="32"/>
<string english="8: Moving Platforms" translation="8: منصات تتحرك" explanation="editor tool. Moving platform" max="32" max_local="32"/>
<string english="9: Enemies" translation="9: أعداء" explanation="editor tool" max="32" max_local="32"/>
<string english="0: Gravity Lines" translation="0: خطوط جاذبية" explanation="editor tool. Gravity line, which flips your gravity when touching it" max="32" max_local="32"/>
<string english="R: Roomtext" translation="R: نصوص حرة" explanation="editor tool. Freely typed text, consider just Text" max="32" max_local="32"/>
<string english="T: Terminals" translation="T: حواسيب" explanation="editor tool. Computer which can be activated by the player to run a script" max="32" max_local="32"/>
<string english="Y: Script Boxes" translation="Y: هامش سكربت" explanation="editor tool. Invisible box that runs a script when touched" max="32" max_local="32"/>
<string english="U: Warp Tokens" translation="U: نائب تنقيل" explanation="editor tool. Small teleporter with entrance and destination" max="32" max_local="32"/>
<string english="I: Warp Lines" translation="I: خط تنقيل" explanation="editor tool. Makes a room edge be connected to its opposite edge" max="32" max_local="32"/>
<string english="O: Crewmates" translation="O: عضو طاقم" explanation="editor tool. Crewmate that can be rescued" max="32" max_local="32"/>
<string english="P: Start Point" translation="P: نقطة بدء" explanation="editor tool" max="32" max_local="32"/>
<string english="START" translation="بدء" explanation="start point in level editor" max="10" max_local="10"/>
<string english="SPACE ^ SHIFT ^" translation="SPACE ^ SHIFT ^" explanation="editor, indicates both SPACE key and SHIFT key open up menus. ^ is rendered as up arrow" max="32" max_local="32"/>
<string english="F1: Change Tileset" translation="F1: تبديل مجموعة الخلايا" explanation="editor shortcut, switch to different tileset" max="25" max_local="25"/>
<string english="F2: Change Colour" translation="F2: تبديل الألوان" explanation="editor shortcut, switch to different tileset color/variant" max="25" max_local="25"/>
<string english="F3: Change Enemies" translation="F3: تبديل الأعداء" explanation="editor shortcut, change enemy appearance" max="25" max_local="25"/>
<string english="F4: Enemy Bounds" translation="F4: هامش الأعداء" explanation="editor shortcut, invisible box which enemies always stay inside of" max="25" max_local="25"/>
<string english="F5: Platform Bounds" translation="F5: هامش المنصة" explanation="editor shortcut, invisible box which platforms always stay inside of" max="25" max_local="25"/>
<string english="F9: Reload Resources" translation="F9: فتح ملفات الموارد" explanation="editor shortcut, reload tilesets, sprites, music, etc" max="25" max_local="25"/>
<string english="F10: Direct Mode" translation="F10: وضع الرسم المباشر" explanation="editor shortcut, direct mode is manual tile placing mode, where walls are not automatically made nice" max="25" max_local="25"/>
<string english="W: Change Warp Dir" translation="W: تبديل اتجاه التنقيل" explanation="editor shortcut, dir=direction, change which edges of the room wrap around. Can be horizontal, vertical or all sides" max="25" max_local="25"/>
<string english="E: Change Roomname" translation="E: تبديل اسم الغرفة" explanation="editor shortcut, the name of the room appears at the bottom" max="25" max_local="25"/>
<string english="S: Save Map" translation="S: حفظ الغرفة" explanation="level editor, save level, `Map` is basically redundant" max="12" max_local="12"/>
<string english="L: Load Map" translation="L: فتح الغرفة" explanation="level editor, load level, `Map` is basically redundant" max="12" max_local="12"/>
<string english="Enter map filename to save as:" translation="اكتب مسار ملف الغرفة لحفظه:" explanation="level editor text input, save level file as" max="39*3" max_local="39*3"/>
<string english="Enter map filename to load:" translation="اكتب مسار ملف الغرفة لفتحه:" explanation="level editor text input, load level file" max="39*3" max_local="39*3"/>
<string english="Enter new room name:" translation="اكتب اسم الغرفة الجديدة:" explanation="level editor text input, the name of the room appears at the bottom" max="39*3" max_local="39*3"/>
<string english="Enter room coordinates x,y:" translation="اكتب احداثيات الغرفة س,ص:" explanation="level editor text input, go to another room by its coordinates, for example, 9,15" max="39*3" max_local="39*3"/>
<string english="Enter script name:" translation="اكتب اسم السكربت:" explanation="level editor text input, enter name of newly created script, or edit the script name of a terminal/script box" max="39*3" max_local="39*3"/>
<string english="Enter roomtext:" translation="اكتب النص:" explanation="level editor text input, enter text to place in the room" max="39*3" max_local="39*3"/>
<string english="Space Station" translation="المحطة الفضائية " explanation="editor tileset name, Now using Space Station Tileset"/>
<string english="Outside" translation="الفضاء الخارجي" explanation="editor tileset name, Now using Outside Tileset"/>
<string english="Lab" translation="المخبر" explanation="editor tileset name, Now using Lab Tileset"/>
<string english="Warp Zone" translation="منطقة التنقيل" explanation="editor tileset name, Now using Warp Zone Tileset. The Warp Zone got its name because its rooms wrap around, but think Star Trek"/>
<string english="Ship" translation="السفينة" explanation="editor tileset name, Now using Ship Tileset. Spaceship"/>
<string english="Now using {area} Tileset" translation="سنغير لمجموعة الخلايا
من {area}" explanation="level editor, user changed the tileset of the room to {area} (like Ship, Lab, etc)" max="38*3" max_local="38*3"/>
<string english="Tileset Colour Changed" translation="تغير لون مجموعة الخلايا" explanation="level editor, user changed the tileset colour/variant of the room" max="38*3" max_local="38*3"/>
<string english="Enemy Type Changed" translation="تغير نوع الأعداء" explanation="level editor, user changed enemy appearance for the room" max="38*3" max_local="38*3"/>
<string english="Platform speed is now {speed}" translation="تغيرت سرعة المنصات إلى {speed}" explanation="level editor, user changed speed of platforms for the room" max="38*3" max_local="38*3"/>
<string english="Enemy speed is now {speed}" translation="تغيرت سرعة الأعداء إلى {speed}" explanation="level editor, user changed speed of enemies for the room" max="38*3" max_local="38*3"/>
<string english="Reloaded resources" translation="أعيد فتح ملفات الموارد" explanation="level editor, reloaded graphics assets/resources, music and sound effects" max="38*3" max_local="38*3"/>
<string english="ERROR: Invalid format" translation="خطأ: صيغة المكتوب غير مناسبة" explanation="user was supposed to enter something like `12,12`, but entered `as@df`" max="38*3" max_local="38*3"/>
<string english="Loaded map: {filename}.vvvvvv" translation="فتحت الغرفة: {filename}.vvvvvv" explanation="successfully loaded level file" max="38*3" max_local="38*3"/>
<string english="Saved map: {filename}.vvvvvv" translation="حفظت الغرفة: {filename}.vvvvvv" explanation="successfully saved level file" max="38*3" max_local="38*3"/>
<string english="ERROR: Could not load level" translation="خطأ: فشل فتح الغرفة" explanation="that level could not be loaded, maybe it does not exist" max="38*3" max_local="38*3"/>
<string english="ERROR: Could not save level!" translation="خطأ: فشل حفظ الغرفة!!" explanation="maybe the filename is too long? exclamation mark because you will lose your data if you quit" max="38*3" max_local="38*3"/>
<string english="Mapsize is now [{width},{height}]" translation="أبعاد الغرفة الآن [{width},{height}]" explanation="editor, the map is now {width} by {height}" max="38*3" max_local="38*3"/>
<string english="Direct Mode Disabled" translation="وضع الرسم المباشر معطل" explanation="editor, manual tile placing mode where walls are not automatically made nice, now changed to automatic mode" max="38*3" max_local="38*3"/>
<string english="Direct Mode Enabled" translation="وضع الرسم المباشر مفعل" explanation="editor, manual tile placing mode where walls are not automatically made nice, now changed to manual mode" max="38*3" max_local="38*3"/>
<string english="ERROR: Warp lines must be on edges" translation="خطأ: خطوط التنقيل ترسم على حواف الغرفة" explanation="level editor, warp lines make a room edge be connected to its opposite edge. So they must be placed on one of the edges, not in the middle" max="38*3" max_local="38*3"/>
<string english="Room warps in all directions" translation="الغرفة تلتف على نفسها من كل الاتجاهات" explanation="level editor, all edges of the room are connected with each other. If the player leaves the room they end up on the other side of the same room." max="38*3" max_local="38*3"/>
<string english="Room warps horizontally" translation="الغرفة تلتف على نفسها أفقيا" explanation="level editor, the left and right edges of the room are connected with each other. The player can still go to other rooms on the top and bottom" max="38*3" max_local="38*3"/>
<string english="Room warps vertically" translation="الغرفة تلتف على نفسها عموديا" explanation="level editor, the top and bottom edges of the room are connected with each other. The player can still go to other rooms on the left and right" max="38*3" max_local="38*3"/>
<string english="Room warping disabled" translation="الغرفة لا تلتف على نفسها" explanation="level editor, no edges are connected and the player can go to other rooms" max="38*3" max_local="38*3"/>
<string english="ERROR: No checkpoint to spawn at" translation="خطأ: لا نقطة حفظ يبعث اللاعب منها" explanation="we cannot playtest because there is no checkpoint in this room that the player could start (be spawned) at" max="38*3" max_local="38*3"/>
<string english="ERROR: Max number of trinkets is 100" translation="خطأ: أقصى عدد للمقتنيات 100" explanation="editor, user tried to place another trinket" max="38*3" max_local="38*3"/>
<string english="ERROR: Max number of crewmates is 100" translation="خطأ: أقصى عدد لأفراد الطاقم 100" explanation="editor, user tried to place another crewmate" max="38*3" max_local="38*3"/>
<string english="Level quits to menu" translation="يغادر المستوى إلى القائمة" explanation="editor message, user would have been forcefully returned to title screen but wasn&apos;t" max="38*3" max_local="38*3"/>
<string english="Level completed" translation="يختم المستوى" explanation="editor message, user would have been returned to levels list but wasn&apos;t" max="38*3" max_local="38*3"/>
<string english="Rolled credits" translation="تظهر شاشة فريق العمل" explanation="editor message, credits would have been shown but weren&apos;t" max="38*3" max_local="38*3"/>
<string english="Time trial completed" translation="تظهر شاشة ختم التحدي ضد الساعة" explanation="editor message, time trial complete screen would have been shown but wasn&apos;t" max="38*3" max_local="38*3"/>
<string english="{hrs}:{min|digits=2}:{sec|digits=2}" translation="{hrs}:{min|digits=2}:{sec|digits=2}" explanation="time format H:MM:SS"/>
<string english="{hrs}:{min|digits=2}:{sec|digits=2}.{cen|digits=2}" translation="{hrs}:{min|digits=2}:{sec|digits=2}.{cen|digits=2}" explanation="time format H:MM:SS.CC"/>
<string english="{min}:{sec|digits=2}" translation="{min}:{sec|digits=2}" explanation="time format M:SS"/>
<string english="{min}:{sec|digits=2}.{cen|digits=2}" translation="{min}:{sec|digits=2}.{cen|digits=2}" explanation="time format M:SS.CC"/>
<string english="{sec}.{cen|digits=2}" translation="{sec}.{cen|digits=2}" explanation="time format S.CC"/>
<string english=".99" translation=".99" explanation="appended to time format for 99/100 seconds (example: 1:15.99). Time trial results"/>
<string english="{area}, {time}" translation="{area} / {time}" explanation="saved game summary, e.g. `Space Station, 12:30:59`"/>
<string english="Level Complete!" translation="ختمت المستوى!" explanation="Might be tight, the exclamation mark may be removed" max="18" max_local="18"/>
<string english="Game Complete!" translation="ختمت اللعبة!" explanation="Might be tight, the exclamation mark may be removed" max="18" max_local="18"/>
<string english="You have rescued a crew member!" translation="أنقذت أحد أفراد طاقمك!" explanation="If you need to manually wordwrap: please ensure this has exactly two lines. Ignore the (font-adapted) maximum if it says 1 line." max="30*2" max_local="30*2"/>
<string english="All Crew Members Rescued!" translation="أنقذت جميع طاقمك!" explanation="" max="32" max_local="32"/>
<string english="All crewmates rescued!" translation="أنقذت جميع طاقمك!" explanation="" max="32" max_local="32"/>
<string english="Game Saved" translation="حفظت اللعبة" explanation="" max="30" max_local="30"/>
<string english="Press arrow keys or WASD to move" translation="تضغط الأسهم أو WASD للحركة" explanation="" max="32*2" max_local="32*2"/>
<string english="Press left/right to move" translation="نضغط يسار/يمين للحركة" explanation="" max="32*2" max_local="32*2"/>
<string english="Press {button} to flip" translation="نضغط {button} للعكس" explanation="expect `ACTION`" max="32*3" max_local="32*3"/>
<string english="Press {button} to view map and quicksave" translation="نضغط {button} لرؤية الخريطة والتخزين السريع" explanation="" max="32*3" max_local="32*3"/>
<string english="If you prefer, you can press UP or DOWN instead of ACTION to flip." translation="لو شئت، يمكنك للعكس ضغط فوق/تحت عوضا عن زر الفعل." explanation="" max="34*3" max_local="34*3"/>
<string english="Help! Can anyone hear this message?" translation="النجدة!! هل من سميع لهذه الرسالة؟" explanation="Violet speaking via Comms Relay" max="25*4" max_local="25*4"/>
<string english="Verdigris? Are you out there? Are you ok?" translation="فارديغري؟ أهذا أنت في الخارج؟ هل صحتك بخير؟" explanation="Violet speaking via Comms Relay" max="25*4" max_local="25*4"/>
<string english="Please help us! We&apos;ve crashed and need assistance!" translation="رجاء أنجدونا! سقطت سفينتنا ونحتاج مدد الدعم!" explanation="Violet speaking via Comms Relay" max="25*4" max_local="25*4"/>
<string english="Hello? Anyone out there?" translation="ألو، ألو؟ هل من أحد يسمعني؟" explanation="Violet speaking via Comms Relay" max="25*4" max_local="25*4"/>
<string english="This is Doctor Violet from the D.S.S. Souleye! Please respond!" translation="هنا الدكتورة فايولت، من سفينة D.S.S. سولاي! رجاء أجيبوني!" explanation="Violet speaking via Comms Relay" max="25*4" max_local="25*4"/>
<string english="Please... Anyone..." translation="ليت أحدا يرد... أترجاكم..." explanation="Violet speaking via Comms Relay" max="25*4" max_local="25*4"/>
<string english="Please be alright, everyone..." translation="أن تعودوا جميعا... سالمين..." explanation="Violet speaking via Comms Relay" max="25*4" max_local="25*4"/>
<string english="Congratulations!
You have found a shiny trinket!" translation="تهانينا!
وجدت تذكارا لماعا!" explanation="" max="34*4" max_local="34*4"/>
<string english="Congratulations!
You have found a lost crewmate!" translation="تهانينا!
وجدت أحد أفراد الطاقم التائهين!" explanation="" max="34*4" max_local="34*4"/>
<string english="Congratulations!
You have found the secret lab!" translation="تهانينا!
وجدت المخبر السري!" explanation="" max="34*4" max_local="34*4"/>
<string english="The secret lab is separate from the rest of the game. You can now come back here at any time by selecting the new SECRET LAB option in the play menu." translation="المخبر السري جزء معزول عن بقية اللعبة. يمكنك العودة متى شئت بخيار مخصص له سيضاف في قائمة اللعب." explanation="" max="36*10" max_local="36*10"/>
<string english="Viridian" translation="فيريديان" explanation="crewmate name (player)" max="15" max_local="15"/>
<string english="Violet" translation="فايوليت" explanation="crewmate name" max="15" max_local="15"/>
<string english="Vitellary" translation="فيتيلاري" case="0" explanation="crewmate name" max="15" max_local="15"/>
<string english="Vermilion" translation="فارميليون" case="0" explanation="crewmate name" max="15" max_local="15"/>
<string english="Verdigris" translation="فارديغري" case="0" explanation="crewmate name" max="15" max_local="15"/>
<string english="Victoria" translation="فيكتوريا" case="0" explanation="crewmate name" max="15" max_local="15"/>
<string english="Vitellary" translation="فيتيلاري" case="1" explanation="crewmate name as menu option: Who do you want to play the level with?"/>
<string english="Vermilion" translation="فارميليون" case="1" explanation="crewmate name as menu option: Who do you want to play the level with?"/>
<string english="Verdigris" translation="فارديغري" case="1" explanation="crewmate name as menu option: Who do you want to play the level with?"/>
<string english="Victoria" translation="فيكتوريا" case="1" explanation="crewmate name as menu option: Who do you want to play the level with?"/>
<string english="Starring" translation="بطولة" explanation="credits roll. Starring the following 6 crew members" max="20" max_local="20"/>
<string english="Captain Viridian" translation="القبطان فيريديان" explanation="credits roll. Starring the following 6 crew members" max="27" max_local="27"/>
<string english="Doctor Violet" translation="الدكتورة فايوليت" explanation="credits roll. Starring the following 6 crew members" max="27" max_local="27"/>
<string english="Professor Vitellary" translation="الأستاذ فيتيلاري" explanation="credits roll. Starring the following 6 crew members" max="27" max_local="27"/>
<string english="Officer Vermilion" translation="النقيب فارميليون" explanation="credits roll. Starring the following 6 crew members" max="27" max_local="27"/>
<string english="Chief Verdigris" translation="القائد فارديغري" explanation="credits roll. Starring the following 6 crew members" max="27" max_local="27"/>
<string english="Doctor Victoria" translation="الدكتورة فيكتوريا" explanation="credits roll. Starring the following 6 crew members" max="27" max_local="27"/>
<string english="When you&apos;re standing on the floor, Vitellary will try to walk to you." translation="أثناء وقوفك على الأرضية، سيحاول فيتيلاري المشي نحوك." explanation="Intermission 1" max="34*4" max_local="34*4"/>
<string english="When you&apos;re standing on the floor, Vermilion will try to walk to you." translation="أثناء وقوفك على الأرضية، سيحاول فارميليون المشي نحوك." explanation="Intermission 1" max="34*4" max_local="34*4"/>
<string english="When you&apos;re standing on the floor, Verdigris will try to walk to you." translation="أثناء وقوفك على الأرضية، سيحاول فارديغري المشي نحوك." explanation="Intermission 1" max="34*4" max_local="34*4"/>
<string english="When you&apos;re standing on the floor, Victoria will try to walk to you." translation="أثناء وقوفك على الأرضية، ستحاول فيكتوريا المشي نحوك." explanation="Intermission 1" max="34*4" max_local="34*4"/>
<string english="When you&apos;re standing on the floor, your companion will try to walk to you." translation="أثناء وقوفك على الأرضية، سيحاول مرافقك أيا كان المشي نحوك." explanation="Intermission 1, unknown companion, normally impossible but reproducible in custom levels" max="34*4" max_local="34*4"/>
<string english="When you&apos;re standing on the ceiling, Vitellary will try to walk to you." translation="أثناء وقوفك على السقف، سيحاول فيتيلاري المشي نحوك." explanation="Intermission 1 in flip mode" max="34*4" max_local="34*4"/>
<string english="When you&apos;re standing on the ceiling, Vermilion will try to walk to you." translation="أثناء وقوفك على السقف، سيحاول فارميليون المشي نحوك." explanation="Intermission 1 in flip mode" max="34*4" max_local="34*4"/>
<string english="When you&apos;re standing on the ceiling, Verdigris will try to walk to you." translation="أثناء وقوفك على السقف، سيحاول فارديغري المشي نحوك." explanation="Intermission 1 in flip mode" max="34*4" max_local="34*4"/>
<string english="When you&apos;re standing on the ceiling, Victoria will try to walk to you." translation="أثناء وقوفك على السقف، ستحاول فيكتوريا المشي نحوك." explanation="Intermission 1 in flip mode" max="34*4" max_local="34*4"/>
<string english="When you&apos;re standing on the ceiling, your companion will try to walk to you." translation="أثناء وقوفك على السقف، سيحاول مرافقك أيا كان المشي نحوك." explanation="Intermission 1 in flip mode, unknown companion, normally impossible but reproducible in custom levels" max="34*4" max_local="34*4"/>
<string english="When you&apos;re NOT standing on the floor, Vitellary will stop and wait for you." translation="إن كفيت عن ملامسة الأرضية، سيتوقف فيتيلاري وينتظرك." explanation="Intermission 1" max="34*4" max_local="34*4"/>
<string english="When you&apos;re NOT standing on the floor, Vermilion will stop and wait for you." translation="إن كفيت عن ملامسة الأرضية، سيتوقف فارميليون وينتظرك." explanation="Intermission 1" max="34*4" max_local="34*4"/>
<string english="When you&apos;re NOT standing on the floor, Verdigris will stop and wait for you." translation="إن كفيت عن ملامسة الأرضية، سيتوقف فارديغري وينتظرك." explanation="Intermission 1" max="34*4" max_local="34*4"/>
<string english="When you&apos;re NOT standing on the floor, Victoria will stop and wait for you." translation="إن كفيت عن ملامسة الأرضية، ستتوقف فيكتوريا وتنتظرك." explanation="Intermission 1" max="34*4" max_local="34*4"/>
<string english="When you&apos;re NOT standing on the floor, your companion will stop and wait for you." translation="إن كفيت عن ملامسة الأرضية، سيتوقف مرافقك أيا كان وينتظرك." explanation="Intermission 1, unknown companion, normally impossible but reproducible in custom levels" max="34*4" max_local="34*4"/>
<string english="When you&apos;re NOT standing on the ceiling, Vitellary will stop and wait for you." translation="إن كفيت عن ملامسة السقف، سيتوقف فيتيلاري وينتظرك." explanation="Intermission 1 in flip mode" max="34*4" max_local="34*4"/>
<string english="When you&apos;re NOT standing on the ceiling, Vermilion will stop and wait for you." translation="إن كفيت عن ملامسة السقف، سيتوقف فارميليون وينتظرك." explanation="Intermission 1 in flip mode" max="34*4" max_local="34*4"/>
<string english="When you&apos;re NOT standing on the ceiling, Verdigris will stop and wait for you." translation="إن كفيت عن ملامسة السقف، سيتوقف فارديغري وينتظرك." explanation="Intermission 1 in flip mode" max="34*4" max_local="34*4"/>
<string english="When you&apos;re NOT standing on the ceiling, Victoria will stop and wait for you." translation="إن كفيت عن ملامسة السقف، ستتوقف فيكتوريا وتنتظرك." explanation="Intermission 1 in flip mode" max="34*4" max_local="34*4"/>
<string english="When you&apos;re NOT standing on the ceiling, your companion will stop and wait for you." translation="إن كفيت عن ملامسة السقف، سيتوقف مرافقك أيا كان وينتظرك." explanation="Intermission 1 in flip mode, unknown companion, normally impossible but reproducible in custom levels" max="34*4" max_local="34*4"/>
<string english="You can&apos;t continue to the next room until he is safely across." translation="لا يمكنك المواصلة للغرفة القادمة قبل أن يعبر سالما." explanation="Intermission 1" max="34*4" max_local="34*4"/>
<string english="You can&apos;t continue to the next room until she is safely across." translation="لا يمكنك المواصلة للغرفة القادمة قبل أن تعبر سالمة." explanation="Intermission 1" max="34*4" max_local="34*4"/>
<string english="You can&apos;t continue to the next room until they are safely across." translation="لا يمكنك المواصلة للغرفة القادمة قبل أن تعبرا سالمين." explanation="Intermission 1, unknown companion, normally impossible but reproducible in custom levels" max="34*4" max_local="34*4"/>
<string english="Survive for" translation="سأحاول الصمود" explanation="Gravitron. Line 1/2: Survive for 60 seconds!" max="20" max_local="20"/>
<string english="60 seconds!" translation="لمدة 60 ثانية!" explanation="Gravitron. Line 2/2: Survive for 60 seconds!" max="20" max_local="20"/>
<string english="Thanks for" translation="شكرا على" explanation="credits. Line 1/2: Thanks for playing!" max="20" max_local="20"/>
<string english="playing!" translation="اللعب!" explanation="credits. Line 2/2: Thanks for playing!" max="20" max_local="20"/>
<string english="SPACE STATION 1 MASTERED" translation="احترفت المحطة الفضائية 1" explanation="achievement/trophy title" max="38*2" max_local="38*2"/>
<string english="LABORATORY MASTERED" translation="احترفت المخبر" explanation="achievement/trophy title - V rank in time trial" max="38*2" max_local="38*2"/>
<string english="THE TOWER MASTERED" translation="احترفت البرج" explanation="achievement/trophy title - V rank in time trial" max="38*2" max_local="38*2"/>
<string english="SPACE STATION 2 MASTERED" translation="احترفت المحطة الفضائية 2" explanation="achievement/trophy title - V rank in time trial" max="38*2" max_local="38*2"/>
<string english="WARP ZONE MASTERED" translation="احترفت منطقة التنقيل" explanation="achievement/trophy title - V rank in time trial" max="38*2" max_local="38*2"/>
<string english="FINAL LEVEL MASTERED" translation="احترفت المستوى الأخير" explanation="achievement/trophy title - V rank in time trial" max="38*2" max_local="38*2"/>
<string english="Obtain a V Rank in this Time Trial" translation="حصلت على رتبة V في هذا التحدي ضد الساعة." explanation="achievement/trophy description" max="38*2" max_local="38*2"/>
<string english="GAME COMPLETE" translation="ختم اللعبة" explanation="achievement/trophy title" max="38*2" max_local="38*2"/>
<string english="Complete the game" translation="ختمت اللعبة" case="1" explanation="achievement/trophy description" max="38*2" max_local="38*2"/>
<string english="FLIP MODE COMPLETE" translation="ختم الوضع المعكوس" explanation="achievement/trophy title" max="38*2" max_local="38*2"/>
<string english="Complete the game in flip mode" translation="ختمت اللعبة في الوضع المعكوس" explanation="achievement/trophy description" max="38*2" max_local="38*2"/>
<string english="Win with less than 50 deaths" translation="ختمت اللعبة بأقل من 50 ميتة" explanation="achievement/trophy description" max="38*2" max_local="38*2"/>
<string english="Win with less than 100 deaths" translation="ختمت اللعبة بأقل من 100 ميتة" explanation="achievement/trophy description" max="38*2" max_local="38*2"/>
<string english="Win with less than 250 deaths" translation="ختمت اللعبة بأقل من 250 ميتة" explanation="achievement/trophy description" max="38*2" max_local="38*2"/>
<string english="Win with less than 500 deaths" translation="ختمت اللعبة بأقل من 500 ميتة" explanation="achievement/trophy description" max="38*2" max_local="38*2"/>
<string english="Last 5 seconds on the Super Gravitron" translation="صمدت 5 ثوان في أتون الجاذبية الخارق" explanation="achievement/trophy description" max="38*2" max_local="38*2"/>
<string english="Last 10 seconds on the Super Gravitron" translation="صمدت 10 ثوان في أتون الجاذبية الخارق" explanation="achievement/trophy description" max="38*2" max_local="38*2"/>
<string english="Last 15 seconds on the Super Gravitron" translation="صمدت 15 ثانية في أتون الجاذبية الخارق" explanation="achievement/trophy description" max="38*2" max_local="38*2"/>
<string english="Last 20 seconds on the Super Gravitron" translation="صمدت 20 ثانية في أتون الجاذبية الخارق" explanation="achievement/trophy description" max="38*2" max_local="38*2"/>
<string english="Last 30 seconds on the Super Gravitron" translation="صمدت 30 ثانية في أتون الجاذبية الخارق" explanation="achievement/trophy description" max="38*2" max_local="38*2"/>
<string english="Last 1 minute on the Super Gravitron" translation="صمدت دقيقة في أتون الجاذبية الخارق" explanation="achievement/trophy description" max="38*2" max_local="38*2"/>
<string english="MASTER OF THE UNIVERSE" translation="المحترف الكوني" explanation="achievement/trophy title - no death mode complete" max="38*2" max_local="38*2"/>
<string english="Complete the game in no death mode" translation="ختمت اللعبة في تحدي بدون الموت." explanation="achievement/trophy description" max="38*2" max_local="38*2"/>
<string english="Something went wrong, but we forgot the error message." translation="حصلت مشكلة، لكن نسينا كتابة رسالة خطأ مناسبة." explanation="the message that is printed in case the game detects an error but there&apos;s no error message set" max="38*6" max_local="38*6"/>
<string english="Could not mount {path}: real directory doesn&apos;t exist" translation="فشل ربط المسار {path}: لا وجود للمجلد الحقيقي" explanation="mount: link/attach a directory (folder) in the filesystem into the game&apos;s filesystem so we can access it" max="38*6" max_local="38*6"/>
<string english="Level {path} not found" translation="لا وجود للمرحلة {path}" explanation="" max="38*6" max_local="38*6"/>
<string english="Error parsing {path}: {error}" translation="فشل فتح {path}: {error}" explanation="we tried to parse the level file, but failed" max="38*6" max_local="38*6"/>
<string english="{filename} dimensions not exact multiples of {width} by {height}!" translation="الأبعاد في {filename} ليست مضاعفات صحيحة لقيم العرض {width} والارتفاع {height}!" explanation="filename is something like tiles.png, tiles2.png, etc. and width/height are something like 8, 32, etc.; this is used if the dimensions of a graphics file aren&apos;t an exact multiple of the given size (e.g. 8x8, 32x32, etc.)" max="38*6" max_local="38*6"/>
<string english="ERROR: Could not write to language folder! Make sure there is no &quot;lang&quot; folder next to the regular saves." translation="خطأ: فشلت الكتابة نحو مجلد اللغة! احرص أن لا مجلد &quot;lang&quot; بالقرب من التخزينات العادية" explanation="" max="38*5" max_local="38*5"/>
<string english="Localisation" translation="التوطين" explanation="" max="20" max_local="20"/>
<string english="Localisation Project Led by" translation="أدار مشروع التوطين" explanation="" max="40" max_local="40"/>
<string english="Translations by" translation="عمل على الترجمات" explanation=""/>
<string english="Translators" translation="المترجمون" explanation="" max="20" max_local="20"/>
<string english="Pan-European Font Design by" translation="تصميم الخط الأوروبي من" explanation="" max="40" max_local="40"/>
<string english="Fonts by" translation="الخطوط من" explanation=""/>
<string english="Other Fonts by" translation="الخطوط الأخرى من" explanation=""/>
<string english="Editing and LQA" translation="التحرير وضمان الجودة" explanation=""/>
<string english="Arabic" translation="العربية" explanation=""/>
<string english="Catalan" translation="الكاتالونية" explanation=""/>
<string english="Welsh" translation="الويلزية" explanation=""/>
<string english="German" translation="الألمانية" explanation=""/>
<string english="Esperanto" translation="الإسبرانتو" explanation=""/>
<string english="Spanish" translation="الإسبانية" explanation=""/>
<string english="French" translation="الفرنسية" explanation=""/>
<string english="Irish" translation="الإيرلندية" explanation=""/>
<string english="Italian" translation="الإيطالية" explanation=""/>
<string english="Japanese" translation="اليابانية" explanation=""/>
<string english="Korean" translation="الكورية" explanation=""/>
<string english="Dutch" translation="الهولندية" explanation=""/>
<string english="Polish" translation="البولونية" explanation=""/>
<string english="Brazilian Portuguese" translation="البرتغالية البرازيلية" explanation=""/>
<string english="European Portuguese" translation="البرتغالية الأوروبية" explanation=""/>
<string english="Russian" translation="الروسية" explanation=""/>
<string english="Silesian" translation="السيليسية" explanation=""/>
<string english="Turkish" translation="التركية" explanation=""/>
<string english="Ukrainian" translation="الأوكرانية" explanation=""/>
<string english="Chinese (Simplified)" translation="الصينية المبسطة" explanation=""/>
<string english="Chinese (Traditional)" translation="الصينية التقليدية" explanation=""/>
<string english="Spanish (ES)" translation="الإسبانية الأوروبية" explanation=""/>
<string english="Spanish (LATAM)" translation="الإسبانية الأمريكية" explanation=""/>
<string english="Spanish (ARG.)" translation="الإسبانية الأرجنتينية" explanation=""/>
<string english="Persian" translation="الفارسية" explanation=""/>
<string english="" translation="" explanation=""/>
<string english="" translation="" explanation=""/>
</strings>

View file

@ -1,53 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Please read README.txt for information about the language files -->
<strings_plural max_local_for="8x10">
<string english_plural="You rescued {n_crew|wordy} crewmates" english_singular="You rescued {n_crew|wordy} crewmate" explanation="These two strings are displayed underneath each other (1/2)" max="40" var="n_crew" expect="6" max_local="40">
<translation form="0" translation="لم ننقذ أي فرد من الطاقم"/>
<translation form="1" translation="أنقذت فردا من الطاقم"/>
<translation form="2" translation="أنقذت فردين من الطاقم"/>
<translation form="3" translation="أنقذت {n_crew|wordy} أفراد من الطاقم"/>
<translation form="11" translation="أنقذت {n_crew|wordy} فرد من الطاقم"/>
</string>
<string english_plural="and found {n_trinkets|wordy} trinkets." english_singular="and found {n_trinkets|wordy} trinket." explanation="These two strings are displayed underneath each other (2/2)" max="38*2" var="n_trinkets" expect="20" max_local="38*2">
<translation form="0" translation="ولم نجد أي تذكار."/>
<translation form="1" translation="ووجدت تذكارا."/>
<translation form="2" translation="ووجدت تذكارين."/>
<translation form="3" translation="ووجدت {n_trinkets|wordy} تذكارات."/>
<translation form="11" translation="ووجدت {n_trinkets|wordy} تذكارا."/>
</string>
<string english_plural="And you found {n_trinkets|wordy} trinkets." english_singular="And you found {n_trinkets|wordy} trinket." explanation="You rescued all the crewmates! And you found XX trinket(s)." max="38*3" var="n_trinkets" expect="20" max_local="38*3">
<translation form="0" translation="ولم نجد أي تذكار."/>
<translation form="1" translation="ووجدت تذكارا."/>
<translation form="2" translation="ووجدت تذكارين."/>
<translation form="3" translation="ووجدت {n_trinkets|wordy} تذكارات."/>
<translation form="11" translation="ووجدت {n_trinkets|wordy} تذكارا."/>
</string>
<string english_plural="{n_crew|wordy} crewmates remain" english_singular="{n_crew|wordy} crewmate remains" explanation="Reminder: you can add |upper for an uppercase letter." max="38*2" var="n_crew" expect="100" max_local="38*2">
<translation form="0" translation="لم يبق أي فرد من الطاقم"/>
<translation form="1" translation="بقي فرد من الطاقم"/>
<translation form="2" translation="بقي فردان من الطاقم"/>
<translation form="3" translation="بقي {n_crew|wordy} أفراد من الطاقم"/>
<translation form="11" translation="بقي {n_crew|wordy} فردا من الطاقم"/>
</string>
<string english_plural="{n_crew|wordy} remain" english_singular="{n_crew|wordy} remains" explanation="You have rescued a crew member! XX remain" max="32*2" var="n_crew" expect="100" max_local="32*2">
<translation form="0" translation="لم يبق أي فرد من الطاقم"/>
<translation form="1" translation="بقي فرد من الطاقم"/>
<translation form="2" translation="بقي فردان من الطاقم"/>
<translation form="3" translation="بقي {n_crew|wordy} أفراد من الطاقم"/>
<translation form="11" translation="بقي {n_crew|wordy} فردا من الطاقم"/>
</string>
<string english_plural="Hardest Room (with {n_deaths} deaths)" english_singular="Hardest Room (with {n_deaths} death)" explanation="game complete screen" max="40" var="n_deaths" expect="1000" max_local="40">
<translation form="0" translation="أصعب غرفة (بدون ميتات)"/>
<translation form="1" translation="أصعب غرفة (ميتة واحدة)"/>
<translation form="2" translation="أصعب غرفة (ميتتان)"/>
<translation form="3" translation="أصعب غرفة ({n_deaths|wordy2} ميتات)"/>
<translation form="11" translation="أصعب غرفة ({n_deaths|wordy2} ميتة)"/>
</string>
<string english_plural="{n} normal room names untranslated" english_singular="{n} normal room name untranslated" explanation="per-area counts for room name translator mode" max="38*4" var="n" expect="48" max_local="38*4">
<translation form="0" translation="لم يبق أي اسم غرفة لم يترجم"/>
<translation form="1" translation="اسم غرفة عادي لم يترجم"/>
<translation form="2" translation="اسما غرفتين عادينين لم يترجما"/>
<translation form="3" translation="لم يترجم {n|wordy} أسماء لغرف عادية"/>
<translation form="11" translation="لم يترجم {n|wordy} اسم لغرف عادية"/>
</string>
</strings_plural>

View file

@ -1,949 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Please read README.txt for information about the language files -->
<cutscenes>
<cutscene id="intro" explanation="">
<dialogue speaker="cyan" english="Uh oh..." translation="Ups..."/>
<dialogue speaker="purple" english="Is everything ok?" translation="Va tot bé?"/>
<dialogue speaker="cyan" english="No! We&apos;ve hit some kind of interference..." translation="No! Ha aparegut alguna mena dinterferència..."/>
<dialogue speaker="cyan" english="Something&apos;s wrong! We&apos;re going to crash!" translation="Alguna cosa no va bé! Ens estavellarem!"/>
<dialogue speaker="cyan" english="Evacuate!" translation="Evacuació!"/>
<dialogue speaker="blue" english="Oh no!" translation="Oh, no!"/>
<dialogue speaker="red" english="Everyone off the ship!" translation="Tothom fora de la nau!"/>
<dialogue speaker="yellow" english="This shouldn&apos;t be happening!" translation="Això no hauria de passar!"/>
<dialogue speaker="cyan" english="Phew! That was scary!" translation="Bufa! Quina por!"/>
<dialogue speaker="cyan" english="At least we all escaped, right guys?" translation="Almenys ens nhem pogut escapar tots, oi, nois?"/>
<dialogue speaker="cyan" english="...guys?" translation="Nois...?"/>
</cutscene>
<cutscene id="firststeps" explanation="">
<dialogue speaker="cyan" english="I wonder why the ship teleported me here alone?" translation="Per què la nau només mha teletransportat aquí a mi?"/>
<dialogue speaker="cyan" english="I hope everyone else got out ok..." translation="Espero que tothom nhagi|sortit il·lès..."/>
</cutscene>
<cutscene id="communicationstation" explanation="">
<dialogue speaker="cyan" english="Violet! Is that you?" translation="Violeta! Ets tu?"/>
<dialogue speaker="purple" english="Captain! You&apos;re ok!" translation="Cap! Estàs bé!"/>
<dialogue speaker="purple" english="Something has gone horribly wrong with the ship&apos;s teleporter!" translation="Ha passat alguna cosa terrible amb el teletransportador de la nau!"/>
<dialogue speaker="purple" english="I think everyone has been teleported away randomly! They could be anywhere!" translation="Em sembla que ha teletransportat tothom a llocs aleatoris! Podrien ser en qualsevol lloc!"/>
<dialogue speaker="cyan" english="Oh no!" translation="Ostres, no!"/>
<dialogue speaker="purple" english="I&apos;m on the ship - it&apos;s damaged badly, but it&apos;s still intact!" translation="Jo sóc a la nau. Està molt malmesa,|però encara està sencera!"/>
<dialogue speaker="purple" english="Where are you, Captain?" translation="Tu on ets, cap?"/>
<dialogue speaker="cyan" english="I&apos;m on some sort of space station... It seems pretty modern..." translation="En alguna mena destació espacial...|Sembla força moderna..."/>
<dialogue speaker="purple" english="There seems to be some sort of interference in this dimension..." translation="Sembla que en aquesta dimensió hi ha alguna mena dinterferència..."/>
<dialogue speaker="purple" english="I&apos;m broadcasting the coordinates of the ship to you now." translation="Ara tenviaré les coordenades de la nau."/>
<dialogue speaker="purple" english="I can&apos;t teleport you back, but..." translation="No et puc teletransportar fins aquí, però..."/>
<dialogue speaker="purple" english="If YOU can find a teleporter anywhere nearby, you should be able to teleport back to me!" translation="Si aconsegueixes trobar tu un teletransportador en algun lloc a prop don ets, hauries de poder-te teletransportar fins a la nau!"/>
<dialogue speaker="cyan" english="Ok! I&apos;ll try to find one!" translation="Entesos! Miraré de trobar-ne un!"/>
<dialogue speaker="purple" english="Good luck, Captain!" translation="Bona sort, cap!"/>
<dialogue speaker="purple" english="I&apos;ll keep trying to find the rest of the crew..." translation="Jo continuaré mirant de contactar amb la resta de la tripulació..."/>
</cutscene>
<cutscene id="trenchwarfare" explanation="player finds Trench Warfare trinket, if no trinkets found yet">
<dialogue speaker="cyan" english="Ohh! I wonder what that is?" translation="Oooh! Què deu ser, aquella cosa?"/>
<dialogue speaker="cyan" english="I probably don&apos;t really need it, but it might be nice to take it back to the ship to study..." translation="Suposo que no la necessito, però potser estaria bé dur-la a la nau per a estudiar-la..."/>
</cutscene>
<cutscene id="newtrenchwarfare" explanation="player finds Trench Warfare trinket, if other trinket already found">
<dialogue speaker="cyan" english="Oh! It&apos;s another one of those shiny things!" translation="Oh! Una altra cosa brillant daquelles!"/>
<dialogue speaker="cyan" english="I probably don&apos;t really need it, but it might be nice to take it back to the ship to study..." translation="Suposo que no la necessito, però potser estaria bé dur-la a la nau per a estudiar-la..."/>
</cutscene>
<cutscene id="teleporterback" explanation="">
<dialogue speaker="cyan" english="A teleporter!" translation="Un teletransportador!"/>
<dialogue speaker="cyan" english="I can get back to the ship with this!" translation="Amb això puc tornar a la nau!"/>
</cutscene>
<cutscene id="levelonecomplete_ending" explanation="">
<dialogue speaker="purple" english="Captain!" translation="Cap!"/>
</cutscene>
<cutscene id="bigopenworld" explanation="">
<dialogue speaker="player" english="So, Doctor - have you any idea what caused the crash?" translation="I doncs, doctora... Tens cap idea de què ha fet que ens estavelléssim?"/>
<dialogue speaker="purple" english="There&apos;s some sort of bizarre signal here that&apos;s interfering with our equipment..." translation="Hi ha alguna mena de senyal estrany|que provoca interferències als nostres sistemes..."/>
<dialogue speaker="purple" english="It caused the ship to lose its quantum position, collapsing us into this dimension!" translation="Ha fet que la nau perdés la posició quàntica i ens ha endinsat en aquesta dimensió!"/>
<dialogue speaker="player" english="Oh no!" translation="Ostres, no!"/>
<dialogue speaker="purple" english="But I think we should be able to fix the ship and get out of here..." translation="Però em sembla que hauríem de poder reparar la nau i sortir daquí..."/>
<dialogue speaker="purple" english="... as long as we can find the rest of the crew." translation="Sempre que trobem la resta de la tripulació, és clar..."/>
<dialogue speaker="purple" english="We really don&apos;t know anything about this place..." translation="No en sabem absolutament res, daquest lloc..."/>
<dialogue speaker="purple" english="Our friends could be anywhere - they could be lost, or in danger!" translation="Els nostres amics podrien ser en qualsevol racó. I podrien estar perduts o en perill!"/>
<dialogue speaker="player" english="Can they teleport back here?" translation="Es poden teletransportar fins aquí?"/>
<dialogue speaker="purple" english="Not unless they find some way to communicate with us!" translation="Si no troben cap manera de comunicar-se amb nosaltres, no!"/>
<dialogue speaker="purple" english="We can&apos;t pick up their signal and they can&apos;t teleport here unless they know where the ship is..." translation="No rebem cap senyal seu i no es poden teletransportar fins aquí si no saben on és la nau..."/>
<dialogue speaker="player" english="So what do we do?" translation="I què fem, doncs?"/>
<dialogue speaker="purple" english="We need to find them! Head out into the dimension and look for anywhere they might have ended up..." translation="Hem de trobar-los! Surt a la dimensió i mira de descobrir on han anat a parar..."/>
<dialogue speaker="player" english="Ok! Where do we start?" translation="Dacord! Per on comencem?"/>
<dialogue speaker="purple" english="Well, I&apos;ve been trying to find them with the ship&apos;s scanners!" translation="Bé, jo he mirat de localitzar-los amb els escàners de la nau!"/>
<dialogue speaker="purple" english="It&apos;s not working, but I did find something..." translation="No ha funcionat, però he descobert una cosa..."/>
<dialogue speaker="purple" english="These points show up on our scans as having high energy patterns!" translation="Aquests punts que apareixen a lescaneig tenen patrons dalta energia!"/>
<dialogue speaker="purple" english="There&apos;s a good chance they&apos;re teleporters - which means they&apos;re probably built near something important..." translation="És força probable que siguin teletransportadors, i això vol dir que estan construïts al costat de coses importants..."/>
<dialogue speaker="purple" english="They could be a very good place to start looking." translation="Poden ser un molt bon lloc on començar a investigar."/>
<dialogue speaker="player" english="Ok! I&apos;ll head out and see what I can find!" translation="Dacord! Doncs men vaig a mirar què hi trobo!"/>
<dialogue speaker="purple" english="I&apos;ll be right here if you need any help!" translation="Si necessites ajuda, seré aquí!"/>
</cutscene>
<cutscene id="bigopenworldskip" explanation="">
<dialogue speaker="purple" english="I&apos;ll be right here if you need any help!" translation="Si necessites ajuda, seré aquí!"/>
</cutscene>
<cutscene id="talkpurple_intro" explanation="">
<dialogue speaker="player" english="I&apos;m feeling a bit overwhelmed, Doctor." translation="Tot això maclapara una mica, doctora."/>
<dialogue speaker="player" english="Where do I begin?" translation="Per on començo?"/>
<dialogue speaker="purple" english="Remember that you can press {b_map} to check where you are on the map!" translation="Recorda que pots prémer {b_map} per a veure on ets del mapa!" buttons="1"/>
<dialogue speaker="purple" english="Look for areas where the rest of the crew might be..." translation="Cerca zones on pugui haver-hi altres tripulants..."/>
<dialogue speaker="purple" english="If you get lost, you can get back to the ship from any teleporter." translation="Si et perds, pots tornar a la nau a partir de qualsevol teletransportador."/>
<dialogue speaker="purple" english="And don&apos;t worry! We&apos;ll find everyone!" translation="I no pateixis! Segur que trobarem tothom!"/>
<dialogue speaker="purple" english="Everything will be ok!" translation="Tot anirà bé!"/>
</cutscene>
<cutscene id="talkpurple_3" explanation="only one player string is shown">
<dialogue speaker="purple" english="Are you doing ok, Captain?" translation="Estàs bé, cap?"/>
<dialogue speaker="player" english="I&apos;m worried about Victoria, Doctor!" translation="Em preocupa la Victòria, doctora!"/>
<dialogue speaker="player" english="I&apos;m worried about Vitellary, Doctor!" translation="Em preocupa en Vitel·lí, doctora!"/>
<dialogue speaker="player" english="I&apos;m worried about Verdigris, Doctor!" translation="Em preocupa en Verdet, doctora!"/>
<dialogue speaker="player" english="I&apos;m worried about Vermilion, Doctor!" translation="Em preocupa en Vermelló, doctora!"/>
<dialogue speaker="player" english="I&apos;m worried about you, Doctor!" translation="Em preocupes tu, doctora!"/>
<dialogue speaker="purple" english="Oh - well, don&apos;t worry, they&apos;ll show up!" translation="Ah, no pateixis, segur que apareixerà!"/>
<dialogue speaker="purple" english="Here! Have a lollipop!" translation="Té, una piruleta!"/>
</cutscene>
<cutscene id="trinketcollector" explanation="if no trinkets found yet">
<dialogue speaker="cyan" english="This seems like a good place to store anything I find out there..." translation="Això sembla un bon lloc on emmagatzemar les coses que trobi allà fora..."/>
<dialogue speaker="cyan" english="Victoria loves to study the interesting things we find on our adventures!" translation="La Victòria gaudeix estudiant les coses interessants que trobem durant les nostres aventures!"/>
</cutscene>
<cutscene id="newtrinketcollector" explanation="if at least one trinket found">
<dialogue speaker="cyan" english="This seems like a good place to store those shiny things." translation="Això sembla un bon lloc on emmagatzemar aquelles coses brillants..."/>
<dialogue speaker="cyan" english="Victoria loves to study the interesting things we find on our adventures!" translation="La Victòria gaudeix estudiant les coses interessants que trobem durant les nostres aventures!"/>
</cutscene>
<cutscene id="new2trinketcollector" explanation="">
<dialogue speaker="cyan" english="I hope she&apos;s ok..." translation="Espero que estigui bé..."/>
</cutscene>
<cutscene id="rescuegreen" explanation="nuance: `she&apos;s BACK on the ship` means more `she&apos;s home` and not `she has returned to the ship`. She has never left the ship">
<dialogue speaker="green" english="Captain! I&apos;ve been so worried!" translation="Cap! Estava molt preocupat!"/>
<dialogue speaker="player" english="Chief Verdigris! You&apos;re ok!" translation="Enginyer en cap Verdet! Estàs bé!"/>
<dialogue speaker="green" english="I&apos;ve been trying to get out, but I keep going around in circles..." translation="He mirat de sortir daquí, però no deixo de fer voltes..."/>
<dialogue speaker="player" english="I&apos;ve come from the ship. I&apos;m here to teleport you back to it." translation="Vinc de la nau. Sóc aquí per a teletransportar-thi."/>
<dialogue speaker="green" english="Is everyone else alright? Is Violet..." translation="La resta estan bé? I la Violeta..."/>
<dialogue speaker="player" english="She&apos;s fine - she&apos;s back on the ship!" translation="Està bé. És a la nau!"/>
<dialogue speaker="green" english="Oh! Great - Let&apos;s get going, then!" translation="Ah, fantàstic! Som-hi, doncs!"/>
</cutscene>
<cutscene id="rescueblue" explanation="">
<dialogue speaker="blue" english="Oh no! Captain! Are you stuck here too?" translation="Ostres, no! Cap! Tu tampoc no pots sortir daquí?"/>
<dialogue speaker="player" english="It&apos;s ok - I&apos;m here to rescue you!" translation="No pateixis, he vingut|a rescatar-te!"/>
<dialogue speaker="player" english="Let me explain everything..." translation="Deixam explicar-tho tot..."/>
<dialogue speaker="blue" english="What? I didn&apos;t understand any of that!" translation="Què? No he entès res de res!"/>
<dialogue speaker="player" english="Oh... well, don&apos;t worry." translation="Ah... Bé, doncs no pateixis."/>
<dialogue speaker="player" english="Follow me! Everything will be alright!" translation="Segueix-me! Tot anirà bé!"/>
<dialogue speaker="blue" english="Sniff... Really?" translation="Ai... Segur?"/>
<dialogue speaker="blue" english="Ok then!" translation="Dacord, doncs!"/>
</cutscene>
<cutscene id="rescuered" explanation="">
<dialogue speaker="red" english="Captain!" translation="Cap!"/>
<dialogue speaker="red" english="Am I ever glad to see you! I thought I was the only one to escape the ship..." translation="Malegro molt de veuret! Pensava que era lúnic que shavia escapat de la nau..."/>
<dialogue speaker="player" english="Vermilion! I knew you&apos;d be ok!" translation="Vermelló! Sabia que estaries bé!"/>
<dialogue speaker="red" english="So, what&apos;s the situation?" translation="I doncs, quina és la situació?"/>
<dialogue speaker="red" english="I see! Well, we&apos;d better get back then." translation="És clar! Dacord, doncs millor que tornem."/>
<dialogue speaker="red" english="There&apos;s a teleporter in the next room." translation="Hi ha un teletransportador a la sala del costat."/>
</cutscene>
<cutscene id="rescueyellow" explanation="">
<dialogue speaker="yellow" english="Ah, Viridian! You got off the ship alright too?" translation="Ah, Viridis! Tu també vas sortir de la nau sense fer-te mal, oi?"/>
<dialogue speaker="player" english="It&apos;s good to see you&apos;re alright, Professor!" translation="Malegro de veure que estàs bé, professor!"/>
<dialogue speaker="yellow" english="Is the ship ok?" translation="La nau està bé?"/>
<dialogue speaker="player" english="It&apos;s badly damaged, but Violet&apos;s been working on fixing it." translation="Està força malmesa, però la Violeta|treballa per a reparar-la."/>
<dialogue speaker="player" english="We could really use your help..." translation="La teva ajuda ens vindria molt bé..."/>
<dialogue speaker="yellow" english="Ah, of course!" translation="Ah, és clar!"/>
<dialogue speaker="yellow" english="The background interference in this dimension prevented the ship from finding a teleporter when we crashed!" translation="Les interferències del rerefons daquesta dimensió van impedir que la nau trobés un teletransportador abans que ens estavelléssim!"/>
<dialogue speaker="yellow" english="We&apos;ve all been teleported to different locations!" translation="Per això hem acabat teletransportats|a diferents llocs!"/>
<dialogue speaker="player" english="Er, that sounds about right!" translation="Eh... És clar, té sentit!"/>
<dialogue speaker="yellow" english="Let&apos;s get back to the ship, then!" translation="Tornem a la nau, doncs!"/>
<dialogue speaker="yellow" english="After you, Captain!" translation="Darrere teu, cap!"/>
</cutscene>
<cutscene id="int1blue_1" explanation="">
<dialogue speaker="blue" english="Waaaa!" translation="Buàààà!" case="1"/>
<dialogue speaker="blue" english="Captain! Are you ok?" translation="Cap! Estàs bé?"/>
<dialogue speaker="player" english="I&apos;m ok... this... this isn&apos;t the ship..." translation="Estic bé... Però això...|no és la nau..."/>
<dialogue speaker="player" english="Where are we?" translation="On som?"/>
<dialogue speaker="blue" english="Waaaa!" translation="Buàààà!" case="2"/>
<dialogue speaker="player" english="Something&apos;s gone wrong... We should look for a way back!" translation="Alguna cosa no ha anat bé... Hem de cercar un camí de tornada!"/>
</cutscene>
<cutscene id="int1blue_2" explanation="">
<dialogue speaker="player" english="Follow me! I&apos;ll help you!" translation="Segueix-me! Tajudaré!"/>
<dialogue speaker="blue" english="Promise you won&apos;t leave without me!" translation="Promet-me que no te naniràs sense mi!"/>
<dialogue speaker="player" english="I promise! Don&apos;t worry!" translation="Tho prometo! No pateixis!"/>
</cutscene>
<cutscene id="int1blue_3" explanation="">
<dialogue speaker="player" english="Are you ok down there, Doctor?" translation="Va tot bé allà baix, doctora?"/>
<dialogue speaker="blue" english="I wanna go home!" translation="Men vull anar a casa!"/>
<dialogue speaker="blue" english="Where are we? How did we even get here?" translation="On som? Com se suposa que hi hem arribat?"/>
<dialogue speaker="player" english="Well, Violet did say that the interference in the dimension we crashed in was causing problems with the teleporters..." translation="Doncs... la Violeta deia que les interferències de la dimensió on ens hem estavellat causaven problemes amb els teletransportadors..."/>
<dialogue speaker="player" english="I guess something went wrong..." translation="Suposo que alguna cosa ha anat malament..."/>
<dialogue speaker="player" english="But if we can find another teleporter, I think we can get back to the ship!" translation="Però si trobem un altre teletransportador, suposo que podrem tornar a la nau!"/>
<dialogue speaker="blue" english="Sniff..." translation="Aiii..."/>
</cutscene>
<cutscene id="int1blue_4" explanation="the split paths merge">
<dialogue speaker="blue" english="Captain! Captain! Wait for me!" translation="Cap! Cap! Esperam!"/>
<dialogue speaker="blue" english="Please don&apos;t leave me behind! I don&apos;t mean to be a burden!" translation="No em deixis enrere!|No vull ser cap càrrega!"/>
<dialogue speaker="blue" english="I&apos;m scared!" translation="Tinc por!"/>
<dialogue speaker="player" english="Oh... don&apos;t worry Victoria, I&apos;ll look after you!" translation="Ah... No pateixis, Victòria, tindré cura de tu!"/>
</cutscene>
<cutscene id="int1blue_5" explanation="">
<dialogue speaker="blue" english="We&apos;re never going to get out of here, are we?" translation="No sortirem mai daquí, oi que no?"/>
<dialogue speaker="player" english="I.. I don&apos;t know..." translation="N... no ho sé..."/>
<dialogue speaker="player" english="I don&apos;t know where we are or how we&apos;re going to get out..." translation="No sé on som ni com nhem de sortir..."/>
</cutscene>
<cutscene id="int1blue_6" explanation="">
<dialogue speaker="blue" english="We&apos;re going to be lost forever!" translation="Acabarem perduts per sempre més!"/>
<dialogue speaker="player" english="Ok, come on... Things aren&apos;t that bad." translation="Au, va... Les coses no estan tan malament."/>
<dialogue speaker="player" english="I have a feeling that we&apos;re nearly home!" translation="Tinc la sensació que som a prop de casa!"/>
<dialogue speaker="player" english="We can&apos;t be too far from another teleporter!" translation="No podem ser gaire lluny dun altre teletransportador!"/>
<dialogue speaker="blue" english="I hope you&apos;re right, captain..." translation="Espero que tinguis raó, cap..."/>
</cutscene>
<cutscene id="int1blue_7" explanation="">
<dialogue speaker="blue" english="Captain! You were right! It&apos;s a teleporter!" translation="Cap! Tenies raó! Hi ha un teletransportador!"/>
<dialogue speaker="player" english="Phew! You had me worried for a while there... I thought we were never going to find one." translation="Buf! Ja patia, la veritat... Pensava que no en trobaríem mai cap."/>
<dialogue speaker="blue" english="What? Really?" translation="Què? De debò?"/>
<dialogue speaker="player" english="Anyway, let&apos;s go back to the ship." translation="En fi, tornem a la nau."/>
</cutscene>
<cutscene id="int1green_1" explanation="">
<dialogue speaker="green" english="Huh? This isn&apos;t the ship..." translation="Eh? Això no és la nau..."/>
<dialogue speaker="green" english="Captain! What&apos;s going on?" translation="Cap! Què passa?"/>
<dialogue speaker="player" english="I... I don&apos;t know!" translation="N... no ho sé!"/>
<dialogue speaker="player" english="Where are we?" translation="On som?"/>
<dialogue speaker="green" english="Uh oh, this isn&apos;t good... Something must have gone wrong with the teleporter!" translation="Caram, això no va bé...|El teletransportador devia tenir algun problema!"/>
<dialogue speaker="player" english="Ok... no need to panic!" translation="Dacord... Mantinguem la calma!"/>
<dialogue speaker="player" english="Let&apos;s look for another teleporter!" translation="Cerquem un altre teletransportador!"/>
</cutscene>
<cutscene id="int1green_2" explanation="">
<dialogue speaker="player" english="Let&apos;s go this way!" translation="Anem cap allà!"/>
<dialogue speaker="green" english="After you, Captain!" translation="Després de tu, cap!"/>
</cutscene>
<cutscene id="int1green_3" explanation="just like in rescuegreen, `Violet is back on the ship` does not mean she was ever off the ship and has *returned* to it. Or maybe Verdigris thinks Violet was warped off the ship as well just like him and she *has* made her way back to the ship?">
<dialogue speaker="green" english="So Violet&apos;s back on the ship? She&apos;s really ok?" translation="Així, la Violeta és a la nau? De debò que està bé?"/>
<dialogue speaker="player" english="She&apos;s fine! She helped me find my way back!" translation="I tant! Mha ajudat a trobar|el camí de tornada!"/>
<dialogue speaker="green" english="Oh, phew! I was worried about her." translation="Ah, uf! Patia per ella."/>
<dialogue speaker="green" english="Captain, I have a secret..." translation="Cap, tinc un secret..."/>
<dialogue speaker="green" english="I really like Violet!" translation="Magrada molt la Violeta!"/>
<dialogue speaker="player" english="Is that so?" translation="De debò?"/>
<dialogue speaker="green" english="Please promise you won&apos;t tell her!" translation="Promet-me que no li ho diràs!"/>
</cutscene>
<cutscene id="int1green_4" explanation="the split paths merge">
<dialogue speaker="green" english="Hey again!" translation="Ep!"/>
<dialogue speaker="player" english="Hey!" translation="Ei!"/>
<dialogue speaker="player" english="Are you doing ok?" translation="Va tot bé?"/>
<dialogue speaker="green" english="I think so! I really hope we can find a way back to the ship..." translation="Diria que sí! Espero que trobem|un camí cap a la nau..."/>
</cutscene>
<cutscene id="int1green_5" explanation="">
<dialogue speaker="green" english="So, about Violet..." translation="Daixò... Pel que fa a la Violeta..."/>
<dialogue speaker="player" english="Um, yeah?" translation="Eh... Sí?"/>
<dialogue speaker="green" english="Do you have any advice?" translation="Tens cap consell?"/>
<dialogue speaker="player" english="Oh!" translation="Ah!"/>
<dialogue speaker="player" english="Hmm..." translation="Hum..."/>
<dialogue speaker="player" english="Um... you should... be yourself!" translation="Doncs... hauries de...|ser tu mateix!"/>
<dialogue speaker="green" english="Oh." translation="Ah."/>
<dialogue speaker="green" english="Thanks Captain!" translation="Gràcies, cap!"/>
</cutscene>
<cutscene id="int1green_6" explanation="">
<dialogue speaker="player" english="So, do you think you&apos;ll be able to fix the ship?" translation="I què, creus que podràs|reparar la nau?"/>
<dialogue speaker="green" english="Depends on how bad it is... I think so, though!" translation="Depèn de com estigui de malament...|Però penso que sí!"/>
<dialogue speaker="green" english="It&apos;s not very hard, really. The basic dimensional warping engine design is pretty simple, and if we can get that working we shouldn&apos;t have any trouble getting home." translation="No és tan difícil, en realitat. El disseny bàsic del motor de salt dimensional és força simple,|i si aconseguim que això funcioni, no hauríem de tenir problemes per a arribar a casa."/>
<dialogue speaker="player" english="Oh! Good!" translation="Ah! Genial!"/>
</cutscene>
<cutscene id="int1green_7" explanation="">
<dialogue speaker="green" english="Finally! A teleporter!" translation="Per fi! Un teletransportador!"/>
<dialogue speaker="green" english="I was getting worried we wouldn&apos;t find one..." translation="Ja començava a pensar que no en trobaríem cap..."/>
<dialogue speaker="player" english="Let&apos;s head back to the ship!" translation="Tornem a la nau!"/>
</cutscene>
<cutscene id="int1red_1" explanation="">
<dialogue speaker="red" english="Wow! Where are we?" translation="Bufa! On som?"/>
<dialogue speaker="player" english="This... isn&apos;t right... Something must have gone wrong with the teleporter!" translation="Això... no va bé... El teletransportador devia tenir algun problema!"/>
<dialogue speaker="red" english="Oh well... We can work it out when we get back to the ship!" translation="Què hi farem... Ja ho investigarem quan tornem a la nau!"/>
<dialogue speaker="red" english="Let&apos;s go exploring!" translation="Som-hi, a explorar!"/>
<dialogue speaker="player" english="Ok then!" translation="Molt bé!"/>
</cutscene>
<cutscene id="int1red_2" explanation="">
<dialogue speaker="player" english="Follow me!" translation="Segueix-me!"/>
<dialogue speaker="red" english="Aye aye, Captain!" translation="Rebut, cap!"/>
</cutscene>
<cutscene id="int1red_3" explanation="">
<dialogue speaker="red" english="Hey Viridian... how did the crash happen, exactly?" translation="Ei, Viridis... Com és que ens vam estavellar, exactament?"/>
<dialogue speaker="player" english="Oh, I don&apos;t really know - some sort of interference..." translation="Ah, doncs no ho sé del cert... Només sé que per les interferències..."/>
<dialogue speaker="player" english="...or something sciencey like that. It&apos;s not really my area." translation="O per alguna cosa científica així... No és el meu fort, aquest tema."/>
<dialogue speaker="red" english="Ah! Well, do you think we&apos;ll be able to fix the ship and go home?" translation="Ah! Bé, i creus que podrem reparar la nau i tornar a casa?"/>
<dialogue speaker="player" english="Of course! Everything will be ok!" translation="És clar! Tot anirà bé!"/>
</cutscene>
<cutscene id="int1red_4" explanation="the split paths merge">
<dialogue speaker="red" english="Hi again! You doing ok?" translation="Ep! Va tot bé?"/>
<dialogue speaker="player" english="I think so! But I really want to get back to the ship..." translation="Crec que sí! Però tinc moltes ganes de tornar a la nau..."/>
<dialogue speaker="red" english="We&apos;ll be ok! If we can find a teleporter somewhere we should be able to get back!" translation="Ens en sortirem! Si aconseguim trobar un teletransportador en algun lloc, hauríem de poder tornar-hi!"/>
</cutscene>
<cutscene id="int1red_5" explanation="">
<dialogue speaker="red" english="Are we there yet?" translation="Falta gaire?"/>
<dialogue speaker="player" english="We&apos;re getting closer, I think..." translation="Ens hi estem acostant, em sembla..."/>
<dialogue speaker="player" english="I hope..." translation="Espero..."/>
</cutscene>
<cutscene id="int1red_6" explanation="">
<dialogue speaker="player" english="I wonder where we are, anyway?" translation="On devem ser, a tot això?"/>
<dialogue speaker="player" english="This seems different from that dimension we crashed in, somehow..." translation="No sé per què, però aquest lloc sembla diferent de la dimensió on ens vam estavellar..."/>
<dialogue speaker="red" english="I dunno... But we must be close to a teleporter by now..." translation="No sé... Però ara ja devem ser a prop dun teletransportador..."/>
</cutscene>
<cutscene id="int1red_7" explanation="">
<dialogue speaker="player" english="We&apos;re there!" translation="Ja hi som!"/>
<dialogue speaker="red" english="See? I told you! Let&apos;s get back to the ship!" translation="Ho veus? Tho he dit! Vinga, tornem a la nau!"/>
</cutscene>
<cutscene id="int1yellow_1" explanation="">
<dialogue speaker="yellow" english="Oooh! This is interesting..." translation="Oooh! Que interessant..."/>
<dialogue speaker="yellow" english="Captain! Have you been here before?" translation="Cap! Has estat mai aquí?"/>
<dialogue speaker="player" english="What? Where are we?" translation="Què? On som?"/>
<dialogue speaker="yellow" english="I suspect something deflected our teleporter transmission! This is somewhere new..." translation="Em sembla que alguna cosa ha desviat la transmissió del teletransportador! Aquest lloc és nou..."/>
<dialogue speaker="player" english="Oh no!" translation="Ostres, no!"/>
<dialogue speaker="player" english="We should try to find a teleporter and get back to the ship..." translation="Hauríem de mirar de trobar un teletransportador i tornar a la nau..."/>
</cutscene>
<cutscene id="int1yellow_2" explanation="">
<dialogue speaker="player" english="Follow me!" translation="Segueix-me!"/>
<dialogue speaker="yellow" english="Right behind you, Captain!" translation="Darrere teu, cap!"/>
</cutscene>
<cutscene id="int1yellow_3" explanation="">
<dialogue speaker="player" english="What do you make of all this, Professor?" translation="Què en penses, de|tot això, professor?"/>
<dialogue speaker="yellow" english="I&apos;m guessing this dimension has something to do with the interference that caused us to crash!" translation="Suposo que aquesta dimensió té|alguna cosa a veure amb les interferències que han causat que ens estavelléssim!"/>
<dialogue speaker="yellow" english="Maybe we&apos;ll find the cause of it here?" translation="Potser en trobarem la causa aquí?"/>
<dialogue speaker="player" english="Oh wow! Really?" translation="Ah, ostres! De debò?"/>
<dialogue speaker="yellow" english="Well, it&apos;s just a guess. I&apos;ll need to get back to the ship before I can do any real tests..." translation="Bé, només és una suposició. Necessito tornar a la nau abans de poder fer cap experiment real..."/>
</cutscene>
<cutscene id="int1yellow_4" explanation="the split paths merge, and Vitellary sees a checkpoint">
<dialogue speaker="yellow" english="Ohh! What was that?" translation="Oooh! Què és, això?"/>
<dialogue speaker="player" english="What was what?" translation="Què és, això?"/>
<dialogue speaker="yellow" english="That big... C thing! I wonder what it does?" translation="Aquesta cosa grossa... amb una C! Què deu fer?"/>
<dialogue speaker="player" english="Em... I don&apos;t really know how to answer that question..." translation="Eh... No sé com respondre a la teva qüestió..."/>
<dialogue speaker="player" english="It&apos;s probably best not to acknowledge that it&apos;s there at all." translation="Segurament és millor que fem veure que no existeix."/>
<dialogue speaker="yellow" english="Maybe we should take it back to the ship to study it?" translation="Ens la podríem emportar a la nau i estudiar-la!"/>
<dialogue speaker="player" english="We really shouldn&apos;t think about it too much... Let&apos;s keep moving!" translation="No hi hauríem de pensar pas gaire... Vinga, som-hi!"/>
</cutscene>
<cutscene id="int1yellow_5" explanation="">
<dialogue speaker="yellow" english="You know, there&apos;s something really odd about this dimension..." translation="Saps? Hi ha una cosa molt estranya en aquesta dimensió..."/>
<dialogue speaker="player" english="Yeah?" translation="Què vols dir?"/>
<dialogue speaker="yellow" english="We shouldn&apos;t really be able to move between dimensions with a regular teleporter..." translation="No ens hauríem de poder moure entre dimensions amb un teletransportador normal..."/>
<dialogue speaker="yellow" english="Maybe this isn&apos;t a proper dimension at all?" translation="Potser no és una dimensió com a tal?"/>
<dialogue speaker="yellow" english="Maybe it&apos;s some kind of polar dimension? Something artificially created for some reason?" translation="Potser és alguna mena de dimensió polar? Alguna cosa creada artificialment per algun motiu..."/>
<dialogue speaker="yellow" english="I can&apos;t wait to get back to the ship. I have a lot of tests to run!" translation="Em moro de ganes de tornar a la nau. Hi he de fer un munt dexperiments!"/>
</cutscene>
<cutscene id="int1yellow_6" explanation="">
<dialogue speaker="yellow" english="I wonder if there&apos;s anything else in this dimension worth exploring?" translation="Hi deu haver alguna altra cosa daquesta dimensió que pagui la pena dexplorar?"/>
<dialogue speaker="player" english="Maybe... but we should probably just focus on finding the rest of the crew for now..." translation="Potser... Però segurament només ens hauríem de centrar a trobar la resta de la tripulació, ara mateix..."/>
</cutscene>
<cutscene id="int1yellow_7" explanation="">
<dialogue speaker="yellow" english="At last!" translation="Per fi!"/>
<dialogue speaker="yellow" english="Let&apos;s go back to the ship!" translation="Tornem a la nau!"/>
</cutscene>
<cutscene id="intermission_2" explanation="">
<dialogue speaker="player" english="Uh oh..." translation="Ups..."/>
<dialogue speaker="player" english="Not again!" translation="Una altra vegada no!"/>
</cutscene>
<cutscene id="int2intro_blue" explanation="">
<dialogue speaker="player" english="Victoria? Where are you?" translation="Victòria? On ets?"/>
<dialogue speaker="blue" english="Help!" translation="Ajuda!"/>
<dialogue speaker="player" english="Hang on! I&apos;ll save you!" translation="Resisteix! Et salvaré!"/>
</cutscene>
<cutscene id="int2intro_green" explanation="">
<dialogue speaker="player" english="Verdigris? Where are you?" translation="Verdet? On ets?"/>
<dialogue speaker="green" english="Aaagghh!" translation="Aaaahhh!"/>
<dialogue speaker="player" english="Hang on! I&apos;ll save you!" translation="Resisteix! Et salvaré!"/>
</cutscene>
<cutscene id="int2intro_red" explanation="">
<dialogue speaker="player" english="Vermilion? Where are you?" translation="Vermelló? On ets?"/>
<dialogue speaker="red" english="Wheeeee!" translation="Wiiiiiii!"/>
<dialogue speaker="player" english="Hang on! I&apos;ll save you!" translation="Resisteix! Et salvaré!"/>
</cutscene>
<cutscene id="int2intro_yellow" explanation="">
<dialogue speaker="player" english="Vitellary? Where are you?" translation="Vitel·lí? On ets?"/>
<dialogue speaker="yellow" english="Captain!" translation="Cap!"/>
<dialogue speaker="player" english="Hang on! I&apos;ll save you!" translation="Resisteix! Et salvaré!"/>
</cutscene>
<cutscene id="int2_blue" explanation="after gravitron">
<dialogue speaker="blue" english="I think I&apos;m going to be sick..." translation="Em sembla que em posaré malalta..."/>
<dialogue speaker="player" english="I feel dizzy..." translation="Quin mareig..."/>
</cutscene>
<cutscene id="int2_green" explanation="after gravitron">
<dialogue speaker="green" english="Phew! You&apos;re ok!" translation="Buf! Estàs bé!"/>
<dialogue speaker="player" english="I feel dizzy..." translation="Quin mareig..."/>
</cutscene>
<cutscene id="int2_red" explanation="after gravitron">
<dialogue speaker="red" english="Again! Let&apos;s go again!" translation="Una altra vegada! Tornem-hi!"/>
<dialogue speaker="player" english="I feel dizzy..." translation="Quin mareig..."/>
</cutscene>
<cutscene id="int2_yellow" explanation="after gravitron">
<dialogue speaker="yellow" english="That was interesting, wasn&apos;t it?" translation="Ha estat interessant, oi?"/>
<dialogue speaker="player" english="I feel dizzy..." translation="Quin mareig..."/>
</cutscene>
<cutscene id="talkpurple_1" explanation="">
<dialogue speaker="purple" english="... I hope Verdigris is alright." translation="Espero que en Verdet estigui bé..."/>
<dialogue speaker="purple" english="If you can find him, he&apos;d be a big help fixing the ship!" translation="Si aconseguissis trobar-lo, seria de gran ajuda a lhora|de reparar la nau!"/>
</cutscene>
<cutscene id="talkpurple_2" explanation="">
<dialogue speaker="purple" english="Chief Verdigris is so brave and ever so smart!" translation="Lenginyer en cap Verdet és valent i intel·ligent alhora!"/>
</cutscene>
<cutscene id="talkpurple_4" explanation="">
<dialogue speaker="purple" english="Welcome back, Captain!" translation="Tornes a ser aquí, cap!"/>
<dialogue speaker="purple" english="I think Victoria is quite happy to be back on the ship." translation="Em sembla que la Victòria està força contenta de tornar a ser a la nau."/>
<dialogue speaker="purple" english="She really doesn&apos;t like adventuring. She gets very homesick!" translation="No li agrada gens anar daventures. Senyora molt fàcilment!"/>
</cutscene>
<cutscene id="talkpurple_5" explanation="only one of the last 6 strings is shown">
<dialogue speaker="purple" english="Vermilion called in to say hello!" translation="En Vermelló tenvia salutacions!"/>
<dialogue speaker="purple" english="He&apos;s really looking forward to helping you find the rest of the crew!" translation="Té moltes ganes dajudar-te a trobar la resta de la tripulació!"/>
<dialogue speaker="purple" english="He&apos;s really looking forward to helping you find Victoria!" translation="Té moltes ganes dajudar-te a trobar la Victòria!"/>
<dialogue speaker="purple" english="He&apos;s really looking forward to helping you find Vitellary!" translation="Té moltes ganes dajudar-te a trobar en Vitel·lí!"/>
<dialogue speaker="purple" english="He&apos;s really looking forward to helping you find Verdigris!" translation="Té moltes ganes dajudar-te a trobar en Verdet!"/>
<dialogue speaker="purple" english="He&apos;s really looking forward to helping you find Vermilion!" translation="Té moltes ganes dajudar-te a trobar en Vermelló!"/>
<dialogue speaker="purple" english="He&apos;s really looking forward to helping you find you!" translation="Té moltes ganes dajudar-te|a trobar-te!"/>
</cutscene>
<cutscene id="talkpurple_6" explanation="">
<dialogue speaker="purple" english="Captain! You found Verdigris!" translation="Cap! Has trobat en Verdet!"/>
<dialogue speaker="purple" english="Thank you so much!" translation="Moltes gràcies!"/>
</cutscene>
<cutscene id="talkpurple_7" explanation="">
<dialogue speaker="purple" english="I&apos;m glad Professor Vitellary is ok!" translation="Malegro que el professor Vitel·lí estigui bé!"/>
<dialogue speaker="purple" english="He had lots of questions for me about this dimension." translation="Em volia fer un munt de qüestions sobre aquesta dimensió."/>
<dialogue speaker="purple" english="He&apos;s already gotten to work with his research!" translation="Ja sha posat a investigar!"/>
</cutscene>
<cutscene id="talkpurple_intermission1" explanation="">
<dialogue speaker="player" english="Doctor, something strange happened when we teleported back to the ship..." translation="Doctora, ha passat una cosa estranya quan ens hem teletransportat a la nau..."/>
<dialogue speaker="player" english="We got lost in another dimension!" translation="Ens hem perdut en una altra dimensió!"/>
<dialogue speaker="purple" english="Oh no!" translation="Ostres, no!"/>
<dialogue speaker="purple" english="Maybe that dimension has something to do with the interference that caused us to crash here?" translation="Potser aquella dimensió té alguna cosa a veure amb les interferències que han causat que ens estavelléssim aquí?"/>
<dialogue speaker="purple" english="I&apos;ll look into it..." translation="Ho investigaré..."/>
</cutscene>
<cutscene id="talkpurple_intermission2" explanation="">
<dialogue speaker="player" english="Doctor! Doctor! It happened again!" translation="Doctora, doctora! Ha tornat a passar!"/>
<dialogue speaker="player" english="The teleporter brought us to that weird dimension..." translation="El teletransportador ens ha portat a aquella dimensió estranya..."/>
<dialogue speaker="purple" english="Hmm, there&apos;s definitely something strange happening..." translation="Hum... Sens dubte, passa alguna cosa estranya..."/>
<dialogue speaker="purple" english="If only we could find the source of that interference!" translation="Tant de bo trobéssim lorigen de les interferències!"/>
</cutscene>
<cutscene id="talkpurple_intermission3" explanation="">
<dialogue speaker="player" english="Doctor, something strange has been happening when we teleport back to the ship..." translation="Doctora, quan ens teletransportem a la nau, passen coses estranyes..."/>
<dialogue speaker="player" english="We keep getting brought to another weird dimension!" translation="Sempre ens acaba portant a una altra dimensió estranya!"/>
<dialogue speaker="purple" english="Oh no!" translation="Ostres, no!"/>
<dialogue speaker="purple" english="Maybe that dimension has something to do with the interference that caused us to crash here?" translation="Potser aquella dimensió té alguna cosa a veure amb les interferències que han causat que ens estavelléssim aquí?"/>
<dialogue speaker="purple" english="Hmm, there&apos;s definitely something strange happening..." translation="Hum... Sens dubte, passa alguna cosa estranya..."/>
<dialogue speaker="purple" english="If only we could find the source of that interference!" translation="Tant de bo trobéssim lorigen de les interferències!"/>
</cutscene>
<cutscene id="talkpurple_8" explanation="">
<dialogue speaker="purple" english="Hey Captain! Now that you&apos;ve turned off the source of the interference, we can warp everyone back to the ship instantly, if we need to!" translation="Ei, cap! Ara que has desactivat lorigen de les interferències, podem teletransportar tothom a la nau instantàniament, si cal!"/>
<dialogue speaker="purple" english="Any time you want to come back to the ship, just select the new SHIP option in your menu!" translation="Si en algun moment vols tornar a la nau, selecciona la nova opció NAU al menú!"/>
</cutscene>
<cutscene id="talkgreen_1" explanation="">
<dialogue speaker="green" english="I&apos;m an engineer!" translation="Sóc enginyer!"/>
</cutscene>
<cutscene id="talkgreen_2" explanation="">
<dialogue speaker="green" english="I think I can get this ship moving again, but it&apos;s going to take a while..." translation="Em sembla que podré aconseguir que la nau es torni a moure, però em costarà una bona estona..."/>
</cutscene>
<cutscene id="talkgreen_3" explanation="">
<dialogue speaker="green" english="Victoria mentioned something about a lab? I wonder if she found anything down there?" translation="La Victòria parlava dun laboratori o una cosa així? Potser hi ha trobat alguna cosa, allà baix?"/>
</cutscene>
<cutscene id="talkgreen_4" explanation="">
<dialogue speaker="green" english="Vermilion&apos;s back! Yey!" translation="En Vermelló ha tornat! Visca!"/>
</cutscene>
<cutscene id="talkgreen_5" explanation="">
<dialogue speaker="green" english="The Professor had lots of questions about this dimension for me..." translation="El professor em volia fer un munt de qüestions sobre aquesta dimensió..."/>
<dialogue speaker="green" english="We still don&apos;t really know that much, though." translation="Però encara no en sabem gaire cosa."/>
<dialogue speaker="green" english="Until we work out what&apos;s causing that interference, we can&apos;t go anywhere." translation="Fins que no descobrim què causa les interferències, no podrem anar enlloc."/>
</cutscene>
<cutscene id="talkgreen_6" explanation="">
<dialogue speaker="green" english="I&apos;m so glad that Violet&apos;s alright!" translation="Malegro molt que la Violeta estigui bé!"/>
</cutscene>
<cutscene id="talkgreen_7" explanation="">
<dialogue speaker="green" english="That other dimension we ended up in must be related to this one, somehow..." translation="Laltra dimensió on havíem anat a parar deu estar relacionada amb aquesta dalguna manera..."/>
</cutscene>
<cutscene id="talkgreen_8" explanation="">
<dialogue speaker="green" english="The antenna&apos;s broken! This is going to be very hard to fix..." translation="Lantena està trencada! Això costarà molt de reparar..."/>
</cutscene>
<cutscene id="talkgreen_9" explanation="">
<dialogue speaker="green" english="It looks like we were warped into solid rock when we crashed!" translation="Sembla com si ens haguéssim teletransportat enmig de roca sòlida en estavellar-nos!"/>
<dialogue speaker="green" english="Hmm. It&apos;s going to be hard to separate from this..." translation="Hum... Costarà separar-nos-en..."/>
</cutscene>
<cutscene id="talkgreen_10" explanation="">
<dialogue speaker="green" english="The ship&apos;s all fixed up. We can leave at a moment&apos;s notice!" translation="La nau ja està tota reparada. Podem anar-nos-en en un tres i no res!"/>
</cutscene>
<cutscene id="talkred_1" explanation="">
<dialogue speaker="red" english="Don&apos;t worry, Sir!" translation="No pateixis!"/>
<dialogue speaker="red" english="We&apos;ll find a way out of here!" translation="Trobarem una manera de sortir daquí!"/>
</cutscene>
<cutscene id="talkred_2" explanation="">
<dialogue speaker="red" english="I hope Victoria is ok..." translation="Espero que la Victòria estigui bé..."/>
<dialogue speaker="red" english="She doesn&apos;t handle surprises very well..." translation="No li agraden gaire les sorpreses..."/>
</cutscene>
<cutscene id="talkred_3" explanation="">
<dialogue speaker="red" english="I don&apos;t know how we&apos;re going to get this ship working again!" translation="No sé pas com farem que la nau torni a funcionar!"/>
<dialogue speaker="red" english="Chief Verdigris would know what to do..." translation="Lenginyer en cap Verdet sabria què fer..."/>
</cutscene>
<cutscene id="talkred_4" explanation="">
<dialogue speaker="red" english="I wonder what caused the ship to crash here?" translation="Què devia fer que la nau sestavellés aquí?"/>
<dialogue speaker="red" english="It&apos;s the shame the Professor isn&apos;t here, huh? I&apos;m sure he could work it out!" translation="És una llàstima que el professor no hi sigui, eh? Segur que ell ho esbrinaria!"/>
</cutscene>
<cutscene id="talkred_5" explanation="">
<dialogue speaker="red" english="It&apos;s great to be back!" translation="És genial tornar a ser aquí!"/>
<dialogue speaker="red" english="I can&apos;t wait to help you find the rest of the crew!" translation="Em moro de ganes dajudar-te a trobar la resta de tripulants!"/>
<dialogue speaker="red" english="It&apos;ll be like old times, huh, Captain?" translation="Serà com als vells temps, oi, cap?"/>
</cutscene>
<cutscene id="talkred_6" explanation="">
<dialogue speaker="red" english="It&apos;s good to have Victoria back with us." translation="És genial que la Victòria torni a ser amb nosaltres."/>
<dialogue speaker="red" english="She really seems happy to get back to work in her lab!" translation="Sembla molt feliç de poder tornar a treballar al seu laboratori!"/>
</cutscene>
<cutscene id="talkred_7" explanation="">
<dialogue speaker="red" english="I think I saw Verdigris working on the outside of the ship!" translation="Em sembla que he vist en Verdet treballant a la part exterior de la nau!"/>
</cutscene>
<cutscene id="talkred_8" explanation="">
<dialogue speaker="red" english="You found Professor Vitellary! All right!" translation="Has trobat el professor Vitel·lí! Molt bé!"/>
<dialogue speaker="red" english="We&apos;ll have this interference thing worked out in no time now!" translation="Ara resoldre el tema de les interferències serà bufar i fer ampolles!"/>
</cutscene>
<cutscene id="talkred_9" explanation="">
<dialogue speaker="red" english="That other dimension was really strange, wasn&apos;t it?" translation="Aquella altra dimensió era ben estranya, eh?"/>
<dialogue speaker="red" english="I wonder what caused the teleporter to send us there?" translation="Per què el teletransportador ens va enviar allà?"/>
</cutscene>
<cutscene id="talkred_10" explanation="">
<dialogue speaker="red" english="Heya Captain!" translation="Iep, cap!"/>
<dialogue speaker="red" english="This way looks a little dangerous..." translation="Aquest camí sembla una mica perillós..."/>
</cutscene>
<cutscene id="talkred_11" explanation="">
<dialogue speaker="red" english="I&apos;m helping!" translation="Testic ajudant!"/>
</cutscene>
<cutscene id="talkred_12" explanation="">
<dialogue speaker="red" english="Hey Captain!" translation="Ei, cap!"/>
<dialogue speaker="red" english="I found something interesting around here - the same warp signature I saw when I landed!" translation="En aquesta zona he trobat una cosa interessant: les mateixes formes derivades dun teletransport que vaig veure quan vaig aterrar!"/>
<dialogue speaker="red" english="Someone from the ship must be nearby..." translation="Hi ha dhaver algú de la nau a prop..."/>
</cutscene>
<cutscene id="talkred_13" explanation="">
<dialogue speaker="red" english="This dimension is pretty exciting, isn&apos;t it?" translation="Aquesta dimensió és força emocionant, oi?"/>
<dialogue speaker="red" english="I wonder what we&apos;ll find?" translation="Què hi trobarem?"/>
</cutscene>
<cutscene id="talkblue_1" explanation="">
<dialogue speaker="blue" english="Any signs of Professor Vitellary?" translation="Hi ha cap senyal del professor Vitel·lí?"/>
<dialogue speaker="player" english="Sorry, not yet..." translation="Em sap greu, però de moment, no..."/>
<dialogue speaker="blue" english="I hope he&apos;s ok..." translation="Espero que estigui bé..."/>
</cutscene>
<cutscene id="talkblue_2" explanation="">
<dialogue speaker="blue" english="Thanks so much for saving me, Captain!" translation="Moltes gràcies per salvar-me, cap!"/>
</cutscene>
<cutscene id="talkblue_3" explanation="">
<dialogue speaker="blue" english="I&apos;m so glad to be back!" translation="Malegro molt de tornar a ser aquí!"/>
<dialogue speaker="blue" english="That lab was so dark and scary! I didn&apos;t like it at all..." translation="Aquell laboratori era fosc i feia por! No magradava gens..."/>
</cutscene>
<cutscene id="talkblue_4" explanation="">
<dialogue speaker="blue" english="Vitellary&apos;s back? I knew you&apos;d find him!" translation="En Vitel·lí torna a ser aquí? Sabia que el trobaries!"/>
<dialogue speaker="blue" english="I mean, I admit I was very worried that you wouldn&apos;t..." translation="Tot i que he dadmetre que tenia molta por que no el trobessis..."/>
<dialogue speaker="blue" english="or that something might have happened to him..." translation="O que li hagués passat|alguna cosa..."/>
<dialogue speaker="blue" english="sniff..." translation="Aix..."/>
<dialogue speaker="player" english="Doctor Victoria? He&apos;s ok!" translation="Doctora Victòria... Que està bé!"/>
<dialogue speaker="blue" english="Oh! Sorry! I was just thinking about what if he wasn&apos;t?" translation="Ah, perdona! És que pensava en què passaria si no ho estigués!"/>
<dialogue speaker="blue" english="Thank you, Captain!" translation="Gràcies, cap!"/>
</cutscene>
<cutscene id="talkblue_5" explanation="">
<dialogue speaker="blue" english="You found Vermilion! Great!" translation="Has trobat en Vermelló! Genial!"/>
<dialogue speaker="blue" english="I wish he wasn&apos;t so reckless!" translation="Tant de bo no fos tan imprudent!"/>
<dialogue speaker="blue" english="He&apos;ll get himself into trouble..." translation="Sempre es fica en problemes..."/>
</cutscene>
<cutscene id="talkblue_6" explanation="">
<dialogue speaker="blue" english="Verdigris is ok! Violet will be so happy!" translation="En Verdet està bé! La Violeta es posarà molt contenta!"/>
<dialogue speaker="blue" english="I&apos;m happy!" translation="Estic feliç!"/>
<dialogue speaker="blue" english="Though I was very worried..." translation="Tot i que patia molt..."/>
</cutscene>
<cutscene id="talkblue_7" explanation="">
<dialogue speaker="blue" english="Why did the teleporter send us to that scary dimension?" translation="Per què el teletransportador ens ha enviat a aquella dimensió tan espantosa?"/>
<dialogue speaker="blue" english="What happened?" translation="Què ha passat?"/>
<dialogue speaker="player" english="I don&apos;t know, Doctor..." translation="No ho sé, doctora..."/>
<dialogue speaker="blue" english="Why?" translation="Per què?"/>
</cutscene>
<cutscene id="talkblue_8" explanation="">
<dialogue speaker="blue" english="Heya Captain!" translation="Ei, cap!"/>
<dialogue speaker="blue" english="Are you going to try and find the rest of these shiny things?" translation="Miraràs de trobar la resta daquestes coses brillants?"/>
</cutscene>
<cutscene id="talkblue_trinket1" explanation="">
<dialogue speaker="blue" english="Hey Captain, I found this in that lab..." translation="Ei, cap, he trobat això en aquell laboratori..."/>
<dialogue speaker="blue" english="Any idea what it does?" translation="Tens cap idea de per a què serveix?"/>
<dialogue speaker="player" english="Sorry, I don&apos;t know!" translation="Em sap greu, però no ho sé!"/>
<dialogue speaker="player" english="They seem important, though..." translation="Semblen importants, però..."/>
<dialogue speaker="player" english="Maybe something will happen if we find them all?" translation="Potser passarà alguna cosa si els trobem tots?"/>
</cutscene>
<cutscene id="talkblue_trinket2" explanation="">
<dialogue speaker="blue" english="Captain! Come have a look at what I&apos;ve been working on!" translation="Cap! Mira en què he estat treballant!"/>
<dialogue speaker="blue" english="It looks like these shiny things are giving off a strange energy reading!" translation="Sembla que aquelles coses brillants tenen unes lectures denergia estranyes!"/>
<dialogue speaker="blue" english="So I analysed it..." translation="Així que ho he analitzat..."/>
</cutscene>
<cutscene id="talkblue_trinket3" explanation="">
<dialogue speaker="blue" english="Captain! Come have a look at what I&apos;ve been working on!" translation="Cap! Mira en què he estat treballant!"/>
<dialogue speaker="blue" english="I found this in that lab..." translation="He trobat això en aquell laboratori..."/>
<dialogue speaker="blue" english="It seemed to be giving off a weird energy reading..." translation="Tenia unes lectures denergia estranyes..."/>
<dialogue speaker="blue" english="So I analysed it..." translation="Així que ho he analitzat..."/>
</cutscene>
<cutscene id="talkblue_trinket4" explanation="">
<dialogue speaker="blue" english="...and I was able to find more of them with the ship&apos;s scanner!" translation="...i nhe descobert més amb lescàner de la nau!"/>
<dialogue speaker="blue" english="If you get a chance, it might be worth finding the rest of them!" translation="Si tés possible, potser estaria|bé trobar-ne la resta!"/>
<dialogue speaker="blue" english="Don&apos;t put yourself in any danger, though!" translation="Però no et posis en perill, eh?"/>
</cutscene>
<cutscene id="talkblue_trinket5" explanation="">
<dialogue speaker="blue" english="...but it looks like you&apos;ve already found all of them in this dimension!" translation="...però sembla que ja les has trobades totes en aquesta dimensió!"/>
<dialogue speaker="player" english="Oh? Really?" translation="Ah, sí? De debò?"/>
<dialogue speaker="blue" english="Yeah, well done! That can&apos;t have been easy!" translation="Sí, molt ben fet! Segur que no ha estat fàcil!"/>
</cutscene>
<cutscene id="talkblue_trinket6" explanation="">
<dialogue speaker="blue" english="...and they&apos;re related. They&apos;re all a part of something bigger!" translation="...i estan relacionades. Són part duna cosa més grossa!"/>
<dialogue speaker="player" english="Oh? Really?" translation="Ah, sí? De debò?"/>
<dialogue speaker="blue" english="Yeah! There seem to be twenty variations of the fundamental energy signature..." translation="Sí! Sembla que hi ha vint variacions de la signatura denergia fonamental..."/>
<dialogue speaker="blue" english="Wait..." translation="Un moment..."/>
<dialogue speaker="blue" english="Does that mean you&apos;ve found all of them?" translation="Això vol dir que les has trobades totes?"/>
</cutscene>
<cutscene id="talkyellow_1" explanation="">
<dialogue speaker="yellow" english="I&apos;m making some fascinating discoveries, captain!" translation="Estic fent uns descobriments fascinants, cap!"/>
</cutscene>
<cutscene id="talkyellow_2" explanation="">
<dialogue speaker="yellow" english="This isn&apos;t like any other dimension we&apos;ve been to, Captain." translation="Aquesta dimensió no és com les altres on hem estat, cap."/>
<dialogue speaker="yellow" english="There&apos;s something strange about this place..." translation="Aquest lloc és estrany, per algun motiu..."/>
</cutscene>
<cutscene id="talkyellow_3" explanation="">
<dialogue speaker="yellow" english="Captain, have you noticed that this dimension seems to wrap around?" translation="Cap, thas adonat que aquesta dimensió sembla que sigui cíclica? Quan en surts per un costat, apareixes per laltre."/>
<dialogue speaker="player" english="Yeah, it&apos;s strange..." translation="Sí, és estrany..."/>
<dialogue speaker="yellow" english="It looks like this dimension is having the same stability problems as our own!" translation="Sembla com si aquesta dimensió tingués els mateixos problemes destabilitat que nosaltres!"/>
<dialogue speaker="yellow" english="I hope we&apos;re not the ones causing it..." translation="Espero que no en siguem|els causants..."/>
<dialogue speaker="player" english="What? Do you think we might be?" translation="Què? Creus que podem ser-ho?"/>
<dialogue speaker="yellow" english="No no... that&apos;s very unlikely, really..." translation="No, no... És molt improbable, de fet..."/>
</cutscene>
<cutscene id="talkyellow_4" explanation="">
<dialogue speaker="yellow" english="My guess is that whoever used to live here was experimenting with ways to stop the dimension from collapsing." translation="Suposo que qui fos que vivia aquí experimentava amb maneres de fer que la dimensió no sesfondrés."/>
<dialogue speaker="yellow" english="It would explain why they&apos;ve wrapped the edges..." translation="Això explicaria per què les vores esdevenen cícliques..."/>
<dialogue speaker="yellow" english="Hey, maybe that&apos;s what&apos;s causing the interference?" translation="Escolta, potser és això, el que causa les interferències?"/>
</cutscene>
<cutscene id="talkyellow_5" explanation="">
<dialogue speaker="yellow" english="I wonder where the people who used to live here have gone?" translation="On deu haver anat, la gent que vivia aquí?"/>
</cutscene>
<cutscene id="talkyellow_6" explanation="">
<dialogue speaker="yellow" english="I think it&apos;s no coincidence that the teleporter was drawn to that dimension..." translation="Em penso que no és cap coincidència que el teletransportador anés a parar a aquella dimensió..."/>
<dialogue speaker="yellow" english="There&apos;s something there. I think it might be causing the interference that&apos;s stopping us from leaving..." translation="Allà hi ha alguna cosa. Potser és el que causa les interferències que no ens permeten anar-nos-en..."/>
</cutscene>
<cutscene id="talkyellow_7" explanation="">
<dialogue speaker="yellow" english="I&apos;m glad Verdigris is alright." translation="Malegro que en Verdet estigui bé."/>
<dialogue speaker="yellow" english="It&apos;ll be a lot easier to find some way out of here now that we can get the ship working again!" translation="Ara que podem fer que la nau torni a funcionar, serà molt més fàcil trobar una manera de sortir daquí!"/>
</cutscene>
<cutscene id="talkyellow_8" explanation="">
<dialogue speaker="yellow" english="Ah, you&apos;ve found Doctor Victoria? Excellent!" translation="Ah, has trobat la doctora Victòria? Excel·lent!"/>
<dialogue speaker="yellow" english="I have lots of questions for her!" translation="Li he de fer un munt de qüestions!"/>
</cutscene>
<cutscene id="talkyellow_9" explanation="">
<dialogue speaker="yellow" english="Vermilion says that he was trapped in some sort of tunnel?" translation="En Vermelló diu que estava atrapat en una mena de túnel?"/>
<dialogue speaker="player" english="Yeah, it just seemed to keep going and going..." translation="Sí, sembla que es repetia una vegada rere laltra..."/>
<dialogue speaker="yellow" english="Interesting... I wonder why it was built?" translation="Interessant... Per què el devien construir?"/>
</cutscene>
<cutscene id="talkyellow_10" explanation="">
<dialogue speaker="yellow" english="It&apos;s good to be back!" translation="Malegro de tornar a ser aquí!"/>
<dialogue speaker="yellow" english="I&apos;ve got so much work to catch up on..." translation="Tinc molta feina pendent..."/>
</cutscene>
<cutscene id="talkyellow_11" explanation="">
<dialogue speaker="yellow" english="I know it&apos;s probably a little dangerous to stay here now that this dimension is collapsing..." translation="Suposo que és una mica perillós estar-nos aquí ara que la dimensió sestà esfondrant..."/>
<dialogue speaker="yellow" english="...but it&apos;s so rare to find somewhere this interesting!" translation="Però és molt poc habitual trobar|un lloc tan interessant!"/>
<dialogue speaker="yellow" english="Maybe we&apos;ll find the answers to our own problems here?" translation="Potser hi trobarem les respostes als nostres propis problemes?"/>
</cutscene>
<cutscene id="talkyellow_trinket1" explanation="">
<dialogue speaker="yellow" english="Captain! I&apos;ve been meaning to give this to you..." translation="Cap! Feia temps que et volia donar això..."/>
<dialogue speaker="player" english="Professor! Where did you find this?" translation="Professor! On ho has trobat?"/>
<dialogue speaker="yellow" english="Oh, it was just lying around that space station." translation="Ah, era en aquella estació espacial."/>
<dialogue speaker="yellow" english="It&apos;s a pity Doctor Victoria isn&apos;t here, she loves studying that sort of thing..." translation="És una llàstima que no hi hagi la doctora Victòria. Li encanta estudiar aquesta mena de coses..."/>
<dialogue speaker="player" english="Any idea what it does?" translation="Tens cap idea de per a què serveixen?"/>
<dialogue speaker="yellow" english="Nope! But it is giving off a strange energy reading..." translation="No! Però tenen unes lectures denergia estranyes..."/>
</cutscene>
<cutscene id="talkyellow_trinket2" explanation="">
<dialogue speaker="yellow" english="...so I used the ship&apos;s scanner to find more of them!" translation="...així que he fet servir lescàner de la nau per a trobar-ne més!"/>
<dialogue speaker="yellow" english="...Please don&apos;t let them distract you from finding Victoria, though!" translation="Però... que no et distreguin de trobar la Victòria, dacord?"/>
<dialogue speaker="yellow" english="I hope she&apos;s ok..." translation="Espero que estigui bé..."/>
</cutscene>
<cutscene id="talkyellow_trinket3" explanation="">
<dialogue speaker="yellow" english="Can&apos;t seem to detect any more of them nearby, though." translation="Sembla que no en detecto|cap més a prop."/>
<dialogue speaker="yellow" english="Maybe you&apos;ve found them all?" translation="Potser ja les has trobades totes?"/>
</cutscene>
<cutscene id="finallevel_teleporter" explanation="">
<dialogue speaker="purple" english="Welcome back!" translation="Que bé que tornis a ser aquí!"/>
<dialogue speaker="purple" english="..." translation="..."/>
<dialogue speaker="purple" english="Um, where&apos;s Captain Viridian?" translation="Daixò... Cap Viridis, on ets?"/>
<dialogue speaker="player" english="... Hello?" translation="Hola...?"/>
<dialogue speaker="player" english="Is anyone there?" translation="Que hi ha algú?"/>
</cutscene>
<cutscene id="terminal_finallevel" explanation="">
<dialogue speaker="gray" english="* DIMENSIONAL STABILITY GENERATOR *
[ Currently Generating ]
Maximum Stability
[ Status ]
Online
READY _" translation="*** GENERADOR DESTABILITAT ***
DIMENSIONAL
[ Actualment sestà generant ]
Estabilitat màxima
[ Estat ]
Activat
A PUNT _" tt="1"/>
<dialogue speaker="cyan" english="Aha! This must be what&apos;s causing the interference!" translation="Ahà! Això deu ser el que causa les interferències!"/>
<dialogue speaker="cyan" english="I wonder if I can turn it off?" translation="Potser el podria apagar?"/>
<dialogue speaker="gray" english="WARNING: Disabling the Dimensional Stability Generator may lead to instability! Are you sure you want to do this?" translation="ADVERTIMENT: Si desactiveu el generador destabilitat dimensional, podeu generar inestabilitat!|Segur que voleu fer això?"/>
<dialogue speaker="cyan" english="Yes!" translation="Sí!" case="1"/>
<dialogue speaker="gray" english="Seriously! The whole dimension could collapse! Just think about this for a minute!
Are you really sure you want to do this?" translation="Ara de debò! La dimensió sencera es podria esfondrar! Penseu-hi durant uns minuts!
Segur que voleu fer això?"/>
<dialogue speaker="cyan" english="Yes!" translation="Sí!" case="2"/>
</cutscene>
<cutscene id="finalterminal_finish" explanation="">
<dialogue speaker="gray" english="-= WARNING =-
DIMENSIONAL STABILISER OFFLINE" translation="-= ADVERTIMENT =-
ESTABILITZADOR DIMENSIONAL DESCONNECTAT" centertext="1" pad="1"/>
<dialogue speaker="cyan" english="Uh oh..." translation="Ups..."/>
</cutscene>
<cutscene id="gamecomplete" explanation="">
<dialogue speaker="yellow" english="Any moment now..." translation="Hauria daparèixer en qualsevol moment..."/>
</cutscene>
<cutscene id="gamecomplete_ending" explanation="">
<dialogue speaker="player" english="Hello!" translation="Ep!"/>
<dialogue speaker="purple" english="Captain!" translation="Cap!" case="1" pad_right="8"/>
<dialogue speaker="yellow" english="Captain!" translation="Cap!" case="2" pad_right="6"/>
<dialogue speaker="red" english="Captain!" translation="Cap!" case="3" pad_right="4"/>
<dialogue speaker="green" english="Captain!" translation="Cap!" case="4" pad_right="2"/>
<dialogue speaker="blue" english="Captain!" translation="Cap!" case="5"/>
<dialogue speaker="blue" english="You&apos;re alright!" translation="Estàs bé!"/>
<dialogue speaker="blue" english="I knew you&apos;d be ok!" translation="Sabia que ten sortiries!"/>
<dialogue speaker="purple" english="We were very worried when you didn&apos;t come back..." translation="Patíem molt per si no tornaves..."/>
<dialogue speaker="green" english="...but when you turned off the source of the interference..." translation="...però quan has desactivat lorigen de les interferències..."/>
<dialogue speaker="yellow" english="...we were able to find you with the ship&apos;s scanners..." translation="...hem pogut localitzar-te amb els escàners de la nau..."/>
<dialogue speaker="red" english="...and teleport you back on board!" translation="...i teletransportar-te de nou a bord!"/>
<dialogue speaker="player" english="That was lucky!" translation="Quina sort!"/>
<dialogue speaker="player" english="Thanks guys!" translation="Gràcies, nois!"/>
<dialogue speaker="yellow" english="...it looks like this dimension is starting to destabilise, just like our own..." translation="...sembla que aquesta dimensió sestà començant a desestabilitzar, igual que la nostra..."/>
<dialogue speaker="red" english="...we can stay and explore for a little longer, but..." translation="Ens hi podem estar i explorar una mica més, però..."/>
<dialogue speaker="yellow" english="...eventually, it&apos;ll collapse completely." translation="...tard o dhora, sesfondrarà per complet."/>
<dialogue speaker="green" english="There&apos;s no telling exactly how long we have here. But the ship&apos;s fixed, so..." translation="No sabem exactament quant de temps tenim. Però la nau està reparada, així que..."/>
<dialogue speaker="blue" english="...as soon as we&apos;re ready, we can go home!" translation="...tan bon punt estiguem llestos,|podrem tornar a casa!"/>
<dialogue speaker="purple" english="What now, Captain?" translation="Què hi ha, cap?"/>
<dialogue speaker="player" english="Let&apos;s find a way to save this dimension!" translation="Trobem una manera de salvar aquesta dimensió!"/>
<dialogue speaker="player" english="And a way to save our home dimension too!" translation="I una manera de salvar la nostra, alhora!"/>
<dialogue speaker="player" english="The answer is out there, somewhere!" translation="Segur que la resposta és allà fora, en algun lloc!"/>
<dialogue speaker="player" english="Let&apos;s go!" translation="Som-hi!"/>
</cutscene>
<cutscene id="startepilogue" explanation="">
<dialogue speaker="blue" english="Wow! You found all of them!" translation="Bufa! Les has trobades totes!"/>
<dialogue speaker="player" english="Really? Great!" translation="De debò? Fantàstic!"/>
<dialogue speaker="blue" english="I&apos;ll run some tests and see if I can work out what they&apos;re for..." translation="Faré alguns experiments i miraré de descobrir per a què serveixen..."/>
<dialogue speaker="player" english="That... that didn&apos;t sound good..." translation="Això... no ha sonat gaire bé..."/>
<dialogue speaker="blue" english="Run!" translation="Correu!"/>
<dialogue speaker="player" english="Oh no!" translation="Oh, no!"/>
<dialogue speaker="red" english="Not again!" translation="Una altra vegada no!"/>
<dialogue speaker="player" english="Wait! It&apos;s stopped!" translation="Espereu! Sha aturat!"/>
<dialogue speaker="purple" english="This is where we were storing those shiny things? What happened?" translation="Aquí és on desàvem les coses brillants aquelles, oi? Què ha passat?"/>
<dialogue speaker="player" english="We were just playing with them, and..." translation="Hi estàvem jugant, i..."/>
<dialogue speaker="player" english="...they suddenly exploded!" translation="...han explotat de sobte!"/>
<dialogue speaker="blue" english="But look what they made! Is that a teleporter?" translation="Però mireu què han fet! És un teletransportador?"/>
<dialogue speaker="yellow" english="I think so, but..." translation="Això sembla, però..."/>
<dialogue speaker="yellow" english="I&apos;ve never seen a teleporter like that before..." translation="No he vist mai un teletransportador així..."/>
<dialogue speaker="red" english="We should investigate!" translation="Ho hauríem dinvestigar!"/>
<dialogue speaker="purple" english="What do you think, Captain?" translation="Què en penses, cap?"/>
<dialogue speaker="purple" english="Should we find out where it leads?" translation="Hauríem dinvestigar on porta?"/>
<dialogue speaker="player" english="Let&apos;s go!" translation="Som-hi!"/>
<dialogue speaker="blue" english="Oh no! We&apos;re trapped!" translation="Oh, no! Estem atrapats!"/>
<dialogue speaker="yellow" english="Oh dear..." translation="Ai, mare..."/>
<dialogue speaker="player" english="Hmm... how should we get out of this?" translation="Hum... Com ens en podem sortir?"/>
<dialogue speaker="player" english="COMBINE!" translation="FUSIÓ!" case="1"/>
<dialogue speaker="purple" english="COMBINE!" translation="FUSIÓ!" case="2"/>
<dialogue speaker="yellow" english="COMBINE!" translation="FUSIÓ!" case="3"/>
<dialogue speaker="red" english="COMBINE!" translation="FUSIÓ!" case="4"/>
<dialogue speaker="green" english="COMBINE!" translation="FUSIÓ!" case="5"/>
<dialogue speaker="blue" english="COMBINE!" translation="FUSIÓ!" case="6"/>
<dialogue speaker="purple" english="Or, you know... we could have just warped back to the ship..." translation="O bé... també hauríem pogut teletransportar-nos a la nau..."/>
<dialogue speaker="green" english="Wow! What is this?" translation="Ostres! Què és això?"/>
<dialogue speaker="yellow" english="It looks like another laboratory!" translation="Sembla un altre laboratori!"/>
<dialogue speaker="red" english="Let&apos;s have a look around!" translation="Donem-hi un cop dull!"/>
</cutscene>
<cutscene id="talkpurple_9" explanation="">
<dialogue speaker="purple" english="Look at all this research! This is going to be a big help back home!" translation="Mira quanta recerca! Això ens serà de gran ajuda quan tornem a casa!"/>
</cutscene>
<cutscene id="talkgreen_11" explanation="">
<dialogue speaker="green" english="I wonder why they abandoned this dimension? They were so close to working out how to fix it..." translation="Per què devien abandonar aquesta dimensió? Eren molt a prop de descobrir com reparar-la..."/>
<dialogue speaker="green" english="Maybe we can fix it for them? Maybe they&apos;ll come back?" translation="Potser la podem reparar en nom seu? Potser tornaran?"/>
</cutscene>
<cutscene id="talkblue_9" explanation="">
<dialogue speaker="blue" english="This lab is amazing! The scientists who worked here know a lot more about warp technology than we do!" translation="Aquest laboratori és increïble! Els científics que hi treballaven sabien moltes més coses de la tecnologia del teletransport que no pas nosaltres!"/>
</cutscene>
<cutscene id="talkyellow_12" explanation="">
<dialogue speaker="yellow" english="Captain! Have you seen this?" translation="Cap! Has vist això?"/>
<dialogue speaker="yellow" english="With their research and ours, we should be able to stabilise our own dimension!" translation="Si ajuntem les seves investigacions i les nostres, potser podríem estabilitzar la nostra dimensió!"/>
<dialogue speaker="yellow" english="We&apos;re saved!" translation="Estem salvats!"/>
</cutscene>
<cutscene id="talkred_14" explanation="super gravitron (difficult minigame)">
<dialogue speaker="red" english="Look what I found!" translation="Mira què he trobat!"/>
<dialogue speaker="red" english="It&apos;s pretty hard, I can only last for about 10 seconds..." translation="És força difícil, només hi he durat uns deu segons..."/>
</cutscene>
<cutscene id="terminal_jukebox" explanation="">
<dialogue speaker="gray" english="-= JUKEBOX =-
Songs will continue to play until you leave the ship.
Collect trinkets to unlock new songs!" translation="-= TOCADISCOS =-
Les cançons continuaran sonant fins que surtis de la nau.
Recull lluentons per a desblocar cançons noves!" centertext="1" padtowidth="264"/>
</cutscene>
<cutscene id="terminal_jukeunlock1" explanation="">
<dialogue speaker="gray" english="NEXT UNLOCK:
5 Trinkets
Pushing Onwards" translation="SEGÜENT PISTA A DESBLOCAR:
5 lluentons
Prement sempre endavant" tt="1" pad="1"/>
</cutscene>
<cutscene id="terminal_jukeunlock2" explanation="">
<dialogue speaker="gray" english="NEXT UNLOCK:
8 Trinkets
Positive Force" translation="SEGÜENT PISTA A DESBLOCAR:
8 lluentons
Positivitat en la força" tt="1" pad="1"/>
</cutscene>
<cutscene id="terminal_jukeunlock3" explanation="">
<dialogue speaker="gray" english="NEXT UNLOCK:
10 Trinkets
Presenting VVVVVV" translation="SEGÜENT PISTA A DESBLOCAR:
10 lluentons
Presentació de VVVVVV" tt="1" pad="1"/>
</cutscene>
<cutscene id="terminal_jukeunlock4" explanation="">
<dialogue speaker="gray" english="NEXT UNLOCK:
12 Trinkets
Potential for Anything" translation="SEGÜENT PISTA A DESBLOCAR:
12 lluentons
Potencial per a qualsevol cosa" tt="1" pad="1"/>
</cutscene>
<cutscene id="terminal_jukeunlock41" explanation="">
<dialogue speaker="gray" english="NEXT UNLOCK:
14 Trinkets
Pressure Cooker" translation="SEGÜENT PISTA A DESBLOCAR:
14 lluentons
Pressió dins lolla" tt="1" pad="1"/>
</cutscene>
<cutscene id="terminal_jukeunlock5" explanation="">
<dialogue speaker="gray" english="NEXT UNLOCK:
16 Trinkets
Predestined Fate" translation="SEGÜENT PISTA A DESBLOCAR:
16 lluentons
Predestinació atzarosa" tt="1" pad="1"/>
</cutscene>
<cutscene id="terminal_jukeunlock6" explanation="">
<dialogue speaker="gray" english="NEXT UNLOCK:
18 Trinkets
Popular Potpourri" translation="SEGÜENT PISTA A DESBLOCAR:
18 lluentons
Popurri popular" tt="1" pad="1"/>
</cutscene>
<cutscene id="terminal_jukeunlock7" explanation="">
<dialogue speaker="gray" english="NEXT UNLOCK:
20 Trinkets
Pipe Dream" translation="SEGÜENT PISTA A DESBLOCAR:
20 lluentons
Pretensió impossible" tt="1" pad="1"/>
</cutscene>
<cutscene id="terminal_station_1" explanation="">
<dialogue speaker="gray" english="-= PERSONAL LOG =-" translation="-= DIARI PERSONAL =-" padtowidth="280"/>
<dialogue speaker="gray" english="Almost everyone has been evacuated from the space station now. The rest of us are leaving in a couple of days, once our research has been completed." translation="Ja han evacuat gairebé tothom de lestació espacial. La resta|ens nanirem daquí a un parell de dies, quan hàgim acabat la recerca." pad="1"/>
</cutscene>
<cutscene id="terminal_station_2" explanation="">
<dialogue speaker="gray" english="-= Research Notes =-" translation="-= NOTES DE RECERCA =-" padtowidth="264"/>
<dialogue speaker="gray" english="...everything collapses, eventually. It&apos;s the way of the universe." translation="...tot sacaba esfondrant, tard o dhora. Lunivers és així." centertext="1" pad="1"/>
</cutscene>
<cutscene id="terminal_station_3" explanation="">
<dialogue speaker="gray" english="I wonder if the generator we set up in the polar dimension is what&apos;s affecting our teleporters?" translation="Potser el que afecta els nostres|teletransportadors és el generador|que vam instal·lar a la dimensió polar?"/>
<dialogue speaker="gray" english="No, it&apos;s probably just a glitch." translation="No, segurament només és un error."/>
</cutscene>
<cutscene id="terminal_station_4" explanation="a trinket that&apos;s difficult to get">
<dialogue speaker="gray" english="-= PERSONAL LOG =-" translation="-= DIARI PERSONAL =-" padtowidth="280"/>
<dialogue speaker="gray" english="Hah! Nobody will ever get this one." translation="Ha! Aquest no lagafarà mai ningú." pad="1"/>
</cutscene>
<cutscene id="terminal_warp_1" explanation="">
<dialogue speaker="gray" english="...The other day I was chased down a hallway by a giant cube with the word AVOID on it." translation="Laltre dia un cub gegant amb la paraula EVITA em va perseguir per una sala."/>
<dialogue speaker="gray" english="These security measures go too far!" translation="Aquestes mesures de seguretat són massa estrictes!"/>
</cutscene>
<cutscene id="terminal_warp_2" explanation="">
<dialogue speaker="gray" english="The only way into my private lab anymore is by teleporter." translation="Lúnica manera dentrar al meu laboratori privat és amb un teletransportador."/>
<dialogue speaker="gray" english="I&apos;ve made sure that it&apos;s difficult for unauthorised personnel to gain access." translation="Mhe assegurat que sigui difícil que personal no autoritzat hi obtingui accés."/>
</cutscene>
<cutscene id="terminal_outside_1" explanation="">
<dialogue speaker="gray" english="-= Research Notes =-" translation="-= NOTES DE RECERCA =-" padtowidth="264"/>
<dialogue speaker="gray" english="... our first breakthrough was the creation of the inversion plane, which creates a mirrored dimension beyond a given event horizon ..." translation="...el nostre primer avenç va ser la creació del pla dinversió, que crea una dimensió mirall més enllà dun horitzó desdeveniments|concret..." pad="1"/>
</cutscene>
<cutscene id="terminal_outside_2" explanation="">
<dialogue speaker="gray" english="-= Research Notes =-" translation="-= NOTES DE RECERCA =-" padtowidth="264"/>
<dialogue speaker="gray" english="...with just a small modification to the usual parameters, we were able to stabilise an infinite tunnel!" translation="...sols amb una petita modificació dels paràmetres normals, vam poder estabilitzar un túnel infinit!"/>
</cutscene>
<cutscene id="terminal_outside_3" explanation="">
<dialogue speaker="gray" english="-= Research Notes =-" translation="-= NOTES DE RECERCA =-" padtowidth="264"/>
<dialogue speaker="gray" english="... the final step in creating the dimensional stabiliser was to create a feedback loop ..." translation="...lúltim pas a lhora de crear lestabilitzador dimensional va ser crear un bucle de retroalimentació..." pad="1"/>
</cutscene>
<cutscene id="terminal_outside_4" explanation="">
<dialogue speaker="gray" english="-= Research Notes =-" translation="-= NOTES DE RECERCA =-" padtowidth="264"/>
<dialogue speaker="gray" english="...despite our best efforts, the dimensional stabiliser won&apos;t hold out forever. Its collapse is inevitable..." translation="...malgrat els nostres esforços, lestabilitzador dimensional no funcionarà eternament. En algun moment, sesfondrarà..." pad="1"/>
<dialogue speaker="cyan" english="Huh? These coordinates aren&apos;t even in this dimension!" translation="Eh? Aquestes coordenades no són ni tan sols en aquesta dimensió!"/>
</cutscene>
<cutscene id="terminal_outside_5" explanation="">
<dialogue speaker="gray" english="-= Personal Log =-" translation="-= DIARI PERSONAL =-" padtowidth="232"/>
<dialogue speaker="gray" english="... I&apos;ve had to seal off access to most of our research. Who knows what could happen if it fell into the wrong hands? ..." translation="...he hagut de segellar laccés a la major part de la recerca. Qui sap què podria passar si caigués en les mans equivocades..." centertext="1" pad="1"/>
</cutscene>
<cutscene id="terminal_outside_6" explanation="">
<dialogue speaker="gray" english="-= Research Notes =-" translation="-= NOTES DE RECERCA =-" padtowidth="264"/>
<dialogue speaker="gray" english="... access to the control center is still possible through the main atmospheric filters ..." translation="...laccés al centre de control encara és possible a través dels filtres atmosfèrics principals..."/>
</cutscene>
<cutscene id="terminal_lab_1" explanation="">
<dialogue speaker="gray" english="... it turns out the key to stabilising this dimension was to create a balancing force outside of it!" translation="...resulta que la clau per a estabilitzar aquesta dimensió era crear una força equilibradora fora de la dimensió!"/>
<dialogue speaker="gray" english="Though it looks like that&apos;s just a temporary solution, at best." translation="Tot i que això sembla només una solució temporal, com a molt."/>
<dialogue speaker="gray" english="I&apos;ve been working on something more permanent, but it seems it&apos;s going to be too late..." translation="He estat treballant en una cosa més permanent, però sembla que ja serà massa tard..."/>
</cutscene>
<cutscene id="terminal_lab_2" explanation="">
<dialogue speaker="gray" english="?SYNTAX ERROR" translation="?ERROR DE SINTAXI"/>
</cutscene>
<cutscene id="terminal_letsgo" explanation="">
<dialogue speaker="player" english="Now that the ship is fixed, we can leave anytime we want!" translation="Ara que la nau ja està reparada, ens en podem anar quan vulguem!"/>
<dialogue speaker="player" english="We&apos;ve all agreed to keep exploring this dimension, though." translation="Però tots hem estat dacord a continuar explorant aquesta dimensió."/>
<dialogue speaker="player" english="Who knows what we&apos;ll find?" translation="Qui sap què hi trobarem!"/>
</cutscene>
<cutscene id="terminal_radio" explanation="">
<dialogue speaker="gray" english="-= SHIP RADIO =-
[ Status ]
Broadcasting" translation="-= RÀDIO DE LA NAU =-
[ Estat ]
Sestà transmetent" tt="1" centertext="1" pad="2"/>
</cutscene>
<cutscene id="terminal_secretlab" explanation="">
<dialogue speaker="gray" english="-= WARNING =-
The Super-Gravitron is intended for entertainment purposes only." translation="-= ADVERTIMENT =-
El supergravitró només té finalitats dentreteniment." centertext="1" pad="1"/>
<dialogue speaker="gray" english="Anyone found using the Super Gravitron for educational purposes may be asked to stand in the naughty corner." translation="Si algú el fa servir per a finalitats educatives, és|possible que lenviem al racó de pensar."/>
</cutscene>
<cutscene id="terminal_shipcomputer" explanation="">
<dialogue speaker="gray" english="-= D.S.S. SOULEYE =-
Ship Navigation Controls" translation="-= DSS SOULEYE =-
Controls de navegació de la nau" centertext="1" pad="1"/>
<dialogue speaker="gray" english="Error! Error! Cannot isolate dimensional coordinates! Interference detected!" translation="Error! Error! No és possible aïllar les coordenades dimensionals! Shan detectat interferències!"/>
</cutscene>
<cutscene id="alreadyvisited" explanation="">
<dialogue speaker="cyan" english="...oh, I&apos;ve already found this." translation="Oh, això ja ho havia trobat..."/>
</cutscene>
<cutscene id="disableaccessibility" explanation="">
<dialogue speaker="gray" english="Please disable invincibility and/or slowdown before entering the Super Gravitron." translation="Desactiva la invencibilitat i/o lalentiment abans dentrar al supergravitró."/>
</cutscene>
</cutscenes>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

View file

@ -1,7 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<spritesmask sprite_w="32" sprite_h="32">
<sprite x="4" y="3" w="4"/> <!-- YES -->
<sprite x="3" y="4"/> <!-- OBEY -->
<sprite x="2" y="5" w="2"/> <!-- LIES receiver and LIES -->
<sprite x="4" y="5" w="2"/> <!-- TRUTH -->
</spritesmask>

View file

@ -1,38 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<langmeta>
<active>1</active>
<!-- should be lowercase because menu style, and should be in the language itself -->
<nativename>català</nativename>
<!-- English translation by X -->
<credit>Traducció al català|dEduard Ereza Martínez</credit>
<!-- On the language screen, hard limit 40 8x8 characters. Space/Z/V sets this as the language -->
<action_hint>Prem Espai, Z o V per a seleccionar</action_hint>
<!-- Same as above, but for a gamepad button (hard limit 40 8x8 characters) -->
<gamepad_hint>Prem {button} per a seleccionar</gamepad_hint>
<!-- Enable automatic word wrapping instead of having to manually insert newlines -->
<autowordwrap>1</autowordwrap>
<!-- Enable automatic full-caps display of selected menu options ([SELECTED] not selected) -->
<toupper>1</toupper>
<!-- When automatically uppercasing, map i to İ (for Turkish) -->
<toupper_i_dot>0</toupper_i_dot>
<!-- When automatically uppercasing, allow ~ to be used to stop the next letter from being uppercased (for Irish) -->
<toupper_lower_escape_char>0</toupper_lower_escape_char>
<!-- Enable for RTL languages like Arabic or Hebrew -->
<rtl>0</rtl>
<!-- The indication that a certain menu option or button is selected -->
<menu_select>[ {label} ]</menu_select>
<menu_select_tight>[{label}]</menu_select_tight>
<!-- The filename of the font to use. For example, "font_cn" means font_cn.png and font_cn.fontmeta. -->
<font>font</font>
</langmeta>

View file

@ -1,124 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Please read README.txt for information about the language files -->
<numbers>
<number value="0" form="0" english="Zero" translation="zero"/>
<number value="1" form="1" english="One" translation="un"/>
<number value="2" form="0" english="Two" translation="dos"/>
<number value="3" form="0" english="Three" translation="tres"/>
<number value="4" form="0" english="Four" translation="quatre"/>
<number value="5" form="0" english="Five" translation="cinc"/>
<number value="6" form="0" english="Six" translation="sis"/>
<number value="7" form="0" english="Seven" translation="set"/>
<number value="8" form="0" english="Eight" translation="vuit"/>
<number value="9" form="0" english="Nine" translation="nou"/>
<number value="10" form="0" english="Ten" translation="deu"/>
<number value="11" form="0" english="Eleven" translation="onze"/>
<number value="12" form="0" english="Twelve" translation="dotze"/>
<number value="13" form="0" english="Thirteen" translation="tretze"/>
<number value="14" form="0" english="Fourteen" translation="catorze"/>
<number value="15" form="0" english="Fifteen" translation="quinze"/>
<number value="16" form="0" english="Sixteen" translation="setze"/>
<number value="17" form="0" english="Seventeen" translation="disset"/>
<number value="18" form="0" english="Eighteen" translation="divuit"/>
<number value="19" form="0" english="Nineteen" translation="dinou"/>
<number value="20" form="0" english="Twenty" translation="vint"/>
<number value="21" form="0" english="Twenty One" translation="vint-i-un"/>
<number value="22" form="0" english="Twenty Two" translation="vint-i-dos"/>
<number value="23" form="0" english="Twenty Three" translation="vint-i-tres"/>
<number value="24" form="0" english="Twenty Four" translation="vint-i-quatre"/>
<number value="25" form="0" english="Twenty Five" translation="vint-i-cinc"/>
<number value="26" form="0" english="Twenty Six" translation="vint-i-sis"/>
<number value="27" form="0" english="Twenty Seven" translation="vint-i-set"/>
<number value="28" form="0" english="Twenty Eight" translation="vint-i-vuit"/>
<number value="29" form="0" english="Twenty Nine" translation="vint-i-nou"/>
<number value="30" form="0" english="Thirty" translation="trenta"/>
<number value="31" form="0" english="Thirty One" translation="trenta-un"/>
<number value="32" form="0" english="Thirty Two" translation="trenta-dos"/>
<number value="33" form="0" english="Thirty Three" translation="trenta-tres"/>
<number value="34" form="0" english="Thirty Four" translation="trenta-quatre"/>
<number value="35" form="0" english="Thirty Five" translation="trenta-cinc"/>
<number value="36" form="0" english="Thirty Six" translation="trenta-sis"/>
<number value="37" form="0" english="Thirty Seven" translation="trenta-set"/>
<number value="38" form="0" english="Thirty Eight" translation="trenta-vuit"/>
<number value="39" form="0" english="Thirty Nine" translation="trenta-nou"/>
<number value="40" form="0" english="Forty" translation="quaranta"/>
<number value="41" form="0" english="Forty One" translation="quaranta-un"/>
<number value="42" form="0" english="Forty Two" translation="quaranta-dos"/>
<number value="43" form="0" english="Forty Three" translation="quaranta-tres"/>
<number value="44" form="0" english="Forty Four" translation="quaranta-quatre"/>
<number value="45" form="0" english="Forty Five" translation="quaranta-cinc"/>
<number value="46" form="0" english="Forty Six" translation="quaranta-sis"/>
<number value="47" form="0" english="Forty Seven" translation="quaranta-set"/>
<number value="48" form="0" english="Forty Eight" translation="quaranta-vuit"/>
<number value="49" form="0" english="Forty Nine" translation="quaranta-nou"/>
<number value="50" form="0" english="Fifty" translation="cinquanta"/>
<number value="51" form="0" english="Fifty One" translation="cinquanta-un"/>
<number value="52" form="0" english="Fifty Two" translation="cinquanta-dos"/>
<number value="53" form="0" english="Fifty Three" translation="cinquanta-tres"/>
<number value="54" form="0" english="Fifty Four" translation="cinquanta-quatre"/>
<number value="55" form="0" english="Fifty Five" translation="cinquanta-cinc"/>
<number value="56" form="0" english="Fifty Six" translation="cinquanta-sis"/>
<number value="57" form="0" english="Fifty Seven" translation="cinquanta-set"/>
<number value="58" form="0" english="Fifty Eight" translation="cinquanta-vuit"/>
<number value="59" form="0" english="Fifty Nine" translation="cinquanta-nou"/>
<number value="60" form="0" english="Sixty" translation="seixanta"/>
<number value="61" form="0" english="Sixty One" translation="seixanta-un"/>
<number value="62" form="0" english="Sixty Two" translation="seixanta-dos"/>
<number value="63" form="0" english="Sixty Three" translation="seixanta-tres"/>
<number value="64" form="0" english="Sixty Four" translation="seixanta-quatre"/>
<number value="65" form="0" english="Sixty Five" translation="seixanta-cinc"/>
<number value="66" form="0" english="Sixty Six" translation="seixanta-sis"/>
<number value="67" form="0" english="Sixty Seven" translation="seixanta-set"/>
<number value="68" form="0" english="Sixty Eight" translation="seixanta-vuit"/>
<number value="69" form="0" english="Sixty Nine" translation="seixanta-nou"/>
<number value="70" form="0" english="Seventy" translation="setanta"/>
<number value="71" form="0" english="Seventy One" translation="setanta-un"/>
<number value="72" form="0" english="Seventy Two" translation="setanta-dos"/>
<number value="73" form="0" english="Seventy Three" translation="setanta-tres"/>
<number value="74" form="0" english="Seventy Four" translation="setanta-quatre"/>
<number value="75" form="0" english="Seventy Five" translation="setanta-cinc"/>
<number value="76" form="0" english="Seventy Six" translation="setanta-sis"/>
<number value="77" form="0" english="Seventy Seven" translation="setanta-set"/>
<number value="78" form="0" english="Seventy Eight" translation="setanta-vuit"/>
<number value="79" form="0" english="Seventy Nine" translation="setanta-nou"/>
<number value="80" form="0" english="Eighty" translation="vuitanta"/>
<number value="81" form="0" english="Eighty One" translation="vuitanta-un"/>
<number value="82" form="0" english="Eighty Two" translation="vuitanta-dos"/>
<number value="83" form="0" english="Eighty Three" translation="vuitanta-tres"/>
<number value="84" form="0" english="Eighty Four" translation="vuitanta-quatre"/>
<number value="85" form="0" english="Eighty Five" translation="vuitanta-cinc"/>
<number value="86" form="0" english="Eighty Six" translation="vuitanta-sis"/>
<number value="87" form="0" english="Eighty Seven" translation="vuitanta-set"/>
<number value="88" form="0" english="Eighty Eight" translation="vuitanta-vuit"/>
<number value="89" form="0" english="Eighty Nine" translation="vuitanta-nou"/>
<number value="90" form="0" english="Ninety" translation="noranta"/>
<number value="91" form="0" english="Ninety One" translation="noranta-un"/>
<number value="92" form="0" english="Ninety Two" translation="noranta-dos"/>
<number value="93" form="0" english="Ninety Three" translation="noranta-tres"/>
<number value="94" form="0" english="Ninety Four" translation="noranta-quatre"/>
<number value="95" form="0" english="Ninety Five" translation="noranta-cinc"/>
<number value="96" form="0" english="Ninety Six" translation="noranta-sis"/>
<number value="97" form="0" english="Ninety Seven" translation="noranta-set"/>
<number value="98" form="0" english="Ninety Eight" translation="noranta-vuit"/>
<number value="99" form="0" english="Ninety Nine" translation="noranta-nou"/>
<number value="100" form="0" english="One Hundred" translation="cent"/>
<number value="101" form="0"/>
<number value="102" form="0"/>
<number value="103" form="0"/>
<number value="104" form="0"/>
<number value="105" form="0"/>
<number value="106" form="0"/>
<number value="107" form="0"/>
<number value="108" form="0"/>
<number value="109" form="0"/>
<number value="110" form="0"/>
<number value="111" form="0"/>
<number value="112" form="0"/>
<number value="113" form="0"/>
<number value="114" form="0"/>
<number value="115" form="0"/>
<number value="116" form="0"/>
<number value="117" form="0"/>
<number value="118" form="0"/>
<number value="119" form="0"/>
</numbers>

View file

@ -1,193 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- You can translate these in-game to get better context! See README.txt -->
<roomnames>
<roomname x="0" y="18" english="Single-slit Experiment" translation="Experiment de lúnica escletxa" explanation="(Many of the rooms in the Lab stage have science themed names.)"/>
<roomname x="0" y="19" english="Don&apos;t Flip Out" translation="Cap per avall i cap per amunt" explanation="Flip as in gravity flip, but also the expression in english, as in, keep your cool"/>
<roomname x="1" y="0" english="I&apos;m Sorry" translation="Em sap greu..." explanation="The room below this one is Please Forgive Me. There is also a secret path to the right which leads to the rooms &apos;Anomaly&apos; and &apos;Purest Unobtainium&apos;."/>
<roomname x="1" y="1" english="Please Forgive Me!" translation="Perdonam, si us plau!" explanation="The room above this one is I&apos;m Sorry"/>
<roomname x="1" y="17" english="Rascasse" translation="Escórpora" explanation="This is a type of fish with lots of thorny spikes on its back"/>
<roomname x="1" y="18" english="Keep Going" translation="Continua endavant" explanation="Literally just &apos;Keep Going&apos;, through the room"/>
<roomname x="1" y="19" english="Shuffled Hallway" translation="Corredor remogut" explanation="Just describes how the room looks. &apos;Shuffled&apos; as in offset."/>
<roomname x="2" y="0" english="Kids His Age Bounce" translation="Els nens daquesta edat són de goma" explanation="An old saying for when e.g. a small child falls out of a tree. A trampoline joke in this case."/>
<roomname x="2" y="1" english="Playing Foosball" translation="Hora de jugar al futbolí" explanation="This room resembles a Foosball table - https://en.wikipedia.org/wiki/Table_football"/>
<roomname x="2" y="4" english="Philadelphia Experiment" translation="Lexperiment Filadèlfia" explanation="There is a teleporter in this room. The Philadelphia Experiment is the name of 80&apos;s film about teleportation."/>
<roomname x="2" y="16" english="Get Ready To Bounce" translation="Preparat per a rebotar" explanation="The first room in the Lab zone. In the next room, you immediately come into contact with a gravity line, and flip back up."/>
<roomname x="2" y="17" english="It&apos;s Perfectly Safe" translation="No pateixis, és totalment segur" explanation="The second room in the lab zone. Don&apos;t worry, it&apos;s perfectly safe."/>
<roomname x="2" y="18" english="Young Man, It&apos;s Worth the Challenge" translation="Xiquets, el desafiament paga la pena" explanation="Not a reference to anything in particular - Bennett explains that this is just something that his high school chemistry teacher used to say to students. He thinks the teacher was probably misquoting George Bernard Shaw, who said &apos;Life is not meant to be easy, my child - but take courage: it can be delightful.&apos;."/>
<roomname x="2" y="19" english="Double-slit Experiment" translation="Experiment de la doble escletxa" explanation="(Many of the rooms in the Lab stage have science themed names.)"/>
<roomname x="3" y="0" english="Merge" translation="Estrenyiment" explanation="A wide section connecting to a narrower section - merge as in traffic"/>
<roomname x="3" y="1" english="A Difficult Chord" translation="Uns acords difícils" explanation="This room resembles a guitar chord"/>
<roomname x="3" y="4" english="Why So Blue?" translation="Una sala blava i trista" explanation="The crewmate Victoria is found here. Victoria is always sad! She&apos;s feeling blue."/>
<roomname x="3" y="16" english="Brought to you by the letter G" translation="Compte amb la gravetat" explanation="Reference to Seseme Street - also, this room resembles the letter G"/>
<roomname x="3" y="17" english="Thorny Exchange" translation="Passades entre punxes" explanation="Two people having a polite argument could be described as having a Thorny Exchange of words."/>
<roomname x="3" y="18" english="Square Root" translation="Arrel quadrada" explanation="This room resembles a Square Root symbol."/>
<roomname x="3" y="19" english="They Call Him Flipper" translation="Gira que giraràs" explanation="This is a line from an American TV show intro about a Dolphin - https://www.youtube.com/watch?v=azEOeTX1LqM"/>
<roomname x="4" y="0" english="Vibrating String Problem" translation="Problema de la corda vibrant" explanation="Another science themed room name, this one has two gravity lines that you bounce between."/>
<roomname x="4" y="1" english="The Living Dead End" translation="Latzucac més extrem" explanation="&apos;The living end&apos; is an idiom meaning &apos;the most extreme form of something&apos;, here it&apos;s an extreme dead end, i.e. a cul-de-sac"/>
<roomname x="4" y="2" english="AAAAAA" translation="AAAAAA" explanation="The player falls through this room without having time to stop - AAAAAA suggests a scream in English. Also, it&apos;s six As, like the title."/>
<roomname x="4" y="3" english="Diode" translation="Díode" explanation="This room can only be passed through in one direction. It resembles the electrical component."/>
<roomname x="4" y="4" english="I Smell Ozone" translation="Sento olor dozó" explanation="When you use a photocopier, it produces a distinctive smell (from the Ozone produced). This room has a background pattern that suggests a teleportation has recently happened here."/>
<roomname x="4" y="16" english="Free Your Mind" translation="Allibera la ment" explanation="Reference to the film The Matrix, where Morpheus jumps from the top of a Skyscaper - https://www.youtube.com/watch?v=ef_agVIvh0A"/>
<roomname x="4" y="17" english="I Changed My Mind, Thelma..." translation="He canviat didea, Thelma..." explanation="The room below Free Your Mind. Reference to the film Thelma and Louise, which ends with Thelma and Louise driving off a cliff, sorry, spoilers"/>
<roomname x="4" y="18" english="Hitting the Apex" translation="Derrapada ajustada" explanation="&apos;Hitting the Apex&apos; is the term used by race drivers for the optimal path around a corner"/>
<roomname x="4" y="19" english="Three&apos;s a Crowd" translation="Dos són companyia, tres són multitud" explanation="From the expression Two&apos;s Company, Three&apos;s a Crowd. This room has two challenges - the first has two gaps to cross, the second has three."/>
<roomname x="5" y="0" english="Spike Strip Deployed" translation="Tira de punxes desplegada" explanation="This room has some spikes on a gravity line. The name is a reference to the device that police might use to blow out the tyres of a speeding car."/>
<roomname x="5" y="1" english="Anomaly" translation="Anomalia" explanation="As in, a strange result in science. This room has lots of different colours, unlike other rooms in this stage."/>
<roomname x="5" y="16" english="In a Single Bound" translation="Dun sol salt" explanation="Superman is described as being able to leap tall buildings in a single bound."/>
<roomname x="5" y="17" english="Indirect Jump Vector" translation="Vector indirecte de salt" explanation="If you miss the gap in &apos;In a Single Bound&apos; above, you will end up back in this room - hence, your trajectory was off!"/>
<roomname x="6" y="0" english="Topsy Turvyism" translation="Sacsejat, no remenat" explanation="Topsy Turvy is Australian slang for upside down"/>
<roomname x="6" y="1" english="Purest Unobtainium" translation="Linobteni més pur" explanation="Unobtainium is a jokey made up term from science fiction for an impossible substance - https://en.wikipedia.org/wiki/Unobtainium"/>
<roomname x="6" y="16" english="Barani, Barani" translation="Un barani rere laltre" explanation="A Barani is a technical term for doing a flip on a trampoline"/>
<roomname x="6" y="17" english="Safety Dance" translation="Podré tornar enrere" explanation="Named after the 80s song by Men Without Hats."/>
<roomname x="7" y="0" english="Standing Wave" translation="Ona estacionària" explanation="Many of the rooms in the Lab stage have science themed names. This one is at the beginning of a section with gravity lines above and below you, before the section begins."/>
<roomname x="7" y="15" english="Entanglement Generator" translation="Generador dentrellaçament" explanation="This room contains a teleporter. Entanglement is an idea from quantum mechanics."/>
<roomname x="7" y="16" english="Heady Heights" translation="Altures embriagadores" explanation="Just below the highest point in the level."/>
<roomname x="7" y="17" english="Exhausted?" translation="Vols sortir del pou?" explanation="This room has an exit that sort of suggests an Exhaust Pipe in a car."/>
<roomname x="7" y="18" english="The Tantalizing Trinket" translation="El lluentó temptador" explanation="You see this Trinket just out of reach as you fall through the room."/>
<roomname x="7" y="19" english="The Bernoulli Principle" translation="El principi de Bernoulli" explanation="Many of the rooms in the Lab stage have science themed names - this one is just named after a formula relating to flight."/>
<roomname x="8" y="9" english="Teleporter Divot" translation="La marca del teletransportador" explanation="There is a pattern in the background of this room that indicates that a teleporter has sent someone to this room"/>
<roomname x="9" y="9" english="The Tower" translation="La Torre" explanation="This room is a single vertically scrolling stage, about 20 rooms high. The name is from the Tarot card."/>
<roomname x="10" y="4" english="Seeing Red" translation="Una visió roja" explanation="This is the room that you find the red crewmate in. (Seeing Red is an expression in English about being filled with rage, but that doesn&apos;t really apply here)"/>
<roomname x="10" y="5" english="Energize" translation="Endavant!" explanation="There is a teleporter in this Room. Energize is what they say on Star Trek when they use the teleporters."/>
<roomname x="10" y="6" english="Down Under" translation="Avall i a sota" explanation="Australia is sometimes called The Land Down Under because of its position on a globe. You complete this room by going down and under some moving platforms"/>
<roomname x="10" y="7" english="A Deception" translation="Enganyifa" explanation="This room appears trivial at first, but is connected to a difficult trinket challenge"/>
<roomname x="11" y="4" english="Building Apport" translation="Acord per al teletransport" explanation="An &apos;Apport&apos; is a kind of paranormal teleportation. Building Apport is a pun on the concept of &apos;building rapport&apos; (except that to &apos;apport&apos; is to teleport)."/>
<roomname x="11" y="5" english="Frown Upside Down" translation="Vinga, animat!" explanation="To &apos;Turn that Frown Upside Down&apos; is an expression in English, like &apos;cheer up&apos;, basically means to stop being unhappy"/>
<roomname x="11" y="6" english="Shenanigan" translation="Tripijoc" explanation="Shenanigan as in a prank, or practical joke. This room is connected to the &apos;Prize for the Reckless&apos; puzzle, and like the room &apos;A Deception&apos;, it appears trivial unless you know the secret"/>
<roomname x="11" y="7" english="Prize for the Reckless" translation="Un premi per la imprudència" explanation="This room contains a trinket that can only be collected by doing something difficult"/>
<roomname x="11" y="11" english="Conveying a New Idea" translation="Deixa que et transportin" explanation="This is the first room you encounter that has conveyor belts in it"/>
<roomname x="11" y="12" english="One Way Room" translation="Sala unidireccional" explanation="Can only be travelled through in one direction"/>
<roomname x="11" y="13" english="Boldly To Go" translation="Penetrant allà on no ha estat mai ningú" explanation="Star Trek reference, this rooms is near the entrance to the space station level"/>
<roomname x="11" y="14" english="The Filter" translation="El filtre" explanation="Like a filter from an air conditioning vent"/>
<roomname x="12" y="3" english="Security Sweep" translation="Escaneig de seguretat" explanation="Contains a single, fast moving enemy that moves up and down."/>
<roomname x="12" y="4" english="Gantry and Dolly" translation="Pòrtic i plataforma mòbil" explanation="Gantry and Dolly are the names for types of cranes that move crates around. This room has two different types of platforms."/>
<roomname x="12" y="5" english="The Yes Men" translation="Els homes del sí" explanation="Contains a number of enemies with briefcases and the word -YES- for a head. An expression for people who work at large companies and agree a lot with their bosses"/>
<roomname x="12" y="6" english="Stop and Reflect" translation="Aturat i reflexiona" explanation="Expression meaning to take a moment and think about what you&apos;re doing. In this room, a small puzzle where you need to use the underside of a moving platform to progress."/>
<roomname x="12" y="7" english="V Stitch" translation="Punt en V" explanation="A V Stitch is a type of crochet stitch."/>
<roomname x="12" y="11" english="Upstream Downstream" translation="Riu amunt i riu avall" explanation="As in swimming upstream or downstream, with or against a current in a river"/>
<roomname x="12" y="12" english="The High Road is Low" translation="El camí més elevat és el més baix" explanation="This room has two paths - a high path and a low path. The &apos;low&apos; path leads to a trinket, so the roomname is a sort of clue about which way to go."/>
<roomname x="12" y="13" english="Give Me A V" translation="Vèncer sescriu amb V" explanation="Room is in the shape of a big letter V. The roomname suggests the common american cheerleading chant - e.g. Give me an L! Give me an O! Give me a C! Give me an A! Give me an L! Give me an I! Give me an S! Give me an A! Give me a T! Give me an I! Give me an O! Give me an N! What does it spell? LOCALISATION!"/>
<roomname x="12" y="14" english="Outer Hull" translation="Coberta exterior" explanation="The entrance to the Space Station 2 level - the outer hull of a space station."/>
<roomname x="13" y="0" english="It&apos;s Not Easy Being Green" translation="No és fàcil ser verd" explanation="References a song by Kermit from the Muppets. This room is where you find the green crewmate."/>
<roomname x="13" y="3" english="Linear Collider" translation="Col·lisionador lineal" explanation="An early room, name is just meant to suggest something sciency. Room contains long, wave like enemies."/>
<roomname x="13" y="4" english="Comms Relay" translation="Repetidor de comunicacions" explanation="This room contains some communication equipment, like a radio."/>
<roomname x="13" y="5" english="Welcome Aboard" translation="Et donem la benvinguda a bord" explanation="The first room in the game"/>
<roomname x="13" y="6" english="Trench Warfare" translation="Guerra de trinxeres" explanation="Room contains a couple of pits with soldier-like enemies in them. Loosely references the 1983 videogame Hunchback."/>
<roomname x="13" y="7" english="B-B-B-Busted" translation="Això és un abús!" explanation="Room contains a large Bus. &apos;Bus&apos;ted as in &apos;Caught&apos;."/>
<roomname x="13" y="8" english="Level Complete!" translation="Nivell completat!" explanation="This room has a teleporter, which is normally found at the end of a level. However this room is midway through the stage."/>
<roomname x="13" y="9" english="Lighter Than Air" translation="Més volàtil que laire" explanation="This room has clouds that rise from the bottom of the screen to the top, which the player is faster than, implying that the player is lighter than air."/>
<roomname x="13" y="10" english="The Solution is Dilution" translation="La solució és la dilució" explanation="This room has a factory and pollution clouds in it. Apparently this phrase was once used by industrialists to advocate for not worrying too much about pollution."/>
<roomname x="13" y="11" english="The Cuckoo" translation="El cucut" explanation="This room contains a speaker that emits the word &apos;LIES&apos; over and over. A cuckoo&apos;s call decieves other birds!"/>
<roomname x="13" y="12" english="Backsliders" translation="Els tres bessons" explanation="A conveyor belt in this room pushes against you as you try to move, so you slide backwards."/>
<roomname x="13" y="13" english="Select Track" translation="Tria un camí" explanation="There are two paths you can pick between here"/>
<roomname x="14" y="0" english="Green Dudes Can&apos;t Flip" translation="Els verds no la saben invertir" explanation="You have a green crewmate with you in this room! A reference to the 90&apos;s film &apos;White Guy&apos;s Can&apos;t Jump&apos;."/>
<roomname x="14" y="1" english="This is how it is" translation="Així són les coses" explanation="literally as in, this is how the mechanic of this stage works - also an expression as in &apos;this is the way things are&apos;"/>
<roomname x="14" y="2" english="That&apos;s Why I Have To Kill You" translation="I per això thaig de matar" explanation="The follows the room named &apos;I love you&apos;. &apos;I love you, that&apos;s why I have to kill you&apos; is kind of a slasher horror trope."/>
<roomname x="14" y="3" english="Atmospheric Filtering Unit" translation="Unitat de filtratge atmosfèric" explanation="An early room, looks a bit like an air filter"/>
<roomname x="14" y="4" english="It&apos;s a Secret to Nobody" translation="No és cap secret per a ningú" explanation="A reference to the infamous Zelda quote &apos;It&apos;s a secret to everybody&apos;. This room contains the first trinket."/>
<roomname x="14" y="5" english="Conundrum" translation="Enigma" explanation="Conundrum as in puzzle, riddle, problem to be solved"/>
<roomname x="14" y="6" english="Boo! Think Fast!" translation="Ei, actua de pressa!" explanation="Contains a challenge that you need to react very quickly to. You might say &apos;Boo, think fast&apos; if you threw something at someone, expecting them to catch it."/>
<roomname x="14" y="7" english="The Sensible Room" translation="La sala sensata" explanation="Early corridor room containing no challenges. Sensible as in the opposite of Foolish - you might call someone sensible in english if they are excessively cautious."/>
<roomname x="14" y="8" english="The Hanged Man, Reversed" translation="El Penjat, del revés" explanation="Named after the Tarot Card, reversed as in Upside Down. The room contains a stationary enemy which resembles a Wheel of Fortune. The name is supposed to suggest a kind of out-of-place quality."/>
<roomname x="14" y="9" english="Green Grotto" translation="Cova verda" explanation="A peaceful green room."/>
<roomname x="14" y="10" english="Manic Mine" translation="Mina maníaca" explanation="A reference to the 8-bit game Manic Miner."/>
<roomname x="14" y="11" english="Clarion Call" translation="Crida a lacció" explanation="A &apos;Clarion Call&apos; is an idiom used when somebody makes a case for a course of action, for example in a politician&apos;s speech, or a call to battle. It sometimes has an association with dishonesty - in this room, the words &apos;LIES&apos; appear over and over."/>
<roomname x="14" y="12" english="Gordian Knot" translation="Nus gordià" explanation="As in the Gordian Knot from greek history. A complicated room that can be passed through twice."/>
<roomname x="14" y="13" english="You Chose... Poorly" translation="Has triat... malament" explanation="This room comes right after a choice between two paths. It&apos;s a quote from an Indiana Jones film."/>
<roomname x="15" y="0" english="Murdering Twinmaker" translation="Fabricador i assassinador de bessons" explanation="Room contains a teleporter. A &apos;Murdering Twinmaker&apos; is, uh, one way teleportation might work..."/>
<roomname x="15" y="1" english="A Bisected Spiral" translation="Una espiral biseccionada" explanation="Room is a spiral, cut down the middle"/>
<roomname x="15" y="2" english="Take the Red Pill" translation="Agafa la píndola vermella" explanation="This is a Matrix reference that hasn&apos;t aged well, lol"/>
<roomname x="15" y="3" english="Traffic Jam" translation="Embús de trànsit" explanation="The enemies in this room are Stop Signs"/>
<roomname x="15" y="4" english="Leap of Faith" translation="Salt de fe" explanation="To take a leap of faith means to do something without knowing how it&apos;s going to turn out."/>
<roomname x="15" y="5" english="Solitude" translation="Soledat" explanation="As in being alone, or in this case, lost by yourself"/>
<roomname x="15" y="6" english="Driller" translation="Perforació" explanation="Technically references the name of a C64 game, but that doesn&apos;t matter much"/>
<roomname x="15" y="7" english="Exhaust Chute" translation="Conducte devacuació de la brossa" explanation="Like a factory exhaust chute for disposing of rubbish"/>
<roomname x="15" y="8" english="Sorrow" translation="Pena" explanation="A difficult room that you might die in a lot"/>
<roomname x="15" y="9" english="doomS" translation="sosoxund suowqnS" explanation="The room is above &apos;Swoop&apos;, and is a copy of the room rotated 180 degrees! The room name &apos;doomS&apos; is the word &apos;Swoop&apos; rotated 180 degrees. When localising this room, don&apos;t worry too much about trying to keep the meaning of the words Dooms and Swoop, because they&apos;re not that important - instead, focus on picking words that have this 180 degree flip quality!"/>
<roomname x="15" y="10" english="Swoop" translation="Submons punxosos" explanation="See the note for room (15,9), doomS."/>
<roomname x="15" y="11" english="Chinese Rooms" translation="Lhabitació xinesa" explanation="This refers to a famous philosophical argument about artifical intelligence - https://en.wikipedia.org/wiki/Chinese_room."/>
<roomname x="15" y="12" english="You Just Keep Coming Back" translation="No fas res més que tornar aquí" explanation="You can pass through this room up to three times, depending on which route you take through the level."/>
<roomname x="15" y="13" english="Hyperspace Bypass 5" translation="Circumval·lació espacial 5" explanation="A conveyor belt will take you through this room without you needing to press any buttons, hench the bypass. The phrase Hyperspace Bypass is a reference to Hitchhiker&apos;s Guide to the Galaxy."/>
<roomname x="16" y="0" english="I Love You" translation="Testimo" explanation="The room contains a couple of heart shaped enemies"/>
<roomname x="16" y="1" english="As you like it" translation="Al vostre gust" explanation="This room can be approached in two different equivilent ways, whichever way you like it. &apos;As you like it&apos; is the name of a Shakespeare play."/>
<roomname x="16" y="2" english="Short Circuit" translation="Curtcircuit" explanation="Probably named after the 80s film Short Circuit. Also works because you&apos;ll hit a dead end if you keep walking forwards."/>
<roomname x="16" y="3" english="Twisty Little Passages" translation="Petits corredors recaragolats" explanation="A maze like room. Refers to the section from the 1976 text game Colossal Cave Adventure - you are in a maze of twisty little passages, all alike"/>
<roomname x="16" y="6" english="Quicksand" translation="Arenes movedisses" explanation="Contains lots of dissolving platforms."/>
<roomname x="16" y="7" english="The Tomb of Mad Carew" translation="La tomba de Mad Carew" explanation="A very obscure reference to the C64 game Dizzy"/>
<roomname x="16" y="8" english="Parabolica" translation="Parabòlica" explanation="This room contains a section of wall in the shape of a parabolic arch."/>
<roomname x="16" y="9" english="$eeing Dollar $ign$" translation="El dolor del dòlar" explanation="This is a green room that resembles a dollar sign shape"/>
<roomname x="16" y="10" english="What Lies Beneath?" translation="Què hi ha a sota?" explanation="The room below this contains enemies in the shape of the word &apos;Lies&apos;. So there&apos;s a double meaning here - as in, a question, &apos;what is below this room&apos;, and that the word LIES is literally beneath this room."/>
<roomname x="16" y="11" english="Spikes Do!" translation="Hi ha punxes!" explanation="This rooms is below the room named &apos;What lies Beneath?&apos;, and answers the question: Spikes do!"/>
<roomname x="16" y="12" english="Ha Ha Ha Not Really" translation="Ha, ha, ha! La veritat és que no!" explanation="This is a difficult room that follows one called &apos;Plain Sailing from here on&apos;. It&apos;s taunting the player. "/>
<roomname x="16" y="13" english="Plain Sailing from Here On" translation="A partir daquí tot seran flors i violes" explanation="This room is at the end of a long section, and promises &apos;Plain Sailing&apos; afterwards, as in, no further challenges. This is a lie"/>
<roomname x="17" y="0" english="As we go up, we go down" translation="El sostre és el terra i al revés" explanation="Named after the 1995 song by Guided by Voices"/>
<roomname x="17" y="1" english="Maze With No Entrance" translation="Un laberint sense entrada" explanation="This room is a maze which has no entrance, due to the nature of the warping mechanic."/>
<roomname x="17" y="2" english="The Brown Gate" translation="La porta marró" explanation="I think this is an Ultima 7 reference? A literal translation is fine here"/>
<roomname x="17" y="3" english="Edge Games" translation="El joc de les vores" explanation="Contains a trinket that you get by navigating around the edge of the screen. The use of the word EDGE is deliberate, refering to the trademark of a notoriously litigious individual who sued an indie developer around the time VVVVVV was made"/>
<roomname x="17" y="7" english="Brass Sent Us Under The Top" translation="Napoleó tenia cent soldats" explanation="The enemies in this room look like little army guys"/>
<roomname x="17" y="8" english="The Warning" translation="Agafat fort" explanation="This room has lots of checkpoints in it. It&apos;s beside the game&apos;s most difficult challenge, the Veni, Vidi, Vici section. The checkpoints don&apos;t really do anything, but they&apos;re a warning of the challenge ahead."/>
<roomname x="17" y="9" english="Just Pick Yourself Down" translation="...aixecat" explanation="A two part room name. From the expression &apos;If you fall down, just pick yourself up&apos;."/>
<roomname x="17" y="10" english="If You Fall Up" translation="Si caus..." explanation="A two part room name. From the expression &apos;If you fall down, just pick yourself up&apos;."/>
<roomname x="17" y="11" english="Chipper Cipher" translation="El receptor que sho empassa tot" explanation="Just some nice wordplay. Chipper means &apos;Jolly&apos; or &apos;Happy&apos;."/>
<roomname x="18" y="0" english="Time to get serious" translation="És lhora de posar-nos seriosos" explanation="Literal, this is the first room in the stage which is fairly difficult"/>
<roomname x="18" y="1" english="Wheeler&apos;s Wormhole" translation="Forat de cuc de Wheeler" explanation="Apparently a scientist named John Wheeler coined the phrase &apos;Wormhole&apos;! I just found that out. Anyway, this room has a teleporter in it."/>
<roomname x="18" y="2" english="Sweeney&apos;s Maze" translation="El laberint de Sweeney" explanation="Contains enemies that move strangly and resemble enemies from ZZT, an old game by Tim Sweeney"/>
<roomname x="18" y="3" english="Mind The Gap" translation="Vigileu amb la distància cotxe-andana" explanation="Refers to what train announcers say on the London Underground when you leave the train - mind the gap between the train and the station platform"/>
<roomname x="18" y="7" english="A Wrinkle in Time" translation="Un replec en el temps" explanation="The name of a 60&apos;s science fiction book. There is a teleporter in this room."/>
<roomname x="18" y="8" english="Getting Here is Half the Fun" translation="Arribar aquí és sols la meitat del camí" explanation="The top of the Veni Vidi Vici sequence. When you get to the top, you have to go all the way back down - hence, this room is the halfway point of the challenge."/>
<roomname x="18" y="9" english="Your Bitter Tears... Delicious" translation="Les teves llàgrimes... Delicioses!" explanation="Part of the Veni Vidi Vici sequence. Taunting the player."/>
<roomname x="18" y="10" english="Easy Mode Unlocked" translation="Mode fàcil desblocat" explanation="Part of the Veni Vidi Vici sequence. Taunting the player - the &apos;easy mode&apos; refers to the second passageway on the right side that is easier to take when going back through this room on the way down, but that passageway leads to death."/>
<roomname x="18" y="11" english="Vici!" translation="Vici!" explanation="The rooms Veni, Vidi, Vici! appear in sequence. Famous latin phrase attributed to Julius Caesar meaning I came, I saw, I conquered. The hardest challenge in the game."/>
<roomname x="18" y="12" english="Vidi" translation="Vidi" explanation="The rooms Veni, Vidi, Vici! appear in sequence. Famous latin phrase attributed to Julius Caesar meaning I came, I saw, I conquered. The hardest challenge in the game."/>
<roomname x="18" y="13" english="Veni" translation="Veni" explanation="The rooms Veni, Vidi, Vici! appear in sequence. Famous latin phrase attributed to Julius Caesar meaning I came, I saw, I conquered. The hardest challenge in the game."/>
<roomname x="18" y="14" english="Doing Things The Hard Way" translation="Les coses es fan de la manera difícil" explanation="The starting room from the Veni, Vidi, Vici! challenge."/>
<roomname x="19" y="0" english="To The Batcave!" translation="A la Batcova!" explanation="The Batcave, as in Batman&apos;s hideout."/>
<roomname x="19" y="1" english="Ascending and Descending" translation="Pujades i baixades" explanation="Just meant as in literally Ascending and Descending, going up and down. There is a room later in the game called Upstairs, Downstairs, which is a callback to this."/>
<roomname x="19" y="2" english="Shockwave Rider" translation="El genet de lona de xoc" explanation="Named after a 70&apos;s Science Fiction novel"/>
<roomname x="19" y="3" english="This will make you flip" translation="Acabaràs amb el cervell regirat" explanation="Flip is used here in the sense &apos;Flip out&apos;, as in, to lose your temper"/>
<roomname x="41" y="51" english="1950 Silverstone Grand V" translation="Gran Vremi de Silverstone de 1950" explanation="Refers to 1950 Silverstone Grand Prix (The final stage has room names that suggest old black and white TV shows.)"/>
<roomname x="41" y="52" english="DIY V Repair" translation="Repara la V sense ajuda externa" explanation="DIY TV repair - this room has a television you can interact with, which changes the theme from black and white to colour"/>
<roomname x="41" y="56" english="Now Take My Lead" translation="Ara segueix-me" explanation="This entire intermission section has a tone of a strict schoolteacher leading a small child."/>
<roomname x="42" y="52" english="Party Time!" translation="És lhora de la festa!" explanation="The first room after the black and white section. Doesn&apos;t refer to any TV show."/>
<roomname x="42" y="56" english="What Are You Waiting For?" translation="Ara què esperes?" explanation="This entire intermission section has a tone of a strict schoolteacher leading a small child."/>
<roomname x="43" y="51" english="The Voon Show" translation="Mare Vostrum" explanation="Named after The Goon Show (The final stage has room names that suggest old black and white TV shows.)"/>
<roomname x="43" y="52" english="Upstairs, Downstairs" translation="A dalt i a baix" explanation="Named after the 70s TV show - but also, refers to the earlier room Ascending and Descending, which this room is an updated version of. (Second part of the final stage has references to Colour TV shows)"/>
<roomname x="43" y="56" english="Don&apos;t Get Ahead of Yourself!" translation="No vulguis avançar tan de sobte!" explanation="This entire intermission section has a tone of a strict schoolteacher leading a small child."/>
<roomname x="44" y="51" english="Vertigo" translation="Vertigen" explanation="Named after the Hitchcock film (The final stage has room names that suggest old black and white TV shows.)"/>
<roomname x="44" y="52" english="Timeslip" translation="Les tres bessones" explanation="Named after the 70s TV show - name also suggests a connection to the earlier room Backsliders, which this room is an updated version of (Second part of the final stage has references to Colour TV shows)"/>
<roomname x="44" y="56" english="Very Good" translation="Molt bé!" explanation="This entire intermission section has a tone of a strict schoolteacher leading a small child."/>
<roomname x="45" y="52" english="Three&apos;s Company" translation="Dos són companyia, tres són fantasia" explanation="Named after the 70s sitcom - but also, suggests a connection to the earlier room Two&apos;s Company, which this room is an updated version of (Second part of the final stage has references to Colour TV shows)"/>
<roomname x="45" y="56" english="Must I Do Everything For You?" translation="Què vols, que tho faci tot jo?" explanation="This entire intermission section has a tone of a strict schoolteacher leading a small child."/>
<roomname x="46" y="54" english="Temporary Fault..." translation="Error temporal..." explanation="Opening room of the final level."/>
<roomname x="46" y="56" english="Now Stay Close To Me..." translation="Ara no ten vagis gaire lluny..." explanation="This entire intermission section has a tone of a strict schoolteacher leading a small child."/>
<roomname x="47" y="52" english="Cosmic Creepers" translation="Salem Saberhagen" explanation="Named after the cat from the 70s film Bedknobs and Broomsticks. Not sure why!"/>
<roomname x="47" y="54" english="Do Not Adjust the V-hold" translation="No ajusteu la sincronització vertical" explanation="I don&apos;t think V-hold is a real thing, it&apos;s supposed to just suggest &apos;Do not adjust your TV settings&apos;. (The final stage has room names that suggest old black and white TV shows.)"/>
<roomname x="47" y="56" english="...But Not Too Close" translation="...però tampoc tan a prop!" explanation="In this room, if you go too quickly, your crewmate will walk into spikes."/>
<roomname x="48" y="52" english="The Villi People" translation="Les vellositats de lintestí" explanation="Bennett just thought this room looked &apos;intestinal&apos;. Villi as in part of the intestinal system. Also refers to the 80s band The Village People."/>
<roomname x="48" y="54" english="Regular Service Will Return Shortly" translation="El servei es recuperarà ben aviat" explanation="This is something you might hear on a TV station if they had lost reception. (The final stage has room names that suggest old black and white TV shows. A really, really good way to translate this level would be to use the names of black and white TV shows that are well known in your language, rather than trying to keep the exact meaning of the TV shows used here.)"/>
<roomname x="48" y="56" english="Don&apos;t Be Afraid" translation="No tinguis por" explanation="This entire intermission section has a tone of a strict schoolteacher leading a small child."/>
<roomname x="49" y="52" english="Panic Room" translation="La sala del pànic" explanation="A panic room is a safe room that you can hide in during an emergency, but I don&apos;t think that was Bennett&apos;s intention with this name. This room suddenly starts scrolling as soon as you enter, causing a panic."/>
<roomname x="49" y="54" english="Origami Room" translation="Sala dorigami" explanation="As in folded paper - this room is mirrored around the center point."/>
<roomname x="49" y="56" english="Do as I Say..." translation="Fes el que et dic..." explanation="This entire intermission section has a tone of a strict schoolteacher leading a small child."/>
<roomname x="50" y="51" english="The V Stooges" translation="Els V guillats" explanation="Refers to the 3 Stooges (The final stage has room names that suggest old black and white TV shows.)"/>
<roomname x="50" y="52" english="1954 World Cup Vinyl" translation="Vinil de la Copa del Món de 1954" explanation="Refers to the World Cup Final (The final stage has room names that suggest old black and white TV shows.)"/>
<roomname x="50" y="56" english="...Not as I Do" translation="...no el que jo faig" explanation="This entire intermission section has a tone of a strict schoolteacher leading a small child."/>
<roomname x="51" y="53" english="The Final Challenge" translation="Lúltim repte" explanation="One of the last challenges in the game."/>
<roomname x="51" y="56" english="Mind Your Head" translation="Vés amb compte amb el cap" explanation="This entire intermission section has a tone of a strict schoolteacher leading a small child."/>
<roomname x="52" y="53" english="The Last Straw" translation="La gota que fa vessar el got" explanation="One more little challenge, just after the room called The Final Challenge"/>
<roomname x="52" y="56" english="Do Try To Keep Up" translation="Mira de seguir-me" explanation="This entire intermission section has a tone of a strict schoolteacher leading a small child."/>
<roomname x="53" y="48" english="Whee Sports" translation="Wiii, esports!" explanation="Refers to Wii Sports, the Nintendo Wii launch title. &apos;Whee&apos; as in what a child might say while going down a slide (this room has a long drop in it)"/>
<roomname x="53" y="49" english="Whizz Down The Shaft" translation="Afanyat i baixa pel pou" explanation="Whizz is Australian slang for doing something quickly, I think"/>
<roomname x="53" y="50" english="The Gravitron" translation="El gravitró" explanation="A special arcade section where you have to survive for 60 seconds. Bennett named this one so as to suggest a funfair ride (though not any one in particular)."/>
<roomname x="53" y="51" english="Tunnel of Terror" translation="El túnel del terror" explanation="Another name inspired by funfairs."/>
<roomname x="53" y="52" english="House of Mirrors" translation="La casa dels miralls" explanation="Another name inspired by funfairs."/>
<roomname x="53" y="53" english="W" translation="V doble" explanation="This room has platforms in a W shape."/>
<roomname x="53" y="56" english="You&apos;re Falling Behind" translation="Testàs endarrerint" explanation="This entire intermission section has a tone of a strict schoolteacher leading a small child."/>
<roomname x="54" y="48" english="VVVVVV" translation="VVVVVV" explanation="Final sequence of rooms that spell out V-V-V-V-V-V, 6/6"/>
<roomname x="54" y="49" english="VVVVV" translation="VVVVV" explanation="Final sequence of rooms that spell out V-V-V-V-V-V, 5/6"/>
<roomname x="54" y="50" english="VVVV" translation="VVVV" explanation="Final sequence of rooms that spell out V-V-V-V-V-V, 4/6"/>
<roomname x="54" y="51" english="VVV" translation="VVV" explanation="Final sequence of rooms that spell out V-V-V-V-V-V, 3/6"/>
<roomname x="54" y="52" english="VV" translation="VV" explanation="Final sequence of rooms that spell out V-V-V-V-V-V, 2/6"/>
<roomname x="54" y="53" english="V" translation="V" explanation="Final sequence of rooms that spell out V-V-V-V-V-V, 1/6"/>
<roomname x="54" y="56" english="Class Dismissed!" translation="Sha acabat la classe!" explanation="This entire intermission section has a tone of a strict schoolteacher leading a small child."/>
</roomnames>

View file

@ -1,71 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Please read README.txt for information about the language files -->
<roomnames_special>
<roomname english="Outer Space" translation="Espai exterior" explanation="Literally Outer Space"/>
<roomname english="Dimension VVVVVV" translation="Dimensió VVVVVV" explanation="The overall area that the game takes place in."/>
<roomname english="The Ship" translation="La nau" explanation="The dimension exploring spaceship"/>
<roomname english="Secret Lab" translation="Laboratori secret" explanation="An endgame section containing achievement trophys"/>
<roomname english="Laboratory" translation="Laboratori" explanation="One of the stages"/>
<roomname english="The Tower" translation="La Torre" explanation="One of the stages"/>
<roomname english="Warp Zone" translation="Zona cíclica" explanation="One of the stages"/>
<roomname english="Space Station" translation="Estació espacial" explanation="One of the stages"/>
<roomname english="Outside Dimension VVVVVV" translation="Fora de la dimensió VVVVVV" explanation="For rare rooms outside the normal area"/>
<roomname english="???" translation="???" explanation=""/>
<roomname english="The Super Gravitron" translation="El supergravitró" explanation="An expanded version of the room at 53, 50"/>
<roomname english="I Can&apos;t Believe You Got This Far" translation="No em puc creure que hagis arribat aquí" explanation="If you&apos;re playing No Death Mode, the room Prize for the Reckless has this roomname instead (the room is altered to make it possible to do this section without dying)"/>
<roomname english="Imagine Spikes There, if You Like" translation="Si vols, imagina-thi punxes" explanation="If you&apos;re playing a time trial, the room Prize for the Reckless has this roomname instead (the room is altered to make it possible to do this section without dying)"/>
<!-- - -->
<roomname english="Rear Window" translation="La finestra indiscreta" explanation="Named after the Hitchcock film (The final stage has room names that suggest old black and white TV shows.)"/>
<roomname english="Rear Vindow" translation="La vinestra indiscreta" explanation=""/>
<!-- - -->
<roomname english="On the Waterfront" translation="La llei del silenci" explanation="Named after the 1954 film (The final stage has room names that suggest old black and white TV shows.)"/>
<roomname english="On the Vaterfront" translation="La llei del vilenci" explanation=""/>
<!-- - -->
<roomname english="The Untouchables" translation="Els intocables" explanation="Before it was a film, the Untouchables was a TV series in 1959 (The final stage has room names that suggest old black and white TV shows.)"/>
<roomname english="The Untouchavles" translation="Els intocavles" explanation=""/>
<!-- - -->
<roomname english="Television Newsveel" translation="Noticiaris i Docvmentals" explanation="Refers to Television Newsreel. (The final stage has room names that suggest old black and white TV shows.)"/>
<roomname english="Television Newsvel" translation="Notiviaris i Docvmentals" explanation=""/>
<roomname english="TelevisvonvNewsvel" translation="Notiviavisi Vocvumenvals" explanation=""/>
<roomname english="TvlvvvsvonvNevsvel" translation="Votivvavvsi Vovuvevvalv" explanation=""/>
<roomname english="vvvvvvsvovvNe svel" translation="Vvovvvavvvv Vovvvvavv" explanation=""/>
<roomname english="vhv vvv&apos;vvovv vevl" translation="Vvvevvvvvvev vvvpvvv" explanation=""/>
<roomname english="vhv V v&apos;Cvovv vewv" translation="Vvvevvtvvvev vevpvrv" explanation=""/>
<roomname english="vhe 9 v&apos;Cvovv vewv" translation="Vevevotvciev vesvvre" explanation=""/>
<roomname english="vhe 9 v&apos;Cvovv Newv" translation="Velevovíciev vesvre" explanation=""/>
<roomname english="The 9 O&apos;Cvovk Newv" translation="Televotíciev vesvre" explanation=""/>
<roomname english="The 9 O&apos;Clock News" translation="Telenotícies vespre" explanation="(Second part of the final stage has references to Colour TV shows)"/>
<!-- - -->
<roomname english="Vwitched" translation="M de monocrom" explanation="Reference to early black and white sitcom Bewitched (The final stage has room names that suggest old black and white TV shows.)"/>
<roomname english="Vwitvhed" translation="V de monovrom" explanation=""/>
<roomname english="vVwivcvedv" translation="V ve movovrov" explanation=""/>
<roomname english="vvvwMvcvMdvv" translation="V vv movvrvv" explanation=""/>
<roomname english="DvvvwMvfvvMdvvv" translation="V vv vovvrv" explanation=""/>
<roomname english="Dvav Mvfvr Mdvvvv" translation="V ve vovvt" explanation=""/>
<roomname english="Diav M for Mdrver" translation="V de vort" explanation=""/>
<roomname english="Dial M for Murder" translation="M de mort" explanation="Named after the Hitchcock film (Second part of the final stage has references to Colour TV shows)"/>
<!-- - -->
<roomname english="Gvnsmoke" translation="La llei del revòlver" explanation="Gunsmoke was a black and white Western (The final stage has room names that suggest old black and white TV shows.)"/>
<roomname english="Gvnsmove" translation="Va llei dev revòlver" explanation=""/>
<roomname english="Gvnvmovevv" translation="Va vvei dev revòvvervv" explanation=""/>
<roomname english="Gunvmove1vv6" translation="Va llei dev revòvver(1vv6v" explanation=""/>
<roomname english="Vunsmoke 19v6" translation="Va llei dev revòlver (19v6)" explanation=""/>
<roomname english="Gunsmoke 1966" translation="La llei del revòlver (1966)" explanation="Gunsmoke changed to colour in 1966 (Second part of the final stage has references to Colour TV shows)"/>
<!-- - -->
<roomname english="Please enjoy these repeats" translation="Us oferim les següents reposicions" explanation="This stage also has a number of rooms which are harder versions of easier challenges, like this one. (The final stage has room names that suggest old black and white TV shows.)"/>
<roomname english="Please envoy theve repeats" translation="Vs oferim les següents revosicions" explanation=""/>
<roomname english="Plse envoy tse rvpvas" translation="Vsovriv ves vevüevtv revovivvns" explanation=""/>
<roomname english="Vl envoy te rvevs" translation="Vsvviv vevv evevtvevovvs" explanation=""/>
<roomname english="Vv evo tv vevs" translation="Vsvv vevv vvevvvoviv" explanation=""/>
<roomname english="Iv vhv Mvrvivs" translation="Divs velv mvrvvev" explanation=""/>
<roomname english="In the Margins" translation="Dins dels marges" explanation="Not sure if this has a TV show reference, might just be meant literally (Second part of the final stage has references to Colour TV shows)"/>
<!-- - -->
<roomname english="Try Jiggling the Antenna" translation="Prova de moure una mica lantena" explanation="(The final stage has room names that suggest old black and white TV shows.)"/>
<roomname english="Try Viggling the Antenna" translation="Prova de movre vna miva lantena" explanation=""/>
<roomname english="TryJivglvng theAvtevna" translation="Provavemovre unavivalvnteva" explanation=""/>
<roomname english="Tvvivglvng thAvtvvv" translation="Vrva vvmovve vvlvntva" explanation=""/>
<roomname english="Vvvgglvnv tvnvva" translation="Vv vmvve vvlvvva" explanation=""/>
<roomname english="Vvavvnvs vvtv" translation="Va vovva vev vev" explanation=""/>
<roomname english="Veavvn&apos;s Gvte" translation="Va povta dev vel" explanation="Named after the 1980&apos;s film (Second part of the final stage has references to Colour TV shows)"/>
<roomname english="Heaven&apos;s Gate" translation="La porta del cel" explanation="Named after the 1980&apos;s film (Second part of the final stage has references to Colour TV shows)"/>
</roomnames_special>

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