paulo@0: #include "ljlocale.h" paulo@0: #include paulo@0: #include paulo@0: paulo@0: paulo@0: static const FourCCLocaleEntry *curLocale = englishLocale; paulo@0: paulo@0: void ljSetLocale(const FourCCLocaleEntry *locale) { paulo@0: if (locale) { paulo@0: curLocale = locale; paulo@0: } paulo@0: } paulo@0: paulo@0: static const FourCCLocaleEntry *ljGetFourCCEntry(unsigned int i) { paulo@0: const FourCCLocaleEntry *base = curLocale; paulo@0: paulo@0: for(; base->code.i != 0; ++base) { paulo@0: if (base->code.i == i) { paulo@0: return base; paulo@0: } paulo@0: } paulo@0: return NULL; paulo@0: } paulo@0: paulo@0: const char *ljGetFourCCName(FourCC i) { paulo@0: const FourCCLocaleEntry *ent = ljGetFourCCEntry(i.i); paulo@0: return ent ? ent->name : NULL; paulo@0: } paulo@0: paulo@0: const char *ljGetFourCCDesc(FourCC i) { paulo@0: const FourCCLocaleEntry *ent = ljGetFourCCEntry(i.i); paulo@0: return ent ? ent->desc : NULL; paulo@0: } paulo@0: paulo@0: const FourCCLocaleEntry englishLocale[] = { paulo@0: /* Page names */ paulo@0: /* omitted */ paulo@0: paulo@0: /* Option names */ paulo@0: {{"gimm"}, "Gimmick", paulo@0: "Goal or other game mode" }, paulo@0: {{"pfw"}, "Well width", paulo@0: "Amount of space to build in" }, paulo@0: {{"pfh"}, "Well height", paulo@0: "Amount of space to build in" }, paulo@0: {{"vzsp"}, "Enter above ceiling", paulo@0: "Pieces start below or above top of well" }, paulo@0: {{"spdc"}, "Speed curve", paulo@0: "Controls speed of falling piece and delays" }, paulo@0: {{"are"}, "Max entry delay", paulo@0: "Time from lockdown to next piece entry" }, paulo@0: {{"piec"}, "Piece set", paulo@0: "Which pieces will be used" }, paulo@0: {{"rand"}, "Randomizer", paulo@0: "How the pieces are shuffled" }, paulo@0: {{"hold"}, "Hold piece", paulo@0: "Press Hold to save a piece for later" }, paulo@0: {{"rots"}, "Rotation system", paulo@0: "How pieces turn and react to walls" }, paulo@0: {{"upkl"}, "Floor kicks", paulo@0: "Times each piece can rotate upward" }, paulo@0: {{"srk"}, "Sub-row kicks", paulo@0: "" }, paulo@0: {{"lock"}, "Lockdown", paulo@0: "Start of time when a piece slides around" }, paulo@0: {{"sldt"}, "Lock delay", paulo@0: "Amount of time a piece can slide around" }, paulo@0: {{"deep"}, "Deep drop", paulo@0: "Hard drop past blocks in the well" }, paulo@0: {{"clrd"}, "Line clear delay", paulo@0: "Time for cleared lines to disappear" }, paulo@0: {{"grav"}, "Clear gravity", paulo@0: "How blocks above a cleared line fall" }, paulo@0: {{"glue"}, "Gluing", paulo@0: "How blocks stick together" }, paulo@0: {{"lsco"}, "Line scoring", paulo@0: "Points awarded for lines" }, paulo@0: {{"dsco"}, "Drop scoring", paulo@0: "Points awarded for fast play (Up/Down)" }, paulo@0: {{"tspn"}, "T-spin detection", paulo@0: "Detect turning a piece into a tight space" }, paulo@0: {{"garb"}, "Garbage", paulo@0: "Blocks added to the bottom of the well" }, paulo@0: {{"dasd"}, "Max sideways delay", paulo@0: "Hold left/right this long to move fast" }, paulo@0: {{"dass"}, "Sideways speed", paulo@0: "How fast piece moves left/right" }, paulo@0: {{"idas"}, "Initial sideways motion", paulo@0: "Allow shifting as a piece is coming out?" }, paulo@0: {{"irs"}, "Initial rotation", paulo@0: "Hold rotate to turn each piece as it enters" }, paulo@0: {{"8way"}, "Allow diagonal motion", paulo@0: "Turn off to prevent accidental hard drops" }, paulo@0: {{"sfds"}, "Soft drop speed", paulo@0: "Hold down to drop the piece this fast" }, paulo@0: {{"sfdl"}, "Soft drop", paulo@0: "Behavior when a piece lands with down" }, paulo@0: {{"hrdl"}, "Hard drop", paulo@0: "Behavior when a piece lands with up" }, paulo@0: {{"tls"}, "Shadow", paulo@0: "Shows where the piece will land" }, paulo@0: {{"invs"}, "Hide blocks in well", paulo@0: "Invisible challenge tests your memory" }, paulo@0: {{"next"}, "Next pieces", paulo@0: "Number of previewed pieces" }, paulo@0: {{"srph"}, "Smooth gravity", paulo@0: "Turn off to make the piece fall row-by-row" }, paulo@0: {{"inpv"}, "Next above shadow", paulo@0: "Number of previewed pieces inside the well" }, paulo@0: {{"mblr"}, "Drop trails", paulo@0: "Makes hard drops look harder" }, paulo@0: paulo@0: {{"lidp"}, "Pause on task switch", paulo@0: "Makes Alt+Tab or screensaver safe" }, paulo@0: {{"rec"}, "Record all games", paulo@0: "Save each game's replay to demo.ljm" }, paulo@0: {{"wndw"}, "Display mode", paulo@0: "Shut out distractions" }, paulo@0: paulo@0: /* Booleans */ paulo@0: {{"Off"}, "Off" }, paulo@0: {{"On"}, "On" }, paulo@0: paulo@0: /* Gimmicks */ paulo@0: {{"Mara"}, "Marathon", paulo@0: "Play until you top out."}, paulo@0: {{"Line"}, "40 lines", paulo@0: "Game ends after you clear this many lines."}, paulo@0: {{"Time"}, "180 seconds", paulo@0: "Game ends after this much time."}, paulo@0: {{"DrlA"}, "Drill Attack", paulo@0: "Clear the bottom row of garbage to win."}, paulo@0: {{"Item"}, "Vs. w/Items", paulo@0: "Three opponents send disabling attacks."}, paulo@0: {{"Keys"}, "Baboo!", paulo@0: "What can you do with 300 keystrokes?"}, paulo@0: paulo@0: /* Garbage */ paulo@0: {{"HRD"}, "Home Run Derby", paulo@0: "Clear 1, 2, or 3 lines and get garbage back"}, paulo@0: {{"DrlG"}, "Drill", paulo@0: "Well is filled with random garbage"}, paulo@0: {{"Zigz"}, "Zigzag", paulo@0: "Well is filled with zigzag garbage"}, paulo@0: paulo@0: /* Piece set */ paulo@0: {{"AllP"}, "All pieces", paulo@0: "Pieces made of two, three, or four blocks" }, paulo@0: {{"IJLO"}, "Tetrominoes", paulo@0: "Pieces made of four blocks"}, paulo@0: {{"JLOT"}, "Tetrominoes no I", paulo@0: "Four blocks, no straight pieces"}, paulo@0: {{"SZSZ"}, "S and Z only" }, paulo@0: {{"IIII"}, "iCheat(tm)", paulo@0: "All I (straight) tetrominoes" }, paulo@0: {{"TTTT"}, "T-Party", paulo@0: "All T tetrominoes" }, paulo@0: paulo@0: /* Randomizer */ paulo@0: {{"Unif"}, "Memoryless", paulo@0: "Equal probability to deal any piece" }, paulo@0: {{"Bag"}, "Bag", paulo@0: "Deals one of each piece before repeats"}, paulo@0: {{"Bag+"}, "Bag + 1", paulo@0: "Adds one extra to each set of pieces"}, paulo@0: {{"Bag2"}, "Double bag", paulo@0: "Deals two of each piece before repeats"}, paulo@0: {{"Hist"}, "Strict history", paulo@0: "Does not deal a recent piece"}, paulo@0: {{"His6"}, "History 6 rolls", paulo@0: "Rarely deals a recent piece"}, paulo@0: paulo@0: /* Speed curve */ paulo@0: {{"Exp"}, "Exponential", paulo@0: "Game gradually gets faster"}, paulo@0: {{"Rh20"}, "Rhythm 20G", paulo@0: "Slide pieces into place to the beat"}, paulo@0: {{"Rhy0"}, "Rhythm 0G", paulo@0: "Drop pieces into place to the beat"}, paulo@0: {{"TGM2"}, "Master" }, paulo@0: {{"TAPD"}, "Death" }, paulo@0: {{"TAD3"}, "Death 300+" }, paulo@0: {{"NESc"}, "NES" }, paulo@0: {{"GBc"}, "Game Boy" }, paulo@0: {{"GBHL"}, "Game Boy Heart" }, paulo@0: paulo@0: /* Hold */ paulo@0: {{"HldE"}, "On, empty", paulo@0: "First held piece brings out next"}, paulo@0: {{"HldR"}, "On, random", paulo@0: "Random piece in hold box at start"}, paulo@0: {{"HldN"}, "Hold to next", paulo@0: "Hold swaps falling and next (like Radica)"}, paulo@0: paulo@0: /* Rotation systems */ paulo@0: {{"SRS"}, "SRS", paulo@0: "LOL T-spin triples"}, paulo@0: {{"Sega"}, "Sega 1988" }, paulo@0: {{"ARS"}, "Arika", paulo@0: "The rotation system of grandmasters"}, paulo@0: {{"Tngn"}, "Tengen", paulo@0: "Unlicensed" }, paulo@0: {{"NRSL"}, "Game Boy", paulo@0: "Left-handed system"}, paulo@0: {{"NRSR"}, "NES", paulo@0: "Right-handed system"}, paulo@0: {{"TOD4"}, "TOD M4", paulo@0: "Like SRS but less radical" }, paulo@0: {{"TDX"}, "Climbing", paulo@0: "Spider-Man's favorite Tetris game is DX"}, paulo@0: paulo@0: /* Lockdown */ paulo@0: {{"OLD"}, "Classic", paulo@0: "Lock when piece lands" }, paulo@0: {{"EntR"}, "Entry reset", paulo@0: "Lock delay resets for each new piece" }, paulo@0: {{"StpR"}, "Step reset", paulo@0: "Lock delay resets when piece moves down" }, paulo@0: {{"MovR"}, "Move reset", paulo@0: "Lock delay resets when piece moves" }, paulo@0: paulo@0: /* Lock/line delay and floor kicks */ paulo@0: {{"SBSC"}, "Set by speed curve" }, paulo@0: {{"Inf"}, "Unlimited" }, paulo@0: paulo@0: /* Sub-row kick */ paulo@0: {{"srkN"}, "Unchanged" }, paulo@0: {{"srkM"}, "Kick minimal distance" }, paulo@0: {{"srkU"}, "Always kick up" }, paulo@0: paulo@0: /* Gluing and gravity */ paulo@0: {{"Naiv"}, "Naive", paulo@0: "Can result in floating blocks"}, paulo@0: {{"Squ"}, "Square", paulo@0: "Form a 4x4 square from complete pieces" }, paulo@0: {{"Stky"}, "Sticky", paulo@0: "Blocks stick together"}, paulo@0: {{"byCo"}, "Sticky by color", paulo@0: "Blocks of each color stick together"}, paulo@0: {{"Casc"}, "Cascade", paulo@0: "Each piece falls separately" }, paulo@0: paulo@0: /* Line scoring */ paulo@0: {{"LJ"}, "LJ", paulo@0: "100, 400, 700, 1200, B2B=200, T=500*n" }, paulo@0: {{"Fibo"}, "Fibonacci", paulo@0: "100, 200, 300, 500 (800, 1300, ...)" }, paulo@0: {{"HotL"}, "Hotline", paulo@0: "100-600 for clearing lines on specific rows" }, paulo@0: {{"TDSl"}, "Guideline", paulo@0: "Level * 100, 300, 500, 800, B2B=50%, T=?" }, paulo@0: {{"NESl"}, "8-bit", paulo@0: "Level * 40, 100, 300, 1200" }, paulo@0: {{"LJns"}, "LJ (nerfed spin)", paulo@0: "100, 400, 700, 1200, B2B=200, T=300*n" }, paulo@0: paulo@0: /* Drop scoring */ paulo@0: {{"ConD"}, "Continuous drop", paulo@0: "1 point per row dropped without stopping"}, paulo@0: {{"S1H1"}, "Drop", paulo@0: "1 point per row soft or hard dropped"}, paulo@0: {{"S1H2"}, "Soft x1, Hard x2", paulo@0: "1 pt/row for soft drop, 2 for hard drop"}, paulo@0: paulo@0: /* T-spin */ paulo@0: {{"Imob"}, "Immobile", paulo@0: "Rotate any piece so it can't move up"}, paulo@0: {{"CrnT"}, "3-corner T", paulo@0: "Rotate T with 3 corners filled" }, paulo@0: {{"WKT"}, "3-corner T no kick", paulo@0: "Rotate T with 3 corners filled, without kick" }, paulo@0: paulo@0: /* sideways speed, soft drop speed, zangi */ paulo@0: paulo@0: /* Zangi */ paulo@0: {{"Slid"}, "Slide", paulo@0: "The piece can be dropped and then moved"}, paulo@0: {{"Lock"}, "Lock", paulo@0: "The piece locks immediately"}, paulo@0: {{"LocU"}, "Lock on release", paulo@0: "Can be moved while drop key is pressed"}, paulo@0: paulo@0: /* Shadow */ paulo@0: {{"tl25"}, "Fainter color" }, paulo@0: {{"tl50"}, "Faint color" }, paulo@0: {{"tlsC"}, "Color" }, paulo@0: {{"tlsM"}, "Monochrome" }, paulo@0: {{"invF"}, "Off, hide falling piece too"}, paulo@0: paulo@0: #ifdef HAS_FPU paulo@0: {{"FulS"}, "Full screen", paulo@0: "Try to run the game in the full screen."}, paulo@0: {{"Wind"}, "Windowed", paulo@0: "Run the game in a window."}, paulo@0: #endif paulo@0: paulo@0: /* list terminator */ paulo@0: { {.i=0}, NULL } paulo@0: };