Tetris (iOS)

Excel Spreadsheet
An Excel spreadsheet containing all of the game's text, along with some notes for the translator. The game never uses any text from this file.

Unused Text
[default]

DummyProperty1 = 1 DummyProperty2 = 2 DummyProperty3 = 3
 * GENERAL


 * KEYBOARD
 * The Blast virtual key names can be found in header file "Key.h"
 * The Blast virtual key names can be found in header file "Key.h"


 * OS key code to Blast virtual keys.
 * Maps OS key codes to Blast virtual keys for extra keys not normalized by the OS.
 * Some devices provides extra-keys that do not map to any OS virtual key code. For
 * example, J2ME only defines few numpad virtual keys. Some J2ME devices has full
 * QWERTY keyboards and the letters do not have any OS virtual key mapping. In
 * such case, Blast has to provide the correct mapping.
 * Multiple key codes can map to the same VK. For example if the device sends
 * differents key code if the modifier keys are pressed or if the keycode sent
 * for the pressed state is different than the keycode sent for the release state.
 * Format must be: keyCodeValue = virtualKeyName
 * [devices: HTC544]
 * 8234 = kLetterA ; Key code sent when key 'A' is pressed.
 * 4328 = kLetterA ; Key code sent when key 'A, is released.
 * 3242 = kLetterA ; Key code sent when keys 'Shift' and 'A' are pressed.
 * [devices: HTC544]
 * 8234 = kLetterA ; Key code sent when key 'A' is pressed.
 * 4328 = kLetterA ; Key code sent when key 'A, is released.
 * 3242 = kLetterA ; Key code sent when keys 'Shift' and 'A' are pressed.
 * 3242 = kLetterA ; Key code sent when keys 'Shift' and 'A' are pressed.


 * Blast virtual keys meta data for text edition and game help text.
 * It is possible to embeds meta data associated with a virtual key. The meta
 * data is used for text edition if the OS does not provide proper support. The
 * following fields are recongnized.
 * char:  The list of character associated with the key.
 * shift: The list of character associated with the key when the shift key is pressed.
 * alt:   The list of character associated with the key when the alt key is pressed.
 * ctrl:  The list of character associated with the key when the ctrl key is pressed.
 * fn;    The list of character associated with the key when the fn key is pressed.
 * If a value is not defined, the field can be empty, tail values can be ommited. In the
 * list, if the key represents a number, it must be first, then letters and finally
 * symbols.
 * Encode any non-ASCII characters using the 16-bits char C++ notation. (\x3AF2)
 * Format must be: virtualKeyName = char,shift,alt,ctrl,fn
 * The Blast virtual key names can be found in file "Key.cpp"
 * [platforms: Win32]
 * kDigit2 = 2,",\x010F
 * kLetterA = a,A
 * [devices:VX7000, VX8000, VX8100]
 * kNumPad0 = 0
 * kNumpad2 = 2abc,2ABC
 * [devices:BB8100]
 * kLetterQ = qw,QW,!
 * kLetterE = 1er,1ER
 * kLetterT = 2ty,2TY
 * kLetterU = 3ui,3UI
 * kLetterO = op,OP,.
 * [devices:VX7000, VX8000, VX8100]
 * kNumPad0 = 0
 * kNumpad2 = 2abc,2ABC
 * [devices:BB8100]
 * kLetterQ = qw,QW,!
 * kLetterE = 1er,1ER
 * kLetterT = 2ty,2TY
 * kLetterU = 3ui,3UI
 * kLetterO = op,OP,.
 * kLetterO = op,OP,.

EAMCore.ini is almost entirely comprised of commented out text.


 * WARNING !!!                                                                        ;
 * If you modify the local version of this file (located in TetrisApp\dev\data\Assets\GameDesignerConstants) and submit it on P4,           ;
 * please inform Macaron so that he can upload the latest revision of the file on the server.                                               ;
 * Otherwise, since the game always downloads and uses the version of GameDesignerConstants.ini located on the server at game launch,       ;
 * it won't use the local GameDesignerConstants.ini file where local modifications are, which will be VERY misleading if someone wants to do ;
 * some tests by modifying this file...                                                                                                     ;
 * Otherwise, since the game always downloads and uses the version of GameDesignerConstants.ini located on the server at game launch,       ;
 * it won't use the local GameDesignerConstants.ini file where local modifications are, which will be VERY misleading if someone wants to do ;
 * some tests by modifying this file...                                                                                                     ;

This warning for developers is found in GameDesignerConstants.ini.

; Put comment here to describe more exactly where is the planet identified by this ID: EX First Galaxy, Second Planet ; Put comment here to describe more exactly where is the planet identified by this ID: EX First Galaxy, Second Planet ; Put comment here to describe more exactly where is the planet identified by this ID: EX First Galaxy, Second Planet ; The 2 following fields are additive, meaning that if you enter "1" in the hour field and "120" in the minutes field, the total cooldown time will be 1h + 2h = 3 hours

In the same file, there are also a few developer comments.

