Compare commits
1 Commits
master
...
AnimateSun
Author | SHA1 | Date | |
---|---|---|---|
|
abb3465429 |
53
.github/ISSUE_TEMPLATE.md
vendored
@ -1,53 +0,0 @@
|
||||
<!--
|
||||
*** Please fill in the fields below. Remove any placeholders that are unused/not applicable.
|
||||
-->
|
||||
## Description
|
||||
<!-- Provide a description of your issue.
|
||||
For any suggestions, please address them on the forum: https://forum.freegamedev.net/viewforum.php?f=16 -->
|
||||
|
||||
|
||||
|
||||
## Steps to reproduce
|
||||
<!-- List any required steps to reproduce the issue here -->
|
||||
|
||||
|
||||
|
||||
## Configuration
|
||||
|
||||
<!-- Please specify the version of STK you are using. The version can be found in the "About" screen. -->
|
||||
STK release version:
|
||||
|
||||
<!-- Please specify where you downloaded STK -->
|
||||
STK Source (PPA, distribution package, official binary, etc.):
|
||||
|
||||
System:
|
||||
|
||||
Graphics card:
|
||||
|
||||
CPU:
|
||||
|
||||
Gamepads/keyboards models if related to the issue:
|
||||
|
||||
## Additional information
|
||||
<!--
|
||||
Please provide stdout.log, it is located in:
|
||||
* %appdata%\supertuxkart\config-0.10 (Windows)
|
||||
* ~/Library/Application Support/supertuxkart/config-0.10 (mac)
|
||||
* $XDG_CONFIG_HOME/supertuxkart/config-0.10 or ~/.config/supertuxkart/config-0.10 (Linux and other unix based systems)
|
||||
-->
|
||||
stdout.log:
|
||||
```
|
||||
|
||||
```
|
||||
|
||||
<!-- If your issue is related to the input config (gamepads, keyboards), please provide your file input.xml located in the same directory as stdout.log. -->
|
||||
input.xml:
|
||||
```xml
|
||||
|
||||
```
|
||||
|
||||
<!-- If an error message was shown, please paste the complete error message, or a screenshot of it. -->
|
||||
Error message:
|
||||
```
|
||||
|
||||
```
|
11
.github/PULL_REQUEST_TEMPLATE.md
vendored
@ -1,11 +0,0 @@
|
||||
## Agreement
|
||||
```
|
||||
By creating a pull request in stk-code, you hereby agree to dual-license your contribution as
|
||||
GNU General Public License version 3 or any later version and
|
||||
Mozilla Public License version 2 or any later version.
|
||||
|
||||
This includes your previous contribution(s) under the same name of contributor.
|
||||
|
||||
Keep the above statement in the pull request comment for agreement.
|
||||
|
||||
```
|
187
.github/workflows/apple.yml
vendored
@ -1,187 +0,0 @@
|
||||
name: apple
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
tags:
|
||||
- '*'
|
||||
pull_request: {}
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
strategy:
|
||||
fail-fast: true
|
||||
matrix:
|
||||
platform: [iPhoneOS, MacOSX]
|
||||
arch: [arm64, x86_64]
|
||||
exclude:
|
||||
- platform: iPhoneOS
|
||||
arch: x86_64
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 0
|
||||
submodules: true
|
||||
- id: sysroot
|
||||
uses: ASzc/change-string-case-action@v1
|
||||
with:
|
||||
string: ${{ matrix.platform }}
|
||||
- name: Download cctools
|
||||
run: |
|
||||
cd /opt
|
||||
wget https://github.com/supertuxkart/dependencies/releases/download/cctools/cctools-14.1.tar.xz
|
||||
tar xf cctools-14.1.tar.xz
|
||||
rm cctools-14.1.tar.xz
|
||||
- name: Restore timestamps
|
||||
run: |
|
||||
wget https://github.com/MestreLion/git-tools/archive/refs/heads/main.zip
|
||||
unzip main.zip
|
||||
python git-tools-main/git-restore-mtime
|
||||
- name: List build cache restore keys
|
||||
run: |
|
||||
# Look for the last 9 build caches (GitHub supports max 10 including current one)
|
||||
for number in 1 2 3 4 5 6 7 8 9
|
||||
do
|
||||
id=$((${{ github.run_number }} - number))
|
||||
echo "cache_$number=apple-${{ github.ref }}-${{ matrix.arch }}-${{ matrix.platform }}-$id" >> $GITHUB_ENV
|
||||
done
|
||||
- name: Handle build cache
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: |
|
||||
build
|
||||
key: apple-${{ github.ref }}-${{ matrix.arch }}-${{ matrix.platform }}-${{ github.run_number }}
|
||||
restore-keys: |
|
||||
${{ env.cache_1 }}
|
||||
${{ env.cache_2 }}
|
||||
${{ env.cache_3 }}
|
||||
${{ env.cache_4 }}
|
||||
${{ env.cache_5 }}
|
||||
${{ env.cache_6 }}
|
||||
${{ env.cache_7 }}
|
||||
${{ env.cache_8 }}
|
||||
${{ env.cache_9 }}
|
||||
- name: Download dependencies
|
||||
run: |
|
||||
wget https://github.com/supertuxkart/dependencies/releases/download/preview/dependencies-${{ steps.sysroot.outputs.lowercase }}.tar.xz
|
||||
tar xf dependencies-${{ steps.sysroot.outputs.lowercase }}.tar.xz
|
||||
- name: Configure clang runtime name
|
||||
run: |
|
||||
if [ ${{ matrix.platform }} = "MacOSX" ]; then
|
||||
echo "rt=osx" >> $GITHUB_ENV
|
||||
elif [ ${{ matrix.platform }} = "iPhoneOS" ]; then
|
||||
echo "rt=ios" >> $GITHUB_ENV
|
||||
elif [ ${{ matrix.platform }} = "AppleTVOS" ]; then
|
||||
echo "rt=tvos" >> $GITHUB_ENV
|
||||
elif [ ${{ matrix.platform }} = "iPhoneSimulator" ]; then
|
||||
echo "rt=iossim" >> $GITHUB_ENV
|
||||
elif [ ${{ matrix.platform }} = "AppleTVSimulator" ]; then
|
||||
echo "rt=tvossim" >> $GITHUB_ENV
|
||||
fi
|
||||
- name: Configure bulid
|
||||
run: |
|
||||
mkdir -p build
|
||||
cd build
|
||||
cmake .. -DCCTOOLS_PREFIX=/opt/cctools -DCCTOOLS_ARCH=${{ matrix.arch }} -DCCTOOLS_PLATFORM=${{ matrix.platform }} \
|
||||
-DRT=/opt/cctools/darwin/libclang_rt.${{ env.rt }}.a -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-cctools.cmake -DCHECK_ASSETS=OFF
|
||||
- name: Build
|
||||
run: |
|
||||
cd build
|
||||
make -j4
|
||||
mv bin ../${{ steps.sysroot.outputs.lowercase }}-${{ matrix.arch }}
|
||||
- name: Upload binaries
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: ${{ steps.sysroot.outputs.lowercase }}-${{ matrix.arch }}
|
||||
path: ${{ steps.sysroot.outputs.lowercase }}-${{ matrix.arch }}
|
||||
packaging:
|
||||
name: Packaging STK
|
||||
needs: build
|
||||
runs-on: macos-latest
|
||||
steps:
|
||||
- name: Configure packaging name for git master branch
|
||||
if: ${{ github.ref == 'refs/heads/master' }}
|
||||
run: |
|
||||
echo "release_tag=git`date +%Y%m%d`" >> $GITHUB_ENV
|
||||
echo "release_name=preview" >> $GITHUB_ENV
|
||||
- name: Configure packaging name for tag
|
||||
if: ${{ startsWith(github.ref, 'refs/tags/') }}
|
||||
run: |
|
||||
echo "release_tag=`basename $GITHUB_REF`" >> $GITHUB_ENV
|
||||
echo "release_name=`basename $GITHUB_REF`" >> $GITHUB_ENV
|
||||
- name: Configure packaging name for non-releasing branch
|
||||
if: ${{ (github.ref != 'refs/heads/master' && !startsWith(github.ref, 'refs/tags/')) || github.repository_owner != 'supertuxkart' }}
|
||||
run: |
|
||||
echo "release_tag=" >> $GITHUB_ENV
|
||||
echo "release_name=" >> $GITHUB_ENV
|
||||
- name: Check for prerelease
|
||||
if: ${{ github.ref == 'refs/heads/master' || contains(github.ref, 'rc') || contains(github.ref, 'beta') }}
|
||||
run: |
|
||||
echo "release_pre=true" >> $GITHUB_ENV
|
||||
- name: Check for non-prerelease
|
||||
if: ${{ github.ref != 'refs/heads/master' && !contains(github.ref, 'rc') && !contains(github.ref, 'beta') }}
|
||||
run: |
|
||||
echo "release_pre=false" >> $GITHUB_ENV
|
||||
- name: Show packaging name
|
||||
run : |
|
||||
echo "${{ env.release_tag }}"
|
||||
echo "${{ env.release_name }}"
|
||||
echo "${{ env.release_pre }}"
|
||||
- name: Download binaries
|
||||
uses: actions/download-artifact@v2
|
||||
- name: Mask developer name
|
||||
run: |
|
||||
echo "::add-mask::${{ secrets.MAC_DEVELOPER_NAME }}"
|
||||
- name: Import certificates
|
||||
if: ${{ env.release_tag != '' }}
|
||||
uses: apple-actions/import-codesign-certs@v1
|
||||
with:
|
||||
p12-file-base64: ${{ secrets.MAC_DEVELOPER_ID_P12_FILE }}
|
||||
p12-password: ${{ secrets.MAC_DEVELOPER_ID_P12_PASSWORD }}
|
||||
- name: Run dylibbundler and sign STK
|
||||
if: ${{ env.release_tag != '' }}
|
||||
env:
|
||||
developer_id: "Developer ID Application: ${{ secrets.MAC_DEVELOPER_NAME }} (${{ secrets.MAC_DEVELOPER_TEAM }})"
|
||||
run: |
|
||||
wget https://github.com/supertuxkart/dependencies/releases/download/preview/dependencies-macosx.tar.xz
|
||||
tar xf dependencies-macosx.tar.xz
|
||||
HOMEBREW_NO_AUTO_UPDATE=1 brew install dylibbundler
|
||||
lipo -create ./macosx-x86_64/supertuxkart.app/Contents/MacOS/supertuxkart ./macosx-arm64/supertuxkart.app/Contents/MacOS/supertuxkart -output ./macosx-arm64/supertuxkart.app/Contents/MacOS/supertuxkart
|
||||
chmod 755 ./macosx-arm64/supertuxkart.app/Contents/MacOS/supertuxkart
|
||||
dylibbundler -od -b -x ./macosx-arm64/supertuxkart.app/Contents/MacOS/supertuxkart -d ./macosx-arm64/supertuxkart.app/Contents/libs/ -p @executable_path/../libs/ -s dependencies-macosx/lib -ns
|
||||
# We use SDL_Vulkan_LoadLibrary for 10.9 compatibility, so otool -L supertuxkart has no libMoltenVK.dylib
|
||||
cp ./dependencies-macosx/lib/libMoltenVK.dylib ./macosx-arm64/supertuxkart.app/Contents/libs/
|
||||
cd ./macosx-arm64/supertuxkart.app/Contents/Resources/data
|
||||
wget https://github.com/supertuxkart/stk-assets-mobile/releases/download/git/stk-assets-full.zip
|
||||
unzip stk-assets-full.zip
|
||||
rm stk-assets-full.zip
|
||||
cd ../../../../..
|
||||
mv ./macosx-arm64/supertuxkart.app SuperTuxKart.app
|
||||
codesign --force --sign "$developer_id" SuperTuxKart.app/Contents/libs/*.dylib
|
||||
codesign --force --options=runtime --deep --sign "$developer_id" SuperTuxKart.app
|
||||
- name: "Notarize release build"
|
||||
if: ${{ env.release_tag != '' && github.ref != 'refs/heads/master' }}
|
||||
run: |
|
||||
ditto -c -k --sequesterRsrc --keepParent SuperTuxKart.app tmp.zip
|
||||
xcrun notarytool submit tmp.zip --apple-id ${{ secrets.STK_NOTARIZATION_USERNAME }} \
|
||||
--password ${{ secrets.STK_NOTARIZATION_PASSWORD }} \
|
||||
--team-id ${{ secrets.MAC_DEVELOPER_TEAM }} --wait
|
||||
xcrun stapler staple SuperTuxKart.app
|
||||
- name: Archive
|
||||
if: ${{ env.release_tag != '' }}
|
||||
run: |
|
||||
ditto -c -k --sequesterRsrc --keepParent SuperTuxKart.app SuperTuxKart-${{ env.release_tag }}-mac.zip
|
||||
- name: Create release
|
||||
if: ${{ env.release_tag != '' }}
|
||||
uses: ncipollo/release-action@v1.8.8
|
||||
with:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
artifacts: "SuperTuxKart*.zip"
|
||||
tag: ${{ env.release_name }}
|
||||
omitBodyDuringUpdate: true
|
||||
omitNameDuringUpdate: true
|
||||
allowUpdates: true
|
||||
prerelease: ${{ env.release_pre }}
|
169
.github/workflows/linux.yml
vendored
@ -1,169 +0,0 @@
|
||||
# Copyright (C) 2020-2021 Jacob Burroughs <maths22@gmail.com>
|
||||
# 2020-2021 A. Semphris <semphris@protonmail.com>
|
||||
#
|
||||
# Released under the Creative Commons Zero (CC0) license, available at:
|
||||
# Legal code: https://creativecommons.org/publicdomain/zero/1.0/legalcode
|
||||
# Information: https://creativecommons.org/share-your-work/public-domain/cc0/
|
||||
|
||||
|
||||
|
||||
# Note: Parts of this code were taken from the SuperTux project.
|
||||
# ~ Semphris (responsible for transfering and adapting the file)
|
||||
|
||||
name: linux
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
tags:
|
||||
- '*'
|
||||
pull_request: {}
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
strategy:
|
||||
fail-fast: true
|
||||
matrix:
|
||||
os: [ubuntu-latest]
|
||||
compiler: [gcc, clang]
|
||||
build_type: [Debug, Release]
|
||||
server_only: [ON, OFF]
|
||||
exclude:
|
||||
- os: macos-latest
|
||||
compiler: gcc
|
||||
- os: macos-latest
|
||||
build_type: Debug
|
||||
|
||||
runs-on: ${{ matrix.os }}
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 1
|
||||
submodules: true
|
||||
- name: Configure packaging name for git master branch
|
||||
if: ${{ matrix.build_type == 'Release' && matrix.server_only == 'OFF' &&
|
||||
github.ref == 'refs/heads/master' }}
|
||||
run: |
|
||||
echo "release_tag=git`date +%Y%m%d`" >> $GITHUB_ENV
|
||||
echo "release_name=preview" >> $GITHUB_ENV
|
||||
- name: Configure packaging name for tag
|
||||
if: ${{ matrix.build_type == 'Release' && matrix.server_only == 'OFF' &&
|
||||
startsWith(github.ref, 'refs/tags/') }}
|
||||
run: |
|
||||
echo "release_tag=`basename $GITHUB_REF`" >> $GITHUB_ENV
|
||||
echo "release_name=`basename $GITHUB_REF`" >> $GITHUB_ENV
|
||||
- name: Configure packaging name for non-releasing branch
|
||||
if: ${{ matrix.build_type != 'Release' || matrix.server_only != 'OFF' ||
|
||||
!(github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags/')) ||
|
||||
github.repository_owner != 'supertuxkart' }}
|
||||
run: |
|
||||
echo "release_tag=" >> $GITHUB_ENV
|
||||
echo "release_name=" >> $GITHUB_ENV
|
||||
- name: Check for prerelease
|
||||
if: ${{ github.ref == 'refs/heads/master' || contains(github.ref, 'rc') || contains(github.ref, 'beta') }}
|
||||
run: |
|
||||
echo "release_pre=true" >> $GITHUB_ENV
|
||||
- name: Check for non-prerelease
|
||||
if: ${{ github.ref != 'refs/heads/master' && !contains(github.ref, 'rc') && !contains(github.ref, 'beta') }}
|
||||
run: |
|
||||
echo "release_pre=false" >> $GITHUB_ENV
|
||||
- name: Show packaging name
|
||||
run : |
|
||||
echo "${{ env.release_tag }}"
|
||||
echo "${{ env.release_name }}"
|
||||
echo "${{ env.release_pre }}"
|
||||
- name: Install linux dependencies
|
||||
if: ${{ matrix.os == 'ubuntu-latest' }}
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt install -y build-essential cmake libbluetooth-dev libcurl4-gnutls-dev \
|
||||
libfreetype6-dev libharfbuzz-dev libjpeg-dev libogg-dev libopenal-dev \
|
||||
libpng-dev libsdl2-dev libvorbis-dev pkg-config zlib1g-dev clang
|
||||
- name: Install dylibbundler for packaging osx binary
|
||||
if: ${{ env.release_tag != '' && matrix.os == 'macos-latest' && matrix.build_type == 'Release' && matrix.server_only == 'OFF' }}
|
||||
run: |
|
||||
HOMEBREW_NO_AUTO_UPDATE=1 brew install dylibbundler
|
||||
- name: Install macos dependencies
|
||||
if: ${{ matrix.os == 'macos-latest' }}
|
||||
run: |
|
||||
# Something funky happens with freetype if mono is left
|
||||
sudo mv /Library/Frameworks/Mono.framework /Library/Frameworks/Mono.framework-disabled
|
||||
wget https://github.com/supertuxkart/dependencies/releases/download/preview/dependencies-mac.tar.xz
|
||||
# Remove any existing installation to avoid conflict with bundled dependencies
|
||||
rm -rf /usr/local/include/*
|
||||
rm -rf /usr/local/opt/openssl@1.1/include
|
||||
rm -rf /usr/local/opt/freetype
|
||||
rm -rf /usr/local/opt/harfbuzz
|
||||
tar xf dependencies-mac.tar.xz -C /usr/local
|
||||
rm dependencies-mac.tar.xz
|
||||
- name: Set compiler (gcc)
|
||||
if: ${{ matrix.os == 'ubuntu-latest' && matrix.compiler == 'gcc' }}
|
||||
run: |
|
||||
echo "CXX=g++" >> $GITHUB_ENV
|
||||
echo "CC=gcc" >> $GITHUB_ENV
|
||||
- name: Set compiler (clang)
|
||||
if: ${{ matrix.os == 'ubuntu-latest' && matrix.compiler == 'clang' }}
|
||||
run: |
|
||||
echo "CXX=clang++" >> $GITHUB_ENV
|
||||
echo "CC=clang" >> $GITHUB_ENV
|
||||
- name: Set compiler (macos)
|
||||
if: ${{ matrix.os == 'macos-latest' }}
|
||||
run: |
|
||||
# This ensures for now we use clang11
|
||||
# Clang12 runs into a bunch of fun with `include location '/usr/local/include' is unsafe for cross-compilation`
|
||||
# that we don't care about for now
|
||||
echo "CXX=clang++" >> $GITHUB_ENV
|
||||
echo "CC=clang" >> $GITHUB_ENV
|
||||
- name: Configure bulid (linux)
|
||||
if: ${{ matrix.os != 'macos-latest' }}
|
||||
env:
|
||||
BUILD_TYPE: ${{ matrix.build_type }}
|
||||
SERVER_ONLY: ${{ matrix.server_only }}
|
||||
run: |
|
||||
cmake --version
|
||||
$CXX --version
|
||||
mkdir "build"
|
||||
cd "build"
|
||||
cmake .. -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DSERVER_ONLY=$SERVER_ONLY -DCHECK_ASSETS=off -DBUILD_RECORDER=off -DNO_SHADERC=on;
|
||||
- name: Configure bulid (macos)
|
||||
if: ${{ matrix.os == 'macos-latest' }}
|
||||
env:
|
||||
BUILD_TYPE: ${{ matrix.build_type }}
|
||||
SERVER_ONLY: ${{ matrix.server_only }}
|
||||
run: |
|
||||
cmake --version
|
||||
$CXX --version
|
||||
mkdir "build"
|
||||
cd "build"
|
||||
CFLAGS="-mmacosx-version-min=10.9" CXXFLAGS="-mmacosx-version-min=10.9" LINKFLAGS="-mmacosx-version-min=10.9" LDFLAGS="-mmacosx-version-min=10.9" /usr/local/opt/cmake/bin/cmake .. -DCMAKE_OSX_DEPLOYMENT_TARGET=10.9 -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DSERVER_ONLY=$SERVER_ONLY -DCHECK_ASSETS=off -DBUILD_RECORDER=off;
|
||||
- name: Build and install
|
||||
working-directory: build
|
||||
run: |
|
||||
make -j3 VERBOSE=1
|
||||
make install DESTDIR="/tmp/stk" VERBOSE=1
|
||||
- name: Packaging (macos)
|
||||
if: ${{ env.release_tag != '' && matrix.os == 'macos-latest' && matrix.build_type == 'Release' && matrix.server_only == 'OFF' }}
|
||||
working-directory: build
|
||||
run: |
|
||||
/usr/local/opt/dylibbundler/bin/dylibbundler -od -b -x ./bin/SuperTuxKart.app/Contents/MacOS/supertuxkart -d ./bin/SuperTuxKart.app/Contents/libs/ -p @executable_path/../libs/
|
||||
wget https://github.com/supertuxkart/stk-assets-mobile/releases/download/git/stk-assets-full.zip
|
||||
unzip stk-assets-full.zip -d ../data
|
||||
rm stk-assets-full.zip
|
||||
cd bin
|
||||
# Fix the name on case insensitive filesystem
|
||||
mv supertuxkart.app stk.app
|
||||
mv stk.app SuperTuxKart.app
|
||||
zip -r ../SuperTuxKart-${{ env.release_tag }}-mac.zip .
|
||||
- name: Create Release (macos)
|
||||
if: ${{ env.release_tag != '' && matrix.os == 'macos-latest' && matrix.build_type == 'Release' && matrix.server_only == 'OFF' }}
|
||||
uses: ncipollo/release-action@v1
|
||||
with:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
artifacts: "build/SuperTuxKart-${{ env.release_tag }}-mac.zip"
|
||||
tag: ${{ env.release_name }}
|
||||
omitBodyDuringUpdate: true
|
||||
omitNameDuringUpdate: true
|
||||
allowUpdates: true
|
||||
prerelease: ${{ env.release_pre }}
|
113
.github/workflows/switch.yml
vendored
@ -1,113 +0,0 @@
|
||||
name: switch
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- feature/gh-actions-switch-cache
|
||||
tags:
|
||||
- '*'
|
||||
pull_request: {}
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
build_switch:
|
||||
name: Build Switch
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: 'devkitpro/devkita64'
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
# We need 0 so we get all commits for mtime!
|
||||
fetch-depth: 0
|
||||
path: "./stk-code"
|
||||
- name: Grab assets
|
||||
run: |
|
||||
wget -q https://github.com/supertuxkart/stk-assets-mobile/releases/download/git/stk-assets-full.zip
|
||||
unzip -q stk-assets-full.zip -d stk-assets
|
||||
rm stk-assets-full.zip
|
||||
- name: Restore modified date
|
||||
run: |
|
||||
cd stk-code
|
||||
git restore-mtime .
|
||||
cd ..
|
||||
|
||||
# Env setup!
|
||||
- name: Configure packaging name for git master branch
|
||||
if: ${{ github.ref == 'refs/heads/master' }}
|
||||
run: |
|
||||
echo "release_tag=git`date +%Y%m%d`" >> $GITHUB_ENV
|
||||
echo "release_name=preview" >> $GITHUB_ENV
|
||||
- name: Configure packaging name for tag
|
||||
if: ${{ startsWith(github.ref, 'refs/tags/') }}
|
||||
run: |
|
||||
echo "release_tag=`basename $GITHUB_REF`" >> $GITHUB_ENV
|
||||
echo "release_name=`basename $GITHUB_REF`" >> $GITHUB_ENV
|
||||
- name: Configure packaging name for non-releasing branch
|
||||
if: ${{ (github.ref != 'refs/heads/master' && !startsWith(github.ref, 'refs/tags/')) || github.repository_owner != 'supertuxkart' }}
|
||||
run: |
|
||||
echo "release_tag=" >> $GITHUB_ENV
|
||||
echo "release_name=" >> $GITHUB_ENV
|
||||
- name: Check for prerelease
|
||||
if: ${{ github.ref == 'refs/heads/master' || contains(github.ref, 'rc') || contains(github.ref, 'beta') }}
|
||||
run: |
|
||||
echo "release_pre=true" >> $GITHUB_ENV
|
||||
- name: Check for non-prerelease
|
||||
if: ${{ github.ref != 'refs/heads/master' && !contains(github.ref, 'rc') && !contains(github.ref, 'beta') }}
|
||||
run: |
|
||||
echo "release_pre=false" >> $GITHUB_ENV
|
||||
- name: Show packaging name
|
||||
run : |
|
||||
echo "${{ env.release_tag }}"
|
||||
echo "${{ env.release_name }}"
|
||||
echo "${{ env.release_pre }}"
|
||||
- name: List build cache restore keys
|
||||
shell : bash
|
||||
run: |
|
||||
# Look for the last 9 build caches (GitHub supports max 10 including current one)
|
||||
for number in 1 2 3 4 5 6 7 8 9
|
||||
do
|
||||
id=$((${{ github.run_number }} - number))
|
||||
echo "cache_$number=switch-${{ github.ref }}-$id" >> $GITHUB_ENV
|
||||
done
|
||||
- name: Handle build cache
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
# This is unnecessarily verbose and might break, but again ! seems broken
|
||||
# See: https://github.com/Mstrodl/stk-code/runs/2333673736?check_suite_focus=true#step:16:34
|
||||
path: |
|
||||
stk-code/cmake_build/CMakeFiles
|
||||
stk-code/cmake_build/Makefile
|
||||
stk-code/cmake_build/lib
|
||||
stk-code/cmake_build/bin/supertuxkart
|
||||
stk-code/cmake_build/*.cmake
|
||||
stk-code/cmake_build/*.txt
|
||||
|
||||
# Make sure PRs can't overwrite!
|
||||
key: switch-${{ github.ref }}-${{ github.run_number }}
|
||||
restore-keys: |
|
||||
${{ env.cache_1 }}
|
||||
${{ env.cache_2 }}
|
||||
${{ env.cache_3 }}
|
||||
${{ env.cache_4 }}
|
||||
${{ env.cache_5 }}
|
||||
${{ env.cache_6 }}
|
||||
${{ env.cache_7 }}
|
||||
${{ env.cache_8 }}
|
||||
${{ env.cache_9 }}
|
||||
- name: Run build script
|
||||
run: |
|
||||
cd stk-code/switch
|
||||
PROJECT_VERSION="${{ env.release_tag }}" ./make.sh
|
||||
- name: Create release
|
||||
uses: ncipollo/release-action@v1.8.8
|
||||
if: ${{ env.release_tag != '' }}
|
||||
with:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
artifacts: "stk-code/cmake_build/bin/SuperTuxKart-${{ env.release_tag }}-switch.zip"
|
||||
tag: ${{ env.release_name }}
|
||||
omitBodyDuringUpdate: true
|
||||
omitNameDuringUpdate: true
|
||||
allowUpdates: true
|
||||
prerelease: ${{ env.release_pre }}
|
300
.github/workflows/windows.yml
vendored
@ -1,300 +0,0 @@
|
||||
name: windows
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
tags:
|
||||
- '*'
|
||||
pull_request: {}
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
strategy:
|
||||
fail-fast: true
|
||||
matrix:
|
||||
arch: [i686, x86_64, armv7, aarch64]
|
||||
os: [windows-latest, ubuntu-latest]
|
||||
runs-on: ${{ matrix.os }}
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 0
|
||||
submodules: false
|
||||
- name: Set up environment for windows-latest
|
||||
shell : bash
|
||||
if: ${{ matrix.os == 'windows-latest' }}
|
||||
run: |
|
||||
echo "wget=C:\msys64\usr\bin\wget.exe" >> $GITHUB_ENV
|
||||
echo "unzip=unzip" >> $GITHUB_ENV
|
||||
if [ ${{ matrix.arch }} = "i686" ]; then
|
||||
echo "cmake_arch=Win32" >> $GITHUB_ENV
|
||||
elif [ ${{ matrix.arch }} = "x86_64" ]; then
|
||||
echo "cmake_arch=x64" >> $GITHUB_ENV
|
||||
elif [ ${{ matrix.arch }} = "armv7" ]; then
|
||||
echo "cmake_arch=ARM" >> $GITHUB_ENV
|
||||
else
|
||||
echo "cmake_arch=ARM64" >> $GITHUB_ENV
|
||||
fi
|
||||
- name: Set up environment for ubuntu-latest
|
||||
if: ${{ matrix.os == 'ubuntu-latest' }}
|
||||
run: |
|
||||
echo "wget=wget" >> $GITHUB_ENV
|
||||
echo "unzip=unzip" >> $GITHUB_ENV
|
||||
- name: Restore timestamps
|
||||
run: |
|
||||
${{ env.wget }} https://github.com/MestreLion/git-tools/archive/refs/heads/main.zip
|
||||
${{ env.unzip }} main.zip
|
||||
python git-tools-main/git-restore-mtime
|
||||
- name: List build cache restore keys
|
||||
shell : bash
|
||||
run: |
|
||||
# Look for the last 9 build caches (GitHub supports max 10 including current one)
|
||||
for number in 1 2 3 4 5 6 7 8 9
|
||||
do
|
||||
id=$((${{ github.run_number }} - number))
|
||||
echo "cache_$number=windows-${{ github.ref }}-${{ matrix.arch }}-${{ matrix.os }}-$id" >> $GITHUB_ENV
|
||||
done
|
||||
- name: Handle build cache
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: |
|
||||
build
|
||||
key: windows-${{ github.ref }}-${{ matrix.arch }}-${{ matrix.os }}-${{ github.run_number }}
|
||||
restore-keys: |
|
||||
${{ env.cache_1 }}
|
||||
${{ env.cache_2 }}
|
||||
${{ env.cache_3 }}
|
||||
${{ env.cache_4 }}
|
||||
${{ env.cache_5 }}
|
||||
${{ env.cache_6 }}
|
||||
${{ env.cache_7 }}
|
||||
${{ env.cache_8 }}
|
||||
${{ env.cache_9 }}
|
||||
- name: Download dependencies
|
||||
run: |
|
||||
${{ env.wget }} https://github.com/supertuxkart/dependencies/releases/download/preview/dependencies-win-${{ matrix.arch }}.zip
|
||||
${{ env.unzip }} dependencies-win-${{ matrix.arch }}.zip
|
||||
- name: Install MinGW for i686 or x86_64
|
||||
if: ${{ matrix.os == 'ubuntu-latest' && ( matrix.arch == 'i686' || matrix.arch == 'x86_64' ) }}
|
||||
run: |
|
||||
cd /
|
||||
sudo mkdir -p /data/mxe/usr
|
||||
cd /data/mxe/usr
|
||||
# It's compiled from https://github.com/mxe/mxe
|
||||
sudo wget https://github.com/supertuxkart/dependencies/releases/download/preview/mxe_static_mingw.zip
|
||||
sudo unzip mxe_static_mingw.zip
|
||||
sudo rm mxe_static_mingw.zip
|
||||
# For libfl.so.2
|
||||
sudo apt install -y libfl-dev
|
||||
- name: Install MinGW for armv7 or aarch64
|
||||
if: ${{ matrix.os == 'ubuntu-latest' && ( matrix.arch == 'armv7' || matrix.arch == 'aarch64' ) }}
|
||||
run: |
|
||||
cd /
|
||||
sudo wget https://github.com/mstorsjo/llvm-mingw/releases/download/20210423/llvm-mingw-20210423-msvcrt-ubuntu-18.04-x86_64.tar.xz
|
||||
sudo tar xf llvm-mingw-20210423-msvcrt-ubuntu-18.04-x86_64.tar.xz
|
||||
sudo mv llvm-mingw-20210423-msvcrt-ubuntu-18.04-x86_64 llvm-mingw
|
||||
- name: Set up MinGW Toolchain for i686
|
||||
if: ${{ matrix.os == 'ubuntu-latest' && matrix.arch == 'i686' }}
|
||||
run: |
|
||||
echo "SET(CMAKE_SYSTEM_NAME Windows)" > toolchain.cmake
|
||||
echo "SET(CMAKE_C_COMPILER /data/mxe/usr/bin/i686-w64-mingw32.static.posix.dw2-gcc)" >> toolchain.cmake
|
||||
echo "SET(CMAKE_CXX_COMPILER /data/mxe/usr/bin/i686-w64-mingw32.static.posix.dw2-g++)" >> toolchain.cmake
|
||||
echo "SET(CMAKE_RC_COMPILER /data/mxe/usr/bin/i686-w64-mingw32.static.posix.dw2-windres)" >> toolchain.cmake
|
||||
echo "SET(CMAKE_FIND_ROOT_PATH \${PROJECT_SOURCE_DIR}/dependencies-win-i686 /data/mxe/usr/i686-w64-mingw32.static.posix.dw2/ /data/mxe/usr/lib/gcc/i686-w64-mingw32.static.posix.dw2/5.5.0/)" >> toolchain.cmake
|
||||
echo "set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)" >> toolchain.cmake
|
||||
echo "set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ALWAYS)" >> toolchain.cmake
|
||||
echo "set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)" >> toolchain.cmake
|
||||
- name: Set up MinGW Toolchain for x86_64
|
||||
if: ${{ matrix.os == 'ubuntu-latest' && matrix.arch == 'x86_64' }}
|
||||
run: |
|
||||
echo "SET(CMAKE_SYSTEM_NAME Windows)" > toolchain.cmake
|
||||
echo "SET(CMAKE_C_COMPILER /data/mxe/usr/bin/x86_64-w64-mingw32.static.posix.seh-gcc)" >> toolchain.cmake
|
||||
echo "SET(CMAKE_CXX_COMPILER /data/mxe/usr/bin/x86_64-w64-mingw32.static.posix.seh-g++)" >> toolchain.cmake
|
||||
echo "SET(CMAKE_RC_COMPILER /data/mxe/usr/bin/x86_64-w64-mingw32.static.posix.seh-windres)" >> toolchain.cmake
|
||||
echo "SET(CMAKE_FIND_ROOT_PATH \${PROJECT_SOURCE_DIR}/dependencies-win-x86_64 /data/mxe/usr/x86_64-w64-mingw32.static.posix.seh/ /data/mxe/usr/lib/gcc/x86_64-w64-mingw32.static.posix.seh/5.5.0/)" >> toolchain.cmake
|
||||
echo "set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)" >> toolchain.cmake
|
||||
echo "set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ALWAYS)" >> toolchain.cmake
|
||||
echo "set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)" >> toolchain.cmake
|
||||
# Manually specify CMAKE_SYSTEM_PROCESSOR, it can only be set together with -DDCMAKE_SYSTEM_NAME
|
||||
- name: Configure bulid for MSVC
|
||||
if: ${{ matrix.os == 'windows-latest' }}
|
||||
run: |
|
||||
mkdir -Force build
|
||||
cd build
|
||||
cmake .. -G "Visual Studio 17 2022" -DCMAKE_SYSTEM_NAME=Windows -DCMAKE_SYSTEM_PROCESSOR=${{ matrix.arch }} -A ${{ env.cmake_arch }} -DCHECK_ASSETS=OFF
|
||||
- name: Configure bulid for MinGW (i686 or x86_64)
|
||||
if: ${{ matrix.os == 'ubuntu-latest' && matrix.arch != 'armv7' && matrix.arch != 'aarch64' }}
|
||||
run: |
|
||||
mkdir -p build
|
||||
cd build
|
||||
cmake .. -DCMAKE_TOOLCHAIN_FILE=../toolchain.cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCHECK_ASSETS=OFF -DUSE_DIRECTX=ON
|
||||
- name: Configure bulid for MinGW (armv7 or aarch64)
|
||||
if: ${{ matrix.os == 'ubuntu-latest' && ( matrix.arch == 'armv7' || matrix.arch == 'aarch64' ) }}
|
||||
run: |
|
||||
mkdir -p build
|
||||
cd build
|
||||
cmake .. -DLLVM_ARCH=${{ matrix.arch }} -DLLVM_PREFIX=/llvm-mingw -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-llvm-mingw.cmake -DCHECK_ASSETS=OFF -DUSE_DIRECTX=ON
|
||||
- name: Build for MSVC
|
||||
if: ${{ matrix.os == 'windows-latest' }}
|
||||
working-directory: build
|
||||
run: |
|
||||
cmake --build . --config Debug
|
||||
- name: Build for MinGW
|
||||
if: ${{ matrix.os == 'ubuntu-latest' }}
|
||||
working-directory: build
|
||||
run: |
|
||||
make -j4
|
||||
cd ..
|
||||
mv COPYING tools
|
||||
- name: Upload binaries of MinGW
|
||||
if: ${{ matrix.os == 'ubuntu-latest' }}
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: ${{ matrix.arch }}
|
||||
path: build/bin/*
|
||||
- name: Upload stk-code/data
|
||||
# We only need to upload stk-code/data once
|
||||
if: ${{ matrix.os == 'ubuntu-latest' && matrix.arch == 'i686'}}
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: data
|
||||
path: data
|
||||
- name: Upload stk-code/tools
|
||||
# We only need to upload stk-code/tools once
|
||||
if: ${{ matrix.os == 'ubuntu-latest' && matrix.arch == 'i686'}}
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: tools
|
||||
path: tools
|
||||
- name: Remove built binaries for less cache size
|
||||
shell : bash
|
||||
run: |
|
||||
rm -rf build/Debug
|
||||
rm -rf build/bin
|
||||
|
||||
packaging:
|
||||
name: Packaging STK
|
||||
needs: build
|
||||
runs-on: windows-latest
|
||||
steps:
|
||||
- name: Configure packaging name for git master branch
|
||||
shell : bash
|
||||
if: ${{ github.ref == 'refs/heads/master' }}
|
||||
run: |
|
||||
echo "release_tag=git`date +%Y%m%d`" >> $GITHUB_ENV
|
||||
echo "release_name=preview" >> $GITHUB_ENV
|
||||
- name: Configure packaging name for tag
|
||||
shell : bash
|
||||
if: ${{ startsWith(github.ref, 'refs/tags/') }}
|
||||
run: |
|
||||
echo "release_tag=`basename $GITHUB_REF`" >> $GITHUB_ENV
|
||||
echo "release_name=`basename $GITHUB_REF`" >> $GITHUB_ENV
|
||||
- name: Configure packaging name for non-releasing branch
|
||||
shell : bash
|
||||
if: ${{ (github.ref != 'refs/heads/master' && !startsWith(github.ref, 'refs/tags/')) || github.repository_owner != 'supertuxkart' }}
|
||||
run: |
|
||||
echo "release_tag=" >> $GITHUB_ENV
|
||||
echo "release_name=" >> $GITHUB_ENV
|
||||
- name: Check for prerelease
|
||||
shell : bash
|
||||
if: ${{ github.ref == 'refs/heads/master' || contains(github.ref, 'rc') || contains(github.ref, 'beta') }}
|
||||
run: |
|
||||
echo "release_pre=true" >> $GITHUB_ENV
|
||||
- name: Check for non-prerelease
|
||||
shell : bash
|
||||
if: ${{ github.ref != 'refs/heads/master' && !contains(github.ref, 'rc') && !contains(github.ref, 'beta') }}
|
||||
run: |
|
||||
echo "release_pre=false" >> $GITHUB_ENV
|
||||
- name: Show packaging name
|
||||
shell : bash
|
||||
run : |
|
||||
echo "${{ env.release_tag }}"
|
||||
echo "${{ env.release_name }}"
|
||||
echo "${{ env.release_pre }}"
|
||||
- name: Download MinGW binaries and data
|
||||
uses: actions/download-artifact@v2
|
||||
- name: Generate .pdb files
|
||||
if: ${{ env.release_tag != '' }}
|
||||
run: |
|
||||
C:\msys64\usr\bin\wget.exe https://github.com/rainers/cv2pdb/releases/download/v0.50/cv2pdb-0.50.zip
|
||||
unzip cv2pdb-0.50.zip
|
||||
cd i686
|
||||
..\cv2pdb.exe supertuxkart.exe
|
||||
cd ..
|
||||
cd x86_64
|
||||
..\cv2pdb.exe supertuxkart.exe
|
||||
- name: Downloading stk-assets
|
||||
if: ${{ env.release_tag != '' }}
|
||||
run: |
|
||||
C:\msys64\usr\bin\wget.exe https://github.com/supertuxkart/stk-assets-mobile/releases/download/git/stk-assets-full.zip
|
||||
mkdir stk-assets
|
||||
cd stk-assets
|
||||
unzip ..\stk-assets-full.zip
|
||||
- name: Move folders
|
||||
shell : bash
|
||||
if: ${{ env.release_tag != '' }}
|
||||
run: |
|
||||
mkdir SuperTuxKart-${{ env.release_tag }}-win
|
||||
mv stk-assets SuperTuxKart-${{ env.release_tag }}-win
|
||||
mkdir SuperTuxKart-${{ env.release_tag }}-win/stk-code
|
||||
mv data SuperTuxKart-${{ env.release_tag }}-win/stk-code
|
||||
mv tools/run_game.bat SuperTuxKart-${{ env.release_tag }}-win
|
||||
mkdir SuperTuxKart-${{ env.release_tag }}-win/stk-code/build-i686
|
||||
mkdir SuperTuxKart-${{ env.release_tag }}-win/stk-code/build-x86_64
|
||||
mkdir SuperTuxKart-${{ env.release_tag }}-win/stk-code/build-armv7
|
||||
mkdir SuperTuxKart-${{ env.release_tag }}-win/stk-code/build-aarch64
|
||||
mv i686 SuperTuxKart-${{ env.release_tag }}-win/stk-code/build-i686/bin
|
||||
mv x86_64 SuperTuxKart-${{ env.release_tag }}-win/stk-code/build-x86_64/bin
|
||||
mv armv7 SuperTuxKart-${{ env.release_tag }}-win/stk-code/build-armv7/bin
|
||||
mv aarch64 SuperTuxKart-${{ env.release_tag }}-win/stk-code/build-aarch64/bin
|
||||
# libwinpthread-1.dll is useless because we statically link
|
||||
rm -f SuperTuxKart-${{ env.release_tag }}-win/stk-code/build-armv7/bin/libwinpthread-1.dll
|
||||
rm -f SuperTuxKart-${{ env.release_tag }}-win/stk-code/build-aarch64/bin/libwinpthread-1.dll
|
||||
- name: Start packaging STK
|
||||
if: ${{ env.release_tag != '' }}
|
||||
run: |
|
||||
Compress-Archive -LiteralPath SuperTuxKart-${{ env.release_tag }}-win -DestinationPath SuperTuxKart-${{ env.release_tag }}-win.zip
|
||||
- name: Configure NSIS script
|
||||
shell : bash
|
||||
if: ${{ env.release_tag != '' && startsWith(github.ref, 'refs/tags/') }}
|
||||
run: |
|
||||
mv tools SuperTuxKart-${{ env.release_tag }}-win/stk-code
|
||||
cd SuperTuxKart-${{ env.release_tag }}-win/stk-code/tools/windows_installer
|
||||
for arch in i686 x86_64 aarch64
|
||||
do
|
||||
cp supertuxkart-github-actions.nsi $arch.nsi
|
||||
sed -i "s/define APPNAMEANDVERSION \"\"/define APPNAMEANDVERSION \"SuperTuxKart ${{ env.release_tag }}\"/g" $arch.nsi
|
||||
sed -i "s/define ARCH \"\"/define ARCH \"$arch\"/g" $arch.nsi
|
||||
sed -i "s/define VERSION \"\"/define VERSION \"${{ env.release_tag }}\"/g" $arch.nsi
|
||||
sed -i "s/OutFile \"\"/OutFile \"SuperTuxKart-${{ env.release_tag }}-installer-$arch.exe\"/g" $arch.nsi
|
||||
for filename in $(ls ../../build-$arch/bin)
|
||||
do
|
||||
file="\\\\$filename"
|
||||
sed -i "288a\ DELETE /REBOOTOK \"\$INSTDIR$file\"" $arch.nsi
|
||||
done
|
||||
# Print result
|
||||
#cat $arch.nsi
|
||||
done
|
||||
mv ../COPYING ../..
|
||||
- name: Run makensis.exe
|
||||
if: ${{ env.release_tag != '' && startsWith(github.ref, 'refs/tags/') }}
|
||||
run: |
|
||||
cd SuperTuxKart-${{ env.release_tag }}-win\stk-code\tools\windows_installer
|
||||
C:\msys64\usr\bin\wget.exe https://nsis.sourceforge.io/mediawiki/images/6/6c/Shelllink.zip
|
||||
unzip Shelllink.zip
|
||||
Move-Item Unicode\Plugins\ShellLink.dll .
|
||||
& "C:\Program Files (x86)\NSIS\makensis.exe" i686.nsi
|
||||
& "C:\Program Files (x86)\NSIS\makensis.exe" x86_64.nsi
|
||||
& "C:\Program Files (x86)\NSIS\makensis.exe" aarch64.nsi
|
||||
- name: Create release
|
||||
uses: ncipollo/release-action@v1.8.8
|
||||
if: ${{ env.release_tag != '' }}
|
||||
with:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
artifacts: "SuperTuxKart-*.zip, SuperTuxKart-${{ env.release_tag }}-win/stk-code/tools/windows_installer/*.exe"
|
||||
tag: ${{ env.release_name }}
|
||||
omitBodyDuringUpdate: true
|
||||
omitNameDuringUpdate: true
|
||||
allowUpdates: true
|
||||
prerelease: ${{ env.release_pre }}
|
45
.gitignore
vendored
@ -1,16 +1,10 @@
|
||||
bld*/
|
||||
build*/
|
||||
cmake_build/
|
||||
cmake_build*/
|
||||
xcode_build*/
|
||||
dependencies*/
|
||||
dependencies/
|
||||
CMakeFiles/
|
||||
stk-editor/
|
||||
.vscode/
|
||||
tags.*
|
||||
|
||||
# clangd
|
||||
.cache/
|
||||
compile_commands.json
|
||||
|
||||
.config/
|
||||
supertuxkart-64
|
||||
@ -58,38 +52,3 @@ packets_log.txt
|
||||
history.dat
|
||||
README.dependencies
|
||||
xx
|
||||
|
||||
android/android-ndk*
|
||||
android/android-sdk*
|
||||
android/assets
|
||||
android/bin
|
||||
android/build
|
||||
android/deps-*
|
||||
android/libs
|
||||
android/obj
|
||||
android/res
|
||||
android/.gradle
|
||||
android/.cxx
|
||||
android/src/main/java/HID*
|
||||
android/src/main/java/SDL*
|
||||
android-*
|
||||
*.apk
|
||||
*.keystore
|
||||
|
||||
lib/curl
|
||||
lib/freetype
|
||||
lib/ifaddrs
|
||||
lib/libogg
|
||||
lib/libvorbis
|
||||
lib/libpng
|
||||
lib/libjpeg
|
||||
lib/zlib
|
||||
lib/openal
|
||||
lib/openssl
|
||||
lib/harfbuzz
|
||||
lib/sdl2
|
||||
lib/mbedtls
|
||||
lib/astc-encoder
|
||||
lib/shaderc
|
||||
|
||||
.DS_Store
|
||||
|
57
.travis.yml
Normal file
@ -0,0 +1,57 @@
|
||||
# Travis-CI configuration file for SuperTuxKart
|
||||
#
|
||||
# Configuration manual:
|
||||
# http://docs.travis-ci.com/user/build-configuration/
|
||||
#
|
||||
language: cpp
|
||||
compiler:
|
||||
- gcc
|
||||
# - clang
|
||||
#branches:
|
||||
# only:
|
||||
# - master
|
||||
before_install:
|
||||
# Update repos
|
||||
- sudo apt-get update -qq
|
||||
# Install dependencies
|
||||
- sudo apt-get install build-essential libogg-dev libvorbis-dev libopenal-dev libxxf86vm-dev libcurl4-openssl-dev libfribidi-dev libbluetooth-dev
|
||||
# Install mesa from an other repo (a newer version is required). Quantal is not supported anymore, saucy is only supported till July 2014,
|
||||
# so we try to use trusty (precise which is what traiv uses a too old mesa version which doesn't link)
|
||||
- sudo apt-add-repository "deb http://archive.ubuntu.com/ubuntu trusty main restricted"
|
||||
- sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 3B4FE6ACC0B21F32
|
||||
- sudo apt-get update -qq
|
||||
- sudo apt-get install libgl1-mesa-dev libglu1-mesa-dev libglew-dev cmake
|
||||
|
||||
before_script:
|
||||
- export THREADS=`nproc`
|
||||
# Unfortunately using all threads crashes g++: "g++: internal compiler error: Killed (program cc1plus)"
|
||||
- export THREADS=4
|
||||
- echo "THREADS = $THREADS"
|
||||
|
||||
script:
|
||||
|
||||
# First a debug build:
|
||||
- mkdir build-debug
|
||||
- cd build-debug
|
||||
- cmake .. -DCMAKE_BUILD_TYPE=Debug -DCHECK_ASSETS=off
|
||||
- make VERBOSE=1 -j $THREADS
|
||||
|
||||
# Then a release build:
|
||||
- cd ..
|
||||
- mkdir build-release
|
||||
- cd build-release
|
||||
- cmake .. -DCMAKE_BUILD_TYPE=Release -DCHECK_ASSETS=off
|
||||
- make VERBOSE=1 -j $THREADS
|
||||
|
||||
notifications:
|
||||
irc:
|
||||
channels:
|
||||
- "irc.freenode.org#stk"
|
||||
skip_join: false
|
||||
use_notice: true
|
||||
template:
|
||||
#- "[%{commit}: %{author}] %{message}"
|
||||
#- "%{build_url}"
|
||||
- "[%{repository}#%{branch} @%{commit}] %{author}): %{message}"
|
||||
- "Diff: %{compare_url}"
|
||||
- "Build: %{build_url}"
|
9
Brewfile
@ -1,9 +0,0 @@
|
||||
brew "cmake"
|
||||
brew "libogg"
|
||||
brew "libvorbis"
|
||||
brew "openal-soft"
|
||||
brew "freetype"
|
||||
brew "curl"
|
||||
brew "harfbuzz"
|
||||
brew "libjpeg"
|
||||
brew "sdl2"
|
587
CHANGELOG.md
@ -1,502 +1,72 @@
|
||||
# Changelog
|
||||
This file documents notable changes to SuperTuxKart across versions since its inception.
|
||||
|
||||
It should be kept in mind that some versions have a less complete changelog than others, and that this changelog does not list the details of the many small bugfixes and improvements which together make a significant part of the progress between releases.
|
||||
|
||||
For similar reasons, and because some features are vastly more complex than others, attributions of main changes should not be taken as a shortcut for overall contribution.
|
||||
|
||||
## SuperTuxKart 1.5 (TBD, still unfinished)
|
||||
|
||||
### Networking
|
||||
* Improve track-voting logic when no majority is achieved, by kimden
|
||||
|
||||
### General
|
||||
* Make the game's window resizable in all the screens, by CodingJellyfish (previously, most UI screens did not support resizing)
|
||||
* New benchmark mode, by Alayan:
|
||||
- Can be run with a few clicks, allowing to easily test the performance of various settings or to compare different systems
|
||||
- Robust performance metrics that better reflect the impact of varying frametimes than Average FPS and 1% Lows.
|
||||
* Fix incorrect unlock information in Story Mode after a Grand Prix, by CodingJellyfish
|
||||
* Make the progression of audio levels geometrical and increase default steps, allowing to set lower audio levels and better accuracy for low audio levels (especially useful for headphone users), by Alayan
|
||||
* Fix drive-on sound from materials being played when the game is paused, by Alayan
|
||||
* Fix a crash trying to read replays when the random starting position setting is enabled, by Alayan
|
||||
* Handle track names with spaces in the replay reader, by Alayan
|
||||
* Various tweaks, bugfixes and code-quality improvements
|
||||
|
||||
### Graphics
|
||||
* Improve the accuracy of the framerate limiter, by Benau
|
||||
* Add more maximum framerate options to the built-in framerate limiter, by Benau (this does not affect physics, which run at 120FPs independetly of graphical FPS)
|
||||
* Add some graphical effects for legacy video drivers, by Benau
|
||||
* Ensure fragment shaders use high precision, to avoid rendering issues with some drivers, by zmike
|
||||
* Fix a related precision issue causing black artifacts with GL_ES, by CodingJellyfish
|
||||
* Fix other shader issues that could produce black artifacts in specific situations, by CodingJellyfish
|
||||
* Various improvements to the automatic computations of Level of Detail (LoD) distances, by Alayan
|
||||
* Improve draw call performance in some situations, by CodingJellyfish
|
||||
* Enable new higher LoD and shadows settings, by Alayan
|
||||
* Integrate LoD (Geometry Detail) settings in the graphics presets, by Alayan
|
||||
* Prefer displaying a lower quality LoD model over switching to a higher quality one when too close, by Alayan
|
||||
|
||||
### User Interface
|
||||
* Add a new Display tab in the Settings, by Alayan
|
||||
* Allow to rate addons with a keyboard or a controller, and notify when trying to rate an addon while not logged in, by CodingJellyfish
|
||||
* Fix an issue that prevented to go up with a scrollbar using a trackpad, by CodingJellyfish
|
||||
* Improve the typing bars, especially for the coal theme, by Alayan
|
||||
* Greatly improve UI layout for 'tall' resolutions (greater height than width), by CodingJellyfish
|
||||
* Improve font scaling, by CodingJellyfish
|
||||
* Various enhancements, by Qwertychouskie and others
|
||||
|
||||
### Mobile
|
||||
* Don't keep the rescue button active after it stops being touched, when the finger keeps touching the screen (e. g. to handle the steering wheel), by S0nter
|
||||
|
||||
## SuperTuxKart 1.4 (31. October 2022)
|
||||
### General
|
||||
* Lap trial mode, by mrkubax10
|
||||
* Fix parachute powerup, by heuchi
|
||||
* Fix gyroscope on walldriving surface, by Benau
|
||||
* Enable ARMv7 build for Windows, by Benau
|
||||
* Restore macOS <= 10.14 support, by Benau
|
||||
* Avoid triggering other goal lines when the goal is already scored, by kimden
|
||||
|
||||
### Graphics
|
||||
* Items and stars animation, by Semphris
|
||||
* LOD optimization, by Benau
|
||||
* Implement HiDPI support in SDL2 properly, by Benau
|
||||
* Beta Vulkan renderer, by Benau
|
||||
* Make sky particle always fall vertically, by Benau
|
||||
|
||||
### Tracks and modeling
|
||||
* Updated Konqi, by ZAQraven99
|
||||
* New Godette kart, by ZAQraven99
|
||||
* Updated Battle Island and Cave X, by Typhon306
|
||||
* Fix broken invisible wall in Antediluvian Abyss, by Benau
|
||||
* New textures in Shifting Sands, by KartOym
|
||||
* Balanced starting positions in all official soccer fields, by Crystal
|
||||
|
||||
### Networking
|
||||
* Add track searching to network track screen, by Benau
|
||||
* Make limit of players in game configurable, by Waldlaubsaengernest
|
||||
* Allow using real addon karts (same hitbox and kart type as in local game), by Benau
|
||||
|
||||
### User Interface
|
||||
* Add left side ghost replay difficulties, by ldoyenard
|
||||
|
||||
## SuperTuxKart 1.3 (28. September 2021)
|
||||
### Networking
|
||||
* Server bookmarks, by Benau
|
||||
* Background download of addon packs, by Benau
|
||||
|
||||
### Graphics
|
||||
* Introduce render resolution scaling for the modern renderer, by QwertyChouskie and Deve. For users with limited GPU power, this allows to get significant performance (FPS) gains at the cost of image quality. It can also allow additional graphics effects at the same performance. This is especially useful for users with high-resolution and high-DPI screens. The scaling only affects the 3D scene, the UI remains crisp at full-resolution.
|
||||
* Simplification through removal of unused deprecated graphical effects, by Samuncle
|
||||
* Many updates to texture-related code, by Benau
|
||||
* Auto-compute Level of Detail distances for 3D models set to use LOD depending on track complexity, by Samuncle. The geometry level parameter allows partial control over the drawing distances.
|
||||
* Improved screen space reflection, by QwertyChouskie
|
||||
|
||||
### General
|
||||
* Switch port, by Mary
|
||||
* Gamepad force feedback support, by Mary
|
||||
* Highscore screen, by RQWorldblender
|
||||
* Grand Prix highscores, by mrkubax10
|
||||
* Updates to the bundled tinygettext library, by Benau
|
||||
* Enable custom skidding sounds for karts, by Benau
|
||||
* Greatly sped up loading of tracks with many checklines through optimization, by heuchi
|
||||
* And many bugfixes and enhancements too small or specific to be detailed
|
||||
|
||||
### User Interface
|
||||
* Display the skin-appropriate iconset without having to restart, by Benau
|
||||
* Fix some issues with the options menu when used during a pause, by Benau
|
||||
* Add a confirmation dialog before closing the game through the "go back" key/button, by Benau
|
||||
* In the result screen, display the race position with a number with 10 karts or more, by mrkubax10
|
||||
* In the result screen, display the challenge result and the requirements met or failed, by CodingJellyFish
|
||||
* Many small menu and dialogs improvements, by RQWorldblender and others
|
||||
* Usability and functionality improvements to the debug menu, by RQWorldblender
|
||||
* Clickable URLs in text, by Benau
|
||||
* Add a rainbow background to the color picker, making it more intuitive, by riso
|
||||
|
||||
#### In-race UI
|
||||
* Add visual and sound feedback when a timed challenge or timed game is about to end, by mrkubax10 and Alayan
|
||||
|
||||
### Mobile
|
||||
* Fix a precision issue that caused artefacted shadows, by icecream95 and Benau
|
||||
#### iOS
|
||||
* Use MojoAL instead of OpenAL, which iOS currently has issues with, by Benau
|
||||
|
||||
### Tracks and modeling
|
||||
* Alien Signal, by Samuncle
|
||||
* Ancient Colosseum Labyrinth, by Typhon306
|
||||
* Improved Las Dunas Soccer, by Benau
|
||||
* Add lap line extensions to Hacienda, Old Mine, Ravenbridge Mansion and Shifting Sands, by Benau
|
||||
* New Pepper kart, by ZAQraven99
|
||||
* Improved Adiumy, Emule, GNU and Sara karts, by ZAQraven99
|
||||
|
||||
## SuperTuxKart 1.2 (27. August 2020)
|
||||
|
||||
### Networking
|
||||
* Add support for IPv6 LAN servers, by Benau
|
||||
* Auto-detect client IPv4 and IPv6 support, by Benau
|
||||
* Improved server creation speed and performance, by Benau
|
||||
* Allow to use any addon karts online, on servers with live join enabled, by Benau. The kart has Tux's hitbox.
|
||||
* Prevent undefined behaviour on battle/soccer servers with an excessive player limit, by Benau
|
||||
* Use an improved rating formula for ranked play, by Alayan
|
||||
|
||||
### General
|
||||
* Use SDL2 for window creation, allowing better gamepad support, by Benau
|
||||
* Replace Fribidi by SheeBidi for RTL support, and remove the dependency to libraqm, by Benau
|
||||
* Add support for in-race messages in scripting, by CodedOre
|
||||
* Improved tutorial with free-flow racing (no more text interrupts), by CodedOre
|
||||
* Haiku support, by AlwaysLivid
|
||||
* Make the game's window resizable in-game, by Benau
|
||||
* Download addon icons on-demand to speed-up the addons list loading, by Benau
|
||||
* Allow theming of icons, by QwertyChouskie
|
||||
* Many many bugfixes and enhancements
|
||||
|
||||
### Mobile
|
||||
* Many minor bugfixes and compatibility enhancements
|
||||
#### Android
|
||||
* Use the android app bundle, allowing all tracks to be included, by Benau
|
||||
* Use the native progress indicator during game data extraction, by Benau
|
||||
* Add a launch splash screen, by Benau
|
||||
#### iOS
|
||||
* Allow server creation in-game by using only one process for client and server, by Benau
|
||||
|
||||
### User Interface
|
||||
* Introduce element padding for skins, by QwertyChouskie
|
||||
* New Cartoon skin, by LCP (art) and QwertyChouskie (code)
|
||||
* Allow to rename control configurations, by GuillaumeBft
|
||||
* Unthrottled keyboard navigations in menus, by Benau
|
||||
* Show mobile players as such in server lobbies, using an emoji icon, by riso
|
||||
* Always show the race end times in ms, by Fouks
|
||||
* SVG icons support, by riso
|
||||
* New tips for soccer mode
|
||||
#### In-race UI
|
||||
* Introduce camera settings in the options screen, by luffah
|
||||
* More spectator cameras in online spectating, by luffah
|
||||
* Add a minimap indicator for basketballs, by Alayan
|
||||
* Add team chat for team games, by Benau
|
||||
* Show the kart orientation on the soccer minimap, by riso
|
||||
* Show a message once a goal is made in soccer, by riso
|
||||
|
||||
### Tracks and modeling
|
||||
#### Karts
|
||||
* New version of Kiki, by Typhon306 and ZAQraven99
|
||||
* Improved karts, by Crystal
|
||||
* Pidgin, Puffy
|
||||
* Improved beastie animation, by D_ft Kid
|
||||
|
||||
## SuperTuxKart 1.1 (4. January 2020)
|
||||
|
||||
### Networking
|
||||
* Add support for IPv6 clients and servers, by Benau
|
||||
* Add AI support to local networking servers, by Benau. This AI is not as strong as the normal AI due to networking lag, but should offer enough challenge for a majority of players.
|
||||
* Add support for AI bots for the server host, by Benau
|
||||
* Improved handling of collisions, by Benau
|
||||
* Improved support for playing addons on servers, by Benau
|
||||
* Support using an IPV4 domain name to connect to a server, by Benau
|
||||
* Add packet loss data to the server databases, by Benau
|
||||
* New management features for server hosts, by Benau
|
||||
* IP / online ID ban tables
|
||||
* Server statistics
|
||||
* Make the auto-end finish time more lenient, so it doesn't tank ranking score because of another player, by Alayan
|
||||
* Add a player reporting function, by Benau
|
||||
* Fix a bug that allowed to exceed a server's player limit if two players connected at the same time, by Benau
|
||||
* Add lobby commands, by Benau
|
||||
|
||||
### Race gameplay and physics
|
||||
* Random spawn point in local battle mode, by Aleman778
|
||||
* Add an option to show everyone's items with the left characters icons, by Fouks
|
||||
* Allow to choose the number of AI per team in soccer, by risostk
|
||||
* In CTF mode, fix a bug that prevented scoring a point when the team's flag was in its immunity state, by Alayan
|
||||
* Fix a bug that could result in the finish time being shown as 0:00:00, by Alayan
|
||||
* Fix a bug that made AIs, in multiplayer and low difficulty, rubber-band towards the wrong player, by Alayan. Each player now correctly has its AIs, helping a weaker player to not be condemned to the last position.
|
||||
|
||||
### General
|
||||
* Screen space reflection graphical effect, by samuncle
|
||||
* Support unicode file paths, by Benau
|
||||
* Complex text layout support, by Benau
|
||||
* Add emoji support, by Benau
|
||||
* Avoid "this program is not responding" warnings in Windows and Mac, by Benau
|
||||
* Add a Story Mode timer, by Alayan
|
||||
* Make text billboards size consistent accross resolutions, by Benau
|
||||
* Don't trigger road sounds when the kart is flying, by Benau
|
||||
* Remove an incorrect function call that could significantly hurt performance for Mac, by Benau
|
||||
* Fix a nasty bug that made several sound effects to be played at a low volume after a crash, by Alayan
|
||||
* Some code clean-up, by Alayan
|
||||
* Addon skin support and skin-specified font by Benau
|
||||
* Structure for allowing icon themes by Benau
|
||||
* Add support for custom per-kart engine sounds, by Benau
|
||||
* Fix an incorrect outdated driver warning for recent AMD cards on Windows, by Alayan
|
||||
* Scripting enhancements, by deveee
|
||||
* Add a continue button to cutscenes (mostly useful for touchscreen devices), by deveee
|
||||
* Request the use of the performance GPU on Optimus systems, by deveee
|
||||
* Fixed plural forms for translations in several languages, by deveee
|
||||
* Close STK if Wayland crashes, by mstoeckl
|
||||
* Support nested directories for addons, by Benau
|
||||
* Scripting preprocessing for STK version, by Benau
|
||||
* Updated Wiiuse library to 0.15.5
|
||||
* Various tweaks and bugfixes, including crash fixes
|
||||
|
||||
### Mobile
|
||||
* Add a screen allowing to download official assets that can't be included in the release package because of size limits, by Benau
|
||||
* The tutorial text is now tailored for touchscreen usage, instead of the main keyboard text, by Benau
|
||||
* Enhanced acceleration handle, by Benau
|
||||
* Allow changing the touchscreen controller type in race paused dialog, by deveee
|
||||
* Allow for optional auto-acceleration, by deveee
|
||||
#### Android
|
||||
* Various bugfixes by deveee, dos1
|
||||
* Screen keyboard handling improvements, by deveee and Benau
|
||||
* Allow copying text from the edit box, by Benau
|
||||
* STK for Android now targets the version 29 of the API (Android 10.0), up from 26 (Android 8.0)
|
||||
#### iOS
|
||||
* Add iOS support, by Benau
|
||||
* The Android code has been widely put to use for iOS
|
||||
* Several changes or fixes to ensure proper behavior (input, screen-scaling, and more)
|
||||
|
||||
### User Interface
|
||||
* Show tips for players when loading and after race ends, by CodingJellyfish
|
||||
* Better scaling of many many UI elements to large resolutions, by CodingJellyfish and others
|
||||
* Show country flags for servers and players in online multiplayer, by Benau
|
||||
* Add a new option to change font size on the fly, by Benau and deveee
|
||||
* Add icons for the available options in the race result screens, by CodingJellyfish
|
||||
* Make the highscore list scrollable, by deveee
|
||||
* Display all the relevant info in the challenge dialog in Story Mode, by Alayan
|
||||
* New challenge selection interface, by CodingJellyfish
|
||||
* Show the number of ranking points won or lost after a ranked race, by Benau
|
||||
* Separate blurring visual effects from the main graphics presets, by Alayan
|
||||
* Fix incorrect text resizing in the help menu, by Benau
|
||||
* Make the custom random GP option more prominent in the track selection screen, by CodingJellyfish
|
||||
* Improvements to the scrollbars, by QwertyChouskie
|
||||
* Allow sorting lists with the keyboard, by Benau
|
||||
* Allow tooltip drawing outside of menus, by deveee
|
||||
* Prevent some font scaling blur caused by non-integer offsets, by Benau
|
||||
* Add a (configurable) limit to chat message frequency, by GuillaumeBft and Benau
|
||||
* Allow to explicitly set the flip direction of tabs, by CodingJellyfish
|
||||
* Allow to download addons from the server lobby interface, by Benau
|
||||
* Allow to filter installed and non-installed addons in the addons screen, by Alayan
|
||||
* Many minor tweaks and bugfixes
|
||||
#### In-race UI
|
||||
* Scale down the lap time indicator next to the kart icons when there are many karts, by riso
|
||||
* Limit how long chat and in-race messages can be, by Benau and Alayan
|
||||
* Add an option to disable in-race messages only, by Alayan
|
||||
|
||||
### Tracks and modeling
|
||||
#### Tracks
|
||||
* A handful of minor graphical fixes and enhancements
|
||||
* Fixed checklines that could be missed too easily in XR591 and the Old Mine.
|
||||
#### Arenas
|
||||
* Pumpkin Park, by samuncle
|
||||
|
||||
## SuperTuxKart 1.0 (20. April 2019)
|
||||
### Networking
|
||||
* Networking support for normal race, time trial, free for all, capture the flag and soccer by Benau and hiker :
|
||||
* Access to a global server list, possibility to also create a LAN server
|
||||
* Track voting system to allow players to decide where the race will be
|
||||
* Communication between server and clients to exchange inputs and general game data
|
||||
* A lot of work on rewind code to make sure server and client are well synchronized
|
||||
* Chat lobby for general server information and discussion among players between races
|
||||
* Support for handicap, which can be changed before each game
|
||||
* Spectating option for players having entered a server while a race or game is underway by Benau
|
||||
* Option to join live an active game in FFA, CTF and soccer by Benau
|
||||
* Global rankings by Benau (communication with main server) and Alayan (ranking formula)
|
||||
|
||||
### Race gameplay and physics
|
||||
* New game mode Capture the Flag by Benau (online multiplayer only)
|
||||
* New game mode Free for All by Benau
|
||||
* Free for All available in offline mode with AI, by Mrxx99
|
||||
* Revised kart characteristics for better balance between light, medium and heavy karts by Alayan
|
||||
* Better random item distribution for various numbers of karts by Alayan and hiker
|
||||
* Fix position interpolation causing some incorrect lapline validation by Auria
|
||||
* Fix kart being uncontrollable and hovering when landing on some downward slopes by hiker
|
||||
* Mitigate a physics issue which could send a kart flying on collisions by hiker
|
||||
* Make kart turn radius based on kart class instead of kart model length (which made Adiumy unplayable and caused AI issues) by Alayan
|
||||
* Revisited slipstreaming with boost easier to obtain, especially in curves, but not as strong as in 0.9.3 when the zipper boost was incorrectly activated, by Alayan
|
||||
* Minor gameplay improvements (level 1 skid boost doesn't interrupt level 2 boost, fairer rubber-banding in low difficulties, boosted AI for some karts for more challenge in GPs, small balance change of GP points, more useful and consistent handicap option...)
|
||||
* Start boost/penalty moved to the set phase for smoother networking
|
||||
* Terrain slowdown works again as intended on several tracks where it was missing
|
||||
|
||||
### AI
|
||||
* Improved powerup and nitro handling in AI by Alayan
|
||||
|
||||
### General
|
||||
* Option to disable light scattering (for improved FPS), used in graphics level 3, by Partmedia
|
||||
* Unlockable SuperTux challenges in Story Mode by Alayan
|
||||
* Improvements to ghost replays (more data saved, live time difference, replay comparison, egg hunt replays) by Alayan
|
||||
* Kart color customization by Benau
|
||||
* Multithreading contention fixes by Benau
|
||||
* Local multiplayer improvements by Ben Krajancic
|
||||
* Major revamp of the achievement system to make adding new achievements much easier and flexible, also fixing some related bugs by Alayan
|
||||
* Store up to 5 highscores for a track/difficulty/mode/kart number combination, instead of 3
|
||||
* Smooth turning for non-keyboard inputs for improved consistency between input mode by deveee
|
||||
* Updated standard replays by Alayan
|
||||
* Visual improvements (new skidding particles, better rescue, bubblegum flashing before ending)
|
||||
* Audio improvements (crash sound depending on speed/direction, no crash sound on rescue walls, sound cue in nitro challenges)
|
||||
* Fix STK incorrectly connecting to the server when the internet option is disabled by Auria
|
||||
* Updated WiiUse library
|
||||
* Many bugfixes
|
||||
|
||||
### Android
|
||||
* Gyroscope support by Pelya
|
||||
* Numerous improvements to input on Android, including screen keyboard, keyboard, gamepads, by deveee
|
||||
* Android TV support
|
||||
* Improved UI and font scaling by deveee
|
||||
* More compact APK thanks to png optimization, allows to have several tracks more than the 0.9.3 APK, by deveee and Alayan
|
||||
* Wayland support and many other smaller improvements and fixes
|
||||
|
||||
### User Interface
|
||||
* New networking user interface by Benau and hiker
|
||||
* New coal skin by Alayan
|
||||
* Support for collapsing widgets in UI by Mrxx99
|
||||
* Multidirectional keyboard navigation in menus by Alayan
|
||||
* Alternating background darkness in lists to enhance readability by Benau
|
||||
* Support text breaks into multiple line in lists, e.g. in the addons menu, by Alayan
|
||||
* Improved help menu with lateral tabs and a lot more information by Alayan
|
||||
* Improved option menu with lateral tabs and a separate language tab by Alayan
|
||||
* Many improvements to the ghost replay selection list (give access to egg hunt replays, kart icon shown in the list, replay's game version shown, hide player number column by default) and dialog (allow replay comparison, show track picture, show information about the selected replays) by Alayan
|
||||
* Control configurations can be disabled without being deleted by Alayan
|
||||
* Other significant enhancements (detailed progress of multi-goal achievements, reset password button, clearer checkbox status, milliseconds displayed in time-trials and egg hunts, nitro efficiency in the kart selection screen, better track info screen, better warnings when trying to do an online action with internet access disabled, hour support for GP time, default resolutions can't be used in fullscreen if unsupported by the monitor...)
|
||||
* Many bugfixes and small enhancements mostly by deveee and Alayan
|
||||
#### In-race UI
|
||||
* New speedometer and nitro gauge, by Alayan
|
||||
* Bigger minimap and new display options, by Alayan
|
||||
* More legible text with outlines and for some bigger font, by Alayan
|
||||
|
||||
### Tracks and modeling
|
||||
#### Tracks
|
||||
* Black Forest by Sven Andreas Belting (replacing Green Valley)
|
||||
* Ravenbridge Mansion by samuncle (replacing Black Hill Mansion)
|
||||
* Unwanted shortcuts and exploits found by several players and fixed mostly by Auria in many tracks :
|
||||
* Antediluvian Abyss, Around the Lighthouse, Fort Magma, Grand Paradisio Island, Hacienda, Minigolf, Nessie's Pond, Northern Resort, The Old Mine, Oliver's Math Class, Shifting Sands, STK Enterprise, XR591
|
||||
* Smoothness issues causing collisions and kart slowdown fixed by Auria :
|
||||
* Nessie's Pond, Old Mine, Shifting Sands, Volcano Island, XR591
|
||||
* Item (boxes, nitro, bananas) positions improvement by Alayan and theThomasPat :
|
||||
* Around the Lighthouse, Black Forest, Candela City, Hacienda, Minigolf, Northern Resort, Oliver's Math Class, STK Enterprise, The Old Mine, Volcano Island, Zen Garden
|
||||
|
||||
#### Arenas
|
||||
* Las Dunas Soccer, by samuncle
|
||||
* Candela City arena by Benau, based on samuncle's track
|
||||
|
||||
#### Karts
|
||||
* New version of Beastie by Jymis
|
||||
* New version of Kiki by Benau
|
||||
|
||||
## SuperTuxKart 0.9.3 (28. October 2017)
|
||||
* Reduced RAM and VRAM usage, reducing load times by Auria and Benau
|
||||
* New mesh format optimized for space and hardware skinning
|
||||
* Code refactoring of both render pipeline by Benau and Elderme
|
||||
* Physics improvements and various physics bugfixes by hiker
|
||||
* Kart GFX improvements (exhaust and headlight)
|
||||
* In-game screen recording powered by libopenglrecorder
|
||||
* High quality mipmap generation by Stragus
|
||||
* New smoother camera by Auria
|
||||
* New grand prix win scene
|
||||
* Gamepad configuration bugfixes
|
||||
* 3 Strikes Battles : added spare tire karts
|
||||
* Visual representation of the start line in all tracks
|
||||
* Various improvements (starting boost effect, wall driving fixes, parachutes, GP points, help page for bananas, cannon fixes, colorization shader)
|
||||
### Tracks and modeling
|
||||
#### Karts
|
||||
* Kiki by Benau
|
||||
* New versions of Wilber and Hexley by Jymis
|
||||
* New version of Konqi by Benau
|
||||
#### Tracks
|
||||
* All tracks drivable in reverse, with arrows pointing in the correct direction
|
||||
* Candela City by samuncle (replace Shiny Suburbs)
|
||||
* Cornfield Crossing by samuncle (replace Bovine Barnyard)
|
||||
* New battle track Las Dunas Arena by samuncle
|
||||
|
||||
## SuperTuxKart 0.9.2 (1. July 2016)
|
||||
* Ghost replay races by Benau
|
||||
* Battle mode AI by Benau
|
||||
* Soccer mode AI by Benau
|
||||
* TTF font rendering by Benau
|
||||
* New ruby and forest skins by Benau
|
||||
* Kart properties refactor by Flakebi
|
||||
* Scripting work under the hood
|
||||
* Work on the track editor by mhp
|
||||
* Tweak to challenges
|
||||
* New farm track song by 0zone0ne and Krobonil
|
||||
* Bugfixes
|
||||
### Tracks and modeling
|
||||
#### Tracks
|
||||
* Antediluvian Abysses by samuncle (replace Subsea)
|
||||
* Volcano Island by Ponzino
|
||||
* New icy soccer field by samuncle and Benau
|
||||
|
||||
## SuperTuxKart 0.9.1 (17. October 2015)
|
||||
## SupertTuxKart 0.9.1
|
||||
* Many bug fixes
|
||||
* Started to use scripting in tracks
|
||||
* Significant audio performance improvements
|
||||
* Tweak to challenges
|
||||
### Tracks and modeling
|
||||
#### Tracks
|
||||
* Better support for driving tracks in reverse
|
||||
* Smaller tweaks and improvements to several tracks including
|
||||
* Math class
|
||||
* XR591
|
||||
* Fort Magma
|
||||
* Gran Paradiso Island
|
||||
* Subsea
|
||||
** Math class
|
||||
** XR591
|
||||
** Fort Magma
|
||||
** Gran Paradiso
|
||||
** Subsea
|
||||
* Tweak to challenges
|
||||
* Better support for driving tracks in reverse
|
||||
|
||||
## SupertTuxKart 0.9 (24. April 2015)
|
||||
## SupertTuxKart 0.9 (April 2015)
|
||||
* Fully shader-based rendering engine
|
||||
* New tracks Cocoa Temple and Gran Paradiso
|
||||
* Graphical improvements to many other tracks
|
||||
* New karts amanda and gavroche
|
||||
* New and improved tux, adiumy, sara the wizard and the racer, xue kart
|
||||
* Online login which allows to:
|
||||
* connect with friends and see when they are playing
|
||||
* vote for addons
|
||||
* collect online achievements
|
||||
** connect with friends and see when they are playing
|
||||
** vote for addons
|
||||
** collect online achievements
|
||||
* Grand Prix editor, including creation of random GPs
|
||||
* Different kart physics
|
||||
### Tracks and modeling
|
||||
#### Karts
|
||||
* New karts Amanda and Gavroche by XGhost
|
||||
* New and improved Tux, Adiumy, Sara the Wizard and the Racer, Xue
|
||||
#### Tracks
|
||||
* Cocoa Temple by samuncle (replace Amazonian Journey)
|
||||
* Gran Paradiso Island by samuncle (replace The Island)
|
||||
* Graphical improvements to many other tracks
|
||||
|
||||
|
||||
## SuperTuxKart 0.8.1 (26. November 2013)
|
||||
* New track STK Enterprise
|
||||
* Updated track The old mines
|
||||
* Updated Lighthouse track
|
||||
* Updated Zen Garden track
|
||||
* New Soccer mode
|
||||
* New Egg Hunt mode
|
||||
* New karts Xue and Sara
|
||||
* Updated Beastie kart
|
||||
* Added Tutorial
|
||||
* Added new Supertux difficulty
|
||||
* New bubblegum shield weapon
|
||||
* New Speedometer and nitro meter
|
||||
* Add ability to filter addons
|
||||
* Updated nitro models
|
||||
* Add ability to save and resume Grand Prix
|
||||
* Improve skid marks and nitro effects
|
||||
* Wiimote support
|
||||
### Tracks and modeling
|
||||
#### Karts
|
||||
* New karts Xue and Sara
|
||||
* Updated Beastie kart
|
||||
#### Tracks
|
||||
* STK Enterprise by Rubberduck (replace Star Track)
|
||||
* Gameplay and graphical updates to several tracks :
|
||||
* The Old Mine
|
||||
* Lighthouse
|
||||
* Zen Garden
|
||||
#### Miscellaneous
|
||||
* Updated nitro models
|
||||
|
||||
|
||||
## SuperTuxKart 0.8 (11. December 2012)
|
||||
* Story mode and new challenge set
|
||||
* Improved AI
|
||||
* Skidding and better collision physics
|
||||
* Reverse mode
|
||||
* New green valley track
|
||||
* New Blackhill Mansion track
|
||||
* Updated XR591 track
|
||||
* Updated Fort Magma track
|
||||
* Updated jungle track
|
||||
* Updates Sand track
|
||||
* Updated menus
|
||||
* New music
|
||||
### Tracks and modeling
|
||||
#### Tracks
|
||||
* Green Valley by Wolfs (replace Tux Tollway)
|
||||
* Blackhill Mansion by samuncle (replace Crescent Crossing)
|
||||
* Gameplay and graphical updates to several tracks :
|
||||
* XR591
|
||||
* Fort Magma
|
||||
* Jungle
|
||||
* Sand
|
||||
|
||||
|
||||
|
||||
## SuperTuxKart 0.7.3 (2. November 2011)
|
||||
* New Zen Garden and Subsea tracks
|
||||
* New Island battle arena
|
||||
* New Suzanne kart
|
||||
* New graphical effects
|
||||
* New weapons 'Swatter' and 'Rubber Ball'
|
||||
* Added Thunderbird as race referee
|
||||
* 3 Strikes Battles now displays lives as spare tires
|
||||
* Improved bubble gum
|
||||
* See progression during Grand Prix
|
||||
@ -505,28 +75,16 @@ For similar reasons, and because some features are vastly more complex than othe
|
||||
* Improved kart control at high speeds
|
||||
* Better placement of rescued karts
|
||||
* Transition track-making to blender 2.5/2.6
|
||||
### Tracks and modeling
|
||||
#### Karts
|
||||
* New Suzanne kart
|
||||
#### Tracks
|
||||
* Zen Garden by samuncle (replace Secret Garden)
|
||||
* New Subsea
|
||||
* New Island battle arena
|
||||
#### Miscellaneous
|
||||
* Added Thunderbird as race referee
|
||||
|
||||
## SuperTuxKart 0.7.2 (15. July 2011)
|
||||
* Added in-game addon manager
|
||||
* Fixed major memory leaks
|
||||
* New Snow Peak track by Samuncle
|
||||
* Improved star track UFO by Rudy
|
||||
* New Beastie kart.
|
||||
* Show when you get a highscore
|
||||
* Improve gamepad configuration under Windows (add ability to tell gamepads apart)
|
||||
* Various other tweaks done and glitches fixed
|
||||
### Tracks and modeling
|
||||
#### Karts
|
||||
* New Beastie kart.
|
||||
#### Tracks
|
||||
* Improved Snow Peak by samuncle
|
||||
* Improved Star Track UFO by Rudy
|
||||
|
||||
## SuperTuxKart 0.7.1b (21. April 2011)
|
||||
* Fix circular dependency in challenges
|
||||
@ -534,6 +92,8 @@ For similar reasons, and because some features are vastly more complex than othe
|
||||
|
||||
## SuperTuxKart 0.7.1 (15. April 2011)
|
||||
* Particle (smoke, splash, fire) and weather effects
|
||||
* New Fort Magma by Samuncle, new Shiny Suburbs track by Horace
|
||||
* New Beagle kart by wolterh
|
||||
* Added internet news
|
||||
* Support for live language switch
|
||||
* Added optional minimal race UI
|
||||
@ -548,12 +108,6 @@ For similar reasons, and because some features are vastly more complex than othe
|
||||
* Fixed character names that contain non-ASCII characters
|
||||
* Full RTL (right to left) support
|
||||
* Various other tweaks done and glitches fixed
|
||||
### Tracks and modeling
|
||||
#### Karts
|
||||
* New Beagle kart by wolterh
|
||||
#### Tracks
|
||||
* New Fort Magma by samuncle
|
||||
* New Shiny Suburbs by Horace
|
||||
|
||||
## SuperTuxKart 0.7 (December 2010)
|
||||
Too many to list them all. Main points:
|
||||
@ -566,12 +120,8 @@ Too many to list them all. Main points:
|
||||
* Other improvements
|
||||
- Allowed alternative ways/shortcuts in tracks
|
||||
- New item 'switch'
|
||||
### Tracks and modeling
|
||||
#### Tracks
|
||||
- Farm
|
||||
- Hacienda by samuncle (replace Beach)
|
||||
- Scotland by Canis Lupus
|
||||
- Secret Garden
|
||||
* New art:
|
||||
- New tracks farm, hacienda, scotland, secret garden
|
||||
|
||||
## SuperTuxKart 0.6.2a (October 2009)
|
||||
* Bugfix: STK would crash while trying to save the config file
|
||||
@ -591,7 +141,7 @@ Too many to list them all. Main points:
|
||||
* Bugfix: battle mode would not display track groups.
|
||||
|
||||
## SuperTuxKart 0.6.1 (February 2009)
|
||||
* New music for Snow Mountain.
|
||||
* Added new kart ("Puffy"), new battle map ("Cave"), and new music for Snow Mountain.
|
||||
* Fixed bug in track selection screen that could cause a crash when track groups were used.
|
||||
* Fixed crash in character selection that could happen if an old user config file existed.
|
||||
* Fixed incorrect rescues in Fort Magma.
|
||||
@ -599,19 +149,15 @@ Too many to list them all. Main points:
|
||||
* A plunger in the face is now removed when restarting.
|
||||
* Added slow-down for karts driving backwards.
|
||||
* Somewhat reduced 'shaking' of AI driven karts.
|
||||
### Tracks and modeling
|
||||
#### Karts
|
||||
- New Puffy kart
|
||||
#### Tracks
|
||||
- New Cave battle map
|
||||
|
||||
|
||||
## SuperTuxKart 0.6 (January 2009)
|
||||
* New improved physics and kart handling
|
||||
* Added sharp turns and nitro speed boost (replacing wheelies and jump)
|
||||
* Totally rewrote powerups (plunger, bowling ball, cake, bubblegum) and new look for bananas
|
||||
* New and improved tracks : skyline, snow mountain, race track, space track, old mine, XR591
|
||||
* New game mode : 3-Strikes Battle
|
||||
* Major improvements to AI
|
||||
* New/improved karts (and removed some old ones) : wilber, eviltux, hexley
|
||||
* Improved user interface
|
||||
* Karts now have a visible suspension effect
|
||||
* Fully positional audio with OpenAL
|
||||
@ -626,23 +172,9 @@ Too many to list them all. Main points:
|
||||
* Bug fixes and code refactor/cleanup/documentation
|
||||
- Fixed 'joystick locks' (kart would turn even if the joystick is in neutral),
|
||||
thanks to Samjam for the patch.
|
||||
|
||||
### Tracks and modeling
|
||||
#### Karts
|
||||
* Improved Wilber
|
||||
* Eviltux
|
||||
* Hexley
|
||||
* Some old karts have been removed
|
||||
#### Tracks
|
||||
* Skyline
|
||||
* Snow Mountain
|
||||
* Race track
|
||||
* Old Mine
|
||||
* XR591
|
||||
* Improved track :
|
||||
* Star track
|
||||
|
||||
## SuperTuxKart 0.5 (May 2008)
|
||||
* Six new tracks and one improved track: Fort Magma, SnowTux Peak, Amazonian Journey, City, Canyon, Crescent Crossing and StarTrack
|
||||
* Complete Challenges to unlock game modes, new tracks and a skidding preview
|
||||
* New Follow the Leader game mode
|
||||
* New Grand Prix
|
||||
@ -653,29 +185,18 @@ Too many to list them all. Main points:
|
||||
* Many Bugfixes including:
|
||||
- a memory leak fix (Charlie Head)
|
||||
- an AI crash fix (Chris Morris)
|
||||
|
||||
### Tracks and modeling
|
||||
#### Tracks
|
||||
* SnowTux Peak
|
||||
* Amazonian Journey
|
||||
* City
|
||||
* Canyon
|
||||
* BSODs Battlements renamed to Fort Magma
|
||||
* Improved Crescent Crossing, Fort Magma, and Star Track
|
||||
|
||||
|
||||
## SuperTuxKart 0.4 (February 2008)
|
||||
* New physics handling using the bullet physics engine
|
||||
* New kart: wilber
|
||||
* Improved 'Shifting Sands' and 'Lighthouse' tracks
|
||||
* Improved AI
|
||||
* New GUI handling, including resolution switching GUI
|
||||
* Improved input handling
|
||||
* Jump and look-back feature
|
||||
* Jump and look-back featue
|
||||
* Additional music and main theme
|
||||
### Tracks and modeling
|
||||
#### Karts
|
||||
* New kart: wilber
|
||||
|
||||
#### Tracks
|
||||
* Improved 'Shifting Sands' and 'Lighthouse'
|
||||
|
||||
## SuperTuxKart 0.3 (May 2007)
|
||||
* Highscore lists
|
||||
@ -707,7 +228,7 @@ Too many to list them all. Main points:
|
||||
- Fixed keyboard keys unable to work on the first key press bug
|
||||
- And others
|
||||
|
||||
## SuperTuxKart 0.2 (22. Sep 2006)
|
||||
##SuperTuxKart 0.2 (22. Sep 2006)
|
||||
* Significant performance improvement by using display lists
|
||||
* Improved AI
|
||||
* Support for different grand prixs
|
||||
@ -725,7 +246,7 @@ Too many to list them all. Main points:
|
||||
* Added help and about screens, added credits to track designer
|
||||
* Items were added to all tracks
|
||||
|
||||
## SuperTuxKart 0.1 (04. May 2006) (not officially released)
|
||||
##SuperTuxKart 0.1 (04. May 2006) (not officially released)
|
||||
* Significant speedup by using a new HOT and collision algorithm --> all tracks are now playable
|
||||
* Removed all SDL dependencies, only plib is needed
|
||||
* Single and multi-window menu can be used
|
||||
@ -733,7 +254,7 @@ Too many to list them all. Main points:
|
||||
* Some bug fixes and small improvements
|
||||
* Added profile option to support automatic profiling
|
||||
|
||||
## SuperTuxKart 0.0.0 (22. Dec 2004)
|
||||
##SuperTuxKart 0.0.0 (22. Dec 2004)
|
||||
* new tracks
|
||||
* new characters and karts
|
||||
* new user-interface
|
||||
|
791
CMakeLists.txt
169
COPYING
@ -1,21 +1,18 @@
|
||||
The SuperTuxKart code is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
|
||||
|
||||
The SuperTuxKart data files (textures, models, sounds, music, etc.) are released under a mixture of licenses including, but not limited to, the following:
|
||||
The SuperTuxKart code is released under GNU GPL (see full text below).
|
||||
SuperTuxKart data files (textures, models, sounds, music, etc.) are released under various licenses, see 'license.txt' files
|
||||
through the various data subdirectories. Data files are released under a mixture of the following licenses :
|
||||
|
||||
GNU General Public License (GNU GPL)
|
||||
Creative Commons Attribution (CC-BY)
|
||||
Creative Commons Attribution-ShareAlike (CC-BY-SA)
|
||||
Gnu GPL 2.0 and 3.0+
|
||||
Creative-Commons-BY(-SA) 3.0
|
||||
Public Domain
|
||||
|
||||
See the 'licenses.txt' files throughout the various data subdirectories for the licenses of each file.
|
||||
|
||||
_____________________________________________________________________
|
||||
|
||||
________________________________________________________________________________
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||
Copyright © 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
|
||||
|
||||
@ -49,7 +46,7 @@ TERMS AND CONDITIONS
|
||||
|
||||
"Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.
|
||||
|
||||
"The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations.
|
||||
"The Program!" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations.
|
||||
|
||||
To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work.
|
||||
|
||||
@ -99,162 +96,124 @@ You may charge any price or no price for each copy that you convey, and you may
|
||||
|
||||
You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:
|
||||
|
||||
a) The work must carry prominent notices stating that you modified it, and giving a relevant date.
|
||||
b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices".
|
||||
c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.
|
||||
d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so.
|
||||
* a) The work must carry prominent notices stating that you modified it, and giving a relevant date.
|
||||
* b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices".
|
||||
* c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.
|
||||
* d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so.
|
||||
|
||||
A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate.
|
||||
A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate.
|
||||
|
||||
6. Conveying Non-Source Forms.
|
||||
|
||||
You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:
|
||||
You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:
|
||||
|
||||
a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange.
|
||||
b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge.
|
||||
c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b.
|
||||
d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements.
|
||||
e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d.
|
||||
* a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange.
|
||||
* b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge.
|
||||
* c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b.
|
||||
* d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements.
|
||||
* e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d.
|
||||
|
||||
A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.
|
||||
A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.
|
||||
|
||||
A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.
|
||||
A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.
|
||||
|
||||
"Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.
|
||||
"Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.
|
||||
|
||||
If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).
|
||||
If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).
|
||||
|
||||
The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.
|
||||
The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.
|
||||
|
||||
Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.
|
||||
Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.
|
||||
|
||||
7. Additional Terms.
|
||||
|
||||
"Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.
|
||||
"Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.
|
||||
|
||||
When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.
|
||||
When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.
|
||||
|
||||
Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:
|
||||
Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:
|
||||
|
||||
a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or
|
||||
b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or
|
||||
c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or
|
||||
d) Limiting the use for publicity purposes of names of licensors or authors of the material; or
|
||||
e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or
|
||||
f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors.
|
||||
* a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or
|
||||
* b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or
|
||||
* c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or
|
||||
* d) Limiting the use for publicity purposes of names of licensors or authors of the material; or
|
||||
* e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or
|
||||
* f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors.
|
||||
|
||||
All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.
|
||||
All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.
|
||||
|
||||
If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.
|
||||
If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.
|
||||
|
||||
Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.
|
||||
Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.
|
||||
|
||||
8. Termination.
|
||||
|
||||
You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).
|
||||
You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).
|
||||
|
||||
However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.
|
||||
However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.
|
||||
Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.
|
||||
|
||||
9. Acceptance Not Required for Having Copies.
|
||||
|
||||
You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.
|
||||
You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
10. Automatic Licensing of Downstream Recipients.
|
||||
|
||||
Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License.
|
||||
Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License.
|
||||
|
||||
An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.
|
||||
An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.
|
||||
|
||||
You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.
|
||||
You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.
|
||||
|
||||
11. Patents.
|
||||
|
||||
A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version".
|
||||
A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version".
|
||||
|
||||
A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.
|
||||
A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.
|
||||
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.
|
||||
|
||||
In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.
|
||||
In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.
|
||||
|
||||
If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying"
|
||||
means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.
|
||||
If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.
|
||||
|
||||
If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.
|
||||
If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.
|
||||
|
||||
A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.
|
||||
A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.
|
||||
|
||||
12. No Surrender of Others' Freedom.
|
||||
|
||||
If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.
|
||||
If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.
|
||||
|
||||
13. Use with the GNU Affero General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such.
|
||||
Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
|
||||
The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation.
|
||||
Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program.
|
||||
If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program.
|
||||
|
||||
Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.
|
||||
Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.
|
||||
|
||||
15. Disclaimer of Warranty.
|
||||
|
||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. Limitation of Liability.
|
||||
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
17. Interpretation of Sections 15 and 16.
|
||||
|
||||
If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.
|
||||
If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode:
|
||||
|
||||
<program> Copyright (C) <year> <name of author>
|
||||
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box".
|
||||
|
||||
You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read <https://www.gnu.org/licenses/why-not-lgpl.html>.
|
||||
|
281
INSTALL.md
@ -1,136 +1,66 @@
|
||||
# Building from source
|
||||
# SuperTuxKart Installation Instructions
|
||||
|
||||
In order to build SuperTuxKart from source, you'll need both the code and the assets (See <https://supertuxkart.net/Source_control> for more information):
|
||||
Note: If you obtained this source code from Github, you also need to download the game assets from Sourceforge using SVN.
|
||||
|
||||
```bash
|
||||
git clone https://github.com/supertuxkart/stk-code stk-code
|
||||
svn co https://svn.code.sf.net/p/supertuxkart/code/stk-assets stk-assets
|
||||
`svn checkout https://svn.code.sf.net/p/supertuxkart/code/stk-assets stk-assets`
|
||||
|
||||
Place the `stk-assets` folder next to the source root `stk-code` folder.
|
||||
See <http://supertuxkart.sourceforge.net/Source_control> for more information
|
||||
|
||||
|
||||
## Building STK on Linux
|
||||
|
||||
First, make sure that you have the following packages installed:
|
||||
|
||||
* OpenGL (mesa)
|
||||
* OpenAL (recommended: openal-soft-devel)
|
||||
* Ogg (libogg-dev)
|
||||
* Vorbis (libvorbis-dev)
|
||||
* libcurl (libcurl-devel)
|
||||
* libbluetooth (bluez-devel)
|
||||
* libpng (libpng-devel)
|
||||
* zlib (zlib-devel)
|
||||
* jpeg (libjpeg-turbo-devel)
|
||||
|
||||
Ubuntu command:
|
||||
|
||||
```
|
||||
sudo apt-get install autoconf automake build-essential cmake libogg-dev libvorbis-dev libopenal-dev libxxf86vm-dev \
|
||||
libgl1-mesa-dev libglu1-mesa-dev libcurl4-openssl-dev libfribidi-dev libbluetooth-dev libxrandr-dev
|
||||
```
|
||||
|
||||
Unpack the files from the tarball like this:
|
||||
|
||||
```
|
||||
tar xzf supertuxkart-*.tar.gz
|
||||
cd supertuxkart-*
|
||||
```
|
||||
|
||||
## Building SuperTuxKart on Linux
|
||||
where `*` is the version of SuperTuxkart you downloaded - eg `0.8.0`. Then:
|
||||
|
||||
### Dependencies
|
||||
|
||||
To build SuperTuxKart from source, you'll need to install the following packages:
|
||||
Compile SuperTuxKart:
|
||||
|
||||
* OpenAL (recommended: openal-soft-devel)
|
||||
* Ogg (libogg-dev)
|
||||
* Vorbis (libvorbis-dev)
|
||||
* Freetype (libfreetype6-dev)
|
||||
* Harfbuzz (libharfbuzz-dev)
|
||||
* libcurl (libcurl-devel)
|
||||
* libbluetooth (bluez-devel)
|
||||
* openssl (openssl-dev)
|
||||
* libpng (libpng-devel)
|
||||
* zlib (zlib-devel)
|
||||
* jpeg (libjpeg-turbo-devel)
|
||||
* SDL2 (libsdl2-devel)
|
||||
|
||||
Fedora command:
|
||||
|
||||
```bash
|
||||
sudo dnf install @development-tools angelscript-devel \
|
||||
bluez-libs-devel cmake desktop-file-utils SDL2-devel \
|
||||
freealut-devel freetype-devel \
|
||||
gcc-c++ git-core libcurl-devel libjpeg-turbo-devel \
|
||||
libpng-devel libsquish-devel libtool libvorbis-devel \
|
||||
openal-soft-devel openssl-devel libcurl-devel harfbuzz-devel \
|
||||
libogg-devel openssl-devel pkgconf \
|
||||
wiiuse-devel zlib-devel
|
||||
```
|
||||
|
||||
Mageia 6 command:
|
||||
|
||||
```bash
|
||||
su -c 'urpmi gcc-c++ cmake openssl-devel libcurl-devel freetype-devel harfbuzz-devel \
|
||||
libjpeg-turbo-devel libogg-devel openal-soft-devel SDL2-devel \
|
||||
libpng-devel libvorbis-devel nettle-devel zlib-devel git subversion \
|
||||
libbluez-devel libfreetype6-devel
|
||||
```
|
||||
|
||||
openSUSE command:
|
||||
|
||||
```bash
|
||||
sudo zypper install gcc-c++ cmake openssl-devel libcurl-devel libSDL2-devel \
|
||||
freetype-devel harfbuzz-devel libogg-devel openal-soft-devel libpng-devel \
|
||||
libvorbis-devel pkgconf zlib-devel enet-devel \
|
||||
libjpeg-devel bluez-devel freetype2-devel
|
||||
```
|
||||
|
||||
Debian-based Distributions command:
|
||||
|
||||
```bash
|
||||
sudo apt-get install build-essential cmake libbluetooth-dev libsdl2-dev \
|
||||
libcurl4-openssl-dev libenet-dev libfreetype6-dev libharfbuzz-dev \
|
||||
libjpeg-dev libogg-dev libopenal-dev libpng-dev \
|
||||
libssl-dev libvorbis-dev libmbedtls-dev pkg-config zlib1g-dev
|
||||
```
|
||||
|
||||
Solus command:
|
||||
```bash
|
||||
sudo eopkg it cmake openal-soft-devel libogg-devel libvorbis-devel freetype2-devel \
|
||||
harfbuzz-devel curl-devel bluez-devel openssl-devel libpng-devel zlib-devel \
|
||||
libjpeg-turbo-devel sdl2-devel enet-devel libjpeg-turbo-devel bluez-devel curl-devel
|
||||
```
|
||||
|
||||
### In-game recorder
|
||||
|
||||
To build the in-game recorder for STK, you have to install
|
||||
libopenglrecorder from your distribution, or compile it yourself from [here](https://github.com/Benau/libopenglrecorder).
|
||||
Compilation instruction is explained there. If you don't need this feature, pass `-DBUILD_RECORDER=off` to cmake.
|
||||
|
||||
### Shaderc for Vulkan support
|
||||
|
||||
You need to compile [Shaderc](https://github.com/google/shaderc) for vulkan support in SuperTuxKart if you are not building for Windows or macOS. If you don't need this feature, pass `-DNO_SHADERC=on` to cmake.
|
||||
|
||||
### Compiling
|
||||
|
||||
To compile SuperTuxKart, run the following commands inside `stk-code` directory
|
||||
|
||||
```bash
|
||||
# go into the stk-code directory
|
||||
cd stk-code
|
||||
|
||||
# create and enter the cmake_build directory
|
||||
mkdir cmake_build
|
||||
cd cmake_build
|
||||
|
||||
# run cmake to generate the makefile
|
||||
cmake ..
|
||||
|
||||
# compile
|
||||
make -j$(nproc)
|
||||
make VERBOSE=1 -j2
|
||||
```
|
||||
|
||||
STK can then be run from the build directory with `bin/supertuxkart`
|
||||
To create a debug version of STK, use:
|
||||
|
||||
#### Keeping your build up to date
|
||||
|
||||
To recompile the latest code without redownloading the entire source, first run the ```svn up``` command inside the 'stk-assets' directory, then run the following commands inside the 'stk-code' directory:
|
||||
|
||||
```bash
|
||||
git pull
|
||||
cd cmake_build
|
||||
cmake ..
|
||||
make -j$(nproc)
|
||||
```
|
||||
|
||||
##### Build Speed Optimization
|
||||
|
||||
"-j$(nproc)" is an example, for a faster build, use "-jx" instead, where "x" is the amount of CPU threads you have, minus one.
|
||||
|
||||
### Further options
|
||||
|
||||
To create a debug version of STK, run:
|
||||
|
||||
```bash
|
||||
cmake .. -DCMAKE_BUILD_TYPE=Debug
|
||||
```
|
||||
|
||||
You can install your build system-wide:
|
||||
To test the compilation, supertuxkart can be run from the build
|
||||
directory by ./bin/supertuxkart
|
||||
|
||||
```bash
|
||||
sudo make install
|
||||
To install the file, as root execute:
|
||||
|
||||
```
|
||||
make install
|
||||
```
|
||||
|
||||
The default install location is `/usr/local`, i.e. the data files will
|
||||
@ -139,123 +69,10 @@ will be copied to `/usr/local/bin`. To change the default installation
|
||||
location, specify `CMAKE_INSTALL_PREFIX` when running cmake, e.g.:
|
||||
`cmake .. -DCMAKE_INSTALL_PREFIX=/opt/stk`
|
||||
|
||||
## Building SuperTuxKart on Windows
|
||||
|
||||
## Building STK on OS X
|
||||
See <http://supertuxkart.sourceforge.net/Building_and_packaging_on_OSX>
|
||||
|
||||
To Build SuperTuxKart on Windows follow these instructions:
|
||||
|
||||
1. Download and install Visual Studio from here: [Visual Studio - Download](https://www.visualstudio.com/downloads/). The free Visual Studio Community edition works fine. Remember to select "Desktop development with C++" in the installer.
|
||||
|
||||
2. If you want the stable version, download the SuperTuxKart source package from the latest stable version [SuperTuxKart on GitHub](https://github.com/supertuxkart/stk-code/releases) and unpack it.
|
||||
|
||||
3. If you want the development version, you will need a Git client and a SVN client. More information can be found here: [SuperTuxKart.net - Source Control](https://supertuxkart.net/Source_control).
|
||||
Open your file browser and find somewhere you want to put the development version of SuperTuxKart. For example in C:\Users\<Your Username> as the Git and SVN clients will have write permissions there, and you should create its own directory, for example SuperTuxKart-dev. Enter that directory, and create a directory inside called stk-assets, and enter it. If you installed TortoiseSVN, right-click, select TortoiseSVN -> Checkout... and paste the corresponding URL found in [SuperTuxKart.net - Source Control](https://supertuxkart.net/Source_control). While it is downloading the game assets, go back to your file browser and one level up. Right-click again somewhere empty and select "Git clone..." and paste the corresponding link found in [SuperTuxKart.net - Source Control](https://supertuxkart.net/Source_control).
|
||||
*Note: Both `stk-code` and `stk-assets` **must** be in the same directory, otherwise the build will likely fail!*
|
||||
|
||||
4. If you got the stable version, download the Windows dependencies package from [SuperTuxKart on GitHub - Dependencies Releases](https://github.com/supertuxkart/dependencies/releases), find the stk-code version there and download the `dependencies(arch).zip` as needed and unpack the archive into the `stk-code` directory.
|
||||
|
||||
5. If you got the development version go to SuperTuxKart-dev in your file browser, then visit [SuperTuxKart on GitHub - Dependencies latest preview release](https://github.com/supertuxkart/dependencies/releases/tag/preview)
|
||||
and unpack the archive into the `stk-code` directory. Download `i686` if you use Win32 generator of MSVC, `x86_64` for x64, `armv7` for ARM and `aarch64` for ARM64.
|
||||
|
||||
6. Download CMake from here: [CMake - download page](https://cmake.org/download/), install it; once CMake is installed, double click on the CMake icon on your desktop, and point it towards your `stk-code` directory in the 'Where is the source code' field, and point 'Where to build the binaries' to a new directory called `build` or `bld` inside the stk-code directory.
|
||||
|
||||
7. Press 'Configure'; CMake will ask you if it is OK to create the aforementioned directory, press `Yes`. CMake will then ask you about your version of Visual Studio.
|
||||
|
||||
Confirm your selection; *Please look at the table below to avoid confusion between version numbers and releases of Visual Studio*; CMake will begin creating the required files for the build in the directory. If you want to do a 64-bit build, select the version of Visual Studio you installed with "Win64" appended. Press 'Generate' button.
|
||||
|
||||
8. Navigate to your build directory and open the `SuperTuxKart.sln` file; Visual Studio will now load the solution.
|
||||
|
||||
9. In the 'Solution Explorer', right click on the `supertuxkart` project and select "Set as StartUp project".
|
||||
|
||||
10. Open the 'Build' menu and select 'Build Solution'; or, press the default keyboard shortcut: `CTRL + SHIFT + B` to build the solution.
|
||||
|
||||
*Note: To avoid confusion between releases and versions, refer to this table:*
|
||||
|
||||
Visual Studio Release | Version
|
||||
----------------------|------------
|
||||
Visual Studio 2019| 16
|
||||
Visual Studio 2017| 15
|
||||
Visual Studio 2015| 14
|
||||
Visual Studio 2013| 13
|
||||
|
||||
## Building SuperTuxKart on Windows (from PowerShell/Command line)
|
||||
|
||||
1. Download and install Visual Studio from here: [Visual Studio - Download](https://www.visualstudio.com/downloads/), the free Visual Studio Community edition works fine.
|
||||
|
||||
2. Download a source package from either [SuperTuxKart on GitHub](https://github.com/supertuxkart/stk-code/releases) or [SuperTuxKart.net - Source Control](https://supertuxkart.net/Source_control)
|
||||
NOTE: the `stk-code` and `stk-assets` directories **must** be in the same directory, `stk-assets` is not needed if you download the full source tarball `(SuperTuxKart-version-src.tar.xz)`.
|
||||
3. Download the Windows dependencies package from [SuperTuxKart on GitHub - Dependencies latest preview release](https://github.com/supertuxkart/dependencies/releases/tag/preview)
|
||||
and unpack the archive into the `stk-code` directory. Download `i686` if you use Win32 generator of MSVC, `x86_64` for x64, `armv7` for ARM and `aarch64` for ARM64.
|
||||
4. Download CMake from here: [CMake - download page](https://cmake.org/download/); and install it. Navigate to the `stk-code` directory; and create an directory called "build":
|
||||
|
||||
```cmd
|
||||
mkdir build
|
||||
cd build
|
||||
```
|
||||
|
||||
5. Once inside the build directory; run CMake to start the compilation process:
|
||||
|
||||
```cmd
|
||||
cmake ..
|
||||
```
|
||||
|
||||
6. Now that CMake finished configuring and creating the necessary files for the build, run the build command in the same directory:
|
||||
|
||||
```cmd
|
||||
msbuild.exe SuperTuxKart.sln
|
||||
```
|
||||
|
||||
SuperTuxKart can now be run as `bin\Debug\supertuxkart.exe` or `bin\Release\supertuxkart.exe`
|
||||
|
||||
## Building SuperTuxKart on Windows using LLVM MinGW
|
||||
|
||||
1. Get the LLVM Mingw archive [here](https://github.com/mstorsjo/llvm-mingw/releases/latest), get the `*-msvcrt-i686.zip or` `*-msvcrt-x86_64.zip` depending on whether you have an Intel / AMD 32 or 64-bit Windows. If you are using ARM64 Windows get the `*-msvcrt-i686.zip` should be fine (untested). After downloading extract it as `C:\llvm-mingw` so `C:\llvm-mingw` contains `bin`, `include`, `lib`, etc.
|
||||
2. Get Ninja [here](https://github.com/ninja-build/ninja/releases/latest), download the `ninja-win.zip` and extract the `ninja.exe` from the archive to `C:\llvm-mingw`. If you are not using Intel / AMD 64-bit Windows use [this link](https://packages.msys2.org/package/mingw-w64-i686-ninja) and extract `mingw32\bin\ninja.exe` inside the `tar.zst`.
|
||||
3. Download a source package from either [SuperTuxKart on GitHub](https://github.com/supertuxkart/stk-code/releases) or [SuperTuxKart.net - Source Control](https://supertuxkart.net/Source_control)
|
||||
NOTE: the `stk-code` and `stk-assets` directories **must** be in the same directory, `stk-assets` is not needed if you download the full source tarball `(SuperTuxKart-version-src.tar.xz)`. Also make sure they lie within the C drive.
|
||||
4. Download the Windows dependencies package from [SuperTuxKart on GitHub - Dependencies latest preview release](https://github.com/supertuxkart/dependencies/releases/tag/preview)
|
||||
and unpack the archive into the `stk-code` directory. Download `i686` if you compile for Intel / AMD 32-bit, `x86_64` for Intel / AMD 64-bit, `armv7` for ARM 32-bit and `aarch64` for ARM 64-bit version of Windows.
|
||||
6. Download CMake from here: [CMake - download page](https://cmake.org/download/), install it; once CMake is installed, double click on the CMake icon on your desktop, and point it towards your `stk-code` directory in the 'Where is the source code' field, and point 'Where to build the binaries' to a new directory called `build` inside the stk-code directory.
|
||||
7. Press the `Add Entry` button and add the values below:
|
||||
* Name: `LLVM_ARCH` Type: `STRING` Value: `i686`, `x86_64`, `armv7` or `aarch64`
|
||||
* Name: `LLVM_PREFIX` Type: `STRING` Value: `C:/llvm-mingw`
|
||||
* Name: `CMAKE_MAKE_PROGRAM` Type: `STRING` Value: `C:/llvm-mingw/ninja.exe`
|
||||
* Name: `USE_WIIUSE` Type: `BOOL` Value: `Empty (unchecked)`
|
||||
8. Press 'Configure'; CMake will ask you if it is OK to create the aforementioned directory, press `Yes`. Choose `Ninja` from `Specify the generator for this project`, choose `Specify toolchain file for cross-compiling` then press `Next`. Specify the toolchain file which is located in `stk-code\cmake\Toolchain-llvm-mingw.cmake` and press `Finish`. If no error appears then press 'Generate'
|
||||
9. Once inside the build directory using command line `cmd.exe` or PowerShell:
|
||||
```cmd
|
||||
C:\llvm-mingw\ninja.exe
|
||||
```
|
||||
|
||||
SuperTuxKart can now be run as `bin\supertuxkart.exe`.
|
||||
|
||||
## Building SuperTuxKart on macOS
|
||||
|
||||
### Getting Started
|
||||
|
||||
Install the developer tools, either from the OS X Install DVD or from Apple's website.
|
||||
|
||||
Download `dependencies-macosx.tar.xz` from `Assets` section [here](https://github.com/supertuxkart/dependencies/releases) and extract it inside stk-code directory, use `preview` version for git stk-code.
|
||||
|
||||
Build STK
|
||||
|
||||
```bash
|
||||
cd /path/to/stk-code
|
||||
mkdir cmake_build
|
||||
cd cmake_build
|
||||
cmake .. -DCMAKE_FIND_ROOT_PATH=$(pwd)/../dependencies-macosx -DUSE_CRYPTO_OPENSSL=FALSE
|
||||
make
|
||||
```
|
||||
|
||||
Add ` -DCMAKE_OSX_DEPLOYMENT_TARGET=10.9` for 10.9 compatibility.
|
||||
|
||||
#### (Optional) packaging for distribution
|
||||
|
||||
By default, the executable that is produced is not ready for distribution. Install <https://github.com/auriamg/macdylibbundler> and run:
|
||||
|
||||
```bash
|
||||
dylibbundler -od -b -x ./bin/SuperTuxKart.app/Contents/MacOS/supertuxkart -d ./bin/SuperTuxKart.app/Contents/libs/ -p @executable_path/../libs/ -s ../dependencies-macosx/lib
|
||||
```
|
||||
|
||||
Add `-ns` to disable ad-hoc codesigning
|
||||
|
||||
Afterwards, copy the contents of `stk-assets` into `/SuperTuxKart.app/Contents/Resources/data`.
|
||||
## Building STK on Windows
|
||||
See <http://supertuxkart.sourceforge.net/How_to_build_the_Windows_version>
|
||||
|
366
NETWORKING.md
@ -1,366 +0,0 @@
|
||||
# Online networking games for STK
|
||||
|
||||
## Hosting server
|
||||
First of all, you can compile STK with `-DSERVER_ONLY=ON` which will produce a GUI-less STK binary optimized for size and memory usage, useful for situation like in VPS.
|
||||
The dependencies for RHEL/CentOS 7 are installed with:
|
||||
```bash
|
||||
yum install wget; cd /tmp; wget https://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-12.noarch.rpm; rpm -Uvh epel-release*rpm
|
||||
yum install gcc-c++ cmake openssl-devel libcurl-devel zlib-devel enet
|
||||
```
|
||||
### Hosting WAN (public internet) server
|
||||
You are required to have an stk online account first, go [here](https://online.supertuxkart.net/register.php) for registration.
|
||||
|
||||
It is recommended you have a saved user in your computer to allow hosting multiple servers simultaneously with the same account, if you have a fresh STK installation, first run:
|
||||
|
||||
If you intend to keep your server always on (24x7) you are required to implement port forward / direct connection with NAT penetration in your network, we will regularly remove any servers not following this rule.
|
||||
|
||||
`supertuxkart --init-user --login=your_registered_name --password=your_password`
|
||||
|
||||
After that you should see `Done saving user, leaving` in terminal if it successfully logged in.
|
||||
|
||||
Than you can just run:
|
||||
|
||||
`supertuxkart --server-config=your_config.xml --network-console`
|
||||
|
||||
It will create that xml configuration file if not found in current directory, you can type `quit` in terminal, than you can edit that file for further configuration as required.
|
||||
` --network-console` should not be used if you run supertuxkart server later with systemd service, see issue [#4299](https://github.com/supertuxkart/stk-code/issues/4299).
|
||||
|
||||
The current server configuration xml looks like this:
|
||||
```xml
|
||||
<?xml version="1.0"?>
|
||||
<server-config version="6" >
|
||||
|
||||
<!-- Name of server, encode in XML if you want to use unicode characters. -->
|
||||
<server-name value="STK Server" />
|
||||
|
||||
<!-- Port used in server, if you specify 0, it will use the server port specified in stk_config.xml. If you wish to use a random port, set random-server-port to '1' in user config. STK will automatically switch to a random port if the port you specify fails to be bound. -->
|
||||
<server-port value="0" />
|
||||
|
||||
<!-- Game mode in server, 0 is normal race (grand prix), 1 is time trial (grand prix), 3 is normal race, 4 time trial, 6 is soccer, 7 is free-for-all and 8 is capture the flag. Notice: grand prix server doesn't allow for players to join and wait for ongoing game. -->
|
||||
<server-mode value="3" />
|
||||
|
||||
<!-- Difficulty in server, 0 is beginner, 1 is intermediate, 2 is expert and 3 is supertux (the most difficult). -->
|
||||
<server-difficulty value="0" />
|
||||
|
||||
<!-- Number of grand prix tracks per game (If grand prix enabled). -->
|
||||
<gp-track-count value="3" />
|
||||
|
||||
<!-- Use goal target in soccer. -->
|
||||
<soccer-goal-target value="false" />
|
||||
|
||||
<!-- Enable wan server, which requires you to have an stk-addons account with a saved session. Check init-user command for details. -->
|
||||
<wan-server value="true" />
|
||||
|
||||
<!-- Enable network console, which can do for example kickban. -->
|
||||
<enable-console value="false" />
|
||||
|
||||
<!-- Maximum number of players on the server, setting this to a value greater than 8 can cause performance degradation. -->
|
||||
<server-max-players value="8" />
|
||||
|
||||
<!-- Password for private server, leave empty for a public server. -->
|
||||
<private-server-password value="" />
|
||||
|
||||
<!-- Message of today shown in lobby, you can enter encoded XML words here or a file.txt and let STK load it. -->
|
||||
<motd value="" />
|
||||
|
||||
<!-- If this value is set to false, the server will ignore chat messages from all players. -->
|
||||
<chat value="true" />
|
||||
|
||||
<!-- If client sends more than chat-consecutive-interval / 2 chats within this value (read in seconds), it will be ignore, negative value to disable. -->
|
||||
<chat-consecutive-interval value="8" />
|
||||
|
||||
<!-- Allow players to vote for which track to play. If this value is set to false, the server will randomly pick the next track to play. -->
|
||||
<track-voting value="true" />
|
||||
|
||||
<!-- Timeout in seconds for selecting karts and (or) voting tracks in server, you may want to use a lower value if you have track-voting off. -->
|
||||
<voting-timeout value="30" />
|
||||
|
||||
<!-- Timeout in seconds for validation of clients in wan, currently STK will use the stk-addons server to share AES key between the client and server. -->
|
||||
<validation-timeout value="20" />
|
||||
|
||||
<!-- By default WAN server will always validate player and LAN will not, disable it to allow non-validated player in WAN. -->
|
||||
<validating-player value="true" />
|
||||
|
||||
<!-- Disable it to turn off all stun related code in server, it allows for saving of server resources if your server is not behind a firewall. -->
|
||||
<firewalled-server value="true" />
|
||||
|
||||
<!-- Enable to allow IPv6 connection if you have a public IPv6 address. STK currently uses dual-stack mode which requires server to have both IPv4 and IPv6 and listen to same port. If STK detects your server has no public IPv6 address or port differs between IPv4 and IPv6 then it will use IPv4 only socket. For system which doesn't support dual-stack socket (like OpenBSD) you may fail to be connected by IPv4 clients. You can override the detection in config.xml at supertuxkart config-0.10 folder, with default-ip-type option. -->
|
||||
<ipv6-connection value="true" />
|
||||
|
||||
<!-- No server owner in lobby which can control the starting of game or kick any players. -->
|
||||
<owner-less value="false" />
|
||||
|
||||
<!-- Time to wait before entering kart selection screen if satisfied min-start-game-players below for owner less or ranked server. -->
|
||||
<start-game-counter value="60" />
|
||||
|
||||
<!-- Clients below this value will be rejected from joining this server. It's determined by number of official karts in client / number of official karts in server -->
|
||||
<official-karts-threshold value="1" />
|
||||
|
||||
<!-- Clients below this value will be rejected from joining this server. It's determined by number of official tracks in client / number of official tracks in server, setting this value too high will prevent android players from joining this server, because STK android apk has some official tracks removed. -->
|
||||
<official-tracks-threshold value="0.7" />
|
||||
|
||||
<!-- Only auto start kart selection when number of connected player is larger than or equals this value, for owner less or ranked server, after start-game-counter reaches 0. -->
|
||||
<min-start-game-players value="2" />
|
||||
|
||||
<!-- Automatically end linear race game after 1st player finished for some time (currently his finished time * 0.25 + 15.0). -->
|
||||
<auto-end value="false" />
|
||||
|
||||
<!-- Enable team choosing in lobby in team game (soccer and CTF). If owner-less is enabled and live-spectate is not enabled, than this option is always disabled. -->
|
||||
<team-choosing value="true" />
|
||||
|
||||
<!-- If strict-players is on, no duplicated online id or split screen players are allowed, which can prevent someone using more than 1 network AI with this server. -->
|
||||
<strict-players value="false" />
|
||||
|
||||
<!-- Server will submit ranking to stk-addons server for linear race games, you require permission for that. validating-player, auto-end, strict-player and owner-less will be turned on. -->
|
||||
<ranked value="false" />
|
||||
|
||||
<!-- If true, the server owner can config the difficulty and game mode in the GUI of lobby. This option cannot be used with owner-less or grand prix server, and will be automatically turned on if the server was created using the in-game GUI. The changed difficulty and game mode will not be saved in this config file. -->
|
||||
<server-configurable value="false" />
|
||||
|
||||
<!-- If true, players can live join or spectate the in-progress game. Currently live joining is only available if the current game mode used in server is FFA, CTF or soccer, also official-karts-threshold will be made 1.0. If false addon karts will use their original hitbox other than tux, all players having it restriction applies. -->
|
||||
<live-spectate value="true" />
|
||||
|
||||
<!-- Time in seconds when a flag is dropped a by player in CTF returning to its own base. -->
|
||||
<flag-return-timeout value="20" />
|
||||
|
||||
<!-- Time in seconds to deactivate a flag when it's captured or returned to own base by players. -->
|
||||
<flag-deactivated-time value="3" />
|
||||
|
||||
<!-- Hit limit of free for all, zero to disable hit limit. -->
|
||||
<hit-limit value="20" />
|
||||
|
||||
<!-- Time limit of free for all in seconds, zero to disable time limit. -->
|
||||
<time-limit-ffa value="360" />
|
||||
|
||||
<!-- Capture limit of CTF, zero to disable capture limit. -->
|
||||
<capture-limit value="5" />
|
||||
|
||||
<!-- Time limit of CTF in seconds, zero to disable time limit. -->
|
||||
<time-limit-ctf value="600" />
|
||||
|
||||
<!-- Value used by server to automatically estimate each game time. For races, it decides the lap of each race in network game, if more than 0.0f, the number of lap of each track vote in linear race will be determined by max(1.0f, auto-game-time-ratio * default lap of that track). For soccer if more than 0.0f, for time limit game it will be auto-game-time-ratio * soccer-time-limit in UserConfig, for goal limit game it will be auto-game-time-ratio * numgoals in UserConfig, -1 to disable for all. -->
|
||||
<auto-game-time-ratio value="-1" />
|
||||
|
||||
<!-- Maximum ping allowed for a player (in ms), it's recommended to use default value if live-spectate is on. -->
|
||||
<max-ping value="300" />
|
||||
|
||||
<!-- Tolerance of jitter in network allowed (in ms), it's recommended to use default value if live-spectate is on. -->
|
||||
<jitter-tolerance value="100" />
|
||||
|
||||
<!-- Kick players whose ping is above max-ping. -->
|
||||
<kick-high-ping-players value="false" />
|
||||
|
||||
<!-- Allow players exceeding max-ping to have a playable game, if enabled kick-high-ping-players will be disabled, please also use a default value for max-ping and jitter-tolerance with it. -->
|
||||
<high-ping-workaround value="true" />
|
||||
|
||||
<!-- Kick idle player which has no network activity to server for more than some seconds during game, unless he has finished the race. Negative value to disable, and this option will always be disabled for LAN server. -->
|
||||
<kick-idle-player-seconds value="60" />
|
||||
|
||||
<!-- Set how many states the server will send per second, the higher this value, the more bandwidth requires, also each client will trigger more rewind, which clients with slow device may have problem playing this server, use the default value is recommended. -->
|
||||
<state-frequency value="10" />
|
||||
|
||||
<!-- Use sql database for handling server stats and maintenance, STK needs to be compiled with sqlite3 supported. -->
|
||||
<sql-management value="false" />
|
||||
|
||||
<!-- Database filename for sqlite to use, it can be shared for all servers created in this machine, and STK will create specific table for each server. You need to create the database yourself first, see NETWORKING.md for details -->
|
||||
<database-file value="stkservers.db" />
|
||||
|
||||
<!-- Specified in millisecond for maximum time waiting in sqlite3_busy_handler. You may need a higher value if your database is shared by many servers or having a slow hard disk. -->
|
||||
<database-timeout value="1000" />
|
||||
|
||||
<!-- IPv4 ban list table name, you need to create the table first, see NETWORKING.md for details, empty to disable. This table can be shared for all servers if you use the same name. STK can auto kick active peer from ban list (update per minute) whichallows live kicking peer by inserting record to database. -->
|
||||
<ip-ban-table value="ip_ban" />
|
||||
|
||||
<!-- IPv6 ban list table name, you need to create the table first, see NETWORKING.md for details, empty to disable. This table can be shared for all servers if you use the same name. STK can auto kick active peer from ban list (update per minute) which allows live kicking peer by inserting record to database. -->
|
||||
<ipv6-ban-table value="ipv6_ban" />
|
||||
|
||||
<!-- Online ID ban list table name, you need to create the table first, see NETWORKING.md for details, empty to disable. This table can be shared for all servers if you use the same name. STK can auto kick active peer from ban list (update per minute) which allows live kicking peer by inserting record to database. -->
|
||||
<online-id-ban-table value="online_id_ban" />
|
||||
|
||||
<!-- Player reports table name, which will be written when a player reports player in the network user dialog, you need to create the table first, see NETWORKING.md for details, empty to disable. This table can be shared for all servers if you use the same name. -->
|
||||
<player-reports-table value="player_reports" />
|
||||
|
||||
<!-- Days to keep player reports, older than that will be auto cleared, 0 to keep them forever. -->
|
||||
<player-reports-expired-days value="3" />
|
||||
|
||||
<!-- IP geolocation table, you only need this table if you want to geolocate IP from non-stk-addons connection, as all validated players connecting from stk-addons will provide the location info, you need to create the table first, see NETWORKING.md for details, empty to disable. This table can be shared for all servers if you use the same name. -->
|
||||
<ip-geolocation-table value="ip_mapping" />
|
||||
|
||||
<!-- IPv6 geolocation table, you only need this table if you want to geolocate IP from non-stk-addons connection, as all validated players connecting from stk-addons will provide the location info, you need to create the table first, see NETWORKING.md for details, empty to disable. This table can be shared for all servers if you use the same name. -->
|
||||
<ipv6-geolocation-table value="ipv6_mapping" />
|
||||
|
||||
<!-- If true this server will auto add / remove AI connected with network-ai=x, which will kick N - 1 bot(s) where N is the number of human players. Only use this for non-GP racing server. -->
|
||||
<ai-handling value="false" />
|
||||
|
||||
<!-- If true this server will allow AI instance to be connected from anywhere. (other than LAN network only) -->
|
||||
<ai-anywhere value="false" />
|
||||
|
||||
</server-config>
|
||||
|
||||
```
|
||||
|
||||
At the moment STK has a list of STUN servers for NAT penetration which allows players or servers behind a firewall or router to be able to connect to each other, but in case it doesn't work, you have to manually disable the firewall or port forward the port(s) used by STK.
|
||||
By default STK servers use port `2759`. For example, in Ubuntu based distributions, run the following command to disable the firewall on that port:
|
||||
|
||||
`sudo ufw allow 2759`
|
||||
|
||||
You may also need to handle the server discovery port `2757` for connecting your WAN server in LAN / localhost.
|
||||
|
||||
Notice: You don't need to make any firewall or router configuration changes if you connect to the recommended servers (marked with ☆★STK★☆).
|
||||
|
||||
### Hosting LAN (local internet) server
|
||||
Everything is basically the same as WAN one, except you don't need an stk online account, just do:
|
||||
|
||||
`supertuxkart --server-config=your_config.xml --lan-server=your_server_name --network-console`
|
||||
|
||||
For LAN server it is required that the server and server discovery port is connectable by clients directly, no NAT penetration will be done in LAN.
|
||||
|
||||
LAN server can be connected too by typing your server public address (with port) in ```Enter server address``` dialog without relying on stk-addons.
|
||||
|
||||
------
|
||||
After the first time configuration, you can just start the server with the command:
|
||||
|
||||
`supertuxkart --server-config=your_config.xml`, regardless of whether LAN or WAN server is chosen (of course you need to have a saved user for the WAN one), by default your server logging will be saved to the STK configuration directory with a name of `your_config.log`, given that the server configuration filename is `your_config.xml`.
|
||||
|
||||
You can find out that directory location [here (See Where is the configuration stored?)](https://supertuxkart.net/FAQ)
|
||||
|
||||
## Testing server
|
||||
There is a network AI tester in STK which can use AI on player controller for server hosting linear races game mode, which helps automating the testing for servers, to enable it use it on lan server:
|
||||
|
||||
`supertuxkart --connect-now=x.x.x.x:y --network-ai=n --no-graphics`
|
||||
|
||||
Remove `--no-graphics` if you want to see the AI racing. You can also run network AI tester in server-only build of STK.
|
||||
|
||||
With the network AI tester, it's easier to for example simulate high-loaded servers or bad networks (ones with high ping and/or packet loss).
|
||||
|
||||
Tested on a Raspberry Pi 3 Model B+, if you have 8 players connected to a server hosted on it, the usage of a single CPU core is ~60% and there are ~60MB of memory usage for game with heavy tracks like Cocoa Temple or Candela City on the server, you can use the above figures to estimate how many STK servers can be hosted on the same computer.
|
||||
|
||||
For bad network simulation, we recommend `network traffic control` by Linux kernel, see [here](https://wiki.linuxfoundation.org/networking/netem) for details.
|
||||
|
||||
You will have the best gaming experience by choosing a server where all players have less than 100ms ping with no packet loss.
|
||||
|
||||
## Server management (Since 1.1)
|
||||
|
||||
Currently STK uses sqlite (if building with sqlite3 on) for server management with the following functions at the moment:
|
||||
1. Server statistics
|
||||
2. IP / online ID ban list
|
||||
3. Player reports
|
||||
4. IPv4 and IPv6 geolocation
|
||||
|
||||
You need to create a database in sqlite first, run `sqlite3 stkservers.db` in the folder where (all) your server_config.xml(s) located.
|
||||
|
||||
A table named `v(server database version)_(your_server_config_filename_without_.xml_extension)_stats` will also be created in your database if one does not exist.:
|
||||
```sql
|
||||
CREATE TABLE IF NOT EXISTS (table name above)
|
||||
(
|
||||
host_id INTEGER UNSIGNED NOT NULL PRIMARY KEY, -- Unique host id in STKHost of each connection session for a STKPeer
|
||||
ip INTEGER UNSIGNED NOT NULL, -- IP decimal of host
|
||||
ipv6 TEXT NOT NULL DEFAULT '', -- IPv6 (if exists) in string of host (only created if IPv6 server)
|
||||
port INTEGER UNSIGNED NOT NULL, -- Port of host
|
||||
online_id INTEGER UNSIGNED NOT NULL, -- Online if of the host (0 for offline account)
|
||||
username TEXT NOT NULL, -- First player name in the host (if the host has splitscreen player)
|
||||
player_num INTEGER UNSIGNED NOT NULL, -- Number of player(s) from the host, more than 1 if it has splitscreen player
|
||||
country_code TEXT NULL DEFAULT NULL, -- 2-letter country code of the host
|
||||
version TEXT NOT NULL, -- SuperTuxKart version of the host
|
||||
os TEXT NOT NULL, -- Operating system of the host
|
||||
connected_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, -- Time when connected
|
||||
disconnected_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, -- Time when disconnected (saved when disconnected)
|
||||
ping INTEGER UNSIGNED NOT NULL DEFAULT 0 -- Ping of the host
|
||||
) WITHOUT ROWID;
|
||||
```
|
||||
|
||||
STK will also create the following default views from the stats table:
|
||||
|
||||
`*_full_stats`
|
||||
Full stats with ip in human readable format and time played of each players in minutes.
|
||||
|
||||
`*_current_players`
|
||||
Current players in server with ip in human readable format and time played of each players in minutes.
|
||||
|
||||
`*_player_stats`
|
||||
All players with online id and username with their time played stats in this server since creation of this database.
|
||||
If sqlite supports window functions (since 3.25), it will include last session player info (ip, country, ping...).
|
||||
|
||||
A empty table named `v(server database version)_countries` will also be created in your database if not exists:
|
||||
```sql
|
||||
CREATE TABLE IF NOT EXISTS (table name above)
|
||||
(
|
||||
country_code TEXT NOT NULL PRIMARY KEY UNIQUE, -- Unique 2-letter country code
|
||||
country_flag TEXT NOT NULL, -- Unicode country flag representation of 2-letter country code
|
||||
country_name TEXT NOT NULL -- Readable name of this country
|
||||
) WITHOUT ROWID;
|
||||
```
|
||||
|
||||
If you want to see flags and readable names of countries in the above views, you need to initialize `v(server database version)_countries` table, check [this script](tools/generate-countries-table.py).
|
||||
|
||||
For IPv4 and online ID ban list, player reports or IP mapping, you need to create one yourself:
|
||||
```sql
|
||||
CREATE TABLE ip_ban
|
||||
(
|
||||
ip_start INTEGER UNSIGNED NOT NULL UNIQUE, -- Starting of ip decimal for banning (inclusive)
|
||||
ip_end INTEGER UNSIGNED NOT NULL UNIQUE, -- Ending of ip decimal for banning (inclusive)
|
||||
starting_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, -- Starting time of this banning entry to be effective
|
||||
expired_days REAL NULL DEFAULT NULL, -- Days for this banning to be expired, use NULL for a permanent ban
|
||||
reason TEXT NOT NULL DEFAULT '', -- Banned reason shown in user stk menu, can be empty
|
||||
description TEXT NOT NULL DEFAULT '', -- Private description for server admin
|
||||
trigger_count INTEGER UNSIGNED NOT NULL DEFAULT 0, -- Number of banning triggered by this ban entry
|
||||
last_trigger TIMESTAMP NULL DEFAULT NULL -- Latest time this banning entry was triggered
|
||||
);
|
||||
|
||||
CREATE TABLE ipv6_ban
|
||||
(
|
||||
ipv6_cidr TEXT NOT NULL UNIQUE, -- IPv6 CIDR range for banning (for example 2001::/64), use /128 for a specific ip
|
||||
starting_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, -- Starting time of this banning entry to be effective
|
||||
expired_days REAL NULL DEFAULT NULL, -- Days for this banning to be expired, use NULL for a permanent ban
|
||||
reason TEXT NOT NULL DEFAULT '', -- Banned reason shown in user stk menu, can be empty
|
||||
description TEXT NOT NULL DEFAULT '', -- Private description for server admin
|
||||
trigger_count INTEGER UNSIGNED NOT NULL DEFAULT 0, -- Number of banning triggered by this ban entry
|
||||
last_trigger TIMESTAMP NULL DEFAULT NULL -- Latest time this banning entry was triggered
|
||||
);
|
||||
|
||||
CREATE TABLE online_id_ban
|
||||
(
|
||||
online_id INTEGER UNSIGNED NOT NULL UNIQUE, -- Online id from STK addons database for banning
|
||||
starting_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, -- Starting time of this banning entry to be effective
|
||||
expired_days REAL NULL DEFAULT NULL, -- Days for this banning to be expired, use NULL for a permanent ban
|
||||
reason TEXT NOT NULL DEFAULT '', -- Banned reason shown in user stk menu, can be empty
|
||||
description TEXT NOT NULL DEFAULT '', -- Private description for server admin
|
||||
trigger_count INTEGER UNSIGNED NOT NULL DEFAULT 0, -- Number of banning triggered by this ban entry
|
||||
last_trigger TIMESTAMP NULL DEFAULT NULL -- Latest time this banning entry was triggered
|
||||
);
|
||||
|
||||
CREATE TABLE player_reports
|
||||
(
|
||||
server_uid TEXT NOT NULL, -- Report from which server unique id (config filename)
|
||||
reporter_ip INTEGER UNSIGNED NOT NULL, -- IP decimal of player who reports
|
||||
reporter_ipv6 TEXT NOT NULL DEFAULT '', -- IPv6 (if exists) in string of player who reports (only needed for IPv6 server)
|
||||
reporter_online_id INTEGER UNSIGNED NOT NULL, -- Online id of player who reports, 0 for offline player
|
||||
reporter_username TEXT NOT NULL, -- Player name who reports
|
||||
reported_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, -- Time of reporting
|
||||
info TEXT NOT NULL, -- Report info by reporter
|
||||
reporting_ip INTEGER UNSIGNED NOT NULL, -- IP decimal of player being reported
|
||||
reporting_ipv6 TEXT NOT NULL DEFAULT '', -- IPv6 (if exists) in string of player who reports (only needed for IPv6 server)
|
||||
reporting_online_id INTEGER UNSIGNED NOT NULL, -- Online id of player being reported, 0 for offline player
|
||||
reporting_username TEXT NOT NULL -- Player name being reported
|
||||
);
|
||||
|
||||
CREATE TABLE ip_mapping
|
||||
(
|
||||
ip_start INTEGER UNSIGNED NOT NULL PRIMARY KEY UNIQUE, -- IP decimal start
|
||||
ip_end INTEGER UNSIGNED NOT NULL UNIQUE, -- IP decimal end
|
||||
latitude REAL NOT NULL, -- Latitude of this IP range
|
||||
longitude REAL NOT NULL, -- Longitude of this IP range
|
||||
country_code TEXT NOT NULL -- 2-letter country code
|
||||
) WITHOUT ROWID;
|
||||
|
||||
CREATE TABLE ipv6_mapping
|
||||
(
|
||||
ip_start INTEGER UNSIGNED NOT NULL PRIMARY KEY UNIQUE, -- IP decimal (upper 64bit) start
|
||||
ip_end INTEGER UNSIGNED NOT NULL UNIQUE, -- IP decimal (upper 64bit) end
|
||||
latitude REAL NOT NULL, -- Latitude of this IP range
|
||||
longitude REAL NOT NULL, -- Longitude of this IP range
|
||||
country_code TEXT NOT NULL -- 2-letter country code
|
||||
)
|
||||
```
|
||||
|
||||
For initialization of `ip_mapping` table, check [this script](tools/generate-ip-mappings.py).
|
26
README.cat
@ -1,26 +0,0 @@
|
||||
STK Cat Mod {Now with 100% more git repos!}
|
||||
|
||||
WARNING:
|
||||
I have changed enough by now that the game is getting a little unstable (random
|
||||
crashes, phasing through walls if going too fast), please use with caution (and
|
||||
if you find a bug, try and fix it if you can before reporting it).
|
||||
|
||||
What I've changed in the mod:
|
||||
|
||||
- You can have different default powerups (so, not POWERUP_NOTHING anymore),
|
||||
and the default powerup is now the zipper.
|
||||
|
||||
- You always have nitro.
|
||||
|
||||
- Using nitro gives you nitro, instead of taking it away (can help beating
|
||||
nitro collecting levels).
|
||||
|
||||
- Nitro engine force and mult are multiplied by 2.5 each.
|
||||
|
||||
- There is no more auto rescue, use backspace instead.
|
||||
|
||||
- The speed limit is practically removed (set to the highest float possible)
|
||||
|
||||
- The zipper powerup is VERY fast now, (x4) test it in the story mode level select level first.
|
||||
|
||||
- You can customize the zipper speed (karts/kart_properties.cpp, look for the `#define ZIPPER_SPEED`)
|
75
README.md
@ -1,42 +1,67 @@
|
||||
# SuperTuxKart
|
||||
[![Linux build status](https://github.com/supertuxkart/stk-code/actions/workflows/linux.yml/badge.svg)](https://github.com/supertuxkart/stk-code/actions/workflows/linux.yml)
|
||||
[![Apple build status](https://github.com/supertuxkart/stk-code/actions/workflows/apple.yml/badge.svg)](https://github.com/supertuxkart/stk-code/actions/workflows/apple.yml)
|
||||
[![Windows build status](https://github.com/supertuxkart/stk-code/actions/workflows/windows.yml/badge.svg)](https://github.com/supertuxkart/stk-code/actions/workflows/windows.yml)
|
||||
[![Switch build status](https://github.com/supertuxkart/stk-code/actions/workflows/switch.yml/badge.svg)](https://github.com/supertuxkart/stk-code/actions/workflows/switch.yml)
|
||||
[![#supertuxkart on the libera IRC network](https://img.shields.io/badge/libera-%23supertuxkart-brightgreen.svg)](https://web.libera.chat/?channels=#supertuxkart)
|
||||
[![Build Status](https://travis-ci.org/supertuxkart/stk-code.png?branch=master)](https://travis-ci.org/supertuxkart/stk-code)
|
||||
|
||||
# See [`README.cat`](README.cat)
|
||||
SuperTuxKart is a free kart racing game. It is focusing on fun and
|
||||
not on realistic kart physics. Instruction can be found on the
|
||||
in-game help page.
|
||||
|
||||
SuperTuxKart is a free kart racing game. It focuses on fun and not on realistic kart physics. Instructions can be found on the in-game help page.
|
||||
The SuperTuxKart homepage can be found at: <http://supertuxkart.sourceforge.net>
|
||||
|
||||
The SuperTuxKart homepage can be found at <https://supertuxkart.net/>. There is also our [FAQ](https://supertuxkart.net/FAQ) and information on how get in touch with the [community](https://supertuxkart.net/Community).
|
||||
The official SuperTuxKart forum is at <http://supertuxkart.sourceforge.net/forum>. If you need support,
|
||||
this would be the best place to start.
|
||||
|
||||
Hope you enjoy the game.
|
||||
|
||||
-- The SuperTuxKart development team.
|
||||
|
||||
Latest release binaries can be found [here](https://github.com/supertuxkart/stk-code/releases/latest), and preview release [here](https://github.com/supertuxkart/stk-code/releases/preview).
|
||||
|
||||
## Hardware Requirements
|
||||
To run SuperTuxKart, make sure that your computer's specifications are equal or higher than the following specifications:
|
||||
|
||||
* A graphics card capable of 3D rendering - NVIDIA GeForce 470 GTX, AMD Radeon 6870 HD series card or Intel HD Graphics 4000 and newer. OpenGL >= 3.3
|
||||
* You should have a dual-core CPU that's running at 1 GHz or faster.
|
||||
* You need a 3D graphics card. (NVIDIA GeForce 8xxx and higher, ATI Radeon HD 4xxx and higher or Intel HD 3000 and higher)
|
||||
* You should have a CPU that's running at 1GHz or better.
|
||||
* You'll need at least 512 MB of free VRAM (video memory).
|
||||
* System memory: 1 GB
|
||||
* Minimum disk space: 700 MB
|
||||
* Ideally, you'll want a joystick with at least 6 buttons.
|
||||
* Disk space: 400MB
|
||||
* Ideally, you want a joystick with at least 6 buttons.
|
||||
|
||||
|
||||
## Compiling SuperTuxKart
|
||||
|
||||
### Windows
|
||||
1. Install VS 2013 (or later). The free express versions work fine.
|
||||
2. Download and install a source package - either a released package or from our [git/svn repositories](http://supertuxkart.sourceforge.net/Source_control)
|
||||
3. Download the latest dependency package depdendencies_for_0.8.2.zip from [here](https://sourceforge.net/projects/supertuxkart/files/SuperTuxKart%20Dependencies/Windows/). Unzip it in the root directory, so that the dependencies directory is next to the src and data directory (if you are updating from a previous dependency package, you can delete the .dll files in the root directory, they are not needed anymore).
|
||||
4. Download cmake and install it. Then start cmake-gui and select the STK root directory as 'Where is the source code', and a new directory in the root directory (next to src, data etc) as build directory (for now I assume that this directory is called bld).
|
||||
5. Click on configure. You will be asked to create the directory (yes), then for your VS version. Make sure to select the right version (be aware of the easy to confuse version numbers: VS 2013 = version 12). Click on configure, then generate. This will create the directory 'bld', and a VS solution in that directory.
|
||||
6. In Visual Studio open the project file generated in the 'bld' folder
|
||||
7. Right click on the supertuxkart project in the solution explorer, and select "Set as StartUp Project".
|
||||
8. Select Build->Build Solution (or press F7) to compile.
|
||||
|
||||
Compilation with cygwin is not officially supported, but
|
||||
this has been done (check with the forum for details).
|
||||
|
||||
### Mac OS X
|
||||
The latest information about compilation on Mac are on our wiki:
|
||||
<http://supertuxkart.sourceforge.net/Building_and_packaging_on_OSX>
|
||||
The Xcode project file is in `/src/ide/Xcode/`, but it still
|
||||
requires that all dependencies are installed as explained on the wiki.
|
||||
|
||||
### UNIX
|
||||
See [`INSTALL.md`](INSTALL.md) for details.
|
||||
|
||||
|
||||
## License
|
||||
The software is released under the GNU General Public License (GPL) which can be found in the file [`COPYING`](COPYING) in the same directory as this file.
|
||||
This software is released under the GNU General Public License (GPL) which
|
||||
can be found in the file [`COPYING`](/COPYING) in the same directory as this file.
|
||||
Information about the licenses for artwork are contained in
|
||||
`data/licenses`.
|
||||
|
||||
---
|
||||
|
||||
## 3D coordinates
|
||||
A reminder for those who are looking at the code and 3D models:
|
||||
A reminder for those looking at the code and 3d models:
|
||||
|
||||
SuperTuxKart: X right, Y up, Z forwards
|
||||
STK : X right, Y up, Z forwards
|
||||
|
||||
Blender: X right, Y forwards, Z up
|
||||
|
||||
The export utilities perform the needed transformation, so in Blender you just work with the XY plane as ground, and things will appear fine in STK (using XZ as ground in the code, obviously).
|
||||
|
||||
## Building from source
|
||||
|
||||
Building instructions can be found in [`INSTALL.md`](INSTALL.md)
|
||||
The exporters perform the needed transform, so in Blender you just work
|
||||
with XY plane as ground, and things will appear fine in STK (using XZ
|
||||
as ground in the code, obviously).
|
||||
|
34
SVN-CONFIG
Normal file
@ -0,0 +1,34 @@
|
||||
# Please, make sure your SVN client uses something that matches the
|
||||
# following config. Specially the autoprops part, that way new files
|
||||
# will be added with the right settings. Default config for command line
|
||||
# svn is in ~/.subversion/config. If you use SVN for multiple projects
|
||||
# simultaneously, remember you can use different configs, at least in
|
||||
# cmd line (via --config-dir and for example ~/.subversion/supertuxkart/
|
||||
# with a new config file inside).
|
||||
|
||||
[miscellany]
|
||||
global-ignores = *.o *.lo *.la #*# .*.rej *.rej .*~ *~ .#* ._* .DS_Store *.blend1 *.blend2
|
||||
enable-auto-props = yes
|
||||
|
||||
[auto-props]
|
||||
*.c = svn:eol-style=native;svn:keywords=Author Date Id Revision
|
||||
*.cpp = svn:eol-style=native;svn:keywords=Author Date Id Revision
|
||||
*.h = svn:eol-style=native;svn:keywords=Author Date Id Revision
|
||||
*.hpp = svn:eol-style=native;svn:keywords=Author Date Id Revision
|
||||
*.dsp = svn:eol-style=CRLF
|
||||
*.dsw = svn:eol-style=CRLF
|
||||
*.sh = svn:eol-style=native;svn:executable;svn:keywords=Author Date Id Revision
|
||||
*.txt = svn:eol-style=native
|
||||
*.png = svn:mime-type=image/png
|
||||
*.jpg = svn:mime-type=image/jpeg
|
||||
Makefile = svn:eol-style=native;svn:keywords=Author Date Id Revision
|
||||
*.jpeg = svn:mime-type=image/jpeg
|
||||
*.gif = svn:mime-type=image/gif
|
||||
*.svg = svn:mime-type=image/svg+xml
|
||||
*.htm = svn:mime-type=text/html
|
||||
*.html = svn:mime-type=text/html
|
||||
*.css = svn:mime-type=text/css
|
||||
*.pdf = svn:mime-type=application/pdf
|
||||
SConstruct = svn:eol-style=native;svn:keywords=Author Date Id Revision
|
||||
*.xml = svn:eol-style=LF;svn:mime-type=text/xml
|
||||
*.py = svn:eol-style=native;svn:keywords=Author Date Id Revision
|
33
TODO.md
Normal file
@ -0,0 +1,33 @@
|
||||
##TODO
|
||||
|
||||
SuperTuxKart is looking for additional man power to make this
|
||||
one of the best free linux games out there :) We need (in
|
||||
no particular order):
|
||||
|
||||
1. Musicians/sound engineers
|
||||
- Create additional background soundtrack
|
||||
- Create sound effects
|
||||
2. Artists and track designer
|
||||
- Create additional tracks
|
||||
- Create additional art work for tracks,
|
||||
background images
|
||||
3. Developers
|
||||
- Check our bug and enhancement request tracker on
|
||||
https://github.com/supertuxkart/stk-code/issues
|
||||
- Extend the current web page, keep it up to date
|
||||
4. Tester
|
||||
- For just about everything
|
||||
- Esp. different platforms and graphics cards
|
||||
5. Writers
|
||||
- Write documentation, ranging from man page, to
|
||||
a description for the web, to a design document, ...
|
||||
|
||||
If you want to help the SuperTuxKart - Project, please
|
||||
contact us on the email list: [supertuxkart-devel@lists.sourceforge.net](mailto:supertuxkart-devel@lists.sourceforge.net)
|
||||
|
||||
Thanks in advance!
|
||||
|
||||
-- The SuperTuxKart-Team
|
||||
|
||||
|
||||
For details, see <http://supertuxkart.sourceforge.net/Get_involved>
|
@ -1,379 +0,0 @@
|
||||
LOCAL_PATH := $(call my-dir)
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
|
||||
# OpenAL
|
||||
LOCAL_MODULE := openal
|
||||
LOCAL_SRC_FILES := deps-$(TARGET_ARCH_ABI)/openal/libopenal.a
|
||||
include $(PREBUILT_STATIC_LIBRARY)
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
|
||||
# OGG
|
||||
LOCAL_MODULE := ogg
|
||||
LOCAL_SRC_FILES := deps-$(TARGET_ARCH_ABI)/libogg/libogg.a
|
||||
include $(PREBUILT_STATIC_LIBRARY)
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
|
||||
# Vorbis
|
||||
LOCAL_MODULE := vorbis
|
||||
LOCAL_SRC_FILES := deps-$(TARGET_ARCH_ABI)/libvorbis/lib/libvorbis.a
|
||||
include $(PREBUILT_STATIC_LIBRARY)
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
|
||||
# Vorbisfile
|
||||
LOCAL_MODULE := vorbisfile
|
||||
LOCAL_SRC_FILES := deps-$(TARGET_ARCH_ABI)/libvorbis/lib/libvorbisfile.a
|
||||
include $(PREBUILT_STATIC_LIBRARY)
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
|
||||
# CURL
|
||||
LOCAL_MODULE := curl
|
||||
LOCAL_SRC_FILES := deps-$(TARGET_ARCH_ABI)/curl/lib/libcurl.a
|
||||
include $(PREBUILT_STATIC_LIBRARY)
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
|
||||
# libmbedtls
|
||||
LOCAL_MODULE := libmbedtls
|
||||
LOCAL_SRC_FILES := deps-$(TARGET_ARCH_ABI)/mbedtls/library/libmbedtls.a
|
||||
include $(PREBUILT_STATIC_LIBRARY)
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
|
||||
# libmbedcrypto
|
||||
LOCAL_MODULE := libmbedcrypto
|
||||
LOCAL_SRC_FILES := deps-$(TARGET_ARCH_ABI)/mbedtls/library/libmbedcrypto.a
|
||||
include $(PREBUILT_STATIC_LIBRARY)
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
|
||||
# libmbedx509
|
||||
LOCAL_MODULE := libmbedx509
|
||||
LOCAL_SRC_FILES := deps-$(TARGET_ARCH_ABI)/mbedtls/library/libmbedx509.a
|
||||
include $(PREBUILT_STATIC_LIBRARY)
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
|
||||
# JPEG
|
||||
LOCAL_MODULE := libjpeg
|
||||
LOCAL_SRC_FILES := deps-$(TARGET_ARCH_ABI)/libjpeg/libjpeg.a
|
||||
include $(PREBUILT_STATIC_LIBRARY)
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
|
||||
# zlib
|
||||
LOCAL_MODULE := zlib
|
||||
LOCAL_SRC_FILES := deps-$(TARGET_ARCH_ABI)/zlib/libz.a
|
||||
include $(PREBUILT_STATIC_LIBRARY)
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
|
||||
# PNG
|
||||
LOCAL_MODULE := png
|
||||
LOCAL_SRC_FILES := deps-$(TARGET_ARCH_ABI)/libpng/libpng.a
|
||||
include $(PREBUILT_STATIC_LIBRARY)
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
|
||||
# Freetype
|
||||
LOCAL_MODULE := freetype
|
||||
LOCAL_SRC_FILES := deps-$(TARGET_ARCH_ABI)/freetype/build/libfreetype.a
|
||||
include $(PREBUILT_STATIC_LIBRARY)
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
|
||||
# Harfbuzz
|
||||
LOCAL_MODULE := harfbuzz
|
||||
LOCAL_SRC_FILES := deps-$(TARGET_ARCH_ABI)/harfbuzz/build/libharfbuzz.a
|
||||
include $(PREBUILT_STATIC_LIBRARY)
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
|
||||
# shaderc
|
||||
LOCAL_MODULE := shaderc
|
||||
LOCAL_SRC_FILES := deps-$(TARGET_ARCH_ABI)/shaderc/libshaderc/libshaderc_combined.a
|
||||
include $(PREBUILT_STATIC_LIBRARY)
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
|
||||
# libsquish
|
||||
LOCAL_MODULE := libsquish
|
||||
LOCAL_SRC_FILES := deps-$(TARGET_ARCH_ABI)/libsquish/libsquish.a
|
||||
include $(PREBUILT_STATIC_LIBRARY)
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
|
||||
# astc-encoder
|
||||
LOCAL_MODULE := libastcenc
|
||||
LOCAL_SRC_FILES := deps-$(TARGET_ARCH_ABI)/astc-encoder/Source/libastcenc.a
|
||||
include $(PREBUILT_STATIC_LIBRARY)
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
|
||||
# ifaddrs
|
||||
LOCAL_MODULE := ifaddrs
|
||||
LOCAL_PATH := .
|
||||
LOCAL_SRC_FILES := ../lib/ifaddrs/ifaddrs.c
|
||||
LOCAL_CFLAGS := -I../lib/ifaddrs
|
||||
# Starting NDK21 it enables NEON by default on 32-bit ARM target
|
||||
# Disable it to support more phones
|
||||
ifeq ($(TARGET_ARCH_ABI), armeabi-v7a)
|
||||
LOCAL_ARM_NEON := false
|
||||
endif
|
||||
include $(BUILD_STATIC_LIBRARY)
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
|
||||
# AngelScript
|
||||
LOCAL_MODULE := angelscript
|
||||
LOCAL_PATH := .
|
||||
LOCAL_CPP_FEATURES += rtti exceptions
|
||||
LOCAL_SRC_FILES := $(wildcard ../lib/angelscript/source/*.S) \
|
||||
$(wildcard ../lib/angelscript/source/*.cpp)
|
||||
LOCAL_CFLAGS := -I../lib/angelscript/source/
|
||||
ifeq ($(TARGET_ARCH_ABI), armeabi-v7a)
|
||||
LOCAL_ARM_NEON := false
|
||||
endif
|
||||
include $(BUILD_STATIC_LIBRARY)
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
|
||||
# ENET
|
||||
LOCAL_MODULE := enet
|
||||
LOCAL_PATH := .
|
||||
LOCAL_CPP_FEATURES += rtti
|
||||
LOCAL_SRC_FILES := $(wildcard ../lib/enet/*.c)
|
||||
LOCAL_CFLAGS := -I../lib/enet/include/ -DHAS_SOCKLEN_T -DENABLE_IPV6
|
||||
ifeq ($(TARGET_ARCH_ABI), armeabi-v7a)
|
||||
LOCAL_ARM_NEON := false
|
||||
endif
|
||||
include $(BUILD_STATIC_LIBRARY)
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
|
||||
# Bullet
|
||||
LOCAL_MODULE := bullet
|
||||
LOCAL_PATH := .
|
||||
LOCAL_CPP_FEATURES += rtti
|
||||
LOCAL_SRC_FILES := $(wildcard ../lib/bullet/src/*/*.cpp) \
|
||||
$(wildcard ../lib/bullet/src/*/*/*.cpp)
|
||||
LOCAL_CFLAGS := -I../lib/bullet/src/
|
||||
ifeq ($(TARGET_ARCH_ABI), armeabi-v7a)
|
||||
LOCAL_ARM_NEON := false
|
||||
endif
|
||||
include $(BUILD_STATIC_LIBRARY)
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
|
||||
# Graphics utils
|
||||
LOCAL_MODULE := graphics_utils
|
||||
LOCAL_PATH := .
|
||||
LOCAL_CPP_FEATURES += rtti
|
||||
LOCAL_SRC_FILES := $(wildcard ../lib/graphics_utils/mipmap/*.c)
|
||||
LOCAL_CFLAGS := -I../lib/graphics_utils/mipmap \
|
||||
-I../lib/simd_wrapper
|
||||
ifeq ($(TARGET_ARCH_ABI), armeabi-v7a)
|
||||
LOCAL_ARM_NEON := false
|
||||
endif
|
||||
include $(BUILD_STATIC_LIBRARY)
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
|
||||
# Graphics engine
|
||||
LOCAL_MODULE := graphics_engine
|
||||
LOCAL_PATH := .
|
||||
LOCAL_CPP_FEATURES += rtti exceptions
|
||||
LOCAL_SRC_FILES := $(wildcard ../lib/graphics_engine/src/*.c) \
|
||||
$(wildcard ../lib/graphics_engine/src/*.cpp)
|
||||
LOCAL_CFLAGS := -DENABLE_LIBASTCENC \
|
||||
-I../lib/graphics_engine/include \
|
||||
-I../lib/graphics_utils \
|
||||
-I../lib/sdl2/include/ \
|
||||
-I../lib/bullet/src/ \
|
||||
-I../lib/irrlicht/include/ \
|
||||
-I../lib/shaderc/libshaderc/include \
|
||||
-I../lib/libsquish \
|
||||
-Ideps-$(TARGET_ARCH_ABI)/astc-encoder/Source
|
||||
ifeq ($(TARGET_ARCH_ABI), armeabi-v7a)
|
||||
LOCAL_ARM_NEON := false
|
||||
endif
|
||||
LOCAL_STATIC_LIBRARIES := shaderc libsquish libastcenc
|
||||
include $(BUILD_STATIC_LIBRARY)
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
|
||||
# MCPP
|
||||
LOCAL_MODULE := mcpp
|
||||
LOCAL_PATH := .
|
||||
LOCAL_CPP_FEATURES += rtti
|
||||
LOCAL_SRC_FILES := $(wildcard ../lib/mcpp/*.c)
|
||||
LOCAL_CFLAGS := -DMCPP_LIB -DHAVE_CONFIG_H
|
||||
ifeq ($(TARGET_ARCH_ABI), armeabi-v7a)
|
||||
LOCAL_ARM_NEON := false
|
||||
endif
|
||||
include $(BUILD_STATIC_LIBRARY)
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
|
||||
# SheenBidi
|
||||
LOCAL_MODULE := sheenbidi
|
||||
LOCAL_PATH := .
|
||||
LOCAL_CPP_FEATURES += rtti
|
||||
LOCAL_SRC_FILES := $(wildcard ../lib/sheenbidi/Source/*.c)
|
||||
LOCAL_CFLAGS := -I../lib/sheenbidi/Headers
|
||||
ifeq ($(TARGET_ARCH_ABI), armeabi-v7a)
|
||||
LOCAL_ARM_NEON := false
|
||||
endif
|
||||
include $(BUILD_STATIC_LIBRARY)
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
|
||||
# tinygettext
|
||||
LOCAL_MODULE := tinygettext
|
||||
LOCAL_PATH := .
|
||||
LOCAL_CPP_FEATURES += rtti exceptions
|
||||
LOCAL_SRC_FILES := $(wildcard ../lib/tinygettext/src/*.cpp)
|
||||
LOCAL_CFLAGS := -I../lib/tinygettext/include -DDISABLE_ICONV
|
||||
ifeq ($(TARGET_ARCH_ABI), armeabi-v7a)
|
||||
LOCAL_ARM_NEON := false
|
||||
endif
|
||||
include $(BUILD_STATIC_LIBRARY)
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
|
||||
# Irrlicht
|
||||
LOCAL_MODULE := irrlicht
|
||||
LOCAL_PATH := .
|
||||
LOCAL_CPP_FEATURES += rtti exceptions
|
||||
LOCAL_SRC_FILES := $(wildcard ../lib/irrlicht/source/Irrlicht/*.cpp)
|
||||
LOCAL_CFLAGS := -I../lib/irrlicht/source/Irrlicht/ \
|
||||
-I../lib/irrlicht/include/ \
|
||||
-I../src \
|
||||
-Ideps-$(TARGET_ARCH_ABI)/libjpeg/ \
|
||||
-Ideps-$(TARGET_ARCH_ABI)/libpng/ \
|
||||
-Ideps-$(TARGET_ARCH_ABI)/zlib/ \
|
||||
-I../lib/sdl2/include/ \
|
||||
-I../lib/graphics_engine/include \
|
||||
-DMOBILE_STK \
|
||||
-DANDROID_PACKAGE_CALLBACK_NAME=$(PACKAGE_CALLBACK_NAME)
|
||||
LOCAL_CPPFLAGS := -std=gnu++0x
|
||||
LOCAL_STATIC_LIBRARIES := libjpeg png zlib
|
||||
ifeq ($(TARGET_ARCH_ABI), armeabi-v7a)
|
||||
LOCAL_ARM_NEON := false
|
||||
endif
|
||||
include $(BUILD_STATIC_LIBRARY)
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
|
||||
# SDL2
|
||||
LOCAL_MODULE := SDL2
|
||||
LOCAL_PATH := .
|
||||
LOCAL_SRC_FILES := $(wildcard ../lib/sdl2/src/*.c) \
|
||||
$(wildcard ../lib/sdl2/src/audio/*.c) \
|
||||
$(wildcard ../lib/sdl2/src/audio/android/*.c) \
|
||||
$(wildcard ../lib/sdl2/src/audio/dummy/*.c) \
|
||||
$(wildcard ../lib/sdl2/src/audio/aaudio/*.c) \
|
||||
$(wildcard ../lib/sdl2/src/audio/openslES/*.c) \
|
||||
../lib/sdl2/src/atomic/SDL_atomic.c.arm \
|
||||
../lib/sdl2/src/atomic/SDL_spinlock.c.arm \
|
||||
$(wildcard ../lib/sdl2/src/core/android/*.c) \
|
||||
$(wildcard ../lib/sdl2/src/cpuinfo/*.c) \
|
||||
$(wildcard ../lib/sdl2/src/dynapi/*.c) \
|
||||
$(wildcard ../lib/sdl2/src/events/*.c) \
|
||||
$(wildcard ../lib/sdl2/src/file/*.c) \
|
||||
$(wildcard ../lib/sdl2/src/haptic/*.c) \
|
||||
$(wildcard ../lib/sdl2/src/haptic/android/*.c) \
|
||||
$(wildcard ../lib/sdl2/src/hidapi/*.c) \
|
||||
$(wildcard ../lib/sdl2/src/hidapi/android/*.cpp) \
|
||||
$(wildcard ../lib/sdl2/src/joystick/*.c) \
|
||||
$(wildcard ../lib/sdl2/src/joystick/android/*.c) \
|
||||
$(wildcard ../lib/sdl2/src/joystick/hidapi/*.c) \
|
||||
$(wildcard ../lib/sdl2/src/joystick/virtual/*.c) \
|
||||
$(wildcard ../lib/sdl2/src/loadso/dlopen/*.c) \
|
||||
$(wildcard ../lib/sdl2/src/locale/android/*.c) \
|
||||
$(wildcard ../lib/sdl2/src/locale/*.c) \
|
||||
$(wildcard ../lib/sdl2/src/misc/*.c) \
|
||||
$(wildcard ../lib/sdl2/src/misc/android/*.c) \
|
||||
$(wildcard ../lib/sdl2/src/power/*.c) \
|
||||
$(wildcard ../lib/sdl2/src/power/android/*.c) \
|
||||
$(wildcard ../lib/sdl2/src/filesystem/android/*.c) \
|
||||
$(wildcard ../lib/sdl2/src/sensor/*.c) \
|
||||
$(wildcard ../lib/sdl2/src/sensor/android/*.c) \
|
||||
$(wildcard ../lib/sdl2/src/render/*.c) \
|
||||
$(wildcard ../lib/sdl2/src/render/*/*.c) \
|
||||
$(wildcard ../lib/sdl2/src/stdlib/*.c) \
|
||||
$(wildcard ../lib/sdl2/src/thread/*.c) \
|
||||
$(wildcard ../lib/sdl2/src/thread/pthread/*.c) \
|
||||
$(wildcard ../lib/sdl2/src/timer/*.c) \
|
||||
$(wildcard ../lib/sdl2/src/timer/unix/*.c) \
|
||||
$(wildcard ../lib/sdl2/src/video/*.c) \
|
||||
$(wildcard ../lib/sdl2/src/video/android/*.c) \
|
||||
$(wildcard ../lib/sdl2/src/video/yuv2rgb/*.c)
|
||||
LOCAL_CFLAGS := -I../lib/sdl2/include/ -DGL_GLEXT_PROTOTYPES
|
||||
LOCAL_LDLIBS := -ldl -lGLESv1_CM -lGLESv2 -lOpenSLES -llog -landroid
|
||||
LOCAL_STATIC_LIBRARIES := cpufeatures
|
||||
|
||||
ifeq ($(TARGET_ARCH_ABI), armeabi-v7a)
|
||||
LOCAL_ARM_NEON := false
|
||||
endif
|
||||
include $(BUILD_SHARED_LIBRARY)
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
# STK
|
||||
LOCAL_MODULE := main
|
||||
LOCAL_PATH := .
|
||||
LOCAL_CPP_FEATURES += rtti exceptions
|
||||
LOCAL_SRC_FILES := $(wildcard ../src/*.cpp) \
|
||||
$(wildcard ../src/*/*.cpp) \
|
||||
$(wildcard ../src/*/*/*.cpp)
|
||||
LOCAL_LDLIBS := -llog -lm -lOpenSLES
|
||||
LOCAL_CFLAGS := -I../lib/angelscript/include \
|
||||
-I../lib/bullet/src \
|
||||
-I../lib/sheenbidi/Headers \
|
||||
-I../lib/enet/include \
|
||||
-I../lib/ifaddrs \
|
||||
-I../lib/irrlicht/include \
|
||||
-I../lib/irrlicht/source/Irrlicht \
|
||||
-I../lib/graphics_utils \
|
||||
-I../lib/graphics_engine/include \
|
||||
-I../lib/mcpp \
|
||||
-I../lib/sdl2/include \
|
||||
-I../lib/tinygettext/include \
|
||||
-I../lib/libsquish \
|
||||
-I../src \
|
||||
-Ideps-$(TARGET_ARCH_ABI)/curl/include \
|
||||
-Ideps-$(TARGET_ARCH_ABI)/freetype/include \
|
||||
-Ideps-$(TARGET_ARCH_ABI)/harfbuzz/include \
|
||||
-Ideps-$(TARGET_ARCH_ABI)/libogg/include \
|
||||
-Ideps-$(TARGET_ARCH_ABI)/libvorbis/include \
|
||||
-Ideps-$(TARGET_ARCH_ABI)/openal/include \
|
||||
-Ideps-$(TARGET_ARCH_ABI)/mbedtls/include \
|
||||
-DUSE_GLES2 \
|
||||
-DMOBILE_STK \
|
||||
-DENABLE_SOUND \
|
||||
-DENABLE_IPV6 \
|
||||
-DENABLE_CRYPTO_MBEDTLS \
|
||||
-DNDEBUG \
|
||||
-DDISABLE_ICONV \
|
||||
-DANDROID_PACKAGE_NAME=\"$(PACKAGE_NAME)\" \
|
||||
-DANDROID_APP_DIR_NAME=\"$(APP_DIR_NAME)\" \
|
||||
-DSUPERTUXKART_VERSION=\"$(PROJECT_VERSION)\" \
|
||||
-DANDROID_PACKAGE_CLASS_NAME=\"$(PACKAGE_CLASS_NAME)\"
|
||||
LOCAL_CPPFLAGS := -std=gnu++0x
|
||||
|
||||
LOCAL_STATIC_LIBRARIES := irrlicht bullet enet ifaddrs angelscript mcpp SDL2 \
|
||||
vorbisfile vorbis ogg openal curl libmbedtls \
|
||||
libmbedcrypto libmbedx509 c++_static sheenbidi \
|
||||
harfbuzz freetype tinygettext graphics_utils \
|
||||
graphics_engine
|
||||
|
||||
ifeq ($(TARGET_ARCH_ABI), armeabi-v7a)
|
||||
LOCAL_ARM_NEON := false
|
||||
endif
|
||||
include $(BUILD_SHARED_LIBRARY)
|
||||
include $(CLEAR_VARS)
|
||||
$(call import-module, android/cpufeatures)
|
@ -1,67 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:installLocation="auto">
|
||||
|
||||
<application android:label="@string/app_name"
|
||||
android:icon="@drawable/icon"
|
||||
android:banner="@drawable/banner"
|
||||
android:hasCode="true"
|
||||
android:isGame="true"
|
||||
android:theme="@style/Theme.STKSplashScreen"
|
||||
android:hardwareAccelerated="true"
|
||||
android:resizeableActivity="true">
|
||||
|
||||
<activity android:name=".SuperTuxKartActivity"
|
||||
android:label="@string/app_name"
|
||||
android:launchMode="singleTask"
|
||||
android:configChanges="fontScale|keyboard|keyboardHidden|locale|mcc|mnc|navigation|orientation|screenLayout|screenSize|uiMode"
|
||||
android:screenOrientation="sensorLandscape"
|
||||
android:exported="true">
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
<category android:name="android.intent.category.LEANBACK_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>
|
||||
</activity>
|
||||
</application>
|
||||
|
||||
<uses-feature android:glEsVersion="0x00020000" />
|
||||
<uses-feature android:name="android.software.leanback" android:required="false" />
|
||||
<uses-feature android:name="android.software.input_methods" android:required="false" />
|
||||
|
||||
<!-- 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" />
|
||||
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
|
||||
<!-- Allow writing to external storage -->
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
<!-- Allow access to Bluetooth devices -->
|
||||
<uses-permission android:name="android.permission.BLUETOOTH" />
|
||||
<!-- Allow access to the vibrator -->
|
||||
<uses-permission android:name="android.permission.VIBRATE" />
|
||||
</manifest>
|
@ -1,166 +0,0 @@
|
||||
================================================================================
|
||||
|
||||
SUPERTUXKART
|
||||
|
||||
================================================================================
|
||||
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
SYSTEM REQUIREMENTS
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
To run SuperTuxKart on Android, you need a device that meets following
|
||||
requirements:
|
||||
|
||||
- Android 4.1 or later
|
||||
- Processor compatible with armv7 or x86
|
||||
- GPU that supports OpenGL ES 2.0
|
||||
- 1 GB RAM (STK uses ~150 MB in minimal configuration)
|
||||
- 300 MB of free space on internal storage
|
||||
- Touch screen or external keyboard
|
||||
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
COMPILATION
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
The build scripts are designed to run under linux. They may work under cygwin
|
||||
after some tweaks, but atm. only linux is supported.
|
||||
|
||||
Dependencies list (may be incomplete):
|
||||
|
||||
autoconf, automake, make, python, gradle, imagemagick, cmake,
|
||||
vorbis-tools, pngquant
|
||||
|
||||
Additionally some dependencies for optimize_data script:
|
||||
|
||||
advancecomp, libjpeg-progs, optipng
|
||||
|
||||
Before compilation you must download dependencies-android-src.tar.xz from:
|
||||
https://github.com/supertuxkart/dependencies/releases
|
||||
Choose the corresponding STK version you are compiling, use "preview" for git.
|
||||
It contains sources of libraries that are used in STK, but are not available
|
||||
in stk-code repository (curl, freetype, openal...).
|
||||
|
||||
These libraries are compiled and then statically linked with STK by the Android
|
||||
build script.
|
||||
|
||||
You need to extract that packed file to stk-code/lib directory, so that the
|
||||
directory will have following structure:
|
||||
> stk-code
|
||||
> build
|
||||
> data
|
||||
> lib
|
||||
> angelscript
|
||||
> bullet
|
||||
> curl
|
||||
> enet
|
||||
> freetype
|
||||
> ...
|
||||
> src
|
||||
> ...
|
||||
|
||||
You also need Android SDK for android-26 platform or later (SDL2 requirement) and
|
||||
Android NDK. Version r23 is recommended, because it's known that it works
|
||||
without issues. r24 or later is not compatible because it removes Android 4.1
|
||||
support (https://github.com/android/ndk/wiki/Changelog-r23#announcements)
|
||||
|
||||
You need to create proper "android-sdk" and "android-ndk" symlinks in the
|
||||
directory with Android project, so that the compilation script will have access
|
||||
to the SDK and NDK.
|
||||
|
||||
Before running the compilation, run the generate_assets script, so that
|
||||
selected assets will be copied to "assets" directory, and then included in the
|
||||
apk file.
|
||||
|
||||
You can select different karts and tracks by setting KARTS and TRACKS variables
|
||||
in the generate_assets.sh script at the beginning of file.
|
||||
|
||||
When you are creating the assets directory manually, note that the
|
||||
directories.txt file is urgently needed and it is used by the application for
|
||||
extracting assets.
|
||||
|
||||
If the assets directory is already prepared, you can run "./make.sh" command to
|
||||
build the project and create an apk file. Note that all arguments are passed to
|
||||
the make command, so that you can run "./make.sh -j5" for multi-threaded build.
|
||||
|
||||
Basically if all dependencies are installed in the system, it should be enough
|
||||
to just run:
|
||||
|
||||
export SDK_PATH=/path/to/your/android/sdk
|
||||
export NDK_PATH=/path/to/your/android/ndk
|
||||
# Optional for STK_MIN_ANDROID_SDK, STK_TARGET_ANDROID_SDK and STK_NDK_VERSION
|
||||
# If unset it will use the below values
|
||||
export STK_MIN_ANDROID_SDK=16
|
||||
export STK_TARGET_ANDROID_SDK=30
|
||||
export STK_NDK_VERSION=23.1.7779620
|
||||
./generate_assets.sh
|
||||
./make_deps.sh
|
||||
./make.sh
|
||||
|
||||
You may need to add org.gradle.jvmargs=-XX:MaxHeapSize=2048m -Xmx2048m to
|
||||
.gradle/gradle.properties if you see java.lang.OutOfMemoryError / Java heap
|
||||
space execption error.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
ENVIRONMENT VARIABLES
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
COMPILE_ARCH - Allows one to choose CPU architecture for which the package will
|
||||
be compiled.
|
||||
Possible values: all, armv7, aarch64, x86, x86_64.
|
||||
Default is: all.
|
||||
|
||||
BUILD_TYPE - Allows one to set build type.
|
||||
Possible values: debug, release, beta.
|
||||
Default is: debug.
|
||||
|
||||
BUILD_TOOLS_VER - Allows to override the SDK build-tools version.
|
||||
|
||||
SDK_PATH - Path to SDK directory
|
||||
|
||||
NDK_PATH - Path to NDK directory, it should include a list of installed
|
||||
NDK version folders
|
||||
|
||||
PROJECT_VERSION - Set Supertuxkart version number, for example "0.9.3" or
|
||||
"git20170409" or whatever. The version must match with file
|
||||
assets/data/supertuxkart.$PROJECT_VERSION
|
||||
and that file must exist, because it is used for extracting
|
||||
and loading game data.
|
||||
Default is: git.
|
||||
|
||||
PROJECT_CODE - Set Supertuxkart version code that is used in the manifest
|
||||
file.
|
||||
Default is: 1.
|
||||
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
RELEASE BUILD
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
Making a release build is similar to typical compilation, but there are few
|
||||
additional things to do.
|
||||
|
||||
You have to set PROJECT_VERSION variable. This is important, because assets
|
||||
manager in STK checks that value and detects if already extracted data files are
|
||||
up to date. So that when you will install new STK version, this will force new
|
||||
data extraction automatically.
|
||||
|
||||
The PROJECT_CODE variable typically should be set to a value higher than for
|
||||
previous release, so that users will receive the upgrade.
|
||||
|
||||
Before compilation you have to set:
|
||||
|
||||
export BUILD_TYPE=release
|
||||
|
||||
It's also needed to set STK_STOREPASS, STK_KEYSTORE and STK_ALIAS environment
|
||||
variables, so that the apk files can be signed.
|
||||
|
||||
and then you make standard compilation with:
|
||||
|
||||
./generate_assets.sh
|
||||
./make_deps.sh
|
||||
./make.sh
|
Before Width: | Height: | Size: 28 KiB |
@ -1,157 +0,0 @@
|
||||
buildscript
|
||||
{
|
||||
repositories
|
||||
{
|
||||
mavenCentral()
|
||||
google()
|
||||
}
|
||||
|
||||
dependencies
|
||||
{
|
||||
// 4.1.2 is the minimum version to support native debug symbols file
|
||||
// https://developer.android.com/studio/build/shrink-code#android_gradle_plugin_version_41_or_later
|
||||
// 7.0.0 to fix https://stackoverflow.com/questions/68387270/android-studio-error-installed-build-tools-revision-31-0-0-is-corrupted
|
||||
classpath 'com.android.tools.build:gradle:8.2.1'
|
||||
}
|
||||
}
|
||||
|
||||
allprojects
|
||||
{
|
||||
repositories
|
||||
{
|
||||
mavenCentral()
|
||||
google()
|
||||
}
|
||||
}
|
||||
|
||||
apply plugin: 'com.android.application'
|
||||
|
||||
android
|
||||
{
|
||||
// Setting the namespace via a source AndroidManifest.xml's package attribute is deprecated.
|
||||
namespace project.getProperty('package_name')
|
||||
// buildToolsVersion is no longer needed https://developer.android.com/studio/releases/gradle-plugin.html#behavior_changes_1
|
||||
// Quote:
|
||||
// Build Tools 27.0.3 or higher. Keep in mind, you no longer need to specify a version for the build tools using the android.buildToolsVersion property—the plugin uses the minimum required version by default.
|
||||
compileSdkVersion compile_sdk_version.toInteger()
|
||||
ndkVersion ndk_version
|
||||
externalNativeBuild
|
||||
{
|
||||
ndkBuild
|
||||
{
|
||||
path 'Android.mk'
|
||||
}
|
||||
}
|
||||
|
||||
defaultConfig
|
||||
{
|
||||
versionCode project.getProperty('version_code').toInteger()
|
||||
versionName project.getProperty('version_name')
|
||||
minSdkVersion min_sdk_version.toInteger()
|
||||
targetSdkVersion target_sdk_version.toInteger()
|
||||
externalNativeBuild
|
||||
{
|
||||
ndkBuild
|
||||
{
|
||||
def app_platform = "APP_PLATFORM=android-${min_sdk_version}"
|
||||
arguments app_platform, 'APP_STL=c++_static', cpu_core
|
||||
if (project.getProperty('compile_arch') == 'all')
|
||||
{
|
||||
abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
|
||||
}
|
||||
else
|
||||
{
|
||||
abiFilters project.getProperty('compile_arch')
|
||||
}
|
||||
}
|
||||
}
|
||||
def runTasks = gradle.startParameter.taskNames
|
||||
if ('bundleRelease' in runTasks)
|
||||
{
|
||||
// use SYMBOL_TABLE if too large later (max limit on google play is 300MB)
|
||||
ndk.debugSymbolLevel 'FULL'
|
||||
}
|
||||
}
|
||||
|
||||
signingConfigs
|
||||
{
|
||||
release
|
||||
{
|
||||
storeFile file(keystore)
|
||||
storePassword storepass
|
||||
keyAlias alias
|
||||
keyPassword storepass
|
||||
}
|
||||
}
|
||||
|
||||
buildTypes
|
||||
{
|
||||
debug
|
||||
{
|
||||
debuggable true
|
||||
jniDebuggable true
|
||||
minifyEnabled false
|
||||
shrinkResources false
|
||||
multiDexEnabled true
|
||||
externalNativeBuild
|
||||
{
|
||||
ndkBuild
|
||||
{
|
||||
arguments 'NDK_DEBUG=1'
|
||||
cFlags '-O0'
|
||||
cppFlags '-O0'
|
||||
}
|
||||
}
|
||||
ndk
|
||||
{
|
||||
if (project.getProperty('compile_arch') == 'all')
|
||||
{
|
||||
abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
|
||||
}
|
||||
else
|
||||
{
|
||||
abiFilters project.getProperty('compile_arch')
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
release
|
||||
{
|
||||
externalNativeBuild
|
||||
{
|
||||
ndkBuild
|
||||
{
|
||||
cFlags '-O3'
|
||||
cppFlags '-O3'
|
||||
}
|
||||
}
|
||||
signingConfig signingConfigs.release
|
||||
ndk
|
||||
{
|
||||
if (project.getProperty('compile_arch') == 'all')
|
||||
{
|
||||
abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
|
||||
}
|
||||
else
|
||||
{
|
||||
abiFilters project.getProperty('compile_arch')
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sourceSets
|
||||
{
|
||||
main
|
||||
{
|
||||
manifest.srcFile 'AndroidManifest.xml'
|
||||
res.srcDirs = ['res']
|
||||
assets.srcDirs = ['assets']
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependencies
|
||||
{
|
||||
implementation 'org.minidns:minidns-hla:0.3.3'
|
||||
}
|
@ -1,698 +0,0 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# (C) 2016-2017 Dawid Gan, under the GPLv3
|
||||
#
|
||||
# A script that generates data files for Android apk
|
||||
|
||||
|
||||
# Below you can find some simple configuration variables.
|
||||
# It's allowed to set "all" for KARTS and TRACKS if it's intended to create
|
||||
# package with full data.
|
||||
# The karts and tracks directories shouldn't exist in ASSETS_DIRS variable
|
||||
# because they are handled separately.
|
||||
# The TEXTURE_SIZE and SOUND_QUALITY take effect only if DECREASE_QUALITY has
|
||||
# value greater than 0.
|
||||
# The CONVERT_TO_JPG variable enables converting all images that are safe to
|
||||
# convert and keeps other images untouched.
|
||||
# The script needs imagemagick, pngquant and ogg utils installed in order to
|
||||
# use DECREASE_QUALITY feature
|
||||
|
||||
################################################################################
|
||||
|
||||
export KARTS_DEFAULT="all"
|
||||
export TRACKS_DEFAULT="all"
|
||||
|
||||
export TEXTURE_SIZE_DEFAULT=256
|
||||
export JPEG_QUALITY_DEFAULT=85
|
||||
export PNG_QUALITY_DEFAULT=95
|
||||
export PNGQUANT_QUALITY_DEFAULT=90
|
||||
export SOUND_QUALITY_DEFAULT=42
|
||||
export SOUND_MONO_DEFAULT=1
|
||||
export SOUND_SAMPLE_DEFAULT=32000
|
||||
|
||||
export RUN_OPTIMIZE_SCRIPT_DEFAULT=0
|
||||
export DECREASE_QUALITY_DEFAULT=1
|
||||
export CONVERT_TO_JPG_DEFAULT=1
|
||||
export ONLY_ASSETS_DEFAULT=0
|
||||
|
||||
export ASSETS_PATHS_DEFAULT="../data \
|
||||
../../stk-assets \
|
||||
../../supertuxkart-assets"
|
||||
|
||||
export OUTPUT_PATH_DEFAULT="assets"
|
||||
|
||||
export ASSETS_DIRS="library models music sfx textures"
|
||||
|
||||
export CONVERT_TO_JPG_BLACKLIST="data/models/traffic_light.png"
|
||||
|
||||
export BLACKLIST_FILES="data/supertuxkart.icns \
|
||||
data/supertuxkart_1024.png \
|
||||
data/supertuxkart_128.png \
|
||||
data/supertuxkart_16.png \
|
||||
data/supertuxkart_256.png \
|
||||
data/supertuxkart_32.png \
|
||||
data/supertuxkart_48.png \
|
||||
data/supertuxkart_512.png \
|
||||
data/supertuxkart_64.png"
|
||||
|
||||
################################################################################
|
||||
|
||||
export LANG=C
|
||||
|
||||
cd "`dirname "$0"`"
|
||||
|
||||
# Set default configuration if not changed outside of the script
|
||||
if [ -z "$KARTS" ]; then
|
||||
export KARTS="$KARTS_DEFAULT"
|
||||
fi
|
||||
|
||||
if [ -z "$TRACKS" ]; then
|
||||
export TRACKS="$TRACKS_DEFAULT"
|
||||
fi
|
||||
|
||||
if [ -z "$TEXTURE_SIZE" ]; then
|
||||
export TEXTURE_SIZE="$TEXTURE_SIZE_DEFAULT"
|
||||
fi
|
||||
|
||||
if [ -z "$JPEG_QUALITY" ]; then
|
||||
export JPEG_QUALITY="$JPEG_QUALITY_DEFAULT"
|
||||
fi
|
||||
|
||||
if [ -z "$PNG_QUALITY" ]; then
|
||||
export PNG_QUALITY="$PNG_QUALITY_DEFAULT"
|
||||
fi
|
||||
|
||||
if [ -z "$PNGQUANT_QUALITY" ]; then
|
||||
export PNGQUANT_QUALITY="$PNGQUANT_QUALITY_DEFAULT"
|
||||
fi
|
||||
|
||||
if [ -z "$SOUND_QUALITY" ]; then
|
||||
export SOUND_QUALITY="$SOUND_QUALITY_DEFAULT"
|
||||
fi
|
||||
|
||||
if [ -z "$SOUND_MONO" ]; then
|
||||
export SOUND_MONO="$SOUND_MONO_DEFAULT"
|
||||
fi
|
||||
|
||||
if [ -z "$SOUND_SAMPLE" ]; then
|
||||
export SOUND_SAMPLE="$SOUND_SAMPLE_DEFAULT"
|
||||
fi
|
||||
|
||||
if [ -z "$RUN_OPTIMIZE_SCRIPT" ]; then
|
||||
export RUN_OPTIMIZE_SCRIPT="$RUN_OPTIMIZE_SCRIPT_DEFAULT"
|
||||
fi
|
||||
|
||||
if [ -z "$DECREASE_QUALITY" ]; then
|
||||
export DECREASE_QUALITY="$DECREASE_QUALITY_DEFAULT"
|
||||
fi
|
||||
|
||||
if [ -z "$CONVERT_TO_JPG" ]; then
|
||||
export CONVERT_TO_JPG="$CONVERT_TO_JPG_DEFAULT"
|
||||
fi
|
||||
|
||||
if [ -z "$ONLY_ASSETS" ]; then
|
||||
export ONLY_ASSETS="$ONLY_ASSETS_DEFAULT"
|
||||
fi
|
||||
|
||||
if [ -z "$ASSETS_PATHS" ]; then
|
||||
export ASSETS_PATHS="$ASSETS_PATHS_DEFAULT"
|
||||
fi
|
||||
|
||||
if [ -z "$OUTPUT_PATH" ]; then
|
||||
export OUTPUT_PATH="$OUTPUT_PATH_DEFAULT"
|
||||
fi
|
||||
|
||||
# Find assets path
|
||||
for ASSETS_PATH in $ASSETS_PATHS; do
|
||||
if [ -d $ASSETS_PATH ] && [ `ls $ASSETS_PATH | grep -c tracks` -gt 0 ]; then
|
||||
echo "Assets found in $ASSETS_PATH"
|
||||
ASSETS_PATH_FOUND=1
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if [ -z $ASSETS_PATH_FOUND ]; then
|
||||
echo "Couldn't find assets path"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -d "../data" ]; then
|
||||
echo "Couldn't find data directory"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
# Clear previous assets directory
|
||||
echo "Clear previous assets directory"
|
||||
rm -rf "$OUTPUT_PATH"
|
||||
|
||||
|
||||
# Copy all assets
|
||||
echo "Copy all assets"
|
||||
|
||||
mkdir -p "$OUTPUT_PATH/data"
|
||||
|
||||
for DIR in `ls $ASSETS_PATH`; do
|
||||
CAN_BE_COPIED=0
|
||||
|
||||
for ASSETS_DIR in $ASSETS_DIRS; do
|
||||
if [ $DIR = $ASSETS_DIR ]; then
|
||||
CAN_BE_COPIED=1
|
||||
break
|
||||
fi
|
||||
done;
|
||||
|
||||
# Don't copy karts and tracks. It will be handled later
|
||||
BLACKLIST_ASSETS="karts tracks"
|
||||
for ASSETS_DIR in $BLACKLIST_ASSETS; do
|
||||
if [ $DIR = $ASSETS_DIR ]; then
|
||||
CAN_BE_COPIED=0
|
||||
break
|
||||
fi
|
||||
done;
|
||||
|
||||
if [ $CAN_BE_COPIED -gt 0 ]; then
|
||||
cp -a "$ASSETS_PATH/$DIR" "$OUTPUT_PATH/data/"
|
||||
fi
|
||||
done;
|
||||
|
||||
|
||||
# Copy selected tracks
|
||||
echo "Copy selected tracks"
|
||||
|
||||
mkdir -p "$OUTPUT_PATH/data/tracks"
|
||||
|
||||
for DIR in `ls $ASSETS_PATH/tracks`; do
|
||||
CAN_BE_COPIED=0
|
||||
|
||||
if [ "$TRACKS" != "all" ]; then
|
||||
for TRACK in $TRACKS; do
|
||||
if [ $DIR = $TRACK ]; then
|
||||
CAN_BE_COPIED=1
|
||||
break
|
||||
fi
|
||||
done;
|
||||
else
|
||||
CAN_BE_COPIED=1
|
||||
fi
|
||||
|
||||
if [ $CAN_BE_COPIED -gt 0 ]; then
|
||||
cp -a "$ASSETS_PATH/tracks/$DIR" "$OUTPUT_PATH/data/tracks/"
|
||||
fi
|
||||
done
|
||||
|
||||
|
||||
# Copy selected karts
|
||||
echo "Copy selected karts"
|
||||
|
||||
mkdir -p "$OUTPUT_PATH/data/karts"
|
||||
|
||||
for DIR in `ls $ASSETS_PATH/karts`; do
|
||||
CAN_BE_COPIED=0
|
||||
|
||||
if [ "$KARTS" != "all" ]; then
|
||||
for KART in $KARTS; do
|
||||
if [ $DIR = $KART ]; then
|
||||
CAN_BE_COPIED=1
|
||||
break
|
||||
fi
|
||||
done;
|
||||
else
|
||||
CAN_BE_COPIED=1
|
||||
fi
|
||||
|
||||
if [ $CAN_BE_COPIED -gt 0 ]; then
|
||||
cp -a "$ASSETS_PATH/karts/$DIR" "$OUTPUT_PATH/data/karts/"
|
||||
fi
|
||||
done
|
||||
|
||||
|
||||
# Decrease assets quality in order to save some disk space and RAM
|
||||
echo "Decrease assets quality"
|
||||
|
||||
convert_image()
|
||||
{
|
||||
FILE="$1"
|
||||
FILE_TYPE="$2"
|
||||
echo "Convert file: $FILE"
|
||||
|
||||
if [ ! -f "$FILE" ]; then
|
||||
echo " File doesn't exist."
|
||||
return
|
||||
fi
|
||||
|
||||
W=`identify -format "%[fx:w]" "$FILE"`
|
||||
H=`identify -format "%[fx:h]" "$FILE"`
|
||||
|
||||
if [ -z $W ] || [ -z $H ]; then
|
||||
echo "Couldn't convert $FILE file"
|
||||
return
|
||||
fi
|
||||
|
||||
SCALE_CMD=""
|
||||
QUALITY_CMD=""
|
||||
|
||||
if [ $W -gt $TEXTURE_SIZE ] || [ $H -gt $TEXTURE_SIZE ]; then
|
||||
if [ $W -gt $H ]; then
|
||||
SCALED_W=$TEXTURE_SIZE
|
||||
SCALED_H=$(($TEXTURE_SIZE * $H / $W))
|
||||
else
|
||||
SCALED_W=$(($TEXTURE_SIZE * $W / $H))
|
||||
SCALED_H=$TEXTURE_SIZE
|
||||
fi
|
||||
|
||||
SCALE_CMD="-scale ${SCALED_W}x${SCALED_H}"
|
||||
fi
|
||||
|
||||
if [ "$FILE_TYPE" = "jpg" ]; then
|
||||
QUALITY_CMD="-quality $JPEG_QUALITY"
|
||||
elif [ "$FILE_TYPE" = "png" ]; then
|
||||
QUALITY_CMD="-quality $PNG_QUALITY"
|
||||
fi
|
||||
|
||||
convert $SCALE_CMD $QUALITY_CMD "$FILE" "tmp.$FILE_TYPE"
|
||||
|
||||
if [ -s "tmp.$FILE_TYPE" ]; then
|
||||
SIZE_OLD=`du -k "$FILE" | cut -f1`
|
||||
SIZE_NEW=`du -k "tmp.$FILE_TYPE" | cut -f1`
|
||||
|
||||
if [ $SIZE_NEW -lt $SIZE_OLD ]; then
|
||||
mv "tmp.$FILE_TYPE" "$FILE"
|
||||
fi
|
||||
fi
|
||||
|
||||
rm -f "tmp.$FILE_TYPE"
|
||||
}
|
||||
|
||||
convert_sound()
|
||||
{
|
||||
FILE="$1"
|
||||
echo "Convert file: $FILE"
|
||||
|
||||
if [ ! -f "$FILE" ]; then
|
||||
echo " File doesn't exist."
|
||||
return
|
||||
fi
|
||||
|
||||
oggdec "$FILE" -o tmp.wav
|
||||
|
||||
if [ -s tmp.wav ]; then
|
||||
OGGENC_CMD=""
|
||||
|
||||
if [ "$SOUND_MONO" -gt 0 ]; then
|
||||
OGGENC_CMD="$OGGENC_CMD --downmix"
|
||||
fi
|
||||
|
||||
OGG_RATE=`ogginfo "$FILE" | grep "Rate: " | cut -f 2 -d " " \
|
||||
| grep -o '[0-9]*'`
|
||||
|
||||
if [ ! -z "$OGG_RATE" ] && [ "$OGG_RATE" -gt "$SOUND_SAMPLE" ]; then
|
||||
OGGENC_CMD="$OGGENC_CMD --resample $SOUND_SAMPLE"
|
||||
fi
|
||||
|
||||
OGGENC_CMD="$OGGENC_CMD -b $SOUND_QUALITY"
|
||||
|
||||
oggenc $OGGENC_CMD tmp.wav -o tmp.ogg
|
||||
fi
|
||||
|
||||
if [ -s tmp.ogg ]; then
|
||||
SIZE_OLD=`du -k "$FILE" | cut -f1`
|
||||
SIZE_NEW=`du -k "tmp.ogg" | cut -f1`
|
||||
|
||||
if [ $SIZE_NEW -lt $SIZE_OLD ]; then
|
||||
mv tmp.ogg "$FILE"
|
||||
fi
|
||||
fi
|
||||
|
||||
rm -f tmp.wav tmp.ogg
|
||||
}
|
||||
|
||||
optimize_png()
|
||||
{
|
||||
FILE="$1"
|
||||
echo "Optimize file: $FILE"
|
||||
|
||||
if [ ! -f "$FILE" ]; then
|
||||
echo " File doesn't exist."
|
||||
return
|
||||
fi
|
||||
|
||||
pngquant --force --skip-if-larger --quality 0-$PNGQUANT_QUALITY --output "$FILE" -- "$FILE"
|
||||
}
|
||||
|
||||
convert_to_jpg()
|
||||
{
|
||||
FILE="$1"
|
||||
echo "Convert file to jpg: $FILE"
|
||||
|
||||
if [ ! -f "$FILE" ]; then
|
||||
echo " File doesn't exist."
|
||||
return
|
||||
fi
|
||||
|
||||
ALREADY_CONVERTED=0
|
||||
|
||||
if [ -s "./converted_textures" ]; then
|
||||
while read -r CONVERTED_TEXTURE; do
|
||||
if [ "$FILE" = "$CONVERTED_TEXTURE" ]; then
|
||||
ALREADY_CONVERTED=1
|
||||
break
|
||||
fi
|
||||
done < "./converted_textures"
|
||||
fi
|
||||
|
||||
if [ $ALREADY_CONVERTED -eq 1 ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
BLACKLISTED=0
|
||||
|
||||
for BLACKLIST_FILE in $CONVERT_TO_JPG_BLACKLIST; do
|
||||
if [ "$FILE" = "$OUTPUT_PATH/$BLACKLIST_FILE" ]; then
|
||||
BLACKLISTED=1
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if [ $BLACKLISTED -eq 1 ]; then
|
||||
#echo " File is blacklisted. Ignore..."
|
||||
return
|
||||
fi
|
||||
|
||||
FILE_EXTENSION=`echo "$FILE" | tail -c 5`
|
||||
|
||||
if [ `echo "$FILE_EXTENSION" | head -c 1` != "." ]; then
|
||||
#echo " Unsupported file extension. Ignore..."
|
||||
return
|
||||
fi
|
||||
|
||||
FILE_FORMAT=`identify -format %m "$FILE"`
|
||||
|
||||
if [ "$FILE_FORMAT" = "JPEG" ]; then
|
||||
#echo " File is already JPEG. Ignore..."
|
||||
return
|
||||
fi
|
||||
|
||||
IS_OPAQUE=`identify -format '%[opaque]' "$FILE"`
|
||||
#HAS_ALPHA=`identify -format '%A' "$FILE"`
|
||||
|
||||
if [ "$IS_OPAQUE" = "False" ] || [ "$IS_OPAQUE" = "false" ]; then
|
||||
#echo " File has alpha channel. Ignore..."
|
||||
return
|
||||
fi
|
||||
|
||||
DIRNAME="`dirname "$FILE"`"
|
||||
BASENAME="`basename "$FILE"`"
|
||||
IS_GLOSS_MAP=`find "$DIRNAME" -iname "*.xml" -exec cat {} \; \
|
||||
| grep -c "gloss-map=\"$BASENAME\""`
|
||||
|
||||
if [ $IS_GLOSS_MAP -gt 0 ]; then
|
||||
#echo " File is a gloss-map. Ignore..."
|
||||
return
|
||||
fi
|
||||
|
||||
NEW_FILE="`echo $FILE | head -c -5`.jpg"
|
||||
|
||||
if [ -f "$NEW_FILE" ]; then
|
||||
#echo " There is already a file with .jpg extension. Ignore..."
|
||||
return
|
||||
fi
|
||||
|
||||
# We can check if new file is smaller
|
||||
convert -quality $JPEG_QUALITY "$FILE" "$NEW_FILE"
|
||||
rm -f "$FILE"
|
||||
|
||||
echo "$FILE" >> "./converted_textures"
|
||||
}
|
||||
|
||||
convert_to_jpg_extract_b3dz()
|
||||
{
|
||||
FILE="$1"
|
||||
echo "Extract b3dz file: $FILE"
|
||||
|
||||
if [ ! -f "$FILE" ]; then
|
||||
echo " File doesn't exist."
|
||||
return
|
||||
fi
|
||||
|
||||
DIRNAME="`dirname "$FILE"`"
|
||||
|
||||
unzip "$FILE" -d "$DIRNAME"
|
||||
rm -f "$FILE"
|
||||
|
||||
TEXNAME="`basename "$FILE"`"
|
||||
NEWNAME="`echo $TEXNAME | head -c -6`.b3d"
|
||||
|
||||
sed -i "s/\"$TEXNAME\"/\"$NEWNAME\"/g" "$DIRNAME/kart.xml"
|
||||
}
|
||||
|
||||
convert_to_jpg_update_b3d()
|
||||
{
|
||||
FILE="$1"
|
||||
echo "Update b3d file: $FILE"
|
||||
|
||||
if [ ! -f "$1" ]; then
|
||||
echo " File doesn't exist."
|
||||
return
|
||||
fi
|
||||
|
||||
HEX_FILE=`hexdump -ve '1/1 "%.2x"' "$FILE"`
|
||||
|
||||
TEXS_CHUNK="54455853"
|
||||
TEXS_CHUNK_POS=24
|
||||
|
||||
FOUND_CHUNK=`echo $HEX_FILE | head -c $(($TEXS_CHUNK_POS + 8)) \
|
||||
| tail -c +$(($TEXS_CHUNK_POS + 1))`
|
||||
|
||||
if [ -z "$FOUND_CHUNK" ] || [ "$FOUND_CHUNK" != "$TEXS_CHUNK" ]; then
|
||||
echo " File has no textures."
|
||||
return
|
||||
fi
|
||||
|
||||
TEXS_SIZE=`echo $HEX_FILE | head -c $(($TEXS_CHUNK_POS + 16)) | tail -c 8`
|
||||
|
||||
TEXS_SIZE_CONVERTED=`echo $TEXS_SIZE | cut -c7-8`
|
||||
TEXS_SIZE_CONVERTED=$TEXS_SIZE_CONVERTED`echo $TEXS_SIZE | cut -c5-6`
|
||||
TEXS_SIZE_CONVERTED=$TEXS_SIZE_CONVERTED`echo $TEXS_SIZE | cut -c3-4`
|
||||
TEXS_SIZE_CONVERTED=$TEXS_SIZE_CONVERTED`echo $TEXS_SIZE | cut -c1-2`
|
||||
TEXS_SIZE_CONVERTED=`echo $((0x$TEXS_SIZE_CONVERTED))`
|
||||
|
||||
if [ $TEXS_SIZE_CONVERTED -le 0 ]; then
|
||||
echo " Invalid TEXS size value."
|
||||
return
|
||||
fi
|
||||
|
||||
TEXS_BEGIN=$(($TEXS_CHUNK_POS + 16))
|
||||
TEXS_END=$(($TEXS_BEGIN + $TEXS_SIZE_CONVERTED * 2))
|
||||
HEX_TEXS=`echo $HEX_FILE | head -c $TEXS_END | tail -c +$(($TEXS_BEGIN+1))`
|
||||
CURR_POS=0
|
||||
|
||||
while [ $CURR_POS -lt $TEXS_END ]; do
|
||||
NULL_POS=`echo $HEX_TEXS | tail -c +$(($CURR_POS+1)) | grep -b -o "00" \
|
||||
| head -n 1 | cut -f1 -d":"`
|
||||
|
||||
if [ -z $NULL_POS ]; then
|
||||
#echo " Done."
|
||||
break
|
||||
fi
|
||||
|
||||
if [ $NULL_POS -lt 4 ]; then
|
||||
echo " Something went wrong..."
|
||||
break
|
||||
fi
|
||||
|
||||
TEXNAME_BEGIN=$((($TEXS_BEGIN + $CURR_POS) / 2))
|
||||
TEXNAME_END=$((($TEXS_BEGIN + $CURR_POS + $NULL_POS) / 2))
|
||||
CURR_POS=$(($CURR_POS + $NULL_POS + 58))
|
||||
|
||||
TEXTURE_NAME=`dd if="$FILE" bs=1 skip=$TEXNAME_BEGIN \
|
||||
count=$(($TEXNAME_END - $TEXNAME_BEGIN)) 2> /dev/null`
|
||||
DIRNAME="`dirname "$FILE"`"
|
||||
TEXTURE_PATH="$DIRNAME/$TEXTURE_NAME"
|
||||
|
||||
IS_CONVERTED=0
|
||||
|
||||
while read -r CONVERTED_TEXTURE; do
|
||||
if [ "$TEXTURE_PATH" = "$CONVERTED_TEXTURE" ]; then
|
||||
IS_CONVERTED=1
|
||||
break
|
||||
fi
|
||||
done < "./converted_textures"
|
||||
|
||||
if [ $IS_CONVERTED -eq 1 ]; then
|
||||
echo -n ".jpg" | dd of="$FILE" bs=1 seek=$(($TEXNAME_END - 4)) \
|
||||
conv=notrunc 2> /dev/null
|
||||
fi;
|
||||
done
|
||||
}
|
||||
|
||||
convert_to_jpg_update_spm()
|
||||
{
|
||||
FILE="$1"
|
||||
echo "Update spm file: $FILE"
|
||||
|
||||
if [ ! -f "$1" ]; then
|
||||
echo " File doesn't exist."
|
||||
return
|
||||
fi
|
||||
|
||||
HEX_FILE=`hexdump -ve '1/1 "%.2x"' "$FILE"`
|
||||
|
||||
SP_HEADER="5350"
|
||||
SP_FOUND=`echo $HEX_FILE | head -c 4`
|
||||
|
||||
if [ -z "$SP_FOUND" ] || [ "$SP_FOUND" != "$SP_HEADER" ]; then
|
||||
echo " Unsupported format."
|
||||
return
|
||||
fi
|
||||
|
||||
TEXS_BEGIN=60
|
||||
TEXS_COUNT=`echo $HEX_FILE | head -c $TEXS_BEGIN | tail -c 4`
|
||||
|
||||
TEXS_COUNT_CONVERTED=`echo $TEXS_COUNT | cut -c3-4`
|
||||
TEXS_COUNT_CONVERTED=$TEXS_COUNT_CONVERTED`echo $TEXS_COUNT | cut -c1-2`
|
||||
TEXS_COUNT_CONVERTED=`echo $((0x$TEXS_COUNT_CONVERTED))`
|
||||
TEXS_COUNT_CONVERTED=$(($TEXS_COUNT_CONVERTED * 2))
|
||||
|
||||
if [ $TEXS_COUNT_CONVERTED -le 0 ]; then
|
||||
echo " Invalid textures count value."
|
||||
return
|
||||
fi
|
||||
|
||||
CURR_POS=$(($TEXS_BEGIN + 2))
|
||||
|
||||
while [ $TEXS_COUNT_CONVERTED -gt 0 ]; do
|
||||
TEXS_COUNT_CONVERTED=$(($TEXS_COUNT_CONVERTED - 1))
|
||||
|
||||
TEX_LEN=`echo $HEX_FILE | head -c $(($CURR_POS)) | tail -c 2`
|
||||
TEX_LEN=`echo $((0x$TEX_LEN))`
|
||||
|
||||
TEXNAME_BEGIN=$(($CURR_POS / 2))
|
||||
TEXNAME_END=$(($CURR_POS / 2 + $TEX_LEN))
|
||||
CURR_POS=$(($CURR_POS + 2 + $TEX_LEN * 2))
|
||||
|
||||
if [ $TEX_LEN -eq 0 ]; then
|
||||
#echo " Empty texture name, ignore..."
|
||||
continue
|
||||
fi
|
||||
|
||||
TEXTURE_NAME=`dd if="$FILE" bs=1 skip=$TEXNAME_BEGIN \
|
||||
count=$(($TEXNAME_END - $TEXNAME_BEGIN)) 2> /dev/null`
|
||||
|
||||
DIRNAME="`dirname "$FILE"`"
|
||||
TEXTURE_PATH="$DIRNAME/$TEXTURE_NAME"
|
||||
|
||||
IS_CONVERTED=0
|
||||
|
||||
while read -r CONVERTED_TEXTURE; do
|
||||
if [ "$TEXTURE_PATH" = "$CONVERTED_TEXTURE" ]; then
|
||||
IS_CONVERTED=1
|
||||
break
|
||||
fi
|
||||
done < "./converted_textures"
|
||||
|
||||
if [ $IS_CONVERTED -eq 1 ]; then
|
||||
echo -n ".jpg" | dd of="$FILE" bs=1 seek=$(($TEXNAME_END - 4)) \
|
||||
conv=notrunc 2> /dev/null
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
convert_to_jpg_update_xml()
|
||||
{
|
||||
FILE="$1"
|
||||
echo "Update xml file: $FILE"
|
||||
|
||||
if [ ! -f "$FILE" ]; then
|
||||
echo " File doesn't exist."
|
||||
return
|
||||
fi
|
||||
|
||||
DIRNAME="`dirname "$FILE"`"
|
||||
|
||||
while read -r CONVERTED_TEXTURE; do
|
||||
DIRNAME_TEX="`dirname "$CONVERTED_TEXTURE"`"
|
||||
|
||||
if [ "$DIRNAME_TEX" != "$DIRNAME" ]; then
|
||||
continue;
|
||||
fi
|
||||
|
||||
TEXNAME="`basename "$CONVERTED_TEXTURE" | head -c -5`"
|
||||
|
||||
sed -i "s/\"$TEXNAME.[pP][nN][gG]/\"$TEXNAME.jpg/g" "$FILE"
|
||||
sed -i "s/ $TEXNAME.[pP][nN][gG]/ $TEXNAME.jpg/g" "$FILE"
|
||||
done < "./converted_textures"
|
||||
}
|
||||
|
||||
|
||||
if [ $DECREASE_QUALITY -gt 0 ]; then
|
||||
find "$OUTPUT_PATH/data" -iname "*.png" | while read f; do convert_image "$f" "png"; done
|
||||
find "$OUTPUT_PATH/data" -iname "*.jpg" | while read f; do convert_image "$f" "jpg"; done
|
||||
find "$OUTPUT_PATH/data" -iname "*.ogg" | while read f; do convert_sound "$f"; done
|
||||
fi
|
||||
|
||||
|
||||
if [ $CONVERT_TO_JPG -gt 0 ]; then
|
||||
rm -f "./converted_textures"
|
||||
|
||||
find "$OUTPUT_PATH/data" -not -path "$OUTPUT_PATH/data/textures/*" \
|
||||
-not -path "$OUTPUT_PATH/data/karts/*" \
|
||||
-iname "*.png" | while read f; do convert_to_jpg "$f"; done
|
||||
|
||||
find "$OUTPUT_PATH/data" -iname "*.b3dz" | while read f; do convert_to_jpg_extract_b3dz "$f"; done
|
||||
find "$OUTPUT_PATH/data" -iname "*.b3d" | while read f; do convert_to_jpg_update_b3d "$f"; done
|
||||
find "$OUTPUT_PATH/data" -iname "*.spm" | while read f; do convert_to_jpg_update_spm "$f"; done
|
||||
find "$OUTPUT_PATH/data" -iname "*.xml" | while read f; do convert_to_jpg_update_xml "$f"; done
|
||||
|
||||
if [ -s "./converted_textures" ]; then
|
||||
echo "Converted textures:"
|
||||
cat "./converted_textures"
|
||||
rm -f "./converted_textures"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ $DECREASE_QUALITY -gt 0 ]; then
|
||||
find "$OUTPUT_PATH/data" -iname "*.png" | while read f; do optimize_png "$f" "png"; done
|
||||
fi
|
||||
|
||||
|
||||
# Copy data directory
|
||||
if [ $ONLY_ASSETS -eq 0 ]; then
|
||||
echo "Copy data directory"
|
||||
cp -a ../data/* "$OUTPUT_PATH/data"
|
||||
fi
|
||||
|
||||
|
||||
# Remove unused files
|
||||
for BLACKLIST_FILE in $BLACKLIST_FILES; do
|
||||
rm -f "$OUTPUT_PATH/$BLACKLIST_FILE"
|
||||
done
|
||||
|
||||
|
||||
# Run optimize_data.sh script
|
||||
if [ $RUN_OPTIMIZE_SCRIPT -gt 0 ]; then
|
||||
echo "Run optimize_data.sh script"
|
||||
sh -c "cd "$OUTPUT_PATH/data"; ../../../data/optimize_data.sh"
|
||||
fi
|
||||
|
||||
|
||||
# Generate files list
|
||||
echo "Generate files list"
|
||||
find "$OUTPUT_PATH"/* -type d| sort > tmp1.txt
|
||||
sed -i 's/$/\//' tmp1.txt
|
||||
find "$OUTPUT_PATH"/* -type f| sort > tmp2.txt
|
||||
cat tmp1.txt tmp2.txt | sort > "$OUTPUT_PATH/files.txt"
|
||||
rm tmp1.txt tmp2.txt
|
||||
sed -i s/".\/$OUTPUT_PATH\/"// "$OUTPUT_PATH/files.txt"
|
||||
sed -i s/"$OUTPUT_PATH\/"// "$OUTPUT_PATH/files.txt"
|
||||
|
||||
# A file that can be used to check if apk has assets
|
||||
echo "has_assets" > "$OUTPUT_PATH/has_assets.txt"
|
||||
|
||||
|
||||
# It will be probably ignored by ant, but create it anyway...
|
||||
touch "$OUTPUT_PATH/.nomedia"
|
||||
|
||||
|
||||
echo "Done."
|
||||
exit 0
|
@ -1 +0,0 @@
|
||||
org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError
|
BIN
android/gradle/wrapper/gradle-wrapper.jar
vendored
@ -1,6 +0,0 @@
|
||||
#Sun Dec 03 18:24:53 EET 2023
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
240
android/gradlew
vendored
@ -1,240 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
#
|
||||
# Copyright © 2015-2021 the original authors.
|
||||
#
|
||||
# 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
|
||||
#
|
||||
# https://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.
|
||||
#
|
||||
|
||||
##############################################################################
|
||||
#
|
||||
# Gradle start up script for POSIX generated by Gradle.
|
||||
#
|
||||
# Important for running:
|
||||
#
|
||||
# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
|
||||
# noncompliant, but you have some other compliant shell such as ksh or
|
||||
# bash, then to run this script, type that shell name before the whole
|
||||
# command line, like:
|
||||
#
|
||||
# ksh Gradle
|
||||
#
|
||||
# Busybox and similar reduced shells will NOT work, because this script
|
||||
# requires all of these POSIX shell features:
|
||||
# * functions;
|
||||
# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
|
||||
# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
|
||||
# * compound commands having a testable exit status, especially «case»;
|
||||
# * various built-in commands including «command», «set», and «ulimit».
|
||||
#
|
||||
# Important for patching:
|
||||
#
|
||||
# (2) This script targets any POSIX shell, so it avoids extensions provided
|
||||
# by Bash, Ksh, etc; in particular arrays are avoided.
|
||||
#
|
||||
# The "traditional" practice of packing multiple parameters into a
|
||||
# space-separated string is a well documented source of bugs and security
|
||||
# problems, so this is (mostly) avoided, by progressively accumulating
|
||||
# options in "$@", and eventually passing that to Java.
|
||||
#
|
||||
# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
|
||||
# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
|
||||
# see the in-line comments for details.
|
||||
#
|
||||
# There are tweaks for specific operating systems such as AIX, CygWin,
|
||||
# Darwin, MinGW, and NonStop.
|
||||
#
|
||||
# (3) This script is generated from the Groovy template
|
||||
# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
|
||||
# within the Gradle project.
|
||||
#
|
||||
# You can find Gradle at https://github.com/gradle/gradle/.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
# Attempt to set APP_HOME
|
||||
|
||||
# Resolve links: $0 may be a link
|
||||
app_path=$0
|
||||
|
||||
# Need this for daisy-chained symlinks.
|
||||
while
|
||||
APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
|
||||
[ -h "$app_path" ]
|
||||
do
|
||||
ls=$( ls -ld "$app_path" )
|
||||
link=${ls#*' -> '}
|
||||
case $link in #(
|
||||
/*) app_path=$link ;; #(
|
||||
*) app_path=$APP_HOME$link ;;
|
||||
esac
|
||||
done
|
||||
|
||||
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
|
||||
|
||||
APP_NAME="Gradle"
|
||||
APP_BASE_NAME=${0##*/}
|
||||
|
||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
||||
|
||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||
MAX_FD=maximum
|
||||
|
||||
warn () {
|
||||
echo "$*"
|
||||
} >&2
|
||||
|
||||
die () {
|
||||
echo
|
||||
echo "$*"
|
||||
echo
|
||||
exit 1
|
||||
} >&2
|
||||
|
||||
# OS specific support (must be 'true' or 'false').
|
||||
cygwin=false
|
||||
msys=false
|
||||
darwin=false
|
||||
nonstop=false
|
||||
case "$( uname )" in #(
|
||||
CYGWIN* ) cygwin=true ;; #(
|
||||
Darwin* ) darwin=true ;; #(
|
||||
MSYS* | MINGW* ) msys=true ;; #(
|
||||
NONSTOP* ) nonstop=true ;;
|
||||
esac
|
||||
|
||||
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" && ! "$darwin" && ! "$nonstop" ; then
|
||||
case $MAX_FD in #(
|
||||
max*)
|
||||
MAX_FD=$( ulimit -H -n ) ||
|
||||
warn "Could not query maximum file descriptor limit"
|
||||
esac
|
||||
case $MAX_FD in #(
|
||||
'' | soft) :;; #(
|
||||
*)
|
||||
ulimit -n "$MAX_FD" ||
|
||||
warn "Could not set maximum file descriptor limit to $MAX_FD"
|
||||
esac
|
||||
fi
|
||||
|
||||
# Collect all arguments for the java command, stacking in reverse order:
|
||||
# * args from the command line
|
||||
# * the main class name
|
||||
# * -classpath
|
||||
# * -D...appname settings
|
||||
# * --module-path (only if needed)
|
||||
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
|
||||
|
||||
# For Cygwin or MSYS, switch paths to Windows format before running java
|
||||
if "$cygwin" || "$msys" ; then
|
||||
APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
|
||||
CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
|
||||
|
||||
JAVACMD=$( cygpath --unix "$JAVACMD" )
|
||||
|
||||
# Now convert the arguments - kludge to limit ourselves to /bin/sh
|
||||
for arg do
|
||||
if
|
||||
case $arg in #(
|
||||
-*) false ;; # don't mess with options #(
|
||||
/?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
|
||||
[ -e "$t" ] ;; #(
|
||||
*) false ;;
|
||||
esac
|
||||
then
|
||||
arg=$( cygpath --path --ignore --mixed "$arg" )
|
||||
fi
|
||||
# Roll the args list around exactly as many times as the number of
|
||||
# args, so each arg winds up back in the position where it started, but
|
||||
# possibly modified.
|
||||
#
|
||||
# NB: a `for` loop captures its iteration list before it begins, so
|
||||
# changing the positional parameters here affects neither the number of
|
||||
# iterations, nor the values presented in `arg`.
|
||||
shift # remove old arg
|
||||
set -- "$@" "$arg" # push replacement arg
|
||||
done
|
||||
fi
|
||||
|
||||
# Collect all arguments for the java command;
|
||||
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
|
||||
# shell script including quotes and variable substitutions, so put them in
|
||||
# double quotes to make sure that they get re-expanded; and
|
||||
# * put everything else in single quotes, so that it's not re-expanded.
|
||||
|
||||
set -- \
|
||||
"-Dorg.gradle.appname=$APP_BASE_NAME" \
|
||||
-classpath "$CLASSPATH" \
|
||||
org.gradle.wrapper.GradleWrapperMain \
|
||||
"$@"
|
||||
|
||||
# Stop when "xargs" is not available.
|
||||
if ! command -v xargs >/dev/null 2>&1
|
||||
then
|
||||
die "xargs is not available"
|
||||
fi
|
||||
|
||||
# Use "xargs" to parse quoted args.
|
||||
#
|
||||
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
|
||||
#
|
||||
# In Bash we could simply go:
|
||||
#
|
||||
# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
|
||||
# set -- "${ARGS[@]}" "$@"
|
||||
#
|
||||
# but POSIX shell has neither arrays nor command substitution, so instead we
|
||||
# post-process each arg (as a line of input to sed) to backslash-escape any
|
||||
# character that might be a shell metacharacter, then use eval to reverse
|
||||
# that process (while maintaining the separation between arguments), and wrap
|
||||
# the whole thing up as a single "set" statement.
|
||||
#
|
||||
# This will of course break if any of these variables contains a newline or
|
||||
# an unmatched quote.
|
||||
#
|
||||
|
||||
eval "set -- $(
|
||||
printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
|
||||
xargs -n1 |
|
||||
sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
|
||||
tr '\n' ' '
|
||||
)" '"$@"'
|
||||
|
||||
exec "$JAVACMD" "$@"
|
Before Width: | Height: | Size: 31 KiB |
BIN
android/icon.png
Before Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 26 KiB |
466
android/make.sh
@ -1,466 +0,0 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# (C) 2016-2017 Dawid Gan, under the GPLv3
|
||||
#
|
||||
# A script that creates the apk build
|
||||
|
||||
|
||||
export DIRNAME=$(realpath "$(dirname "$0")")
|
||||
|
||||
export NDK_PATH_DEFAULT="$DIRNAME/android-ndk"
|
||||
export SDK_PATH_DEFAULT="$DIRNAME/android-sdk"
|
||||
|
||||
export NDK_BUILD_SCRIPT="$DIRNAME/Android.mk"
|
||||
|
||||
#export NDK_CCACHE=ccache
|
||||
export CPU_CORE="-j$(($(nproc) + 1))"
|
||||
|
||||
if [ -z "$STK_MIN_ANDROID_SDK" ]; then
|
||||
export STK_MIN_ANDROID_SDK=16
|
||||
fi
|
||||
|
||||
if [ -z "$STK_TARGET_ANDROID_SDK" ]; then
|
||||
export STK_TARGET_ANDROID_SDK=34
|
||||
fi
|
||||
|
||||
if [ -z "$STK_NDK_VERSION" ]; then
|
||||
export STK_NDK_VERSION=23.1.7779620
|
||||
fi
|
||||
|
||||
export APP_NAME_RELEASE="SuperTuxKart"
|
||||
export PACKAGE_NAME_RELEASE="org.supertuxkart.stk"
|
||||
export PACKAGE_CLASS_NAME_RELEASE="org/supertuxkart/stk"
|
||||
export APP_DIR_NAME_RELEASE="supertuxkart"
|
||||
export APP_ICON_RELEASE="$DIRNAME/icon.png"
|
||||
export APP_ICON_ADAPTIVE_BG_RELEASE="$DIRNAME/icon_adaptive_bg.png"
|
||||
export APP_ICON_ADAPTIVE_FG_RELEASE="$DIRNAME/icon_adaptive_fg.png"
|
||||
|
||||
export APP_NAME_BETA="SuperTuxKart Beta"
|
||||
export PACKAGE_NAME_BETA="org.supertuxkart.stk_beta"
|
||||
export PACKAGE_CLASS_NAME_BETA="org/supertuxkart/stk_beta"
|
||||
export APP_DIR_NAME_BETA="supertuxkart-beta"
|
||||
export APP_ICON_BETA="$DIRNAME/icon-dbg.png"
|
||||
export APP_ICON_ADAPTIVE_BG_BETA="$DIRNAME/icon_adaptive_bg-dbg.png"
|
||||
export APP_ICON_ADAPTIVE_FG_BETA="$DIRNAME/icon_adaptive_fg-dbg.png"
|
||||
|
||||
export APP_NAME_DEBUG="SuperTuxKart Debug"
|
||||
export PACKAGE_NAME_DEBUG="org.supertuxkart.stk_dbg"
|
||||
export PACKAGE_CLASS_NAME_DEBUG="org/supertuxkart/stk_dbg"
|
||||
export APP_DIR_NAME_DEBUG="supertuxkart-dbg"
|
||||
export APP_ICON_DEBUG="$DIRNAME/icon-dbg.png"
|
||||
export APP_ICON_ADAPTIVE_BG_DEBUG="$DIRNAME/icon_adaptive_bg-dbg.png"
|
||||
export APP_ICON_ADAPTIVE_FG_DEBUG="$DIRNAME/icon_adaptive_fg-dbg.png"
|
||||
|
||||
|
||||
# A helper function that checks if error ocurred
|
||||
check_error()
|
||||
{
|
||||
if [ $? -gt 0 ]; then
|
||||
echo "Error ocurred."
|
||||
exit
|
||||
fi
|
||||
}
|
||||
|
||||
# Handle clean command
|
||||
if [ ! -z "$1" ] && [ "$1" = "clean" ]; then
|
||||
rm -rf "$DIRNAME/bin"
|
||||
rm -rf "$DIRNAME/build"
|
||||
rm -rf "$DIRNAME/libs"
|
||||
rm -rf "$DIRNAME/obj"
|
||||
rm -rf "$DIRNAME/res"
|
||||
rm -rf "$DIRNAME/.gradle"
|
||||
rm -rf "$DIRNAME/.cxx"
|
||||
exit
|
||||
fi
|
||||
|
||||
# Update variables for selected architecture
|
||||
if [ -z "$COMPILE_ARCH" ]; then
|
||||
COMPILE_ARCH="all"
|
||||
fi
|
||||
|
||||
if [ "$COMPILE_ARCH" = "armv7" ]; then
|
||||
COMPILE_ARCH="armeabi-v7a"
|
||||
elif [ "$COMPILE_ARCH" = "aarch64" ]; then
|
||||
COMPILE_ARCH="arm64-v8a"
|
||||
elif [ "$COMPILE_ARCH" != "x86" ] && [ "$COMPILE_ARCH" != "x86_64" ] && \
|
||||
[ "$COMPILE_ARCH" != "all" ]; then
|
||||
echo "Unknown COMPILE_ARCH: $COMPILE_ARCH. Possible values are:" \
|
||||
"all, armv7, aarch64, x86, x86_64"
|
||||
exit
|
||||
fi
|
||||
|
||||
# Update variables for selected build type
|
||||
if [ -z "$BUILD_TYPE" ]; then
|
||||
BUILD_TYPE="debug"
|
||||
fi
|
||||
|
||||
if [ "$BUILD_TYPE" = "debug" ] || [ "$BUILD_TYPE" = "Debug" ]; then
|
||||
export GRADLE_BUILD_TYPE="assembleDebug"
|
||||
export IS_DEBUG_BUILD=1
|
||||
export APP_NAME="$APP_NAME_DEBUG"
|
||||
export PACKAGE_NAME="$PACKAGE_NAME_DEBUG"
|
||||
export PACKAGE_CLASS_NAME="$PACKAGE_CLASS_NAME_DEBUG"
|
||||
export APP_DIR_NAME="$APP_DIR_NAME_DEBUG"
|
||||
export APP_ICON="$APP_ICON_DEBUG"
|
||||
export APP_ICON_ADAPTIVE_BG="$APP_ICON_ADAPTIVE_BG_DEBUG"
|
||||
export APP_ICON_ADAPTIVE_FG="$APP_ICON_ADAPTIVE_FG_DEBUG"
|
||||
elif [ "$BUILD_TYPE" = "release" ] || [ "$BUILD_TYPE" = "Release" ]; then
|
||||
export GRADLE_BUILD_TYPE="assembleRelease"
|
||||
export IS_DEBUG_BUILD=0
|
||||
export APP_NAME="$APP_NAME_RELEASE"
|
||||
export PACKAGE_NAME="$PACKAGE_NAME_RELEASE"
|
||||
export PACKAGE_CLASS_NAME="$PACKAGE_CLASS_NAME_RELEASE"
|
||||
export APP_DIR_NAME="$APP_DIR_NAME_RELEASE"
|
||||
export APP_ICON="$APP_ICON_RELEASE"
|
||||
export APP_ICON_ADAPTIVE_BG="$APP_ICON_ADAPTIVE_BG_RELEASE"
|
||||
export APP_ICON_ADAPTIVE_FG="$APP_ICON_ADAPTIVE_FG_RELEASE"
|
||||
elif [ "$BUILD_TYPE" = "beta" ] || [ "$BUILD_TYPE" = "Beta" ]; then
|
||||
export GRADLE_BUILD_TYPE="assembleRelease"
|
||||
export IS_DEBUG_BUILD=0
|
||||
export APP_NAME="$APP_NAME_BETA"
|
||||
export PACKAGE_NAME="$PACKAGE_NAME_BETA"
|
||||
export PACKAGE_CLASS_NAME="$PACKAGE_CLASS_NAME_BETA"
|
||||
export APP_DIR_NAME="$APP_DIR_NAME_BETA"
|
||||
export APP_ICON="$APP_ICON_BETA"
|
||||
export APP_ICON_ADAPTIVE_BG="$APP_ICON_ADAPTIVE_BG_BETA"
|
||||
export APP_ICON_ADAPTIVE_FG="$APP_ICON_ADAPTIVE_FG_BETA"
|
||||
else
|
||||
echo "Unsupported BUILD_TYPE: $BUILD_TYPE. Possible values are: " \
|
||||
"debug, release"
|
||||
exit
|
||||
fi
|
||||
|
||||
# Check if we have access to the Android NDK and SDK
|
||||
if [ -z "$NDK_PATH" ]; then
|
||||
export NDK_PATH="$NDK_PATH_DEFAULT"
|
||||
fi
|
||||
|
||||
if [ -z "$SDK_PATH" ]; then
|
||||
export SDK_PATH="$SDK_PATH_DEFAULT"
|
||||
fi
|
||||
|
||||
NDK_PATH="$(realpath "$NDK_PATH")/${STK_NDK_VERSION}"
|
||||
SDK_PATH=$(realpath "$SDK_PATH")
|
||||
|
||||
if [ ! -d "$NDK_PATH" ]; then
|
||||
echo "Error: Couldn't find $NDK_PATH directory. Please create a symlink" \
|
||||
"to your Android NDK installation in the $NDK_PATH_DEFAULT or set" \
|
||||
"proper path in the NDK_PATH variable"
|
||||
exit
|
||||
fi
|
||||
|
||||
if [ ! -d "$SDK_PATH" ]; then
|
||||
echo "Error: Couldn't find $SDK_PATH directory. Please create a symlink" \
|
||||
"to your Android SDK installation in the $SDK_PATH_DEFAULT or set" \
|
||||
"proper path in the SDK_PATH variable"
|
||||
exit
|
||||
fi
|
||||
|
||||
# Check if we have key for signing in release build
|
||||
if [ "$GRADLE_BUILD_TYPE" = "assembleRelease" ]; then
|
||||
if [ -z "$STK_KEYSTORE" ]; then
|
||||
echo "Error: STK_KEYSTORE variable is empty."
|
||||
exit
|
||||
fi
|
||||
|
||||
if [ ! -f "$STK_KEYSTORE" ]; then
|
||||
echo "Error: Couldn't find $STK_KEYSTORE file."
|
||||
exit
|
||||
fi
|
||||
|
||||
if [ -z "$STK_STOREPASS" ]; then
|
||||
echo "Error: STK_STOREPASS variable is empty"
|
||||
exit
|
||||
fi
|
||||
|
||||
if [ -z "$STK_ALIAS" ]; then
|
||||
echo "Error: STK_ALIAS variable is empty."
|
||||
exit
|
||||
fi
|
||||
else
|
||||
STK_KEYSTORE="empty"
|
||||
STK_STOREPASS="empty"
|
||||
STK_ALIAS="empty"
|
||||
fi
|
||||
|
||||
# Find newest build-tools version
|
||||
if [ -z "$BUILD_TOOLS_VER" ]; then
|
||||
BUILD_TOOLS_DIRS=`ls -1 "$SDK_PATH/build-tools" | sort -V -r`
|
||||
|
||||
for DIR in $BUILD_TOOLS_DIRS; do
|
||||
if [ "$DIR" = "`echo $DIR | sed 's/[^0-9,.]//g'`" ]; then
|
||||
BUILD_TOOLS_VER="$DIR"
|
||||
break
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
if [ -z "$BUILD_TOOLS_VER" ] || [ ! -d "$SDK_PATH/build-tools/$BUILD_TOOLS_VER" ]; then
|
||||
echo "Error: Couldn't detect build-tools version."
|
||||
exit
|
||||
fi
|
||||
|
||||
BUILD_TOOLS_FULL=(${BUILD_TOOLS_VER//./ })
|
||||
export COMPILE_SDK_VERSION="${BUILD_TOOLS_FULL[0]}"
|
||||
|
||||
# Set project version and code
|
||||
if [ -f "$DIRNAME/obj/project_version" ]; then
|
||||
PROJECT_VERSION_PREV=$(cat "$DIRNAME/obj/project_version")
|
||||
|
||||
if [ -z "$PROJECT_VERSION" ]; then
|
||||
export PROJECT_VERSION="$PROJECT_VERSION_PREV"
|
||||
elif [ "$PROJECT_VERSION" != "$PROJECT_VERSION_PREV" ]; then
|
||||
echo "Different project version has been set. Forcing recompilation..."
|
||||
touch -c "$DIRNAME/Android.mk"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -z "$PROJECT_VERSION" ]; then
|
||||
if [ $IS_DEBUG_BUILD -ne 0 ]; then
|
||||
export PROJECT_VERSION="git"
|
||||
else
|
||||
echo "Error: Variable PROJECT_VERSION is not set. It must have unique" \
|
||||
"value for release build."
|
||||
exit
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -z "$PROJECT_CODE" ]; then
|
||||
if [ $IS_DEBUG_BUILD -ne 0 ]; then
|
||||
PROJECT_CODE="1"
|
||||
else
|
||||
echo "Error: Variable PROJECT_CODE is not set."
|
||||
exit
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -d "$DIRNAME/assets/data" ]; then
|
||||
if [ ! -f "$DIRNAME/assets/data/supertuxkart.$PROJECT_VERSION" ]; then
|
||||
echo "Error: supertuxkart.$PROJECT_VERSION doesn't exist in" \
|
||||
"assets/data directory."
|
||||
exit
|
||||
fi
|
||||
fi
|
||||
|
||||
# Standalone toolchain
|
||||
if [ ! -f "$DIRNAME/obj/make_standalone_toolchain.stamp" ]; then
|
||||
echo "Creating standalone toolchain"
|
||||
rm -rf "$DIRNAME/obj"
|
||||
mkdir "$DIRNAME/obj"
|
||||
touch "$DIRNAME/obj/make_standalone_toolchain.stamp"
|
||||
fi
|
||||
|
||||
echo "$PROJECT_VERSION" > "$DIRNAME/obj/project_version"
|
||||
|
||||
# Build apk
|
||||
echo "Building APK"
|
||||
|
||||
mkdir -p "$DIRNAME/res/drawable/"
|
||||
mkdir -p "$DIRNAME/res/drawable-anydpi-v26/"
|
||||
mkdir -p "$DIRNAME/res/drawable-mdpi/"
|
||||
mkdir -p "$DIRNAME/res/drawable-hdpi/"
|
||||
mkdir -p "$DIRNAME/res/drawable-xhdpi/"
|
||||
mkdir -p "$DIRNAME/res/drawable-xxhdpi/"
|
||||
mkdir -p "$DIRNAME/res/drawable-xxxhdpi/"
|
||||
rm -rf "$DIRNAME/res/values*"
|
||||
mkdir -p "$DIRNAME/res/values/"
|
||||
|
||||
STYLES_FILE="$DIRNAME/res/values/styles.xml"
|
||||
|
||||
echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>" > "$STYLES_FILE"
|
||||
echo "<!--Generated by make.sh-->" >> "$STYLES_FILE"
|
||||
echo "<resources>" >> "$STYLES_FILE"
|
||||
echo " <style name=\"Theme.STKSplashScreen\" parent=\"android:style/Theme.Holo\">" >> "$STYLES_FILE"
|
||||
echo " <item name=\"android:windowBackground\">#A8A8A8</item>" >> "$STYLES_FILE"
|
||||
echo " <item name=\"android:windowFullscreen\">true</item>" >> "$STYLES_FILE"
|
||||
echo " <item name=\"android:windowNoTitle\">true</item>" >> "$STYLES_FILE"
|
||||
echo " <item name=\"android:windowLayoutInDisplayCutoutMode\">shortEdges</item>" >> "$STYLES_FILE"
|
||||
echo " <item name=\"android:windowContentOverlay\">@null</item>" >> "$STYLES_FILE"
|
||||
echo " </style>" >> "$STYLES_FILE"
|
||||
echo "</resources>" >> "$STYLES_FILE"
|
||||
|
||||
STRINGS_FILE="$DIRNAME/res/values/strings.xml"
|
||||
|
||||
# Strings used in stk android ui (when extracting game data first time)
|
||||
PO_EXTRACT_GAME_DATA="po_extract_game_data"
|
||||
PO_EXTRACT_GAME_DATA_STR="Extracting game data..."
|
||||
PO_EXTRACT_ERROR="po_extract_error"
|
||||
PO_EXTRACT_ERROR_STR="Game data extraction error"
|
||||
PO_EXTRACT_ERROR_MSG="po_extract_error_msg"
|
||||
PO_EXTRACT_ERROR_MSG_STR="Check remaining device space or reinstall SuperTuxKart."
|
||||
PO_QUIT="po_quit"
|
||||
PO_QUIT_STR="Quit"
|
||||
|
||||
echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>" > "$STRINGS_FILE"
|
||||
echo "<!--Generated by make.sh-->" >> "$STRINGS_FILE"
|
||||
echo "<resources>" >> "$STRINGS_FILE"
|
||||
echo " <string name=\"app_name\">$APP_NAME</string>" >> "$STRINGS_FILE"
|
||||
echo " <string name=\"$PO_EXTRACT_GAME_DATA\">$PO_EXTRACT_GAME_DATA_STR</string>" >> "$STRINGS_FILE"
|
||||
echo " <string name=\"$PO_EXTRACT_ERROR\">$PO_EXTRACT_ERROR_STR</string>" >> "$STRINGS_FILE"
|
||||
echo " <string name=\"$PO_EXTRACT_ERROR_MSG\">$PO_EXTRACT_ERROR_MSG_STR</string>" >> "$STRINGS_FILE"
|
||||
echo " <string name=\"$PO_QUIT\">$PO_QUIT_STR</string>" >> "$STRINGS_FILE"
|
||||
echo "</resources>" >> "$STRINGS_FILE"
|
||||
|
||||
translate_str()
|
||||
{
|
||||
echo $(grep -A 1 -e "msgid \"$1\"" "$2" \
|
||||
| sed -n 's/msgstr "\(.*\)"/\1/p' | sed "s/'/\\\'/g")
|
||||
}
|
||||
|
||||
create_translation()
|
||||
{
|
||||
PO="$1"
|
||||
CUR_LANG=$(basename -- "$PO" | cut -f 1 -d '.')
|
||||
# Skip english po file
|
||||
if [ "$CUR_LANG" = "en" ]; then
|
||||
return
|
||||
fi
|
||||
# Fix some difference in language code
|
||||
if [ "$CUR_LANG" = "he" ]; then
|
||||
# Hebrew
|
||||
CUR_LANG="iw"
|
||||
fi
|
||||
if [ "$CUR_LANG" = "id" ]; then
|
||||
# Indonesian
|
||||
CUR_LANG="in"
|
||||
fi
|
||||
if [ "$CUR_LANG" = "yi" ]; then
|
||||
# Yiddish
|
||||
CUR_LANG="ji"
|
||||
fi
|
||||
CUR_LANG=$(echo "$CUR_LANG" | sed 's/_/-r/g')
|
||||
EXTRACT_GAME_DATA_STR=$(translate_str "$PO_EXTRACT_GAME_DATA_STR" "$PO")
|
||||
EXTRACT_ERROR_STR=$(translate_str "$PO_EXTRACT_ERROR_STR" "$PO")
|
||||
EXTRACT_ERROR_MSG_STR=$(translate_str "$PO_EXTRACT_ERROR_MSG_STR" "$PO")
|
||||
QUIT_STR=$(translate_str "$PO_QUIT_STR" "$PO")
|
||||
if [ -n "$EXTRACT_GAME_DATA_STR" ] \
|
||||
|| [ -n "$EXTRACT_ERROR_STR" ] \
|
||||
|| [ -n "$EXTRACT_ERROR_MSG_STR" ] \
|
||||
|| [ -n "$QUIT_STR" ]; then
|
||||
mkdir -p "$DIRNAME/res/values-$CUR_LANG"
|
||||
TRANSLATION="$DIRNAME/res/values-$CUR_LANG/strings.xml"
|
||||
echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>" > "$TRANSLATION"
|
||||
echo "<!--Generated by make.sh-->" >> "$TRANSLATION"
|
||||
echo "<resources>" >> "$TRANSLATION"
|
||||
if [ -n "$EXTRACT_GAME_DATA_STR" ] ; then
|
||||
echo " <string name=\"$PO_EXTRACT_GAME_DATA\">$EXTRACT_GAME_DATA_STR</string>" >> "$TRANSLATION"
|
||||
fi
|
||||
if [ -n "$EXTRACT_ERROR_STR" ] ; then
|
||||
echo " <string name=\"$PO_EXTRACT_ERROR\">$EXTRACT_ERROR_STR</string>" >> "$TRANSLATION"
|
||||
fi
|
||||
if [ -n "$EXTRACT_ERROR_MSG_STR" ] ; then
|
||||
echo " <string name=\"$PO_EXTRACT_ERROR_MSG\">$EXTRACT_ERROR_MSG_STR</string>" >> "$TRANSLATION"
|
||||
fi
|
||||
if [ -n "$QUIT_STR" ] ; then
|
||||
echo " <string name=\"$PO_QUIT\">$QUIT_STR</string>" >> "$TRANSLATION"
|
||||
fi
|
||||
echo "</resources>" >> "$TRANSLATION"
|
||||
fi
|
||||
}
|
||||
|
||||
find "$DIRNAME/assets/data/po" -type f -name '*.po' | while read -r f; do create_translation "$f"; done
|
||||
|
||||
ADAPTIVE_ICON_FILE="$DIRNAME/res/drawable-anydpi-v26/icon.xml"
|
||||
|
||||
echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>" > "$ADAPTIVE_ICON_FILE"
|
||||
echo "<adaptive-icon" >> "$ADAPTIVE_ICON_FILE"
|
||||
echo " xmlns:android=\"http://schemas.android.com/apk/res/android\">" >> "$ADAPTIVE_ICON_FILE"
|
||||
echo " <background android:drawable=\"@drawable/icon_bg\" />" >> "$ADAPTIVE_ICON_FILE"
|
||||
echo " <foreground android:drawable=\"@drawable/icon_fg\" />" >> "$ADAPTIVE_ICON_FILE"
|
||||
echo "</adaptive-icon>" >> "$ADAPTIVE_ICON_FILE"
|
||||
|
||||
sed -i "s/package org.supertuxkart.*/package $PACKAGE_NAME;/g" \
|
||||
"$DIRNAME/src/main/java/STKEditText.java"
|
||||
|
||||
sed -i "s/import org.supertuxkart.*/import $PACKAGE_NAME.STKInputConnection;/g" \
|
||||
"$DIRNAME/src/main/java/STKEditText.java"
|
||||
|
||||
sed -i "s/package org.supertuxkart.*/package $PACKAGE_NAME;/g" \
|
||||
"$DIRNAME/src/main/java/STKInputConnection.java"
|
||||
|
||||
sed -i "s/import org.supertuxkart.*.STKEditText;/import $PACKAGE_NAME.STKEditText;/g" \
|
||||
"$DIRNAME/src/main/java/STKInputConnection.java"
|
||||
|
||||
sed -i "s/package org.supertuxkart.*/package $PACKAGE_NAME;/g" \
|
||||
"$DIRNAME/src/main/java/SuperTuxKartActivity.java"
|
||||
|
||||
sed -i "s/import org.supertuxkart.*/import $PACKAGE_NAME.STKEditText;/g" \
|
||||
"$DIRNAME/src/main/java/SuperTuxKartActivity.java"
|
||||
|
||||
cp -f "$DIRNAME/../lib/sdl2/android-project/app/src/main/java/org/libsdl/app/HIDDevice.java" \
|
||||
"$DIRNAME/src/main/java/"
|
||||
cp -f "$DIRNAME/../lib/sdl2/android-project/app/src/main/java/org/libsdl/app/HIDDeviceBLESteamController.java" \
|
||||
"$DIRNAME/src/main/java/"
|
||||
cp -f "$DIRNAME/../lib/sdl2/android-project/app/src/main/java/org/libsdl/app/HIDDeviceManager.java" \
|
||||
"$DIRNAME/src/main/java/"
|
||||
cp -f "$DIRNAME/../lib/sdl2/android-project/app/src/main/java/org/libsdl/app/HIDDeviceUSB.java" \
|
||||
"$DIRNAME/src/main/java/"
|
||||
cp -f "$DIRNAME/../lib/sdl2/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java" \
|
||||
"$DIRNAME/src/main/java/"
|
||||
cp -f "$DIRNAME/../lib/sdl2/android-project/app/src/main/java/org/libsdl/app/SDLAudioManager.java" \
|
||||
"$DIRNAME/src/main/java/"
|
||||
cp -f "$DIRNAME/../lib/sdl2/android-project/app/src/main/java/org/libsdl/app/SDLControllerManager.java" \
|
||||
"$DIRNAME/src/main/java/"
|
||||
cp -f "$DIRNAME/../lib/sdl2/android-project/app/src/main/java/org/libsdl/app/SDL.java" \
|
||||
"$DIRNAME/src/main/java/"
|
||||
cp -f "$DIRNAME/../lib/sdl2/android-project/app/src/main/java/org/libsdl/app/SDLSurface.java" \
|
||||
"$DIRNAME/src/main/java/"
|
||||
|
||||
cp "banner.png" "$DIRNAME/res/drawable/banner.png"
|
||||
cp "$APP_ICON" "$DIRNAME/res/drawable/icon.png"
|
||||
convert -scale 48x48 "$APP_ICON" "$DIRNAME/res/drawable-mdpi/icon.png"
|
||||
convert -scale 72x72 "$APP_ICON" "$DIRNAME/res/drawable-hdpi/icon.png"
|
||||
convert -scale 96x96 "$APP_ICON" "$DIRNAME/res/drawable-xhdpi/icon.png"
|
||||
convert -scale 144x144 "$APP_ICON" "$DIRNAME/res/drawable-xxhdpi/icon.png"
|
||||
convert -scale 192x192 "$APP_ICON" "$DIRNAME/res/drawable-xxxhdpi/icon.png"
|
||||
|
||||
#convert -scale 108x108 "$APP_ICON_ADAPTIVE_BG" "$DIRNAME/res/drawable-mdpi/icon_bg.png"
|
||||
#convert -scale 162x162 "$APP_ICON_ADAPTIVE_BG" "$DIRNAME/res/drawable-hdpi/icon_bg.png"
|
||||
#convert -scale 216x216 "$APP_ICON_ADAPTIVE_BG" "$DIRNAME/res/drawable-xhdpi/icon_bg.png"
|
||||
#convert -scale 324x324 "$APP_ICON_ADAPTIVE_BG" "$DIRNAME/res/drawable-xxhdpi/icon_bg.png"
|
||||
#convert -scale 432x432 "$APP_ICON_ADAPTIVE_BG" "$DIRNAME/res/drawable-xxxhdpi/icon_bg.png"
|
||||
|
||||
convert -scale 108x108 xc:"rgba(255,255,255,255)" "$DIRNAME/res/drawable-mdpi/icon_bg.png"
|
||||
convert -scale 162x162 xc:"rgba(255,255,255,255)" "$DIRNAME/res/drawable-hdpi/icon_bg.png"
|
||||
convert -scale 216x216 xc:"rgba(255,255,255,255)" "$DIRNAME/res/drawable-xhdpi/icon_bg.png"
|
||||
convert -scale 324x324 xc:"rgba(255,255,255,255)" "$DIRNAME/res/drawable-xxhdpi/icon_bg.png"
|
||||
convert -scale 432x432 xc:"rgba(255,255,255,255)" "$DIRNAME/res/drawable-xxxhdpi/icon_bg.png"
|
||||
|
||||
convert -scale 108x108 "$APP_ICON_ADAPTIVE_FG" "$DIRNAME/res/drawable-mdpi/icon_fg.png"
|
||||
convert -scale 162x162 "$APP_ICON_ADAPTIVE_FG" "$DIRNAME/res/drawable-hdpi/icon_fg.png"
|
||||
convert -scale 216x216 "$APP_ICON_ADAPTIVE_FG" "$DIRNAME/res/drawable-xhdpi/icon_fg.png"
|
||||
convert -scale 324x324 "$APP_ICON_ADAPTIVE_FG" "$DIRNAME/res/drawable-xxhdpi/icon_fg.png"
|
||||
convert -scale 432x432 "$APP_ICON_ADAPTIVE_FG" "$DIRNAME/res/drawable-xxxhdpi/icon_fg.png"
|
||||
|
||||
export ANDROID_HOME="$SDK_PATH"
|
||||
./gradlew -Pcompile_sdk_version="$COMPILE_SDK_VERSION" \
|
||||
-Pmin_sdk_version="$STK_MIN_ANDROID_SDK" \
|
||||
-Ptarget_sdk_version="$STK_TARGET_ANDROID_SDK" \
|
||||
-Pstorepass="$STK_STOREPASS" \
|
||||
-Pkeystore="$STK_KEYSTORE" \
|
||||
-Palias="$STK_ALIAS" \
|
||||
-Pndk_version="$STK_NDK_VERSION" \
|
||||
-Pcompile_arch="$COMPILE_ARCH" \
|
||||
-Pcpu_core="$CPU_CORE" \
|
||||
-Ppackage_name="$PACKAGE_NAME" \
|
||||
-Pversion_name="$PROJECT_VERSION" \
|
||||
-Pversion_code="$PROJECT_CODE" \
|
||||
$GRADLE_BUILD_TYPE
|
||||
|
||||
if [ "$GRADLE_BUILD_TYPE" = "assembleRelease" ]; then
|
||||
./gradlew -Pcompile_sdk_version="$COMPILE_SDK_VERSION" \
|
||||
-Pmin_sdk_version="$STK_MIN_ANDROID_SDK" \
|
||||
-Ptarget_sdk_version="$STK_TARGET_ANDROID_SDK" \
|
||||
-Pstorepass="$STK_STOREPASS" \
|
||||
-Pkeystore="$STK_KEYSTORE" \
|
||||
-Palias="$STK_ALIAS" \
|
||||
-Pndk_version="$STK_NDK_VERSION" \
|
||||
-Pcompile_arch="$COMPILE_ARCH" \
|
||||
-Pcpu_core="$CPU_CORE" \
|
||||
-Ppackage_name="$PACKAGE_NAME" \
|
||||
-Pversion_name="$PROJECT_VERSION" \
|
||||
-Pversion_code="$PROJECT_CODE" \
|
||||
"bundleRelease"
|
||||
fi
|
||||
|
||||
check_error
|
@ -1,374 +0,0 @@
|
||||
#!/bin/sh
|
||||
# Tested with NDK 22.1.7171670
|
||||
|
||||
export DIRNAME=$(realpath "$(dirname "$0")")
|
||||
|
||||
export NDK_PATH_DEFAULT="$DIRNAME/android-ndk"
|
||||
|
||||
export ARCH_ARMV7=arm
|
||||
export HOST_ARMV7=arm-linux-androideabi
|
||||
|
||||
export ARCH_AARCH64=arm64
|
||||
export HOST_AARCH64=aarch64-linux-android
|
||||
|
||||
export ARCH_X86=x86
|
||||
export HOST_X86=i686-linux-android
|
||||
|
||||
export ARCH_X86_64=x86_64
|
||||
export HOST_X86_64=x86_64-linux-android
|
||||
|
||||
# A helper function that checks if error ocurred
|
||||
check_error()
|
||||
{
|
||||
if [ $? -gt 0 ]; then
|
||||
echo "Error ocurred."
|
||||
exit
|
||||
fi
|
||||
}
|
||||
|
||||
# Handle clean command
|
||||
if [ ! -z "$1" ] && [ "$1" = "clean" ]; then
|
||||
rm -rf "$DIRNAME/deps-armeabi-v7a"
|
||||
rm -rf "$DIRNAME/deps-arm64-v8a"
|
||||
rm -rf "$DIRNAME/deps-x86"
|
||||
rm -rf "$DIRNAME/deps-x86_64"
|
||||
exit
|
||||
fi
|
||||
|
||||
if [ -z "$NDK_PATH" ]; then
|
||||
export NDK_PATH="$NDK_PATH_DEFAULT"
|
||||
fi
|
||||
|
||||
if [ -z "$STK_NDK_VERSION" ]; then
|
||||
export STK_NDK_VERSION=23.1.7779620
|
||||
fi
|
||||
|
||||
NDK_PATH="$(realpath "$NDK_PATH")/${STK_NDK_VERSION}"
|
||||
if [ ! -d "$NDK_PATH" ]; then
|
||||
echo "Error: Couldn't find $NDK_PATH directory. Please create a symlink" \
|
||||
"to your Android NDK installation in the $NDK_PATH_DEFAULT or set" \
|
||||
"proper path in the NDK_PATH variable"
|
||||
exit
|
||||
fi
|
||||
|
||||
export NDK_TOOLCHAIN_PATH="$NDK_PATH/toolchains/llvm/prebuilt/linux-x86_64/bin"
|
||||
export NDK_SYSROOT="$NDK_PATH/toolchains/llvm/prebuilt/linux-x86_64/sysroot"
|
||||
export PATH="$NDK_TOOLCHAIN_PATH:$PATH"
|
||||
|
||||
build_deps()
|
||||
{
|
||||
export ARCH_OPTION=$1
|
||||
if [ "$ARCH_OPTION" = "armv7" ]; then
|
||||
ARCH_OPTION="armeabi-v7a"
|
||||
export ARCH=$ARCH_ARMV7
|
||||
# Special case
|
||||
export HOST=armv7a-linux-androideabi16
|
||||
export HOST_DIR=$HOST_ARMV7
|
||||
elif [ "$ARCH_OPTION" = "aarch64" ]; then
|
||||
ARCH_OPTION="arm64-v8a"
|
||||
export ARCH=$ARCH_AARCH64
|
||||
export HOST_DIR=$HOST_AARCH64
|
||||
export HOST="${HOST_DIR}21"
|
||||
elif [ "$ARCH_OPTION" = "x86" ]; then
|
||||
export ARCH=$ARCH_X86
|
||||
export HOST_DIR=$HOST_X86
|
||||
export HOST="${HOST_DIR}16"
|
||||
elif [ "$ARCH_OPTION" = "x86_64" ]; then
|
||||
export ARCH=$ARCH_X86_64
|
||||
export HOST_DIR=$HOST_X86_64
|
||||
export HOST="${HOST_DIR}21"
|
||||
else
|
||||
echo "Unknown architecture: $1. Possible values are:"\
|
||||
"all, armv7, aarch64, x86, x86_64"
|
||||
exit
|
||||
fi
|
||||
|
||||
# Zlib
|
||||
if [ ! -f "$DIRNAME/deps-$ARCH_OPTION/zlib.stamp" ]; then
|
||||
echo "Compiling $ARCH_OPTION zlib"
|
||||
mkdir -p "$DIRNAME/deps-$ARCH_OPTION/zlib"
|
||||
cp -a -f "$DIRNAME/../lib/zlib/"* "$DIRNAME/deps-$ARCH_OPTION/zlib"
|
||||
|
||||
cd "$DIRNAME/deps-$ARCH_OPTION/zlib"
|
||||
cmake . -DCMAKE_TOOLCHAIN_FILE=../../../cmake/Toolchain-android.cmake \
|
||||
-DHOST=$HOST -DARCH=$ARCH -DCMAKE_C_FLAGS="-fpic -O3 -g" &&
|
||||
make -j $(($(nproc) + 1))
|
||||
check_error
|
||||
touch "$DIRNAME/deps-$ARCH_OPTION/zlib.stamp"
|
||||
fi
|
||||
|
||||
# Libpng
|
||||
if [ ! -f "$DIRNAME/deps-$ARCH_OPTION/libpng.stamp" ]; then
|
||||
echo "Compiling $ARCH_OPTION libpng"
|
||||
mkdir -p "$DIRNAME/deps-$ARCH_OPTION/libpng"
|
||||
mkdir -p "$DIRNAME/deps-$ARCH_OPTION/libpng/lib"
|
||||
cp -a -f "$DIRNAME/../lib/libpng/"* "$DIRNAME/deps-$ARCH_OPTION/libpng"
|
||||
|
||||
cd "$DIRNAME/deps-$ARCH_OPTION/libpng"
|
||||
MLIBRARY="$NDK_SYSROOT/usr/lib/$HOST_DIR/libm.a"
|
||||
cmake . -DCMAKE_TOOLCHAIN_FILE=../../../cmake/Toolchain-android.cmake \
|
||||
-DHOST=$HOST -DARCH=$ARCH \
|
||||
-DZLIB_LIBRARY="$DIRNAME/deps-$ARCH_OPTION/zlib/libz.a" \
|
||||
-DZLIB_INCLUDE_DIR="$DIRNAME/deps-$ARCH_OPTION/zlib/" \
|
||||
-DM_LIBRARY="$MLIBRARY" \
|
||||
-DPNG_TESTS=0 -DCMAKE_C_FLAGS="-fpic -O3 -g" &&
|
||||
make -j $(($(nproc) + 1))
|
||||
check_error
|
||||
touch "$DIRNAME/deps-$ARCH_OPTION/libpng.stamp"
|
||||
fi
|
||||
|
||||
# Freetype bootstrap
|
||||
if [ ! -f "$DIRNAME/deps-$ARCH_OPTION/freetype_bootstrap.stamp" ]; then
|
||||
echo "Compiling $ARCH_OPTION freetype bootstrap"
|
||||
mkdir -p "$DIRNAME/deps-$ARCH_OPTION/freetype/build"
|
||||
cp -a -f "$DIRNAME/../lib/freetype/"* "$DIRNAME/deps-$ARCH_OPTION/freetype"
|
||||
cd "$DIRNAME/deps-$ARCH_OPTION/freetype/build"
|
||||
cmake .. -DCMAKE_TOOLCHAIN_FILE=../../../cmake/Toolchain-android.cmake \
|
||||
-DHOST=$HOST -DARCH=$ARCH \
|
||||
-DZLIB_LIBRARY="$DIRNAME/deps-$ARCH_OPTION/zlib/libz.a" \
|
||||
-DZLIB_INCLUDE_DIR="$DIRNAME/deps-$ARCH_OPTION/zlib/" \
|
||||
-DPNG_LIBRARY="$DIRNAME/deps-$ARCH_OPTION/libpng/libpng.a" \
|
||||
-DPNG_PNG_INCLUDE_DIR="$DIRNAME/deps-$ARCH_OPTION/libpng/" \
|
||||
-DFT_WITH_HARFBUZZ=OFF -DFT_WITH_BZIP2=OFF \
|
||||
-DFT_WITH_BROTLI=OFF -DFT_WITH_ZLIB=ON -DFT_WITH_PNG=ON \
|
||||
-DCMAKE_C_FLAGS="-fpic -O3 -g" &&
|
||||
make -j $(($(nproc) + 1))
|
||||
check_error
|
||||
# We need to rebuild freetype after harfbuzz is compiled
|
||||
touch "$DIRNAME/deps-$ARCH_OPTION/freetype_bootstrap.stamp"
|
||||
fi
|
||||
|
||||
# Harfbuzz
|
||||
if [ ! -f "$DIRNAME/deps-$ARCH_OPTION/harfbuzz.stamp" ]; then
|
||||
echo "Compiling $ARCH_OPTION harfbuzz"
|
||||
mkdir -p "$DIRNAME/deps-$ARCH_OPTION/harfbuzz/build"
|
||||
cp -a -f "$DIRNAME/../lib/harfbuzz/"* "$DIRNAME/deps-$ARCH_OPTION/harfbuzz"
|
||||
|
||||
cd "$DIRNAME/deps-$ARCH_OPTION/harfbuzz/build"
|
||||
cmake .. -DCMAKE_TOOLCHAIN_FILE=../../../cmake/Toolchain-android.cmake \
|
||||
-DHOST=$HOST -DARCH=$ARCH -DBUILD_SHARED_LIBS=OFF \
|
||||
-DFREETYPE_LIBRARY="$DIRNAME/deps-$ARCH_OPTION/freetype/build/libfreetype.a $DIRNAME/deps-$ARCH_OPTION/libpng/libpng.a $DIRNAME/deps-$ARCH_OPTION/zlib/libz.a" \
|
||||
-DFREETYPE_INCLUDE_DIRS="$DIRNAME/deps-$ARCH_OPTION/freetype/include/" \
|
||||
-DHB_HAVE_GLIB=OFF -DHB_HAVE_GOBJECT=OFF -DHB_HAVE_ICU=OFF \
|
||||
-DHB_HAVE_FREETYPE=ON -DHB_BUILD_SUBSET=OFF \
|
||||
-DCMAKE_C_FLAGS="-fpic -O3 -g" -DCMAKE_CXX_FLAGS="-std=gnu++0x -fpic -O3 -g" &&
|
||||
make -j $(($(nproc) + 1))
|
||||
check_error
|
||||
mkdir -p "$DIRNAME/deps-$ARCH_OPTION/harfbuzz/include/harfbuzz"
|
||||
cp $DIRNAME/deps-$ARCH_OPTION/harfbuzz/src/*.h "$DIRNAME/deps-$ARCH_OPTION/harfbuzz/include/harfbuzz"
|
||||
touch "$DIRNAME/deps-$ARCH_OPTION/harfbuzz.stamp"
|
||||
fi
|
||||
|
||||
# Freetype
|
||||
if [ ! -f "$DIRNAME/deps-$ARCH_OPTION/freetype.stamp" ]; then
|
||||
echo "Compiling $ARCH_OPTION freetype"
|
||||
cd "$DIRNAME/deps-$ARCH_OPTION/freetype/build"
|
||||
rm -rf *
|
||||
cmake .. -DCMAKE_TOOLCHAIN_FILE=../../../cmake/Toolchain-android.cmake \
|
||||
-DHOST=$HOST -DARCH=$ARCH \
|
||||
-DZLIB_LIBRARY="$DIRNAME/deps-$ARCH_OPTION/zlib/libz.a" \
|
||||
-DZLIB_INCLUDE_DIR="$DIRNAME/deps-$ARCH_OPTION/zlib/" \
|
||||
-DPNG_LIBRARY="$DIRNAME/deps-$ARCH_OPTION/libpng/libpng.a" \
|
||||
-DPNG_PNG_INCLUDE_DIR="$DIRNAME/deps-$ARCH_OPTION/libpng/" \
|
||||
-DHarfBuzz_LIBRARY="$DIRNAME/deps-$ARCH_OPTION/harfbuzz/build/libharfbuzz.a" \
|
||||
-DHarfBuzz_INCLUDE_DIR="$DIRNAME/deps-$ARCH_OPTION/harfbuzz/src/" \
|
||||
-DFT_WITH_HARFBUZZ=ON -DFT_WITH_BZIP2=OFF \
|
||||
-DFT_WITH_BROTLI=OFF -DFT_WITH_ZLIB=ON -DFT_WITH_PNG=ON \
|
||||
-DCMAKE_C_FLAGS="-fpic -O3 -g" &&
|
||||
make -j $(($(nproc) + 1))
|
||||
check_error
|
||||
touch "$DIRNAME/deps-$ARCH_OPTION/freetype.stamp"
|
||||
fi
|
||||
|
||||
# Openal
|
||||
if [ ! -f "$DIRNAME/deps-$ARCH_OPTION/openal.stamp" ]; then
|
||||
echo "Compiling $ARCH_OPTION openal"
|
||||
mkdir -p "$DIRNAME/deps-$ARCH_OPTION/openal"
|
||||
cp -a -f "$DIRNAME/../lib/openal/"* "$DIRNAME/deps-$ARCH_OPTION/openal"
|
||||
|
||||
cd "$DIRNAME/deps-$ARCH_OPTION/openal"
|
||||
cmake . -DCMAKE_TOOLCHAIN_FILE=../../../cmake/Toolchain-android.cmake \
|
||||
-DHOST=$HOST -DARCH=$ARCH -DALSOFT_UTILS=0 -DALSOFT_EXAMPLES=0 \
|
||||
-DLIBTYPE=STATIC -DOPENSL_LIBRARY="-lOpenSLES" \
|
||||
-DOPENSL_INCLUDE_DIR="$NDK_SYSROOT/usr/include/SLES/" \
|
||||
-DOPENSL_ANDROID_INCLUDE_DIR="$NDK_SYSROOT/usr/include/SLES/" \
|
||||
-DCMAKE_C_FLAGS="-fpic -O3 -g" -DCMAKE_CXX_FLAGS="-fpic -O3 -g" &&
|
||||
make -j $(($(nproc) + 1))
|
||||
check_error
|
||||
touch "$DIRNAME/deps-$ARCH_OPTION/openal.stamp"
|
||||
fi
|
||||
|
||||
# MbedTLS
|
||||
if [ ! -f "$DIRNAME/deps-$ARCH_OPTION/mbedtls.stamp" ]; then
|
||||
echo "Compiling $ARCH_OPTION mbedtls"
|
||||
mkdir -p "$DIRNAME/deps-$ARCH_OPTION/mbedtls"
|
||||
cp -a -f "$DIRNAME/../lib/mbedtls/"* "$DIRNAME/deps-$ARCH_OPTION/mbedtls"
|
||||
|
||||
cd "$DIRNAME/deps-$ARCH_OPTION/mbedtls"
|
||||
cmake . -DCMAKE_TOOLCHAIN_FILE=../../../cmake/Toolchain-android.cmake \
|
||||
-DHOST=$HOST -DARCH=$ARCH -DBUILD_SHARED_LIBS=OFF \
|
||||
-DENABLE_TESTING=OFF -DENABLE_PROGRAMS=OFF \
|
||||
-DCMAKE_C_FLAGS="-fpic -O3 -g" &&
|
||||
make -j $(($(nproc) + 1))
|
||||
check_error
|
||||
touch "$DIRNAME/deps-$ARCH_OPTION/mbedtls.stamp"
|
||||
fi
|
||||
|
||||
# Curl
|
||||
if [ ! -f "$DIRNAME/deps-$ARCH_OPTION/curl.stamp" ]; then
|
||||
echo "Compiling $ARCH_OPTION curl"
|
||||
mkdir -p "$DIRNAME/deps-$ARCH_OPTION/curl"
|
||||
cp -a -f "$DIRNAME/../lib/curl/"* "$DIRNAME/deps-$ARCH_OPTION/curl"
|
||||
|
||||
cd "$DIRNAME/deps-$ARCH_OPTION/curl"
|
||||
cmake . -DCMAKE_TOOLCHAIN_FILE=../../../cmake/Toolchain-android.cmake \
|
||||
-DHOST=$HOST -DARCH=$ARCH -DBUILD_SHARED_LIBS=OFF \
|
||||
-DZLIB_LIBRARY="$DIRNAME/deps-$ARCH_OPTION/zlib/libz.a" \
|
||||
-DZLIB_INCLUDE_DIR="$DIRNAME/deps-$ARCH_OPTION/zlib/" \
|
||||
-DMBEDCRYPTO_LIBRARY="$DIRNAME/deps-$ARCH_OPTION/mbedtls/library/libmbedcrypto.a" \
|
||||
-DMBEDTLS_LIBRARY="$DIRNAME/deps-$ARCH_OPTION/mbedtls/library/libmbedtls.a" \
|
||||
-DMBEDX509_LIBRARY="$DIRNAME/deps-$ARCH_OPTION/mbedtls/library/libmbedx509.a" \
|
||||
-DMBEDTLS_INCLUDE_DIRS="$DIRNAME/deps-$ARCH_OPTION/mbedtls/include/" \
|
||||
-DBUILD_TESTING=OFF -DBUILD_CURL_EXE=OFF \
|
||||
-DCURL_USE_MBEDTLS=ON -DUSE_ZLIB=ON -DCURL_USE_OPENSSL=OFF \
|
||||
-DCURL_USE_LIBSSH=OFF -DCURL_USE_LIBSSH2=OFF \
|
||||
-DCURL_USE_GSSAPI=OFF -DUSE_NGHTTP2=OFF -DUSE_QUICHE=OFF \
|
||||
-DHTTP_ONLY=ON -DCURL_CA_BUNDLE=none -DCURL_CA_PATH=none \
|
||||
-DENABLE_THREADED_RESOLVER=ON -DCMAKE_C_FLAGS="-fpic -O3 -g" &&
|
||||
make -j $(($(nproc) + 1))
|
||||
check_error
|
||||
touch "$DIRNAME/deps-$ARCH_OPTION/curl.stamp"
|
||||
fi
|
||||
|
||||
# Libjpeg
|
||||
if [ ! -f "$DIRNAME/deps-$ARCH_OPTION/libjpeg.stamp" ]; then
|
||||
echo "Compiling $ARCH_OPTION libjpeg"
|
||||
mkdir -p "$DIRNAME/deps-$ARCH_OPTION/libjpeg"
|
||||
cp -a -f "$DIRNAME/../lib/libjpeg/"* "$DIRNAME/deps-$ARCH_OPTION/libjpeg"
|
||||
|
||||
cd "$DIRNAME/deps-$ARCH_OPTION/libjpeg"
|
||||
cmake . -DCMAKE_TOOLCHAIN_FILE=../../../cmake/Toolchain-android.cmake \
|
||||
-DHOST=$HOST -DARCH=$ARCH -DCMAKE_C_FLAGS="-fpic -O3 -g" &&
|
||||
make -j $(($(nproc) + 1))
|
||||
check_error
|
||||
touch "$DIRNAME/deps-$ARCH_OPTION/libjpeg.stamp"
|
||||
fi
|
||||
|
||||
# Libogg
|
||||
if [ ! -f "$DIRNAME/deps-$ARCH_OPTION/libogg.stamp" ]; then
|
||||
echo "Compiling $ARCH_OPTION libogg"
|
||||
mkdir -p "$DIRNAME/deps-$ARCH_OPTION/libogg"
|
||||
cp -a -f "$DIRNAME/../lib/libogg/"* "$DIRNAME/deps-$ARCH_OPTION/libogg"
|
||||
|
||||
cd "$DIRNAME/deps-$ARCH_OPTION/libogg"
|
||||
cmake . -DCMAKE_TOOLCHAIN_FILE=../../../cmake/Toolchain-android.cmake \
|
||||
-DHOST=$HOST -DARCH=$ARCH -DCMAKE_C_FLAGS="-fpic -O3 -g" &&
|
||||
make -j $(($(nproc) + 1))
|
||||
check_error
|
||||
touch "$DIRNAME/deps-$ARCH_OPTION/libogg.stamp"
|
||||
fi
|
||||
|
||||
# Libvorbis
|
||||
if [ ! -f "$DIRNAME/deps-$ARCH_OPTION/libvorbis.stamp" ]; then
|
||||
echo "Compiling $ARCH_OPTION libvorbis"
|
||||
mkdir -p "$DIRNAME/deps-$ARCH_OPTION/libvorbis"
|
||||
cp -a -f "$DIRNAME/../lib/libvorbis/"* "$DIRNAME/deps-$ARCH_OPTION/libvorbis"
|
||||
|
||||
cd "$DIRNAME/deps-$ARCH_OPTION/libvorbis"
|
||||
cmake . -DCMAKE_TOOLCHAIN_FILE=../../../cmake/Toolchain-android.cmake \
|
||||
-DHOST=$HOST -DARCH=$ARCH -DCMAKE_C_FLAGS="-fpic -O3 -g" \
|
||||
-DOGG_LIBRARY="$DIRNAME/deps-$ARCH_OPTION/libogg/libogg.a" \
|
||||
-DOGG_INCLUDE_DIR="$DIRNAME/deps-$ARCH_OPTION/libogg/include" &&
|
||||
make -j $(($(nproc) + 1))
|
||||
check_error
|
||||
touch "$DIRNAME/deps-$ARCH_OPTION/libvorbis.stamp"
|
||||
fi
|
||||
|
||||
# Shaderc
|
||||
if [ ! -f "$DIRNAME/deps-$ARCH_OPTION/shaderc.stamp" ]; then
|
||||
echo "Compiling $ARCH_OPTION shaderc"
|
||||
mkdir -p "$DIRNAME/deps-$ARCH_OPTION/shaderc"
|
||||
cp -a -f "$DIRNAME/../lib/shaderc/"* "$DIRNAME/deps-$ARCH_OPTION/shaderc"
|
||||
|
||||
cd "$DIRNAME/deps-$ARCH_OPTION/shaderc"
|
||||
cmake . -DCMAKE_TOOLCHAIN_FILE=../../../cmake/Toolchain-android.cmake \
|
||||
-DHOST=$HOST -DARCH=$ARCH -DCMAKE_C_FLAGS="-fpic -O3" \
|
||||
-DCMAKE_CXX_FLAGS="-fpic -O3" -DSHADERC_SKIP_INSTALL=1 \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DSHADERC_SKIP_TESTS=1 -DSHADERC_SKIP_EXAMPLES=1 \
|
||||
-DSPIRV_HEADERS_SKIP_INSTALL=1 -DSPIRV_HEADERS_SKIP_EXAMPLES=1 \
|
||||
-DSKIP_SPIRV_TOOLS_INSTALL=1 -DSPIRV_SKIP_TESTS=1 \
|
||||
-DSPIRV_SKIP_EXECUTABLES=1 -DENABLE_GLSLANG_BINARIES=0 \
|
||||
-DENABLE_CTEST=0 &&
|
||||
make -j $(($(nproc) + 1))
|
||||
# Strip debug symbol to make app bundle smaller
|
||||
llvm-strip --strip-debug "$DIRNAME/deps-$ARCH_OPTION/shaderc/libshaderc/libshaderc_combined.a"
|
||||
check_error
|
||||
touch "$DIRNAME/deps-$ARCH_OPTION/shaderc.stamp"
|
||||
fi
|
||||
|
||||
# Libsquish
|
||||
if [ ! -f "$DIRNAME/deps-$ARCH_OPTION/libsquish.stamp" ]; then
|
||||
echo "Compiling $ARCH_OPTION libsquish"
|
||||
mkdir -p "$DIRNAME/deps-$ARCH_OPTION/libsquish"
|
||||
cp -a -f "$DIRNAME/../lib/libsquish/"* "$DIRNAME/deps-$ARCH_OPTION/libsquish"
|
||||
|
||||
cd "$DIRNAME/deps-$ARCH_OPTION/libsquish"
|
||||
if [[ "$ARCH_OPTION" = "x86" || "$ARCH_OPTION" = "x86_64" ]]; then
|
||||
cmake . -DCMAKE_TOOLCHAIN_FILE=../../../cmake/Toolchain-android.cmake \
|
||||
-DHOST=$HOST -DARCH=$ARCH \
|
||||
-DCMAKE_C_FLAGS="-fpic -O3 -g -DSQUISH_USE_SSE=2 -msse2" \
|
||||
-DCMAKE_CXX_FLAGS="-fpic -O3 -g -DSQUISH_USE_SSE=2 -msse2"
|
||||
else
|
||||
cmake . -DCMAKE_TOOLCHAIN_FILE=../../../cmake/Toolchain-android.cmake \
|
||||
-DHOST=$HOST -DARCH=$ARCH -DCMAKE_C_FLAGS="-fpic -O3 -g" \
|
||||
-DCMAKE_CXX_FLAGS="-fpic -O3 -g"
|
||||
fi
|
||||
make -j $(($(nproc) + 1))
|
||||
check_error
|
||||
touch "$DIRNAME/deps-$ARCH_OPTION/libsquish.stamp"
|
||||
fi
|
||||
|
||||
# ASTC-encoder
|
||||
if [ ! -f "$DIRNAME/deps-$ARCH_OPTION/astc-encoder.stamp" ]; then
|
||||
echo "Compiling $ARCH_OPTION astc-encoder"
|
||||
mkdir -p "$DIRNAME/deps-$ARCH_OPTION/astc-encoder"
|
||||
cp -a -f "$DIRNAME/../lib/astc-encoder/"* "$DIRNAME/deps-$ARCH_OPTION/astc-encoder"
|
||||
|
||||
cd "$DIRNAME/deps-$ARCH_OPTION/astc-encoder"
|
||||
sed -i '/-Werror/d' Source/cmake_core.cmake
|
||||
sed -i 's|${ASTCENC_TARGET}-static|astcenc|g' Source/cmake_core.cmake
|
||||
if [ "$ARCH_OPTION" = "armeabi-v7a" ]; then
|
||||
cmake . -DCMAKE_TOOLCHAIN_FILE=../../../cmake/Toolchain-android.cmake \
|
||||
-DHOST=$HOST -DARCH=$ARCH -DSTK_ARM_NEON=ON \
|
||||
-DCMAKE_C_FLAGS="-fpic -O3 -g -mfpu=neon" \
|
||||
-DCMAKE_CXX_FLAGS="-fpic -O3 -g -mfpu=neon" \
|
||||
-DASTCENC_INVARIANCE=OFF -DASTCENC_CLI=OFF
|
||||
elif [ "$ARCH_OPTION" = "arm64-v8a" ]; then
|
||||
cmake . -DCMAKE_TOOLCHAIN_FILE=../../../cmake/Toolchain-android.cmake \
|
||||
-DHOST=$HOST -DARCH=$ARCH -DCMAKE_C_FLAGS="-fpic -O3 -g" \
|
||||
-DCMAKE_CXX_FLAGS="-fpic -O3 -g" \
|
||||
-DASTCENC_ISA_NEON=ON -DASTCENC_INVARIANCE=OFF -DASTCENC_CLI=OFF
|
||||
else
|
||||
if [ "$ARCH_OPTION" = "x86" ]; then
|
||||
sed -i 's/_mm_popcnt_u64/__builtin_popcountll/g' Source/astcenc_vecmathlib_sse_4.h
|
||||
fi
|
||||
cmake . -DCMAKE_TOOLCHAIN_FILE=../../../cmake/Toolchain-android.cmake \
|
||||
-DHOST=$HOST -DARCH=$ARCH -DCMAKE_C_FLAGS="-fpic -O3 -g" \
|
||||
-DCMAKE_CXX_FLAGS="-fpic -O3 -g" \
|
||||
-DASTCENC_ISA_SSE41=ON -DASTCENC_INVARIANCE=OFF -DASTCENC_CLI=OFF
|
||||
fi
|
||||
make -j $(($(nproc) + 1))
|
||||
check_error
|
||||
touch "$DIRNAME/deps-$ARCH_OPTION/astc-encoder.stamp"
|
||||
fi
|
||||
}
|
||||
|
||||
if [ -z "$COMPILE_ARCH" ] || [ "$COMPILE_ARCH" = "all" ]; then
|
||||
build_deps armv7
|
||||
build_deps aarch64
|
||||
build_deps x86
|
||||
build_deps x86_64
|
||||
else
|
||||
build_deps "$COMPILE_ARCH"
|
||||
fi
|
@ -1,298 +0,0 @@
|
||||
package org.supertuxkart.stk_dbg;
|
||||
|
||||
import org.libsdl.app.SDLActivity;
|
||||
import org.supertuxkart.stk_dbg.STKInputConnection;
|
||||
|
||||
import android.content.Context;
|
||||
import android.text.InputType;
|
||||
import android.view.inputmethod.EditorInfo;
|
||||
import android.view.inputmethod.InputConnection;
|
||||
import android.view.inputmethod.InputMethodManager;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.View;
|
||||
import android.widget.EditText;
|
||||
import android.widget.TextView;
|
||||
|
||||
// We need to extend EditText instead of view to allow copying to our STK
|
||||
// editbox
|
||||
public class STKEditText extends EditText
|
||||
{
|
||||
private int m_composing_start;
|
||||
|
||||
private int m_composing_end;
|
||||
|
||||
/* Used to prevent copying text to non focused widget in STK. */
|
||||
private int m_stk_widget_id;
|
||||
|
||||
private STKInputConnection m_stk_input_connection;
|
||||
|
||||
/* Used to avoid infinite calling updateSTKEditBox if setText currently
|
||||
* by jni or clearing text when out focus. */
|
||||
private boolean m_from_stk_editbox;
|
||||
// ------------------------------------------------------------------------
|
||||
private native static void editText2STKEditbox(int widget_id,
|
||||
String full_text, int start,
|
||||
int end,
|
||||
int composing_start,
|
||||
int composing_end);
|
||||
// ------------------------------------------------------------------------
|
||||
private native static void handleActionNext(int widget_id);
|
||||
// ------------------------------------------------------------------------
|
||||
private native static void handleLeftRight(boolean left, int widget_id);
|
||||
// ------------------------------------------------------------------------
|
||||
public STKEditText(Context context)
|
||||
{
|
||||
super(context);
|
||||
setInputType(InputType.TYPE_CLASS_TEXT);
|
||||
setFocusableInTouchMode(true);
|
||||
m_composing_start = 0;
|
||||
m_composing_end = 0;
|
||||
m_stk_widget_id = -1;
|
||||
m_from_stk_editbox = false;
|
||||
m_stk_input_connection = null;
|
||||
setOnEditorActionListener(new EditText.OnEditorActionListener()
|
||||
{
|
||||
@Override
|
||||
public boolean onEditorAction(TextView v, int action_id,
|
||||
KeyEvent event)
|
||||
{
|
||||
if (action_id == EditorInfo.IME_ACTION_NEXT)
|
||||
{
|
||||
handleActionNext(m_stk_widget_id);
|
||||
// STK will handle the closing of the screen keyboard
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
});
|
||||
setOnKeyListener(new EditText.OnKeyListener()
|
||||
{
|
||||
@Override
|
||||
public boolean onKey(View v, int keyCode, KeyEvent event)
|
||||
{
|
||||
// Up or down pressed, leave focus
|
||||
if (keyCode == KeyEvent.KEYCODE_DPAD_UP ||
|
||||
keyCode == KeyEvent.KEYCODE_DPAD_DOWN)
|
||||
{
|
||||
if (event.getAction() == KeyEvent.ACTION_DOWN)
|
||||
{
|
||||
beforeHideKeyboard(true/*clear_text*/);
|
||||
SDLActivity.onNativeKeyDown(keyCode);
|
||||
SDLActivity.onNativeKeyUp(keyCode);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
// For left or right let STK decides
|
||||
else if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT &&
|
||||
getSelectionStart() == 0)
|
||||
{
|
||||
if (event.getAction() == KeyEvent.ACTION_DOWN)
|
||||
{
|
||||
beforeHideKeyboard(true/*clear_text*/);
|
||||
handleLeftRight(true, m_stk_widget_id);
|
||||
}
|
||||
else
|
||||
updateSTKEditBox();
|
||||
return true;
|
||||
}
|
||||
else if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT &&
|
||||
getSelectionEnd() == getText().length())
|
||||
{
|
||||
if (event.getAction() == KeyEvent.ACTION_DOWN)
|
||||
{
|
||||
beforeHideKeyboard(true/*clear_text*/);
|
||||
handleLeftRight(false, m_stk_widget_id);
|
||||
}
|
||||
else
|
||||
updateSTKEditBox();
|
||||
return true;
|
||||
}
|
||||
else if (keyCode == KeyEvent.KEYCODE_ENTER)
|
||||
{
|
||||
if (event.getAction() == KeyEvent.ACTION_DOWN)
|
||||
handleActionNext(m_stk_widget_id);
|
||||
return true;
|
||||
}
|
||||
|
||||
// Requires for hardware key like "Ctrl-a" so it will select
|
||||
// all text in stk edit box
|
||||
updateSTKEditBox();
|
||||
return false;
|
||||
}
|
||||
});
|
||||
}
|
||||
// ------------------------------------------------------------------------
|
||||
@Override
|
||||
public InputConnection onCreateInputConnection(EditorInfo out_attrs)
|
||||
{
|
||||
if (m_stk_input_connection == null)
|
||||
{
|
||||
m_stk_input_connection = new STKInputConnection(
|
||||
super.onCreateInputConnection(out_attrs), this);
|
||||
}
|
||||
out_attrs.actionLabel = null;
|
||||
out_attrs.inputType = getInputType();
|
||||
out_attrs.imeOptions = EditorInfo.IME_ACTION_NEXT |
|
||||
EditorInfo.IME_FLAG_NO_FULLSCREEN |
|
||||
EditorInfo.IME_FLAG_NO_EXTRACT_UI;
|
||||
return m_stk_input_connection;
|
||||
}
|
||||
// ------------------------------------------------------------------------
|
||||
@Override
|
||||
public boolean onCheckIsTextEditor() { return true; }
|
||||
// ------------------------------------------------------------------------
|
||||
@Override
|
||||
public boolean onKeyPreIme(int key_code, KeyEvent event)
|
||||
{
|
||||
// Always remove the focus on STKEdit when pressing back button in
|
||||
// phone, which hideSoftInputFromWindow is called by java itself
|
||||
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK &&
|
||||
event.getAction() == KeyEvent.ACTION_UP)
|
||||
beforeHideKeyboard(false/*clear_text*/);
|
||||
return false;
|
||||
}
|
||||
// ------------------------------------------------------------------------
|
||||
public void setComposingRegion(int start, int end)
|
||||
{
|
||||
// From doc of InputConnectionWrapper, it says:
|
||||
// Editor authors, be ready to accept a start that is greater than end.
|
||||
if (start != end && start > end)
|
||||
{
|
||||
m_composing_end = start;
|
||||
m_composing_start = end;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_composing_start = start;
|
||||
m_composing_end = end;
|
||||
}
|
||||
}
|
||||
// ------------------------------------------------------------------------
|
||||
public void updateSTKEditBox()
|
||||
{
|
||||
if (!isFocused() || m_from_stk_editbox)
|
||||
return;
|
||||
editText2STKEditbox(m_stk_widget_id, getText().toString(),
|
||||
getSelectionStart(), getSelectionEnd(), m_composing_start,
|
||||
m_composing_end);
|
||||
}
|
||||
// ------------------------------------------------------------------------
|
||||
public void beforeHideKeyboard(final boolean clear_text)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (clear_text)
|
||||
{
|
||||
// No need updating stk editbox on clearing text when out focus
|
||||
m_from_stk_editbox = true;
|
||||
{
|
||||
super.clearComposingText();
|
||||
super.getText().clear();
|
||||
}
|
||||
m_from_stk_editbox = false;
|
||||
}
|
||||
clearFocus();
|
||||
setVisibility(View.GONE);
|
||||
SDLActivity.reFocusAfterSTKEditText();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
m_from_stk_editbox = false;
|
||||
}
|
||||
}
|
||||
// ------------------------------------------------------------------------
|
||||
/* Called by STK with JNI to set this view with new text (like user focus
|
||||
* a new editbox in stk, or change cursor / selection). */
|
||||
public void setTextFromSTK(int widget_id, final String text,
|
||||
int selection_start, int selection_end)
|
||||
{
|
||||
m_stk_widget_id = widget_id;
|
||||
// Avoid sending the newly set text back to STK at the same time
|
||||
m_from_stk_editbox = true;
|
||||
try
|
||||
{
|
||||
String old_text = getText().toString();
|
||||
boolean text_changed = !text.equals(old_text);
|
||||
if (text_changed)
|
||||
{
|
||||
super.clearComposingText();
|
||||
super.setText(text);
|
||||
m_stk_input_connection.setComposingRegion(0, 0);
|
||||
}
|
||||
|
||||
if (selection_start != selection_end &&
|
||||
selection_start > selection_end)
|
||||
{
|
||||
int temp = selection_end;
|
||||
selection_end = selection_start;
|
||||
selection_start = temp;
|
||||
}
|
||||
if (selection_start < 0)
|
||||
selection_start = 0;
|
||||
if (selection_end > length())
|
||||
selection_end = length();
|
||||
|
||||
if (text_changed)
|
||||
{
|
||||
InputMethodManager imm = (InputMethodManager)getContext()
|
||||
.getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||
if (imm != null)
|
||||
{
|
||||
// From google, You should call this when the text within
|
||||
// your view changes outside of the normal input method or
|
||||
// key input flow, such as when an application calls
|
||||
// TextView.setText().
|
||||
imm.restartInput(this);
|
||||
}
|
||||
}
|
||||
setSelection(selection_start, selection_end);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
m_from_stk_editbox = false;
|
||||
}
|
||||
m_from_stk_editbox = false;
|
||||
}
|
||||
// ------------------------------------------------------------------------
|
||||
public STKInputConnection getSTKInputConnection()
|
||||
{ return m_stk_input_connection; }
|
||||
// ------------------------------------------------------------------------
|
||||
public void configType(final int type)
|
||||
{
|
||||
int it = InputType.TYPE_CLASS_TEXT;
|
||||
// Check text_box_widget.hpp for definition
|
||||
switch (type)
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
it = InputType.TYPE_CLASS_TEXT;
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
it = InputType.TYPE_CLASS_TEXT |
|
||||
InputType.TYPE_TEXT_FLAG_CAP_SENTENCES;
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
it = InputType.TYPE_TEXT_VARIATION_PASSWORD;
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
it = InputType.TYPE_CLASS_NUMBER;
|
||||
break;
|
||||
}
|
||||
case 4:
|
||||
{
|
||||
it = InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (it != getInputType())
|
||||
setInputType(it);
|
||||
}
|
||||
}
|
@ -1,68 +0,0 @@
|
||||
package org.supertuxkart.stk_dbg;
|
||||
|
||||
import org.supertuxkart.stk_dbg.STKEditText;
|
||||
|
||||
import android.view.inputmethod.InputConnection;
|
||||
import android.view.inputmethod.InputConnectionWrapper;
|
||||
|
||||
public class STKInputConnection extends InputConnectionWrapper
|
||||
{
|
||||
/* The global edittext which will be "copied" to the current focused STK
|
||||
* box. */
|
||||
final private STKEditText m_stk_edittext;
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
public STKInputConnection(InputConnection target, STKEditText stk_edittext)
|
||||
{
|
||||
super(target, true/*mutable*/);
|
||||
m_stk_edittext = stk_edittext;
|
||||
}
|
||||
// ------------------------------------------------------------------------
|
||||
@Override
|
||||
public boolean setComposingText(CharSequence text, int new_cursor_position)
|
||||
{
|
||||
boolean ret = super.setComposingText(text, new_cursor_position);
|
||||
String composing_text = text.toString();
|
||||
String new_text = m_stk_edittext.getText().toString();
|
||||
int composing_start = 0;
|
||||
int composing_end = 0;
|
||||
// Test last char
|
||||
if (!composing_text.isEmpty() && !new_text.isEmpty() &&
|
||||
composing_text.charAt(composing_text.length() - 1) ==
|
||||
new_text.charAt(new_text.length() - 1))
|
||||
{
|
||||
composing_start = new_text.length() - composing_text.length();
|
||||
composing_end = composing_start + composing_text.length();
|
||||
}
|
||||
m_stk_edittext.setComposingRegion(composing_start, composing_end);
|
||||
m_stk_edittext.updateSTKEditBox();
|
||||
return ret;
|
||||
}
|
||||
// ------------------------------------------------------------------------
|
||||
@Override
|
||||
public boolean finishComposingText()
|
||||
{
|
||||
m_stk_edittext.setComposingRegion(0, 0);
|
||||
m_stk_edittext.updateSTKEditBox();
|
||||
return super.finishComposingText();
|
||||
}
|
||||
// ------------------------------------------------------------------------
|
||||
@Override
|
||||
public boolean setComposingRegion(int start, int end)
|
||||
{
|
||||
m_stk_edittext.setComposingRegion(start, end);
|
||||
m_stk_edittext.updateSTKEditBox();
|
||||
return super.setComposingRegion(start, end);
|
||||
}
|
||||
// ------------------------------------------------------------------------
|
||||
@Override
|
||||
public boolean commitText(CharSequence text, int new_cursor_position)
|
||||
{
|
||||
// Usually only a single character, so dismiss composing region
|
||||
boolean ret = super.commitText(text, new_cursor_position);
|
||||
m_stk_edittext.setComposingRegion(0, 0);
|
||||
m_stk_edittext.updateSTKEditBox();
|
||||
return ret;
|
||||
}
|
||||
|
||||
}
|
@ -1,547 +0,0 @@
|
||||
package org.supertuxkart.stk_dbg;
|
||||
|
||||
import org.supertuxkart.stk_dbg.STKEditText;
|
||||
import org.libsdl.app.SDLActivity;
|
||||
import org.libsdl.app.SDL;
|
||||
|
||||
import android.animation.Animator;
|
||||
import android.animation.AnimatorListenerAdapter;
|
||||
import android.app.AlertDialog;
|
||||
import android.app.AlertDialog.Builder;
|
||||
import android.content.ActivityNotFoundException;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.res.AssetManager;
|
||||
import android.content.res.Configuration;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.drawable.BitmapDrawable;
|
||||
import android.graphics.Rect;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.Process;
|
||||
import android.text.Editable;
|
||||
import android.text.TextWatcher;
|
||||
import android.view.Display;
|
||||
import android.view.DisplayCutout;
|
||||
import android.view.Gravity;
|
||||
import android.view.inputmethod.InputMethodManager;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.ViewGroup.MarginLayoutParams;
|
||||
import android.view.ViewTreeObserver.OnGlobalLayoutListener;
|
||||
import android.view.View;
|
||||
import android.view.Window;
|
||||
import android.view.WindowInsets;
|
||||
import android.view.WindowManager;
|
||||
import android.view.WindowManager.LayoutParams;
|
||||
import android.widget.FrameLayout;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.ProgressBar;
|
||||
import android.widget.TextView;
|
||||
import android.util.DisplayMetrics;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
import java.util.Set;
|
||||
|
||||
import org.minidns.hla.DnssecResolverApi;
|
||||
import org.minidns.hla.ResolverResult;
|
||||
import org.minidns.record.SRV;
|
||||
import org.minidns.record.TXT;
|
||||
|
||||
public class SuperTuxKartActivity extends SDLActivity
|
||||
{
|
||||
private AlertDialog m_progress_dialog;
|
||||
private ProgressBar m_progress_bar;
|
||||
private ImageView m_splash_screen;
|
||||
private STKEditText m_stk_edittext;
|
||||
private int m_bottom_y;
|
||||
private int m_intial_orientation;
|
||||
private float m_top_padding;
|
||||
private float m_bottom_padding;
|
||||
private float m_left_padding;
|
||||
private float m_right_padding;
|
||||
private AtomicInteger m_keyboard_height;
|
||||
private AtomicInteger m_moved_height;
|
||||
// ------------------------------------------------------------------------
|
||||
public native static void debugMsg(String msg);
|
||||
// ------------------------------------------------------------------------
|
||||
private native static void handlePadding(boolean val);
|
||||
// ------------------------------------------------------------------------
|
||||
private native static void saveKeyboardHeight(int height);
|
||||
// ------------------------------------------------------------------------
|
||||
private native static void saveMovedHeight(int height);
|
||||
// ------------------------------------------------------------------------
|
||||
private native static void addDNSSrvRecords(String name, int weight);
|
||||
// ------------------------------------------------------------------------
|
||||
private native static void pauseRenderingJNI();
|
||||
// ------------------------------------------------------------------------
|
||||
private void showExtractProgressPrivate()
|
||||
{
|
||||
WindowManager wm =
|
||||
(WindowManager)getSystemService(Context.WINDOW_SERVICE);
|
||||
DisplayMetrics display_metrics = new DisplayMetrics();
|
||||
wm.getDefaultDisplay().getMetrics(display_metrics);
|
||||
int padding = display_metrics.widthPixels / 64;
|
||||
|
||||
LinearLayout ll = new LinearLayout(this);
|
||||
ll.setOrientation(LinearLayout.VERTICAL);
|
||||
ll.setPadding(padding, padding, padding, padding);
|
||||
ll.setGravity(Gravity.CENTER);
|
||||
|
||||
LinearLayout.LayoutParams ll_param = new LinearLayout.LayoutParams(
|
||||
ViewGroup.LayoutParams.WRAP_CONTENT,
|
||||
ViewGroup.LayoutParams.WRAP_CONTENT);
|
||||
ll_param.gravity = Gravity.CENTER;
|
||||
TextView tv = new TextView(this);
|
||||
// From values strings.xml which is generated by make.sh
|
||||
tv.setText(getString(R.string.po_extract_game_data));
|
||||
tv.setLayoutParams(ll_param);
|
||||
|
||||
ll_param = new LinearLayout.LayoutParams(
|
||||
display_metrics.widthPixels,
|
||||
LinearLayout.LayoutParams.WRAP_CONTENT);
|
||||
ll_param.gravity = Gravity.CENTER;
|
||||
ll.setLayoutParams(ll_param);
|
||||
|
||||
m_progress_bar = new ProgressBar(this, null,
|
||||
android.R.attr.progressBarStyleHorizontal);
|
||||
m_progress_bar.setIndeterminate(false);
|
||||
m_progress_bar.setPadding(0, padding, 0, padding);
|
||||
m_progress_bar.setLayoutParams(ll_param);
|
||||
ll.addView(tv);
|
||||
ll.addView(m_progress_bar);
|
||||
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(this);
|
||||
builder.setCancelable(false);
|
||||
builder.setView(ll);
|
||||
|
||||
m_progress_dialog = builder.create();
|
||||
m_progress_dialog.show();
|
||||
Window window = m_progress_dialog.getWindow();
|
||||
if (window != null)
|
||||
{
|
||||
WindowManager.LayoutParams layout_params =
|
||||
new WindowManager.LayoutParams();
|
||||
layout_params.copyFrom(
|
||||
m_progress_dialog.getWindow().getAttributes());
|
||||
layout_params.width = WindowManager.LayoutParams.MATCH_PARENT;
|
||||
layout_params.height = LinearLayout.LayoutParams.WRAP_CONTENT;
|
||||
m_progress_dialog.getWindow().setAttributes(layout_params);
|
||||
}
|
||||
}
|
||||
// ------------------------------------------------------------------------
|
||||
private void hideKeyboardNative(final boolean clear_text)
|
||||
{
|
||||
if (m_stk_edittext == null)
|
||||
return;
|
||||
|
||||
m_stk_edittext.beforeHideKeyboard(clear_text);
|
||||
|
||||
InputMethodManager imm = (InputMethodManager)
|
||||
getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||
if (imm == null)
|
||||
return;
|
||||
|
||||
imm.hideSoftInputFromWindow(m_stk_edittext.getWindowToken(), 0);
|
||||
}
|
||||
// ------------------------------------------------------------------------
|
||||
private void createSTKEditText()
|
||||
{
|
||||
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
|
||||
FrameLayout.LayoutParams.WRAP_CONTENT,
|
||||
FrameLayout.LayoutParams.WRAP_CONTENT);
|
||||
// We move the dummy edittext out of the android screen because we draw
|
||||
// our own manually
|
||||
params.setMargins(0, -100000, 1, -100010);
|
||||
m_stk_edittext = new STKEditText(this);
|
||||
// For some copy-and-paste text are not done by commitText in
|
||||
// STKInputConnection, so we need an extra watcher
|
||||
m_stk_edittext.addTextChangedListener(new TextWatcher()
|
||||
{
|
||||
@Override
|
||||
public void onTextChanged(CharSequence s, int start, int before,
|
||||
int count) {}
|
||||
@Override
|
||||
public void beforeTextChanged(CharSequence s, int start, int count,
|
||||
int after) {}
|
||||
@Override
|
||||
public void afterTextChanged(Editable edit)
|
||||
{
|
||||
if (m_stk_edittext != null)
|
||||
m_stk_edittext.updateSTKEditBox();
|
||||
}
|
||||
});
|
||||
addContentView(m_stk_edittext, params);
|
||||
// Only focus it and make visible when soft keybord is opened
|
||||
m_stk_edittext.setVisibility(View.GONE);
|
||||
}
|
||||
// ------------------------------------------------------------------------
|
||||
@Override
|
||||
public void onCreate(Bundle instance)
|
||||
{
|
||||
super.onCreate(instance);
|
||||
m_keyboard_height = new AtomicInteger();
|
||||
m_moved_height = new AtomicInteger();
|
||||
m_progress_dialog = null;
|
||||
m_progress_bar = null;
|
||||
m_splash_screen = null;
|
||||
m_bottom_y = m_intial_orientation = 0;
|
||||
m_top_padding = m_bottom_padding = m_left_padding = m_right_padding =
|
||||
0.0f;
|
||||
final View root = getWindow().getDecorView().findViewById(
|
||||
android.R.id.content);
|
||||
root.getViewTreeObserver().addOnGlobalLayoutListener(new
|
||||
OnGlobalLayoutListener()
|
||||
{
|
||||
@Override
|
||||
public void onGlobalLayout()
|
||||
{
|
||||
Rect r = new Rect();
|
||||
root.getWindowVisibleDisplayFrame(r);
|
||||
int screen_height = root.getRootView().getHeight();
|
||||
int keyboard_height = screen_height - (r.bottom);
|
||||
m_keyboard_height.set(keyboard_height);
|
||||
int moved_height = 0;
|
||||
int margin = screen_height - m_bottom_y;
|
||||
if (keyboard_height > margin)
|
||||
moved_height = -keyboard_height + margin;
|
||||
m_moved_height.set(-moved_height);
|
||||
SDLActivity.moveView(moved_height);
|
||||
}
|
||||
});
|
||||
|
||||
InputStream istr = null;
|
||||
try
|
||||
{
|
||||
LinearLayout ll = new LinearLayout(this);
|
||||
LinearLayout.LayoutParams ll_param = new LinearLayout.LayoutParams(
|
||||
ViewGroup.LayoutParams.MATCH_PARENT,
|
||||
ViewGroup.LayoutParams.MATCH_PARENT);
|
||||
ll.setLayoutParams(ll_param);
|
||||
|
||||
WindowManager wm =
|
||||
(WindowManager)getSystemService(Context.WINDOW_SERVICE);
|
||||
DisplayMetrics display_metrics = new DisplayMetrics();
|
||||
wm.getDefaultDisplay().getMetrics(display_metrics);
|
||||
Bitmap.Config conf = Bitmap.Config.ARGB_8888;
|
||||
int w = display_metrics.widthPixels;
|
||||
int h = display_metrics.heightPixels;
|
||||
Bitmap scaled = Bitmap.createBitmap(w, h, conf);
|
||||
|
||||
Canvas canvas = new Canvas(scaled);
|
||||
istr = getAssets().open("data/gui/icons/logo.png");
|
||||
Bitmap logo = BitmapFactory.decodeStream(istr);
|
||||
Rect src = new Rect(0, 0, logo.getWidth(), logo.getHeight());
|
||||
// STK logo is a square
|
||||
int target_size = w;
|
||||
if (target_size > h)
|
||||
target_size = h;
|
||||
target_size /= 2;
|
||||
Rect dest = new Rect(w / 2 - target_size / 2,
|
||||
h / 2 - target_size / 2,
|
||||
w / 2 - target_size / 2 + target_size,
|
||||
h / 2 - target_size / 2 + target_size);
|
||||
canvas.drawBitmap(logo, src, dest, null);
|
||||
|
||||
m_splash_screen = new ImageView(this);
|
||||
m_splash_screen.setBackgroundColor(Color.argb(255, 168, 168, 168));
|
||||
m_splash_screen.setImageDrawable(new BitmapDrawable(getResources(),
|
||||
scaled));
|
||||
addContentView(m_splash_screen, ll_param);
|
||||
}
|
||||
catch (Exception e) {}
|
||||
finally
|
||||
{
|
||||
try
|
||||
{
|
||||
if (istr != null)
|
||||
istr.close();
|
||||
}
|
||||
catch(Exception e) {}
|
||||
}
|
||||
}
|
||||
// ------------------------------------------------------------------------
|
||||
@Override
|
||||
public void onStart()
|
||||
{
|
||||
super.onStart();
|
||||
m_keyboard_height.set(0);
|
||||
m_moved_height.set(0);
|
||||
}
|
||||
// ------------------------------------------------------------------------
|
||||
@Override
|
||||
public void onPause()
|
||||
{
|
||||
super.onPause();
|
||||
hideKeyboardNative(false/*clear_text*/);
|
||||
if (SDLActivity.mSDLThread != null)
|
||||
pauseRenderingJNI();
|
||||
}
|
||||
// ------------------------------------------------------------------------
|
||||
/* SDL manually dlopen main to allow unload after main thread exit. */
|
||||
protected String[] getLibraries()
|
||||
{
|
||||
return new String[]{ "SDL2" };
|
||||
}
|
||||
// ------------------------------------------------------------------------
|
||||
protected String getMainSharedObject()
|
||||
{
|
||||
return getContext().getApplicationInfo().nativeLibraryDir + "/libmain.so";
|
||||
}
|
||||
// ------------------------------------------------------------------------
|
||||
public void showKeyboard(final int type, final int y)
|
||||
{
|
||||
final Context context = this;
|
||||
// Need to run in ui thread as it access the view m_stk_edittext
|
||||
runOnUiThread(new Runnable()
|
||||
{
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
m_bottom_y = y;
|
||||
InputMethodManager imm = (InputMethodManager)
|
||||
getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||
if (imm == null)
|
||||
return;
|
||||
|
||||
if (m_stk_edittext == null)
|
||||
createSTKEditText();
|
||||
|
||||
m_stk_edittext.configType(type);
|
||||
m_stk_edittext.setVisibility(View.VISIBLE);
|
||||
m_stk_edittext.requestFocus();
|
||||
|
||||
imm.showSoftInput(m_stk_edittext,
|
||||
InputMethodManager.SHOW_FORCED);
|
||||
}
|
||||
});
|
||||
}
|
||||
// ------------------------------------------------------------------------
|
||||
/* Called by STK in JNI. */
|
||||
public void hideKeyboard(final boolean clear_text)
|
||||
{
|
||||
runOnUiThread(new Runnable()
|
||||
{
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
m_bottom_y = 0;
|
||||
hideKeyboardNative(clear_text);
|
||||
}
|
||||
});
|
||||
}
|
||||
// ------------------------------------------------------------------------
|
||||
/* Called by STK in JNI. */
|
||||
public void fromSTKEditBox(final int widget_id, final String text,
|
||||
final int selection_start,
|
||||
final int selection_end, final int type)
|
||||
{
|
||||
runOnUiThread(new Runnable()
|
||||
{
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
if (m_stk_edittext == null)
|
||||
createSTKEditText();
|
||||
m_stk_edittext.configType(type);
|
||||
m_stk_edittext.setTextFromSTK(widget_id, text, selection_start,
|
||||
selection_end);
|
||||
}
|
||||
});
|
||||
}
|
||||
// ------------------------------------------------------------------------
|
||||
public String[] getDNSTxtRecords(String domain)
|
||||
{
|
||||
try
|
||||
{
|
||||
ResolverResult<TXT> txts =
|
||||
DnssecResolverApi.INSTANCE.resolve(domain, TXT.class);
|
||||
Set<TXT> ans = txts.getAnswers();
|
||||
String[] result = new String[ans.size()];
|
||||
int i = 0;
|
||||
for (TXT t : ans)
|
||||
result[i++] = t.getText();
|
||||
return result;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
return new String[0];
|
||||
}
|
||||
}
|
||||
// ------------------------------------------------------------------------
|
||||
public void getDNSSrvRecords(String domain)
|
||||
{
|
||||
try
|
||||
{
|
||||
ResolverResult<SRV> srvs =
|
||||
DnssecResolverApi.INSTANCE.resolve(domain, SRV.class);
|
||||
Set<SRV> ans = srvs.getAnswers();
|
||||
for (SRV s : ans)
|
||||
addDNSSrvRecords(s.target.toString() + ":" + s.port, s.weight);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
// ------------------------------------------------------------------------
|
||||
public boolean isHardwareKeyboardConnected()
|
||||
{
|
||||
return getResources().getConfiguration()
|
||||
.keyboard == Configuration.KEYBOARD_QWERTY;
|
||||
}
|
||||
// ------------------------------------------------------------------------
|
||||
public int getScreenSize()
|
||||
{
|
||||
return getResources().getConfiguration().screenLayout &
|
||||
Configuration.SCREENLAYOUT_SIZE_MASK;
|
||||
}
|
||||
// ------------------------------------------------------------------------
|
||||
public float getTopPadding() { return m_top_padding; }
|
||||
// ------------------------------------------------------------------------
|
||||
public float getBottomPadding() { return m_bottom_padding; }
|
||||
// ------------------------------------------------------------------------
|
||||
public float getLeftPadding() { return m_left_padding; }
|
||||
// ------------------------------------------------------------------------
|
||||
public float getRightPadding() { return m_right_padding; }
|
||||
// ------------------------------------------------------------------------
|
||||
public int getInitialOrientation() { return m_intial_orientation; }
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
public void showExtractProgress(final int progress)
|
||||
{
|
||||
runOnUiThread(new Runnable()
|
||||
{
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
if (progress == -1)
|
||||
{
|
||||
if (m_progress_dialog != null)
|
||||
{
|
||||
m_progress_dialog.dismiss();
|
||||
m_progress_dialog = null;
|
||||
m_progress_bar = null;
|
||||
}
|
||||
AlertDialog.Builder error =
|
||||
new AlertDialog.Builder(SDL.getContext());
|
||||
error.setMessage(getString(R.string.po_extract_error_msg));
|
||||
error.setTitle(getString(R.string.po_extract_error));
|
||||
error.setPositiveButton(getString(R.string.po_quit),
|
||||
new DialogInterface.OnClickListener()
|
||||
{
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog,
|
||||
int id)
|
||||
{
|
||||
android.os.Process.killProcess(
|
||||
android.os.Process.myPid());
|
||||
}
|
||||
});
|
||||
error.setCancelable(false);
|
||||
error.create().show();
|
||||
return;
|
||||
}
|
||||
if (progress == 0 && m_progress_dialog == null)
|
||||
showExtractProgressPrivate();
|
||||
else if (progress == 100 && m_progress_dialog != null)
|
||||
{
|
||||
m_progress_dialog.dismiss();
|
||||
m_progress_dialog = null;
|
||||
m_progress_bar = null;
|
||||
}
|
||||
else if (m_progress_bar != null &&
|
||||
m_progress_bar.getProgress() != progress)
|
||||
{
|
||||
m_progress_bar.setProgress(progress);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
// ------------------------------------------------------------------------
|
||||
public void hideSplashScreen()
|
||||
{
|
||||
if (m_splash_screen != null)
|
||||
{
|
||||
m_splash_screen.animate().setDuration(200).alpha(0).setListener(
|
||||
new AnimatorListenerAdapter()
|
||||
{
|
||||
@Override
|
||||
public void onAnimationEnd(Animator animation)
|
||||
{
|
||||
if (m_splash_screen.getParent() instanceof ViewGroup)
|
||||
{
|
||||
ViewGroup view = (ViewGroup)m_splash_screen.getParent();
|
||||
view.removeView(m_splash_screen);
|
||||
m_splash_screen = null;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
// ------------------------------------------------------------------------
|
||||
@Override
|
||||
public void onAttachedToWindow()
|
||||
{
|
||||
super.onAttachedToWindow();
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q)
|
||||
{
|
||||
DisplayCutout dc = getWindow().getDecorView().getRootWindowInsets()
|
||||
.getDisplayCutout();
|
||||
if (dc != null)
|
||||
{
|
||||
m_top_padding = (float)dc.getBoundingRectTop().height();
|
||||
m_bottom_padding = (float)dc.getBoundingRectBottom().height();
|
||||
m_left_padding = (float)dc.getBoundingRectLeft().width();
|
||||
m_right_padding = (float)dc.getBoundingRectRight().width();
|
||||
// Left or right will depend on the device initial orientation
|
||||
// So save it for dealing with device rotation later
|
||||
m_intial_orientation = SDLActivity.getCurrentOrientation();
|
||||
}
|
||||
}
|
||||
}
|
||||
// ------------------------------------------------------------------------
|
||||
@Override
|
||||
public void onMultiWindowModeChanged(boolean isInMultiWindowMode,
|
||||
Configuration newConfig)
|
||||
{
|
||||
handlePadding(isInMultiWindowMode);
|
||||
}
|
||||
// ------------------------------------------------------------------------
|
||||
public int getKeyboardHeight() { return m_keyboard_height.get(); }
|
||||
// ------------------------------------------------------------------------
|
||||
public int getMovedHeight() { return m_moved_height.get(); }
|
||||
// ------------------------------------------------------------------------
|
||||
public String getLocaleString()
|
||||
{
|
||||
String language = "";
|
||||
if (mCurrentLocale != null)
|
||||
{
|
||||
language = mCurrentLocale.getLanguage();
|
||||
if (language == "iw")
|
||||
language = "he";
|
||||
else if (language == "in")
|
||||
language = "id";
|
||||
else if (language == "ji")
|
||||
language = "yi";
|
||||
String country = mCurrentLocale.getCountry();
|
||||
if (country != "")
|
||||
language += "_" + country;
|
||||
}
|
||||
return language;
|
||||
}
|
||||
|
||||
}
|
@ -1,18 +0,0 @@
|
||||
# - Find EGL
|
||||
# Find the EGL includes and libraries
|
||||
#
|
||||
# Following variables are provided:
|
||||
# EGL_FOUND
|
||||
# True if EGL has been found
|
||||
# EGL_INCLUDE_DIR
|
||||
# The include directory of EGL
|
||||
# EGL_LIBRARY
|
||||
# EGL library list
|
||||
|
||||
find_path(EGL_INCLUDE_DIR EGL/egl.h)
|
||||
find_library(EGL_LIBRARY NAMES EGL)
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(EGL DEFAULT_MSG EGL_LIBRARY EGL_INCLUDE_DIR)
|
||||
|
||||
mark_as_advanced(EGL_LIBRARY EGL_INCLUDE_DIR)
|
@ -10,16 +10,20 @@
|
||||
# Freetype library list
|
||||
|
||||
if(WIN32)
|
||||
find_path(FREETYPE_INCLUDE_DIRS NAMES freetype/freetype.h PATHS "${PROJECT_SOURCE_DIR}/${DEPENDENCIES}/include/freetype2")
|
||||
find_library(FREETYPE_LIBRARY NAMES freetype libfreetype PATHS "${PROJECT_SOURCE_DIR}/${DEPENDENCIES}/lib")
|
||||
find_path(FREETYPE_INCLUDE_DIRS NAMES freetype/freetype.h PATHS "${PROJECT_SOURCE_DIR}/dependencies/include")
|
||||
find_library(FREETYPE_LIBRARY NAMES freetype PATHS "${PROJECT_SOURCE_DIR}/dependencies/lib")
|
||||
set(FREETYPE_FOUND 1)
|
||||
set(FREETYPE_LIBRARIES ${FREETYPE_LIBRARY})
|
||||
elseif(APPLE OR ${CMAKE_SYSTEM_NAME} MATCHES "SunOS")
|
||||
find_path(FREETYPE_INCLUDE_DIRS NAMES ft2build.h PATH_SUFFIXES freetype2 include/freetype2 include)
|
||||
find_library(FREETYPE_LIBRARY NAMES freetype)
|
||||
elseif(APPLE)
|
||||
find_path(FREETYPE_INCLUDE_DIRS NAMES freetype/freetype.h PATHS "/Library/Frameworks/FreeType.Framework/Versions/2.4/unix/include")
|
||||
find_library(FREETYPE_LIBRARY NAMES freetype PATHS "/Library/Frameworks/FreeType.Framework/Versions/2.4/")
|
||||
include_directories(/Library/Frameworks/FreeType.Framework/Versions/2.4/unix/include)
|
||||
set(FREETYPE_FOUND 1)
|
||||
set(FREETYPE_LIBRARIES ${FREETYPE_LIBRARY})
|
||||
else()
|
||||
elseif(UNIX)
|
||||
include(FindPkgConfig)
|
||||
pkg_check_modules(FREETYPE freetype2)
|
||||
else()
|
||||
set(FREETYPE_FOUND 0)
|
||||
endif()
|
||||
|
||||
|
42
cmake/FindFribidi.cmake
Normal file
@ -0,0 +1,42 @@
|
||||
# - Find Fribidi
|
||||
# Find the Fribidi includes and libraries
|
||||
#
|
||||
# Following variables are provided:
|
||||
# FRIBIDI_FOUND
|
||||
# True if Fribidi has been found
|
||||
# FRIBIDI_INCLUDE_DIRS
|
||||
# The include directories of Fribidi
|
||||
# FRIBIDI_LIBRARIES
|
||||
# Fribidi library list
|
||||
|
||||
if(APPLE)
|
||||
set(FRIBIDI_INCLUDE_DIR NAMES fribidi/fribidi.h PATHS /Library/Frameworks/fribidi.framework/Headers)
|
||||
find_library(FRIBIDI_LIBRARY NAMES fribidi PATHS /Library/Frameworks/fribidi.framework)
|
||||
set(FRIBIDI_LIBRARIES ${FRIBIDI_LIBRARY})
|
||||
include_directories(/Library/Frameworks/fribidi.framework/Headers)
|
||||
#add_definitions(-framework fribidi)
|
||||
set(FRIBIDI_FOUND 1)
|
||||
elseif(UNIX)
|
||||
include(FindPkgConfig)
|
||||
pkg_check_modules(FRIBIDI fribidi)
|
||||
else()
|
||||
set(FRIBIDI_FOUND 0)
|
||||
endif()
|
||||
|
||||
if(NOT FRIBIDI_FOUND)
|
||||
find_path(FRIBIDI_INCLUDE_DIR NAMES fribidi/fribidi.h PATHS /Library/Frameworks/fribidi.framework/Headers "${PROJECT_SOURCE_DIR}/dependencies/include")
|
||||
find_library(FRIBIDI_LIBRARY NAMES fribidi PATHS /Library/Frameworks/fribidi.framework "${PROJECT_SOURCE_DIR}/dependencies/lib")
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(Fribidi DEFAULT_MSG FRIBIDI_INCLUDE_DIR FRIBIDI_LIBRARY)
|
||||
|
||||
if(APPLE)
|
||||
set(FRIBIDI_INCLUDE_DIR "/Library/Frameworks/fribidi.framework/Headers")
|
||||
endif()
|
||||
|
||||
# Publish variables
|
||||
set(FRIBIDI_INCLUDE_DIRS ${FRIBIDI_INCLUDE_DIR})
|
||||
set(FRIBIDI_LIBRARIES ${FRIBIDI_LIBRARY})
|
||||
endif()
|
||||
|
||||
mark_as_advanced(FRIBIDI_INCLUDE_DIR FRIBIDI_LIBRARY)
|
@ -1,89 +0,0 @@
|
||||
# - Try to find libbfd
|
||||
# Once done this will define
|
||||
#
|
||||
# LIBBFD_FOUND - system has libbfd
|
||||
# LIBBFD_INCLUDE_DIRS - the libbfd include directory
|
||||
# LIBBFD_LIBRARIES - Link these to use libbfd
|
||||
# LIBBFD_DEFINITIONS - Compiler switches required for using libbfd
|
||||
#
|
||||
# Based on:
|
||||
#
|
||||
# Copyright (c) 2008 Bernhard Walle <bernhard.walle@gmx.de>
|
||||
#
|
||||
# Redistribution and use is allowed according to the terms of the New
|
||||
# BSD license.
|
||||
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
|
||||
#
|
||||
|
||||
|
||||
if (LIBBFD_LIBRARIES AND LIBBFD_INCLUDE_DIRS)
|
||||
set (LIBBFD_FIND_QUIETLY TRUE)
|
||||
endif ()
|
||||
|
||||
find_path (LIBBFD_INCLUDE_DIRS
|
||||
NAMES
|
||||
bfd.h
|
||||
dis-asm.h
|
||||
PATHS
|
||||
/usr/include
|
||||
/usr/local/include
|
||||
/opt/local/include
|
||||
/opt/include
|
||||
ENV CPATH)
|
||||
|
||||
# Ugly, yes ugly...
|
||||
find_library (LIBBFD_BFD_LIBRARY
|
||||
NAMES
|
||||
bfd
|
||||
PATHS
|
||||
/usr/lib
|
||||
/usr/lib64
|
||||
/usr/local/lib
|
||||
/usr/local/lib64
|
||||
/usr/include
|
||||
/opt/local/lib
|
||||
/opt/usr/lib64
|
||||
ENV LIBRARY_PATH
|
||||
ENV LD_LIBRARY_PATH)
|
||||
|
||||
#find_library (LIBBFD_IBERTY_LIBRARY
|
||||
# NAMES
|
||||
# iberty
|
||||
# PATHS
|
||||
# /usr/lib
|
||||
# /usr/lib64
|
||||
# /usr/local/lib
|
||||
# /usr/local/lib64
|
||||
# /usr/include
|
||||
# /opt/local/lib
|
||||
# /opt/usr/lib64
|
||||
# ENV LIBRARY_PATH
|
||||
# ENV LD_LIBRARY_PATH)
|
||||
|
||||
#find_library (LIBBFD_OPCODES_LIBRARY
|
||||
# NAMES
|
||||
# opcodes
|
||||
# PATHS
|
||||
# /usr/lib
|
||||
# /usr/lib64
|
||||
# /usr/local/lib
|
||||
# /usr/local/lib64
|
||||
# /usr/include
|
||||
# /opt/local/lib
|
||||
# /opt/usr/lib64
|
||||
# ENV LIBRARY_PATH
|
||||
# ENV LD_LIBRARY_PATH)
|
||||
|
||||
|
||||
include (FindPackageHandleStandardArgs)
|
||||
|
||||
|
||||
# handle the QUIETLY and REQUIRED arguments and set LIBBFD_FOUND to TRUE if all listed variables are TRUE
|
||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(LIBBFD DEFAULT_MSG
|
||||
LIBBFD_BFD_LIBRARY
|
||||
# LIBBFD_IBERTY_LIBRARY
|
||||
# LIBBFD_OPCODES_LIBRARY
|
||||
LIBBFD_INCLUDE_DIRS)
|
||||
|
||||
set(LIBBFD_LIBRARIES "${LIBBFD_BFD_LIBRARY}")
|
||||
mark_as_advanced(LIBBFD_INCLUDE_DIRS LIBBFD_LIBRARIES LIBBFD_BFD_LIBRARY)
|
@ -10,17 +10,21 @@
|
||||
# OggVorbis library list
|
||||
|
||||
|
||||
if((UNIX AND NOT APPLE) OR NINTENDO_SWITCH)
|
||||
pkg_check_modules(OGGVORBIS vorbisfile)
|
||||
else()
|
||||
find_path(OGGVORBIS_OGG_INCLUDE_DIR NAMES ogg/ogg.h PATHS "${PROJECT_SOURCE_DIR}/dependencies/include")
|
||||
find_path(OGGVORBIS_VORBIS_INCLUDE_DIR NAMES vorbis/vorbisfile.h PATHS "${PROJECT_SOURCE_DIR}/dependencies/include")
|
||||
find_library(OGGVORBIS_OGG_LIBRARY NAMES ogg Ogg libogg PATHS "${PROJECT_SOURCE_DIR}/dependencies/lib")
|
||||
find_library(OGGVORBIS_VORBIS_LIBRARY NAMES vorbis Vorbis libvorbis PATHS "${PROJECT_SOURCE_DIR}/dependencies/lib")
|
||||
find_library(OGGVORBIS_VORBISFILE_LIBRARY NAMES vorbisfile libvorbisfile PATHS "${PROJECT_SOURCE_DIR}/dependencies/lib")
|
||||
|
||||
find_path(OGGVORBIS_OGG_INCLUDE_DIR NAMES ogg/ogg.h PATHS "${PROJECT_SOURCE_DIR}/${DEPENDENCIES}/include")
|
||||
find_path(OGGVORBIS_VORBIS_INCLUDE_DIR NAMES vorbis/vorbisfile.h PATHS "${PROJECT_SOURCE_DIR}/${DEPENDENCIES}/include")
|
||||
find_library(OGGVORBIS_OGG_LIBRARY NAMES ogg Ogg libogg PATHS "${PROJECT_SOURCE_DIR}/${DEPENDENCIES}/lib")
|
||||
find_library(OGGVORBIS_VORBIS_LIBRARY NAMES vorbis Vorbis libvorbis PATHS "${PROJECT_SOURCE_DIR}/${DEPENDENCIES}/lib")
|
||||
find_library(OGGVORBIS_VORBISFILE_LIBRARY NAMES vorbisfile libvorbisfile PATHS "${PROJECT_SOURCE_DIR}/${DEPENDENCIES}/lib")
|
||||
find_library(OGGVORBIS_VORBISENC_LIBRARY NAMES vorbisenc libvorbisenc PATHS "${PROJECT_SOURCE_DIR}/${DEPENDENCIES}/lib")
|
||||
if (APPLE)
|
||||
set(OGGVORBIS_OGG_INCLUDE_DIR "/Library/Frameworks/Ogg.framework/Headers/")
|
||||
set(OGGVORBIS_VORBIS_INCLUDE_DIR "/Library/Frameworks/Vorbis.framework/Headers/")
|
||||
endif()
|
||||
|
||||
if(APPLE AND NOT OGGVORBIS_VORBISFILE_LIBRARY)
|
||||
# Seems to be the same on Apple systems
|
||||
set(OGGVORBIS_VORBISFILE_LIBRARY ${OGGVORBIS_VORBIS_LIBRARY})
|
||||
endif()
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(OggVorbis DEFAULT_MSG
|
||||
@ -29,9 +33,8 @@ find_package_handle_standard_args(OggVorbis DEFAULT_MSG
|
||||
|
||||
# Publish variables
|
||||
set(OGGVORBIS_INCLUDE_DIRS ${OGGVORBIS_OGG_INCLUDE_DIR} ${OGGVORBIS_VORBIS_INCLUDE_DIR})
|
||||
set(OGGVORBIS_LIBRARIES ${OGGVORBIS_OGG_LIBRARY} ${OGGVORBIS_VORBIS_LIBRARY} ${OGGVORBIS_VORBISFILE_LIBRARY} ${OGGVORBIS_VORBISENC_LIBRARY})
|
||||
set(OGGVORBIS_LIBRARIES ${OGGVORBIS_OGG_LIBRARY} ${OGGVORBIS_VORBIS_LIBRARY} ${OGGVORBIS_VORBISFILE_LIBRARY})
|
||||
list(REMOVE_DUPLICATES OGGVORBIS_INCLUDE_DIRS)
|
||||
list(REMOVE_DUPLICATES OGGVORBIS_LIBRARIES)
|
||||
mark_as_advanced(OGGVORBIS_OGG_INCLUDE_DIR OGGVORBIS_VORBIS_INCLUDE_DIR)
|
||||
mark_as_advanced(OGGVORBIS_OGG_LIBRARY OGGVORBIS_VORBIS_LIBRARY OGGVORBIS_VORBISFILE_LIBRARY OGGVORBIS_VORBISENC_LIBRARY)
|
||||
endif()
|
||||
mark_as_advanced(OGGVORBIS_OGG_LIBRARY OGGVORBIS_VORBIS_LIBRARY OGGVORBIS_VORBISFILE_LIBRARY)
|
||||
|
@ -1,66 +0,0 @@
|
||||
# - Find Wayland
|
||||
# Find the Wayland includes and libraries
|
||||
#
|
||||
# Following variables are provided:
|
||||
# WAYLAND_FOUND
|
||||
# True if Wayland has been found
|
||||
# WAYLAND_INCLUDE_DIRS
|
||||
# The include directories of Wayland
|
||||
# WAYLAND_LIBRARIES
|
||||
# Wayland library list
|
||||
|
||||
find_package(PkgConfig REQUIRED)
|
||||
|
||||
if(NOT PKGCONFIG_FOUND)
|
||||
message(FATAL_ERROR "Pkg-config not found.")
|
||||
endif()
|
||||
|
||||
pkg_check_modules(PKG_WAYLAND QUIET wayland-client)
|
||||
|
||||
if(PKG_WAYLAND_FOUND)
|
||||
set(WAYLAND_VERSION ${PKG_WAYLAND_VERSION})
|
||||
else()
|
||||
set(WAYLAND_VERSION 0)
|
||||
endif()
|
||||
|
||||
find_path(WAYLAND_CLIENT_INCLUDE_DIR wayland-client.h)
|
||||
find_path(WAYLAND_CURSOR_INCLUDE_DIR wayland-cursor.h)
|
||||
find_path(WAYLAND_EGL_INCLUDE_DIR wayland-egl.h)
|
||||
find_path(XKBCOMMON_INCLUDE_DIR xkbcommon/xkbcommon.h)
|
||||
|
||||
find_library(WAYLAND_CLIENT_LIBRARY NAMES wayland-client)
|
||||
find_library(WAYLAND_CURSOR_LIBRARY NAMES wayland-cursor)
|
||||
find_library(WAYLAND_EGL_LIBRARY NAMES wayland-egl)
|
||||
find_library(XKBCOMMON_LIBRARY NAMES xkbcommon)
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(Wayland DEFAULT_MSG WAYLAND_CLIENT_LIBRARY
|
||||
WAYLAND_CURSOR_LIBRARY
|
||||
WAYLAND_EGL_LIBRARY
|
||||
XKBCOMMON_LIBRARY
|
||||
WAYLAND_CLIENT_INCLUDE_DIR
|
||||
WAYLAND_CURSOR_INCLUDE_DIR
|
||||
WAYLAND_EGL_INCLUDE_DIR
|
||||
XKBCOMMON_INCLUDE_DIR)
|
||||
|
||||
set(WAYLAND_INCLUDE_DIRS ${WAYLAND_CLIENT_INCLUDE_DIR}
|
||||
${WAYLAND_CURSOR_INCLUDE_DIR}
|
||||
${WAYLAND_EGL_INCLUDE_DIR}
|
||||
${XKBCOMMON_INCLUDE_DIR})
|
||||
|
||||
set(WAYLAND_LIBRARIES ${WAYLAND_CLIENT_LIBRARY}
|
||||
${WAYLAND_CURSOR_LIBRARY}
|
||||
${WAYLAND_EGL_LIBRARY}
|
||||
${XKBCOMMON_LIBRARY})
|
||||
|
||||
list(REMOVE_DUPLICATES WAYLAND_INCLUDE_DIRS)
|
||||
list(REMOVE_DUPLICATES WAYLAND_LIBRARIES)
|
||||
|
||||
mark_as_advanced(WAYLAND_CLIENT_LIBRARY
|
||||
WAYLAND_CURSOR_LIBRARY
|
||||
WAYLAND_EGL_LIBRARY
|
||||
XKBCOMMON_LIBRARY
|
||||
WAYLAND_CLIENT_INCLUDE_DIR
|
||||
WAYLAND_CURSOR_INCLUDE_DIR
|
||||
WAYLAND_EGL_INCLUDE_DIR
|
||||
XKBCOMMON_INCLUDE_DIR)
|
@ -1,99 +0,0 @@
|
||||
# - try to find WiiUse library
|
||||
#
|
||||
# Cache Variables: (probably not for direct use in your scripts)
|
||||
# WIIUSE_INCLUDE_DIR
|
||||
# WIIUSE_LIBRARY
|
||||
#
|
||||
# Non-cache variables you might use in your CMakeLists.txt:
|
||||
# WIIUSE_FOUND
|
||||
# WIIUSE_INCLUDE_DIRS
|
||||
# WIIUSE_LIBRARIES
|
||||
# WIIUSE_RUNTIME_LIBRARIES - aka the dll for installing
|
||||
# WIIUSE_RUNTIME_LIBRARY_DIRS
|
||||
#
|
||||
# Requires these CMake modules:
|
||||
# FindPackageHandleStandardArgs (known included with CMake >=2.6.2)
|
||||
#
|
||||
# Original Author:
|
||||
# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
|
||||
# http://academic.cleardefinition.com
|
||||
# Iowa State University HCI Graduate Program/VRAC
|
||||
#
|
||||
# Copyright Iowa State University 2009-2010.
|
||||
# Distributed under the Boost Software License, Version 1.0.
|
||||
# (See accompanying file LICENSE_1_0.txt or copy at
|
||||
# http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
set(WIIUSE_ROOT_DIR
|
||||
"${WIIUSE_ROOT_DIR}"
|
||||
CACHE
|
||||
PATH
|
||||
"Directory to search for WiiUse")
|
||||
|
||||
if(CMAKE_SIZEOF_VOID_P MATCHES "8")
|
||||
set(_LIBSUFFIXES /lib64 /lib)
|
||||
else()
|
||||
set(_LIBSUFFIXES /lib)
|
||||
endif()
|
||||
|
||||
find_library(WIIUSE_LIBRARY
|
||||
NAMES
|
||||
wiiuse
|
||||
PATHS
|
||||
"${WIIUSE_ROOT_DIR}"
|
||||
PATH_SUFFIXES
|
||||
"${_LIBSUFFIXES}")
|
||||
|
||||
get_filename_component(_libdir "${WIIUSE_LIBRARY}" PATH)
|
||||
|
||||
find_path(WIIUSE_INCLUDE_DIR
|
||||
NAMES
|
||||
wiiuse.h
|
||||
HINTS
|
||||
"${_libdir}"
|
||||
"${_libdir}/.."
|
||||
PATHS
|
||||
"${WIIUSE_ROOT_DIR}"
|
||||
PATH_SUFFIXES
|
||||
include/)
|
||||
|
||||
set(_deps_check)
|
||||
if(WIN32)
|
||||
find_file(WIIUSE_RUNTIME_LIBRARY
|
||||
NAMES
|
||||
wiiuse.dll
|
||||
HINTS
|
||||
"${_libdir}"
|
||||
"${_libdir}/.."
|
||||
PATH_SUFFIXES
|
||||
bin)
|
||||
|
||||
set(WIIUSE_RUNTIME_LIBRARIES "${WIIUSE_RUNTIME_LIBRARY}")
|
||||
get_filename_component(WIIUSE_RUNTIME_LIBRARY_DIRS
|
||||
"${WIIUSE_RUNTIME_LIBRARY}"
|
||||
PATH)
|
||||
list(APPEND _deps_check WIIUSE_RUNTIME_LIBRARY)
|
||||
else()
|
||||
set(WIIUSE_RUNTIME_LIBRARY "${WIIUSE_LIBRARY}")
|
||||
set(WIIUSE_RUNTIME_LIBRARIES "${WIIUSE_RUNTIME_LIBRARY}")
|
||||
get_filename_component(WIIUSE_RUNTIME_LIBRARY_DIRS
|
||||
"${WIIUSE_LIBRARY}"
|
||||
PATH)
|
||||
endif()
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(WiiUse
|
||||
DEFAULT_MSG
|
||||
WIIUSE_LIBRARY
|
||||
WIIUSE_INCLUDE_DIR
|
||||
${_deps_check})
|
||||
|
||||
if(WIIUSE_FOUND)
|
||||
set(WIIUSE_LIBRARIES "${WIIUSE_LIBRARY}")
|
||||
set(WIIUSE_INCLUDE_DIRS "${WIIUSE_INCLUDE_DIR}")
|
||||
mark_as_advanced(WIIUSE_ROOT_DIR)
|
||||
endif()
|
||||
|
||||
mark_as_advanced(WIIUSE_INCLUDE_DIR
|
||||
WIIUSE_LIBRARY
|
||||
WIIUSE_RUNTIME_LIBRARY)
|
18
cmake/FindXrandr.cmake
Normal file
@ -0,0 +1,18 @@
|
||||
find_path(XRANDR_INCLUDE_DIR NAMES X11/extensions/Xrandr.h
|
||||
PATH_SUFFIXES X11/extensions
|
||||
DOC "The XRANDR include directory"
|
||||
)
|
||||
|
||||
find_library(XRANDR_LIBRARY NAMES Xrandr
|
||||
DOC "The XRANDR library"
|
||||
)
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(XRANDR DEFAULT_MSG XRANDR_LIBRARY XRANDR_INCLUDE_DIR)
|
||||
|
||||
if(XRANDR_FOUND)
|
||||
set( XRANDR_LIBRARIES ${XRANDR_LIBRARY} )
|
||||
set( XRANDR_INCLUDE_DIRS ${XRANDR_INCLUDE_DIR} )
|
||||
endif()
|
||||
|
||||
mark_as_advanced(XRANDR_INCLUDE_DIR XRANDR_LIBRARY)
|
@ -1,40 +0,0 @@
|
||||
# Cross-compiling requires CMake 2.6 or newer. Example:
|
||||
# cmake .. -DCMAKE_TOOLCHAIN_FILE=../XCompile-Android.txt -DHOST=arm-linux-androideabi
|
||||
# Where 'arm-linux-androideabi' is the host prefix for the cross-compiler. If
|
||||
# you already have a toolchain file setup, you may use that instead of this
|
||||
# file. Make sure to set CMAKE_FIND_ROOT_PATH to where the NDK toolchain was
|
||||
# installed (e.g. "$ENV{HOME}/toolchains/arm-linux-androideabi-r10c-21").
|
||||
|
||||
# the name of the target operating system
|
||||
SET(CMAKE_SYSTEM_NAME Linux)
|
||||
|
||||
# which compilers to use for C and C++
|
||||
SET(CMAKE_C_COMPILER "${HOST}-clang")
|
||||
SET(CMAKE_CXX_COMPILER "${HOST}-clang++")
|
||||
|
||||
set(CMAKE_SYSTEM_PROCESSOR ${ARCH})
|
||||
|
||||
# Starting NDK21 it enables NEON by default on 32-bit ARM target
|
||||
# Disable it to support more devices
|
||||
if("${ARCH}" STREQUAL "arm" AND NOT STK_ARM_NEON)
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfpu=vfpv3-d16")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfpu=vfpv3-d16")
|
||||
endif()
|
||||
|
||||
# here is the target environment located
|
||||
SET(CMAKE_FIND_ROOT_PATH $ENV{NDK_TOOLCHAIN_PATH})
|
||||
|
||||
# here is where stuff gets installed to
|
||||
SET(CMAKE_INSTALL_PREFIX "${CMAKE_FIND_ROOT_PATH}" CACHE STRING "Install path prefix, prepended onto install directories." FORCE)
|
||||
|
||||
# adjust the default behaviour of the FIND_XXX() commands:
|
||||
# search headers and libraries in the target environment, search
|
||||
# programs in the host environment
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
||||
|
||||
# set env vars so that pkg-config will look in the appropriate directory for
|
||||
# .pc files (as there seems to be no way to force using ${HOST}-pkg-config)
|
||||
set(ENV{PKG_CONFIG_LIBDIR} "${CMAKE_INSTALL_PREFIX}/lib/pkgconfig")
|
||||
set(ENV{PKG_CONFIG_PATH} "")
|
@ -1,48 +0,0 @@
|
||||
# Usage:
|
||||
# cmake .. -DCCTOOLS_PREFIX=/path/to/cctools -DCCTOOLS_ARCH=arch -DCCTOOLS_PLATFORM=platform \
|
||||
# -DRT=/path/to/cctools/darwin/libclang_rt.{ios, iossim, osx, tvos, tvossim}.a -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-cctools.cmake
|
||||
# Download precompiled cctools at https://github.com/supertuxkart/dependencies/releases/download/preview/cctools.tar.xz
|
||||
# Compiled in Ubuntu 18.04
|
||||
|
||||
# the name of the target operating system
|
||||
SET(CMAKE_SYSTEM_NAME Darwin)
|
||||
|
||||
# which compilers to use for C and C++
|
||||
string(TOLOWER "${CCTOOLS_PLATFORM}" platform_lower)
|
||||
set(CLANG_ARCH ${CCTOOLS_ARCH})
|
||||
if(CCTOOLS_ARCH MATCHES ^arm)
|
||||
set(CLANG_ARCH arm)
|
||||
else()
|
||||
set(CLANG_ARCH ${CCTOOLS_ARCH})
|
||||
endif()
|
||||
|
||||
SET(CMAKE_C_COMPILER ${CCTOOLS_PREFIX}/bin/${CCTOOLS_ARCH}-${platform_lower}-clang)
|
||||
SET(CMAKE_CXX_COMPILER ${CCTOOLS_PREFIX}/bin/${CCTOOLS_ARCH}-${platform_lower}-clang++)
|
||||
SET(CMAKE_RANLIB ${CCTOOLS_PREFIX}/bin/${CLANG_ARCH}-apple-darwin11-ranlib)
|
||||
SET(CMAKE_AR ${CCTOOLS_PREFIX}/bin/${CLANG_ARCH}-apple-darwin11-ar)
|
||||
SET(CMAKE_INSTALL_NAME_TOOL ${CCTOOLS_PREFIX}/bin/${CLANG_ARCH}-apple-darwin11-install_name_tool)
|
||||
SET(CMAKE_SYSTEM_PROCESSOR ${CCTOOLS_ARCH})
|
||||
SET(CMAKE_MACOSX_RPATH TRUE)
|
||||
SET(CMAKE_EXE_LINKER_FLAGS ${RT})
|
||||
|
||||
# here is the target environment located
|
||||
SET(CMAKE_FIND_ROOT_PATH ${PROJECT_SOURCE_DIR}/dependencies-${platform_lower} ${CCTOOLS_PREFIX}/sdk/${CCTOOLS_PLATFORM}.sdk)
|
||||
|
||||
# adjust the default behaviour of the FIND_XXX() commands:
|
||||
# search headers and libraries in the target environment, search
|
||||
# programs in the host environment
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ALWAYS)
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
||||
|
||||
# fix statically linking because of order
|
||||
if (NOT CCTOOLS_PLATFORM MATCHES MacOSX)
|
||||
set(CURL_LIBRARY "${PROJECT_SOURCE_DIR}/dependencies-${platform_lower}/lib/libcurl.a;${PROJECT_SOURCE_DIR}/dependencies-${platform_lower}/lib/libmbedtls.a;${PROJECT_SOURCE_DIR}/dependencies-${platform_lower}/lib/libmbedx509.a")
|
||||
endif()
|
||||
set(USE_CRYPTO_OPENSSL FALSE CACHE BOOL "")
|
||||
|
||||
if (NOT CCTOOLS_PLATFORM MATCHES MacOSX)
|
||||
set(USE_WIIUSE FALSE CACHE BOOL "")
|
||||
set(USE_SQLITE3 FALSE CACHE BOOL "")
|
||||
set(IOS TRUE CACHE BOOL "")
|
||||
endif()
|
@ -1,127 +0,0 @@
|
||||
# Usage:
|
||||
# cmake .. -DDEPS_PATH=/path/to/dependencies -DIOS_ASSETS=/path/to/generated/assets -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-ios-xcode.cmake -G Xcode
|
||||
# Need to use ../android/generate_assets.sh for assets first
|
||||
# In Xcode you need to choose Product -> Scheme -> supertuxkart
|
||||
# And then Signing & Capabilities choose a suitable team
|
||||
# You may need to use another bundle identifier as the current one is already used by STK team
|
||||
# You can also use -DCMAKE_XCODE_ATTRIBUTE_DEVELOPMENT_TEAM=xxxxxxxxxx to specify team
|
||||
|
||||
# Increase every upload to App store
|
||||
SET(IOS_BUILD_VERSION 26)
|
||||
|
||||
# Get SDK path
|
||||
execute_process(COMMAND xcodebuild -version -sdk iphoneos Path
|
||||
OUTPUT_VARIABLE CMAKE_OSX_SYSROOT_IOS
|
||||
ERROR_QUIET
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
execute_process(COMMAND xcodebuild -version -sdk iphonesimulator Path
|
||||
OUTPUT_VARIABLE CMAKE_OSX_SYSROOT_SIMULATOR
|
||||
ERROR_QUIET
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
execute_process(COMMAND xcodebuild -sdk ${CMAKE_OSX_SYSROOT} -version SDKVersion
|
||||
OUTPUT_VARIABLE SDK_VERSION
|
||||
ERROR_QUIET
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
if (NOT DEFINED CMAKE_OSX_SYSROOT_IOS OR NOT DEFINED CMAKE_OSX_SYSROOT_SIMULATOR OR NOT DEFINED SDK_VERSION)
|
||||
message(FATAL_ERROR "Cannot find iphoneos or iphonesimulator sdk location and their version info.")
|
||||
else()
|
||||
message(STATUS "Using SDK path: ${CMAKE_OSX_SYSROOT_IOS}.")
|
||||
endif()
|
||||
set(CMAKE_OSX_SYSROOT "iphoneos" CACHE INTERNAL "")
|
||||
|
||||
# Manaully set the values for both arm64 and simulator
|
||||
set(JPEG_LIBRARY ${PROJECT_SOURCE_DIR}/dependencies\${EFFECTIVE_PLATFORM_NAME}/lib/libjpeg.a CACHE STRING "")
|
||||
set(JPEG_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/dependencies-iphoneos/include CACHE STRING "")
|
||||
set(ZLIB_LIBRARY ${PROJECT_SOURCE_DIR}/dependencies\${EFFECTIVE_PLATFORM_NAME}/lib/libz.a CACHE STRING "")
|
||||
set(ZLIB_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/dependencies-iphoneos/include CACHE STRING "")
|
||||
set(PNG_LIBRARY ${PROJECT_SOURCE_DIR}/dependencies\${EFFECTIVE_PLATFORM_NAME}/lib/libpng16.a CACHE STRING "")
|
||||
set(PNG_INCLUDE_DIRS ${PROJECT_SOURCE_DIR}/dependencies-iphoneos/include CACHE STRING "")
|
||||
set(PNG_PNG_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/dependencies-iphoneos/include CACHE STRING "")
|
||||
set(OGGVORBIS_OGG_LIBRARY ${PROJECT_SOURCE_DIR}/dependencies\${EFFECTIVE_PLATFORM_NAME}/lib/libogg.a CACHE STRING "")
|
||||
set(OGGVORBIS_OGG_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/dependencies-iphoneos/include/ogg CACHE STRING "")
|
||||
set(OGGVORBIS_VORBIS_LIBRARY ${PROJECT_SOURCE_DIR}/dependencies\${EFFECTIVE_PLATFORM_NAME}/lib/libvorbis.a CACHE STRING "")
|
||||
set(OGGVORBIS_VORBIS_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/dependencies-iphoneos/include/vorbis CACHE STRING "")
|
||||
set(OGGVORBIS_VORBISFILE_LIBRARY ${PROJECT_SOURCE_DIR}/dependencies\${EFFECTIVE_PLATFORM_NAME}/lib/libvorbisfile.a CACHE STRING "")
|
||||
set(OGGVORBIS_VORBISFILE_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/dependencies-iphoneos/include/vorbis CACHE STRING "")
|
||||
set(OGGVORBIS_VORBISENC_LIBRARY ${PROJECT_SOURCE_DIR}/dependencies\${EFFECTIVE_PLATFORM_NAME}/lib/libvorbisenc.a CACHE STRING "")
|
||||
set(OGGVORBIS_VORBISENC_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/dependencies-iphoneos/include/vorbis CACHE STRING "")
|
||||
set(HARFBUZZ_LIBRARY ${PROJECT_SOURCE_DIR}/dependencies\${EFFECTIVE_PLATFORM_NAME}/lib/libharfbuzz.a CACHE STRING "")
|
||||
set(HARFBUZZ_INCLUDEDIR ${PROJECT_SOURCE_DIR}/dependencies-iphoneos/include CACHE STRING "")
|
||||
set(FREETYPE_LIBRARY ${PROJECT_SOURCE_DIR}/dependencies\${EFFECTIVE_PLATFORM_NAME}/lib/libfreetype.a CACHE STRING "")
|
||||
set(FREETYPE_INCLUDE_DIRS ${PROJECT_SOURCE_DIR}/dependencies-iphoneos/include/freetype2 CACHE STRING "")
|
||||
set(CURL_LIBRARY "${PROJECT_SOURCE_DIR}/dependencies\${EFFECTIVE_PLATFORM_NAME}/lib/libcurl.a;${PROJECT_SOURCE_DIR}/dependencies\${EFFECTIVE_PLATFORM_NAME}/lib/libmbedtls.a;${PROJECT_SOURCE_DIR}/dependencies\${EFFECTIVE_PLATFORM_NAME}/lib/libmbedx509.a;${PROJECT_SOURCE_DIR}/dependencies\${EFFECTIVE_PLATFORM_NAME}/lib/libmbedcrypto.a" CACHE STRING "")
|
||||
set(CURL_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/dependencies-iphoneos/include CACHE STRING "")
|
||||
set(MBEDCRYPTO_LIBRARY ${PROJECT_SOURCE_DIR}/dependencies\${EFFECTIVE_PLATFORM_NAME}/lib/libmbedcrypto.a CACHE STRING "")
|
||||
set(MBEDTLS_INCLUDE_DIRS ${PROJECT_SOURCE_DIR}/dependencies-iphoneos/include CACHE STRING "")
|
||||
set(SDL2_LIBRARY ${PROJECT_SOURCE_DIR}/dependencies\${EFFECTIVE_PLATFORM_NAME}/lib/libSDL2.a CACHE STRING "")
|
||||
set(SDL2_INCLUDEDIR ${PROJECT_SOURCE_DIR}/dependencies-iphoneos/include/SDL2 CACHE STRING "")
|
||||
set(LIBSAMPLERATE_LIBRARY ${PROJECT_SOURCE_DIR}/dependencies\${EFFECTIVE_PLATFORM_NAME}/lib/libsamplerate.a CACHE STRING "")
|
||||
set(LIBSAMPLERATE_INCLUDEDIR ${PROJECT_SOURCE_DIR}/dependencies-iphoneos/include CACHE STRING "")
|
||||
set(MOLTENVK_LIBRARY ${PROJECT_SOURCE_DIR}/dependencies\${EFFECTIVE_PLATFORM_NAME}/lib/libMoltenVK.a CACHE STRING "")
|
||||
set(VULKAN_INCLUDEDIR ${PROJECT_SOURCE_DIR}/dependencies-iphoneos/include CACHE STRING "")
|
||||
set(LIBASTCENC_LIBRARY ${PROJECT_SOURCE_DIR}/dependencies\${EFFECTIVE_PLATFORM_NAME}/lib/libastcenc.a CACHE STRING "")
|
||||
set(LIBASTCENC_INCLUDEDIR ${PROJECT_SOURCE_DIR}/dependencies-iphoneos/include CACHE STRING "")
|
||||
set(SHADERC_LIBRARY ${PROJECT_SOURCE_DIR}/dependencies\${EFFECTIVE_PLATFORM_NAME}/lib/libshaderc_combined.a CACHE STRING "")
|
||||
set(SHADERC_INCLUDEDIR ${PROJECT_SOURCE_DIR}/dependencies-iphoneos/include CACHE STRING "")
|
||||
|
||||
# For universal iOS and simulator
|
||||
set(LIBRESOLV_LIBRARY -lresolv CACHE STRING "")
|
||||
set(PTHREAD_LIBRARY -lpthread CACHE STRING "")
|
||||
|
||||
# Standard config
|
||||
set(CMAKE_SYSTEM_VERSION ${SDK_VERSION} CACHE INTERNAL "")
|
||||
set(UNIX TRUE CACHE BOOL "")
|
||||
set(APPLE TRUE CACHE BOOL "")
|
||||
set(IOS TRUE CACHE BOOL "")
|
||||
set(CMAKE_AR ar CACHE FILEPATH "" FORCE)
|
||||
set(CMAKE_RANLIB ranlib CACHE FILEPATH "" FORCE)
|
||||
set(CMAKE_STRIP strip CACHE FILEPATH "" FORCE)
|
||||
|
||||
# Set the architectures for which to build
|
||||
set(CMAKE_OSX_ARCHITECTURES "arm64 x86_64" CACHE STRING "Build architecture for iOS")
|
||||
set(CMAKE_C_SIZEOF_DATA_PTR 8)
|
||||
set(CMAKE_CXX_SIZEOF_DATA_PTR 8)
|
||||
set(CMAKE_SYSTEM_PROCESSOR "arm64")
|
||||
set(CMAKE_SYSTEM_NAME iOS CACHE INTERNAL "" FORCE)
|
||||
|
||||
# Change the type of target generated for try_compile() so it'll work when cross-compiling
|
||||
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
|
||||
|
||||
# All iOS/Darwin specific settings - some may be redundant.
|
||||
set(CMAKE_SHARED_LIBRARY_PREFIX "lib")
|
||||
set(CMAKE_SHARED_LIBRARY_SUFFIX ".dylib")
|
||||
set(CMAKE_SHARED_MODULE_PREFIX "lib")
|
||||
set(CMAKE_SHARED_MODULE_SUFFIX ".so")
|
||||
set(CMAKE_C_COMPILER_ABI ELF)
|
||||
set(CMAKE_CXX_COMPILER_ABI ELF)
|
||||
set(CMAKE_C_HAS_ISYSROOT 1)
|
||||
set(CMAKE_CXX_HAS_ISYSROOT 1)
|
||||
set(CMAKE_MODULE_EXISTS 1)
|
||||
set(CMAKE_DL_LIBS "")
|
||||
set(CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG "-compatibility_version ")
|
||||
set(CMAKE_C_OSX_CURRENT_VERSION_FLAG "-current_version ")
|
||||
set(CMAKE_CXX_OSX_COMPATIBILITY_VERSION_FLAG "${CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG}")
|
||||
set(CMAKE_CXX_OSX_CURRENT_VERSION_FLAG "${CMAKE_C_OSX_CURRENT_VERSION_FLAG}")
|
||||
|
||||
# Fixed variables in iOS STK
|
||||
set(CMAKE_XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC NO CACHE INTERNAL "")
|
||||
set(CMAKE_XCODE_ATTRIBUTE_GCC_SYMBOLS_PRIVATE_EXTERN YES CACHE INTERNAL "")
|
||||
set(USE_WIIUSE FALSE CACHE BOOL "")
|
||||
set(USE_SQLITE3 FALSE CACHE BOOL "")
|
||||
set(USE_CRYPTO_OPENSSL FALSE CACHE BOOL "")
|
||||
set(IOS_LAUNCHSCREEN ${DEPS_PATH}/ios-icon/launch_screen.storyboard)
|
||||
set(IOS_IMAGES_XCASSETS ${DEPS_PATH}/ios-icon/Images.xcassets)
|
||||
set(SDK_NAME_VERSION_FLAGS "-miphoneos-version-min=9.0")
|
||||
set(CMAKE_OSX_DEPLOYMENT_TARGET 9.0 CACHE STRING "Set CMake deployment target" FORCE)
|
||||
|
||||
set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=iphoneos*] "arm64")
|
||||
set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=iphoneos*] "arm64")
|
||||
|
||||
set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=iphonesimulator*] "x86_64")
|
||||
set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=iphonesimulator*] "x86_64")
|
||||
|
||||
set(CMAKE_XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT "dwarf-with-dsym" CACHE INTERNAL "")
|
||||
|
||||
# Replace the above two with these if you use an apple silicon
|
||||
#set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=iphonesimulator*] "arm64")
|
||||
#set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=iphonesimulator*] "arm64")
|
@ -1,28 +0,0 @@
|
||||
# Usage:
|
||||
# cmake .. -DLLVM_ARCH=aarch64 i686 or x86_64 -DLLVM_PREFIX=/path/to/llvm-mingw-prefix -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-llvm-mingw.cmake
|
||||
|
||||
# the name of the target operating system
|
||||
if(WIN32)
|
||||
SET(PATH_EXE .exe)
|
||||
endif()
|
||||
SET(CMAKE_SYSTEM_NAME Windows)
|
||||
|
||||
# which compilers to use for C and C++
|
||||
SET(CMAKE_C_COMPILER ${LLVM_PREFIX}/bin/${LLVM_ARCH}-w64-mingw32-clang${PATH_EXE})
|
||||
SET(CMAKE_CXX_COMPILER ${LLVM_PREFIX}/bin/${LLVM_ARCH}-w64-mingw32-clang++${PATH_EXE})
|
||||
SET(CMAKE_RC_COMPILER ${LLVM_PREFIX}/bin/${LLVM_ARCH}-w64-mingw32-windres${PATH_EXE})
|
||||
SET(CMAKE_SYSTEM_PROCESSOR ${LLVM_ARCH})
|
||||
SET(CMAKE_BUILD_TYPE RelWithDebInfo)
|
||||
set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++ -Wl,-pdb=")
|
||||
SET(CMAKE_C_FLAGS -gcodeview)
|
||||
SET(CMAKE_CXX_FLAGS -gcodeview)
|
||||
|
||||
# here is the target environment located
|
||||
SET(CMAKE_FIND_ROOT_PATH ${LLVM_PREFIX}/generic-w64-mingw32 ${LLVM_PREFIX}/${LLVM_ARCH}-w64-mingw32/bin ${PROJECT_SOURCE_DIR}/dependencies-win-${LLVM_ARCH})
|
||||
|
||||
# adjust the default behaviour of the FIND_XXX() commands:
|
||||
# search headers and libraries in the target environment, search
|
||||
# programs in the host environment
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ALWAYS)
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
@ -9,11 +9,8 @@ SET(CMAKE_C_COMPILER x86_64-w64-mingw32-gcc-posix)
|
||||
SET(CMAKE_CXX_COMPILER x86_64-w64-mingw32-g++-posix)
|
||||
SET(CMAKE_RC_COMPILER x86_64-w64-mingw32-windres)
|
||||
|
||||
# figure out folder to look in
|
||||
execute_process(COMMAND sh -c "ls /usr/lib/gcc/x86_64-w64-mingw32/ | grep posix | tr -d '\n'" OUTPUT_VARIABLE MINGW_DEPS_FOLDER)
|
||||
|
||||
# here is the target environment located
|
||||
SET(CMAKE_FIND_ROOT_PATH /usr/x86_64-w64-mingw32 /usr/lib/gcc/x86_64-w64-mingw32/${MINGW_DEPS_FOLDER}/ ${PROJECT_SOURCE_DIR}/dependencies-win-x86_64)
|
||||
SET(CMAKE_FIND_ROOT_PATH /usr/x86_64-w64-mingw32 /usr/lib/gcc/x86_64-w64-mingw32/4.9-posix ${PROJECT_SOURCE_DIR}/dependencies)
|
||||
|
||||
# adjust the default behaviour of the FIND_XXX() commands:
|
||||
# search headers and libraries in the target environment, search
|
||||
|
@ -9,11 +9,8 @@ SET(CMAKE_C_COMPILER i686-w64-mingw32-gcc-posix)
|
||||
SET(CMAKE_CXX_COMPILER i686-w64-mingw32-g++-posix)
|
||||
SET(CMAKE_RC_COMPILER i686-w64-mingw32-windres)
|
||||
|
||||
# figure out folder to look in
|
||||
execute_process(COMMAND sh -c "ls /usr/lib/gcc/i686-w64-mingw32/ | grep posix | tr -d '\n'" OUTPUT_VARIABLE MINGW_DEPS_FOLDER)
|
||||
|
||||
# here is the target environment located
|
||||
SET(CMAKE_FIND_ROOT_PATH /usr/i686-w64-mingw32 /usr/lib/gcc/i686-w64-mingw32/${MINGW_DEPS_FOLDER}/ ${PROJECT_SOURCE_DIR}/dependencies-win-i686)
|
||||
SET(CMAKE_FIND_ROOT_PATH /usr/i686-w64-mingw32 /usr/lib/gcc/i686-w64-mingw32/4.9-posix ${PROJECT_SOURCE_DIR}/dependencies)
|
||||
|
||||
# adjust the default behaviour of the FIND_XXX() commands:
|
||||
# search headers and libraries in the target environment, search
|
||||
|
@ -1,31 +0,0 @@
|
||||
# Collect all currently added targets in all subdirectories
|
||||
#
|
||||
# Parameters:
|
||||
# - _result the list containing all found targets
|
||||
# - _dir root directory to start looking from
|
||||
function(get_all_targets _result _dir)
|
||||
get_property(_subdirs DIRECTORY "${_dir}" PROPERTY SUBDIRECTORIES)
|
||||
foreach(_subdir IN LISTS _subdirs)
|
||||
get_all_targets(${_result} "${_subdir}")
|
||||
endforeach()
|
||||
|
||||
get_directory_property(_sub_targets DIRECTORY "${_dir}" BUILDSYSTEM_TARGETS)
|
||||
set(${_result} ${${_result}} ${_sub_targets} PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
# set(CMAKE_XCODE_ATTRIBUTE_GCC_GENERATE_DEBUGGING_SYMBOLS doesn't work in ios toolchain, below fixed it
|
||||
macro(configure_xcode_defaults _EXE_NAME)
|
||||
|
||||
if (APPLE)
|
||||
macro(set_xcode_property TARGET XCODE_PROPERTY XCODE_VALUE)
|
||||
set_property(TARGET ${TARGET} PROPERTY XCODE_ATTRIBUTE_${XCODE_PROPERTY} ${XCODE_VALUE})
|
||||
endmacro()
|
||||
endif()
|
||||
|
||||
if (APPLE)
|
||||
set_xcode_property(${_EXE_NAME} GCC_GENERATE_DEBUGGING_SYMBOLS[variant=Debug] YES)
|
||||
set_xcode_property(${_EXE_NAME} GCC_GENERATE_DEBUGGING_SYMBOLS[variant=MinSizeRel] YES)
|
||||
set_xcode_property(${_EXE_NAME} GCC_GENERATE_DEBUGGING_SYMBOLS[variant=RelWithDebInfo] YES)
|
||||
set_xcode_property(${_EXE_NAME} GCC_GENERATE_DEBUGGING_SYMBOLS[variant=Release] YES)
|
||||
endif()
|
||||
endmacro()
|
BIN
data/CREDITS
Normal file → Executable file
@ -1,46 +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>CFBundleDisplayName</key>
|
||||
<string>SuperTuxKart</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>supertuxkart</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>net.supertuxkart.stkios</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>SuperTuxKart </string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>${PROJECT_VERSION}</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>${IOS_BUILD_VERSION}</string>
|
||||
<key>CSResourcesFileMapped</key>
|
||||
<true/>
|
||||
<key>UIRequiredDeviceCapabilities</key>
|
||||
<array>
|
||||
<string>arm64</string>
|
||||
</array>
|
||||
<key>UILaunchStoryboardName</key>
|
||||
<string>launch_screen</string>
|
||||
<key>UIStatusBarHidden</key>
|
||||
<true/>
|
||||
<key>UIRequiresFullScreen</key>
|
||||
<true/>
|
||||
<key>UISupportedInterfaceOrientations</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||
</array>
|
||||
<key>UISupportedInterfaceOrientations~ipad</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||
</array>
|
||||
<key>UIApplicationSupportsIndirectInputEvents</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
@ -5,7 +5,7 @@
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>English</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>supertuxkart</string>
|
||||
<string>SuperTuxKart</string>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string>supertuxkart.icns</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
@ -17,16 +17,14 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>${PROJECT_VERSION}</string>
|
||||
<string>0.8.1</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>SPTK</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>${PROJECT_VERSION}</string>
|
||||
<string>0.8.1</string>
|
||||
<key>CSResourcesFileMapped</key>
|
||||
<true/>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>10.9</string>
|
||||
<key>NSHighResolutionCapable</key>
|
||||
<true/>
|
||||
<string>10.9</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
@ -1,178 +1,68 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- List of counters the achievements can query.
|
||||
The format to use is <goal type="name_of_the_counter" value="X"/>
|
||||
where X is the desired value of the counter ;e.g. <won_races value="10"/>
|
||||
|
||||
WARNING! If a goal node is malformed, it is ignored.
|
||||
___________________________________________________________________________
|
||||
|
||||
S - Logical relations and subgoals
|
||||
|
||||
When you define multiple goals, the achievement will be completed
|
||||
if they are all met, but they don't need to be met at once.
|
||||
To have more possibilities, you can define subgoals and the
|
||||
logical relationship they need to meet.
|
||||
|
||||
The available relations are :
|
||||
|
||||
AND // The subgoals have to be met, but not necessarily at once
|
||||
AND-AT-ONCE // The subgoals have to be met at the same time.
|
||||
OR // One of the subgoal has to be met
|
||||
SUM // The subgoals sum must reach a certain (positive !) number.
|
||||
|
||||
The format to use for AND, AND-AT-ONCE and OR is :
|
||||
<goal type="AND">
|
||||
<goal type="name_of_counter" value="X"/>
|
||||
<goal type="name_of_counter" value="Y"/>
|
||||
</goal>
|
||||
|
||||
For SUM, it is :
|
||||
<goal type="SUM" value="X">
|
||||
<goal type="name_of_counter" operation="+"/>
|
||||
<goal type="name_of_counter" operation="-"/>
|
||||
</goal>
|
||||
With the value of operation (+ or -) defining if the subgoal is added
|
||||
or subtracted from the total.
|
||||
|
||||
Sub-goals can also have their own sub-goals,
|
||||
however a AND, AND-AT-ONCE or OR can't have a SUM goal for parent.
|
||||
___________________________________________________________________________
|
||||
|
||||
I - Won races (normal, time-trial, FTL) counters.
|
||||
Require to beat at least 3 AIs in any difficulty.
|
||||
|
||||
won-races : total number of races won
|
||||
won-normal-races
|
||||
won-tt-races
|
||||
won-ftl-races
|
||||
|
||||
II - Consecutive won races counters.
|
||||
These counters are reset if a race is restarted,
|
||||
or if a race is lost even if the AI count to increment
|
||||
is not met.
|
||||
|
||||
cons-won-races
|
||||
cons-won-races-hard // This requires 5+ AIs and expert+ difficulty
|
||||
|
||||
III - Race started and finished counters, by difficulty (linear races only)
|
||||
easy-started
|
||||
easy-finished
|
||||
medium-started
|
||||
medium-finished
|
||||
hard-started
|
||||
hard-finished
|
||||
best-started
|
||||
best-finished
|
||||
|
||||
IV - Race started and finished counters, by game mode.
|
||||
Races against a ghost are counted both in the base mode counter,
|
||||
either time-trial or egg hunt, and in their own specific counter.
|
||||
|
||||
normal-started
|
||||
normal-finished
|
||||
tt-started
|
||||
tt-finished
|
||||
ftl-started
|
||||
ftl-finished
|
||||
three-strikes-started
|
||||
three-strikes-finished
|
||||
soccer-started
|
||||
soccer-finished
|
||||
egg-hunt-started
|
||||
egg-hunt-finished
|
||||
with-ghost-started
|
||||
with-ghost-finished
|
||||
ctf-started
|
||||
ctf-finished
|
||||
ffa-started
|
||||
ffa-finished
|
||||
|
||||
IV - Counters related to powerup use. The hit counters reference how many
|
||||
times the player kart has hit other karts, not how often it was hit.
|
||||
|
||||
powerup-used
|
||||
powerup-used-1race
|
||||
bowling-hit
|
||||
bowling-hit-1race
|
||||
swatter-hit
|
||||
swatter-hit-1race
|
||||
all-hits // hits from bowling ball, cake and swatter
|
||||
all-hits-1race
|
||||
hit-same-kart-1race
|
||||
|
||||
V - Counters related to other race events.
|
||||
|
||||
banana // counts how many banana the player's kart has hit
|
||||
banana-1race
|
||||
skidding
|
||||
skidding-1race
|
||||
skidding-1lap
|
||||
|
||||
VI - Per-track counters (at least one track reach the value)
|
||||
|
||||
race-started
|
||||
race-finished
|
||||
race-won
|
||||
race-finished-reverse
|
||||
race-finished-alone
|
||||
less-laps
|
||||
more-laps
|
||||
twice-laps
|
||||
egg-hunt-started
|
||||
egg-hunt-finished
|
||||
|
||||
VII - Per-track counters (all non-addon tracks reach the value)
|
||||
|
||||
race-started-all
|
||||
race-finished-all
|
||||
race-won-all
|
||||
race-finished-reverse-all
|
||||
race-finished-alone-all
|
||||
less-laps-all
|
||||
more-laps-all
|
||||
twice-laps-all
|
||||
|
||||
// For egg hunts, all non-addon tracks with egg hunt support
|
||||
// must reach the value
|
||||
egg-hunt-started-all
|
||||
egg-hunt-finished-all
|
||||
-->
|
||||
<achievements version="1">
|
||||
<achievement id="1" name="Christoffel Columbus" description="Play every official track at least once." >
|
||||
<goal type="race-finished-all" value="1"/>
|
||||
</achievement>
|
||||
<achievement id="2" name="Strike!" description="Hit 10 karts with a bowling-ball.">
|
||||
<goal type="bowling-hit" value="10"/>
|
||||
</achievement>
|
||||
<achievement id="3" name="Arch Enemy" description="Hit the same kart at least 5 times in one race.">
|
||||
<goal type="hit-same-kart-1race" value="5"/>
|
||||
</achievement>
|
||||
<achievement id="4" name="Marathoner" description="Finish a race with at least twice the track's default lap number.">
|
||||
<goal type="twice-laps" value="1"/>
|
||||
</achievement>
|
||||
<achievement id="5" name="Skid-row" description="Skid 5 times in a single lap.">
|
||||
<goal type="skidding-1lap" value="5"/>
|
||||
</achievement>
|
||||
<achievement id="6" name="Gold driver" description="Win against at least 3 AIs in normal race, time-trial, and follow the leader.">
|
||||
<goal type="won-normal-races" value="1"/>
|
||||
<goal type="won-tt-races" value="1"/>
|
||||
<goal type="won-ftl-races" value="1"/>
|
||||
</achievement>
|
||||
<achievement id="7" name="Powerup Love" description="Use 10 or more powerups in a race.">
|
||||
<goal type="powerup-used-1race" value="10"/>
|
||||
</achievement>
|
||||
<achievement id="8" name="Unstoppable" description="Win 5 single races in a row against at least 3 AIs. Beware, restarting a race counts as a loss.">
|
||||
<goal type="cons-won-races" value="5"/>
|
||||
</achievement>
|
||||
<achievement id="9" name="Banana Lover" description="Collect at least 5 bananas in one race.">
|
||||
<goal type="banana-1race" value="5"/>
|
||||
</achievement>
|
||||
<achievement id="10" name="It's secret" description="Really ... a secret." secret="yes">
|
||||
</achievement>
|
||||
<achievement id="11" name="Mosquito Hunter" description="Take your opponents for mosquitos! With the swatter, squash them at least 5 times in a race.">
|
||||
<goal type="swatter-hit-1race" value="5"/>
|
||||
</achievement>
|
||||
<achievement id="12" name="Beyond Luck" description="Win 10 single races in a row in Expert or SuperTux against at least 5 AIs. Beware, restarting a race counts as a loss.">
|
||||
<goal type="cons-won-races-hard" value="10"/>
|
||||
</achievement>
|
||||
<achievements>
|
||||
<achievement id="1" check-type="all-at-least" reset-type="never"
|
||||
name="Christoffel Columbus" description="Play every official track at least once." >
|
||||
<city goal="1"/>
|
||||
<cocoa_temple goal="1"/>
|
||||
<farm goal="1"/>
|
||||
<fortmagma goal="1"/>
|
||||
<gran_paradiso_island goal="1"/>
|
||||
<greenvalley goal="1"/>
|
||||
<hacienda goal="1"/>
|
||||
<lighthouse goal="1"/>
|
||||
<mansion goal="1"/>
|
||||
<mines goal="1"/>
|
||||
<minigolf goal="1"/>
|
||||
<olivermath goal="1"/>
|
||||
<sandtrack goal="1"/>
|
||||
<scotland goal="1"/>
|
||||
<snowmountain goal="1"/>
|
||||
<snowtuxpeak goal="1"/>
|
||||
<stk_enterprise goal="1"/>
|
||||
<subsea goal="1"/>
|
||||
<xr591 goal="1"/>
|
||||
<zengarden goal="1"/>
|
||||
</achievement>
|
||||
<achievement id="2" check-type="all-at-least" reset-type="never"
|
||||
name="Strike!" description="Hit 10 karts with a bowling-ball.">
|
||||
<ball goal="10"/>
|
||||
</achievement>
|
||||
<achievement id="3" check-type="one-at-least" reset-type="race"
|
||||
name="Arch Enemy" description="Hit the same kart at least 5 times in one race.">
|
||||
<hit goal="5"/>
|
||||
</achievement>
|
||||
<achievement id="4" check-type="all-at-least" reset-type="race"
|
||||
name="Marathoner" description="Make a race with 5 laps or more.">
|
||||
<laps goal="5"/>
|
||||
</achievement>
|
||||
<achievement id="5" check-type="all-at-least" reset-type="lap"
|
||||
name="Skid-row" description="Make 5 skidding in a single lap.">
|
||||
<skidding goal="5"/>
|
||||
</achievement>
|
||||
<achievement id="6" check-type="all-at-least" reset-type="never"
|
||||
name="Gold driver" description="Win against at least 3 opponents in all single player modes.">
|
||||
<standard goal="1"/>
|
||||
<std_timetrial goal="1"/>
|
||||
<follow_leader goal="1"/>
|
||||
<opponents goal="3"/>
|
||||
</achievement>
|
||||
<achievement id="7" check-type="all-at-least" reset-type="race"
|
||||
name="Powerup Love" description="Use 10 or more powerups in a race.">
|
||||
<poweruplover goal="10"/>
|
||||
</achievement>
|
||||
<achievement id="8" check-type="all-at-least" reset-type="never"
|
||||
name="Unstoppable" description="Win 5 single races in a row.">
|
||||
<wins goal="5"/>
|
||||
</achievement>
|
||||
<achievement id="9" check-type="all-at-least" reset-type="race"
|
||||
name="Banana Lover" description="Collect at least 5 bananas in one race.">
|
||||
<banana goal="5"/>
|
||||
</achievement>
|
||||
<achievement id="10" secret="yes" check-type="all-at-least" reset-type="race"
|
||||
name="It's secret" description="Really ... a secret.">
|
||||
</achievement>
|
||||
<achievement id="11" check-type="all-at-least" reset-type="race"
|
||||
name="Mosquito Hunter" description="Take your opponents for mosquitos! With the swatter, squash at least 5 of them in a race.">
|
||||
<swatter goal="5"/>
|
||||
</achievement>
|
||||
</achievements>
|
||||
|
21
data/addons.supertuxkart.net.pem
Normal file
@ -0,0 +1,21 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDezCCAmOgAwIBAgIJAO+A8uXtEMRsMA0GCSqGSIb3DQEBCwUAMFQxCzAJBgNV
|
||||
BAYTAlVTMQwwCgYDVQQIDANTVEsxFTATBgNVBAoMDFN1cGVyVHV4S2FydDEgMB4G
|
||||
A1UEAwwXYWRkb25zLnN1cGVydHV4a2FydC5uZXQwHhcNMTQxMjEwMTEzMTAwWhcN
|
||||
MjQxMjA3MTEzMTAwWjBUMQswCQYDVQQGEwJVUzEMMAoGA1UECAwDU1RLMRUwEwYD
|
||||
VQQKDAxTdXBlclR1eEthcnQxIDAeBgNVBAMMF2FkZG9ucy5zdXBlcnR1eGthcnQu
|
||||
bmV0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2ysZE9rb4y0tHOhk
|
||||
wxYpqsvDv5LCRFTAeyfAfyBVDcOn+4A3sX8MkQdoH/QDi823z4bn9ZsGV8T444FN
|
||||
S4yK/aSRv3eAKkkJm5TUxbs3crATVt3JYusMr5W4wHvRVyDe0DlulSdW4EUEklMP
|
||||
iPat/jwlDZRvZueio3wJoOhZXnl8E8EfnuYtlNONIB1nYGdUHD9xeNyKSPr4zTEp
|
||||
brjvSw0l5G88LmQOROQBDbTDknAcIQwsFT1mf9Bt+N9LK14r95GWRmL3ZtfbrJn4
|
||||
ZEfkOjl0Abv6gET4sQOXv0KioUdEJwzFCwKFLZVcuOrscmcHBOhgD3EruVvprIJ0
|
||||
wZ3z1wIDAQABo1AwTjAdBgNVHQ4EFgQUmQwaPsD+ylVUUsUXMAYpUlnVbNwwHwYD
|
||||
VR0jBBgwFoAUmQwaPsD+ylVUUsUXMAYpUlnVbNwwDAYDVR0TBAUwAwEB/zANBgkq
|
||||
hkiG9w0BAQsFAAOCAQEASyl6BMpnZhJlirDL84/RkVeVjBkr7x68UFAblmKjgfGg
|
||||
pRbYPNSld0IrfZ4pcrDAUkg9WJb0Zxuh0oYiV+RjdW/6s5mF/qiSv8V60xb2myRd
|
||||
z90ZGfhB5SAECI5zfIZSmsMjOEjKjuz8S26aEtJe8Vq7GF2P7/889lfNXrbvIkZX
|
||||
HQpx2P+T07zy++6Ca/K2vmWcf1a+GrN+o0nZTYbz/2r/JJwXdWqT1ZmtEA9GNwvZ
|
||||
J8HhgvspgjgVP/EURUUhOaQ8zfhriU5CJAIuhMhzW7oOBPHxxtxme3auAfxi5zpK
|
||||
wRNluCayrrjhy2I8mABRnBqgMwAQUIrgk9IU6SyQxw==
|
||||
-----END CERTIFICATE-----
|
3154
data/cacert.pem
@ -1,24 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<challenge version="3">
|
||||
<unlock_list list="false"/>
|
||||
<track id="abyss" laps="3" reverse="false"/>
|
||||
<mode major="single" minor="quickrace"/>
|
||||
<requirements trophies="0"/>
|
||||
|
||||
<best>
|
||||
<karts number="7"/>
|
||||
<requirements position="1" time="130"/>
|
||||
</best>
|
||||
<hard>
|
||||
<karts number="6"/>
|
||||
<requirements position="1"/>
|
||||
</hard>
|
||||
<medium>
|
||||
<karts number="5"/>
|
||||
<requirements position="1"/>
|
||||
</medium>
|
||||
<easy>
|
||||
<karts number="4"/>
|
||||
<requirements position="1"/>
|
||||
</easy>
|
||||
</challenge>
|
@ -1,26 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<challenge version="3">
|
||||
<unlock_list list="false"/>
|
||||
<track id="candela_city" laps="3" reverse="false"/>
|
||||
<mode major="single" minor="quickrace"/>
|
||||
<requirements trophies="90"/>
|
||||
|
||||
<best>
|
||||
<karts number="9"/>
|
||||
<requirements position="1" time="112"/>
|
||||
</best>
|
||||
<hard>
|
||||
<karts number="8"/>
|
||||
<requirements position="1"/>
|
||||
</hard>
|
||||
<medium>
|
||||
<karts number="7"/>
|
||||
<requirements position="1"/>
|
||||
</medium>
|
||||
<easy>
|
||||
<karts number="6"/>
|
||||
<requirements position="1"/>
|
||||
</easy>
|
||||
|
||||
<unlock kart="sara_the_racer"/>
|
||||
</challenge>
|
19
data/challenges/city.challenge
Normal file
@ -0,0 +1,19 @@
|
||||
<?xml version="1.0"?>
|
||||
<challenge version="2">
|
||||
<track id="city" laps="3"/>
|
||||
<mode major="single" minor="quickrace"/>
|
||||
<requirements trophies="70"/>
|
||||
|
||||
<hard>
|
||||
<karts number="5"/>
|
||||
<requirements position="1"/>
|
||||
</hard>
|
||||
<medium>
|
||||
<karts number="4"/>
|
||||
<requirements position="1"/>
|
||||
</medium>
|
||||
<easy>
|
||||
<karts number="3"/>
|
||||
<requirements position="1"/>
|
||||
</easy>
|
||||
</challenge>
|
@ -1,31 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<challenge version="3">
|
||||
<unlock_list list="false"/>
|
||||
<track id="cocoa_temple" laps="3" reverse="false"/>
|
||||
<mode major="single" minor="timetrial"/>
|
||||
<requirements trophies="45"/>
|
||||
|
||||
<best>
|
||||
<karts number="1"
|
||||
replay_file="challenge_cocoa_temple_supertux.replay"/>
|
||||
<requirements position="1"/>
|
||||
</best>
|
||||
<hard>
|
||||
<karts number="1"
|
||||
replay_file="challenge_cocoa_temple_expert.replay"/>
|
||||
<requirements position="1"/>
|
||||
</hard>
|
||||
<medium>
|
||||
<karts number="1"
|
||||
replay_file="challenge_cocoa_temple_intermediate.replay"/>
|
||||
<requirements position="1"/>
|
||||
</medium>
|
||||
<easy>
|
||||
<karts number="1"
|
||||
replay_file="challenge_cocoa_temple_novice.replay"/>
|
||||
<karts number="1"/>
|
||||
<requirements position="1"/>
|
||||
</easy>
|
||||
|
||||
<unlock kart="suzanne"/>
|
||||
</challenge>
|
@ -1,24 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<challenge version="3">
|
||||
<unlock_list list="false"/>
|
||||
<track id="cornfield_crossing" laps="3" reverse="false"/>
|
||||
<mode major="single" minor="quickrace"/>
|
||||
<requirements trophies="0"/>
|
||||
|
||||
<best>
|
||||
<karts number="8"/>
|
||||
<requirements position="1" time="128"/>
|
||||
</best>
|
||||
<hard>
|
||||
<karts number="7"/>
|
||||
<requirements position="1"/>
|
||||
</hard>
|
||||
<medium>
|
||||
<karts number="6"/>
|
||||
<requirements position="1"/>
|
||||
</medium>
|
||||
<easy>
|
||||
<karts number="5"/>
|
||||
<requirements position="1"/>
|
||||
</easy>
|
||||
</challenge>
|
19
data/challenges/farm.challenge
Normal file
@ -0,0 +1,19 @@
|
||||
<?xml version="1.0"?>
|
||||
<challenge version="2">
|
||||
<track id="farm" laps="3"/>
|
||||
<mode major="single" minor="quickrace"/>
|
||||
<requirements trophies="0"/>
|
||||
|
||||
<hard>
|
||||
<karts number="5"/>
|
||||
<requirements position="1" time="110"/>
|
||||
</hard>
|
||||
<medium>
|
||||
<karts number="4"/>
|
||||
<requirements time="125"/>
|
||||
</medium>
|
||||
<easy>
|
||||
<karts number="4"/>
|
||||
<requirements time="155"/>
|
||||
</easy>
|
||||
</challenge>
|
@ -1,14 +1,9 @@
|
||||
<?xml version="1.0"?>
|
||||
<challenge version="3">
|
||||
<unlock_list list="false"/>
|
||||
<track id="fortmagma" laps="3" reverse="false"/>
|
||||
<challenge version="2">
|
||||
<track id="fortmagma" laps="3"/>
|
||||
<mode major="single" minor="quickrace"/>
|
||||
<requirements trophies="190" challenges="24"/>
|
||||
<requirements trophies="180"/>
|
||||
|
||||
<best>
|
||||
<karts number="2" aiIdent="nolok" superPower="nolokBoss"/>
|
||||
<requirements position="1"/>
|
||||
</best>
|
||||
<hard>
|
||||
<karts number="2" aiIdent="nolok" superPower="nolokBoss"/>
|
||||
<requirements position="1"/>
|
||||
@ -24,5 +19,6 @@
|
||||
|
||||
<unlock kart="gnu"/>
|
||||
<unlock kart="nolok"/>
|
||||
<unlock difficulty="difficulty_best"/>
|
||||
<unlock track="fortmagma"/>
|
||||
</challenge>
|
||||
|
@ -1,24 +1,19 @@
|
||||
<?xml version="1.0"?>
|
||||
<challenge version="3">
|
||||
<unlock_list list="false"/>
|
||||
<challenge version="2">
|
||||
<grandprix id="1_penguinplayground"/>
|
||||
<mode major="grandprix" minor="quickrace"/>
|
||||
<requirements trophies="30"/>
|
||||
<requirements trophies="40"/>
|
||||
|
||||
<best>
|
||||
<karts number="7"/>
|
||||
<requirements position="1"/>
|
||||
</best>
|
||||
<hard>
|
||||
<karts number="6"/>
|
||||
<karts number="5"/>
|
||||
<requirements position="1"/>
|
||||
</hard>
|
||||
<medium>
|
||||
<karts number="5"/>
|
||||
<karts number="4"/>
|
||||
<requirements position="1"/>
|
||||
</medium>
|
||||
<easy>
|
||||
<karts number="4"/>
|
||||
<karts number="3"/>
|
||||
<requirements position="1"/>
|
||||
</easy>
|
||||
</challenge>
|
||||
|
@ -1,24 +1,19 @@
|
||||
<?xml version="1.0"?>
|
||||
<challenge version="3">
|
||||
<unlock_list list="false"/>
|
||||
<challenge version="2">
|
||||
<grandprix id="2_offthebeatentrack"/>
|
||||
<mode major="grandprix" minor="quickrace"/>
|
||||
<requirements trophies="70"/>
|
||||
<requirements trophies="85"/>
|
||||
|
||||
<best>
|
||||
<karts number="8"/>
|
||||
<requirements position="1"/>
|
||||
</best>
|
||||
<hard>
|
||||
<karts number="7"/>
|
||||
<karts number="5"/>
|
||||
<requirements position="1"/>
|
||||
</hard>
|
||||
<medium>
|
||||
<karts number="6"/>
|
||||
<karts number="4"/>
|
||||
<requirements position="1"/>
|
||||
</medium>
|
||||
<easy>
|
||||
<karts number="5"/>
|
||||
<karts number="3"/>
|
||||
<requirements position="1"/>
|
||||
</easy>
|
||||
</challenge>
|
||||
|
@ -1,24 +1,19 @@
|
||||
<?xml version="1.0"?>
|
||||
<challenge version="3">
|
||||
<unlock_list list="false"/>
|
||||
<challenge version="2">
|
||||
<grandprix id="3_tothemoonandback"/>
|
||||
<mode major="grandprix" minor="timetrial"/>
|
||||
<requirements trophies="120"/>
|
||||
<mode major="grandprix" minor="quickrace"/>
|
||||
<requirements trophies="125"/>
|
||||
|
||||
<best>
|
||||
<karts number="9"/>
|
||||
<requirements position="1"/>
|
||||
</best>
|
||||
<hard>
|
||||
<karts number="8"/>
|
||||
<karts number="5"/>
|
||||
<requirements position="1"/>
|
||||
</hard>
|
||||
<medium>
|
||||
<karts number="7"/>
|
||||
<karts number="4"/>
|
||||
<requirements position="1"/>
|
||||
</medium>
|
||||
<easy>
|
||||
<karts number="6"/>
|
||||
<karts number="3"/>
|
||||
<requirements position="1"/>
|
||||
</easy>
|
||||
</challenge>
|
||||
|
@ -1,24 +1,19 @@
|
||||
<?xml version="1.0"?>
|
||||
<challenge version="3">
|
||||
<unlock_list list="false"/>
|
||||
<challenge version="2">
|
||||
<grandprix id="4_atworldsend"/>
|
||||
<mode major="grandprix" minor="quickrace"/>
|
||||
<requirements trophies="165"/>
|
||||
|
||||
<best>
|
||||
<karts number="10"/>
|
||||
<requirements position="1"/>
|
||||
</best>
|
||||
<hard>
|
||||
<karts number="9"/>
|
||||
<karts number="5"/>
|
||||
<requirements position="1"/>
|
||||
</hard>
|
||||
<medium>
|
||||
<karts number="8"/>
|
||||
<karts number="4"/>
|
||||
<requirements position="1"/>
|
||||
</medium>
|
||||
<easy>
|
||||
<karts number="7"/>
|
||||
<karts number="3"/>
|
||||
<requirements position="1"/>
|
||||
</easy>
|
||||
</challenge>
|
||||
|
@ -1,24 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<challenge version="3">
|
||||
<unlock_list list="false"/>
|
||||
<track id="gran_paradiso_island" laps="3" reverse="false"/>
|
||||
<mode major="single" minor="quickrace"/>
|
||||
<requirements trophies="80"/>
|
||||
|
||||
<best>
|
||||
<karts number="9"/>
|
||||
<requirements position="1" time="134"/>
|
||||
</best>
|
||||
<hard>
|
||||
<karts number="8"/>
|
||||
<requirements position="1"/>
|
||||
</hard>
|
||||
<medium>
|
||||
<karts number="7"/>
|
||||
<requirements position="1"/>
|
||||
</medium>
|
||||
<easy>
|
||||
<karts number="6"/>
|
||||
<requirements position="1"/>
|
||||
</easy>
|
||||
</challenge>
|
@ -1,24 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<challenge version="3">
|
||||
<unlock_list list="false"/>
|
||||
<track id="black_forest" laps="2" reverse="false"/>
|
||||
<mode major="single" minor="quickrace"/>
|
||||
<requirements trophies="130"/>
|
||||
|
||||
<best>
|
||||
<karts number="10"/>
|
||||
<requirements position="1" time="170"/>
|
||||
</best>
|
||||
<hard>
|
||||
<karts number="9"/>
|
||||
<requirements position="1"/>
|
||||
</hard>
|
||||
<medium>
|
||||
<karts number="8"/>
|
||||
<requirements position="1"/>
|
||||
</medium>
|
||||
<easy>
|
||||
<karts number="7"/>
|
||||
<requirements position="1"/>
|
||||
</easy>
|
||||
</challenge>
|
@ -1,24 +1,19 @@
|
||||
<?xml version="1.0"?>
|
||||
<challenge version="3">
|
||||
<unlock_list list="false"/>
|
||||
<track id="hacienda" laps="3" reverse="false"/>
|
||||
<challenge version="2">
|
||||
<track id="hacienda" laps="3"/>
|
||||
<mode major="single" minor="quickrace"/>
|
||||
<requirements trophies="0"/>
|
||||
<requirements trophies="45"/>
|
||||
|
||||
<best>
|
||||
<karts number="7"/>
|
||||
<requirements position="1" time="124"/>
|
||||
</best>
|
||||
<hard>
|
||||
<karts number="6"/>
|
||||
<requirements position="1"/>
|
||||
<karts number="5"/>
|
||||
<requirements position="2" time="170"/>
|
||||
</hard>
|
||||
<medium>
|
||||
<karts number="5"/>
|
||||
<requirements position="1"/>
|
||||
<karts number="4"/>
|
||||
<requirements time="185"/>
|
||||
</medium>
|
||||
<easy>
|
||||
<karts number="4"/>
|
||||
<requirements position="1"/>
|
||||
<requirements time="220"/>
|
||||
</easy>
|
||||
</challenge>
|
||||
|
20
data/challenges/islandtrack.challenge
Normal file
@ -0,0 +1,20 @@
|
||||
<?xml version="1.0"?>
|
||||
<challenge version="2">
|
||||
<track id="gran_paradiso_island" laps="3"/>
|
||||
<mode major="single" minor="quickrace"/>
|
||||
<requirements trophies="95"/>
|
||||
|
||||
<hard>
|
||||
<karts number="5"/>
|
||||
<requirements position="1"/>
|
||||
</hard>
|
||||
<medium>
|
||||
<karts number="4"/>
|
||||
<requirements position="1"/>
|
||||
</medium>
|
||||
<easy>
|
||||
<karts number="3"/>
|
||||
<requirements position="1"/>
|
||||
</easy>
|
||||
</challenge>
|
||||
|
19
data/challenges/jungle.challenge
Normal file
@ -0,0 +1,19 @@
|
||||
<?xml version="1.0"?>
|
||||
<challenge version="2">
|
||||
<track id="cocoa_temple" laps="3"/>
|
||||
<mode major="single" minor="quickrace"/>
|
||||
<requirements trophies="15"/>
|
||||
|
||||
<hard>
|
||||
<karts number="5"/>
|
||||
<requirements position="1" time="170"/>
|
||||
</hard>
|
||||
<medium>
|
||||
<karts number="4"/>
|
||||
<requirements time="210"/>
|
||||
</medium>
|
||||
<easy>
|
||||
<karts number="4"/>
|
||||
<requirements time="300"/>
|
||||
</easy>
|
||||
</challenge>
|
@ -1,24 +1,20 @@
|
||||
<?xml version="1.0"?>
|
||||
<challenge version="3">
|
||||
<unlock_list list="false"/>
|
||||
<track id="lighthouse" laps="4" reverse="false"/>
|
||||
<challenge version="2">
|
||||
<track id="lighthouse" laps="3"/>
|
||||
<mode major="single" minor="quickrace"/>
|
||||
<requirements trophies="95"/>
|
||||
<requirements trophies="135"/>
|
||||
|
||||
<best>
|
||||
<karts number="9"/>
|
||||
<requirements position="1" time="120"/>
|
||||
</best>
|
||||
<hard>
|
||||
<karts number="8"/>
|
||||
<requirements position="1"/>
|
||||
<karts number="5"/>
|
||||
<requirements time="110" position="1"/>
|
||||
</hard>
|
||||
<medium>
|
||||
<karts number="7"/>
|
||||
<requirements position="1"/>
|
||||
<karts number="4"/>
|
||||
<requirements time="145" position="1"/>
|
||||
</medium>
|
||||
<easy>
|
||||
<karts number="6"/>
|
||||
<requirements position="1"/>
|
||||
<karts number="3"/>
|
||||
<requirements time="185"/>
|
||||
</easy>
|
||||
</challenge>
|
||||
|
||||
|
@ -1,24 +1,19 @@
|
||||
<?xml version="1.0"?>
|
||||
<challenge version="3">
|
||||
<unlock_list list="false"/>
|
||||
<track id="ravenbridge_mansion" laps="3" reverse="false"/>
|
||||
<challenge version="2">
|
||||
<track id="mansion" laps="3"/>
|
||||
<mode major="single" minor="quickrace"/>
|
||||
<requirements trophies="0"/>
|
||||
|
||||
<best>
|
||||
<karts number="8"/>
|
||||
<requirements position="1" time="130"/>
|
||||
</best>
|
||||
<requirements trophies="110"/>
|
||||
|
||||
<hard>
|
||||
<karts number="7"/>
|
||||
<requirements position="1"/>
|
||||
<karts number="5"/>
|
||||
<requirements time="130"/>
|
||||
</hard>
|
||||
<medium>
|
||||
<karts number="6"/>
|
||||
<requirements position="1"/>
|
||||
<karts number="4"/>
|
||||
<requirements time="130"/>
|
||||
</medium>
|
||||
<easy>
|
||||
<karts number="5"/>
|
||||
<requirements position="1"/>
|
||||
<karts number="4"/>
|
||||
<requirements time="160"/>
|
||||
</easy>
|
||||
</challenge>
|
||||
|
@ -1,24 +1,19 @@
|
||||
<?xml version="1.0"?>
|
||||
<challenge version="3">
|
||||
<unlock_list list="false"/>
|
||||
<track id="mines" laps="3" reverse="false"/>
|
||||
<challenge version="2">
|
||||
<track id="mines" laps="3"/>
|
||||
<mode major="single" minor="quickrace"/>
|
||||
<requirements trophies="140"/>
|
||||
<requirements trophies="150"/>
|
||||
|
||||
<best>
|
||||
<karts number="10"/>
|
||||
<requirements position="1" time="122"/>
|
||||
</best>
|
||||
<hard>
|
||||
<karts number="9"/>
|
||||
<requirements position="1"/>
|
||||
<karts number="4"/>
|
||||
<requirements time="170"/>
|
||||
</hard>
|
||||
<medium>
|
||||
<karts number="8"/>
|
||||
<requirements position="1"/>
|
||||
<karts number="4"/>
|
||||
<requirements time="190"/>
|
||||
</medium>
|
||||
<easy>
|
||||
<karts number="7"/>
|
||||
<requirements position="1"/>
|
||||
<karts number="4"/>
|
||||
<requirements time="255"/>
|
||||
</easy>
|
||||
</challenge>
|
||||
|
@ -1,24 +1,19 @@
|
||||
<?xml version="1.0"?>
|
||||
<challenge version="3">
|
||||
<unlock_list list="false"/>
|
||||
<track id="minigolf" laps="4" reverse="false"/>
|
||||
<challenge version="2">
|
||||
<track id="minigolf" laps="3"/>
|
||||
<mode major="single" minor="quickrace"/>
|
||||
<requirements trophies="125"/>
|
||||
<requirements trophies="150"/>
|
||||
|
||||
<best>
|
||||
<karts number="10"/>
|
||||
<requirements position="1" time="116"/>
|
||||
</best>
|
||||
<hard>
|
||||
<karts number="9"/>
|
||||
<karts number="5"/>
|
||||
<requirements position="1"/>
|
||||
</hard>
|
||||
<medium>
|
||||
<karts number="8"/>
|
||||
<karts number="4"/>
|
||||
<requirements position="1"/>
|
||||
</medium>
|
||||
<easy>
|
||||
<karts number="7"/>
|
||||
<karts number="3"/>
|
||||
<requirements position="1"/>
|
||||
</easy>
|
||||
</challenge>
|
||||
|
@ -1,24 +1,20 @@
|
||||
<?xml version="1.0"?>
|
||||
<challenge version="3">
|
||||
<unlock_list list="false"/>
|
||||
<track id="olivermath" laps="5" reverse="false"/>
|
||||
<challenge version="2">
|
||||
<track id="olivermath" laps="3"/>
|
||||
<mode major="single" minor="quickrace"/>
|
||||
<requirements trophies="75"/>
|
||||
|
||||
<best>
|
||||
<karts number="9"/>
|
||||
<requirements position="1" time="77"/>
|
||||
</best>
|
||||
<requirements trophies="0"/>
|
||||
|
||||
<hard>
|
||||
<karts number="8"/>
|
||||
<requirements position="1"/>
|
||||
<karts number="5"/>
|
||||
<requirements position="1" time="65"/>
|
||||
</hard>
|
||||
<medium>
|
||||
<karts number="7"/>
|
||||
<requirements position="1"/>
|
||||
<karts number="5"/>
|
||||
<requirements position="1" time="85"/>
|
||||
</medium>
|
||||
<easy>
|
||||
<karts number="6"/>
|
||||
<requirements position="1"/>
|
||||
<karts number="5"/>
|
||||
<requirements position="1" time="105"/>
|
||||
</easy>
|
||||
</challenge>
|
||||
|
||||
|
@ -1,21 +1,16 @@
|
||||
<?xml version="1.0"?>
|
||||
<challenge version="3">
|
||||
<unlock_list list="false"/>
|
||||
<track id="sandtrack" laps="3" reverse="false"/>
|
||||
<mode major="single" minor="timetrial"/>
|
||||
<challenge version="2">
|
||||
<track id="sandtrack" laps="3"/>
|
||||
<mode major="single" minor="quickrace"/>
|
||||
<requirements trophies="0"/>
|
||||
|
||||
<best>
|
||||
<karts number="1"/>
|
||||
<requirements energy="20" time="128"/>
|
||||
</best>
|
||||
<hard>
|
||||
<karts number="1"/>
|
||||
<requirements energy="18" time="155"/>
|
||||
<requirements energy="18" time="167"/>
|
||||
</hard>
|
||||
<medium>
|
||||
<karts number="1"/>
|
||||
<requirements energy="15" time="190"/>
|
||||
<requirements energy="15" time="195"/>
|
||||
</medium>
|
||||
<easy>
|
||||
<karts number="1"/>
|
||||
|
@ -1,24 +1,19 @@
|
||||
<?xml version="1.0"?>
|
||||
<challenge version="3">
|
||||
<unlock_list list="false"/>
|
||||
<track id="scotland" laps="3" reverse="false"/>
|
||||
<challenge version="2">
|
||||
<track id="scotland" laps="3"/>
|
||||
<mode major="single" minor="quickrace"/>
|
||||
<requirements trophies="0"/>
|
||||
|
||||
<best>
|
||||
<karts number="7"/>
|
||||
<requirements position="1" time="125"/>
|
||||
</best>
|
||||
<hard>
|
||||
<karts number="6"/>
|
||||
<requirements position="1" time="150"/>
|
||||
<karts number="5"/>
|
||||
<requirements position="1" time="165"/>
|
||||
</hard>
|
||||
<medium>
|
||||
<karts number="5"/>
|
||||
<requirements position="1"/>
|
||||
<karts number="4"/>
|
||||
<requirements time="185"/>
|
||||
</medium>
|
||||
<easy>
|
||||
<karts number="4"/>
|
||||
<requirements position="1"/>
|
||||
<requirements time="270"/>
|
||||
</easy>
|
||||
</challenge>
|
||||
|
@ -1,24 +1,19 @@
|
||||
<?xml version="1.0"?>
|
||||
<challenge version="3">
|
||||
<unlock_list list="false"/>
|
||||
<track id="snowmountain" laps="3" reverse="false"/>
|
||||
<challenge version="2">
|
||||
<track id="snowmountain" laps="3"/>
|
||||
<mode major="single" minor="quickrace"/>
|
||||
<requirements trophies="105"/>
|
||||
|
||||
<best>
|
||||
<karts number="9"/>
|
||||
<requirements position="1" time="110"/>
|
||||
</best>
|
||||
<requirements trophies="60"/>
|
||||
|
||||
<hard>
|
||||
<karts number="8"/>
|
||||
<requirements position="1"/>
|
||||
<karts number="5"/>
|
||||
<requirements time="160"/>
|
||||
</hard>
|
||||
<medium>
|
||||
<karts number="7"/>
|
||||
<requirements position="1"/>
|
||||
<karts number="4"/>
|
||||
<requirements time="187"/>
|
||||
</medium>
|
||||
<easy>
|
||||
<karts number="6"/>
|
||||
<requirements position="1"/>
|
||||
<karts number="4"/>
|
||||
<requirements time="250"/>
|
||||
</easy>
|
||||
</challenge>
|
||||
|
@ -1,24 +1,19 @@
|
||||
<?xml version="1.0"?>
|
||||
<challenge version="3">
|
||||
<unlock_list list="false"/>
|
||||
<track id="snowtuxpeak" laps="3" reverse="false"/>
|
||||
<challenge version="2">
|
||||
<track id="snowtuxpeak" laps="3"/>
|
||||
<mode major="single" minor="quickrace"/>
|
||||
<requirements trophies="0"/>
|
||||
<requirements trophies="60"/>
|
||||
|
||||
<best>
|
||||
<karts number="8"/>
|
||||
<requirements position="1" time="105"/>
|
||||
</best>
|
||||
<hard>
|
||||
<karts number="7"/>
|
||||
<requirements position="1"/>
|
||||
<karts number="5"/>
|
||||
<requirements position="1" time="145"/>
|
||||
</hard>
|
||||
<medium>
|
||||
<karts number="6"/>
|
||||
<requirements position="1"/>
|
||||
<karts number="4"/>
|
||||
<requirements time="170"/>
|
||||
</medium>
|
||||
<easy>
|
||||
<karts number="5"/>
|
||||
<requirements position="1"/>
|
||||
<karts number="4"/>
|
||||
<requirements time="195"/>
|
||||
</easy>
|
||||
</challenge>
|
||||
|
19
data/challenges/startrack.challenge
Normal file
@ -0,0 +1,19 @@
|
||||
<?xml version="1.0"?>
|
||||
<challenge version="2">
|
||||
<track id="stk_enterprise" laps="3"/>
|
||||
<mode major="single" minor="followtheleader"/>
|
||||
<requirements trophies="110"/>
|
||||
|
||||
<hard>
|
||||
<karts number="6"/>
|
||||
<requirements position="2"/>
|
||||
</hard>
|
||||
<medium>
|
||||
<karts number="6"/>
|
||||
<requirements position="2"/>
|
||||
</medium>
|
||||
<easy>
|
||||
<karts number="5"/>
|
||||
<requirements position="2"/>
|
||||
</easy>
|
||||
</challenge>
|
@ -1,24 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<challenge version="3">
|
||||
<unlock_list list="false"/>
|
||||
<track id="stk_enterprise" laps="3" reverse="false"/>
|
||||
<mode major="single" minor="timetrial"/>
|
||||
<requirements trophies="145"/>
|
||||
|
||||
<best>
|
||||
<karts number="10"/>
|
||||
<requirements position="1" time="132"/>
|
||||
</best>
|
||||
<hard>
|
||||
<karts number="9"/>
|
||||
<requirements position="1"/>
|
||||
</hard>
|
||||
<medium>
|
||||
<karts number="8"/>
|
||||
<requirements position="1"/>
|
||||
</medium>
|
||||
<easy>
|
||||
<karts number="7"/>
|
||||
<requirements position="1"/>
|
||||
</easy>
|
||||
</challenge>
|
19
data/challenges/subsea.challenge
Normal file
@ -0,0 +1,19 @@
|
||||
<?xml version="1.0"?>
|
||||
<challenge version="2">
|
||||
<track id="subsea" laps="2"/>
|
||||
<mode major="single" minor="quickrace"/>
|
||||
<requirements trophies="0"/>
|
||||
|
||||
<hard>
|
||||
<karts number="5"/>
|
||||
<requirements position="1" time="205"/>
|
||||
</hard>
|
||||
<medium>
|
||||
<karts number="4"/>
|
||||
<requirements time="225"/>
|
||||
</medium>
|
||||
<easy>
|
||||
<karts number="4"/>
|
||||
<requirements time="290"/>
|
||||
</easy>
|
||||
</challenge>
|
19
data/challenges/tuxtollway.challenge
Normal file
@ -0,0 +1,19 @@
|
||||
<?xml version="1.0"?>
|
||||
<challenge version="2">
|
||||
<track id="greenvalley" laps="3"/>
|
||||
<mode major="single" minor="quickrace"/>
|
||||
<requirements trophies="95"/>
|
||||
|
||||
<hard>
|
||||
<karts number="5"/>
|
||||
<requirements position="1"/>
|
||||
</hard>
|
||||
<medium>
|
||||
<karts number="4"/>
|
||||
<requirements position="1"/>
|
||||
</medium>
|
||||
<easy>
|
||||
<karts number="4"/>
|
||||
<requirements position="1"/>
|
||||
</easy>
|
||||
</challenge>
|
@ -1,8 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<challenge version="3">
|
||||
<unlock_list list="true"/>
|
||||
<!-- This is the (rounded) point equivalent of finishing all challenges
|
||||
in easy, except the final challenge -->
|
||||
<requirements trophies="190"/>
|
||||
<unlock kart="amanda"/>
|
||||
</challenge>
|
@ -1,8 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<challenge version="3">
|
||||
<unlock_list list="true"/>
|
||||
<!-- This is the point equivalent of finishing the
|
||||
story mode with 8 supertux challenges and the rest in gold -->
|
||||
<requirements trophies="280"/>
|
||||
<unlock kart="sara_the_wizard"/>
|
||||
</challenge>
|
@ -1,9 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<challenge version="3">
|
||||
<unlock_list list="true"/>
|
||||
<!-- This is the point equivalent of finishing the
|
||||
story mode with all gold except 14 silver challenges -->
|
||||
<requirements trophies="250"/>
|
||||
<alt_requirements max-req-in-lower-diff="5"/>
|
||||
<unlock difficulty="difficulty_best"/>
|
||||
</challenge>
|
@ -1,24 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<challenge version="3">
|
||||
<unlock_list list="false"/>
|
||||
<track id="volcano_island" laps="2" reverse="false"/>
|
||||
<mode major="single" minor="quickrace"/>
|
||||
<requirements trophies="0"/>
|
||||
|
||||
<best>
|
||||
<karts number="7"/>
|
||||
<requirements position="1" time="138"/>
|
||||
</best>
|
||||
<hard>
|
||||
<karts number="6"/>
|
||||
<requirements position="1"/>
|
||||
</hard>
|
||||
<medium>
|
||||
<karts number="5"/>
|
||||
<requirements position="1"/>
|
||||
</medium>
|
||||
<easy>
|
||||
<karts number="4"/>
|
||||
<requirements position="1"/>
|
||||
</easy>
|
||||
</challenge>
|
@ -1,17 +1,12 @@
|
||||
<?xml version="1.0"?>
|
||||
<challenge version="3">
|
||||
<unlock_list list="false"/>
|
||||
<track id="xr591" laps="2" reverse="false"/>
|
||||
<mode major="single" minor="timetrial"/>
|
||||
<requirements trophies="150"/>
|
||||
<challenge version="2">
|
||||
<track id="xr591" laps="2"/>
|
||||
<mode major="single" minor="quickrace"/>
|
||||
<requirements trophies="135"/>
|
||||
|
||||
<best>
|
||||
<karts number="1"/>
|
||||
<requirements energy="20" time="92"/>
|
||||
</best>
|
||||
<hard>
|
||||
<karts number="1"/>
|
||||
<requirements energy="18" time="112"/>
|
||||
<requirements energy="18" time="120"/>
|
||||
</hard>
|
||||
<medium>
|
||||
<karts number="1"/>
|
||||
@ -22,3 +17,5 @@
|
||||
<requirements energy="12" time="180"/>
|
||||
</easy>
|
||||
</challenge>
|
||||
|
||||
|
||||
|
@ -1,24 +1,19 @@
|
||||
<?xml version="1.0"?>
|
||||
<challenge version="3">
|
||||
<unlock_list list="false"/>
|
||||
<track id="zengarden" laps="4" reverse="false"/>
|
||||
<challenge version="2">
|
||||
<track id="zengarden" laps="3"/>
|
||||
<mode major="single" minor="timetrial"/>
|
||||
<requirements trophies="35"/>
|
||||
<requirements trophies="45"/>
|
||||
|
||||
<best>
|
||||
<karts number="8"/>
|
||||
<requirements position="1" time="105"/>
|
||||
</best>
|
||||
<hard>
|
||||
<karts number="7"/>
|
||||
<karts number="2"/>
|
||||
<requirements position="1"/>
|
||||
</hard>
|
||||
<medium>
|
||||
<karts number="6"/>
|
||||
<karts number="2"/>
|
||||
<requirements position="1"/>
|
||||
</medium>
|
||||
<easy>
|
||||
<karts number="5"/>
|
||||
<karts number="2"/>
|
||||
<requirements position="1"/>
|
||||
</easy>
|
||||
</challenge>
|
||||
|
@ -1,259 +0,0 @@
|
||||
country_code ar be bg br bs ca cs da de el en eo es et eu fa fi fil fr fr-CA ga gd gl he hr hu id is it ja ko kw ky lt lv mk ml nb nl nn os pl pt pt-BR ro ru sk sl sq sr sv sw th tr tt uk vi zh-CN zh-TW
|
||||
AC جزيرة أسينشيون Востраў Узнясення остров Възнесение Enez Ascension Ostrvo Ascension Illa de l’Ascensió Ascension Ascensionøen Ascension Νήσος Ασενσιόν Ascension Island Ascension Island Isla de la Ascensión Ascensioni saar Ascension uhartea جزایر آسنسیون Ascension-saari Acsencion island Île de l’Ascension Île de l’Ascension Oileán na Deascabhála Eilean na Deasgabhalach Illa de Ascensión האי אסנשן Otok Ascension Ascension-sziget Pulau Ascension Ascension-eyja Isola Ascensione アセンション島 어센션 섬 Ascension Island Вознесение аралы Dangun Žengimo sala Debesbraukšanas sala Остров Асенсион അസൻഷൻ ദ്വീപ് Ascension Ascension Ascension Ascension Island Wyspa Wniebowstąpienia Ilha de Ascensão Ilha de Ascensão Insula Ascension о-в Вознесения Ascension Otok Ascension Ishulli Asenshion Острво Асенсион Ascension Kisiwa cha Ascension เกาะแอสเซนชัน Ascension Adası Ascension Island Острів Вознесіння Đảo Ascension 阿森松岛 阿森松島
|
||||
AD أندورا Андора Андора Andorra Andora Andorra Andorra Andorra Andorra Ανδόρα Andorra Andoro Andorra Andorra Andorra آندورا Andorra Andorra Andorre Andorre Andóra Andorra Andorra אנדורה Andora Andorra Andorra Andorra Andorra アンドラ 안도라 Andorra Андорра Andora Andora Андора അൻഡോറ Andorra Andorra Andorra Andorra Andora Andorra Andorra Andorra Андорра Andorra Andora Andorrë Андора Andorra Andorra อันดอร์รา Andorra Андорра Андорра Andorra 安道尔 安道爾
|
||||
AE الإمارات العربية المتحدة Аб’яднаныя Арабскія Эміраты Обединени арабски емирства Emirelezhioù Arab Unanet Ujedinjeni Arapski Emirati Emirats Àrabs Units Spojené arabské emiráty De Forenede Arabiske Emirater Vereinigte Arabische Emirate Ηνωμένα Αραβικά Εμιράτα United Arab Emirates Unuiĝintaj Arabaj Emirlandoj Emiratos Árabes Unidos Araabia Ühendemiraadid Arabiar Emirerri Batuak امارات متحدهٔ عربی Arabiemiirikunnat United Arab Emirates Émirats arabes unis Émirats arabes unis Aontas na nÉimíríochtaí Arabacha Na h-Iomaratan Arabach Aonaichte Os Emiratos Árabes Unidos איחוד האמירויות הערביות Ujedinjeni Arapski Emirati Egyesült Arab Emírségek Uni Emirat Arab Sameinuðu arabísku furstadæmin Emirati Arabi Uniti アラブ首長国連邦 아랍에미리트 United Arab Emirates Бириккен Араб Эмираттары Jungtiniai Arabų Emyratai Apvienotie Arābu Emirāti Обединети Арапски Емирати യുണൈറ്റഡ് അറബ് എമിറൈറ്റ്സ് De forente arabiske emirater Verenigde Arabische Emiraten Dei sameinte arabiske emirata United Arab Emirates Zjednoczone Emiraty Arabskie Emirados Árabes Unidos Emirados Árabes Unidos Emiratele Arabe Unite ОАЭ Spojené arabské emiráty Združeni arabski emirati Emiratet e Bashkuara Arabe Уједињени Арапски Емирати Förenade Arabemiraten Falme za Kiarabu สหรัฐอาหรับเอมิเรตส์ Birleşik Arap Emirlikleri Берләшкән Гарәп Әмирлекләре Обʼєднані Арабські Емірати Các Tiểu Vương quốc Ả Rập Thống nhất 阿拉伯联合酋长国 阿拉伯聯合大公國
|
||||
AF أفغانستان Афганістан Афганистан Afghanistan Afganistan Afganistan Afghánistán Afghanistan Afghanistan Αφγανιστάν Afghanistan Afganujo Afganistán Afganistan Afganistan افغانستان Afganistan Afghanistan Afghanistan Afghanistan an Afganastáin Afghanastàn Afganistán אפגניסטן Afganistan Afganisztán Afganistan Afganistan Afghanistan アフガニスタン 아프가니스탄 Afghanistan Афганистан Afganistanas Afganistāna Авганистан അഫ്ഗാനിസ്ഥാൻ Afghanistan Afghanistan Afghanistan Afghanistan Afganistan Afeganistão Afeganistão Afganistan Афганистан Afganistan Afganistan Afganistan Авганистан Afghanistan Afghanistan อัฟกานิสถาน Afganistan Әфганстан Афганістан Afghanistan 阿富汗 阿富汗
|
||||
AG أنتيغوا وبربودا Антыгуа і Барбуда Антигуа и Барбуда Antigua ha Barbuda Antigva i Barbuda Antigua i Barbuda Antigua a Barbuda Antigua og Barbuda Antigua und Barbuda Αντίγκουα και Μπαρμπούντα Antigua & Barbuda Antigvo-Barbudo Antigua y Barbuda Antigua ja Barbuda Antigua eta Barbuda آنتیگوا و باربودا Antigua ja Barbuda Antigua & Barbuda Antigua-et-Barbuda Antigua-et-Barbuda Antigua agus Barbúda Aintìoga is Barbuda Antigua e Barbuda אנטיגואה וברבודה Antigva i Barbuda Antigua és Barbuda Antigua dan Barbuda Antígva og Barbúda Antigua e Barbuda アンティグア・バーブーダ 앤티가 바부다 Antigua & Barbuda Антигуа жана Барбуда Antigva ir Barbuda Antigva un Barbuda Антига и Барбуда ആൻറിഗ്വയും ബർബുഡയും Antigua og Barbuda Antigua en Barbuda Antigua og Barbuda Antigua & Barbuda Antigua i Barbuda Antígua e Barbuda Antígua e Barbuda Antigua și Barbuda Антигуа и Барбуда Antigua a Barbuda Antigva in Barbuda Antigua e Barbuda Антигва и Барбуда Antigua och Barbuda Antigua na Barbuda แอนติกาและบาร์บูดา Antigua ve Barbuda Антигуа һәм Барбуда Антиґуа і Барбуда Antigua và Barbuda 安提瓜和巴布达 安地卡及巴布達
|
||||
AI أنغويلا Ангілья Ангуила Anguilla Angvila Anguilla Anguilla Anguilla Anguilla Ανγκουίλα Anguilla Angvilo Anguila Anguilla Aingira آنگویلا Anguilla Anguilla Anguilla Anguilla Angaíle Anguillia Anguila אנגווילה Angvila Anguilla Anguilla Angvilla Anguilla アンギラ 앵귈라 Anguilla Ангилья Angilija Angilja Ангвила ആൻഗ്വില്ല Anguilla Anguilla Anguilla Anguilla Anguilla Anguila Anguila Anguilla Ангилья Anguilla Angvila Anguilë Ангвила Anguilla Anguilla แองกวิลลา Anguilla Ангилья Анґілья Anguilla 安圭拉 安奎拉
|
||||
AL ألبانيا Албанія Албания Albania Albanija Albània Albánie Albanien Albanien Αλβανία Albania Albanujo Albania Albaania Albania آلبانی Albania Albania Albanie Albanie an Albáin Albàinia Albania אלבניה Albanija Albánia Albania Albanía Albania アルバニア 알바니아 Albania Албания Albanija Albānija Албанија അൽബേനിയ Albania Albanië Albania Albania Albania Albânia Albânia Albania Албания Albánsko Albanija Shqipëri Албанија Albanien Albania แอลเบเนีย Arnavutluk Албания Албанія Albania 阿尔巴尼亚 阿爾巴尼亞
|
||||
AM أرمينيا Арменія Армения Armenia Armenija Armènia Arménie Armenien Armenien Αρμενία Armenia Armenujo Armenia Armeenia Armenia ارمنستان Armenia Armenia Arménie Arménie an Airméin Airmeinea Armenia ארמניה Armenija Örményország Armenia Armenía Armenia アルメニア 아르메니아 Armenia Армения Armėnija Armēnija Ерменија അർമേനിയ Armenia Armenië Armenia Armenia Armenia Armênia Armênia Armenia Армения Arménsko Armenija Armeni Јерменија Armenien Armenia อาร์เมเนีย Ermenistan Әрмәнстан Вірменія Armenia 亚美尼亚 亞美尼亞
|
||||
AO أنغولا Ангола Ангола Angola Angola Angola Angola Angola Angola Αγκόλα Angola Angolo Angola Angola Angola آنگولا Angola Angola Angola Angola Angóla Angòla Angola אנגולה Angola Angola Angola Angóla Angola アンゴラ 앙골라 Angola Ангола Angola Angola Ангола അംഗോള Angola Angola Angola Angola Angola Angola Angola Angola Ангола Angola Angola Angolë Ангола Angola Angola แองโกลา Angola Ангола Ангола Angola 安哥拉 安哥拉
|
||||
AQ أنتاركتيكا Антарктыка Антарктика Antarktika Antarktika Antàrtida Antarktida Antarktis Antarktis Ανταρκτική Antarctica Antarkto Antártida Antarktika Antartika جنوبگان Antarktis Antarctica Antarctique Antarctique an Antartaice An Antartaig A Antártida אנטארקטיקה Antarktika Antarktisz Antarktika Suðurskautslandið Antartide 南極 남극 대륙 Antarctica Антарктида Antarktida Antarktika Антарктик അന്റാർട്ടിക്ക Antarktis Antarctica Antarktis Antarctica Antarktyda Antártida Antártida Antarctica Антарктида Antarktída Antarktika Antarktikë Антарктик Antarktis Antaktiki แอนตาร์กติกา Antarktika Антарктика Антарктика Nam Cực 南极洲 南極洲
|
||||
AR الأرجنتين Аргенціна Аржентина Arcʼhantina Argentina Argentina Argentina Argentina Argentinien Αργεντινή Argentina Argentino Argentina Argentina Argentina آرژانتین Argentiina Argentina Argentine Argentine an Airgintín An Argantain A Arxentina ארגנטינה Argentina Argentína Argentina Argentína Argentina アルゼンチン 아르헨티나 Argentina Аргентина Argentina Argentīna Аргентина അർജന്റീന Argentina Argentinië Argentina Argentina Argentyna Argentina Argentina Argentina Аргентина Argentína Argentina Argjentinë Аргентина Argentina Ajentina อาร์เจนตินา Arjantin Аргентина Аргентина Argentina 阿根廷 阿根廷
|
||||
AS ساموا الأمريكية Амерыканскае Самоа Американска Самоа Samoa Amerikan Američka Samoa Samoa Nord-americana Americká Samoa Amerikansk Samoa Amerikanisch-Samoa Αμερικανική Σαμόα American Samoa American Samoa Samoa Americana Ameerika Samoa Samoa Estatubatuarra ساموآی امریکا Amerikan Samoa American Samoa Samoa américaines Samoa américaines Samó Mheiriceá Samotha na h-Aimeireaga Samoa Americana סמואה האמריקנית Američka Samoa Amerikai Szamoa Samoa Amerika Bandaríska Samóa Samoa americane 米領サモア 아메리칸 사모아 American Samoa Америкалык Самоа Amerikos Samoa ASV Samoa Американска Самоа അമേരിക്കൻ സമോവ Amerikansk Samoa Amerikaans-Samoa Amerikansk Samoa American Samoa Samoa Amerykańskie Samoa Americana Samoa Americana Samoa Americană Американское Самоа Americká Samoa Ameriška Samoa Samoa Amerikane Америчка Самоа Amerikanska Samoa Samoa ya Marekani อเมริกันซามัว Amerikan Samoası Америка Самоасы Американське Самоа Samoa thuộc Mỹ 美属萨摩亚 美屬薩摩亞
|
||||
AT النمسا Аўстрыя Австрия Aostria Austrija Àustria Rakousko Østrig Österreich Αυστρία Austria Aŭstrujo Austria Austria Austria اتریش Itävalta Austria Autriche Autriche an Ostair An Ostair Austria אוסטריה Austrija Ausztria Austria Austurríki Austria オーストリア 오스트리아 Austria Австрия Austrija Austrija Австрија ഓസ്ട്രിയ Østerrike Oostenrijk Austerrike Austria Austria Áustria Áustria Austria Австрия Rakúsko Avstrija Austri Аустрија Österrike Austria ออสเตรีย Avusturya Австрия Австрія Áo 奥地利 奧地利
|
||||
AU أستراليا Аўстралія Австралия Aostralia Australija Austràlia Austrálie Australien Australien Αυστραλία Australia Aŭstralio Australia Austraalia Australia استرالیا Australia Australia Australie Australie an Astráil Astràilia Australia אוסטרליה Australija Ausztrália Australia Ástralía Australia オーストラリア 오스트레일리아 Australia Австралия Australija Austrālija Австралија ഓസ്ട്രേലിയ Australia Australië Australia Australia Australia Austrália Austrália Australia Австралия Austrália Avstralija Australi Аустралија Australien Australia ออสเตรเลีย Avustralya Австралия Австралія Australia 澳大利亚 澳洲
|
||||
AW أروبا Аруба Аруба Aruba Aruba Aruba Aruba Aruba Aruba Αρούμπα Aruba Arubo Aruba Aruba Aruba آروبا Aruba Aruba Aruba Aruba Arúba Arùba Aruba ארובה Aruba Aruba Aruba Arúba Aruba アルバ 아루바 Aruba Аруба Aruba Aruba Аруба അറൂബ Aruba Aruba Aruba Aruba Aruba Aruba Aruba Aruba Аруба Aruba Aruba Arubë Аруба Aruba Aruba อารูบา Aruba Аруба Аруба Aruba 阿鲁巴 荷屬阿魯巴
|
||||
AX جزر آلاند Аландскія астравы Оландски острови Inizi Åland Olandska ostrva Illes Åland Ålandy Åland Ålandinseln Νήσοι Όλαντ Åland Islands Åland Islands Islas Åland Ahvenamaa Åland جزایر آلاند Ahvenanmaa Åland Islands Îles Åland Îles Åland Oileáin Åland Na h-Eileanan Åland Illas Åland איי אולנד Ålandski otoci Åland-szigetek Kepulauan Aland Álandseyjar Isole Åland オーランド諸島 올란드 제도 Åland Islands Аланд аралдары Alandų Salos Olandes salas Оландски Острови അലൻഡ് ദ്വീപുകൾ Åland Åland Åland Åland Islands Wyspy Alandzkie Ilhas Aland Ilhas Aland Insulele Åland Аландские о-ва Alandy Ålandski otoki Ishujt Alandë Оландска Острва Åland Visiwa vya Aland หมู่เกาะโอลันด์ Åland Adaları Аланд утраулары Аландські Острови Quần đảo Åland 奥兰群岛 奧蘭群島
|
||||
AZ أذربيجان Азербайджан Азербайджан Azerbaidjan Azerbejdžan Azerbaidjan Ázerbájdžán Aserbajdsjan Aserbaidschan Αζερμπαϊτζάν Azerbaijan Azerbajĝano Azerbaiyán Aserbaidžaan Azerbaijan جمهوری آذربایجان Azerbaidžan Azerbaijan Azerbaïdjan Azerbaïdjan an Asarbaiseáin Asarbaideàn Acerbaixán אזרבייג׳ן Azerbajdžan Azerbajdzsán Azerbaijan Aserbaídsjan Azerbaigian アゼルバイジャン 아제르바이잔 Azerbaijan Азербайжан Azerbaidžanas Azerbaidžāna Азербејџан അസർബൈജാൻ Aserbajdsjan Azerbeidzjan Aserbajdsjan Azerbaijan Azerbejdżan Azerbaijão Azerbaijão Azerbaidjan Азербайджан Azerbajdžan Azerbajdžan Azerbajxhan Азербејџан Azerbajdzjan Azerbaijani อาเซอร์ไบจาน Azerbaycan Әзәрбайҗан Азербайджан Azerbaijan 阿塞拜疆 亞塞拜然
|
||||
BA البوسنة والهرسك Боснія і Герцагавіна Босна и Херцеговина Bosnia ha Herzegovina Bosna i Hercegovina Bòsnia i Hercegovina Bosna a Hercegovina Bosnien-Hercegovina Bosnien und Herzegowina Βοσνία - Ερζεγοβίνη Bosnia & Herzegovina Bosnio-Hercegovino Bosnia y Herzegovina Bosnia ja Hertsegoviina Bosnia-Herzegovina بوسنی و هرزگوین Bosnia ja Hertsegovina Bosnia and Herzegovina Bosnie-Herzégovine Bosnie-Herzégovine an Bhoisnia agus an Heirseagaivéin Bosna is Hearsagobhana Bosnia e Hercegovina בוסניה והרצגובינה Bosna i Hercegovina Bosznia-Hercegovina Bosnia dan Herzegovina Bosnía og Hersegóvína Bosnia ed Erzegovina ボスニア・ヘルツェゴビナ 보스니아 헤르체고비나 Bosnia & Herzegovina Босния жана Герцеговина Bosnija ir Hercegovina Bosnija un Hercegovina Босна и Херцеговина ബോസ്നിയയും ഹെർസഗോവിനയും Bosnia-Hercegovina Bosnië en Herzegovina Bosnia-Hercegovina Bosnia & Herzegovina Bośnia i Hercegowina Bósnia e Herzegovina Bósnia e Herzegovina Bosnia și Herțegovina Босния и Герцеговина Bosna a Hercegovina Bosna in Hercegovina Bosnjë-Hercegovinë Босна и Херцеговина Bosnien och Hercegovina Bosnia na Hezegovina บอสเนียและเฮอร์เซโกวีนา Bosna-Hersek Босния һәм Герцеговина Боснія і Герцеґовина Bosnia và Herzegovina 波斯尼亚和黑塞哥维那 波士尼亞與赫塞哥維納
|
||||
BB بربادوس Барбадас Барбадос Barbados Barbados Barbados Barbados Barbados Barbados Μπαρμπέιντος Barbados Barbado Barbados Barbados Barbados باربادوس Barbados Barbados Barbade Barbade Barbadós Barbados Barbados ברבדוס Barbados Barbados Barbados Barbados Barbados バルバドス 바베이도스 Barbados Барбадос Barbadosas Barbadosa Барбадос ബാർബഡോസ് Barbados Barbados Barbados Barbados Barbados Barbados Barbados Barbados Барбадос Barbados Barbados Barbados Барбадос Barbados Babadosi บาร์เบโดส Barbados Барбадос Барбадос Barbados 巴巴多斯 巴貝多
|
||||
BD بنغلاديش Бангладэш Бангладеш Bangladesh Bangladeš Bangladesh Bangladéš Bangladesh Bangladesch Μπανγκλαντές Bangladesh Bangladeŝo Bangladés Bangladesh Bangladesh بنگلادش Bangladesh Bangladesh Bangladesh Bangladesh an Bhanglaidéis Bangladais Bangladesh בנגלדש Bangladeš Banglades Bangladesh Bangladess Bangladesh バングラデシュ 방글라데시 Bangladesh Бангладеш Bangladešas Bangladeša Бангладеш ബംഗ്ലാദേശ് Bangladesh Bangladesh Bangladesh Bangladesh Bangladesz Bangladesh Bangladesh Bangladesh Бангладеш Bangladéš Bangladeš Bangladesh Бангладеш Bangladesh Bangladeshi บังกลาเทศ Bangladeş Бангладеш Бангладеш Bangladesh 孟加拉国 孟加拉
|
||||
BE بلجيكا Бельгія Белгия Belgia Belgija Bèlgica Belgie Belgien Belgien Βέλγιο Belgium Belgujo Bélgica Belgia Belgika بلژیک Belgia Belgium Belgique Belgique an Bheilg A’ Bheilg Bélxica בלגיה Belgija Belgium Belgia Belgía Belgio ベルギー 벨기에 Belgium Бельгия Belgija Beļģija Белгија ബെൽജിയം Belgia België Belgia Belgium Belgia Bélgica Bélgica Belgia Бельгия Belgicko Belgija Belgjikë Белгија Belgien Ubelgiji เบลเยียม Belçika Бельгия Бельґія Bỉ 比利时 比利時
|
||||
BF بوركينا فاسو Буркіна-Фасо Буркина Фасо Burkina Faso Burkina Faso Burkina Faso Burkina Faso Burkina Faso Burkina Faso Μπουρκίνα Φάσο Burkina Faso Burkino Burkina Faso Burkina Faso Burkina Faso بورکینافاسو Burkina Faso Burkina Faso Burkina Faso Burkina Faso Buircíne Fasó Buirciona Faso Burkina Faso בורקינה פאסו Burkina Faso Burkina Faso Burkina Faso Búrkína Fasó Burkina Faso ブルキナファソ 부르키나파소 Burkina Faso Буркина-Фасо Burkina Fasas Burkinafaso Буркина Фасо ബർക്കിന ഫാസോ Burkina Faso Burkina Faso Burkina Faso Burkina Faso Burkina Faso Burquina Faso Burquina Faso Burkina Faso Буркина-Фасо Burkina Faso Burkina Faso Burkina-Faso Буркина Фасо Burkina Faso Bukinafaso บูร์กินาฟาโซ Burkina Faso Буркина-Фасо Буркіна-Фасо Burkina Faso 布基纳法索 布吉納法索
|
||||
BG بلغاريا Балгарыя България Bulgaria Bugarska Bulgària Bulharsko Bulgarien Bulgarien Βουλγαρία Bulgaria Bulgarujo Bulgaria Bulgaaria Bulgaria بلغارستان Bulgaria Bulgaria Bulgarie Bulgarie an Bhulgáir A’ Bhulgair Bulgaria בולגריה Bugarska Bulgária Bulgaria Búlgaría Bulgaria ブルガリア 불가리아 Bulgaria Болгария Bulgarija Bulgārija Бугарија ബൾഗേറിയ Bulgaria Bulgarije Bulgaria Bulgaria Bułgaria Bulgária Bulgária Bulgaria Болгария Bulharsko Bolgarija Bullgari Бугарска Bulgarien Bulgaria บัลแกเรีย Bulgaristan Болгария Болгарія Bulgaria 保加利亚 保加利亞
|
||||
BH البحرين Бахрэйн Бахрейн Bahrein Bahrein Bahrain Bahrajn Bahrain Bahrain Μπαχρέιν Bahrain Barejno Baréin Bahrein Bahrain بحرین Bahrain Bahrain Bahreïn Bahreïn Bairéin Bachrain Bahrain בחריין Bahrein Bahrein Bahrain Barein Bahrein バーレーン 바레인 Bahrain Бахрейн Bahreinas Bahreina Бахреин ബഹ്റിൻ Bahrain Bahrein Bahrain Bahrain Bahrajn Bahrein Bahrein Bahrain Бахрейн Bahrajn Bahrajn Bahrejn Бахреин Bahrain Bahareni บาห์เรน Bahreyn Бәхрәйн Бахрейн Bahrain 巴林 巴林
|
||||
BI بوروندي Бурундзі Бурунди Burundi Burundi Burundi Burundi Burundi Burundi Μπουρούντι Burundi Burundo Burundi Burundi Burundi بوروندی Burundi Burundi Burundi Burundi an Bhurúin Burundaidh Burundi בורונדי Burundi Burundi Burundi Búrúndí Burundi ブルンジ 부룬디 Burundi Бурунди Burundis Burundija Бурунди ബറുണ്ടി Burundi Burundi Burundi Burundi Burundi Burundi Burundi Burundi Бурунди Burundi Burundi Burundi Бурунди Burundi Burundi บุรุนดี Burundi Бурунди Бурунді Burundi 布隆迪 蒲隆地
|
||||
BJ بنين Бенін Бенин Benin Benin Benín Benin Benin Benin Μπενίν Benin Benino Benín Benin Benin بنین Benin Benin Bénin Bénin Beinin Beinin Benín בנין Benin Benin Benin Benín Benin ベナン 베냉 Benin Бенин Beninas Benina Бенин ബെനിൻ Benin Benin Benin Benin Benin Benin Benin Benin Бенин Benin Benin Benin Бенин Benin Benin เบนิน Benin Бенин Бенін Benin 贝宁 貝南
|
||||
BL سان بارتليمي Сен-Бартэльмі Сен Бартелеми Saint Barthélemy Sveti Bartolomej Saint Barthélemy Svatý Bartoloměj Saint Barthélemy St. Barthélemy Άγιος Βαρθολομαίος St. Barthélemy St. Barthélemy San Bartolomé Saint-Barthélemy Saint Barthélemy سن بارتلمی Saint-Barthélemy St. Barthélemy Saint-Barthélemy Saint-Barthélemy Saint Barthélemy Saint Barthélemy Saint Barthélemy סנט ברתולומיאו Saint Barthélemy Saint-Barthélemy Saint Barthélemy Sankti Bartólómeusareyjar Saint-Barthélemy サン・バルテルミー 생바르텔레미 St. Barthélemy Сент Бартелеми Sen Bartelemi Senbartelmī Свети Вартоломеј സെന്റ് ബാർത്തലമി Saint-Barthélemy Saint-Barthélemy Saint Barthélemy St. Barthélemy Saint-Barthélemy São Bartolomeu São Bartolomeu Saint-Barthélemy Сен-Бартелеми Svätý Bartolomej Saint Barthélemy Sen-Bartelemi Свети Бартоломеј S:t Barthélemy St. Barthelemy เซนต์บาร์เธเลมี Saint Barthelemy Сен-Бартельми Сен-Бартельмі St. Barthélemy 圣巴泰勒米 聖巴瑟米
|
||||
BM برمودا Бермудскія астравы Бермудски острови Bermuda Bermuda Bermudes Bermudy Bermuda Bermuda Βερμούδες Bermuda Bermudoj Bermudas Bermuda Bermuda برمودا Bermuda Bermuda Bermudes Bermudes Beirmiúda Bearmùda Illas Bermudas ברמודה Bermudi Bermuda Bermuda Bermúdaeyjar Bermuda バミューダ 버뮤다 Bermuda Бермуд аралдары Bermuda Bermudu salas Бермуди ബർമുഡ Bermuda Bermuda Bermuda Bermuda Bermudy Bermudas Bermudas Bermuda Бермудские о-ва Bermudy Bermudi Bermude Бермуда Bermuda Bermuda เบอร์มิวดา Bermuda Бермуд утраулары Бермудські Острови Bermuda 百慕大 百慕達
|
||||
BN بروناي Бруней Бруней Даруссалам Brunei Brunej Brunei Brunej Brunei Brunei Darussalam Μπρουνέι Brunei Brunejo Brunéi Brunei Brunei برونئی Brunei Brunei Brunéi Darussalam Brunéi Darussalam Brúiné Brùnaigh Brunei ברוניי Brunej Brunei Brunei Brúnei Brunei ブルネイ 브루나이 Brunei Бруней Brunėjus Bruneja Брунеј ബ്രൂണൈ Brunei Brunei Brunei Brunei Brunei Brunei Brunei Brunei Бруней-Даруссалам Brunej Brunej Brunei Брунеј Brunei Brunei บรูไน Brunei Бруней Бруней Brunei 文莱 汶萊
|
||||
BO بوليفيا Балівія Боливия Bolivia Bolivija Bolívia Bolívie Bolivia Bolivien Βολιβία Bolivia Bolivio Bolivia Boliivia Bolivia بولیوی Bolivia Bolivia Bolivie Bolivie an Bholaiv Boilibhia Bolivia בוליביה Bolivija Bolívia Bolivia Bólivía Bolivia ボリビア 볼리비아 Bolivia Боливия Bolivija Bolīvija Боливија ബൊളീവിയ Bolivia Bolivia Bolivia Bolivia Boliwia Bolívia Bolívia Bolivia Боливия Bolívia Bolivija Bolivi Боливија Bolivia Bolivia โบลิเวีย Bolivya Боливия Болівія Bolivia 玻利维亚 玻利維亞
|
||||
BQ هولندا الكاريبية Карыбскія Нідэрланды Карибска Нидерландия Karib Nederlandat Karipska Holandija Carib Neerlandès Karibské Nizozemsko De tidligere Nederlandske Antiller Bonaire, Sint Eustatius und Saba Ολλανδία Καραϊβικής Caribbean Netherlands Caribbean Netherlands Caribe neerlandés Hollandi Kariibi mere saared Karibeko Herbehereak جزایر کارائیب هلند Karibian Alankomaat Caribbean Netherlands Pays-Bas caribéens Pays-Bas caribéens an Ísiltír Chairibeach Na Tìrean Ìsle Caraibeach Caribe Neerlandés האיים הקריביים ההולנדיים Karipski otoci Nizozemske Holland Karib-térség Belanda Karibia Karíbahafshluti Hollands Caraibi olandesi オランダ領カリブ 네덜란드령 카리브 Caribbean Netherlands Кариб Нидерланддары Karibų Nyderlandai Nīderlandes Karību salas Карипска Холандија കരീബിയൻ നെതർലാൻഡ്സ് Karibisk Nederland Caribisch Nederland Karibisk Nederland Caribbean Netherlands Niderlandy Karaibskie Países Baixos Caribenhos Países Baixos Caribenhos Insulele Caraibe Olandeze Бонэйр, Синт-Эстатиус и Саба Karibské Holandsko Nizozemski Karibi Karaibet holandeze Карипска Холандија Karibiska Nederländerna Uholanzi ya Karibiani เนเธอร์แลนด์แคริบเบียน Karayip Hollandası Caribbean Netherlands Нідерландські Карибські острови Ca-ri-bê Hà Lan 荷属加勒比区 荷蘭加勒比區
|
||||
BR البرازيل Бразілія Бразилия Brazil Brazil Brasil Brazílie Brasilien Brasilien Βραζιλία Brazil Brazilo Brasil Brasiilia Brasil برزیل Brasilia Brazil Brésil Brésil an Bhrasaíl Braisil O Brasil ברזיל Brazil Brazília Brasil Brasilía Brasile ブラジル 브라질 Brasil Бразилия Brazilija Brazīlija Бразил ബ്രസീൽ Brasil Brazilië Brasil Бразили Brazylia Brasil Brasil Brazilia Бразилия Brazília Brazilija Brazil Бразил Brasilien Brazil บราซิล Brezilya Бразилия Бразілія Brazil 巴西 巴西
|
||||
BS جزر البهاما Багамскія астравы Бахамски острови Bahamas Bahami Bahames Bahamy Bahamas Bahamas Μπαχάμες Bahamas Bahamoj Bahamas Bahama Bahamak باهاما Bahama Bahamas Bahamas Bahamas na Bahámaí Na h-Eileanan Bhathama Bahamas איי בהאמה Bahami Bahama-szigetek Bahama Bahamaeyjar Bahamas バハマ 바하마 Bahamas Багама аралдары Bahamos Bahamu salas Бахами ബഹാമാസ് Bahamas Bahama’s Bahamas Bahamas Bahamy Bahamas Bahamas Bahamas Багамы Bahamy Bahami Bahama Бахами Bahamas Bahama บาฮามาส Bahamalar Багам утраулары Багамські Острови Bahamas 巴哈马 巴哈馬
|
||||
BT بوتان Бутан Бутан Bhoutan Butan Bhutan Bhútán Bhutan Bhutan Μπουτάν Bhutan Butano Bután Bhutan Bhutan بوتان Bhutan Bhutan Bhoutan Bhoutan an Bhútáin Butàn Bután בהוטן Butan Bhután Bhutan Bútan Bhutan ブータン 부탄 Bhutan Бутан Butanas Butāna Бутан ഭൂട്ടാൻ Bhutan Bhutan Bhutan Bhutan Bhutan Butão Butão Bhutan Бутан Bhután Butan Butan Бутан Bhutan Bhutan ภูฏาน Butan Бутан Бутан Bhutan 不丹 不丹
|
||||
BV جزيرة بوفيه Востраў Бувэ остров Буве Enez Bouvet Ostrvo Buve Bouvet Bouvetův ostrov Bouvetøen Bouvetinsel Νήσος Μπουβέ Bouvet Island Bouvet Island Isla Bouvet Bouvet’ saar Bouvet uhartea جزیرهٔ بووه Bouvet’nsaari Bouvet Island Île Bouvet Île Bouvet Oileán Bouvet Eilean Bouvet Illa Bouvet האי בובה Otok Bouvet Bouvet-sziget Pulau Bouvet Bouveteyja Isola Bouvet ブーベ島 부베섬 Bouvet Island Буве аралы Buvė Sala Buvē sala Остров Буве ബൗവെട്ട് ദ്വീപ് Bouvetøya Bouveteiland Bouvetøya Bouvet Island Wyspa Bouveta Ilha Bouvet Ilha Bouvet Insula Bouvet о-в Буве Bouvetov ostrov Bouvetov otok Ishulli Bove Острво Буве Bouvetön Kisiwa cha Bouvet เกาะบูเว Bouvet Adası Буве утравы Острів Буве Đảo Bouvet 布韦岛 布威島
|
||||
BW بوتسوانا Батсвана Ботсвана Botswana Bocvana Botswana Botswana Botswana Botsuana Μποτσουάνα Botswana Bocvano Botsuana Botswana Botswana بوتسوانا Botswana Botswana Botswana Botswana an Bhotsuáin Botsuana Botswana בוצוואנה Bocvana Botswana Botswana Botsvana Botswana ボツワナ 보츠와나 Botswana Ботсвана Botsvana Botsvāna Боцвана ബോട്സ്വാന Botswana Botswana Botswana Botswana Botswana Botsuana Botsuana Botswana Ботсвана Botswana Bocvana Botsvanë Боцвана Botswana Botswana บอตสวานา Botsvana Ботсвана Ботсвана Botswana 博茨瓦纳 波札那
|
||||
BY بيلاروس Беларусь Беларус Belarus Bjelorusija Belarús Bělorusko Hviderusland Belarus Λευκορωσία Belarus Belorusujo Bielorrusia Valgevene Bielorrusia بلاروس Valko-Venäjä Belarus Biélorussie Biélorussie an Bhealarúis A’ Bhealaruis Belarús בלארוס Bjelorusija Belarusz Belarus Hvíta-Rússland Bielorussia ベラルーシ 벨라루스 Belarus Беларусь Baltarusija Baltkrievija Белорусија ബെലറൂസ് Hviterussland Belarus Kviterussland Belarus Białoruś Bielorrússia Bielorrússia Belarus Беларусь Bielorusko Belorusija Bjellorusi Белорусија Vitryssland Belarus เบลารุส Belarus Беларусь Білорусь Belarus 白俄罗斯 白俄羅斯
|
||||
BZ بليز Беліз Белиз Belize Belize Belize Belize Belize Belize Μπελίζ Belize Belizo Belice Belize Belize بلیز Belize Belize Belize Belize an Bheilís A’ Bheilìs Belize בליז Belize Belize Belize Belís Belize ベリーズ 벨리즈 Belize Белиз Belizas Beliza Белизе ബെലീസ് Belize Belize Belize Belize Belize Belize Belize Belize Белиз Belize Belize Belizë Белизе Belize Belize เบลีซ Belize Белиз Беліз Belize 伯利兹 貝里斯
|
||||
CA كندا Канада Канада Kanada Kanada Canadà Kanada Canada Kanada Καναδάς Canada Kanado Canadá Kanada Kanada کانادا Kanada Canada Canada Canada Ceanada Canada O Canadá קנדה Kanada Kanada Kanada Kanada Canada カナダ 캐나다 Canada Канада Kanada Kanāda Канада കാനഡ Canada Canada Canada Canada Kanada Canadá Canadá Canada Канада Kanada Kanada Kanada Канада Kanada Kanada แคนาดา Kanada Канада Канада Canada 加拿大 加拿大
|
||||
CC جزر كوكوس (كيلينغ) Какосавыя (Кілінг) астравы Кокосови острови (острови Кийлинг) Inizi Kokoz Kokosova (Keelingova) ostrva Illes Cocos Kokosové ostrovy Cocosøerne Kokosinseln Νήσοι Κόκος (Κίλινγκ) Cocos (Keeling) Islands Cocos (Keeling) Islands Islas Cocos Kookossaared Cocos (Keeling) uharteak جزایر کوکوس Kookossaaret (Keelingsaaret) Cocos (Keeling) Islands Îles Cocos Îles Cocos Oileáin Cocos (Keeling) Na h-Eileanan Chocos (Keeling) Illas Cocos (Keeling) איי קוקוס (קילינג) Kokosovi (Keelingovi) otoci Kókusz (Keeling)-szigetek Kepulauan Cocos (Keeling) Kókoseyjar (Keeling) Isole Cocos (Keeling) ココス(キーリング)諸島 코코스 제도 Cocos (Keeling) Islands Кокос (Килинг) аралдары Kokosų (Kilingo) Salos Kokosu (Kīlinga) salas Кокосови (Килиншки) Острови കോക്കസ് (കീലിംഗ്) ദ്വീപുകൾ Kokosøyene Cocoseilanden Kokosøyane Cocos (Keeling) Islands Wyspy Kokosowe Ilhas Cocos (Keeling) Ilhas Cocos (Keeling) Insulele Cocos (Keeling) Кокосовые о-ва Kokosové ostrovy Kokosovi otoki Ishujt Kokos Кокосова (Килингова) Острва Kokosöarna Visiwa vya Cocos (Keeling) หมู่เกาะโคโคส (คีลิง) Cocos (Keeling) Adaları Кокос (Килинг) утраулары Кокосові (Кілінґ) Острови Quần đảo Cocos (Keeling) 科科斯(基林)群岛 科克斯(基靈)群島
|
||||
CD الكونغو - كينشاسا Конга (Кіншаса) Конго (Киншаса) Kongo - Kinshasa Demokratska Republika Kongo Congo - Kinshasa Kongo – Kinshasa Congo-Kinshasa Kongo-Kinshasa Κονγκό - Κινσάσα Congo - Kinshasa Congo - Kinshasa República Democrática del Congo Kongo DV Kongoko Errepublika Demokratikoa کنگو - کینشاسا Kongon demokraattinen tasavalta Congo - Kinshasa Congo-Kinshasa Congo-Kinshasa Poblacht Dhaonlathach an Chongó Congo - Kinshasa República Democrática do Congo קונגו - קינשאסה Kongo - Kinshasa Kongó - Kinshasa Kongo - Kinshasa Kongó-Kinshasa Congo - Kinshasa コンゴ民主共和国(キンシャサ) 콩고-킨샤사 Congo - Kinshasa Конго-Киншаса Kongas-Kinšasa Kongo (Kinšasa) Конго - Киншаса കോംഗോ - കിൻഷാസ Kongo-Kinshasa Congo-Kinshasa Kongo-Kinshasa Congo - Kinshasa Demokratyczna Republika Konga Congo - Kinshasa Congo - Kinshasa Congo - Kinshasa Конго - Киншаса Konžská demokratická republika Demokratična republika Kongo Kongo-Kinshasa Конго - Киншаса Kongo-Kinshasa Jamhuri ya Kidemokrasia ya Kongo คองโก - กินชาซา Kongo - Kinşasa Congo - Kinshasa Конго – Кіншаса Congo - Kinshasa 刚果(金) 剛果(金夏沙)
|
||||
CF جمهورية أفريقيا الوسطى Цэнтральна-Афрыканская Рэспубліка Централноафриканска република Republik Kreizafrikan Centralnoafrička Republika República Centreafricana Středoafrická republika Den Centralafrikanske Republik Zentralafrikanische Republik Κεντροαφρικανική Δημοκρατία Central African Republic Centr-Afrika Respubliko República Centroafricana Kesk-Aafrika Vabariik Afrika Erdiko Errepublika جمهوری افریقای مرکزی Keski-Afrikan tasavalta Central African Republic République centrafricaine République centrafricaine Poblacht na hAfraice Láir Poblachd Meadhan Afraga República Centroafricana הרפובליקה המרכז-אפריקאית Srednjoafrička Republika Közép-afrikai Köztársaság Republik Afrika Tengah Mið-Afríkulýðveldið Repubblica Centrafricana 中央アフリカ共和国 중앙 아프리카 공화국 Central African Republic Борбордук Африка Республикасы Centrinės Afrikos Respublika Centrālāfrikas Republika Централноафриканска Република സെൻട്രൽ ആഫ്രിക്കൻ റിപ്പബ്ലിക്ക് Den sentralafrikanske republikk Centraal-Afrikaanse Republiek Den sentralafrikanske republikken Central African Republic Republika Środkowoafrykańska República Centro-Africana República Centro-Africana Republica Centrafricană Центрально-Африканская Республика Stredoafrická republika Centralnoafriška republika Republika e Afrikës Qendrore Централноафричка Република Centralafrikanska republiken Jamhuri ya Afrika ya Kati สาธารณรัฐแอฟริกากลาง Orta Afrika Cumhuriyeti Үзәк Африка Республикасы Центральноафриканська Республіка Cộng hòa Trung Phi 中非共和国 中非共和國
|
||||
CG الكونغو - برازافيل Конга - Бразавіль Конго (Бразавил) Kongo - Brazzaville Kongo Congo - Brazzaville Kongo – Brazzaville Congo-Brazzaville Kongo-Brazzaville Κονγκό - Μπραζαβίλ Congo - Brazzaville Kongolo Congo Kongo Vabariik Kongo کنگو - برازویل Kongon tasavalta Congo - Brazzaville Congo-Brazzaville Congo-Brazzaville an Congó A’ Chongo - Brazzaville República do Congo קונגו - ברזאויל Kongo - Brazzaville Kongó - Brazzaville Kongo - Brazzaville Kongó-Brazzaville Congo-Brazzaville コンゴ共和国(ブラザビル) 콩고-브라자빌 Congo - Brazzaville Конго-Браззавил Kongas-Brazavilis Kongo (Brazavila) Конго - Бразавил കോംഗോ - ബ്രാസവില്ലി Kongo-Brazzaville Congo-Brazzaville Kongo-Brazzaville Congo - Brazzaville Kongo República do Congo República do Congo Congo - Brazzaville Конго - Браззавиль Konžská republika Kongo - Brazzaville Kongo-Brazavilë Конго - Бразавил Kongo-Brazzaville Kongo - Brazzaville คองโก - บราซซาวิล Kongo - Brazavil Congo - Brazzaville Конго – Браззавіль Congo - Brazzaville 刚果(布) 剛果(布拉薩)
|
||||
CH سويسرا Швейцарыя Швейцария Suis Švicarska Suïssa Švýcarsko Schweiz Schweiz Ελβετία Switzerland Svisujo Suiza Šveits Suitza سوئیس Sveitsi Switzerland Suisse Suisse an Eilvéis An Eilbheis Suíza שווייץ Švicarska Svájc Swiss Sviss Svizzera スイス 스위스 Switzerland Швейцария Šveicarija Šveice Швајцарија സ്വിറ്റ്സർലാൻഡ് Sveits Zwitserland Sveits Switzerland Szwajcaria Suíça Suíça Elveția Швейцария Švajčiarsko Švica Zvicër Швајцарска Schweiz Uswisi สวิตเซอร์แลนด์ İsviçre Швейцария Швейцарія Thụy Sĩ 瑞士 瑞士
|
||||
CI ساحل العاج Кот-д’Івуар Кот д’Ивоар Aod an Olifant Obala Slonovače Côte d’Ivoire Pobřeží slonoviny Elfenbenskysten Côte d’Ivoire Ακτή Ελεφαντοστού Côte d’Ivoire Ebur-Bordo Côte d’Ivoire Côte d’Ivoire Boli Kosta ساحل عاج Norsunluurannikko Côte d’Ivoire Côte d’Ivoire Côte d’Ivoire an Cósta Eabhair Côte d’Ivoire Côte d’Ivoire חוף השנהב Obala Bjelokosti Elefántcsontpart Côte d’Ivoire Fílabeinsströndin Costa d’Avorio コートジボワール 코트디부아르 Côte d’Ivoire Кот-д’Ивуар Dramblio Kaulo Krantas Kotdivuāra Брегот на Слоновата Коска കോട്ട് ഡി വാർ Elfenbenskysten Ivoorkust Elfenbeinskysten Côte d’Ivoire Côte d’Ivoire Costa do Marfim Costa do Marfim Côte d’Ivoire Кот-д’Ивуар Pobrežie Slonoviny Slonokoščena obala Côte d’Ivoire Обала Слоноваче (Кот д’Ивоар) Côte d’Ivoire Cote d’Ivoire โกตดิวัวร์ Côte d’Ivoire Кот-д’Ивуар Кот-дʼІвуар Côte d’Ivoire 科特迪瓦 象牙海岸
|
||||
CK جزر كوك Астравы Кука острови Кук Inizi Cook Kukova ostrva Illes Cook Cookovy ostrovy Cookøerne Cookinseln Νήσοι Κουκ Cook Islands Kukinsuloj Islas Cook Cooki saared Cook uharteak جزایر کوک Cookinsaaret Cook Islands Îles Cook Îles Cook Oileáin Cook Eileanan Cook Illas Cook איי קוק Cookovi Otoci Cook-szigetek Kepulauan Cook Cooks-eyjar Isole Cook クック諸島 쿡 제도 Cook Islands Кук аралдары Kuko Salos Kuka salas Кукови Острови കുക്ക് ദ്വീപുകൾ Cookøyene Cookeilanden Cookøyane Cook Islands Wyspy Cooka Ilhas Cook Ilhas Cook Insulele Cook Острова Кука Cookove ostrovy Cookovi otoki Ishujt Kuk Кукова Острва Cooköarna Visiwa vya Cook หมู่เกาะคุก Cook Adaları Кук утраулары Острови Кука Quần đảo Cook 库克群岛 庫克群島
|
||||
CL تشيلي Чылі Чили Chile Čile Xile Chile Chile Chile Χιλή Chile Ĉilio Chile Tšiili Txile شیلی Chile Chile Chili Chili an tSile An t-Sile Chile צ׳ילה Čile Chile Cile Síle Cile チリ 칠레 Chile Чили Čilė Čīle Чиле ചിലി Chile Chili Chile Chile Chile Chile Chile Chile Чили Čile Čile Kili Чиле Chile Chile ชิลี Şili Чили Чілі Chile 智利 智利
|
||||
CM الكاميرون Камерун Камерун Kameroun Kamerun Camerun Kamerun Cameroun Kamerun Καμερούν Cameroon Kameruno Camerún Kamerun Kamerun کامرون Kamerun Cameroon Cameroun Cameroun Camarún Camarun Camerún קמרון Kamerun Kamerun Kamerun Kamerún Camerun カメルーン 카메룬 Cameroon Камерун Kamerūnas Kamerūna Камерун കാമറൂൺ Kamerun Kameroen Kamerun Cameroon Kamerun Camarões Camarões Camerun Камерун Kamerun Kamerun Kamerun Камерун Kamerun Kameruni แคเมอรูน Kamerun Камерун Камерун Cameroon 喀麦隆 喀麥隆
|
||||
CN الصين Кітай Китай Sina Kina Xina Čína Kina China Κίνα China Ĉinujo China Hiina Txina چین Kiina China Chine Chine an tSín An t-Sìn A China סין Kina Kína Tiongkok Kína Cina 中国 중국 China Кытай Kinija Ķīna Кина ചൈന Kina China Kina Китай Chiny China China China Китай Čína Kitajska Kinë Кина Kina Uchina จีน Çin Кытай Китай Trung Quốc 中国 中國
|
||||
CO كولومبيا Калумбія Колумбия Kolombia Kolumbija Colòmbia Kolumbie Colombia Kolumbien Κολομβία Colombia Kolombio Colombia Colombia Kolonbia کلمبیا Kolumbia Colombia Colombie Colombie an Cholóim Coloimbia Colombia קולומביה Kolumbija Kolumbia Kolombia Kólumbía Colombia コロンビア 콜롬비아 Colombia Колумбия Kolumbija Kolumbija Колумбија കൊളംബിയ Colombia Colombia Colombia Colombia Kolumbia Colômbia Colômbia Columbia Колумбия Kolumbia Kolumbija Kolumbi Колумбија Colombia Kolombia โคลอมเบีย Kolombiya Колумбия Колумбія Colombia 哥伦比亚 哥倫比亞
|
||||
CP جزيرة كليبيرتون Востраў Кліпертан остров Клипертон Enez Clipperton Ostrvo Kliperton Illa Clipperton Clippertonův ostrov Clippertonøen Clipperton-Insel Νήσος Κλίπερτον Clipperton Island Clipperton Island Isla Clipperton Clippertoni saar Clipperton uhartea جزایر کلیپرتون Clippertoninsaari Clipperton Island Île Clipperton Île Clipperton Oileán Clipperton Eilean Clipperton Illa Clipperton האי קליפרטון Otok Clipperton Clipperton-sziget Pulau Clipperton Clipperton-eyja Isola di Clipperton クリッパートン島 클립퍼튼 섬 Clipperton Island Клиппертон аралы Klipertono sala Klipertona sala Остров Клипертон ക്ലിപ്പെർട്ടൻ ദ്വീപ് Clippertonøya Clipperton Clippertonøya Clipperton Island Wyspa Clippertona Ilha de Clipperton Ilha de Clipperton Insula Clipperton о-в Клиппертон Clipperton Otok Clipperton Ishulli Klipërton Острво Клипертон Clippertonön Kisiwa cha Clipperton เกาะคลิปเปอร์ตัน Clipperton Adası Clipperton Island Острів Кліппертон Đảo Clipperton 克利珀顿岛 克里派頓島
|
||||
CR كوستاريكا Коста-Рыка Коста Рика Costa Rica Kostarika Costa Rica Kostarika Costa Rica Costa Rica Κόστα Ρίκα Costa Rica Kostariko Costa Rica Costa Rica Costa Rica کاستاریکا Costa Rica Costa Rica Costa Rica Costa Rica Cósta Ríce Costa Rìcea Costa Rica קוסטה ריקה Kostarika Costa Rica Kosta Rika Kostaríka Costa Rica コスタリカ 코스타리카 Costa Rica Коста-Рика Kosta Rika Kostarika Костарика കോസ്റ്ററിക്ക Costa Rica Costa Rica Costa Rica Costa Rica Kostaryka Costa Rica Costa Rica Costa Rica Коста-Рика Kostarika Kostarika Kosta-Rikë Костарика Costa Rica Kostarika คอสตาริกา Kosta Rika Коста-Рика Коста-Ріка Costa Rica 哥斯达黎加 哥斯大黎加
|
||||
CU كوبا Куба Куба Kuba Kuba Cuba Kuba Cuba Kuba Κούβα Cuba Kubo Cuba Kuuba Kuba کوبا Kuuba Cuba Cuba Cuba Cúba Cùba Cuba קובה Kuba Kuba Kuba Kúba Cuba キューバ 쿠바 Cuba Куба Kuba Kuba Куба ക്യൂബ Cuba Cuba Cuba Cuba Kuba Cuba Cuba Cuba Куба Kuba Kuba Kubë Куба Kuba Cuba คิวบา Küba Куба Куба Cuba 古巴 古巴
|
||||
CV الرأس الأخضر Каба-Вердэ Кабо Верде Kab-Glas Kape Verde Cap Verd Kapverdy Kap Verde Cabo Verde Πράσινο Ακρωτήριο Cape Verde Kabo-Verdo Cabo Verde Roheneemesaared Cabo Verde کیپورد Kap Verde Cape Verde Cap-Vert Cap-Vert Rinn Verde An Ceap Uaine Cabo Verde כף ורדה Zelenortska Republika Zöld-foki Köztársaság Tanjung Verde Grænhöfðaeyjar Capo Verde カーボベルデ 카보베르데 Cape Verde Кабо-Верде Žaliasis Kyšulys Kaboverde Зелен ’Рт കേപ്പ് വേർഡ് Kapp Verde Kaapverdië Kapp Verde Cape Verde Republika Zielonego Przylądka Cabo Verde Cabo Verde Capul Verde Кабо-Верде Kapverdy Zelenortski otoki Kepi i Gjelbër Зеленортска Острва Kap Verde Cape Verde เคปเวิร์ด Cape Verde Кабо-Верде Кабо-Верде Cape Verde 佛得角 維德角
|
||||
CW كوراساو Кюрасаа Кюрасао Curaçao Kurasao Curaçao Curaçao Curaçao Curaçao Κουρασάο Curaçao Curaçao Curazao Curaçao Curaçao کوراسائو Curaçao Curaçao Curaçao Curaçao Curaçao Curaçao Curaçao קוראסאו Curaçao Curaçao Curaçao Curacao Curaçao キュラソー 퀴라소 Curaçao Кюрасао Kiurasao Kirasao Курасао കുറാകാവോ Curaçao Curaçao Curaçao Curaçao Curaçao Curaçao Curaçao Curaçao Кюрасао Curaçao Curaçao Kurasao Курасао Curaçao Curacao คูราเซา Curaçao Кюрасао Кюрасао Curaçao 库拉索 庫拉索
|
||||
CX جزيرة كريسماس Востраў Каляд остров Рождество Enez Christmas Božićno ostrvo Illa Christmas Vánoční ostrov Juleøen Weihnachtsinsel Νήσος των Χριστουγέννων Christmas Island Christmas Island Isla de Navidad Jõulusaar Christmas uhartea جزیرهٔ کریسمس Joulusaari Christmas Island Île Christmas Île Christmas Oileán na Nollag Eilean na Nollaig Illa Christmas אי חג המולד Božićni otok Karácsony-sziget Pulau Natal Jólaey Isola Christmas クリスマス島 크리스마스섬 Christmas Island Рождество аралы Kalėdų Sala Ziemsvētku sala Божиќен Остров ക്രിസ്മസ് ദ്വീപ് Christmasøya Christmaseiland Christmasøya Christmas Island Wyspa Bożego Narodzenia Ilha Christmas Ilha Christmas Insula Christmas о-в Рождества Vianočný ostrov Božični otok Ishulli i Krishtlindjes Божићно Острво Julön Kisiwa cha Krismasi เกาะคริสต์มาส Christmas Adası Раштуа утравы Острів Різдва Đảo Giáng Sinh 圣诞岛 聖誕島
|
||||
CY قبرص Кіпр Кипър Kiprenez Kipar Xipre Kypr Cypern Zypern Κύπρος Cyprus Kipro Chipre Küpros Zipre قبرس Kypros Cyprus Chypre Chypre an Chipir Cìopras Chipre קפריסין Cipar Ciprus Siprus Kýpur Cipro キプロス 키프로스 Cyprus Кипр Kipras Kipra Кипар സൈപ്രസ് Kypros Cyprus Kypros Cyprus Cypr Chipre Chipre Cipru Кипр Cyprus Ciper Qipro Кипар Cypern Cyprus ไซปรัส Kıbrıs Кипр Кіпр Síp 塞浦路斯 賽普勒斯
|
||||
CZ التشيك Чэхія Чехия Tchekia Češka Txèquia Česko Tjekkiet Tschechien Τσεχία Czechia Ĉeĥujo Chequia Tšehhi Txekia چک Tšekki Czechia Tchéquie Tchéquie an tSeicia An t-Seic Chequia צ׳כיה Češka Csehország Ceko Tékkland Cechia チェコ 체코 Czechia Чехия Čekija Čehija Чешка ചെക്കിയ Tsjekkia Tsjechië Tsjekkia Czechia Czechy Tchéquia Tchéquia Cehia Чехия Česko Češka Çeki Чешка Tjeckien Chechia เช็ก Çekya Чехия Республикасы Чехія Séc 捷克 捷克
|
||||
DE ألمانيا Германія Германия Alamagn Njemačka Alemanya Německo Tyskland Deutschland Γερμανία Germany Germanujo Alemania Saksamaa Alemania آلمان Saksa Germany Allemagne Allemagne an Ghearmáin A’ Ghearmailt Alemaña גרמניה Njemačka Németország Jerman Þýskaland Germania ドイツ 독일 Almayn Германия Vokietija Vācija Германија ജർമ്മനി Tyskland Duitsland Tyskland Герман Niemcy Alemanha Alemanha Germania Германия Nemecko Nemčija Gjermani Немачка Tyskland Ujerumani เยอรมนี Almanya Германия Німеччина Đức 德国 德國
|
||||
DG دييغو غارسيا Востраў Дыега-Гарсія Диего Гарсия Diego Garcia Dijego Garsija Diego Garcia Diego García Diego Garcia Diego Garcia Ντιέγκο Γκαρσία Diego Garcia Diego Garcia Diego García Diego Garcia Diego García دیهگو گارسیا Diego Garcia Diego Garcia Diego Garcia Diego Garcia Diego Garcia Diego Garcia Diego García דייגו גרסיה Diego Garcia Diego Garcia Diego Garcia Diego Garcia Diego Garcia ディエゴガルシア島 디에고 가르시아 Diego Garcia Диего Гарсия Diego Garsija Djego Garsijas atols Диего Гарсија ഡീഗോ ഗ്രാഷ്യ Diego Garcia Diego Garcia Diego Garcia Diego Garcia Diego Garcia Diego Garcia Diego Garcia Diego Garcia Диего-Гарсия Diego Garcia Diego Garcia Diego-Garsia Дијего Гарсија Diego Garcia Diego Garcia ดิเอโกการ์เซีย Diego Garcia Diego Garcia Дієго-Гарсія Diego Garcia 迪戈加西亚岛 迪亞哥加西亞島
|
||||
DJ جيبوتي Джыбуці Джибути Djibouti Džibuti Djibouti Džibutsko Djibouti Dschibuti Τζιμπουτί Djibouti Ĝibutio Yibuti Djibouti Djibuti جیبوتی Djibouti Djibouti Djibouti Djibouti Djibouti Diobùtaidh Djibuti ג׳יבוטי Džibuti Dzsibuti Jibuti Djíbútí Gibuti ジブチ 지부티 Djibouti Джибути Džibutis Džibutija Џибути ജിബൂത്തി Djibouti Djibouti Djibouti Djibouti Dżibuti Djibuti Djibuti Djibouti Джибути Džibutsko Džibuti Xhibuti Џибути Djibouti Jibuti จิบูตี Cibuti Җибүти Джибуті Djibouti 吉布提 吉布地
|
||||
DK الدانمرك Данія Дания Danmark Danska Dinamarca Dánsko Danmark Dänemark Δανία Denmark Danujo Dinamarca Taani Danimarka دانمارک Tanska Denmark Danemark Danemark an Danmhairg An Danmhairg Dinamarca דנמרק Danska Dánia Denmark Danmörk Danimarca デンマーク 덴마크 Denmark Дания Danija Dānija Данска ഡെൻമാർക്ക് Danmark Denemarken Danmark Denmark Dania Dinamarca Dinamarca Danemarca Дания Dánsko Danska Danimarkë Данска Danmark Denmark เดนมาร์ก Danimarka Дания Данія Đan Mạch 丹麦 丹麥
|
||||
DM دومينيكا Дамініка Доминика Dominica Dominika Dominica Dominika Dominica Dominica Ντομίνικα Dominica Dominiko Dominica Dominica Dominika دومینیکا Dominica Dominica Dominique Dominique Doiminice Doiminicea Dominica דומיניקה Dominika Dominika Dominika Dóminíka Dominica ドミニカ国 도미니카 Dominica Доминика Dominika Dominika Доминика ഡൊമിനിക്ക Dominica Dominica Dominica Dominica Dominika Dominica Dominica Dominica Доминика Dominika Dominika Dominikë Доминика Dominica Dominika โดมินิกา Dominika Доминика Домініка Dominica 多米尼克 多米尼克
|
||||
DO جمهورية الدومينيكان Дамініканская Рэспубліка Доминиканска република Republik Dominikan Dominikanska Republika República Dominicana Dominikánská republika Den Dominikanske Republik Dominikanische Republik Δομινικανή Δημοκρατία Dominican Republic Domingo República Dominicana Dominikaani Vabariik Dominikar Errepublika جمهوری دومینیکن Dominikaaninen tasavalta Dominican Republic République dominicaine République dominicaine an Phoblacht Dhoiminiceach A’ Phoblachd Dhoiminiceach República Dominicana הרפובליקה הדומיניקנית Dominikanska Republika Dominikai Köztársaság Republik Dominika Dóminíska lýðveldið Repubblica Dominicana ドミニカ共和国 도미니카 공화국 Dominican Republic Доминика Республикасы Dominikos Respublika Dominikāna Доминиканска Република ഡൊമിനിക്കൻ റിപ്പബ്ലിക്ക് Den dominikanske republikk Dominicaanse Republiek Den dominikanske republikken Dominican Republic Dominikana República Dominicana República Dominicana Republica Dominicană Доминиканская Республика Dominikánska republika Dominikanska republika Republika Dominikane Доминиканска Република Dominikanska republiken Jamhuri ya Dominika สาธารณรัฐโดมินิกัน Dominik Cumhuriyeti Доминикана Республикасы Домініканська Республіка Cộng hòa Dominica 多米尼加共和国 多明尼加共和國
|
||||
DZ الجزائر Алжыр Алжир Aljeria Alžir Algèria Alžírsko Algeriet Algerien Αλγερία Algeria Alĝerio Argelia Alžeeria Aljeria الجزایر Algeria Algeria Algérie Algérie an Ailgéir Aildiria Alxeria אלג׳יריה Alžir Algéria Aljazair Alsír Algeria アルジェリア 알제리 Algeria Алжир Alžyras Alžīrija Алжир അൾജീരിയ Algerie Algerije Algerie Algeria Algieria Argélia Argélia Algeria Алжир Alžírsko Alžirija Algjeri Алжир Algeriet Aljeria แอลจีเรีย Cezayir Алжир Алжир Algeria 阿尔及利亚 阿爾及利亞
|
||||
EA سيوتا وميليلا Сеута і Мелілья Сеута и Мелия Ceuta ha Melilla Seuta i Melilja Ceuta i Melilla Ceuta a Melilla Ceuta og Melilla Ceuta und Melilla Θέουτα και Μελίγια Ceuta & Melilla Ceuta & Melilla Ceuta y Melilla Ceuta ja Melilla Ceuta eta Melilla سبته و ملیله Ceuta ja Melilla Ceuta & Melilla Ceuta et Melilla Ceuta et Melilla Ceuta agus Melilla Ceuta agus Melilla Ceuta e Melilla סאוטה ומלייה Ceuta i Melilla Ceuta és Melilla Ceuta dan Melilla Ceuta og Melilla Ceuta e Melilla セウタ・メリリャ 세우타 및 멜리야 Ceuta & Melilla Сеута жана Мелилла Seuta ir Melila Seūta un Melilja Сеута и Мелиља സെയൂത്ത ആൻഡ് മെലിയ Ceuta og Melilla Ceuta en Melilla Ceuta og Melilla Ceuta & Melilla Ceuta i Melilla Ceuta e Melilla Ceuta e Melilla Ceuta și Melilla Сеута и Мелилья Ceuta a Melilla Ceuta in Melilla Theuta e Melila Сеута и Мелиља Ceuta och Melilla Ceuta na Melilla เซวตาและเมลียา Ceuta ve Melilla Ceuta & Melilla Сеута і Мелілья Ceuta và Melilla 休达及梅利利亚 休達與梅利利亞
|
||||
EC الإكوادور Эквадор Еквадор Ecuador Ekvador Equador Ekvádor Ecuador Ecuador Ισημερινός Ecuador Ekvadoro Ecuador Ecuador Ekuador اکوادور Ecuador Ecuador Équateur Équateur Eacuadór Eacuador Ecuador אקוודור Ekvador Ecuador Ekuador Ekvador Ecuador エクアドル 에콰도르 Ecuador Эквадор Ekvadoras Ekvadora Еквадор ഇക്വഡോർ Ecuador Ecuador Ecuador Ecuador Ekwador Equador Equador Ecuador Эквадор Ekvádor Ekvador Ekuador Еквадор Ecuador Ecuador เอกวาดอร์ Ekvador Эквадор Еквадор Ecuador 厄瓜多尔 厄瓜多
|
||||
EE إستونيا Эстонія Естония Estonia Estonija Estònia Estonsko Estland Estland Εσθονία Estonia Estonujo Estonia Eesti Estonia استونی Viro Estonia Estonie Estonie an Eastóin An Eastoin Estonia אסטוניה Estonija Észtország Estonia Eistland Estonia エストニア 에스토니아 Estonia Эстония Estija Igaunija Естонија എസ്റ്റോണിയ Estland Estland Estland Estonia Estonia Estônia Estônia Estonia Эстония Estónsko Estonija Estoni Естонија Estland Estonia เอสโตเนีย Estonya Эстония Естонія Estonia 爱沙尼亚 愛沙尼亞
|
||||
EG مصر Егіпет Египет Egipt Egipat Egipte Egypt Egypten Ägypten Αίγυπτος Egypt Egipto Egipto Egiptus Egipto مصر Egypti Egypt Égypte Égypte an Éigipt An Èiphit Exipto מצרים Egipat Egyiptom Mesir Egyptaland Egitto エジプト 이집트 Egypt Египет Egiptas Ēģipte Египет ഈജിപ്ത് Egypt Egypte Egypt Egypt Egipt Egito Egito Egipt Египет Egypt Egipt Egjipt Египат Egypten Misri อียิปต์ Mısır Мисыр Єгипет Ai Cập 埃及 埃及
|
||||
EH الصحراء الغربية Заходняя Сахара Западна Сахара Sahara ar Cʼhornôg Zapadna Sahara Sàhara Occidental Západní Sahara Vestsahara Westsahara Δυτική Σαχάρα Western Sahara Okcidenta Saharo Sáhara Occidental Lääne-Sahara Mendebaldeko Sahara صحرای غربی Länsi-Sahara Kanlurang Sahara Sahara occidental Sahara occidental an Sahára Thiar Sathara an Iar O Sáhara Occidental סהרה המערבית Zapadna Sahara Nyugat-Szahara Sahara Barat Vestur-Sahara Sahara occidentale 西サハラ 서사하라 Western Sahara Батыш Сахара Vakarų Sachara Rietumsahāra Западна Сахара പശ്ചിമ സഹാറ Vest-Sahara Westelijke Sahara Vest-Sahara Western Sahara Sahara Zachodnia Saara Ocidental Saara Ocidental Sahara Occidentală Западная Сахара Západná Sahara Zahodna Sahara Saharaja Perëndimore Западна Сахара Västsahara Sahara Magharibi ซาฮาราตะวันตก Batı Sahra Western Sahara Західна Сахара Tây Sahara 西撒哈拉 西撒哈拉
|
||||
ER إريتريا Эрытрэя Еритрея Eritrea Eritreja Eritrea Eritrea Eritrea Eritrea Ερυθραία Eritrea Eritreo Eritrea Eritrea Eritrea اریتره Eritrea Eritrea Érythrée Érythrée an Eiritré Eartra Eritrea אריתריאה Eritreja Eritrea Eritrea Erítrea Eritrea エリトリア 에리트리아 Eritrea Эритрея Eritrėja Eritreja Еритреја എറിത്രിയ Eritrea Eritrea Eritrea Eritrea Erytrea Eritreia Eritreia Eritreea Эритрея Eritrea Eritreja Eritre Еритреја Eritrea Eritrea เอริเทรีย Eritre Эритрея Еритрея Eritrea 厄立特里亚 厄利垂亞
|
||||
ES إسبانيا Іспанія Испания Spagn Španija Espanya Španělsko Spanien Spanien Ισπανία Spain Hispanujo España Hispaania Espainia اسپانیا Espanja Spain Espagne Espagne an Spáinn An Spàinnt España ספרד Španjolska Spanyolország Spanyol Spánn Spagna スペイン 스페인 Spain Испания Ispanija Spānija Шпанија സ്പെയിൻ Spania Spanje Spania Spain Hiszpania Espanha Espanha Spania Испания Španielsko Španija Spanjë Шпанија Spanien Uhispania สเปน İspanya Испания Іспанія Tây Ban Nha 西班牙 西班牙
|
||||
ET إثيوبيا Эфіопія Етиопия Etiopia Etiopija Etiòpia Etiopie Etiopien Äthiopien Αιθιοπία Ethiopia Etiopujo Etiopía Etioopia Etiopia اتیوپی Etiopia Ethiopia Éthiopie Éthiopie an Aetóip An Itiop Etiopía אתיופיה Etiopija Etiópia Etiopia Eþíópía Etiopia エチオピア 에티오피아 Ethiopia Эфиопия Etiopija Etiopija Етиопија എത്യോപ്യ Etiopia Ethiopië Etiopia Ethiopia Etiopia Etiópia Etiópia Etiopia Эфиопия Etiópia Etiopija Etiopi Етиопија Etiopien Ethiopia เอธิโอเปีย Etiyopya Эфиопия Ефіопія Ethiopia 埃塞俄比亚 衣索比亞
|
||||
EU الاتحاد الأوروبي Еўрапейскі саюз Европейски съюз Unaniezh Europa Evropska unija Unió Europea Evropská unie Den Europæiske Union Europäische Union Ευρωπαϊκή Ένωση European Union European Union Unión Europea Euroopa Liit Europar Batasuna اتحادیهٔ اروپا Euroopan unioni European Union Union européenne Union européenne an tAontas Eorpach An t-Aonadh Eòrpach Unión Europea האיחוד האירופי Europska unija Európai Unió Uni Eropa Evrópusambandið Unione Europea 欧州連合 유럽 연합 Unyans Europek Европа Биримдиги Europos Sąjunga Eiropas Savienība Европска унија യൂറോപ്യൻ യൂണിയൻ Den europeiske union Europese Unie European Union European Union Unia Europejska União Europeia União Europeia Uniunea Europeană Европейский союз Európska únia Evropska unija Bashkimi Evropian Европска унија Europeiska unionen Umoja wa Ulaya สหภาพยุโรป Avrupa Birliği European Union Європейський Союз Liên Minh Châu Âu 欧盟 歐盟
|
||||
FI فنلندا Фінляндыя Финландия Finland Finska Finlàndia Finsko Finland Finnland Φινλανδία Finland Finnlando Finlandia Soome Finlandia فنلاند Suomi Finland Finlande Finlande an Fhionlainn An Fhionnlann Finlandia פינלנד Finska Finnország Finlandia Finnland Finlandia フィンランド 핀란드 Finland Финляндия Suomija Somija Финска ഫിൻലാൻഡ് Finland Finland Finland Finland Finlandia Finlândia Finlândia Finlanda Финляндия Fínsko Finska Finlandë Финска Finland Ufini ฟินแลนด์ Finlandiya Финляндия Фінляндія Phần Lan 芬兰 芬蘭
|
||||
FJ فيجي Фіджы Фиджи Fidji Fidži Fiji Fidži Fiji Fidschi Φίτζι Fiji Fiĝoj Fiyi Fidži Fiji فیجی Fidži Fiji Fidji Fidji Fidsí Fìdi Fixi פיג׳י Fidži Fidzsi Fiji Fídjíeyjar Figi フィジー 피지 Fiji Фиджи Fidžis Fidži Фиџи ഫിജി Fiji Fiji Fiji Fiji Fidżi Fiji Fiji Fiji Фиджи Fidži Fidži Fixhi Фиџи Fiji Fiji ฟิจิ Fiji Фиджи Фіджі Fiji 斐济 斐濟
|
||||
FK جزر فوكلاند Фалклендскія астравы Фолкландски острови Inizi Falkland Folklandska ostrva Illes Malvines Falklandské ostrovy Falklandsøerne Falklandinseln Νήσοι Φόκλαντ Falkland Islands Falkland Islands Islas Malvinas Falklandi saared Falklandak جزایر فالکلند Falklandinsaaret Falkland Islands Îles Malouines Îles Malouines Oileáin Fháclainne Na h-Eileanan Fàclannach Illas Malvinas איי פוקלנד Falklandski otoci Falkland-szigetek Kepulauan Falkland Falklandseyjar Isole Falkland フォークランド諸島 포클랜드 제도 Falkland Islands Фолкленд аралдары Folklando Salos Folklenda salas Фолкландски Острови ഫാക്ക്ലാന്റ് ദ്വീപുകൾ Falklandsøyene Falklandeilanden Falklandsøyane Falkland Islands Falklandy Ilhas Malvinas Ilhas Malvinas Insulele Falkland Фолклендские о-ва Falklandy Falklandski otoki Ishujt Falkland Фокландска Острва Falklandsöarna Visiwa vya Falkland หมู่เกาะฟอล์กแลนด์ Falkland Adaları Фолкленд утраулары Фолклендські Острови Quần đảo Falkland 福克兰群岛 福克蘭群島
|
||||
FM ميكرونيزيا Мікранезія Микронезия Mikronezia Mikronezija Micronèsia Mikronésie Mikronesien Mikronesien Μικρονησία Micronesia Mikronezio Micronesia Mikroneesia Mikronesia میکرونزی Mikronesian liittovaltio Micronesia États fédérés de Micronésie États fédérés de Micronésie an Mhicrinéis Na Meanbh-eileanan Micronesia מיקרונזיה Mikronezija Mikronézia Mikronesia Míkrónesía Micronesia ミクロネシア連邦 미크로네시아 Micronesia Микронезия Mikronezija Mikronēzija Микронезија മൈക്രോനേഷ്യ Mikronesiaføderasjonen Micronesia Mikronesiaføderasjonen Micronesia Mikronezja Micronésia Micronésia Micronezia Федеративные Штаты Микронезии Mikronézia Mikronezija Mikronezi Микронезија Mikronesien Micronesia ไมโครนีเซีย Mikronezya Микронезия Мікронезія Micronesia 密克罗尼西亚 密克羅尼西亞
|
||||
FO جزر فارو Фарэрскія астравы Фарьорски острови Inizi Faero Farska ostrva Illes Fèroe Faerské ostrovy Færøerne Färöer Νήσοι Φερόες Faroe Islands Ferooj Islas Feroe Fääri saared Faroe uharteak جزایر فارو Färsaaret Faroe Islands Îles Féroé Îles Féroé Oileáin Fharó Na h-Eileanan Fàro Illas Feroe איי פארו Farski otoci Feröer szigetek Kepulauan Faroe Færeyjar Isole Fær Øer フェロー諸島 페로 제도 Faroe Islands Фарер аралдары Farerų Salos Fēru salas Фарски Острови ഫറോ ദ്വീപുകൾ Færøyene Faeröer Færøyane Faroe Islands Wyspy Owcze Ilhas Faroe Ilhas Faroe Insulele Feroe Фарерские о-ва Faerské ostrovy Ferski otoki Ishujt Faroe Фарска Острва Färöarna Visiwa vya Faroe หมู่เกาะแฟโร Faroe Adaları Фарер утраулары Фарерські Острови Quần đảo Faroe 法罗群岛 法羅群島
|
||||
FR فرنسا Францыя Франция Frañs Francuska França Francie Frankrig Frankreich Γαλλία France Francujo Francia Prantsusmaa Frantzia فرانسه Ranska France France France an Fhrainc An Fhraing Francia צרפת Francuska Franciaország Prancis Frakkland Francia フランス 프랑스 Pow Frenk Франция Prancūzija Francija Франција ഫ്രാൻസ് Frankrike Frankrijk Frankrike Франц Francja França França Franța Франция Francúzsko Francija Francë Француска Frankrike Ufaransa ฝรั่งเศส Fransa Франция Франція Pháp 法国 法國
|
||||
GA الغابون Габон Габон Gabon Gabon Gabon Gabon Gabon Gabun Γκαμπόν Gabon Gabono Gabón Gabon Gabon گابن Gabon Gabon Gabon Gabon an Ghabúin Gabon Gabón גבון Gabon Gabon Gabon Gabon Gabon ガボン 가봉 Gabon Габон Gabonas Gabona Габон ഗാബൺ Gabon Gabon Gabon Gabon Gabon Gabão Gabão Gabon Габон Gabon Gabon Gabon Габон Gabon Gabon กาบอง Gabon Габон Габон Gabon 加蓬 加彭
|
||||
GB المملكة المتحدة Вялікабрытанія Обединеното кралство Rouantelezh-Unanet Ujedinjeno Kraljevstvo Regne Unit Spojené království Storbritannien Vereinigtes Königreich Ηνωμένο Βασίλειο United Kingdom Unuiĝinta Reĝlando Reino Unido Suurbritannia Erresuma Batua بریتانیا Iso-Britannia United Kingdom Royaume-Uni Royaume-Uni an Ríocht Aontaithe An Rìoghachd Aonaichte O Reino Unido בריטניה Ujedinjeno Kraljevstvo Egyesült Királyság Inggris Raya Bretland Regno Unito イギリス 영국 Rywvaneth Unys Улуу Британия Jungtinė Karalystė Apvienotā Karaliste Обединето Кралство യുണൈറ്റഡ് കിംഗ്ഡം Storbritannia Verenigd Koninkrijk Storbritannia Стыр Британи Wielka Brytania Reino Unido Reino Unido Regatul Unit Великобритания Spojené kráľovstvo Združeno kraljestvo Mbretëria e Bashkuar Уједињено Краљевство Storbritannien Ufalme wa Muungano สหราชอาณาจักร Birleşik Krallık Берләшкән Корольлек Велика Британія Vương quốc Anh 英国 英國
|
||||
GD غرينادا Грэнада Гренада Grenada Grenada Grenada Grenada Grenada Grenada Γρενάδα Grenada Grenado Granada Grenada Grenada گرنادا Grenada Grenada Grenade Grenade Greanáda Greanàda Granada גרנדה Grenada Grenada Grenada Grenada Grenada グレナダ 그레나다 Grenada Гренада Grenada Grenāda Гренада ഗ്രനേഡ Grenada Grenada Grenada Grenada Grenada Granada Granada Grenada Гренада Grenada Grenada Granadë Гренада Grenada Grenada เกรเนดา Grenada Гренада Ґренада Grenada 格林纳达 格瑞那達
|
||||
GE جورجيا Грузія Грузия Jorjia Gruzija Geòrgia Gruzie Georgien Georgien Γεωργία Georgia Kartvelujo Georgia Gruusia Georgia گرجستان Georgia Georgia Géorgie Géorgie an tSeoirsia A’ Chairtbheil Xeorxia גאורגיה Gruzija Grúzia Georgia Georgía Georgia ジョージア 조지아 Georgia Грузия Gruzija Gruzija Грузија ജോർജ്ജിയ Georgia Georgië Georgia Гуырдзыстон Gruzja Geórgia Geórgia Georgia Грузия Gruzínsko Gruzija Gjeorgji Грузија Georgien Jojia จอร์เจีย Gürcistan Грузия Грузія Georgia 格鲁吉亚 喬治亞
|
||||
GF غويانا الفرنسية Французская Гвіяна Френска Гвиана Gwiana cʼhall Francuska Gvajana Guaiana Francesa Francouzská Guyana Fransk Guyana Französisch-Guayana Γαλλική Γουιάνα French Guiana Franca Gviano Guayana Francesa Prantsuse Guajaana Guyana Frantsesa گویان فرانسه Ranskan Guayana French Guiana Guyane française Guyane française Guáin na Fraince Guidheàna na Frainge Güiana Francesa גיאנה הצרפתית Francuska Gijana Francia Guyana Guyana Prancis Franska Gvæjana Guyana francese 仏領ギアナ 프랑스령 기아나 French Guiana Француздук Гвиана Prancūzijos Gviana Francijas Gviāna Француска Гвајана ഫ്രഞ്ച് ഗയാന Fransk Guyana Frans-Guyana Fransk Guyana French Guiana Gujana Francuska Guiana Francesa Guiana Francesa Guyana Franceză Французская Гвиана Francúzska Guyana Francoska Gvajana Guajana Franceze Француска Гвајана Franska Guyana Guiana ya Ufaransa เฟรนช์เกียนา Fransız Guyanası Француз Гвианасы Французька Ґвіана Guiana thuộc Pháp 法属圭亚那 法屬圭亞那
|
||||
GG غيرنزي Гернсі Гърнзи Gwernenez Gernzi Guernsey Guernsey Guernsey Guernsey Γκέρνζι Guernsey Guernsey Guernsey Guernsey Guernesey گرنزی Guernsey Guernsey Guernesey Guernesey Geansaí Geàrnsaidh Guernsey גרנזי Guernsey Guernsey Guernsey Guernsey Guernsey ガーンジー 건지 Guernsey Гернси Gernsis Gērnsija Гернзи ഗേൺസി Guernsey Guernsey Guernsey Guernsey Guernsey Guernsey Guernsey Guernsey Гернси Guernsey Guernsey Gernsej Гернзи Guernsey Guernsey เกิร์นซีย์ Guernsey Гернси Ґернсі Guernsey 根西岛 根息
|
||||
GH غانا Гана Гана Ghana Gana Ghana Ghana Ghana Ghana Γκάνα Ghana Ganao Ghana Ghana Ghana غنا Ghana Ghana Ghana Ghana Gána Gàna Ghana גאנה Gana Ghána Ghana Gana Ghana ガーナ 가나 Ghana Гана Gana Gana Гана ഘാന Ghana Ghana Ghana Ghana Ghana Gana Gana Ghana Гана Ghana Gana Ganë Гана Ghana Ghana กานา Gana Гана Гана Ghana 加纳 迦納
|
||||
GI جبل طارق Гібралтар Гибралтар Jibraltar Gibraltar Gibraltar Gibraltar Gibraltar Gibraltar Γιβραλτάρ Gibraltar Ĝibraltaro Gibraltar Gibraltar Gibraltar جبلالطارق Gibraltar Gibraltar Gibraltar Gibraltar Giobráltar Diobraltar Xibraltar גיברלטר Gibraltar Gibraltár Gibraltar Gíbraltar Gibilterra ジブラルタル 지브롤터 Gibraltar Гибралтар Gibraltaras Gibraltārs Гибралтар ജിബ്രാൾട്ടർ Gibraltar Gibraltar Gibraltar Gibraltar Gibraltar Gibraltar Gibraltar Gibraltar Гибралтар Gibraltár Gibraltar Gjibraltar Гибралтар Gibraltar Gibraltar ยิบรอลตาร์ Cebelitarık Гибралтар Ґібралтар Gibraltar 直布罗陀 直布羅陀
|
||||
GL غرينلاند Грэнландыя Гренландия Greunland Grenland Groenlàndia Grónsko Grønland Grönland Γροιλανδία Greenland Gronlando Groenlandia Gröönimaa Groenlandia گرینلند Grönlanti Greenland Groenland Groenland an Ghraonlainn A’ Ghraonlann Groenlandia גרינלנד Grenland Grönland Grinlandia Grænland Groenlandia グリーンランド 그린란드 Greenland Гренландия Grenlandija Grenlande Гренланд ഗ്രീൻലാൻറ് Grønland Groenland Grønland Greenland Grenlandia Groenlândia Groenlândia Groenlanda Гренландия Grónsko Grenlandija Grënlandë Гренланд Grönland Greenland กรีนแลนด์ Grönland Гренландия Ґренландія Greenland 格陵兰 格陵蘭
|
||||
GM غامبيا Гамбія Гамбия Gambia Gambija Gàmbia Gambie Gambia Gambia Γκάμπια Gambia Gambio Gambia Gambia Gambia گامبیا Gambia Gambia Gambie Gambie an Ghaimbia A’ Ghaimbia Gambia גמביה Gambija Gambia Gambia Gambía Gambia ガンビア 감비아 Gambia Гамбия Gambija Gambija Гамбија ഗാംബിയ Gambia Gambia Gambia Gambia Gambia Gâmbia Gâmbia Gambia Гамбия Gambia Gambija Gambi Гамбија Gambia Gambia แกมเบีย Gambiya Гамбия Гамбія Gambia 冈比亚 甘比亞
|
||||
GN غينيا Гвінея Гвинея Ginea Gvineja Guinea Guinea Guinea Guinea Γουινέα Guinea Gvineo Guinea Guinea Ginea گینه Guinea Guinea Guinée Guinée an Ghuine Gini Guinea גינאה Gvineja Guinea Guinea Gínea Guinea ギニア 기니 Guinea Гвинея Gvinėja Gvineja Гвинеја ഗിനിയ Guinea Guinee Guinea Guinea Gwinea Guiné Guiné Guineea Гвинея Guinea Gvineja Guine Гвинеја Guinea Gine กินี Gine Гвинея Гвінея Guinea 几内亚 幾內亞
|
||||
GP غوادلوب Гвадэлупа Гваделупа Gwadeloup Gvadalupe Guadeloupe Guadeloupe Guadeloupe Guadeloupe Γουαδελούπη Guadeloupe Gvadelupo Guadalupe Guadeloupe Guadalupe گوادلوپ Guadeloupe Guadeloupe Guadeloupe Guadeloupe Guadalúip Guadalup Guadalupe גוואדלופ Guadalupe Guadeloupe Guadeloupe Gvadelúpeyjar Guadalupa グアドループ 과들루프 Guadeloupe Гваделупа Gvadelupa Gvadelupa Гвадалупе ഗ്വാഡലൂപ്പ് Guadeloupe Guadeloupe Guadeloupe Guadeloupe Gwadelupa Guadalupe Guadalupe Guadelupa Гваделупа Guadeloupe Guadeloupe Guadelupë Гваделуп Guadeloupe Guadeloupe กวาเดอลูป Guadeloupe Гваделупа Ґваделупа Guadeloupe 瓜德罗普 瓜地洛普
|
||||
GQ غينيا الاستوائية Экватарыяльная Гвінея Екваториална Гвинея Ginea ar Cʼheheder Ekvatorijalna Gvineja Guinea Equatorial Rovníková Guinea Ækvatorialguinea Äquatorialguinea Ισημερινή Γουινέα Equatorial Guinea Ekvatora Gvineo Guinea Ecuatorial Ekvatoriaal-Guinea Ekuatore Ginea گینهٔ استوایی Päiväntasaajan Guinea Equatorial Guinea Guinée équatoriale Guinée équatoriale an Ghuine Mheánchiorclach Gini Mheadhan-Chriosach Guinea Ecuatorial גינאה המשוונית Ekvatorska Gvineja Egyenlítői-Guinea Guinea Ekuatorial Miðbaugs-Gínea Guinea Equatoriale 赤道ギニア 적도 기니 Equatorial Guinea Экватордук Гвинея Pusiaujo Gvinėja Ekvatoriālā Gvineja Екваторска Гвинеја ഇക്വറ്റോറിയൽ ഗിനിയ Ekvatorial-Guinea Equatoriaal-Guinea Ekvatorial-Guinea Equatorial Guinea Gwinea Równikowa Guiné Equatorial Guiné Equatorial Guineea Ecuatorială Экваториальная Гвинея Rovníková Guinea Ekvatorialna Gvineja Guineja Ekuatoriale Екваторијална Гвинеја Ekvatorialguinea Guinea ya Ikweta อิเควทอเรียลกินี Ekvator Ginesi Экваториаль Гвинея Екваторіальна Гвінея Guinea Xích Đạo 赤道几内亚 赤道幾內亞
|
||||
GR اليونان Грэцыя Гърция Gres Grčka Grècia Řecko Grækenland Griechenland Ελλάδα Greece Grekujo Grecia Kreeka Grezia یونان Kreikka Greece Grèce Grèce an Ghréig A’ Ghreug Grecia יוון Grčka Görögország Yunani Grikkland Grecia ギリシャ 그리스 Greece Греция Graikija Grieķija Грција ഗ്രീസ് Hellas Griekenland Hellas Greece Grecja Grécia Grécia Grecia Греция Grécko Grčija Greqi Грчка Grekland Ugiriki กรีซ Yunanistan Греция Греція Hy Lạp 希腊 希臘
|
||||
GS جورجيا الجنوبية وجزر ساندويتش الجنوبية Паўднёвая Георгія і Паўднёвыя Сандвічавы астравы Южна Джорджия и Южни Сандвичеви острови Inizi Georgia ar Su hag Inizi Sandwich ar Su Južna Džordžija i Južna Sendvič ostrva Illes Geòrgia del Sud i Sandwich del Sud Jižní Georgie a Jižní Sandwichovy ostrovy South Georgia og De Sydlige Sandwichøer Südgeorgien und die Südlichen Sandwichinseln Νήσοι Νότια Γεωργία και Νότιες Σάντουιτς South Georgia & South Sandwich Islands Sud-Georgio kaj Sud-Sandviĉinsuloj Islas Georgia del Sur y Sandwich del Sur Lõuna-Georgia ja Lõuna-Sandwichi saared Hegoaldeko Georgia eta Hegoaldeko Sandwich uharteak جورجیای جنوبی و جزایر ساندویچ جنوبی Etelä-Georgia ja Eteläiset Sandwichsaaret South Georgia & South Sandwich Islands Géorgie du Sud et îles Sandwich du Sud Géorgie du Sud et îles Sandwich du Sud an tSeoirsia Theas agus Oileáin Sandwich Theas Seòirsea a Deas is na h-Eileanan Sandwich a Deas Illas Xeorxia do Sur e Sandwich do Sur ג׳ורג׳יה הדרומית ואיי סנדוויץ׳ הדרומיים Južna Georgija i Južni Sendvički Otoci Déli-Georgia és Déli-Sandwich-szigetek Georgia Selatan & Kep. Sandwich Selatan Suður-Georgía og Suður-Sandvíkureyjar Georgia del Sud e Sandwich australi サウスジョージア・サウスサンドウィッチ諸島 사우스조지아 사우스샌드위치 제도 South Georgia & South Sandwich Islands Түштүк Жоржия жана Түштүк Сэндвич аралдары Pietų Džordžija ir Pietų Sandvičo salos Dienviddžordžija un Dienvidsendviču salas Јужна Џорџија и Јужни Сендвички Острови ദക്ഷിണ ജോർജ്ജിയയും ദക്ഷിണ സാൻഡ്വിച്ച് ദ്വീപുകളും Sør-Georgia og Sør-Sandwichøyene Zuid-Georgia en Zuidelijke Sandwicheilanden Sør-Georgia og Sør-Sandwichøyene South Georgia & South Sandwich Islands Georgia Południowa i Sandwich Południowy Ilhas Geórgia do Sul e Sandwich do Sul Ilhas Geórgia do Sul e Sandwich do Sul Georgia de Sud și Insulele Sandwich de Sud Южная Георгия и Южные Сандвичевы о-ва Južná Georgia a Južné Sandwichove ostrovy Južna Georgia in Južni Sandwichevi otoki Xhorxha Jugore dhe Ishujt Senduiçë të Jugut Јужна Џорџија и Јужна Сендвичка Острва Sydgeorgien och Sydsandwichöarna Visiwa vya Georgia Kusini na Sandwich Kusini เกาะเซาท์จอร์เจียและหมู่เกาะเซาท์แซนด์วิช Güney Georgia ve Güney Sandwich Adaları Көньяк Георгия һәм Көньяк Сандвич утраулары Південна Джорджія та Південні Сандвічеві Острови Nam Georgia & Quần đảo Nam Sandwich 南乔治亚和南桑威奇群岛 南喬治亞與南三明治群島
|
||||
GT غواتيمالا Гватэмала Гватемала Guatemala Gvatemala Guatemala Guatemala Guatemala Guatemala Γουατεμάλα Guatemala Gvatemalo Guatemala Guatemala Guatemala گواتمالا Guatemala Guatemala Guatemala Guatemala Guatamala Guatamala Guatemala גואטמלה Gvatemala Guatemala Guatemala Gvatemala Guatemala グアテマラ 과테말라 Guatemala Гватемала Gvatemala Gvatemala Гватемала ഗ്വാട്ടിമാല Guatemala Guatemala Guatemala Guatemala Gwatemala Guatemala Guatemala Guatemala Гватемала Guatemala Gvatemala Guatemalë Гватемала Guatemala Guatemala กัวเตมาลา Guatemala Гватемала Ґватемала Guatemala 危地马拉 瓜地馬拉
|
||||
GU غوام Гуам Гуам Guam Guam Guam Guam Guam Guam Γκουάμ Guam Gvamo Guam Guam Guam گوام Guam Guam Guam Guam Guam Guam Guam גואם Guam Guam Guam Gvam Guam グアム 괌 Guam Гуам Guamas Guama Гуам ഗ്വാം Guam Guam Guam Guam Guam Guam Guam Guam Гуам Guam Guam Guam Гуам Guam Guam กวม Guam Гуам Ґуам Guam 关岛 關島
|
||||
GW غينيا بيساو Гвінея-Бісау Гвинея-Бисау Ginea-Bissau Gvineja-Bisao Guinea Bissau Guinea-Bissau Guinea-Bissau Guinea-Bissau Γουινέα Μπισάου Guinea-Bissau Gvineo-Bisaŭo Guinea-Bisáu Guinea-Bissau Ginea Bissau گینهٔ بیسائو Guinea-Bissau Guinea-Bissau Guinée-Bissau Guinée-Bissau Guine Bissau Gini-Bioso A Guinea Bissau גינאה-ביסאו Gvineja Bisau Bissau-Guinea Guinea-Bissau Gínea-Bissá Guinea-Bissau ギニアビサウ 기니비사우 Guinea-Bissau Гвинея-Бисау Bisau Gvinėja Gvineja-Bisava Гвинеја-Бисау ഗിനിയ-ബിസൗ Guinea-Bissau Guinee-Bissau Guinea-Bissau Guinea-Bissau Gwinea Bissau Guiné-Bissau Guiné-Bissau Guineea-Bissau Гвинея-Бисау Guinea-Bissau Gvineja Bissau Guine-Bisau Гвинеја-Бисао Guinea-Bissau Ginebisau กินี-บิสเซา Gine-Bissau Гвинея-Бисау Гвінея-Бісау Guinea-Bissau 几内亚比绍 幾內亞比索
|
||||
GY غيانا Гаяна Гаяна Guyana Gvajana Guyana Guyana Guyana Guyana Γουιάνα Guyana Gujano Guyana Guyana Guyana گویان Guyana Guyana Guyana Guyana an Ghuáin Guidheàna Güiana גיאנה Gvajana Guyana Guyana Gvæjana Guyana ガイアナ 가이아나 Guyana Гайана Gajana Gajāna Гвајана ഗയാന Guyana Guyana Guyana Guyana Gujana Guiana Guiana Guyana Гайана Guyana Gvajana Guajanë Гвајана Guyana Guyana กายอานา Guyana Гайана Ґайана Guyana 圭亚那 蓋亞那
|
||||
HK هونغ كونغ Ганконг Хонконг Hong Kong Hong Kong Hong Kong Hongkong Hongkong Hongkong Χονγκ Κονγκ Hong Kong Hong Kong Hong Kong Hongkong Hong Kong هنگکنگ Hongkong Hong Kong Hong Kong Hong Kong Hong Cong Hong Kong Hong Kong הונג קונג Hong Kong Hongkong Hong Kong Hong Kong Hong Kong 香港 홍콩 Hong Kong Гонконг Honkongas Honkonga Хонг Конг ഹോങ്കോങ് Hongkong Hongkong Hongkong Hong Kong Hongkong Hong Kong Hong Kong Hong Kong Гонконг Hongkong Hongkong Hong-Kong Хонгконг Hong Kong Hong Kong ฮ่องกง Hong Kong Гонконг Гонконг Hồng Kông 香港 香港
|
||||
HM جزيرة هيرد وجزر ماكدونالد Астравы Херд і Макдональд острови Хърд и Макдоналд Inizi Heard ha McDonald Herd i arhipelag MekDonald Illa Heard i Illes McDonald Heardův ostrov a McDonaldovy ostrovy Heard Island og McDonald Islands Heard und McDonaldinseln Νήσοι Χερντ και Μακντόναλντ Heard & McDonald Islands Herda kaj Makdonaldaj Insuloj Islas Heard y McDonald Heardi ja McDonaldi saared Heard eta McDonald uharteak هرد و جزایر مکدونالد Heard ja McDonaldinsaaret Heard & McDonald Islands Îles Heard et McDonald Îles Heard et McDonald Oileán Heard agus Oileáin McDonald Eilean Heard is MhicDhòmhnaill Illa Heard e Illas McDonald איי הרד ומקדונלד Otoci Heard i McDonald Heard-sziget és McDonald-szigetek Pulau Heard dan Kepulauan McDonald Heard og McDonaldseyjar Isole Heard e McDonald ハード島・マクドナルド諸島 허드 맥도널드 제도 Heard & McDonald Islands Херд жана Макдональд аралдары Herdo ir Makdonaldo Salos Hērda sala un Makdonalda salas Остров Херд и Острови Мекдоналд ഹിയേർഡും മക്ഡൊണാൾഡ് ദ്വീപുകളും Heard- og McDonaldøyene Heard en McDonaldeilanden Heardøya og McDonaldøyane Heard & McDonald Islands Wyspy Heard i McDonalda Ilhas Heard e McDonald Ilhas Heard e McDonald Insula Heard și Insulele McDonald о-ва Херд и Макдональд Heardov ostrov a Macdonaldove ostrovy Heardov otok in McDonaldovi otoki Ishujt Hërd e Mekdonald Острво Херд и Мекдоналдова острва Heardön och McDonaldöarna Kisiwa cha Heard na Visiwa vya McDonald เกาะเฮิร์ดและหมู่เกาะแมกดอนัลด์ Heard Adası ve McDonald Adaları Херд утравы һәм Макдональд утраулары Острови Герд і Макдоналд Quần đảo Heard và McDonald 赫德岛和麦克唐纳群岛 赫德島及麥唐納群島
|
||||
HN هندوراس Гандурас Хондурас Honduras Honduras Hondures Honduras Honduras Honduras Ονδούρα Honduras Honduro Honduras Honduras Honduras هندوراس Honduras Honduras Honduras Honduras Hondúras Hondùras Honduras הונדורס Honduras Honduras Honduras Hondúras Honduras ホンジュラス 온두라스 Honduras Гондурас Hondūras Hondurasa Хондурас ഹോണ്ടുറാസ് Honduras Honduras Honduras Honduras Honduras Honduras Honduras Honduras Гондурас Honduras Honduras Honduras Хондурас Honduras Honduras ฮอนดูรัส Honduras Гондурас Гондурас Honduras 洪都拉斯 宏都拉斯
|
||||
HR كرواتيا Харватыя Хърватия Kroatia Hrvatska Croàcia Chorvatsko Kroatien Kroatien Κροατία Croatia Kroatujo Croacia Horvaatia Kroazia کرواسی Kroatia Croatia Croatie Croatie an Chróit A’ Chròthais Croacia קרואטיה Hrvatska Horvátország Kroasia Króatía Croazia クロアチア 크로아티아 Croatia Хорватия Kroatija Horvātija Хрватска ക്രൊയേഷ്യ Kroatia Kroatië Kroatia Croatia Chorwacja Croácia Croácia Croația Хорватия Chorvátsko Hrvaška Kroaci Хрватска Kroatien Croatia โครเอเชีย Hırvatistan Хорватия Хорватія Croatia 克罗地亚 克羅埃西亞
|
||||
HT هايتي Гаіці Хаити Haiti Haiti Haití Haiti Haiti Haiti Αϊτή Haiti Haitio Haití Haiti Haiti هائیتی Haiti Haiti Haïti Haïti Háítí Haidhti Haití האיטי Haiti Haiti Haiti Haítí Haiti ハイチ 아이티 Haiti Гаити Haitis Haiti Хаити ഹെയ്തി Haiti Haïti Haiti Haiti Haiti Haiti Haiti Haiti Гаити Haiti Haiti Haiti Хаити Haiti Haiti เฮติ Haiti Гаити Гаїті Haiti 海地 海地
|
||||
HU هنغاريا Венгрыя Унгария Hungaria Mađarska Hongria Maďarsko Ungarn Ungarn Ουγγαρία Hungary Hungarujo Hungría Ungari Hungaria مجارستان Unkari Hungary Hongrie Hongrie an Ungáir An Ungair Hungría הונגריה Mađarska Magyarország Hungaria Ungverjaland Ungheria ハンガリー 헝가리 Hungary Венгрия Vengrija Ungārija Унгарија ഹംഗറി Ungarn Hongarije Ungarn Hungary Węgry Hungria Hungria Ungaria Венгрия Maďarsko Madžarska Hungari Мађарска Ungern Hungaria ฮังการี Macaristan Венгрия Угорщина Hungary 匈牙利 匈牙利
|
||||
IC جزر الكناري Канарскія астравы Канарски острови Inizi Kanariez Kanarska ostrva Illes Canàries Kanárské ostrovy Kanariske øer Kanarische Inseln Κανάριοι Νήσοι Canary Islands Canary Islands Canarias Kanaari saared Kanariak جزایر قناری Kanariansaaret Canary Islands Îles Canaries Îles Canaries na hOileáin Chanáracha Na h-Eileanan Canàrach Illas Canarias האיים הקנריים Kanarski otoci Kanári-szigetek Kepulauan Canaria Kanaríeyjar Isole Canarie カナリア諸島 카나리아 제도 Canary Islands Канар аралдары Kanarų salos Kanāriju salas Канарски Острови കാനറി ദ്വീപുകൾ Kanariøyene Canarische Eilanden Kanariøyane Canary Islands Wyspy Kanaryjskie Ilhas Canárias Ilhas Canárias Insulele Canare Канарские о-ва Kanárske ostrovy Kanarski otoki Ishujt Kanarie Канарска Острва Kanarieöarna Visiwa vya Kanari หมู่เกาะคานารี Kanarya Adaları Canary Islands Канарські Острови Quần đảo Canary 加纳利群岛 加那利群島
|
||||
ID إندونيسيا Інданезія Индонезия Indonezia Indonezija Indonèsia Indonésie Indonesien Indonesien Ινδονησία Indonesia Indonezio Indonesia Indoneesia Indonesia اندونزی Indonesia Indonesia Indonésie Indonésie an Indinéis Na h-Innd-innse Indonesia אינדונזיה Indonezija Indonézia Indonesia Indónesía Indonesia インドネシア 인도네시아 Indonesia Индонезия Indonezija Indonēzija Индонезија ഇന്തോനേഷ്യ Indonesia Indonesië Indonesia Indonesia Indonezja Indonésia Indonésia Indonezia Индонезия Indonézia Indonezija Indonezi Индонезија Indonesien Indonesia อินโดนีเซีย Endonezya Индонезия Індонезія Indonesia 印度尼西亚 印尼
|
||||
IE أيرلندا Ірландыя Ирландия Iwerzhon Irska Irlanda Irsko Irland Irland Ιρλανδία Ireland Irlando Irlanda Iirimaa Irlanda ایرلند Irlanti Ireland Irlande Irlande Éire Èirinn Irlanda אירלנד Irska Írország Irlandia Írland Irlanda アイルランド 아일랜드 Ireland Ирландия Airija Īrija Ирска അയർലൻഡ് Irland Ierland Irland Ireland Irlandia Irlanda Irlanda Irlanda Ирландия Írsko Irska Irlandë Ирска Irland Ayalandi ไอร์แลนด์ İrlanda Ирландия Ірландія Ireland 爱尔兰 愛爾蘭
|
||||
IL إسرائيل Ізраіль Израел Israel Izrael Israel Izrael Israel Israel Ισραήλ Israel Israelo Israel Iisrael Israel اسرائیل Israel Israel Israël Israël Iosrael Iosrael Israel ישראל Izrael Izrael Israel Ísrael Israele イスラエル 이스라엘 Israel Израиль Izraelis Izraēla Израел ഇസ്രായേൽ Israel Israël Israel Israel Izrael Israel Israel Israel Израиль Izrael Izrael Izrael Израел Israel Israeli อิสราเอล İsrail Израиль Ізраїль Israel 以色列 以色列
|
||||
IM جزيرة مان Востраў Мэн остров Ман Enez Vanav Ostrvo Man Illa de Man Ostrov Man Isle of Man Isle of Man Νήσος του Μαν Isle of Man Isle of Man Isla de Man Mani saar Man uhartea جزیرهٔ من Mansaari Isle of Man Île de Man Île de Man Oileán Mhanann Eilean Mhanainn Illa de Man האי מאן Otok Man Man-sziget Pulau Man Mön Isola di Man マン島 맨 섬 Isle of Man Мэн аралы Meno Sala Mena Остров Ман ഐൽ ഓഫ് മാൻ Man Isle of Man Man Isle of Man Wyspa Man Ilha de Man Ilha de Man Insula Man о-в Мэн Ostrov Man Otok Man Ishulli i Manit Острво Ман Isle of Man Kisiwa cha Man เกาะแมน Man Adası Мэн утравы Острів Мен Đảo Man 马恩岛 曼島
|
||||
IN الهند Індыя Индия India Indija Índia Indie Indien Indien Ινδία India Hindujo India India India هند Intia India Inde Inde an India Na h-Innseachan A India הודו Indija India India Indland India インド 인도 Eynda Индия Indija Indija Индија ഇന്ത്യ India India India Инди Indie Índia Índia India Индия India Indija Indi Индија Indien India อินเดีย Hindistan Индия Індія Ấn Độ 印度 印度
|
||||
IO الإقليم البريطاني في المحيط الهندي Брытанская тэрыторыя ў Індыйскім акіяне Британска територия в Индийския океан Tiriad breizhveurat Meurvor Indez Britanska Teritorija u Indijskom Okeanu Territori Britànic de l’Oceà Índic Britské indickooceánské území Det Britiske Territorium i Det Indiske Ocean Britisches Territorium im Indischen Ozean Βρετανικά Εδάφη Ινδικού Ωκεανού British Indian Ocean Territory Brita Hindoceana Teritorio Territorio Británico del Océano Índico Briti India ookeani ala Indiako Ozeanoko lurralde britainiarra قلمرو بریتانیا در اقیانوس هند Brittiläinen Intian valtameren alue British Indian Ocean Territory Territoire britannique de l’océan Indien Territoire britannique de l’océan Indien Críoch Aigéan Indiach na Breataine Ranntair Breatannach Cuan nan Innseachan Territorio Británico do Océano Índico הטריטוריה הבריטית באוקיינוס ההודי Britanski Indijskooceanski teritorij Brit Indiai-óceáni Terület Wilayah Inggris di Samudra Hindia Bresku Indlandshafseyjar Territorio britannico dell’Oceano Indiano 英領インド洋地域 영국령 인도양 식민지 British Indian Ocean Territory Инди океанындагы Британ территориясы Indijos Vandenyno Britų Sritis Indijas okeāna Britu teritorija Британска Индоокеанска Територија ബ്രിട്ടീഷ് ഇന്ത്യൻ മഹാസമുദ്ര പ്രദേശം Det britiske territoriet i Indiahavet Brits Indische Oceaanterritorium Det britiske territoriet I Indiahavet British Indian Ocean Territory Brytyjskie Terytorium Oceanu Indyjskiego Território Britânico do Oceano Índico Território Britânico do Oceano Índico Teritoriul Britanic din Oceanul Indian Британская территория в Индийском океане Britské indickooceánske územie Britansko ozemlje v Indijskem oceanu Territori Britanik i Oqeanit Indian Британска територија Индијског океана Brittiska territoriet i Indiska oceanen Eneo la Uingereza katika Bahari Hindi บริติชอินเดียนโอเชียนเทร์ริทอรี Britanya Hint Okyanusu Toprakları Британиянең Һинд Океанындагы Территориясе Британська територія в Індійському Океані Lãnh thổ Ấn Độ Dương thuộc Anh 英属印度洋领地 英屬印度洋領地
|
||||
IQ العراق Ірак Ирак Iraq Irak Iraq Irák Irak Irak Ιράκ Iraq Irako Irak Iraak Irak عراق Irak Iraq Irak Irak an Iaráic Ioràc Iraq עיראק Irak Irak Irak Írak Iraq イラク 이라크 Iraq Ирак Irakas Irāka Ирак ഇറാഖ് Irak Irak Irak Iraq Irak Iraque Iraque Irak Ирак Irak Irak Irak Ирак Irak Iraki อิรัก Irak Гыйрак Ірак Iraq 伊拉克 伊拉克
|
||||
IR إيران Іран Иран Iran Iran Iran Írán Iran Iran Ιράν Iran Irano Irán Iraan Iran ایران Iran Iran Iran Iran an Iaráin Ioràn Irán איראן Iran Irán Iran Íran Iran イラン 이란 Iran Иран Iranas Irāna Иран ഇറാൻ Iran Iran Iran Iran Iran Irã Irã Iran Иран Irán Iran Iran Иран Iran Iran อิหร่าน İran Иран Іран Iran 伊朗 伊朗
|
||||
IS آيسلندا Ісландыя Исландия Island Island Islàndia Island Island Island Ισλανδία Iceland Islando Islandia Island Islandia ایسلند Islanti Iceland Islande Islande an Íoslainn Innis Tìle Islandia איסלנד Island Izland Islandia Ísland Islanda アイスランド 아이슬란드 Iceland Исландия Islandija Islande Исланд ഐസ്ലാന്റ് Island IJsland Island Iceland Islandia Islândia Islândia Islanda Исландия Island Islandija Islandë Исланд Island Aisilandi ไอซ์แลนด์ İzlanda Исландия Ісландія Iceland 冰岛 冰島
|
||||
IT إيطاليا Італія Италия Italia Italija Itàlia Itálie Italien Italien Ιταλία Italy Italujo Italia Itaalia Italia ایتالیا Italia Italy Italie Italie an Iodáil An Eadailt Italia איטליה Italija Olaszország Italia Ítalía Italia イタリア 이탈리아 Itali Италия Italija Itālija Италија ഇറ്റലി Italia Italië Italia Итали Włochy Itália Itália Italia Италия Taliansko Italija Itali Италија Italien Italia อิตาลี İtalya Италия Італія Italy 意大利 義大利
|
||||
JE جيرسي Джэрсі Джърси Jerzenez Jersey Jersey Jersey Jersey Jersey Τζέρζι Jersey Jersey Jersey Jersey Jersey جرزی Jersey Jersey Jersey Jersey Geirsí Deàrsaidh Jersey ג׳רזי Jersey Jersey Jersey Jersey Jersey ジャージー 저지 Jersey Жерси Džersis Džērsija Џерси ജേഴ്സി Jersey Jersey Jersey Jersey Jersey Jersey Jersey Jersey Джерси Jersey Jersey Xhersej Џерзи Jersey Jersey เจอร์ซีย์ Jersey Джерси Джерсі Jersey 泽西岛 澤西島
|
||||
JM جامايكا Ямайка Ямайка Jamaika Jamajka Jamaica Jamajka Jamaica Jamaika Τζαμάικα Jamaica Jamajko Jamaica Jamaica Jamaika جامائیکا Jamaika Jamaica Jamaïque Jamaïque Iamáice Diameuga Xamaica ג׳מייקה Jamajka Jamaica Jamaika Jamaíka Giamaica ジャマイカ 자메이카 Jamaica Ямайка Jamaika Jamaika Јамајка ജമൈക്ക Jamaica Jamaica Jamaica Jamaica Jamajka Jamaica Jamaica Jamaica Ямайка Jamajka Jamajka Xhamajkë Јамајка Jamaica Jamaika จาเมกา Jamaika Ямайка Ямайка Jamaica 牙买加 牙買加
|
||||
JO الأردن Іарданія Йордания Jordania Jordan Jordània Jordánsko Jordan Jordanien Ιορδανία Jordan Jordanio Jordania Jordaania Jordania اردن Jordania Jordan Jordanie Jordanie an Iordáin Iòrdan Xordania ירדן Jordan Jordánia Yordania Jórdanía Giordania ヨルダン 요르단 Jordan Иордания Jordanija Jordānija Јордан ജോർദ്ദാൻ Jordan Jordanië Jordan Jordan Jordania Jordânia Jordânia Iordania Иордания Jordánsko Jordanija Jordani Јордан Jordanien Jordan จอร์แดน Ürdün Иордания Йорданія Jordan 约旦 約旦
|
||||
JP اليابان Японія Япония Japan Japan Japó Japonsko Japan Japan Ιαπωνία Japan Japanujo Japón Jaapan Japonia ژاپن Japani Japan Japon Japon an tSeapáin An t-Seapan O Xapón יפן Japan Japán Jepang Japan Giappone 日本 일본 Japan Япония Japonija Japāna Јапонија ജപ്പാൻ Japan Japan Japan Япон Japonia Japão Japão Japonia Япония Japonsko Japonska Japoni Јапан Japan Japani ญี่ปุ่น Japonya Япония Японія Nhật Bản 日本 日本
|
||||
KE كينيا Кенія Кения Kenya Kenija Kenya Keňa Kenya Kenia Κένυα Kenya Kenjo Kenia Keenia Kenya کنیا Kenia Kenya Kenya Kenya an Chéinia Ceinia Kenya קניה Kenija Kenya Kenya Kenía Kenya ケニア 케냐 Kenya Кения Kenija Kenija Кенија കെനിയ Kenya Kenia Kenya Kenya Kenia Quênia Quênia Kenya Кения Keňa Kenija Kenia Кенија Kenya Kenya เคนยา Kenya Кения Кенія Kenya 肯尼亚 肯亞
|
||||
KG قيرغيزستان Кыргызстан Киргизстан Kyrgyzstan Kirgistan Kirguizistan Kyrgyzstán Kirgisistan Kirgisistan Κιργιστάν Kyrgyzstan Kirgizistano Kirguistán Kõrgõzstan Kirgizistan قرقیزستان Kirgisia Kyrgyzstan Kirghizistan Kirghizistan an Chirgeastáin Cìorgastan Kirguizistán קירגיזסטן Kirgistan Kirgizisztán Kirgistan Kirgistan Kirghizistan キルギス 키르기스스탄 Kyrgyzstan Кыргызстан Kirgizija Kirgizstāna Киргистан കിർഗിസ്ഥാൻ Kirgisistan Kirgizië Kirgisistan Kyrgyzstan Kirgistan Quirguistão Quirguistão Kârgâzstan Киргизия Kirgizsko Kirgizistan Kirgizi Киргистан Kirgizistan Kirigizistani คีร์กีซสถาน Kırgızistan Кыргызстан Киргизстан Kyrgyzstan 吉尔吉斯斯坦 吉爾吉斯
|
||||
KH كمبوديا Камбоджа Камбоджа Kambodja Kambodža Cambodja Kambodža Cambodja Kambodscha Καμπότζη Cambodia Kamboĝo Camboya Kambodža Kanbodia کامبوج Kambodža Cambodia Cambodge Cambodge an Chambóid Cambuidea Camboxa קמבודיה Kambodža Kambodzsa Kamboja Kambódía Cambogia カンボジア 캄보디아 Cambodia Камбоджа Kambodža Kambodža Камбоџа കംബോഡിയ Kambodsja Cambodja Kambodsja Cambodia Kambodża Camboja Camboja Cambodgia Камбоджа Kambodža Kambodža Kamboxhia Камбоџа Kambodja Kambodia กัมพูชา Kamboçya Камбоджа Камбоджа Campuchia 柬埔寨 柬埔寨
|
||||
KI كيريباتي Кірыбаці Кирибати Kiribati Kiribati Kiribati Kiribati Kiribati Kiribati Κιριμπάτι Kiribati Kiribato Kiribati Kiribati Kiribati کیریباتی Kiribati Kiribati Kiribati Kiribati Cireabaití Ciribeas Kiribati קיריבאטי Kiribati Kiribati Kiribati Kíribatí Kiribati キリバス 키리바시 Kiribati Кирибати Kiribatis Kiribati Кирибати കിരിബാട്ടി Kiribati Kiribati Kiribati Kiribati Kiribati Quiribati Quiribati Kiribati Кирибати Kiribati Kiribati Kiribati Кирибати Kiribati Kiribati คิริบาส Kiribati Кирибати Кірібаті Kiribati 基里巴斯 吉里巴斯
|
||||
KM جزر القمر Каморскія астравы Коморски острови Komorez Komori Comores Komory Comorerne Komoren Κομόρες Comoros Komoroj Comoras Komoorid Komoreak کومور Komorit Comoros Comores Comores Oileáin Chomóra Comoros Comores קומורו Komori Comore-szigetek Komoro Kómoreyjar Comore コモロ 코모로 Comoros Коморос Komorai Komoru salas Коморски Острови കോമൊറോസ് Komorene Comoren Komorane Comoros Komory Comores Comores Comore Коморы Komory Komori Komore Коморска Острва Komorerna Komoro คอโมโรส Komorlar Комор утраулары Комори Comoros 科摩罗 葛摩
|
||||
KN سانت كيتس ونيفيس Сент-Кітс і Невіс Сейнт Китс и Невис Saint Kitts ha Nevis Sveti Kits i Nevis Saint Christopher i Nevis Svatý Kryštof a Nevis Saint Kitts og Nevis St. Kitts und Nevis Σεν Κιτς και Νέβις St. Kitts & Nevis Sent-Kristofo kaj Neviso San Cristóbal y Nieves Saint Kitts ja Nevis Saint Kitts eta Nevis سنت کیتس و نویس Saint Kitts ja Nevis St. Kitts & Nevis Saint-Christophe-et-Niévès Saint-Christophe-et-Niévès San Críostóir-Nimheas Naomh Crìstean is Nibheis Saint Kitts e Nevis סנט קיטס ונוויס Sveti Kristofor i Nevis Saint Kitts és Nevis Saint Kitts dan Nevis Sankti Kitts og Nevis Saint Kitts e Nevis セントクリストファー・ネーヴィス 세인트키츠 네비스 St. Kitts & Nevis Сент-Китс жана Невис Sent Kitsas ir Nevis Sentkitsa un Nevisa Свети Китс и Невис സെന്റ് കിറ്റ്സും നെവിസും Saint Kitts og Nevis Saint Kitts en Nevis Saint Kitts og Nevis St. Kitts & Nevis Saint Kitts i Nevis São Cristóvão e Névis São Cristóvão e Névis Saint Kitts și Nevis Сент-Китс и Невис Svätý Krištof a Nevis Saint Kitts in Nevis Shën-Kits dhe Nevis Сент Китс и Невис S:t Kitts och Nevis St. Kitts na Nevis เซนต์คิตส์และเนวิส Saint Kitts ve Nevis Сент-Китс һәм Невис Сент-Кітс і Невіс St. Kitts và Nevis 圣基茨和尼维斯 聖克里斯多福及尼維斯
|
||||
KP كوريا الشمالية Паўночная Карэя Северна Корея Korea an Norzh Sjeverna Koreja Corea del Nord Severní Korea Nordkorea Nordkorea Βόρεια Κορέα North Korea Nord-Koreo Corea del Norte Põhja-Korea Ipar Korea کرهٔ شمالی Pohjois-Korea Hilagang Korea Corée du Nord Corée du Nord an Chóiré Thuaidh Coirèa a Tuath Corea do Norte קוריאה הצפונית Sjeverna Koreja Észak-Korea Korea Utara Norður-Kórea Corea del Nord 北朝鮮 북한 North Korea Түндүк Корея Šiaurės Korėja Ziemeļkoreja Северна Кореја ഉത്തരകൊറിയ Nord-Korea Noord-Korea Nord-Korea North Korea Korea Północna Coreia do Norte Coreia do Norte Coreea de Nord КНДР Severná Kórea Severna Koreja Kore e Veriut Северна Кореја Nordkorea Korea Kaskazini เกาหลีเหนือ Kuzey Kore Төньяк Корея Північна Корея Triều Tiên 朝鲜 北韓
|
||||
KR كوريا الجنوبية Паўднёвая Карэя Южна Корея Korea ar Su Južna Koreja Corea del Sud Jižní Korea Sydkorea Südkorea Νότια Κορέα South Korea Sud-Koreo Corea del Sur Lõuna-Korea Hego Korea کرهٔ جنوبی Etelä-Korea Timog Korea Corée du Sud Corée du Sud an Chóiré Theas Coirèa Corea do Sur קוריאה הדרומית Južna Koreja Dél-Korea Korea Selatan Suður-Kórea Corea del Sud 韓国 대한민국 South Korea Түштүк Корея Pietų Korėja Dienvidkoreja Јужна Кореја ദക്ഷിണകൊറിയ Sør-Korea Zuid-Korea Sør-Korea South Korea Korea Południowa Coreia do Sul Coreia do Sul Coreea de Sud Республика Корея Južná Kórea Južna Koreja Kore e Jugut Јужна Кореја Sydkorea Korea Kusini เกาหลีใต้ Güney Kore South Korea Південна Корея Hàn Quốc 韩国 南韓
|
||||
KW الكويت Кувейт Кувейт Koweit Kuvajt Kuwait Kuvajt Kuwait Kuwait Κουβέιτ Kuwait Kuvajto Kuwait Kuveit Kuwait کویت Kuwait Kuwait Koweït Koweït Cuáit Cuibhèit Kuwait כווית Kuvajt Kuvait Kuwait Kúveit Kuwait クウェート 쿠웨이트 Kuwait Кувейт Kuveitas Kuveita Кувајт കുവൈറ്റ് Kuwait Koeweit Kuwait Kuwait Kuwejt Kuwait Kuwait Kuweit Кувейт Kuvajt Kuvajt Kuvajt Кувајт Kuwait Kuwait คูเวต Kuveyt Күвәйт Кувейт Kuwait 科威特 科威特
|
||||
KY جزر كايمان Кайманавы астравы Кайманови острови Inizi Cayman Kajmanska ostrva Illes Caiman Kajmanské ostrovy Caymanøerne Kaimaninseln Νήσοι Κέιμαν Cayman Islands Kejmanoj Islas Caimán Kaimanisaared Kaiman uharteak جزایر کِیمن Caymansaaret Cayman Islands Îles Caïmans Îles Caïmans Oileáin Cayman Na h-Eileanan Caimean Illas Caimán איי קיימן Kajmanski otoci Kajmán-szigetek Kepulauan Cayman Caymaneyjar Isole Cayman ケイマン諸島 케이맨 제도 Cayman Islands Кайман аралдары Kaimanų Salos Kaimanu salas Кајмански Острови കേയ്മാൻ ദ്വീപുകൾ Caymanøyene Kaaimaneilanden Caymanøyane Cayman Islands Kajmany Ilhas Cayman Ilhas Cayman Insulele Cayman Острова Кайман Kajmanie ostrovy Kajmanski otoki Ishujt Kajman Кајманска Острва Caymanöarna Visiwa vya Cayman หมู่เกาะเคย์แมน Cayman Adaları Кайман утраулары Кайманові Острови Quần đảo Cayman 开曼群岛 開曼群島
|
||||
KZ كازاخستان Казахстан Казахстан Kazakstan Kazahstan Kazakhstan Kazachstán Kasakhstan Kasachstan Καζακστάν Kazakhstan Kazaĥstano Kazajistán Kasahstan Kazakhstan قزاقستان Kazakstan Kazakhstan Kazakhstan Kazakhstan an Chasacstáin Casachstàn Kazakistán קזחסטן Kazahstan Kazahsztán Kazakstan Kasakstan Kazakistan カザフスタン 카자흐스탄 Kazakhstan Казакстан Kazachstanas Kazahstāna Казахстан കസാഖിസ്ഥാൻ Kasakhstan Kazachstan Kasakhstan Kazakhstan Kazachstan Cazaquistão Cazaquistão Kazahstan Казахстан Kazachstan Kazahstan Kazakistan Казахстан Kazakstan Kazakistani คาซัคสถาน Kazakistan Казахстан Казахстан Kazakhstan 哈萨克斯坦 哈薩克
|
||||
LA لاوس Лаос Лаос Laos Laos Laos Laos Laos Laos Λάος Laos Laoso Laos Laos Laos لائوس Laos Laos Laos Laos Laos Làthos Laos לאוס Laos Laosz Laos Laos Laos ラオス 라오스 Laos Лаос Laosas Laosa Лаос ലാവോസ് Laos Laos Laos Laos Laos Laos Laos Laos Лаос Laos Laos Laos Лаос Laos Laos ลาว Laos Лаос Лаос Lào 老挝 寮國
|
||||
LB لبنان Ліван Ливан Liban Liban Líban Libanon Libanon Libanon Λίβανος Lebanon Libano Líbano Liibanon Libano لبنان Libanon Lebanon Liban Liban an Liobáin Leabanon O Líbano לבנון Libanon Libanon Lebanon Líbanon Libano レバノン 레바논 Lebanon Ливан Libanas Libāna Либан ലെബനൻ Libanon Libanon Libanon Lebanon Liban Líbano Líbano Liban Ливан Libanon Libanon Liban Либан Libanon Lebanon เลบานอน Lübnan Ливан Ліван Li-băng 黎巴嫩 黎巴嫩
|
||||
LC سانت لوسيا Сент-Люсія Сейнт Лусия Saint Lucia Sveta Lucija Saint Lucia Svatá Lucie Saint Lucia St. Lucia Αγία Λουκία St. Lucia Sent-Lucio Santa Lucía Saint Lucia Santa Luzia سنت لوسیا Saint Lucia Saint Lucia Sainte-Lucie Sainte-Lucie Saint Lucia Naomh Lùisea Santa Lucía סנט לוסיה Sveta Lucija Saint Lucia Saint Lucia Sankti Lúsía Saint Lucia セントルシア 세인트루시아 St. Lucia Сент-Люсия Sent Lusija Sentlūsija Сент Лусија സെന്റ് ലൂസിയ St. Lucia Saint Lucia St. Lucia St. Lucia Saint Lucia Santa Lúcia Santa Lúcia Sfânta Lucia Сент-Люсия Svätá Lucia Saint Lucia Shën-Luçia Света Луција S:t Lucia St. Lucia เซนต์ลูเซีย Saint Lucia Сент-Люсия Сент-Люсія St. Lucia 圣卢西亚 聖露西亞
|
||||
LI ليختنشتاين Ліхтэнштэйн Лихтенщайн Liechtenstein Lihtenštajn Liechtenstein Lichtenštejnsko Liechtenstein Liechtenstein Λιχτενστάιν Liechtenstein Liĥtenŝtejno Liechtenstein Liechtenstein Liechtenstein لیختناشتاین Liechtenstein Liechtenstein Liechtenstein Liechtenstein Lichtinstéin Lichtenstein Liechtenstein ליכטנשטיין Lihtenštajn Liechtenstein Liechtenstein Liechtenstein Liechtenstein リヒテンシュタイン 리히텐슈타인 Liechtenstein Лихтенштейн Lichtenšteinas Lihtenšteina Лихтенштајн ലിച്ചൺസ്റ്റൈൻ Liechtenstein Liechtenstein Liechtenstein Liechtenstein Liechtenstein Liechtenstein Liechtenstein Liechtenstein Лихтенштейн Lichtenštajnsko Lihtenštajn Lihtenshtajn Лихтенштајн Liechtenstein Liechtenstein ลิกเตนสไตน์ Liechtenstein Лихтенштейн Ліхтенштейн Liechtenstein 列支敦士登 列支敦斯登
|
||||
LK سريلانكا Шры-Ланка Шри Ланка Sri Lanka Šri Lanka Sri Lanka Srí Lanka Sri Lanka Sri Lanka Σρι Λάνκα Sri Lanka Sri-Lanko Sri Lanka Sri Lanka Sri Lanka سریلانکا Sri Lanka Sri Lanka Sri Lanka Sri Lanka Srí Lanca Sri Lanca Sri Lanka סרי לנקה Šri Lanka Srí Lanka Sri Lanka Srí Lanka Sri Lanka スリランカ 스리랑카 Sri Lanka Шри-Ланка Šri Lanka Šrilanka Шри Ланка ശ്രീലങ്ക Sri Lanka Sri Lanka Sri Lanka Sri Lanka Sri Lanka Sri Lanka Sri Lanka Sri Lanka Шри-Ланка Srí Lanka Šrilanka Sri-Lankë Шри Ланка Sri Lanka Sri Lanka ศรีลังกา Sri Lanka Шри-Ланка Шрі-Ланка Sri Lanka 斯里兰卡 斯里蘭卡
|
||||
LR ليبيريا Ліберыя Либерия Liberia Liberija Libèria Libérie Liberia Liberia Λιβερία Liberia Liberio Liberia Libeeria Liberia لیبریا Liberia Liberia Libéria Libéria an Libéir Libèir Liberia ליבריה Liberija Libéria Liberia Líbería Liberia リベリア 라이베리아 Liberia Либерия Liberija Libērija Либерија ലൈബീരിയ Liberia Liberia Liberia Liberia Liberia Libéria Libéria Liberia Либерия Libéria Liberija Liberi Либерија Liberia Liberia ไลบีเรีย Liberya Либерия Ліберія Liberia 利比里亚 賴比瑞亞
|
||||
LS ليسوتو Лесота Лесото Lesotho Lesoto Lesotho Lesotho Lesotho Lesotho Λεσότο Lesotho Lesoto Lesoto Lesotho Lesotho لسوتو Lesotho Lesotho Lesotho Lesotho Leosóta Leasoto Lesotho לסוטו Lesoto Lesotho Lesotho Lesótó Lesotho レソト 레소토 Lesotho Лесото Lesotas Lesoto Лесото ലെസോതോ Lesotho Lesotho Lesotho Lesotho Lesotho Lesoto Lesoto Lesotho Лесото Lesotho Lesoto Lesoto Лесото Lesotho Lesoto เลโซโท Lesotho Лесото Лесото Lesotho 莱索托 賴索托
|
||||
LT ليتوانيا Літва Литва Lituania Litvanija Lituània Litva Litauen Litauen Λιθουανία Lithuania Litovujo Lituania Leedu Lituania لیتوانی Liettua Lithuania Lituanie Lituanie an Liotuáin An Liotuain Lituania ליטא Litva Litvánia Lituania Litháen Lituania リトアニア 리투아니아 Lithuania Литва Lietuva Lietuva Литванија ലിത്വാനിയ Litauen Litouwen Litauen Lithuania Litwa Lituânia Lituânia Lituania Литва Litva Litva Lituani Литванија Litauen Lithuania ลิทัวเนีย Litvanya Литва Литва Litva 立陶宛 立陶宛
|
||||
LU لوكسمبورغ Люксембург Люксембург Luksembourg Luksemburg Luxemburg Lucembursko Luxembourg Luxemburg Λουξεμβούργο Luxembourg Luksemburgo Luxemburgo Luksemburg Luxenburgo لوکزامبورگ Luxemburg Luxembourg Luxembourg Luxembourg Lucsamburg Lugsamburg Luxemburgo לוקסמבורג Luksemburg Luxemburg Luksemburg Lúxemborg Lussemburgo ルクセンブルク 룩셈부르크 Luxembourg Люксембург Liuksemburgas Luksemburga Луксембург ലക്സംബർഗ് Luxemburg Luxemburg Luxembourg Luxembourg Luksemburg Luxemburgo Luxemburgo Luxemburg Люксембург Luxembursko Luksemburg Luksemburg Луксембург Luxemburg Luxembourg ลักเซมเบิร์ก Lüksemburg Люксембург Люксембурґ Luxembourg 卢森堡 盧森堡
|
||||
LV لاتفيا Латвія Латвия Latvia Latvija Letònia Lotyšsko Letland Lettland Λετονία Latvia Latvujo Letonia Läti Letonia لتونی Latvia Latvia Lettonie Lettonie an Laitvia An Laitbhe Letonia לטביה Latvija Lettország Latvia Lettland Lettonia ラトビア 라트비아 Latvia Латвия Latvija Latvija Латвија ലാറ്റ്വിയ Latvia Letland Latvia Latvia Łotwa Letônia Letônia Letonia Латвия Lotyšsko Latvija Letoni Летонија Lettland Latvia ลัตเวีย Letonya Латвия Латвія Latvia 拉脱维亚 拉脫維亞
|
||||
LY ليبيا Лівія Либия Libia Libija Líbia Libye Libyen Libyen Λιβύη Libya Libio Libia Liibüa Libia لیبی Libya Libya Libye Libye an Libia Libia Libia לוב Libija Líbia Libia Líbía Libia リビア 리비아 Libya Ливия Libija Lībija Либија ലിബിയ Libya Libië Libya Libya Libia Líbia Líbia Libia Ливия Líbya Libija Libi Либија Libyen Libya ลิเบีย Libya Ливия Лівія Libya 利比亚 利比亞
|
||||
MA المغرب Марока Мароко Maroko Maroko Marroc Maroko Marokko Marokko Μαρόκο Morocco Maroko Marruecos Maroko Maroko مراکش Marokko Morocco Maroc Maroc Maracó Moroco Marrocos מרוקו Maroko Marokkó Maroko Marokkó Marocco モロッコ 모로코 Morocco Марокко Marokas Maroka Мароко മൊറോക്കൊ Marokko Marokko Marokko Morocco Maroko Marrocos Marrocos Maroc Марокко Maroko Maroko Marok Мароко Marocko Morocco โมร็อกโก Fas Марокко Марокко Ma-rốc 摩洛哥 摩洛哥
|
||||
MC موناكو Манака Монако Monaco Monako Mònaco Monako Monaco Monaco Μονακό Monaco Monako Mónaco Monaco Monako موناکو Monaco Monaco Monaco Monaco Monacó Monaco Mónaco מונקו Monako Monaco Monako Mónakó Monaco モナコ 모나코 Monaco Монако Monakas Monako Монако മൊണാക്കോ Monaco Monaco Monaco Monaco Monako Mônaco Mônaco Monaco Монако Monako Monako Monako Монако Monaco Monaco โมนาโก Monako Монако Монако Monaco 摩纳哥 摩納哥
|
||||
MD مولدوفا Малдова Молдова Moldova Moldavija Moldàvia Moldavsko Moldova Republik Moldau Μολδαβία Moldova Moldavujo Moldavia Moldova Moldavia مولداوی Moldova Moldova Moldavie Moldavie an Mholdóiv A’ Mholdobha Moldavia מולדובה Moldavija Moldova Moldova Moldóva Moldavia モルドバ 몰도바 Moldova Молдова Moldova Moldova Молдавија മൾഡോവ Moldova Moldavië Moldova Moldova Mołdawia Moldova Moldova Republica Moldova Молдова Moldavsko Moldavija Moldavi Молдавија Moldavien Moldova มอลโดวา Moldova Молдова Молдова Moldova 摩尔多瓦 摩爾多瓦
|
||||
ME الجبل الأسود Чарнагорыя Черна гора Montenegro Crna Gora Montenegro Černá Hora Montenegro Montenegro Μαυροβούνιο Montenegro Montenegro Montenegro Montenegro Montenegro مونتهنگرو Montenegro Montenegro Monténégro Monténégro Montainéagró Am Monadh Neagrach Montenegro מונטנגרו Crna Gora Montenegró Montenegro Svartfjallaland Montenegro モンテネグロ 몬테네그로 Montenegro Черногория Juodkalnija Melnkalne Црна Гора മോണ്ടെനെഗ്രോ Montenegro Montenegro Montenegro Montenegro Czarnogóra Montenegro Montenegro Muntenegru Черногория Čierna Hora Črna gora Mal i Zi Црна Гора Montenegro Montenegro มอนเตเนโกร Karadağ Черногория Чорногорія Montenegro 黑山 蒙特內哥羅
|
||||
MF سان مارتن Сен-Мартэн Сен Мартен Saint Martin Sveti Martin Saint Martin Svatý Martin (Francie) Saint Martin St. Martin Άγιος Μαρτίνος (Γαλλικό τμήμα) St. Martin St. Martin San Martín Saint-Martin San Martin سنت مارتین Saint-Martin Saint Martin Saint-Martin Saint-Martin Saint-Martin Naomh Màrtainn Saint Martin סן מרטן Saint Martin Saint Martin Saint Martin Saint-Martin Saint Martin サン・マルタン 생마르탱 St. Martin Сент-Мартин Sen Martenas Senmartēna Сент Мартин സെന്റ് മാർട്ടിൻ Saint-Martin Saint-Martin Saint Martin St. Martin Saint-Martin São Martinho São Martinho Sfântul Martin Сен-Мартен Svätý Martin (fr.) Saint Martin Sen-Marten Свети Мартин (Француска) Saint-Martin St. Martin เซนต์มาร์ติน Saint Martin Сент-Мартин Сен-Мартен St. Martin 法属圣马丁 法屬聖馬丁
|
||||
MG مدغشقر Мадагаскар Мадагаскар Madagaskar Madagaskar Madagascar Madagaskar Madagaskar Madagaskar Μαδαγασκάρη Madagascar Madagaskaro Madagascar Madagaskar Madagaskar ماداگاسکار Madagaskar Madagascar Madagascar Madagascar Madagascar Madagasgar Madagascar מדגסקר Madagaskar Madagaszkár Madagaskar Madagaskar Madagascar マダガスカル 마다가스카르 Madagascar Мадагаскар Madagaskaras Madagaskara Мадагаскар മഡഗാസ്കർ Madagaskar Madagaskar Madagaskar Madagascar Madagaskar Madagascar Madagascar Madagascar Мадагаскар Madagaskar Madagaskar Madagaskar Мадагаскар Madagaskar Madagaska มาดากัสการ์ Madagaskar Мадагаскар Мадагаскар Madagascar 马达加斯加 馬達加斯加
|
||||
MH جزر مارشال Маршалавы астравы Маршалови острови Inizi Marshall Maršalova ostrva Illes Marshall Marshallovy ostrovy Marshalløerne Marshallinseln Νήσοι Μάρσαλ Marshall Islands Marŝaloj Islas Marshall Marshalli Saared Marshall Uharteak جزایر مارشال Marshallinsaaret Marshall Islands Îles Marshall Îles Marshall Oileáin Marshall Eileanan Mharshall Illas Marshall איי מרשל Maršalovi Otoci Marshall-szigetek Kepulauan Marshall Marshalleyjar Isole Marshall マーシャル諸島 마셜 제도 Marshall Islands Маршалл аралдары Maršalo Salos Māršala salas Маршалски Острови മാർഷൽ ദ്വീപുകൾ Marshalløyene Marshalleilanden Marshalløyane Marshall Islands Wyspy Marshalla Ilhas Marshall Ilhas Marshall Insulele Marshall Маршалловы Острова Marshallove ostrovy Marshallovi otoki Ishujt Marshall Маршалска Острва Marshallöarna Visiwa vya Marshall หมู่เกาะมาร์แชลล์ Marshall Adaları Маршалл утраулары Маршаллові Острови Quần đảo Marshall 马绍尔群岛 馬紹爾群島
|
||||
MK مقدونيا الشمالية Паўночная Македонія Северна Македония Makedonia an Norzh Sjeverna Makedonija Macedònia del Nord Severní Makedonie Nordmakedonien Nordmazedonien Βόρεια Μακεδονία North Macedonia North Macedonia Macedonia del Norte Põhja-Makedoonia Ipar Mazedonia مقدونیهٔ شمالی Pohjois-Makedonia North Macedonia Macédoine du Nord Macédoine du Nord an Mhacadóin Thuaidh A’ Mhasadon a Tuath Macedonia do Norte מקדוניה הצפונית Sjeverna Makedonija Észak-Macedónia Makedonia Utara Norður-Makedónía Macedonia del Nord 北マケドニア 북마케도니아 North Macedonia Түндүк Македония Šiaurės Makedonija Ziemeļmaķedonija Северна Македонија നോർത്ത് മാസിഡോണിയ Nord-Makedonia Noord-Macedonië Nord-Makedonia North Macedonia Macedonia Północna Macedônia do Norte Macedônia do Norte Macedonia de Nord Северная Македония Severné Macedónsko Severna Makedonija Maqedonia e Veriut Северна Македонија Nordmakedonien Masedonia ya Kaskazini มาซิโดเนียเหนือ Kuzey Makedonya Төньяк Македония Північна Македонія Bắc Macedonia 北马其顿 北馬其頓
|
||||
ML مالي Малі Мали Mali Mali Mali Mali Mali Mali Μάλι Mali Malio Mali Mali Mali مالی Mali Mali Mali Mali Mailí Màili Malí מאלי Mali Mali Mali Malí Mali マリ 말리 Mali Мали Malis Mali Мали മാലി Mali Mali Mali Mali Mali Mali Mali Mali Мали Mali Mali Mali Мали Mali Mali มาลี Mali Мали Малі Mali 马里 馬利
|
||||
MM ميانمار (بورما) М’янма (Бірма) Мианмар (Бирма) Myanmar (Birmania) Mjanmar Myanmar (Birmània) Myanmar (Barma) Myanmar (Burma) Myanmar Μιανμάρ (Βιρμανία) Myanmar (Burma) Mjanmao Myanmar (Birmania) Myanmar (Birma) Myanmar (Birmania) میانمار (برمه) Myanmar (Burma) Myanmar (Burma) Myanmar (Birmanie) Myanmar (Birmanie) Maenmar (Burma) Miànmar Myanmar (Birmania) מיאנמר (בורמה) Mjanmar (Burma) Mianmar Myanmar (Burma) Mjanmar (Búrma) Myanmar (Birmania) ミャンマー (ビルマ) 미얀마 Myanmar (Burma) Мьянма (Бирма) Mianmaras (Birma) Mjanma (Birma) Мјанмар (Бурма) മ്യാൻമാർ (ബർമ്മ) Myanmar (Burma) Myanmar (Birma) Myanmar (Burma) Myanmar (Burma) Mjanma (Birma) Mianmar (Birmânia) Mianmar (Birmânia) Myanmar (Birmania) Мьянма (Бирма) Mjanmarsko Mjanmar (Burma) Mianmar (Burmë) Мијанмар (Бурма) Myanmar (Burma) Myanmar (Burma) เมียนมาร์ (พม่า) Myanmar (Burma) Myanmar (Burma) Мʼянма (Бірма) Myanmar (Miến Điện) 缅甸 緬甸
|
||||
MN منغوليا Манголія Монголия Mongolia Mongolija Mongòlia Mongolsko Mongoliet Mongolei Μογγολία Mongolia Mongolujo Mongolia Mongoolia Mongolia مغولستان Mongolia Mongolia Mongolie Mongolie an Mhongóil Dùthaich nam Mongol Mongolia מונגוליה Mongolija Mongólia Mongolia Mongólía Mongolia モンゴル 몽골 Mongolia Монголия Mongolija Mongolija Монголија മംഗോളിയ Mongolia Mongolië Mongolia Mongolia Mongolia Mongólia Mongólia Mongolia Монголия Mongolsko Mongolija Mongoli Монголија Mongoliet Mongolia มองโกเลีย Moğolistan Монголия Монголія Mông Cổ 蒙古 蒙古
|
||||
MO مكاو Макаа Макао Macau Makao Macau Macao Macao Macau Μακάο Macao Macao Macao Macau Macau ماکائو Macao Macau Macao Macao Macao Macàthu Macau מקאו Makao Makaó Makau Makaó Macao マカオ 마카오 Macao Макау Makao Makao Макао മക്കാവു Macao Macau Macao Macao Makau Macau Macau Macao Макао Macao Macao Makao Макао Macao Makau มาเก๊า Makao Макао Макао Macao 澳门 澳門
|
||||
MP جزر ماريانا الشمالية Паўночныя Марыянскія астравы Северни Мариански острови Inizi Mariana an Norzh Sjeverna Marijanska ostrva Illes Mariannes del Nord Severní Mariany Nordmarianerne Nördliche Marianen Νήσοι Βόρειες Μαριάνες Northern Mariana Islands Nord-Marianoj Islas Marianas del Norte Põhja-Mariaanid Ipar Mariana uharteak جزایر ماریانای شمالی Pohjois-Mariaanit Northern Mariana Islands Îles Mariannes du Nord Îles Mariannes du Nord na hOileáin Mháirianacha Thuaidh Na h-Eileanan Mairianach a Tuath Illas Marianas do Norte איי מריאנה הצפוניים Sjevernomarijanski otoci Északi Mariana-szigetek Kepulauan Mariana Utara Norður-Maríanaeyjar Isole Marianne settentrionali 北マリアナ諸島 북마리아나제도 Northern Mariana Islands Түндүк Мариана аралдары Marianos Šiaurinės Salos Ziemeļu Marianas salas Северни Маријански Острови ഉത്തര മറിയാനാ ദ്വീപുകൾ Nord-Marianene Noordelijke Marianen Nord-Marianane Northern Mariana Islands Mariany Północne Ilhas Marianas do Norte Ilhas Marianas do Norte Insulele Mariane de Nord Северные Марианские о-ва Severné Mariány Severni Marianski otoki Ishujt e Marianës Veriore Северна Маријанска Острва Nordmarianerna Visiwa vya Mariana vya Kaskazini หมู่เกาะนอร์เทิร์นมาเรียนา Kuzey Mariana Adaları Төньяк Мариана утраулары Північні Маріанські Острови Quần đảo Bắc Mariana 北马里亚纳群岛 北馬利安納群島
|
||||
MQ جزر المارتينيك Марцініка Мартиника Martinik Martinik Martinica Martinik Martinique Martinique Μαρτινίκα Martinique Martiniko Martinica Martinique Martinika مارتینیک Martinique Martinique Martinique Martinique Martinique Mairtinic Martinica מרטיניק Martinique Martinique Martinik Martiník Martinica マルティニーク 마르티니크 Martinique Мартиника Martinika Martinika Мартиник മാർട്ടിനിക്ക് Martinique Martinique Martinique Martinique Martynika Martinica Martinica Martinica Мартиника Martinik Martinik Martinikë Мартиник Martinique Martinique มาร์ตินีก Martinik Мартиника Мартініка Martinique 马提尼克 馬丁尼克
|
||||
MR موريتانيا Маўрытанія Мавритания Maouritania Mauritanija Mauritània Mauritánie Mauretanien Mauretanien Μαυριτανία Mauritania Maŭritanujo Mauritania Mauritaania Mauritania موریتانی Mauritania Mauritania Mauritanie Mauritanie an Mháratáin Moratàinea Mauritania מאוריטניה Mauretanija Mauritánia Mauritania Máritanía Mauritania モーリタニア 모리타니 Mauritania Мавритания Mauritanija Mauritānija Мавританија മൗറിറ്റാനിയ Mauritania Mauritanië Mauritania Mauritania Mauretania Mauritânia Mauritânia Mauritania Мавритания Mauritánia Mavretanija Mauritani Мауританија Mauretanien Moritania มอริเตเนีย Moritanya Мавритания Мавританія Mauritania 毛里塔尼亚 茅利塔尼亞
|
||||
MS مونتسرات Мантсерат Монтсерат Montserrat Monserat Montserrat Montserrat Montserrat Montserrat Μονσεράτ Montserrat Montserrat Montserrat Montserrat Montserrat مونتسرات Montserrat Montserrat Montserrat Montserrat Montsarat Montsarat Montserrat מונסראט Montserrat Montserrat Montserrat Montserrat Montserrat モントセラト 몬트세라트 Montserrat Монтсеррат Montseratas Montserrata Монсерат മൊണ്ടെസരത്ത് Montserrat Montserrat Montserrat Montserrat Montserrat Montserrat Montserrat Montserrat Монтсеррат Montserrat Montserrat Montserat Монсерат Montserrat Montserrat มอนต์เซอร์รัต Montserrat Монтсеррат Монтсеррат Montserrat 蒙特塞拉特 蒙哲臘
|
||||
MT مالطا Мальта Малта Malta Malta Malta Malta Malta Malta Μάλτα Malta Malto Malta Malta Malta مالت Malta Malta Malte Malte Málta Malta Malta מלטה Malta Málta Malta Malta Malta マルタ 몰타 Malta Мальта Malta Malta Малта മാൾട്ട Malta Malta Malta Malta Malta Malta Malta Malta Мальта Malta Malta Maltë Малта Malta Malta มอลตา Malta Мальта Мальта Malta 马耳他 馬爾他
|
||||
MU موريشيوس Маўрыкій Мавриций Moris Mauricijus Maurici Mauricius Mauritius Mauritius Μαυρίκιος Mauritius Maŭricio Mauricio Mauritius Maurizio موریس Mauritius Mauritius Maurice Maurice Oileán Mhuirís Na h-Eileanan Mhoiriseas Mauricio מאוריציוס Mauricijus Mauritius Mauritius Máritíus Mauritius モーリシャス 모리셔스 Mauritius Маврикий Mauricijus Maurīcija Маврициус മൗറീഷ്യസ് Mauritius Mauritius Mauritius Mauritius Mauritius Maurício Maurício Mauritius Маврикий Maurícius Mauritius Mauritius Маурицијус Mauritius Morisi มอริเชียส Mauritius Маврикий Маврікій Mauritius 毛里求斯 模里西斯
|
||||
MV جزر المالديف Мальдывы Малдиви Maldivez Maldivi Maldives Maledivy Maldiverne Malediven Μαλδίβες Maldives Maldivoj Maldivas Maldiivid Maldivak مالدیو Malediivit Maldives Maldives Maldives Oileáin Mhaildíve Na h-Eileanan Mhaladaibh Maldivas האיים המלדיביים Maldivi Maldív-szigetek Maladewa Maldíveyjar Maldive モルディブ 몰디브 Maldives Мальдив Maldyvai Maldīvija Малдиви മാലിദ്വീപ് Maldivene Maldiven Maldivane Maldives Malediwy Maldivas Maldivas Maldive Мальдивы Maldivy Maldivi Maldive Малдиви Maldiverna Maldives มัลดีฟส์ Maldivler Мальдив утраулары Мальдіви Maldives 马尔代夫 馬爾地夫
|
||||
MW ملاوي Малаві Малави Malawi Malavi Malawi Malawi Malawi Malawi Μαλάουι Malawi Malavio Malaui Malawi Malawi مالاوی Malawi Malawi Malawi Malawi an Mhaláiv Malabhaidh Malawi מלאווי Malavi Malawi Malawi Malaví Malawi マラウイ 말라위 Malawi Малави Malavis Malāvija Малави മലാവി Malawi Malawi Malawi Malawi Malawi Malaui Malaui Malawi Малави Malawi Malavi Malavi Малави Malawi Malawi มาลาวี Malavi Малави Малаві Malawi 马拉维 馬拉威
|
||||
MX المكسيك Мексіка Мексико Mecʼhiko Meksiko Mèxic Mexiko Mexico Mexiko Μεξικό Mexico Meksiko México Mehhiko Mexiko مکزیک Meksiko Mexico Mexique Mexique Meicsiceo Meagsago México מקסיקו Meksiko Mexikó Meksiko Mexíkó Messico メキシコ 멕시코 Mexico Мексика Meksika Meksika Мексико മെക്സിക്കോ Mexico Mexico Mexico Mexico Meksyk México México Mexic Мексика Mexiko Mehika Meksikë Мексико Mexiko Meksiko เม็กซิโก Meksika Мексика Мексика Mexico 墨西哥 墨西哥
|
||||
MY ماليزيا Малайзія Малайзия Malaysia Malezija Malàisia Malajsie Malaysia Malaysia Μαλαισία Malaysia Malajzio Malasia Malaisia Malaysia مالزی Malesia Malaysia Malaisie Malaisie an Mhalaeisia Malaidhsea Malaisia מלזיה Malezija Malajzia Malaysia Malasía Malaysia マレーシア 말레이시아 Malaysia Малайзия Malaizija Malaizija Малезија മലേഷ്യ Malaysia Maleisië Malaysia Malaysia Malezja Malásia Malásia Malaysia Малайзия Malajzia Malezija Malajzi Малезија Malaysia Malesia มาเลเซีย Malezya Малайзия Малайзія Malaysia 马来西亚 馬來西亞
|
||||
MZ موزمبيق Мазамбік Мозамбик Mozambik Mozambik Moçambic Mosambik Mozambique Mosambik Μοζαμβίκη Mozambique Mozambiko Mozambique Mosambiik Mozambike موزامبیک Mosambik Mozambique Mozambique Mozambique Mósaimbíc Mòsaimbic Mozambique מוזמביק Mozambik Mozambik Mozambik Mósambík Mozambico モザンビーク 모잠비크 Mozambique Мозамбик Mozambikas Mozambika Мозамбик മൊസാംബിക്ക് Mosambik Mozambique Mosambik Mozambique Mozambik Moçambique Moçambique Mozambic Мозамбик Mozambik Mozambik Mozambik Мозамбик Moçambique Msumbiji โมซัมบิก Mozambik Мозамбик Мозамбік Mozambique 莫桑比克 莫三比克
|
||||
NA ناميبيا Намібія Намибия Namibia Namibija Namíbia Namibie Namibia Namibia Ναμίμπια Namibia Namibio Namibia Namiibia Namibia نامیبیا Namibia Namibia Namibie Namibie an Namaib An Namaib Namibia נמיביה Namibija Namíbia Namibia Namibía Namibia ナミビア 나미비아 Namibia Намибия Namibija Namībija Намибија നമീബിയ Namibia Namibië Namibia Namibia Namibia Namíbia Namíbia Namibia Намибия Namíbia Namibija Namibi Намибија Namibia Namibia นามิเบีย Namibya Намибия Намібія Namibia 纳米比亚 納米比亞
|
||||
NC كاليدونيا الجديدة Новая Каледонія Нова Каледония Kaledonia Nevez Nova Kaledonija Nova Caledònia Nová Kaledonie Ny Kaledonien Neukaledonien Νέα Καληδονία New Caledonia Nov-Kaledonio Nueva Caledonia Uus-Kaledoonia Kaledonia Berria کالدونیای جدید Uusi-Kaledonia New Caledonia Nouvelle-Calédonie Nouvelle-Calédonie an Nua-Chaladóin Cailleann Nuadh Nova Caledonia קלדוניה החדשה Nova Kaledonija Új-Kaledónia Kaledonia Baru Nýja-Kaledónía Nuova Caledonia ニューカレドニア 뉴칼레도니아 New Caledonia Жаңы Каледония Naujoji Kaledonija Jaunkaledonija Нова Каледонија ന്യൂ കാലിഡോണിയ Ny-Caledonia Nieuw-Caledonië Ny-Caledonia New Caledonia Nowa Kaledonia Nova Caledônia Nova Caledônia Noua Caledonie Новая Каледония Nová Kaledónia Nova Kaledonija Kaledoni e Re Нова Каледонија Nya Kaledonien New Caledonia นิวแคลิโดเนีย Yeni Kaledonya Яңа Каледония Нова Каледонія New Caledonia 新喀里多尼亚 新喀里多尼亞
|
||||
NE النيجر Нігер Нигер Niger Niger Níger Niger Niger Niger Νίγηρας Niger Niĝero Níger Niger Niger نیجر Niger Niger Niger Niger an Nígir Nìgeir Níxer ניז׳ר Niger Niger Niger Níger Niger ニジェール 니제르 Niger Нигер Nigeris Nigēra Нигер നൈജർ Niger Niger Niger Niger Niger Níger Níger Niger Нигер Niger Niger Niger Нигер Niger Niger ไนเจอร์ Nijer Нигер Нігер Niger 尼日尔 尼日
|
||||
NF جزيرة نورفولك Востраў Норфалк остров Норфолк Enez Norfolk Ostrvo Norfolk Norfolk Norfolk Norfolk Island Norfolkinsel Νήσος Νόρφολκ Norfolk Island Norfolkinsulo Isla Norfolk Norfolk Norfolk uhartea جزیرهٔ نورفولک Norfolkinsaari Norfolk Island Île Norfolk Île Norfolk Oileán Norfolk Eilean Norfolk Illa Norfolk האי נורפוק Otok Norfolk Norfolk-sziget Kepulauan Norfolk Norfolkeyja Isola Norfolk ノーフォーク島 노퍽섬 Norfolk Island Норфолк аралы Norfolko sala Norfolkas sala Норфолшки Остров നോർഫോക് ദ്വീപ് Norfolkøya Norfolk Norfolkøya Norfolk Island Norfolk Ilha Norfolk Ilha Norfolk Insula Norfolk о-в Норфолк Norfolk Norfolški otok Ishulli Norfolk Острво Норфок Norfolkön Kisiwa cha Norfolk เกาะนอร์ฟอล์ก Norfolk Adası Норфолк утравы Острів Норфолк Đảo Norfolk 诺福克岛 諾福克島
|
||||
NG نيجيريا Нігерыя Нигерия Nigeria Nigerija Nigèria Nigérie Nigeria Nigeria Νιγηρία Nigeria Niĝerio Nigeria Nigeeria Nigeria نیجریه Nigeria Nigeria Nigéria Nigéria an Nigéir Nigèiria Nixeria ניגריה Nigerija Nigéria Nigeria Nígería Nigeria ナイジェリア 나이지리아 Nigeria Нигерия Nigerija Nigērija Нигерија നൈജീരിയ Nigeria Nigeria Nigeria Nigeria Nigeria Nigéria Nigéria Nigeria Нигерия Nigéria Nigerija Nigeri Нигерија Nigeria Nigeria ไนจีเรีย Nijerya Нигерия Нігерія Nigeria 尼日利亚 奈及利亞
|
||||
NI نيكاراغوا Нікарагуа Никарагуа Nicaragua Nikaragva Nicaragua Nikaragua Nicaragua Nicaragua Νικαράγουα Nicaragua Nikaragvo Nicaragua Nicaragua Nikaragua نیکاراگوئه Nicaragua Nicaragua Nicaragua Nicaragua Nicearagua Niocaragua Nicaragua ניקרגואה Nikaragva Nicaragua Nikaragua Níkaragva Nicaragua ニカラグア 니카라과 Nicaragua Никарагуа Nikaragva Nikaragva Никарагва നിക്കരാഗ്വ Nicaragua Nicaragua Nicaragua Nicaragua Nikaragua Nicarágua Nicarágua Nicaragua Никарагуа Nikaragua Nikaragva Nikaragua Никарагва Nicaragua Nikaragwa นิการากัว Nikaragua Никарагуа Нікараґуа Nicaragua 尼加拉瓜 尼加拉瓜
|
||||
NL هولندا Нідэрланды Нидерландия Izelvroioù Holandija Països Baixos Nizozemsko Holland Niederlande Ολλανδία Netherlands Nederlando Países Bajos Holland Herbehereak هلند Alankomaat Netherlands Pays-Bas Pays-Bas an Ísiltír Na Tìrean Ìsle Países Baixos הולנד Nizozemska Hollandia Belanda Holland Paesi Bassi オランダ 네덜란드 Netherlands Нидерланд Nyderlandai Nīderlande Холандија നെതർലാൻഡ്സ് Nederland Nederland Nederland Netherlands Holandia Países Baixos Países Baixos Țările de Jos Нидерланды Holandsko Nizozemska Holandë Холандија Nederländerna Uholanzi เนเธอร์แลนด์ Hollanda Нидерланд Нідерланди Hà Lan 荷兰 荷蘭
|
||||
NO النرويج Нарвегія Норвегия Norvegia Norveška Noruega Norsko Norge Norwegen Νορβηγία Norway Norvegujo Noruega Norra Norvegia نروژ Norja Norway Norvège Norvège an Iorua Nirribhidh Noruega נורווגיה Norveška Norvégia Norwegia Noregur Norvegia ノルウェー 노르웨이 Norway Норвегия Norvegija Norvēģija Норвешка നോർവെ Norge Noorwegen Noreg Norway Norwegia Noruega Noruega Norvegia Норвегия Nórsko Norveška Norvegji Норвешка Norge Norway นอร์เวย์ Norveç Норвегия Норвеґія Na Uy 挪威 挪威
|
||||
NP نيبال Непал Непал Nepal Nepal Nepal Nepál Nepal Nepal Νεπάλ Nepal Nepalo Nepal Nepal Nepal نپال Nepal Nepal Népal Népal Neipeal Neapàl Nepal נפאל Nepal Nepál Nepal Nepal Nepal ネパール 네팔 Nepal Непал Nepalas Nepāla Непал നേപ്പാൾ Nepal Nepal Nepal Nepal Nepal Nepal Nepal Nepal Непал Nepál Nepal Nepal Непал Nepal Nepal เนปาล Nepal Непал Непал Nepal 尼泊尔 尼泊爾
|
||||
NR ناورو Науру Науру Nauru Nauru Nauru Nauru Nauru Nauru Ναουρού Nauru Nauro Nauru Nauru Nauru نائورو Nauru Nauru Nauru Nauru Nárú Nabhru Nauru נאורו Nauru Nauru Nauru Nárú Nauru ナウル 나우루 Nauru Науру Nauru Nauru Науру നൗറു Nauru Nauru Nauru Nauru Nauru Nauru Nauru Nauru Науру Nauru Nauru Nauru Науру Nauru Nauru นาอูรู Nauru Науру Науру Nauru 瑙鲁 諾魯
|
||||
NU نيوي Ніуэ Ниуе Niue Niue Niue Niue Niue Niue Νιούε Niue Niuo Niue Niue Niue نیوئه Niue Niue Niue Niue Niue Niue Niue ניווה Niue Niue Niue Niue Niue ニウエ 니우에 Niue Ниуэ Niujė Niue Ниује ന്യൂയി Niue Niue Niue Niue Niue Niue Niue Niue Ниуэ Niue Niue Niue Ниуе Niue Niue นีอูเอ Niue Ниуэ Ніуе Niue 纽埃 紐埃島
|
||||
NZ نيوزيلندا Новая Зеландыя Нова Зеландия Zeland-Nevez Novi Zeland Nova Zelanda Nový Zéland New Zealand Neuseeland Νέα Ζηλανδία New Zealand Nov-Zelando Nueva Zelanda Uus-Meremaa Zeelanda Berria نیوزیلند Uusi-Seelanti New Zealand Nouvelle-Zélande Nouvelle-Zélande an Nua-Shéalainn Sealainn Nuadh Nova Zelandia ניו זילנד Novi Zeland Új-Zéland Selandia Baru Nýja-Sjáland Nuova Zelanda ニュージーランド 뉴질랜드 New Zealand Жаңы Зеландия Naujoji Zelandija Jaunzēlande Нов Зеланд ന്യൂസിലാൻറ് New Zealand Nieuw-Zeeland New Zealand New Zealand Nowa Zelandia Nova Zelândia Nova Zelândia Noua Zeelandă Новая Зеландия Nový Zéland Nova Zelandija Zelandë e Re Нови Зеланд Nya Zeeland Nyuzilandi นิวซีแลนด์ Yeni Zelanda Яңа Зеландия Нова Зеландія New Zealand 新西兰 紐西蘭
|
||||
OM عُمان Аман Оман Oman Oman Oman Omán Oman Oman Ομάν Oman Omano Omán Omaan Oman عمان Oman Oman Oman Oman Óman Omàn Omán עומאן Oman Omán Oman Óman Oman オマーン 오만 Oman Оман Omanas Omāna Оман ഒമാൻ Oman Oman Oman Oman Oman Omã Omã Oman Оман Omán Oman Oman Оман Oman Oman โอมาน Umman Оман Оман Oman 阿曼 阿曼
|
||||
PA بنما Панама Панама Panamá Panama Panamà Panama Panama Panama Παναμάς Panama Panamo Panamá Panama Panama پاناما Panama Panama Panama Panama Panama Panama Panamá פנמה Panama Panama Panama Panama Panamá パナマ 파나마 Panama Панама Panama Panama Панама പനാമ Panama Panama Panama Panama Panama Panamá Panamá Panama Панама Panama Panama Panama Панама Panama Panama ปานามา Panama Панама Панама Panama 巴拿马 巴拿馬
|
||||
PE بيرو Перу Перу Perou Peru Perú Peru Peru Peru Περού Peru Peruo Perú Peruu Peru پرو Peru Peru Pérou Pérou Peiriú Pearù O Perú פרו Peru Peru Peru Perú Perù ペルー 페루 Peru Перу Peru Peru Перу പെറു Peru Peru Peru Peru Peru Peru Peru Peru Перу Peru Peru Peru Перу Peru Peru เปรู Peru Перу Перу Peru 秘鲁 秘魯
|
||||
PF بولينيزيا الفرنسية Французская Палінезія Френска Полинезия Polinezia Cʼhall Francuska Polinezija Polinèsia Francesa Francouzská Polynésie Fransk Polynesien Französisch-Polynesien Γαλλική Πολυνησία French Polynesia Franca Polinezio Polinesia Francesa Prantsuse Polüneesia Polinesia Frantsesa پلینزی فرانسه Ranskan Polynesia French Polynesia Polynésie française Polynésie française Polainéis na Fraince Poilinèis na Frainge A Polinesia Francesa פולינזיה הצרפתית Francuska Polinezija Francia Polinézia Polinesia Prancis Franska Pólýnesía Polinesia francese 仏領ポリネシア 프랑스령 폴리네시아 French Polynesia Полинезия (франциялык) Prancūzijos Polinezija Francijas Polinēzija Француска Полинезија ഫ്രഞ്ച് പോളിനേഷ്യ Fransk Polynesia Frans-Polynesië Fransk Polynesia French Polynesia Polinezja Francuska Polinésia Francesa Polinésia Francesa Polinezia Franceză Французская Полинезия Francúzska Polynézia Francoska Polinezija Polinezia Franceze Француска Полинезија Franska Polynesien Polynesia ya Ufaransa เฟรนช์โปลินีเซีย Fransız Polinezyası Француз Полинезиясе Французька Полінезія Polynesia thuộc Pháp 法属波利尼西亚 法屬玻里尼西亞
|
||||
PG بابوا غينيا الجديدة Папуа-Новая Гвінея Папуа-Нова Гвинея Papoua Ginea-Nevez Papua Nova Gvineja Papua Nova Guinea Papua-Nová Guinea Papua Ny Guinea Papua-Neuguinea Παπούα Νέα Γουινέα Papua New Guinea Papuo-Nov-Gvineo Papúa Nueva Guinea Paapua Uus-Guinea Papua Ginea Berria پاپوا گینهٔ نو Papua-Uusi-Guinea Papua New Guinea Papouasie-Nouvelle-Guinée Papouasie-Nouvelle-Guinée Nua-Ghuine Phapua Gini Nuadh Phaputhach Papúa-Nova Guinea פפואה גינאה החדשה Papua Nova Gvineja Pápua Új-Guinea Papua Nugini Papúa Nýja-Gínea Papua Nuova Guinea パプアニューギニア 파푸아뉴기니 Papua New Guinea Папуа-Жаңы Гвинея Papua Naujoji Gvinėja Papua-Jaungvineja Папуа Нова Гвинеја പാപ്പുവ ന്യൂ ഗിനിയ Papua Ny-Guinea Papoea-Nieuw-Guinea Papua Ny-Guinea Papua New Guinea Papua-Nowa Gwinea Papua-Nova Guiné Papua-Nova Guiné Papua-Noua Guinee Папуа — Новая Гвинея Papua-Nová Guinea Papua Nova Gvineja Guineja e Re-Papua Папуа Нова Гвинеја Papua Nya Guinea Papua New Guinea ปาปัวนิวกินี Papua Yeni Gine Папуа - Яңа Гвинея Папуа-Нова Ґвінея Papua New Guinea 巴布亚新几内亚 巴布亞紐幾內亞
|
||||
PH الفلبين Філіпіны Филипини Filipinez Filipini Filipines Filipíny Filippinerne Philippinen Φιλιππίνες Philippines Filipinoj Filipinas Filipiinid Filipinak فیلیپین Filippiinit Pilipinas Philippines Philippines na hOileáin Fhilipíneacha Na h-Eileanan Filipineach Filipinas הפיליפינים Filipini Fülöp-szigetek Filipina Filippseyjar Filippine フィリピン 필리핀 Philippines Филиппин Filipinai Filipīnas Филипини ഫിലിപ്പീൻസ് Filippinene Filipijnen Filippinane Philippines Filipiny Filipinas Filipinas Filipine Филиппины Filipíny Filipini Filipine Филипини Filippinerna Ufilipino ฟิลิปปินส์ Filipinler Филиппин Філіппіни Philippines 菲律宾 菲律賓
|
||||
PK باكستان Пакістан Пакистан Pakistan Pakistan Pakistan Pákistán Pakistan Pakistan Πακιστάν Pakistan Pakistano Pakistán Pakistan Pakistan پاکستان Pakistan Pakistan Pakistan Pakistan an Phacastáin Pagastàn Paquistán פקיסטן Pakistan Pakisztán Pakistan Pakistan Pakistan パキスタン 파키스탄 Pakistan Пакистан Pakistanas Pakistāna Пакистан പാക്കിസ്ഥാൻ Pakistan Pakistan Pakistan Pakistan Pakistan Paquistão Paquistão Pakistan Пакистан Pakistan Pakistan Pakistan Пакистан Pakistan Pakistani ปากีสถาน Pakistan Пакистан Пакистан Pakistan 巴基斯坦 巴基斯坦
|
||||
PL بولندا Польшча Полша Polonia Poljska Polònia Polsko Polen Polen Πολωνία Poland Pollando Polonia Poola Polonia لهستان Puola Poland Pologne Pologne an Pholainn A’ Phòlainn Polonia פולין Poljska Lengyelország Polandia Pólland Polonia ポーランド 폴란드 Poland Польша Lenkija Polija Полска പോളണ്ട് Polen Polen Polen Poland Polska Polônia Polônia Polonia Польша Poľsko Poljska Poloni Пољска Polen Poland โปแลนด์ Polonya Польша Польща Ba Lan 波兰 波蘭
|
||||
PM سان بيير ومكويلون Сен-П’ер і Мікелон Сен Пиер и Микелон Sant-Pêr-ha-Mikelon Sveti Petar i Mikelon Saint-Pierre-et-Miquelon Saint-Pierre a Miquelon Saint Pierre og Miquelon St. Pierre und Miquelon Σεν Πιερ και Μικελόν St. Pierre & Miquelon Sent-Piero kaj Mikelono San Pedro y Miquelón Saint-Pierre ja Miquelon Saint-Pierre eta Mikelune سن پیر و میکلن Saint-Pierre ja Miquelon St. Pierre & Miquelon Saint-Pierre-et-Miquelon Saint-Pierre-et-Miquelon San Pierre agus Miquelon Saint Pierre agus Miquelon Saint Pierre et Miquelon סנט פייר ומיקלון Saint-Pierre-et-Miquelon Saint-Pierre és Miquelon Saint Pierre dan Miquelon Sankti Pierre og Miquelon Saint-Pierre e Miquelon サンピエール島・ミクロン島 생피에르 미클롱 St. Pierre & Miquelon Сен-Пьер жана Микелон Sen Pjeras ir Mikelonas Senpjēra un Mikelona Сент Пјер и Микелан സെന്റ് പിയറി ആൻഡ് മിക്വലൻ Saint-Pierre-et-Miquelon Saint-Pierre en Miquelon Saint-Pierre-et-Miquelon St. Pierre & Miquelon Saint-Pierre i Miquelon São Pedro e Miquelão São Pedro e Miquelão Saint-Pierre și Miquelon Сен-Пьер и Микелон Saint Pierre a Miquelon Saint Pierre in Miquelon Shën-Pier dhe Mikelon Сен Пјер и Микелон S:t Pierre och Miquelon Santapierre na Miquelon แซงปีแยร์และมีเกอลง Saint Pierre ve Miquelon Сен-Пьер һәм Микелон Сен-Пʼєр і Мікелон Saint Pierre và Miquelon 圣皮埃尔和密克隆群岛 聖皮埃與密克隆群島
|
||||
PN جزر بيتكيرن Астравы Піткэрн Острови Питкерн Enez Pitcairn Pitkernska Ostrva Illes Pitcairn Pitcairnovy ostrovy Pitcairn Pitcairninseln Νήσοι Πίτκερν Pitcairn Islands Pitkarna Insulo Islas Pitcairn Pitcairni saared Pitcairn uharteak جزایر پیتکرن Pitcairn Pitcairn Islands Îles Pitcairn Îles Pitcairn Oileáin Pitcairn Eileanan Pheit a’ Chàirn Illas Pitcairn איי פיטקרן Otoci Pitcairn Pitcairn-szigetek Kepulauan Pitcairn Pitcairn-eyjar Isole Pitcairn ピトケアン諸島 핏케언 섬 Pitcairn Islands Питкэрн аралдары Pitkerno salos Pitkērnas salas Питкернски Острови പിറ്റ്കെയ്ൻ ദ്വീപുകൾ Pitcairnøyene Pitcairneilanden Pitcairn Pitcairn Islands Pitcairn Ilhas Pitcairn Ilhas Pitcairn Insulele Pitcairn о-ва Питкэрн Pitcairnove ostrovy Pitcairn Ishujt Pitkern Питкерн Pitcairnöarna Visiwa vya Pitcairn หมู่เกาะพิตแคร์น Pitcairn Adaları Питкэрн утраулары Острови Піткерн Quần đảo Pitcairn 皮特凯恩群岛 皮特肯群島
|
||||
PR بورتوريكو Пуэрта-Рыка Пуерто Рико Puerto Rico Porto Riko Puerto Rico Portoriko Puerto Rico Puerto Rico Πουέρτο Ρίκο Puerto Rico Puerto-Riko Puerto Rico Puerto Rico Puerto Rico پورتوریکو Puerto Rico Puerto Rico Porto Rico Porto Rico Pórtó Ríce Porto Rìceo Porto Rico פוארטו ריקו Portoriko Puerto Rico Puerto Riko Púertó Ríkó Portorico プエルトリコ 푸에르토리코 Puerto Rico Пуэрто-Рико Puerto Rikas Puertoriko Порторико പോർട്ടോ റിക്കോ Puerto Rico Puerto Rico Puerto Rico Puerto Rico Portoryko Porto Rico Porto Rico Puerto Rico Пуэрто-Рико Portoriko Portoriko Porto-Riko Порторико Puerto Rico Puerto Rico เปอร์โตริโก Porto Riko Пуэрто-Рико Пуерто-Ріко Puerto Rico 波多黎各 波多黎各
|
||||
PS فلسطين Палесціна Палестина Palestina Palestina Palestina Palestina Palæstina Palästina Παλαιστίνη Palestine Palestine Palestina Palestiina Palestina فلسطین Palestiina Palestine Palestine Palestine an Phalaistín Palastain Palestina פלסטין Palestina Palesztina Palestina Palestína Palestina パレスチナ 팔레스타인 Palestine Палестина Palestina Palestine Палестина പലസ്തീൻ Palestina Palestina Palestina Palestine Palestyna Palestina Palestina Palestina Палестина Palestínska samospráva Palestina Palestinë Палестина Palestina Palestina ปาเลสไตน์ Filistin Palestine Палестина Palestine 巴勒斯坦 巴勒斯坦
|
||||
PT البرتغال Партугалія Португалия Portugal Portugal Portugal Portugalsko Portugal Portugal Πορτογαλία Portugal Portugalujo Portugal Portugal Portugal پرتغال Portugali Portugal Portugal Portugal an Phortaingéil A’ Phortagail Portugal פורטוגל Portugal Portugália Portugal Portúgal Portogallo ポルトガル 포르투갈 Portugal Португалия Portugalija Portugāle Португалија പോർച്ചുഗൽ Portugal Portugal Portugal Portugal Portugalia Portugal Portugal Portugalia Португалия Portugalsko Portugalska Portugali Португалија Portugal Ureno โปรตุเกส Portekiz Португалия Портуґалія Bồ Đào Nha 葡萄牙 葡萄牙
|
||||
PW بالاو Палау Палау Palau Palau Palau Palau Palau Palau Παλάου Palau Belaŭo Palaos Belau Palau پالائو Palau Palau Palaos Palaos Oileáin Palau Palabh Palau פלאו Palau Palau Palau Palá Palau パラオ 팔라우 Palau Палау Palau Palau Палау പലാവു Palau Palau Palau Palau Palau Palau Palau Palau Палау Palau Palau Palau Палау Palau Palau ปาเลา Palau Палау Палау Palau 帕劳 帛琉
|
||||
PY باراغواي Парагвай Парагвай Paraguay Paragvaj Paraguai Paraguay Paraguay Paraguay Παραγουάη Paraguay Paragvajo Paraguay Paraguay Paraguai پاراگوئه Paraguay Paraguay Paraguay Paraguay Paragua Paraguaidh O Paraguai פרגוואי Paragvaj Paraguay Paraguay Paragvæ Paraguay パラグアイ 파라과이 Paraguay Парагвай Paragvajus Paragvaja Парагвај പരാഗ്വേ Paraguay Paraguay Paraguay Paraguay Paragwaj Paraguai Paraguai Paraguay Парагвай Paraguaj Paragvaj Paraguai Парагвај Paraguay Paraguay ปารากวัย Paraguay Парагвай Параґвай Paraguay 巴拉圭 巴拉圭
|
||||
QA قطر Катар Катар Qatar Katar Qatar Katar Qatar Katar Κατάρ Qatar Kataro Catar Katar Qatar قطر Qatar Qatar Qatar Qatar Catar Catar Qatar קטאר Katar Katar Qatar Katar Qatar カタール 카타르 Qatar Катар Kataras Katara Катар ഖത്തർ Qatar Qatar Qatar Qatar Katar Catar Catar Qatar Катар Katar Katar Katar Катар Qatar Qatar กาตาร์ Katar Катар Катар Qatar 卡塔尔 卡達
|
||||
QO أوقيانوسيا النائية Аддаленыя тэрыторыі Акіяніі Отдалечени острови на Океания Oseania diabell Vanjska Okeanija Territoris allunyats d’Oceania vnější Oceánie Ydre Oceanien Äußeres Ozeanien Περιφερειακή Ωκεανία Outlying Oceania Outlying Oceania Territorios alejados de Oceanía Okeaania hajasaared Mugaz kanpoko Ozeania بخشهای دورافتادهٔ اقیانوسیه ulkomeri Outlying Oceania régions éloignées de l’Océanie régions éloignées de l’Océanie an Aigéine Imeallach Roinn Iomallach a’ Chuain Sèimh Territorios afastados de Oceanía טריטוריות באוקיאניה Vanjska područja Oceanije Külső-Óceánia Oseania Luar Ytri Eyjaálfa Oceania lontana オセアニア周辺地域 오세아니아 외곽 Outlying Oceania Алыскы Океания Nuošali Okeanija Okeānijas attālās salas Зависни земји во Океанија ദ്വീപസമൂഹം Ytre Oseania overig Oceanië Ytre Oseania Outlying Oceania Oceania — wyspy dalekie Oceania Remota Oceania Remota Oceania Periferică Внешняя Океания ostatné Tichomorie Ostala oceanija Oqeania e Largët (Lindja e Largët) Океанија (удаљена острва) yttre öar i Oceanien Oceania ya Nje เอาต์ไลอิงโอเชียเนีย Uzak Okyanusya Outlying Oceania Віддалена Океанія Vùng xa xôi thuộc Châu Đại Dương 大洋洲边远群岛 大洋洲邊疆群島
|
||||
RE روينيون Рэюньён Реюнион Ar Reünion Reunion Illa de la Reunió Réunion Réunion Réunion Ρεϊνιόν Réunion Reunio Reunión Réunion Reunion رئونیون Réunion Réunion La Réunion La Réunion Réunion Réunion Reunión ראוניון Réunion Réunion Réunion Réunion Riunione レユニオン 리유니온 Réunion Реюньон Reunjonas Reinjona Реунион റീയൂണിയൻ Réunion Réunion Réunion Réunion Reunion Reunião Reunião Réunion Реюньон Réunion Reunion Reunion Реинион Réunion Reunion เรอูนียง Reunion Реюньон Реюньйон Réunion 留尼汪 留尼旺
|
||||
RO رومانيا Румынія Румъния Roumania Rumunija Romania Rumunsko Rumænien Rumänien Ρουμανία Romania Rumanujo Rumanía Rumeenia Errumania رومانی Romania Romania Roumanie Roumanie an Rómáin Romàinia Romanía רומניה Rumunjska Románia Rumania Rúmenía Romania ルーマニア 루마니아 Romania Румыния Rumunija Rumānija Романија റൊമാനിയ Romania Roemenië Romania Romania Rumunia Romênia Romênia România Румыния Rumunsko Romunija Rumani Румунија Rumänien Romania โรมาเนีย Romanya Румыния Румунія Romania 罗马尼亚 羅馬尼亞
|
||||
RS صربيا Сербія Сърбия Serbia Srbija Sèrbia Srbsko Serbien Serbien Σερβία Serbia Serbia Serbia Serbia Serbia صربستان Serbia Serbia Serbie Serbie an tSeirbia An t-Sèirb Serbia סרביה Srbija Szerbia Serbia Serbía Serbia セルビア 세르비아 Serbia Сербия Serbija Serbija Србија സെർബിയ Serbia Servië Serbia Serbia Serbia Sérvia Sérvia Serbia Сербия Srbsko Srbija Serbi Србија Serbien Serbia เซอร์เบีย Sırbistan Сербия Сербія Serbia 塞尔维亚 塞爾維亞
|
||||
RU روسيا Расія Русия Rusia Rusija Rússia Rusko Rusland Russland Ρωσία Russia Rusujo Rusia Venemaa Errusia روسیه Venäjä Russia Russie Russie an Rúis An Ruis Rusia רוסיה Rusija Oroszország Rusia Rússland Russia ロシア 러시아 Russi Россия Rusija Krievija Русија റഷ്യ Russland Rusland Russland Уӕрӕсе Rosja Rússia Rússia Rusia Россия Rusko Rusija Rusi Русија Ryssland Urusi รัสเซีย Rusya Россия Росія Nga 俄罗斯 俄羅斯
|
||||
RW رواندا Руанда Руанда Rwanda Ruanda Ruanda Rwanda Rwanda Ruanda Ρουάντα Rwanda Ruando Ruanda Rwanda Ruanda رواندا Ruanda Rwanda Rwanda Rwanda Ruanda Rubhanda Ruanda רואנדה Ruanda Ruanda Rwanda Rúanda Ruanda ルワンダ 르완다 Rwanda Руанда Ruanda Ruanda Руанда റുവാണ്ട Rwanda Rwanda Rwanda Rwanda Rwanda Ruanda Ruanda Rwanda Руанда Rwanda Ruanda Ruandë Руанда Rwanda Rwanda รวันดา Ruanda Руанда Руанда Rwanda 卢旺达 盧安達
|
||||
SA المملكة العربية السعودية Саудаўская Аравія Саудитска Арабия Arabia Saoudat Saudijska Arabija Aràbia Saudita Saúdská Arábie Saudi-Arabien Saudi-Arabien Σαουδική Αραβία Saudi Arabia Saŭda Arabujo Arabia Saudí Saudi Araabia Saudi Arabia عربستان سعودی Saudi-Arabia Saudi Arabia Arabie saoudite Arabie saoudite an Araib Shádach Aràibia nan Sabhd Arabia Saudita ערב הסעודית Saudijska Arabija Szaúd-Arábia Arab Saudi Sádi-Arabía Arabia Saudita サウジアラビア 사우디아라비아 Saudi Arabia Сауд Арабиясы Saudo Arabija Saūda Arābija Саудиска Арабија സൗദി അറേബ്യ Saudi-Arabia Saoedi-Arabië Saudi-Arabia Saudi Arabia Arabia Saudyjska Arábia Saudita Arábia Saudita Arabia Saudită Саудовская Аравия Saudská Arábia Saudova Arabija Arabi Saudite Саудијска Арабија Saudiarabien Saudia ซาอุดีอาระเบีย Suudi Arabistan Согуд Гарәбстаны Саудівська Аравія Ả Rập Xê-út 沙特阿拉伯 沙烏地阿拉伯
|
||||
SB جزر سليمان Саламонавы астравы Соломонови острови Inizi Salomon Solomonska Ostrva Illes Salomó Šalamounovy ostrovy Salomonøerne Salomonen Νήσοι Σολομώντος Solomon Islands Salomonoj Islas Salomón Saalomoni Saared Salomon Uharteak جزایر سلیمان Salomonsaaret Solomon Islands Îles Salomon Îles Salomon Oileáin Sholomón Eileanan Sholaimh Illas Salomón איי שלמה Salomonski Otoci Salamon-szigetek Kepulauan Solomon Salómonseyjar Isole Salomone ソロモン諸島 솔로몬 제도 Solomon Islands Соломон аралдары Saliamono Salos Zālamana salas Соломонски Острови സോളമൻ ദ്വീപുകൾ Salomonøyene Salomonseilanden Salomonøyane Solomon Islands Wyspy Salomona Ilhas Salomão Ilhas Salomão Insulele Solomon Соломоновы Острова Šalamúnove ostrovy Salomonovi otoki Ishujt Solomon Соломонска Острва Salomonöarna Visiwa vya Solomon หมู่เกาะโซโลมอน Solomon Adaları Сөләйман утраулары Соломонові Острови Quần đảo Solomon 所罗门群岛 索羅門群島
|
||||
SC سيشل Сейшэльскія астравы Сейшели Sechelez Sejšeli Seychelles Seychely Seychellerne Seychellen Σεϋχέλλες Seychelles Sejŝeloj Seychelles Seišellid Seychelleak سیشل Seychellit Seychelles Seychelles Seychelles na Séiséil Na h-Eileanan Sheiseall Seychelles איי סיישל Sejšeli Seychelle-szigetek Seychelles Seychelles-eyjar Seychelles セーシェル 세이셸 Seychelles Сейшел аралдары Seišeliai Seišelu salas Сејшели സീഷെൽസ് Seychellene Seychellen Seychellane Seychelles Seszele Seicheles Seicheles Seychelles Сейшельские Острова Seychely Sejšeli Sejshelle Сејшели Seychellerna Ushelisheli เซเชลส์ Seyşeller Сейшел утраулары Сейшельські Острови Seychelles 塞舌尔 塞席爾
|
||||
SD السودان Судан Судан Soudan Sudan Sudan Súdán Sudan Sudan Σουδάν Sudan Sudano Sudán Sudaan Sudan سودان Sudan Sudan Soudan Soudan an tSúdáin Sudàn O Sudán סודן Sudan Szudán Sudan Súdan Sudan スーダン 수단 Sudan Судан Sudanas Sudāna Судан സുഡാൻ Sudan Soedan Sudan Sudan Sudan Sudão Sudão Sudan Судан Sudán Sudan Sudan Судан Sudan Sudan ซูดาน Sudan Судан Судан Sudan 苏丹 蘇丹
|
||||
SE السويد Швецыя Швеция Sveden Švedska Suècia Švédsko Sverige Schweden Σουηδία Sweden Svedujo Suecia Rootsi Suedia سوئد Ruotsi Sweden Suède Suède an tSualainn An t-Suain Suecia שוודיה Švedska Svédország Swedia Svíþjóð Svezia スウェーデン 스웨덴 Sweden Швеция Švedija Zviedrija Шведска സ്വീഡൻ Sverige Zweden Sverige Sweden Szwecja Suécia Suécia Suedia Швеция Švédsko Švedska Suedi Шведска Sverige Uswidi สวีเดน İsveç Швеция Швеція Thụy Điển 瑞典 瑞典
|
||||
SG سنغافورة Сінгапур Сингапур Singapour Singapur Singapur Singapur Singapore Singapur Σιγκαπούρη Singapore Singapuro Singapur Singapur Singapur سنگاپور Singapore Singapore Singapour Singapour Singeapór Singeapòr Singapur סינגפור Singapur Szingapúr Singapura Singapúr Singapore シンガポール 싱가포르 Singapore Сингапур Singapūras Singapūra Сингапур സിംഗപ്പൂർ Singapore Singapore Singapore Singapore Singapur Singapura Singapura Singapore Сингапур Singapur Singapur Singapor Сингапур Singapore Singapore สิงคโปร์ Singapur Сингапур Сінгапур Singapore 新加坡 新加坡
|
||||
SH سانت هيلينا Востраў Святой Алены Света Елена Saint-Helena Sveta Helena Saint Helena Svatá Helena St. Helena St. Helena Αγία Ελένη St. Helena Sent-Heleno Santa Elena Saint Helena Santa Helena سنت هلن Saint Helena St. Helena Sainte-Hélène Sainte-Hélène San Héilin Eilean Naomh Eilidh Santa Helena סנט הלנה Sveta Helena Szent Ilona Saint Helena Sankti Helena Sant’Elena セントヘレナ 세인트헬레나 St. Helena Ыйык Елена Šv. Elenos Sala Sv.Helēnas sala Света Елена സെന്റ് ഹെലീന St. Helena Sint-Helena Saint Helena St. Helena Wyspa Świętej Heleny Santa Helena Santa Helena Sfânta Elena о-в Св. Елены Svätá Helena Sveta Helena Shën-Elenë Света Јелена S:t Helena St. Helena เซนต์เฮเลนา Saint Helena St. Helena Острів Святої Єлени St. Helena 圣赫勒拿 聖赫勒拿島
|
||||
SI سلوفينيا Славенія Словения Slovenia Slovenija Eslovènia Slovinsko Slovenien Slowenien Σλοβενία Slovenia Slovenujo Eslovenia Sloveenia Eslovenia اسلوونی Slovenia Slovenia Slovénie Slovénie an tSlóivéin An t-Slòbhain Eslovenia סלובניה Slovenija Szlovénia Slovenia Slóvenía Slovenia スロベニア 슬로베니아 Slovenia Словения Slovėnija Slovēnija Словенија സ്ലോവേനിയ Slovenia Slovenië Slovenia Slovenia Słowenia Eslovênia Eslovênia Slovenia Словения Slovinsko Slovenija Slloveni Словенија Slovenien Slovenia สโลวีเนีย Slovenya Словения Словенія Slovenia 斯洛文尼亚 斯洛維尼亞
|
||||
SJ سفالبارد وجان ماين Шпіцберген і Ян-Маен Свалбард и Ян Майен Svalbard Svalbard i Jan Majen Svalbard i Jan Mayen Špicberky a Jan Mayen Svalbard og Jan Mayen Spitzbergen und Jan Mayen Σβάλμπαρντ και Γιαν Μαγιέν Svalbard & Jan Mayen Svalbardo kaj Jan-Majen-insulo Svalbard y Jan Mayen Svalbard ja Jan Mayen Svalbard eta Jan Mayen uharteak سوالبارد و یان ماین Huippuvuoret ja Jan Mayen Svalbard & Jan Mayen Svalbard et Jan Mayen Svalbard et Jan Mayen Svalbard agus Jan Mayen Svalbard agus Jan Mayen Svalbard e Jan Mayen סבאלברד ויאן מאיין Svalbard i Jan Mayen Svalbard és Jan Mayen Kepulauan Svalbard dan Jan Mayen Svalbarði og Jan Mayen Svalbard e Jan Mayen スバールバル諸島・ヤンマイエン島 스발바르제도-얀마웬섬 Svalbard & Jan Mayen Шпицберген жана Ян-Майен Svalbardas ir Janas Majenas Svalbāra un Jana Majena sala Свалбард и Жан Мејен സ്വാൽബാഡും ജാൻ മായേനും Svalbard og Jan Mayen Spitsbergen en Jan Mayen Svalbard og Jan Mayen Svalbard & Jan Mayen Svalbard i Jan Mayen Svalbard e Jan Mayen Svalbard e Jan Mayen Svalbard și Jan Mayen Шпицберген и Ян-Майен Svalbard a Jan Mayen Svalbard in Jan Mayen Svalbard e Jan-Majen Свалбард и Јан Мајен Svalbard och Jan Mayen Svalbard na Jan Mayen สฟาลบาร์และยานไมเอน Svalbard ve Jan Mayen Шпицберген һәм Ян-Майен Шпіцберген та Ян-Маєн Svalbard và Jan Mayen 斯瓦尔巴和扬马延 挪威屬斯瓦巴及尖棉
|
||||
SK سلوفاكيا Славакія Словакия Slovakia Slovačka Eslovàquia Slovensko Slovakiet Slowakei Σλοβακία Slovakia Slovakujo Eslovaquia Slovakkia Eslovakia اسلواکی Slovakia Slovakia Slovaquie Slovaquie an tSlóvaic An t-Slòbhac Eslovaquia סלובקיה Slovačka Szlovákia Slovakia Slóvakía Slovacchia スロバキア 슬로바키아 Slovakia Словакия Slovakija Slovākija Словачка സ്ലോവാക്യ Slovakia Slowakije Slovakia Slovakia Słowacja Eslováquia Eslováquia Slovacia Словакия Slovensko Slovaška Sllovaki Словачка Slovakien Slovakia สโลวะเกีย Slovakya Словакия Словаччина Slovakia 斯洛伐克 斯洛伐克
|
||||
SL سيراليون Сьера-Леонэ Сиера Леоне Sierra Leone Sijera Leone Sierra Leone Sierra Leone Sierra Leone Sierra Leone Σιέρα Λεόνε Sierra Leone Siera-Leono Sierra Leona Sierra Leone Sierra Leona سیرالئون Sierra Leone Sierra Leone Sierra Leone Sierra Leone Siarra Leon Siarra Leòmhann Serra Leoa סיירה לאונה Sijera Leone Sierra Leone Sierra Leone Síerra Leóne Sierra Leone シエラレオネ 시에라리온 Sierra Leone Сьерра-Леоне Siera Leonė Sjerraleone Сиера Леоне സിയെറ ലിയോൺ Sierra Leone Sierra Leone Sierra Leone Sierra Leone Sierra Leone Serra Leoa Serra Leoa Sierra Leone Сьерра-Леоне Sierra Leone Sierra Leone Sierra-Leone Сијера Леоне Sierra Leone Siera Leoni เซียร์ราลีโอน Sierra Leone Сьерра-Леоне Сьєрра-Леоне Sierra Leone 塞拉利昂 獅子山
|
||||
SM سان مارينو Сан-Марына Сан Марино San Marino San Marino San Marino San Marino San Marino San Marino Άγιος Μαρίνος San Marino San-Marino San Marino San Marino San Marino سانمارینو San Marino San Marino Saint-Marin Saint-Marin San Mairíne San Marino San Marino סן מרינו San Marino San Marino San Marino San Marínó San Marino サンマリノ 산마리노 San Marino Сан Марино San Marinas Sanmarīno Сан Марино സാൻ മറിനോ San Marino San Marino San Marino San Marino San Marino San Marino San Marino San Marino Сан-Марино San Maríno San Marino San-Marino Сан Марино San Marino San Marino ซานมาริโน San Marino Сан-Марино Сан-Маріно San Marino 圣马力诺 聖馬利諾
|
||||
SN السنغال Сенегал Сенегал Senegal Senegal Senegal Senegal Senegal Senegal Σενεγάλη Senegal Senegalo Senegal Senegal Senegal سنگال Senegal Senegal Sénégal Sénégal an tSeineagáil Seanagal Senegal סנגל Senegal Szenegál Senegal Senegal Senegal セネガル 세네갈 Senegal Сенегал Senegalas Senegāla Сенегал സെനഗൽ Senegal Senegal Senegal Senegal Senegal Senegal Senegal Senegal Сенегал Senegal Senegal Senegal Сенегал Senegal Senegali เซเนกัล Senegal Сенегал Сенегал Senegal 塞内加尔 塞內加爾
|
||||
SO الصومال Самалі Сомалия Somalia Somalija Somàlia Somálsko Somalia Somalia Σομαλία Somalia Somalujo Somalia Somaalia Somalia سومالی Somalia Somalia Somalie Somalie an tSomáil Somàilia Somalia סומליה Somalija Szomália Somalia Sómalía Somalia ソマリア 소말리아 Somalia Сомали Somalis Somālija Сомалија സോമാലിയ Somalia Somalië Somalia Somalia Somalia Somália Somália Somalia Сомали Somálsko Somalija Somali Сомалија Somalia Somalia โซมาเลีย Somali Сомали Сомалі Somalia 索马里 索馬利亞
|
||||
SR سورينام Сурынам Суринам Surinam Surinam Surinam Surinam Surinam Suriname Σουρινάμ Suriname Surinamo Surinam Suriname Surinam سورینام Suriname Suriname Suriname Suriname Suranam Suranam Suriname סורינאם Surinam Suriname Suriname Súrínam Suriname スリナム 수리남 Suriname Суринам Surinamas Surinama Суринам സുരിനാം Surinam Suriname Surinam Suriname Surinam Suriname Suriname Suriname Суринам Surinam Surinam Surinami Суринам Surinam Suriname ซูรินาเม Surinam Суринам Сурінам Suriname 苏里南 蘇利南
|
||||
SS جنوب السودان Паўднёвы Судан Южен Судан Susoudan Južni Sudan Sudan del Sud Jižní Súdán Sydsudan Südsudan Νότιο Σουδάν South Sudan Sud-Sudano Sudán del Sur Lõuna-Sudaan Hego Sudan سودان جنوبی Etelä-Sudan Timog Sudan Soudan du Sud Soudan du Sud an tSúdáin Theas Sudàn a Deas O Sudán do Sur דרום סודן Južni Sudan Dél-Szudán Sudan Selatan Suður-Súdan Sud Sudan 南スーダン 남수단 South Sudan Түштүк Судан Pietų Sudanas Dienvidsudāna Јужен Судан ദക്ഷിണ സുഡാൻ Sør-Sudan Zuid-Soedan Sør-Sudan South Sudan Sudan Południowy Sudão do Sul Sudão do Sul Sudanul de Sud Южный Судан Južný Sudán Južni Sudan Sudani i Jugut Јужни Судан Sydsudan Sudan Kusini ซูดานใต้ Güney Sudan Көньяк Судан Південний Судан Nam Sudan 南苏丹 南蘇丹
|
||||
ST ساو تومي وبرينسيبي Сан-Тамэ і Прынсіпі Сао Томе и Принсипи São Tomé ha Príncipe Sao Tome i Principe São Tomé i Príncipe Svatý Tomáš a Princův ostrov São Tomé og Príncipe São Tomé und Príncipe Σάο Τομέ και Πρίνσιπε São Tomé & Príncipe Sao-Tomeo kaj Principeo Santo Tomé y Príncipe São Tomé ja Príncipe Sao Tome eta Principe سائوتومه و پرینسیپ São Tomé ja Príncipe São Tomé & Príncipe Sao Tomé-et-Principe Sao Tomé-et-Principe São Tomé agus Príncipe São Tomé agus Príncipe San Tomé e Príncipe סאו טומה ופרינסיפה Sveti Toma i Princip São Tomé és Príncipe Sao Tome dan Principe Saó Tóme og Prinsípe São Tomé e Príncipe サントメ・プリンシペ 상투메 프린시페 São Tomé & Príncipe Сан-Томе жана Принсипи San Tomė ir Prinsipė Santome un Prinsipi Сао Томе и Принсипе സാവോ ടോമും പ്രിൻസിപെയും São Tomé og Príncipe Sao Tomé en Principe São Tomé og Príncipe São Tomé & Príncipe Wyspy Świętego Tomasza i Książęca São Tomé e Príncipe São Tomé e Príncipe São Tomé și Príncipe Сан-Томе и Принсипи Svätý Tomáš a Princov ostrov Sao Tome in Principe Sao-Tome e Principe Сао Томе и Принципе São Tomé och Príncipe São Tomé na Príncipe เซาตูเมและปรินซิปี Sao Tome ve Principe Сан-Томе һәм Принсипи Сан-Томе і Прінсіпі São Tomé và Príncipe 圣多美和普林西比 聖多美普林西比
|
||||
SV السلفادور Сальвадор Салвадор Salvador Salvador El Salvador Salvador El Salvador El Salvador Ελ Σαλβαδόρ El Salvador Salvadoro El Salvador El Salvador El Salvador السالوادور El Salvador El Salvador Salvador Salvador an tSalvadóir An Salbhador O Salvador אל סלבדור Salvador Salvador El Salvador El Salvador El Salvador エルサルバドル 엘살바도르 El Salvador Эль-Сальвадор Salvadoras Salvadora Ел Салвадор എൽ സാൽവദോർ El Salvador El Salvador El Salvador El Salvador Salwador El Salvador El Salvador El Salvador Сальвадор Salvádor Salvador Salvador Салвадор El Salvador El Salvador เอลซัลวาดอร์ El Salvador Сальвадор Сальвадор El Salvador 萨尔瓦多 薩爾瓦多
|
||||
SX سانت مارتن Сінт-Мартэн Синт Мартен Sint Maarten Sint Marten Sint Maarten Svatý Martin (Nizozemsko) Sint Maarten Sint Maarten Άγιος Μαρτίνος (Ολλανδικό τμήμα) Sint Maarten Sint Maarten Sint Maarten Sint Maarten Sint Maarten سنت مارتن Sint Maarten Sint Maarten Saint-Martin (partie néerlandaise) Saint-Martin (partie néerlandaise) Sint Maarten Sint Maarten Sint Maarten סנט מארטן Sint Maarten Sint Maarten Sint Maarten Sankti Martin Sint Maarten シント・マールテン 신트마르턴 Sint Maarten Синт-Мартен Sint Martenas Sintmārtena Свети Мартин സിന്റ് മാർട്ടെൻ Sint Maarten Sint-Maarten Sint Maarten Sint Maarten Sint Maarten Sint Maarten Sint Maarten Sint-Maarten Синт-Мартен Svätý Martin (hol.) Sint Maarten Sint-Marten Свети Мартин (Холандија) Sint Maarten Sint Maarten ซินต์มาร์เทน Sint Maarten Синт-Мартен Сінт-Мартен Sint Maarten 荷属圣马丁 荷屬聖馬丁
|
||||
SY سوريا Сірыя Сирия Siria Sirija Síria Sýrie Syrien Syrien Συρία Syria Sirio Siria Süüria Siria سوریه Syyria Syria Syrie Syrie an tSiria Siridhea Siria סוריה Sirija Szíria Suriah Sýrland Siria シリア 시리아 Syria Сирия Sirija Sīrija Сирија സിറിയ Syria Syrië Syria Syria Syria Síria Síria Siria Сирия Sýria Sirija Siri Сирија Syrien Syria ซีเรีย Suriye Сүрия Сирія Syria 叙利亚 敘利亞
|
||||
SZ إسواتيني Эсватыні Есватини Eswatini Esvatini eSwatini Svazijsko Eswatini Eswatini Σουαζιλάνδη Eswatini Svazilando Esuatini Svaasimaa Swazilandia اسواتینی Swazimaa Swaziland Eswatini Eswatini eSuaitíní eSwatini Eswatini אסוואטיני Esvatini Szváziföld eSwatini Svasíland Swaziland エスワティニ 에스와티니 Eswatini Свазиленд Svazilandas Svatini Свазиленд സ്വാസിലാന്റ് Eswatini eSwatini Swaziland Eswatini Eswatini Essuatíni Essuatíni eSwatini Эсватини Eswatini Esvatini Esvatini Свазиленд Swaziland Uswazi เอสวาตีนี Esvatini Свазиленд Есватіні Swaziland 斯威士兰 史瓦帝尼
|
||||
TA تريستان دا كونا Трыстан-да-Кунья Тристан да Куня Tristan da Cunha Tristan da Cunha Tristan da Cunha Tristan da Cunha Tristan da Cunha Tristan da Cunha Τριστάν ντα Κούνια Tristan da Cunha Tristan da Cunha Tristán de Acuña Tristan da Cunha Tristan da Cunha تریستان دا کونا Tristan da Cunha Tristan de Cunha Tristan da Cunha Tristan da Cunha Tristan da Cunha Tristan da Cunha Tristán da Cunha טריסטן דה קונה Tristan da Cunha Tristan da Cunha Tristan da Cunha Tristan da Cunha Tristan da Cunha トリスタン・ダ・クーニャ 트리스탄다쿠나 Tristan da Cunha Тристан-да-Кунья Tristanas da Kunja Tristana da Kuņas salas Тристан да Куња ട്രിസ്റ്റൻ ഡ കൂന Tristan da Cunha Tristan da Cunha Tristan da Cunha Tristan da Cunha Tristan da Cunha Tristão da Cunha Tristão da Cunha Tristan da Cunha Тристан-да-Кунья Tristan da Cunha Tristan da Cunha Tristan-da-Kuna Тристан да Куња Tristan da Cunha Tristan da Cunha ทริสตันดาคูนา Tristan da Cunha Tristan da Cunha Трістан-да-Кунья Tristan da Cunha 特里斯坦-达库尼亚群岛 特里斯坦達庫尼亞群島
|
||||
TC جزر توركس وكايكوس Астравы Цёркс і Кайкас острови Търкс и Кайкос Inizi Turks ha Caicos Ostrva Turks i Kaikos Illes Turks i Caicos Turks a Caicos Turks- og Caicosøerne Turks- und Caicosinseln Νήσοι Τερκς και Κάικος Turks & Caicos Islands Turks & Caicos Islands Islas Turcas y Caicos Turks ja Caicos Turk eta Caico uharteak جزایر تورکس و کایکوس Turks- ja Caicossaaret Turks & Caicos Islands Îles Turques-et-Caïques Îles Turques-et-Caïques Oileáin na dTurcach agus Caicos Na h-Eileanan Turcach is Caiceo Illas Turks e Caicos איי טרקס וקייקוס Otoci Turks i Caicos Turks- és Caicos-szigetek Kepulauan Turks dan Caicos Turks- og Caicoseyjar Isole Turks e Caicos タークス・カイコス諸島 터크스 케이커스 제도 Turks & Caicos Islands Түркс жана Кайкос аралдары Terkso ir Kaikoso Salos Tērksas un Kaikosas salas Острови Туркс и Каикос ടർക്ക്സും കെയ്ക്കോ ദ്വീപുകളും Turks- og Caicosøyene Turks- en Caicoseilanden Turks- og Caicosøyane Turks & Caicos Islands Turks i Caicos Ilhas Turcas e Caicos Ilhas Turcas e Caicos Insulele Turks și Caicos о-ва Тёркс и Кайкос Turks a Caicos Otoki Turks in Caicos Ishujt Turks dhe Kaikos Острва Туркс и Каикос Turks- och Caicosöarna Visiwa vya Turks na Caicos หมู่เกาะเติกส์และหมู่เกาะเคคอส Turks ve Caicos Adaları Теркс һәм Кайкос утраулары Острови Теркс і Кайкос Quần đảo Turks và Caicos 特克斯和凯科斯群岛 土克斯及開科斯群島
|
||||
TD تشاد Чад Чад Tchad Čad Txad Čad Tchad Tschad Τσαντ Chad Ĉado Chad Tšaad Txad چاد Tšad Chad Tchad Tchad Sead An t-Seàd Chad צ׳אד Čad Csád Cad Tsjad Ciad チャド 차드 Chad Чад Čadas Čada Чад ഛാഡ് Tsjad Tsjaad Tsjad Chad Czad Chade Chade Ciad Чад Čad Čad Çad Чад Tchad Chad ชาด Çad Чад Чад Chad 乍得 查德
|
||||
TF الأقاليم الجنوبية الفرنسية Французскія паўднёвыя тэрыторыі Френски южни територии Douaroù aostral Frañs Francuske Južne Teritorije Territoris Australs Francesos Francouzská jižní území De Franske Besiddelser i Det Sydlige Indiske Ocean og Antarktis Französische Süd- und Antarktisgebiete Γαλλικά Νότια Εδάφη French Southern Territories French Southern Territories Territorios Australes Franceses Prantsuse Lõunaalad Hegoaldeko lurralde frantsesak سرزمینهای جنوب فرانسه Ranskan eteläiset alueet French Southern Territories Terres australes françaises Terres australes françaises Críocha Francacha Dheisceart an Domhain Ranntairean a Deas na Frainge Territorios Austrais Franceses הטריטוריות הדרומיות של צרפת Francuski južni i antarktički teritoriji Francia Déli Területek Wilayah Selatan Perancis Frönsku suðlægu landsvæðin Terre australi francesi 仏領極南諸島 프랑스 남부 지방 French Southern Territories Франциянын Түштүктөгү аймактары Prancūzijos Pietų sritys Francijas Dienvidjūru teritorija Француски Јужни Територии ഫ്രഞ്ച് ദക്ഷിണ ഭൂപ്രദേശം De franske sørterritorier Franse Gebieden in de zuidelijke Indische Oceaan Dei franske sørterritoria French Southern Territories Francuskie Terytoria Południowe i Antarktyczne Territórios Franceses do Sul Territórios Franceses do Sul Teritoriile Australe și Antarctice Franceze Французские Южные территории Francúzske južné a antarktické územia Francosko južno ozemlje Territoret Jugore Franceze Француске Јужне Територије Franska sydterritorierna Himaya za Kusini za Kifaranza เฟรนช์เซาเทิร์นเทร์ริทอรีส์ Fransız Güney Toprakları Франциянең Көньяк Территорияләре Французькі Південні Території Lãnh thổ phía Nam Thuộc Pháp 法属南部领地 法屬南部屬地
|
||||
TG توغو Тога Того Togo Togo Togo Togo Togo Togo Τόγκο Togo Togolo Togo Togo Togo توگو Togo Togo Togo Togo Tóga Togo Togo טוגו Togo Togo Togo Tógó Togo トーゴ 토고 Togo Того Togas Togo Того ടോഗോ Togo Togo Togo Togo Togo Togo Togo Togo Того Togo Togo Togo Того Togo Togo โตโก Togo Того Того Togo 多哥 多哥
|
||||
TH تايلاند Тайланд Тайланд Thailand Tajland Tailàndia Thajsko Thailand Thailand Ταϊλάνδη Thailand Tajlando Tailandia Tai Thailandia تایلند Thaimaa Thailand Thaïlande Thaïlande an Téalainn Dùthaich nan Tàidh Tailandia תאילנד Tajland Thaiföld Thailand Taíland Thailandia タイ 태국 Thailand Тайланд Tailandas Taizeme Тајланд തായ്ലാൻഡ് Thailand Thailand Thailand Thailand Tajlandia Tailândia Tailândia Thailanda Таиланд Thajsko Tajska Tajlandë Тајланд Thailand Tailandi ไทย Tayland Тайланд Таїланд Thái Lan 泰国 泰國
|
||||
TJ طاجيكستان Таджыкістан Таджикистан Tadjikistan Tadžikistan Tadjikistan Tádžikistán Tadsjikistan Tadschikistan Τατζικιστάν Tajikistan Taĝikujo Tayikistán Tadžikistan Tajikistan تاجیکستان Tadžikistan Tajikistan Tadjikistan Tadjikistan an Táidsíceastáin Taidigeastàn Taxiquistán טג׳יקיסטן Tadžikistan Tádzsikisztán Tajikistan Tadsjikistan Tagikistan タジキスタン 타지키스탄 Tajikistan Тажикстан Tadžikija Tadžikistāna Таџикистан താജിക്കിസ്ഥാൻ Tadsjikistan Tadzjikistan Tadsjikistan Tajikistan Tadżykistan Tadjiquistão Tadjiquistão Tadjikistan Таджикистан Tadžikistan Tadžikistan Taxhikistan Таџикистан Tadzjikistan Tajikistani ทาจิกิสถาน Tacikistan Таҗикстан Таджикистан Tajikistan 塔吉克斯坦 塔吉克
|
||||
TK توكيلو Такелау Токелау Tokelau Tokelau Tokelau Tokelau Tokelau Tokelau Τοκελάου Tokelau Tokelau Tokelau Tokelau Tokelau توکلائو Tokelau Tokelau Tokelau Tokelau Tócalá Tokelau Tokelau טוקלאו Tokelau Tokelau Tokelau Tókelá Tokelau トケラウ 토켈라우 Tokelau Токелау Tokelau Tokelau Токелау ടോക്കെലൂ Tokelau Tokelau Tokelau Tokelau Tokelau Tokelau Tokelau Tokelau Токелау Tokelau Tokelau Tokelau Токелау Tokelau Tokelau โตเกเลา Tokelau Токелау Токелау Tokelau 托克劳 托克勞群島
|
||||
TL تيمور - ليشتي Тымор-Лешці Източен Тимор Timor-Leste Istočni Timor Timor Oriental Východní Timor Timor-Leste Timor-Leste Τιμόρ-Λέστε Timor-Leste Timor-Leste Timor-Leste Ida-Timor Ekialdeko Timor تیمور-لسته Itä-Timor Timor-Leste Timor oriental Timor oriental Tíomór Thoir Timor-Leste Timor Leste טימור-לסטה Timor-Leste Kelet-Timor Timor Leste Tímor-Leste Timor Est 東ティモール 동티모르 Timor-Leste Тимор-Лесте Rytų Timoras Austrumtimora Источен Тимор (Тимор Лесте) തിമോർ-ലെസ്റ്റെ Øst-Timor Oost-Timor Timor-Leste (Aust-Timor) Timor-Leste Timor Wschodni Timor-Leste Timor-Leste Timor-Leste Восточный Тимор Východný Timor Timor-Leste Timor-Leste Тимор-Лесте (Источни Тимор) Östtimor Timor-Leste ติมอร์-เลสเต Timor-Leste Тимор-Лесте Тімор-Лешті Timor-Leste 东帝汶 東帝汶
|
||||
TM تركمانستان Туркменістан Туркменистан Turkmenistan Turkmenistan Turkmenistan Turkmenistán Turkmenistan Turkmenistan Τουρκμενιστάν Turkmenistan Turkmenujo Turkmenistán Türkmenistan Turkmenistan ترکمنستان Turkmenistan Turkmenistan Turkménistan Turkménistan an Tuircméanastáin Turcmanastàn Turkmenistán טורקמניסטן Turkmenistan Türkmenisztán Turkimenistan Túrkmenistan Turkmenistan トルクメニスタン 투르크메니스탄 Turkmenistan Түркмөнстан Turkmėnistanas Turkmenistāna Туркменистан തുർക്ക്മെനിസ്ഥാൻ Turkmenistan Turkmenistan Turkmenistan Turkmenistan Turkmenistan Turcomenistão Turcomenistão Turkmenistan Туркменистан Turkménsko Turkmenistan Turkmenistan Туркменистан Turkmenistan Turkmenistan เติร์กเมนิสถาน Türkmenistan Төркмәнстан Туркменістан Turkmenistan 土库曼斯坦 土庫曼
|
||||
TN تونس Туніс Тунис Tunizia Tunis Tunísia Tunisko Tunesien Tunesien Τυνησία Tunisia Tunizio Túnez Tuneesia Tunisia تونس Tunisia Tunisia Tunisie Tunisie an Túinéis Tuinisea Tunisia תוניסיה Tunis Tunézia Tunisia Túnis Tunisia チュニジア 튀니지 Tunisia Тунис Tunisas Tunisija Тунис ടുണീഷ്യ Tunisia Tunesië Tunisia Tunisia Tunezja Tunísia Tunísia Tunisia Тунис Tunisko Tunizija Tunizi Тунис Tunisien Tunisia ตูนิเซีย Tunus Тунис Туніс Tunisia 突尼斯 突尼西亞
|
||||
TO تونغا Тонга Тонга Tonga Tonga Tonga Tonga Tonga Tonga Τόνγκα Tonga Tongo Tonga Tonga Tonga تونگا Tonga Tonga Tonga Tonga Tonga Tonga Tonga טונגה Tonga Tonga Tonga Tonga Tonga トンガ 통가 Tonga Тонга Tonga Tonga Тонга ടോംഗ Tonga Tonga Tonga Tonga Tonga Tonga Tonga Tonga Тонга Tonga Tonga Tonga Тонга Tonga Tonga ตองกา Tonga Тонга Тонґа Tonga 汤加 東加
|
||||
TR تركيا Турцыя Турция Turkia Turska Turquia Turecko Tyrkiet Türkei Τουρκία Turkey Turkujo Turquía Türgi Turkia ترکیه Turkki Turkey Turquie Turquie an Tuirc An Tuirc Turquía טורקיה Turska Törökország Turki Tyrkland Turchia トルコ 터키 Turkey Түркия Turkija Turcija Турција തുർക്കി Tyrkia Turkije Tyrkia Turkey Turcja Turquia Turquia Turcia Турция Turecko Turčija Turqi Турска Turkiet Uturuki ตุรกี Türkiye Төркия Туреччина Thổ Nhĩ Kỳ 土耳其 土耳其
|
||||
TT ترينيداد وتوباغو Трынідад і Табага Тринидад и Тобаго Trinidad ha Tobago Trinidad i Tobago Trinitat i Tobago Trinidad a Tobago Trinidad og Tobago Trinidad und Tobago Τρινιντάντ και Τομπάγκο Trinidad & Tobago Trinidado kaj Tobago Trinidad y Tobago Trinidad ja Tobago Trinidad eta Tobago ترینیداد و توباگو Trinidad ja Tobago Trinidad & Tobago Trinité-et-Tobago Trinité-et-Tobago Oileán na Tríonóide agus Tobága Trianaid agus Tobago Trinidad e Tobago טרינידד וטובגו Trinidad i Tobago Trinidad és Tobago Trinidad dan Tobago Trínidad og Tóbagó Trinidad e Tobago トリニダード・トバゴ 트리니다드 토바고 Trinidad & Tobago Тринидад жана Тобаго Trinidadas ir Tobagas Trinidāda un Tobāgo Тринидад и Тобаго ട്രിനിഡാഡും ടുബാഗോയും Trinidad og Tobago Trinidad en Tobago Trinidad og Tobago Trinidad & Tobago Trynidad i Tobago Trinidad e Tobago Trinidad e Tobago Trinidad și Tobago Тринидад и Тобаго Trinidad a Tobago Trinidad in Tobago Trinidad e Tobago Тринидад и Тобаго Trinidad och Tobago Trinidad na Tobago ตรินิแดดและโตเบโก Trinidad ve Tobago Тринидад һәм Тобаго Трінідад і Тобаґо Trinidad và Tobago 特立尼达和多巴哥 千里達及托巴哥
|
||||
TV توفالو Тувалу Тувалу Tuvalu Tuvalu Tuvalu Tuvalu Tuvalu Tuvalu Τουβαλού Tuvalu Tuvalo Tuvalu Tuvalu Tuvalu تووالو Tuvalu Tuvalu Tuvalu Tuvalu Tuvalu Tubhalu Tuvalu טובאלו Tuvalu Tuvalu Tuvalu Túvalú Tuvalu ツバル 투발루 Tuvalu Тувалу Tuvalu Tuvalu Тувалу ടുവാലു Tuvalu Tuvalu Tuvalu Tuvalu Tuvalu Tuvalu Tuvalu Tuvalu Тувалу Tuvalu Tuvalu Tuvalu Тувалу Tuvalu Tuvalu ตูวาลู Tuvalu Тувалу Тувалу Tuvalu 图瓦卢 吐瓦魯
|
||||
TW تايوان Тайвань Тайван Taiwan Tajvan Taiwan Tchaj-wan Taiwan Taiwan Ταϊβάν Taiwan Tajvano Taiwán Taiwan Taiwan تایوان Taiwan Taiwan Taïwan Taïwan an Téaváin Taidh-Bhàn Taiwán טייוואן Tajvan Tajvan Taiwan Taívan Taiwan 台湾 대만 Taiwan Тайвань Taivanas Taivāna Тајван തായ്വാൻ Taiwan Taiwan Taiwan Taiwan Tajwan Taiwan Taiwan Taiwan Тайвань Taiwan Tajvan Tajvan Тајван Taiwan Taiwan ไต้หวัน Tayvan Тайвань Тайвань Đài Loan 台湾 台灣
|
||||
TZ تنزانيا Танзанія Танзания Tanzania Tanzanija Tanzània Tanzanie Tanzania Tansania Τανζανία Tanzania Tanzanio Tanzania Tansaania Tanzania تانزانیا Tansania Tanzania Tanzanie Tanzanie an Tansáin An Tansan Tanzania טנזניה Tanzanija Tanzánia Tanzania Tansanía Tanzania タンザニア 탄자니아 Tanzania Танзания Tanzanija Tanzānija Танзанија ടാൻസാനിയ Tanzania Tanzania Tanzania Tanzania Tanzania Tanzânia Tanzânia Tanzania Танзания Tanzánia Tanzanija Tanzani Танзанија Tanzania Tanzania แทนซาเนีย Tanzanya Танзания Танзанія Tanzania 坦桑尼亚 坦尚尼亞
|
||||
UA أوكرانيا Украіна Украйна Ukraina Ukrajina Ucraïna Ukrajina Ukraine Ukraine Ουκρανία Ukraine Ukrajno Ucrania Ukraina Ukraina اوکراین Ukraina Ukraine Ukraine Ukraine an Úcráin An Ucràin Ucraína אוקראינה Ukrajina Ukrajna Ukraina Úkraína Ucraina ウクライナ 우크라이나 Ukraine Украина Ukraina Ukraina Украина ഉക്രെയ്ൻ Ukraina Oekraïne Ukraina Ukraine Ukraina Ucrânia Ucrânia Ucraina Украина Ukrajina Ukrajina Ukrainë Украјина Ukraina Ukraine ยูเครน Ukrayna Украина Україна Ukraina 乌克兰 烏克蘭
|
||||
UG أوغندا Уганда Уганда Ouganda Uganda Uganda Uganda Uganda Uganda Ουγκάντα Uganda Ugando Uganda Uganda Uganda اوگاندا Uganda Uganda Ouganda Ouganda Uganda Uganda Uganda אוגנדה Uganda Uganda Uganda Úganda Uganda ウガンダ 우간다 Uganda Уганда Uganda Uganda Уганда ഉഗാണ്ട Uganda Oeganda Uganda Uganda Uganda Uganda Uganda Uganda Уганда Uganda Uganda Ugandë Уганда Uganda Uganda ยูกันดา Uganda Уганда Уганда Uganda 乌干达 烏干達
|
||||
UM جزر الولايات المتحدة النائية Малыя Аддаленыя астравы ЗША Отдалечени острови на САЩ Inizi diabell ar Stadoù-Unanet Američka Vanjska Ostrva Illes Perifèriques Menors dels EUA Menší odlehlé ostrovy USA Amerikanske oversøiske øer Amerikanische Überseeinseln Απομακρυσμένες Νησίδες ΗΠΑ U.S. Outlying Islands Usonaj malgrandaj insuloj Islas menores alejadas de EE. UU. Ühendriikide hajasaared Ameriketako Estatu Batuetako Kanpoaldeko Uharte Txikiak جزایر دورافتادهٔ ایالات متحده Yhdysvaltain erillissaaret U.S. Outlying Islands Îles mineures éloignées des États-Unis Îles mineures éloignées des États-Unis Oileáin Imeallacha S.A.M. Meanbh-Eileanan Iomallach nan SA Illas Menores Distantes dos Estados Unidos האיים המרוחקים הקטנים של ארה״ב Mali udaljeni otoci SAD-a Az USA lakatlan külbirtokai Kepulauan Terluar A.S. Smáeyjar Bandaríkjanna Altre isole americane del Pacifico 合衆国領有小離島 미국령 해외 제도 U.S. Outlying Islands АКШнын сырткы аралдары Jungtinių Valstijų Mažosios Tolimosios Salos ASV Mazās Aizjūras salas Американски територии во Пацификот യു.എസ്. ദ്വീപസമൂഹങ്ങൾ USAs ytre øyer Kleine afgelegen eilanden van de Verenigde Staten USAs ytre småøyar U.S. Outlying Islands Dalekie Wyspy Mniejsze Stanów Zjednoczonych Ilhas Menores Distantes dos EUA Ilhas Menores Distantes dos EUA Insulele Îndepărtate ale S.U.A. Внешние малые о-ва (США) Menšie odľahlé ostrovy USA Stranski zunanji otoki Združenih držav Ishujt Periferikë të SHBA-së Удаљена острва САД USA:s yttre öar Visiwa Vidogo vya Nje vya Marekani หมู่เกาะรอบนอกของสหรัฐอเมริกา ABD Küçük Harici Adaları АКШ Кече Читтәге утраулары Віддалені острови США Các tiểu đảo xa của Hoa Kỳ 美国本土外小岛屿 美國本土外小島嶼
|
||||
US الولايات المتحدة Злучаныя Штаты Съединени щати Stadoù-Unanet Sjedinjene Države Estats Units Spojené státy USA Vereinigte Staaten Ηνωμένες Πολιτείες United States Usono Estados Unidos Ameerika Ühendriigid Ameriketako Estatu Batuak ایالات متحده Yhdysvallat Estados Unidos États-Unis États-Unis Stáit Aontaithe Mheiriceá Na Stàitean Aonaichte Os Estados Unidos ארצות הברית Sjedinjene Američke Države Egyesült Államok Amerika Serikat Bandaríkin Stati Uniti アメリカ合衆国 미국 Statys Unys Кошмо Штаттар Jungtinės Valstijos Amerikas Savienotās Valstis Соединети Американски Држави അമേരിക്കൻ ഐക്യനാടുകൾ USA Verenigde Staten USA АИШ Stany Zjednoczone Estados Unidos Estados Unidos Statele Unite ale Americii Соединенные Штаты Spojené štáty Združene države Amerike SHBA Сједињене Државе USA Marekani สหรัฐอเมริกา Amerika Birleşik Devletleri АКШ Сполучені Штати Hoa Kỳ 美国 美國
|
||||
UY أورغواي Уругвай Уругвай Uruguay Urugvaj Uruguai Uruguay Uruguay Uruguay Ουρουγουάη Uruguay Urugvajo Uruguay Uruguay Uruguai اروگوئه Uruguay Uruguay Uruguay Uruguay Uragua Uruguaidh O Uruguai אורוגוואי Urugvaj Uruguay Uruguay Úrúgvæ Uruguay ウルグアイ 우루과이 Uruguay Уругвай Urugvajus Urugvaja Уругвај ഉറുഗ്വേ Uruguay Uruguay Uruguay Uruguay Urugwaj Uruguai Uruguai Uruguay Уругвай Uruguaj Urugvaj Uruguai Уругвај Uruguay Uruguay อุรุกวัย Uruguay Уругвай Уруґвай Uruguay 乌拉圭 烏拉圭
|
||||
UZ أوزبكستان Узбекістан Узбекистан Ouzbekistan Uzbekistan Uzbekistan Uzbekistán Usbekistan Usbekistan Ουζμπεκιστάν Uzbekistan Uzbekujo Uzbekistán Usbekistan Uzbekistan ازبکستان Uzbekistan Uzbekistan Ouzbékistan Ouzbékistan an Úisbéiceastáin Usbagastàn Uzbekistán אוזבקיסטן Uzbekistan Üzbegisztán Uzbekistan Úsbekistan Uzbekistan ウズベキスタン 우즈베키스탄 Uzbekistan Өзбекстан Uzbekistanas Uzbekistāna Узбекистан ഉസ്ബെക്കിസ്ഥാൻ Usbekistan Oezbekistan Usbekistan Uzbekistan Uzbekistan Uzbequistão Uzbequistão Uzbekistan Узбекистан Uzbekistan Uzbekistan Uzbekistan Узбекистан Uzbekistan Uzibekistani อุซเบกิสถาน Özbekistan Үзбәкстан Узбекистан Uzbekistan 乌兹别克斯坦 烏茲別克
|
||||
VA الفاتيكان Ватыкан Ватикан Vatikan Vatikan Ciutat del Vaticà Vatikán Vatikanstaten Vatikanstadt Βατικανό Vatican City Vatikano Ciudad del Vaticano Vatikan Vatikano Hiria واتیکان Vatikaani Vatican City État de la Cité du Vatican État de la Cité du Vatican Cathair na Vatacáine Cathair na Bhatacain Cidade do Vaticano הוותיקן Vatikanski Grad Vatikán Vatikan Vatíkanið Città del Vaticano バチカン市国 바티칸 시국 Vatican City Ватикан Vatikano Miesto Valstybė Vatikāns Ватикан വത്തിക്കാൻ Vatikanstaten Vaticaanstad Vatikanstaten Vatican City Watykan Cidade do Vaticano Cidade do Vaticano Statul Cetății Vaticanului Ватикан Vatikán Vatikan Vatikan Ватикан Vatikanstaten Mji wa Vatican นครวาติกัน Vatikan Vatican City Ватикан Thành Vatican 梵蒂冈 梵蒂岡
|
||||
VC سانت فنسنت وجزر غرينادين Сент-Вінсент і Грэнадзіны Сейнт Винсънт и Гренадини Sant Visant hag ar Grenadinez Sveti Vinsent i Grenadin Saint Vincent i les Grenadines Svatý Vincenc a Grenadiny Saint Vincent og Grenadinerne St. Vincent und die Grenadinen Άγιος Βικέντιος και Γρεναδίνες St. Vincent & Grenadines Sent-Vincento kaj la Grenadinoj San Vicente y las Granadinas Saint Vincent ja Grenadiinid Saint Vincent eta Grenadinak سنت وینسنت و گرنادین Saint Vincent ja Grenadiinit St. Vincent & Grenadines Saint-Vincent-et-les-Grenadines Saint-Vincent-et-les-Grenadines San Uinseann agus na Greanáidíní Naomh Bhionsant agus Eileanan Greanadach San Vicente e As Granadinas סנט וינסנט והגרנדינים Sveti Vincent i Grenadini Saint Vincent és a Grenadine-szigetek Saint Vincent dan Grenadine Sankti Vinsent og Grenadíneyjar Saint Vincent e Grenadine セントビンセント及びグレナディーン諸島 세인트빈센트그레나딘 St. Vincent & Grenadines Сент-Винсент жана Гренадиндер Šventasis Vincentas ir Grenadinai Sentvinsenta un Grenadīnas Сент Винсент и Гренадини സെന്റ് വിൻസെന്റും ഗ്രനെഡൈൻസും St. Vincent og Grenadinene Saint Vincent en de Grenadines St. Vincent og Grenadinane St. Vincent & Grenadines Saint Vincent i Grenadyny São Vicente e Granadinas São Vicente e Granadinas Saint Vincent și Grenadinele Сент-Винсент и Гренадины Svätý Vincent a Grenadíny Saint Vincent in Grenadine Shën-Vincent dhe Grenadine Сент Винсент и Гренадини S:t Vincent och Grenadinerna St. Vincent na Grenadines เซนต์วินเซนต์และเกรนาดีนส์ Saint Vincent ve Grenadinler Сент-Винсент һәм Гренадин Сент-Вінсент і Ґренадіни St. Vincent và Grenadines 圣文森特和格林纳丁斯 聖文森及格瑞那丁
|
||||
VE فنزويلا Венесуэла Венецуела Venezuela Venecuela Veneçuela Venezuela Venezuela Venezuela Βενεζουέλα Venezuela Venezuelo Venezuela Venezuela Venezuela ونزوئلا Venezuela Venezuela Venezuela Venezuela Veiniséala A’ Bheiniseala Venezuela ונצואלה Venezuela Venezuela Venezuela Venesúela Venezuela ベネズエラ 베네수엘라 Venezuela Венесуэла Venesuela Venecuēla Венецуела വെനിസ്വേല Venezuela Venezuela Venezuela Venezuela Wenezuela Venezuela Venezuela Venezuela Венесуэла Venezuela Venezuela Venezuelë Венецуела Venezuela Venezuela เวเนซุเอลา Venezuela Венесуэла Венесуела Venezuela 委内瑞拉 委內瑞拉
|
||||
VG جزر فيرجن البريطانية Брытанскія Віргінскія астравы Британски Вирджински острови Inizi Gwercʼh Breizh-Veur Britanska Djevičanska ostrva Illes Verges Britàniques Britské Panenské ostrovy De Britiske Jomfruøer Britische Jungferninseln Βρετανικές Παρθένες Νήσοι British Virgin Islands Britaj Virgulininsuloj Islas Vírgenes Británicas Briti Neitsisaared Birjina uharte britainiarrak جزایر ویرجین بریتانیا Brittiläiset Neitsytsaaret British Virgin Islands Îles Vierges britanniques Îles Vierges britanniques Oileáin Bhriotanacha na Maighdean Eileanan Breatannach na Maighdinn Illas Virxes Británicas איי הבתולה הבריטיים Britanski Djevičanski otoci Brit Virgin-szigetek Kepulauan Virgin Britania Raya Bresku Jómfrúaeyjar Isole Vergini Britanniche 英領ヴァージン諸島 영국령 버진아일랜드 British Virgin Islands Виргин аралдары (Британия) Didžiosios Britanijos Mergelių Salos Britu Virdžīnas Британски Девствени Острови ബ്രിട്ടീഷ് വെർജിൻ ദ്വീപുകൾ De britiske jomfruøyene Britse Maagdeneilanden Dei britiske Jomfruøyane British Virgin Islands Brytyjskie Wyspy Dziewicze Ilhas Virgens Britânicas Ilhas Virgens Britânicas Insulele Virgine Britanice Виргинские о-ва (Великобритания) Britské Panenské ostrovy Britanski Deviški otoki Ishujt e Virgjër Britanikë Британска Девичанска Острва Brittiska Jungfruöarna Visiwa vya Virgin, Uingereza หมู่เกาะบริติชเวอร์จิน Britanya Virjin Adaları Британия Виргин утраулары Британські Віргінські острови Quần đảo Virgin thuộc Anh 英属维尔京群岛 英屬維京群島
|
||||
VI جزر فيرجن التابعة للولايات المتحدة Амерыканскія Віргінскія астравы Американски Вирджински острови Inizi Gwercʼh ar Stadoù-Unanet Američka Djevičanska ostrva Illes Verges Nord-americanes Americké Panenské ostrovy De Amerikanske Jomfruøer Amerikanische Jungferninseln Αμερικανικές Παρθένες Νήσοι U.S. Virgin Islands Usonaj Virgulininsuloj Islas Vírgenes de EE. UU. USA Neitsisaared Birjina uharte amerikarrak جزایر ویرجین ایالات متحده Yhdysvaltain Neitsytsaaret U.S. Virgin Islands Îles Vierges des États-Unis Îles Vierges des États-Unis Oileáin Mheiriceánacha na Maighdean Eileanan na Maighdinn aig na SA Illas Virxes Estadounidenses איי הבתולה של ארצות הברית Američki Djevičanski otoci Amerikai Virgin-szigetek Kepulauan Virgin Amerika Serikat Bandarísku Jómfrúaeyjar Isole Vergini Americane 米領ヴァージン諸島 미국령 버진아일랜드 U.S. Virgin Islands Виргин аралдары (АКШ) Jungtinių Valstijų Mergelių Salos ASV Virdžīnas Американски Девствени Острови യു.എസ്. വെർജിൻ ദ്വീപുകൾ De amerikanske jomfruøyene Amerikaanse Maagdeneilanden Dei amerikanske Jomfruøyane U.S. Virgin Islands Wyspy Dziewicze Stanów Zjednoczonych Ilhas Virgens Americanas Ilhas Virgens Americanas Insulele Virgine Americane Виргинские о-ва (США) Americké Panenské ostrovy Ameriški Deviški otoki Ishujt e Virgjër të SHBA-së Америчка Девичанска Острва Amerikanska Jungfruöarna Visiwa vya Virgin, Marekani หมู่เกาะเวอร์จินของสหรัฐอเมริกา ABD Virjin Adaları АКШ Виргин утраулары Віргінські острови, США Quần đảo Virgin thuộc Mỹ 美属维尔京群岛 美屬維京群島
|
||||
VN فيتنام В’етнам Виетнам Viêt Nam Vijetnam Vietnam Vietnam Vietnam Vietnam Βιετνάμ Vietnam Vjetnamo Vietnam Vietnam Vietnam ویتنام Vietnam Vietnam Vietnam Vietnam Vítneam Bhiet-Nam Vietnam וייטנאם Vijetnam Vietnám Vietnam Víetnam Vietnam ベトナム 베트남 Vietnam Вьетнам Vietnamas Vjetnama Виетнам വിയറ്റ്നാം Vietnam Vietnam Vietnam Vietnam Wietnam Vietnã Vietnã Vietnam Вьетнам Vietnam Vietnam Vietnam Вијетнам Vietnam Vietnam เวียดนาม Vietnam Вьетнам Вʼєтнам Việt Nam 越南 越南
|
||||
VU فانواتو Вануату Вануату Vanuatu Vanuatu Vanuatu Vanuatu Vanuatu Vanuatu Βανουάτου Vanuatu Vanuatuo Vanuatu Vanuatu Vanuatu وانواتو Vanuatu Vanuatu Vanuatu Vanuatu Vanuatú Vanuatu Vanuatu ונואטו Vanuatu Vanuatu Vanuatu Vanúatú Vanuatu バヌアツ 바누아투 Vanuatu Вануату Vanuatu Vanuatu Вануату വന്വാതു Vanuatu Vanuatu Vanuatu Vanuatu Vanuatu Vanuatu Vanuatu Vanuatu Вануату Vanuatu Vanuatu Vanuatu Вануату Vanuatu Vanuatu วานูอาตู Vanuatu Вануату Вануату Vanuatu 瓦努阿图 萬那杜
|
||||
WF جزر والس وفوتونا Уоліс і Футуна Уолис и Футуна Wallis ha Futuna Ostrva Valis i Futuna Wallis i Futuna Wallis a Futuna Wallis og Futuna Wallis und Futuna Γουάλις και Φουτούνα Wallis & Futuna Valiso kaj Futuno Wallis y Futuna Wallis ja Futuna Wallis eta Futuna والیس و فوتونا Wallis ja Futuna Wallis & Futuna Wallis-et-Futuna Wallis-et-Futuna Vailís agus Futúna Uallas agus Futuna Wallis e Futuna איי ווליס ופוטונה Wallis i Futuna Wallis és Futuna Kepulauan Wallis dan Futuna Wallis- og Fútúnaeyjar Wallis e Futuna ウォリス・フツナ 왈리스-푸투나 제도 Wallis & Futuna Уоллис жана Футуна Volisas ir Futūna Volisa un Futunas salas Валис и Футуна വാലിസ് ആന്റ് ഫ്യൂച്യുന Wallis og Futuna Wallis en Futuna Wallis og Futuna Wallis & Futuna Wallis i Futuna Wallis e Futuna Wallis e Futuna Wallis și Futuna Уоллис и Футуна Wallis a Futuna Wallis in Futuna Uollis e Futuna Валис и Футуна Wallis- och Futunaöarna Wallis na Futuna วาลลิสและฟุตูนา Wallis ve Futuna Уоллис һәм Футуна Уолліс і Футуна Wallis và Futuna 瓦利斯和富图纳 瓦利斯群島和富圖那群島
|
||||
WS ساموا Самоа Самоа Samoa Samoa Samoa Samoa Samoa Samoa Σαμόα Samoa Samoo Samoa Samoa Samoa ساموآ Samoa Samoa Samoa Samoa Samó Samotha Samoa סמואה Samoa Szamoa Samoa Samóa Samoa サモア 사모아 Samoa Самоа Samoa Samoa Самоа സമോവ Samoa Samoa Samoa Samoa Samoa Samoa Samoa Samoa Самоа Samoa Samoa Samoa Самоа Samoa Samoa ซามัว Samoa Самоа Самоа Samoa 萨摩亚 薩摩亞
|
||||
XK كوسوفو Косава Косово Kosovo Kosovo Kosovo Kosovo Kosovo Kosovo Κοσσυφοπέδιο Kosovo Kosovo Kosovo Kosovo Kosovo کوزوو Kosovo Kosovo Kosovo Kosovo an Chosaiv A’ Chosobho Kosovo קוסובו Kosovo Koszovó Kosovo Kósóvó Kosovo コソボ 코소보 Kosovo Косово Kosovas Kosova Косово കൊസോവൊ Kosovo Kosovo Kosovo Kosovo Kosowo Kosovo Kosovo Kosovo Косово Kosovo Kosovo Kosovë Косово Kosovo Kosovo โคโซโว Kosova Косово Косово Kosovo 科索沃 科索沃
|
||||
YE اليمن Емен Йемен Yemen Jemen Iemen Jemen Yemen Jemen Υεμένη Yemen Jemeno Yemen Jeemen Yemen یمن Jemen Yemen Yémen Yémen Éimin An Eaman O Iemen תימן Jemen Jemen Yaman Jemen Yemen イエメン 예멘 Yemen Йемен Jemenas Jemena Јемен യെമൻ Jemen Jemen Jemen Yemen Jemen Iêmen Iêmen Yemen Йемен Jemen Jemen Jemen Јемен Jemen Yemeni เยเมน Yemen Йәмән Ємен Yemen 也门 葉門
|
||||
YT مايوت Маёта Майот Mayotte Majote Mayotte Mayotte Mayotte Mayotte Μαγιότ Mayotte Majoto Mayotte Mayotte Mayotte مایوت Mayotte Mayotte Mayotte Mayotte Mayotte Mayotte Mayotte מאיוט Mayotte Mayotte Mayotte Mayotte Mayotte マヨット 마요트 Mayotte Майотта Majotas Majota Мајот മയോട്ടി Mayotte Mayotte Mayotte Mayotte Majotta Mayotte Mayotte Mayotte Майотта Mayotte Mayotte Majotë Мајот Mayotte Mayotte มายอต Mayotte Майотта Майотта Mayotte 马约特 馬約特島
|
||||
ZA جنوب أفريقيا Паўднёва-Афрыканская Рэспубліка Южна Африка Suafrika Južnoafrička Republika República de Sud-àfrica Jihoafrická republika Sydafrika Südafrika Νότια Αφρική South Africa Sud-Afriko Sudáfrica Lõuna-Aafrika Vabariik Hegoafrika افریقای جنوبی Etelä-Afrikka South Africa Afrique du Sud Afrique du Sud an Afraic Theas Afraga a Deas Suráfrica דרום אפריקה Južnoafrička Republika Dél-afrikai Köztársaság Afrika Selatan Suður-Afríka Sudafrica 南アフリカ 남아프리카 South Africa Түштүк-Африка Республикасы Pietų Afrika Dienvidāfrikas Republika Јужноафриканска Република ദക്ഷിണാഫ്രിക്ക Sør-Afrika Zuid-Afrika Sør-Afrika South Africa Republika Południowej Afryki África do Sul África do Sul Africa de Sud Южно-Африканская Республика Južná Afrika Južnoafriška republika Afrika e Jugut Јужноафричка Република Sydafrika Afrika Kusini แอฟริกาใต้ Güney Afrika Көньяк Африка Південно-Африканська Республіка Nam Phi 南非 南非
|
||||
ZM زامبيا Замбія Замбия Zambia Zambija Zàmbia Zambie Zambia Sambia Ζάμπια Zambia Zambio Zambia Sambia Zambia زامبیا Sambia Zambia Zambie Zambie an tSaimbia Sàimbia Zambia זמביה Zambija Zambia Zambia Sambía Zambia ザンビア 잠비아 Zambia Замбия Zambija Zambija Замбија സാംബിയ Zambia Zambia Zambia Zambia Zambia Zâmbia Zâmbia Zambia Замбия Zambia Zambija Zambi Замбија Zambia Zambia แซมเบีย Zambiya Замбия Замбія Zambia 赞比亚 尚比亞
|
||||
ZW زيمبابوي Зімбабвэ Зимбабве Zimbabwe Zimbabve Zimbàbue Zimbabwe Zimbabwe Simbabwe Ζιμπάμπουε Zimbabwe Zimbabvo Zimbabue Zimbabwe Zimbabwe زیمبابوه Zimbabwe Zimbabwe Zimbabwe Zimbabwe an tSiombáib An t-Sìombab Zimbabwe זימבבואה Zimbabve Zimbabwe Zimbabwe Simbabve Zimbabwe ジンバブエ 짐바브웨 Zimbabwe Зимбабве Zimbabvė Zimbabve Зимбабве സിംബാബ്വേ Zimbabwe Zimbabwe Zimbabwe Zimbabwe Zimbabwe Zimbábue Zimbábue Zimbabwe Зимбабве Zimbabwe Zimbabve Zimbabve Зимбабве Zimbabwe Zimbabwe ซิมบับเว Zimbabve Зимбабве Зімбабве Zimbabwe 津巴布韦 辛巴威
|
|
@ -1,40 +0,0 @@
|
||||
# List of emojis separated with newline used in on-screen keyboard
|
||||
# Only top 38 will be used
|
||||
🎉
|
||||
👀
|
||||
✌️
|
||||
👉
|
||||
👌
|
||||
👍
|
||||
👎
|
||||
👏
|
||||
❤️
|
||||
💔
|
||||
💯
|
||||
🔥
|
||||
😁
|
||||
😂
|
||||
😄
|
||||
😅
|
||||
😉
|
||||
☺️
|
||||
😋
|
||||
🤔
|
||||
😍
|
||||
😎
|
||||
😏
|
||||
😑
|
||||
😒
|
||||
😔
|
||||
😕
|
||||
😘
|
||||
😜
|
||||
😞
|
||||
😢
|
||||
😩
|
||||
😪
|
||||
😭
|
||||
😳
|
||||
😴
|
||||
🙌
|
||||
🙏
|
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 106 KiB |
@ -26,4 +26,7 @@
|
||||
<color min="50 50 50"
|
||||
max="100 100 100" />
|
||||
|
||||
<!-- How much time in milliseconds before the particle is fully faded out -->
|
||||
<fadeout time="1000" />
|
||||
|
||||
</particles>
|
||||
|