Perl Script
A Perl script, stored in lang_plist_maker_script_.pl. It was likely used to split the Excel spreadsheet (see above) into multiple language files.


 * 1) !/usr/bin/perl -w


 * 1) Requires Spreadsheed::ParseExcel      http://search.cpan.org/~kwitknr/Spreadsheet-ParseExcel-0.2603/ParseExcel.pm     INSTALL LAST
 * 2) Requires Crypt::RC4                   http://www.perl.org/CPAN/authors/id/S/SI/SIFUKURT/Crypt-RC4-2.02.tar.gz
 * 3) Requires Digest::Perl::MD5            http://www.perl.org/CPAN/authors/id/D/DE/DELTA/Digest-Perl-MD5-1.8.tar.gz
 * 4) Requires IO::Scalar                   http://search.cpan.org/~dskoll/IO-stringy-2.110/lib/IO/Scalar.pm
 * 5) Requires OLE::Storage_Lite            http://search.cpan.org/~jmcnamara/OLE-Storage_Lite-0.19/lib/OLE/Storage_Lite.pm

use strict; use Switch; use Spreadsheet::ParseExcel;

my $parser  = Spreadsheet::ParseExcel->new; my $workbook = $parser->parse('EBISU_Strings_with_ID.xls');

if ( !defined $workbook ) { die $parser->error, ".\n"; }

print "FILE :", $workbook->{File}, "\n"; print "COUNT :", $workbook->{SheetCount}, "\n"; print "AUTHOR:", $workbook->{Author}, "\n";

open(my $arrFileHandle, ">:utf8", "EBISU_StringExport_Array.h") or die "EBISU_StringExport_Array.h $!"; open(my $enumFileHandle, ">:utf8", "EBISU_StringExport_Defines.h") or die "EBISU_StringExport_Defines.h $!";

my $time = localtime(time); print $arrFileHandle "// This file was auto-generated on: ", $time; print $arrFileHandle "\n\n#ifndef __EBISU_STRINGEXPORT_ARRAY_H__\n"; print $arrFileHandle "#define __EBISU_STRINGEXPORT_ARRAY_H__\n"; print $arrFileHandle "NSString * const cKeyArray[] = {\n";
 * 1) Print headers for Array file.

print $enumFileHandle "// This file was auto-generated on: ", $time; print $enumFileHandle "\n\n#ifndef __EBISU_STRINGEXPORT_DEFINES_H__\n"; print $enumFileHandle "#define __EBISU_STRINGEXPORT_DEFINES_H__\n"; print $enumFileHandle "typedef enum {\n";
 * 1) Print header for Defines file

my @languages = ; my @fileHandles = ;

my $worksheet = $workbook->{Worksheet}[0]; my $worksheetName = $worksheet->get_name; print "- SHEET:", $worksheet->{Name}, "\n";

my ( $col_min, $col_max ) = $worksheet->col_range; my ( $row_min, $row_max ) = $worksheet->row_range;
 * 1) grab the language names out of this worksheet, and initialize the plists

my $itt = 0;

for my $col ( $col_min .. $col_max ) { my $cell = $worksheet->get_cell( $row_min, $col ); if( !defined($cell)) {   	print "Undefined cell at Row: ", $row_min, " Col: ", $col, "\n"; }   my $val = $cell->value; if( $val && $val ne '' && $val ne 'String ID' && $val ne 'English Status' && $val ne 'Comments' && $val ne 'Max Length') { print "Initializing  = ", $val, "\n";

$languages[$itt] = $val;

my $fileName = "$val.plist";

print "Opening file, ", $fileName; open($fileHandles[$itt], ">:utf8", $fileName) or die "$fileName: $!"; my $handle = $fileHandles[$itt]; print $handle "<!DOCTYPE plist PUBLIC '-//Apple Computer//DTD PLIST 1.0//EN' 'http://www.apple.com/DTDs/PropertyList-1.0.dtd'> ";

$itt++;

} }

print "\n";

print "Parsing worksheet:  ", $worksheetName, "\n";

my $didUpdateArrayAndEnumFiles = 0;

for my $col ( $col_min .. $col_max ) {

my $testCell = $worksheet->get_cell( $row_min, $col ); my $colTitle = $testCell->value; if( $colTitle && $colTitle ne '' && $colTitle ne 'String ID' && $colTitle ne 'English Status' && $colTitle ne 'Comments' && $colTitle ne 'Max Length') {

my $index = 0; print "Column Title: ", $colTitle, "\n";

while($languages[$index] ne $colTitle) { #print "Language: ", $languages[$index], " ", $index, "\n"; $index++; }

my $fileHandle = $fileHandles[$index];

for my $row ( ($row_min + 1) .. $row_max ) {

my $keyCell = $worksheet->get_cell( $row, $col_min ); #keys must be in the leftmost column next unless $keyCell; my $valueCell = $worksheet->get_cell( $row, $col ); next unless $valueCell;

my $key = $keyCell->value; my $value = $valueCell->value;

$value =~ s//@/g;

if($key ne '') { print $fileHandle " $key $value \n";

if($didUpdateArrayAndEnumFiles == 0) { #print to array and enum files print $arrFileHandle "   [$key]          = @\"$key\",\n"; print $enumFileHandle "   $key,\n"; }           }        }        $didUpdateArrayAndEnumFiles = 1; } }

print $arrFileHandle "};"; print $arrFileHandle "\n#endif\n";

print $enumFileHandle "} eStringKey;"; print $enumFileHandle "\n#endif\n";

for my $handle ( @fileHandles ) {

print $handle " "; close $handle;

}