diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index 4152c1a..0000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,14 +0,0 @@ -# How to Contribute - -## Pull Requests - -1. Fork the Slim Skeleton repository -2. Create a new branch for each feature or improvement -3. Send a pull request from each feature branch to the **3.x** branch - -It is very important to separate new features or improvements into separate feature branches, and to send a -pull request for each branch. This allows us to review and pull in new features or improvements individually. - -## Style Guide - -All pull requests must adhere to the [PSR-2 standard](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md). diff --git a/DEV_ENV.md b/DEV_ENV.md new file mode 100644 index 0000000..d6b1fdf --- /dev/null +++ b/DEV_ENV.md @@ -0,0 +1,5 @@ +# Dev Env setup + +1. Clone the repo +2. composer update +3. ? (TODO) \ No newline at end of file diff --git a/I18N/de_strings.json b/I18N/de_strings.json new file mode 100644 index 0000000..da15791 --- /dev/null +++ b/I18N/de_strings.json @@ -0,0 +1,52 @@ +{ + "5_STRAWB": "Collect 5 strawberries", + "10_STRAWB": "Collect 10 strawberries", + "ALL_STRAWB": "Collect all strawberries", + "CHAIN_BERRIES": "Collect 3 strawberries simultaneously", + "WINGED_STRAWB": "Collect a winged strawberry", + "CASSETTE_TAPE": "Collect Cassette Tape", + "CRYSTAL_HEART": "Collect Crystal Heart", + "THEO": "Find and talk to Theo", + "NO_DASH": "Beat 5 rooms without dashing", + "INTERVENTION_STRAWB": "Collect all strawberries in the Intervention sequence", + "INTERVENTION_DREAM": "Get to the room prior to Intervention cutscene before activating dream blocks", + "PICO8": "Find and beat Celeste PICO-8", + "PICO8_BERRY": "Find Celeste PICO-8 and collect 5 berries in it", + "PRESIDENTIAL_STRAWB": "Collect all strawberries in the Presidential Suite sequence", + "SNOWBALL": "Bounce off 3 snowballs", + "HIDDEN_PATH": "Take the hidden path to Cliff Face", + "THEO_CUTSCENE": "Activate the Theo cutscene in the Search sequence", + "THEO_STRAWB": "Collect the strawberry during the crystal Theo sequence", + "SEEKER": "Kill a seeker", + "SEEKER_RED_BLOCKS": "Destroy 5 red blocks using seekers", + "3_KEYS": "Collect all 3 keys in Search", + "TOWERFALL": "Reach the Towerfall room", + "KEVIN": "Hit all 4 sides of a single Kevin Block", + "FEATHERS_DREAM": "Collect all feathers in the dream sequence", + "FEATHERS_LADY": "Collect all feathers in the room before Old Lady", + "3_JEWELS": "Collect 3 jewels", + "3000M_CHECKPOINTS": "Activate all checkpoints in 3000m", + "3000M_SKIP_5": "Skip 5 checkpoints in 3000m", + "1000M_RIGHT": "Take the rightmost path at 1000m", + "TRAFFIC_BLOCKS": "Activate no more than 3 traffic blocks", + "MESS_BOX_BOOK": "Complete the Huge Mess sequence boxes first, books last", + "MESS_BOOK_BOX": "Complete the Huge Mess sequence books first, boxes last", + "MESS_BOOK_LAUNDRY": "Complete the Huge Mess sequence books first, laundry last", + "MESS_LAUNDRY_BOX": "Complete the Huge Mess sequence laundry first, boxes last", + "MESS_LAUNDRY_BOOK": "Complete the Huge Mess sequence laundry first, books last", + "AREA_1_FORSAKEN_CITY": "Die verlassene Stadt", + "AREA_2_OLD_SITE": "Alte Stätte", + "AREA_3_CELESTIAL_RESORT": "Himmelsresort", + "AREA_4_GOLDEN RIDGE": "Goldener Bergzug", + "AREA_5_MIRROR TEMPLE": "Spiegeltempel", + "AREA_6_REFLECTION": "Reflektion", + "AREA_7_THE SUMMIT": "Der Gipfel", + "AREA_8_CORE": "Im Mittelpunkt", + "WHATS_THIS": "What's this?", + "SITE_DESCRIPTION": "Inspired by the Ocarina of Time Bingo, Celeste Hunt generates, given a seed, a randomly assigned list of tasks to complete. Your goal is, from a new file, to reach the Summit and achieve all the tasks.", + "SEED_EXPLANATION": "Each seed is deterministic, so you can share your seed by copying and pasting the URL in your browser.", + "CREDITS_1": "Made with love by Ikuyo, digdugdiggy and Programmatic", + "CREDITS_2": "Source code available here and Licensed under MIT License", + "CREDITS_3": "Celeste is owned by Matt Makes Games. Thanks for making this game, guys.", + "RESEED_BTN": "Reseed" +} \ No newline at end of file diff --git a/I18N/en_strings.json b/I18N/en_strings.json new file mode 100644 index 0000000..b0b8a05 --- /dev/null +++ b/I18N/en_strings.json @@ -0,0 +1,62 @@ +{ + "TASKS":{ + "5_STRAWB": "Collect 5 strawberries", + "10_STRAWB": "Collect 10 strawberries", + "ALL_STRAWB": "Collect all strawberries", + "CHAIN_BERRIES": "Collect 3 strawberries simultaneously", + "WINGED_STRAWB": "Collect a winged strawberry", + "CASSETTE_TAPE": "Collect Cassette Tape", + "CRYSTAL_HEART": "Collect Crystal Heart", + "CASSETTE_B": "Collect Cassette Tape and Complete B-Side", + "B_SIDE": "Complete B-Side", + "C_SIDE": "Complete C-Side", + "THEO": "Find and talk to Theo", + "NO_DASH": "Beat 5 rooms without dashing", + "INTERVENTION_STRAWB": "Collect all strawberries in the Intervention sequence", + "INTERVENTION_DREAM": "Get to the room prior to Intervention cutscene before activating dream blocks", + "POEM": "Find the poem in Awake and read it", + "PICO8": "Find and beat Celeste PICO-8", + "PICO8_BERRY": "Find Celeste PICO-8 and collect 5 berries in it", + "PRESIDENTIAL_STRAWB": "Collect all strawberries in the Presidential Suite sequence", + "SNOWBALL": "Bounce off 3 snowballs", + "HIDDEN_PATH": "Take the hidden path to Cliff Face", + "THEO_CUTSCENE": "Activate the Theo cutscene in the Search sequence", + "THEO_STRAWB": "Collect the strawberry during the Rescue sequence", + "SEEKER": "Kill a seeker", + "SEEKER_RED_BLOCKS": "Destroy 5 red blocks using seekers", + "3_KEYS": "Collect all 3 keys in Search", + "TOWERFALL": "Reach the Towerfall room", + "KEVIN": "Hit all 4 sides of a single Kevin Block", + "FEATHERS_DREAM": "Collect all feathers in the dream sequence", + "FEATHERS_LADY": "Collect all feathers in the room before Old Lady", + "3_JEWELS": "Collect 3 jewels", + "3000M_CHECKPOINTS": "Activate all checkpoints in 3000m", + "3000M_SKIP_5": "Skip 5 checkpoints in 3000m", + "1000M_RIGHT": "Take the rightmost path at 1000m", + "TRAFFIC_BLOCKS": "Activate no more than 3 traffic blocks", + "MESS_BOX_BOOK": "Complete the Huge Mess sequence boxes first, books last", + "MESS_BOOK_BOX": "Complete the Huge Mess sequence books first, boxes last", + "MESS_BOOK_LAUNDRY": "Complete the Huge Mess sequence books first, laundry last", + "MESS_LAUNDRY_BOX": "Complete the Huge Mess sequence laundry first, boxes last", + "MESS_LAUNDRY_BOOK": "Complete the Huge Mess sequence laundry first, books last" + }, + "CHAPTERS":{ + "AREA_1": "Forsaken City", + "AREA_2": "Old Site", + "AREA_3": "Celestial Resort", + "AREA_4": "Golden Ridge", + "AREA_5": "Mirror Temple", + "AREA_6": "Reflection", + "AREA_7": "The Summit", + "AREA_8": "Core" + }, + "WEBSITE":{ + "WHATS_THIS": "What's this?", + "SITE_DESCRIPTION": "Inspired by the Ocarina of Time Bingo, Celeste Hunt generates, given a seed, a randomly assigned list of tasks to complete. Your goal is, from a new file, to reach the Summit and achieve all the tasks.", + "SEED_EXPLANATION": "Each seed is deterministic, so you can share your seed by copying and pasting the URL in your browser.", + "CREDITS_1": "Made with love by Ikuyo, digdugdiggy and Programmatic", + "CREDITS_2": "Source code available here and Licensed under MIT License", + "CREDITS_3": "Celeste is owned by Matt Makes Games. Thanks for making this game, guys.", + "RESEED_BTN": "Reseed" + } +} diff --git a/I18N/es_strings.json b/I18N/es_strings.json new file mode 100644 index 0000000..030a710 --- /dev/null +++ b/I18N/es_strings.json @@ -0,0 +1,63 @@ +{ + "TASKS":{ + "5_STRAWB": "Obtén 5 fresas", + "10_STRAWB": "Obtén 10 fresas", + "ALL_STRAWB": "Obtén todas las fresas", + "CHAIN_BERRIES": "Obtén 3 fresas al mismo tiempo", + "WINGED_STRAWB": "Obtén una fresa con alas", + "CASSETTE_TAPE": "Obtén la cinta cassette", + "CRYSTAL_HEART": "Obtén el Corazón", + "CASSETTE_B": "Obtén el cassette y completa la Cara B", + "B_SIDE": "Completa la Cara B", + "C_SIDE": "Completa la Cara C", + "THEO": "Encuentra a Theo y habla con él", + "NO_DASH": "Completa 5 pantllas sin utilizar dashes", + "INTERVENTION_STRAWB": "Obtén todas las fresas en la secuencia Intervención", + "INTERVENTION_DREAM": "Entra a la habitación anterior a la secuenca Intervención, sin activar los dream blocks", + "POEM": "Encuentra el poema en la sección Vigilia", + "PICO8": "Encuentra Celeste PICO-8 y llega a la cima", + "PICO8_BERRY": "Encuentra Celeste PICO-8 y obtén 5 fresas", + "PRESIDENTIAL_STRAWB": "Obtén todas las fresas en la sección Suite Presidencial", + "SNOWBALL": "Rebota en 3 bolas de nieve", + "HIDDEN_PATH": "Toma el camino oculto hacia la Cara del Acantilado", + "THEO_CUTSCENE": "Activa la cutscene con Theo en la sección Búsqueda", + "THEO_STRAWB": "Obtén la fresa que se encuentra en la sección Rescate", + "SEEKER": "Mata un seeker", + "SEEKER_RED_BLOCKS": "Destruye 5 bloques rojos usando seekers", + "3_KEYS": "Obtén todas las llaves de la sección Búsqueda", + "TOWERFALL": "Entra a la pantalla con personajes de Towerfall", + "KEVIN": "Golpea, con dashes, los 4 lados de un solo Kevin Block", + "FEATHERS_DREAM": "Obtén todas las plumas en el inicio", + "FEATHERS_LADY": "Obtén todas las plumas en la habitación grande, antes de ver a la anciana", + "3_JEWELS": "Obtén 3 joyas", + "3000M_CHECKPOINTS": "Activa todas las banderas en 3000m", + "3000M_SKIP_5": "Esquiva 5 banderas en 3000m", + "1000M_RIGHT": "En 1000m, toma la ruta hacia la derecha", + "TRAFFIC_BLOCKS": "Activa, a lo más, 3 bloques semáforo", + "MESS_BOX_BOOK": "Completa la secuencia Gran Caos en este orden: cajas, libros, lavandería", + "MESS_BOOK_BOX": "Completa la secuencia Gran Caos en este orden: libros, lavandería, cajas", + "MESS_BOOK_LAUNDRY": "Completa la secuencia Gran Caos en este orden: libros, cajas, lavandería", + "MESS_LAUNDRY_BOX": "Completa la secuencia Gran Caos en este orden: lavandería, libros, cajas", + "MESS_LAUNDRY_BOOK": "Completa la secuencia Gran Caos en este orden: lavandería, cajas, libros" + }, + "CHAPTERS":{ + "AREA_1": "Ciudad Olvidada", + "AREA_2": "Ruinas", + "AREA_3": "Celestial Resort", + "AREA_4": "Risco Dorado", + "AREA_5": "Templo del espejo", + "AREA_6": "Reflexión", + "AREA_7": "La cumbre", + "AREA_8": "Núcleo" + }, + "WEBSITE":{ + "WHATS_THIS": "Qué es esto?", + "SITE_DESCRIPTION": "Celeste Hunt, inspirado por el Bingo de Ocarina of Time, genera, dada una semilla, una lista de tareas a completar. Tu objetivo es muy simple: en un archivo nuevo, llega a la Cumbre y completa todas las tareas.", + "SEED_EXPLANATION": "Cada semilla es constante, asi que puedes compartirla simplemente copiando y pegando la URL en el navegador.", + "CREDITS_1": "Hecho con amor por Ikuyo, digdugdiggy y Programmatic", + "CREDITS_2": "Código fuente disponible aquí, bajo licencia MIT.", + "CREDITS_3": "Celeste es propiedad de Matt Makes Games. Muchas gracias por hacer este juego.", + "RESEED_BTN": "Nueva Semilla" + } + +} diff --git a/I18N/fr_strings.json b/I18N/fr_strings.json new file mode 100644 index 0000000..ebb451f --- /dev/null +++ b/I18N/fr_strings.json @@ -0,0 +1,52 @@ +{ + "5_STRAWB": "Collect 5 strawberries", + "10_STRAWB": "Collect 10 strawberries", + "ALL_STRAWB": "Collect all strawberries", + "CHAIN_BERRIES": "Collect 3 strawberries simultaneously", + "WINGED_STRAWB": "Collect a winged strawberry", + "CASSETTE_TAPE": "Collect Cassette Tape", + "CRYSTAL_HEART": "Collect Crystal Heart", + "THEO": "Find and talk to Theo", + "NO_DASH": "Beat 5 rooms without dashing", + "INTERVENTION_STRAWB": "Collect all strawberries in the Intervention sequence", + "INTERVENTION_DREAM": "Get to the room prior to Intervention cutscene before activating dream blocks", + "PICO8": "Find and beat Celeste PICO-8", + "PICO8_BERRY": "Find Celeste PICO-8 and collect 5 berries in it", + "PRESIDENTIAL_STRAWB": "Collect all strawberries in the Presidential Suite sequence", + "SNOWBALL": "Bounce off 3 snowballs", + "HIDDEN_PATH": "Take the hidden path to Cliff Face", + "THEO_CUTSCENE": "Activate the Theo cutscene in the Search sequence", + "THEO_STRAWB": "Collect the strawberry during the crystal Theo sequence", + "SEEKER": "Kill a seeker", + "SEEKER_RED_BLOCKS": "Destroy 5 red blocks using seekers", + "3_KEYS": "Collect all 3 keys in Search", + "TOWERFALL": "Reach the Towerfall room", + "KEVIN": "Hit all 4 sides of a single Kevin Block", + "FEATHERS_DREAM": "Collect all feathers in the dream sequence", + "FEATHERS_LADY": "Collect all feathers in the room before Old Lady", + "3_JEWELS": "Collect 3 jewels", + "3000M_CHECKPOINTS": "Activate all checkpoints in 3000m", + "3000M_SKIP_5": "Skip 5 checkpoints in 3000m", + "1000M_RIGHT": "Take the rightmost path at 1000m", + "TRAFFIC_BLOCKS": "Activate no more than 3 traffic blocks", + "MESS_BOX_BOOK": "Complete the Huge Mess sequence boxes first, books last", + "MESS_BOOK_BOX": "Complete the Huge Mess sequence books first, boxes last", + "MESS_BOOK_LAUNDRY": "Complete the Huge Mess sequence books first, laundry last", + "MESS_LAUNDRY_BOX": "Complete the Huge Mess sequence laundry first, boxes last", + "MESS_LAUNDRY_BOOK": "Complete the Huge Mess sequence laundry first, books last", + "AREA_1_FORSAKEN_CITY": "La cité abandonnée", + "AREA_2_OLD_SITE": "Le site ancien", + "AREA_3_CELESTIAL_RESORT": "La station Celeste", + "AREA_4_GOLDEN RIDGE": "L’arête d’or", + "AREA_5_MIRROR TEMPLE": "Le temple miroir", + "AREA_6_REFLECTION": "Réflexion", + "AREA_7_THE SUMMIT": "Le sommet", + "AREA_8_CORE": "Le cœur", + "WHATS_THIS": "What's this?", + "SITE_DESCRIPTION": "Inspired by the Ocarina of Time Bingo, Celeste Hunt generates, given a seed, a randomly assigned list of tasks to complete. Your goal is, from a new file, to reach the Summit and achieve all the tasks.", + "SEED_EXPLANATION": "Each seed is deterministic, so you can share your seed by copying and pasting the URL in your browser.", + "CREDITS_1": "Made with love by Ikuyo, digdugdiggy and Programmatic", + "CREDITS_2": "Source code available here and Licensed under MIT License", + "CREDITS_3": "Celeste is owned by Matt Makes Games. Thanks for making this game, guys.", + "RESEED_BTN": "Reseed" +} \ No newline at end of file diff --git a/I18N/it_strings.json b/I18N/it_strings.json new file mode 100644 index 0000000..4f5f602 --- /dev/null +++ b/I18N/it_strings.json @@ -0,0 +1,52 @@ +{ + "5_STRAWB": "Collect 5 strawberries", + "10_STRAWB": "Collect 10 strawberries", + "ALL_STRAWB": "Collect all strawberries", + "CHAIN_BERRIES": "Collect 3 strawberries simultaneously", + "WINGED_STRAWB": "Collect a winged strawberry", + "CASSETTE_TAPE": "Collect Cassette Tape", + "CRYSTAL_HEART": "Collect Crystal Heart", + "THEO": "Find and talk to Theo", + "NO_DASH": "Beat 5 rooms without dashing", + "INTERVENTION_STRAWB": "Collect all strawberries in the Intervention sequence", + "INTERVENTION_DREAM": "Get to the room prior to Intervention cutscene before activating dream blocks", + "PICO8": "Find and beat Celeste PICO-8", + "PICO8_BERRY": "Find Celeste PICO-8 and collect 5 berries in it", + "PRESIDENTIAL_STRAWB": "Collect all strawberries in the Presidential Suite sequence", + "SNOWBALL": "Bounce off 3 snowballs", + "HIDDEN_PATH": "Take the hidden path to Cliff Face", + "THEO_CUTSCENE": "Activate the Theo cutscene in the Search sequence", + "THEO_STRAWB": "Collect the strawberry during the crystal Theo sequence", + "SEEKER": "Kill a seeker", + "SEEKER_RED_BLOCKS": "Destroy 5 red blocks using seekers", + "3_KEYS": "Collect all 3 keys in Search", + "TOWERFALL": "Reach the Towerfall room", + "KEVIN": "Hit all 4 sides of a single Kevin Block", + "FEATHERS_DREAM": "Collect all feathers in the dream sequence", + "FEATHERS_LADY": "Collect all feathers in the room before Old Lady", + "3_JEWELS": "Collect 3 jewels", + "3000M_CHECKPOINTS": "Activate all checkpoints in 3000m", + "3000M_SKIP_5": "Skip 5 checkpoints in 3000m", + "1000M_RIGHT": "Take the rightmost path at 1000m", + "TRAFFIC_BLOCKS": "Activate no more than 3 traffic blocks", + "MESS_BOX_BOOK": "Complete the Huge Mess sequence boxes first, books last", + "MESS_BOOK_BOX": "Complete the Huge Mess sequence books first, boxes last", + "MESS_BOOK_LAUNDRY": "Complete the Huge Mess sequence books first, laundry last", + "MESS_LAUNDRY_BOX": "Complete the Huge Mess sequence laundry first, boxes last", + "MESS_LAUNDRY_BOOK": "Complete the Huge Mess sequence laundry first, books last", + "AREA_1_FORSAKEN_CITY": "Città abbandonata", + "AREA_2_OLD_SITE": "Antiche rovine", + "AREA_3_CELESTIAL_RESORT": "Albergo Celestiale", + "AREA_4_GOLDEN RIDGE": "Dorsale dorata", + "AREA_5_MIRROR TEMPLE": "Tempio degli specchi", + "AREA_6_REFLECTION": "Riflettere", + "AREA_7_THE SUMMIT": "La vetta", + "AREA_8_CORE": "Nucleo", + "WHATS_THIS": "What's this?", + "SITE_DESCRIPTION": "Inspired by the Ocarina of Time Bingo, Celeste Hunt generates, given a seed, a randomly assigned list of tasks to complete. Your goal is, from a new file, to reach the Summit and achieve all the tasks.", + "SEED_EXPLANATION": "Each seed is deterministic, so you can share your seed by copying and pasting the URL in your browser.", + "CREDITS_1": "Made with love by Ikuyo, digdugdiggy and Programmatic", + "CREDITS_2": "Source code available here and Licensed under MIT License", + "CREDITS_3": "Celeste is owned by Matt Makes Games. Thanks for making this game, guys.", + "RESEED_BTN": "Reseed" +} \ No newline at end of file diff --git a/I18N/ja_strings.json b/I18N/ja_strings.json new file mode 100644 index 0000000..fb03e9f --- /dev/null +++ b/I18N/ja_strings.json @@ -0,0 +1,52 @@ +{ + "5_STRAWB": "Collect 5 strawberries", + "10_STRAWB": "Collect 10 strawberries", + "ALL_STRAWB": "Collect all strawberries", + "CHAIN_BERRIES": "Collect 3 strawberries simultaneously", + "WINGED_STRAWB": "Collect a winged strawberry", + "CASSETTE_TAPE": "Collect Cassette Tape", + "CRYSTAL_HEART": "Collect Crystal Heart", + "THEO": "Find and talk to Theo", + "NO_DASH": "Beat 5 rooms without dashing", + "INTERVENTION_STRAWB": "Collect all strawberries in the Intervention sequence", + "INTERVENTION_DREAM": "Get to the room prior to Intervention cutscene before activating dream blocks", + "PICO8": "Find and beat Celeste PICO-8", + "PICO8_BERRY": "Find Celeste PICO-8 and collect 5 berries in it", + "PRESIDENTIAL_STRAWB": "Collect all strawberries in the Presidential Suite sequence", + "SNOWBALL": "Bounce off 3 snowballs", + "HIDDEN_PATH": "Take the hidden path to Cliff Face", + "THEO_CUTSCENE": "Activate the Theo cutscene in the Search sequence", + "THEO_STRAWB": "Collect the strawberry during the crystal Theo sequence", + "SEEKER": "Kill a seeker", + "SEEKER_RED_BLOCKS": "Destroy 5 red blocks using seekers", + "3_KEYS": "Collect all 3 keys in Search", + "TOWERFALL": "Reach the Towerfall room", + "KEVIN": "Hit all 4 sides of a single Kevin Block", + "FEATHERS_DREAM": "Collect all feathers in the dream sequence", + "FEATHERS_LADY": "Collect all feathers in the room before Old Lady", + "3_JEWELS": "Collect 3 jewels", + "3000M_CHECKPOINTS": "Activate all checkpoints in 3000m", + "3000M_SKIP_5": "Skip 5 checkpoints in 3000m", + "1000M_RIGHT": "Take the rightmost path at 1000m", + "TRAFFIC_BLOCKS": "Activate no more than 3 traffic blocks", + "MESS_BOX_BOOK": "Complete the Huge Mess sequence boxes first, books last", + "MESS_BOOK_BOX": "Complete the Huge Mess sequence books first, boxes last", + "MESS_BOOK_LAUNDRY": "Complete the Huge Mess sequence books first, laundry last", + "MESS_LAUNDRY_BOX": "Complete the Huge Mess sequence laundry first, boxes last", + "MESS_LAUNDRY_BOOK": "Complete the Huge Mess sequence laundry first, books last", + "AREA_1_FORSAKEN_CITY": "見捨てられた街", + "AREA_2_OLD_SITE": "跡地", + "AREA_3_CELESTIAL_RESORT": "セレスティアル・リゾート", + "AREA_4_GOLDEN RIDGE": "ゴールデン・リッジ", + "AREA_5_MIRROR TEMPLE": "鏡の寺", + "AREA_6_REFLECTION": "反映", + "AREA_7_THE SUMMIT": "頂上", + "AREA_8_CORE": "コア", + "WHATS_THIS": "What's this?", + "SITE_DESCRIPTION": "Inspired by the Ocarina of Time Bingo, Celeste Hunt generates, given a seed, a randomly assigned list of tasks to complete. Your goal is, from a new file, to reach the Summit and achieve all the tasks.", + "SEED_EXPLANATION": "Each seed is deterministic, so you can share your seed by copying and pasting the URL in your browser.", + "CREDITS_1": "Made with love by Ikuyo, digdugdiggy and Programmatic", + "CREDITS_2": "Source code available here and Licensed under MIT License", + "CREDITS_3": "Celeste is owned by Matt Makes Games. Thanks for making this game, guys.", + "RESEED_BTN": "Reseed" +} \ No newline at end of file diff --git a/I18N/ko_strings.json b/I18N/ko_strings.json new file mode 100644 index 0000000..db65cc8 --- /dev/null +++ b/I18N/ko_strings.json @@ -0,0 +1,52 @@ +{ + "5_STRAWB": "Collect 5 strawberries", + "10_STRAWB": "Collect 10 strawberries", + "ALL_STRAWB": "Collect all strawberries", + "CHAIN_BERRIES": "Collect 3 strawberries simultaneously", + "WINGED_STRAWB": "Collect a winged strawberry", + "CASSETTE_TAPE": "Collect Cassette Tape", + "CRYSTAL_HEART": "Collect Crystal Heart", + "THEO": "Find and talk to Theo", + "NO_DASH": "Beat 5 rooms without dashing", + "INTERVENTION_STRAWB": "Collect all strawberries in the Intervention sequence", + "INTERVENTION_DREAM": "Get to the room prior to Intervention cutscene before activating dream blocks", + "PICO8": "Find and beat Celeste PICO-8", + "PICO8_BERRY": "Find Celeste PICO-8 and collect 5 berries in it", + "PRESIDENTIAL_STRAWB": "Collect all strawberries in the Presidential Suite sequence", + "SNOWBALL": "Bounce off 3 snowballs", + "HIDDEN_PATH": "Take the hidden path to Cliff Face", + "THEO_CUTSCENE": "Activate the Theo cutscene in the Search sequence", + "THEO_STRAWB": "Collect the strawberry during the crystal Theo sequence", + "SEEKER": "Kill a seeker", + "SEEKER_RED_BLOCKS": "Destroy 5 red blocks using seekers", + "3_KEYS": "Collect all 3 keys in Search", + "TOWERFALL": "Reach the Towerfall room", + "KEVIN": "Hit all 4 sides of a single Kevin Block", + "FEATHERS_DREAM": "Collect all feathers in the dream sequence", + "FEATHERS_LADY": "Collect all feathers in the room before Old Lady", + "3_JEWELS": "Collect 3 jewels", + "3000M_CHECKPOINTS": "Activate all checkpoints in 3000m", + "3000M_SKIP_5": "Skip 5 checkpoints in 3000m", + "1000M_RIGHT": "Take the rightmost path at 1000m", + "TRAFFIC_BLOCKS": "Activate no more than 3 traffic blocks", + "MESS_BOX_BOOK": "Complete the Huge Mess sequence boxes first, books last", + "MESS_BOOK_BOX": "Complete the Huge Mess sequence books first, boxes last", + "MESS_BOOK_LAUNDRY": "Complete the Huge Mess sequence books first, laundry last", + "MESS_LAUNDRY_BOX": "Complete the Huge Mess sequence laundry first, boxes last", + "MESS_LAUNDRY_BOOK": "Complete the Huge Mess sequence laundry first, books last", + "AREA_1_FORSAKEN_CITY": "Forsaken City", + "AREA_2_OLD_SITE": "Old Site", + "AREA_3_CELESTIAL_RESORT": "Celestial Resort", + "AREA_4_GOLDEN RIDGE": "Golden Ridge", + "AREA_5_MIRROR TEMPLE": "Mirror Temple", + "AREA_6_REFLECTION": "Reflection", + "AREA_7_THE SUMMIT": "The Summit", + "AREA_8_CORE": "Core", + "WHATS_THIS": "What's this?", + "SITE_DESCRIPTION": "Inspired by the Ocarina of Time Bingo, Celeste Hunt generates, given a seed, a randomly assigned list of tasks to complete. Your goal is, from a new file, to reach the Summit and achieve all the tasks.", + "SEED_EXPLANATION": "Each seed is deterministic, so you can share your seed by copying and pasting the URL in your browser.", + "CREDITS_1": "Made with love by Ikuyo, digdugdiggy and Programmatic", + "CREDITS_2": "Source code available here and Licensed under MIT License", + "CREDITS_3": "Celeste is owned by Matt Makes Games. Thanks for making this game, guys.", + "RESEED_BTN": "Reseed" +} \ No newline at end of file diff --git a/I18N/ru_strings.json b/I18N/ru_strings.json new file mode 100644 index 0000000..c49e42d --- /dev/null +++ b/I18N/ru_strings.json @@ -0,0 +1,52 @@ +{ + "5_STRAWB": "Collect 5 strawberries", + "10_STRAWB": "Collect 10 strawberries", + "ALL_STRAWB": "Collect all strawberries", + "CHAIN_BERRIES": "Collect 3 strawberries simultaneously", + "WINGED_STRAWB": "Collect a winged strawberry", + "CASSETTE_TAPE": "Collect Cassette Tape", + "CRYSTAL_HEART": "Collect Crystal Heart", + "THEO": "Find and talk to Theo", + "NO_DASH": "Beat 5 rooms without dashing", + "INTERVENTION_STRAWB": "Collect all strawberries in the Intervention sequence", + "INTERVENTION_DREAM": "Get to the room prior to Intervention cutscene before activating dream blocks", + "PICO8": "Find and beat Celeste PICO-8", + "PICO8_BERRY": "Find Celeste PICO-8 and collect 5 berries in it", + "PRESIDENTIAL_STRAWB": "Collect all strawberries in the Presidential Suite sequence", + "SNOWBALL": "Bounce off 3 snowballs", + "HIDDEN_PATH": "Take the hidden path to Cliff Face", + "THEO_CUTSCENE": "Activate the Theo cutscene in the Search sequence", + "THEO_STRAWB": "Collect the strawberry during the crystal Theo sequence", + "SEEKER": "Kill a seeker", + "SEEKER_RED_BLOCKS": "Destroy 5 red blocks using seekers", + "3_KEYS": "Collect all 3 keys in Search", + "TOWERFALL": "Reach the Towerfall room", + "KEVIN": "Hit all 4 sides of a single Kevin Block", + "FEATHERS_DREAM": "Collect all feathers in the dream sequence", + "FEATHERS_LADY": "Collect all feathers in the room before Old Lady", + "3_JEWELS": "Collect 3 jewels", + "3000M_CHECKPOINTS": "Activate all checkpoints in 3000m", + "3000M_SKIP_5": "Skip 5 checkpoints in 3000m", + "1000M_RIGHT": "Take the rightmost path at 1000m", + "TRAFFIC_BLOCKS": "Activate no more than 3 traffic blocks", + "MESS_BOX_BOOK": "Complete the Huge Mess sequence boxes first, books last", + "MESS_BOOK_BOX": "Complete the Huge Mess sequence books first, boxes last", + "MESS_BOOK_LAUNDRY": "Complete the Huge Mess sequence books first, laundry last", + "MESS_LAUNDRY_BOX": "Complete the Huge Mess sequence laundry first, boxes last", + "MESS_LAUNDRY_BOOK": "Complete the Huge Mess sequence laundry first, books last", + "AREA_1_FORSAKEN_CITY": "Забытый город", + "AREA_2_OLD_SITE": "Старое место", + "AREA_3_CELESTIAL_RESORT": "Небесный курорт", + "AREA_4_GOLDEN RIDGE": "Золотой кряж", + "AREA_5_MIRROR TEMPLE": "Зеркальный храм", + "AREA_6_REFLECTION": "Отражение", + "AREA_7_THE SUMMIT": "Вершина", + "AREA_8_CORE": "Средоточие", + "WHATS_THIS": "What's this?", + "SITE_DESCRIPTION": "Inspired by the Ocarina of Time Bingo, Celeste Hunt generates, given a seed, a randomly assigned list of tasks to complete. Your goal is, from a new file, to reach the Summit and achieve all the tasks.", + "SEED_EXPLANATION": "Each seed is deterministic, so you can share your seed by copying and pasting the URL in your browser.", + "CREDITS_1": "Made with love by Ikuyo, digdugdiggy and Programmatic", + "CREDITS_2": "Source code available here and Licensed under MIT License", + "CREDITS_3": "Celeste is owned by Matt Makes Games. Thanks for making this game, guys.", + "RESEED_BTN": "Reseed" +} \ No newline at end of file diff --git a/I18N/zh_hans_strings.json b/I18N/zh_hans_strings.json new file mode 100644 index 0000000..e39443e --- /dev/null +++ b/I18N/zh_hans_strings.json @@ -0,0 +1,52 @@ +{ + "5_STRAWB": "Collect 5 strawberries", + "10_STRAWB": "Collect 10 strawberries", + "ALL_STRAWB": "Collect all strawberries", + "CHAIN_BERRIES": "Collect 3 strawberries simultaneously", + "WINGED_STRAWB": "Collect a winged strawberry", + "CASSETTE_TAPE": "Collect Cassette Tape", + "CRYSTAL_HEART": "Collect Crystal Heart", + "THEO": "Find and talk to Theo", + "NO_DASH": "Beat 5 rooms without dashing", + "INTERVENTION_STRAWB": "Collect all strawberries in the Intervention sequence", + "INTERVENTION_DREAM": "Get to the room prior to Intervention cutscene before activating dream blocks", + "PICO8": "Find and beat Celeste PICO-8", + "PICO8_BERRY": "Find Celeste PICO-8 and collect 5 berries in it", + "PRESIDENTIAL_STRAWB": "Collect all strawberries in the Presidential Suite sequence", + "SNOWBALL": "Bounce off 3 snowballs", + "HIDDEN_PATH": "Take the hidden path to Cliff Face", + "THEO_CUTSCENE": "Activate the Theo cutscene in the Search sequence", + "THEO_STRAWB": "Collect the strawberry during the crystal Theo sequence", + "SEEKER": "Kill a seeker", + "SEEKER_RED_BLOCKS": "Destroy 5 red blocks using seekers", + "3_KEYS": "Collect all 3 keys in Search", + "TOWERFALL": "Reach the Towerfall room", + "KEVIN": "Hit all 4 sides of a single Kevin Block", + "FEATHERS_DREAM": "Collect all feathers in the dream sequence", + "FEATHERS_LADY": "Collect all feathers in the room before Old Lady", + "3_JEWELS": "Collect 3 jewels", + "3000M_CHECKPOINTS": "Activate all checkpoints in 3000m", + "3000M_SKIP_5": "Skip 5 checkpoints in 3000m", + "1000M_RIGHT": "Take the rightmost path at 1000m", + "TRAFFIC_BLOCKS": "Activate no more than 3 traffic blocks", + "MESS_BOX_BOOK": "Complete the Huge Mess sequence boxes first, books last", + "MESS_BOOK_BOX": "Complete the Huge Mess sequence books first, boxes last", + "MESS_BOOK_LAUNDRY": "Complete the Huge Mess sequence books first, laundry last", + "MESS_LAUNDRY_BOX": "Complete the Huge Mess sequence laundry first, boxes last", + "MESS_LAUNDRY_BOOK": "Complete the Huge Mess sequence laundry first, books last", + "AREA_1_FORSAKEN_CITY": "被遗弃的城市", + "AREA_2_OLD_SITE": "旧址", + "AREA_3_CELESTIAL_RESORT": "天空度假山庄", + "AREA_4_GOLDEN RIDGE": "黄金山脊", + "AREA_5_MIRROR TEMPLE": "镜之寺庙", + "AREA_6_REFLECTION": "沉思", + "AREA_7_THE SUMMIT": "山顶", + "AREA_8_CORE": "核心", + "WHATS_THIS": "What's this?", + "SITE_DESCRIPTION": "Inspired by the Ocarina of Time Bingo, Celeste Hunt generates, given a seed, a randomly assigned list of tasks to complete. Your goal is, from a new file, to reach the Summit and achieve all the tasks.", + "SEED_EXPLANATION": "Each seed is deterministic, so you can share your seed by copying and pasting the URL in your browser.", + "CREDITS_1": "Made with love by Ikuyo, digdugdiggy and Programmatic", + "CREDITS_2": "Source code available here and Licensed under MIT License", + "CREDITS_3": "Celeste is owned by Matt Makes Games. Thanks for making this game, guys.", + "RESEED_BTN": "Reseed" +} \ No newline at end of file diff --git a/README.md b/README.md index 2ca7121..db05a7d 100644 --- a/README.md +++ b/README.md @@ -28,6 +28,9 @@ Calling the URL `https://oneninefour.cl/celeste/` via a POST request will return You can later call it again passing the seed as part of the URL (ex: `https://oneninefour.cl/celeste/fc56b42f3835b662`) +### Supported languages +['de', 'en', 'es', 'fr', 'it', 'ja', 'ko', 'ru', 'zh_hans'] + ## License Source code is licensed under the MIT License. diff --git a/composer.json b/composer.json index d16ccaa..738bf43 100644 --- a/composer.json +++ b/composer.json @@ -17,7 +17,8 @@ "slim/php-view": "^2.2", "monolog/monolog": "^1.17", "paragonie/seedspring": "^1.1", - "slim/twig-view": "^2.4" + "slim/twig-view": "^2.4", + "dflydev/fig-cookies": "^1.0" }, "require-dev": { "phpunit/phpunit": ">=4.8 < 6.0" diff --git a/composer.lock b/composer.lock index 1b29578..484466b 100644 --- a/composer.lock +++ b/composer.lock @@ -1,10 +1,11 @@ { "_readme": [ "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "21abf33e2c5784db6fc65d54ab8be978", + "hash": "c9516c1d9278fc3040b6be9d1a539e89", + "content-hash": "f93c9a97df04be754c21842a11418ecd", "packages": [ { "name": "container-interop/container-interop", @@ -35,7 +36,59 @@ ], "description": "Promoting the interoperability of container objects (DIC, SL, etc.)", "homepage": "https://github.com/container-interop/container-interop", - "time": "2017-02-14T19:40:03+00:00" + "time": "2017-02-14 19:40:03" + }, + { + "name": "dflydev/fig-cookies", + "version": "v1.0.2", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-fig-cookies.git", + "reference": "883233c159d00d39e940bd12cfe42c0d23420c1c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dflydev/dflydev-fig-cookies/zipball/883233c159d00d39e940bd12cfe42c0d23420c1c", + "reference": "883233c159d00d39e940bd12cfe42c0d23420c1c", + "shasum": "" + }, + "require": { + "php": ">=5.4", + "psr/http-message": "~1.0" + }, + "require-dev": { + "codeclimate/php-test-reporter": "~0.1@dev", + "phpunit/phpunit": "~4.5", + "squizlabs/php_codesniffer": "~2.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Dflydev\\FigCookies\\": "src/Dflydev/FigCookies" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Beau Simensen", + "email": "beau@dflydev.com" + } + ], + "description": "Cookies for PSR-7 HTTP Message Interface.", + "keywords": [ + "cookies", + "psr-7", + "psr7" + ], + "time": "2016-03-28 09:10:18" }, { "name": "monolog/monolog", @@ -113,7 +166,7 @@ "logging", "psr-3" ], - "time": "2017-06-19T01:22:40+00:00" + "time": "2017-06-19 01:22:40" }, { "name": "nikic/fast-route", @@ -159,7 +212,7 @@ "router", "routing" ], - "time": "2018-02-13T20:26:39+00:00" + "time": "2018-02-13 20:26:39" }, { "name": "paragonie/constant_time_encoding", @@ -221,7 +274,7 @@ "hex2bin", "rfc4648" ], - "time": "2018-03-10T19:47:49+00:00" + "time": "2018-03-10 19:47:49" }, { "name": "paragonie/random_compat", @@ -266,7 +319,7 @@ "pseudorandom", "random" ], - "time": "2018-07-02T15:55:56+00:00" + "time": "2018-07-02 15:55:56" }, { "name": "paragonie/seedspring", @@ -308,7 +361,7 @@ } ], "description": "Seeded, deterministic random number generator", - "time": "2018-06-06T17:57:31+00:00" + "time": "2018-06-06 17:57:31" }, { "name": "pimple/pimple", @@ -358,7 +411,7 @@ "container", "dependency injection" ], - "time": "2018-01-21T07:42:36+00:00" + "time": "2018-01-21 07:42:36" }, { "name": "psr/container", @@ -407,7 +460,7 @@ "container-interop", "psr" ], - "time": "2017-02-14T16:28:37+00:00" + "time": "2017-02-14 16:28:37" }, { "name": "psr/http-message", @@ -457,7 +510,7 @@ "request", "response" ], - "time": "2016-08-06T14:39:51+00:00" + "time": "2016-08-06 14:39:51" }, { "name": "psr/log", @@ -504,7 +557,7 @@ "psr", "psr-3" ], - "time": "2016-10-10T12:19:37+00:00" + "time": "2016-10-10 12:19:37" }, { "name": "slim/php-view", @@ -553,7 +606,7 @@ "template", "view" ], - "time": "2016-10-11T07:43:08+00:00" + "time": "2016-10-11 07:43:08" }, { "name": "slim/slim", @@ -624,7 +677,7 @@ "micro", "router" ], - "time": "2018-09-16T10:54:21+00:00" + "time": "2018-09-16 10:54:21" }, { "name": "slim/twig-view", @@ -675,7 +728,7 @@ "twig", "view" ], - "time": "2018-05-07T10:54:29+00:00" + "time": "2018-05-07 10:54:29" }, { "name": "symfony/polyfill-ctype", @@ -733,7 +786,7 @@ "polyfill", "portable" ], - "time": "2018-08-06T14:22:27+00:00" + "time": "2018-08-06 14:22:27" }, { "name": "symfony/polyfill-mbstring", @@ -792,7 +845,7 @@ "portable", "shim" ], - "time": "2018-08-06T14:22:27+00:00" + "time": "2018-08-06 14:22:27" }, { "name": "twig/twig", @@ -859,7 +912,7 @@ "keywords": [ "templating" ], - "time": "2018-07-13T07:18:09+00:00" + "time": "2018-07-13 07:18:09" } ], "packages-dev": [ @@ -915,7 +968,7 @@ "constructor", "instantiate" ], - "time": "2015-06-14T21:17:01+00:00" + "time": "2015-06-14 21:17:01" }, { "name": "myclabs/deep-copy", @@ -960,7 +1013,7 @@ "object", "object graph" ], - "time": "2017-10-19T19:58:43+00:00" + "time": "2017-10-19 19:58:43" }, { "name": "phpdocumentor/reflection-common", @@ -1014,7 +1067,7 @@ "reflection", "static analysis" ], - "time": "2017-09-11T18:02:19+00:00" + "time": "2017-09-11 18:02:19" }, { "name": "phpdocumentor/reflection-docblock", @@ -1065,7 +1118,7 @@ } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2017-11-30T07:14:17+00:00" + "time": "2017-11-30 07:14:17" }, { "name": "phpdocumentor/type-resolver", @@ -1112,7 +1165,7 @@ "email": "me@mikevanriel.com" } ], - "time": "2017-07-14T14:27:02+00:00" + "time": "2017-07-14 14:27:02" }, { "name": "phpspec/prophecy", @@ -1175,7 +1228,7 @@ "spy", "stub" ], - "time": "2018-08-05T17:53:17+00:00" + "time": "2018-08-05 17:53:17" }, { "name": "phpunit/php-code-coverage", @@ -1238,7 +1291,7 @@ "testing", "xunit" ], - "time": "2017-04-02T07:44:40+00:00" + "time": "2017-04-02 07:44:40" }, { "name": "phpunit/php-file-iterator", @@ -1285,7 +1338,7 @@ "filesystem", "iterator" ], - "time": "2017-11-27T13:52:08+00:00" + "time": "2017-11-27 13:52:08" }, { "name": "phpunit/php-text-template", @@ -1326,7 +1379,7 @@ "keywords": [ "template" ], - "time": "2015-06-21T13:50:34+00:00" + "time": "2015-06-21 13:50:34" }, { "name": "phpunit/php-timer", @@ -1375,7 +1428,7 @@ "keywords": [ "timer" ], - "time": "2017-02-26T11:10:40+00:00" + "time": "2017-02-26 11:10:40" }, { "name": "phpunit/php-token-stream", @@ -1424,7 +1477,7 @@ "keywords": [ "tokenizer" ], - "time": "2017-11-27T05:48:46+00:00" + "time": "2017-11-27 05:48:46" }, { "name": "phpunit/phpunit", @@ -1506,7 +1559,7 @@ "testing", "xunit" ], - "time": "2018-02-01T05:50:59+00:00" + "time": "2018-02-01 05:50:59" }, { "name": "phpunit/phpunit-mock-objects", @@ -1565,7 +1618,7 @@ "mock", "xunit" ], - "time": "2017-06-30T09:13:00+00:00" + "time": "2017-06-30 09:13:00" }, { "name": "sebastian/code-unit-reverse-lookup", @@ -1610,7 +1663,7 @@ ], "description": "Looks up which function or method a line of code belongs to", "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "time": "2017-03-04T06:30:41+00:00" + "time": "2017-03-04 06:30:41" }, { "name": "sebastian/comparator", @@ -1674,7 +1727,7 @@ "compare", "equality" ], - "time": "2017-01-29T09:50:25+00:00" + "time": "2017-01-29 09:50:25" }, { "name": "sebastian/diff", @@ -1726,7 +1779,7 @@ "keywords": [ "diff" ], - "time": "2017-05-22T07:24:03+00:00" + "time": "2017-05-22 07:24:03" }, { "name": "sebastian/environment", @@ -1776,7 +1829,7 @@ "environment", "hhvm" ], - "time": "2016-11-26T07:53:53+00:00" + "time": "2016-11-26 07:53:53" }, { "name": "sebastian/exporter", @@ -1843,7 +1896,7 @@ "export", "exporter" ], - "time": "2016-11-19T08:54:04+00:00" + "time": "2016-11-19 08:54:04" }, { "name": "sebastian/global-state", @@ -1894,7 +1947,7 @@ "keywords": [ "global state" ], - "time": "2015-10-12T03:26:01+00:00" + "time": "2015-10-12 03:26:01" }, { "name": "sebastian/object-enumerator", @@ -1940,7 +1993,7 @@ ], "description": "Traverses array structures and object graphs to enumerate all referenced objects", "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "time": "2017-02-18T15:18:39+00:00" + "time": "2017-02-18 15:18:39" }, { "name": "sebastian/recursion-context", @@ -1993,7 +2046,7 @@ ], "description": "Provides functionality to recursively process PHP variables", "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2016-11-19T07:33:16+00:00" + "time": "2016-11-19 07:33:16" }, { "name": "sebastian/resource-operations", @@ -2035,7 +2088,7 @@ ], "description": "Provides a list of PHP built-in functions that operate on resources", "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "time": "2015-07-28T20:34:47+00:00" + "time": "2015-07-28 20:34:47" }, { "name": "sebastian/version", @@ -2078,20 +2131,20 @@ ], "description": "Library that helps with managing the version number of Git-hosted PHP projects", "homepage": "https://github.com/sebastianbergmann/version", - "time": "2016-10-03T07:35:21+00:00" + "time": "2016-10-03 07:35:21" }, { "name": "symfony/yaml", - "version": "v3.4.16", + "version": "v3.4.17", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "61973ecda60e9f3561e929e19c07d4878b960fc1" + "reference": "640b6c27fed4066d64b64d5903a86043f4a4de7f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/61973ecda60e9f3561e929e19c07d4878b960fc1", - "reference": "61973ecda60e9f3561e929e19c07d4878b960fc1", + "url": "https://api.github.com/repos/symfony/yaml/zipball/640b6c27fed4066d64b64d5903a86043f4a4de7f", + "reference": "640b6c27fed4066d64b64d5903a86043f4a4de7f", "shasum": "" }, "require": { @@ -2137,7 +2190,7 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2018-09-24T08:15:45+00:00" + "time": "2018-10-02 16:33:53" }, { "name": "webmozart/assert", @@ -2187,7 +2240,7 @@ "check", "validate" ], - "time": "2018-01-29T19:49:41+00:00" + "time": "2018-01-29 19:49:41" } ], "aliases": [], diff --git a/public/Renogare-Regular.woff b/public/Renogare-Regular.woff new file mode 100644 index 0000000..11100ce Binary files /dev/null and b/public/Renogare-Regular.woff differ diff --git a/public/index.php b/public/index.php index c39d3f4..09b9ada 100755 --- a/public/index.php +++ b/public/index.php @@ -3,6 +3,10 @@ use \Psr\Http\Message\ResponseInterface as Response; use \ParagonIE\SeedSpring\SeedSpring; use \Slim\Views\PhpRenderer; +use \Dflydev\FigCookies\FigRequestCookies; +use \Dflydev\FigCookies\FigResponseCookies; +use Dflydev\FigCookies\Modifier\SameSite; +use Dflydev\FigCookies\SetCookie; if (PHP_SAPI == 'cli-server') { // To help the built-in PHP dev server, check if the request was actually for @@ -29,22 +33,56 @@ require __DIR__ . '/../src/middleware.php'; // Register routes +//require __DIR__ . '/../src/routes.php'; -// Run app $app->get('/celeste/', function (Request $request, Response $response, array $args) { //Generate semirandom seed based on a hash of current timestamp $date = date('YmdHis'); $seed = substr(md5($date), 0, 16); + $lang = FigRequestCookies::get($request, 'lang'); + + if($lang->getValue() == null){ + $response = FigResponseCookies::set($response, SetCookie::create('lang') + ->withValue('en') + ->withMaxAge(500) + ->rememberForever() + ->withPath('/celeste') + ->withDomain('.oneninefour.cl') + ->withSecure(true) + ->withHttpOnly(true)); + } + + $flags = $request->getQueryParam('flags'); - return $response->withRedirect('/celeste/'.$seed); + return $response->withRedirect('/celeste/'.$seed.(($flags != null)? '?flags='.$flags:'')); }); $app->get('/celeste/{seed:\w+}', function (Request $request, Response $response, array $args) { $seed = $args['seed']; + $lang = FigRequestCookies::get($request, 'lang'); + if($lang->getValue() == null){ + $response = FigResponseCookies::set($response, SetCookie::create('lang') + ->withValue('en') + ->withMaxAge(500) + ->rememberForever() + ->withPath('/celeste') + ->withDomain('.oneninefour.cl') + ->withSecure(true) + ->withHttpOnly(true)); + } + + $flags = $request->getQueryParam('flags'); + list($task_list, $page_text) = getTaskList($seed, $lang->getValue(), $flags); - $task_list = getTaskList($seed); - $response = $this->renderer->render($response, 'index.phtml', ['task_list' => $task_list]); + if($flags == null){ + $flags = []; + } + + $flags = str_split($flags); + + $lang_options = ['en' => 'English', 'es' => 'Español']; + $response = $this->renderer->render($response, 'index.phtml', ['task_list' => $task_list, 'page_text' => $page_text['WEBSITE'], 'lang' => $lang->getValue(), 'lang_options' => $lang_options, 'flags' => $flags]); return $response; }); @@ -54,45 +92,109 @@ $date = date('YmdHis'); $seed = substr(md5($date),0,16); - $task_list = getTaskList($seed); + $parsedBody = $request->getParsedBody(); + + $lang = null; + if(array_key_exists('lang', $parsedBody)){ + $lang = $parsedBody['lang']; + } + else{ + $lang = 'en'; + } + + $flags = ''; + if(array_key_exists('allow_cheat', $parsedBody) && $parsedBody['allow_cheat']){ + $flags.='c'; + } + if(array_key_exists('exclude_berries', $parsedBody) && $parsedBody['exclude_berries']){ + $flags.='s'; + } + if(array_key_exists('exclude_pico', $parsedBody) && $parsedBody['exclude_pico']){ + $flags.='p'; + } + + list($task_list, $page_text) = getTaskList($seed, $lang, $flags); + + $data = ['seed' => $seed, 'list' => $task_list, 'lang' => $lang]; + + if(array_key_exists('allow_cheat', $parsedBody)){ + $data['allow_cheat'] = $parsedBody['allow_cheat']; + } + if(array_key_exists('exclude_berries', $parsedBody)){ + $data['exclude_berries'] = $parsedBody['exclude_berries']; + } + if(array_key_exists('exclude_pico', $parsedBody)){ + $data['exclude_pico'] = $parsedBody['exclude_pico']; + } - $data = ['seed' => $seed, 'list' => $task_list]; return $response->withJson($data); }); $app->post('/celeste/{seed:\w+}', function (Request $request, Response $response, array $args) { $seed = $args['seed']; - $task_list = getTaskList($seed); + $parsedBody = $request->getParsedBody(); + + $lang = null; + if(array_key_exists('lang', $parsedBody)){ + $lang = $parsedBody['lang']; + } + else{ + $lang = 'en'; + } + + $flags = ''; + if(array_key_exists('allow_cheat', $parsedBody) && $parsedBody['allow_cheat']){ + $flags.='c'; + } + if(array_key_exists('exclude_berries', $parsedBody) && $parsedBody['exclude_berries']){ + $flags.='s'; + } + if(array_key_exists('exclude_pico', $parsedBody) && $parsedBody['exclude_pico']){ + $flags.='p'; + } + + list($task_list, $page_text) = getTaskList($seed, $lang, $flags); + + $data = ['seed' => $seed, 'list' => $task_list, 'lang' => $lang]; + + if(array_key_exists('allow_cheat', $parsedBody)){ + $data['allow_cheat'] = $parsedBody['allow_cheat']; + } + if(array_key_exists('exclude_berries', $parsedBody)){ + $data['exclude_berries'] = $parsedBody['exclude_berries']; + } + if(array_key_exists('exclude_pico', $parsedBody)){ + $data['exclude_pico'] = $parsedBody['exclude_pico']; + } - $data = ['seed' => $seed, 'list' => $task_list]; return $response->withJson($data); }); + $app->run(); //randomization logic -- create task list given seed -function getTaskList($seed){ - $seed = substr(md5('74dPU18G'.$seed),0,16); +function getTaskList($seed, $lang = 'en', $flags = ''){ + if($lang == null){ + $lang = 'en'; + } + $text_strings = get_text_strings($lang); //retrieve task library and init vars - $task_library = json_decode(file_get_contents('task_list.json'), true); + if($flags == null){ + $flags = ''; + } + + $flags = str_split($flags); + $task_library = getTaskLibrary($flags); $task_list = []; $removed_task_ids = []; //Initialize RNG + $seed = substr(md5('74dPU18G'.$seed),0,16); $rng = new SeedSpring($seed); - $chapter_names = [ - "Forsaken City", - "Old Site", - "Celestial Resort", - "Golden Ridge", - "Mirror Temple", - "Reflection", - "Summit" - ]; - $chapters = [1, 2, 3, 4, 5, 6, 7]; $chapter_container = []; //Get a task for each chapter @@ -152,9 +254,11 @@ function getTaskList($seed){ $removed_task_ids[] = $rand_task['task_id']; } + $task_key = $rand_task['task_key']; + $chapter_container[$chapter - 1] = [ - 'name' => $chapter_names[$chapter - 1], - 'task' => $rand_task['task_description'] + 'name' => lookup_string($text_strings['CHAPTERS'], "AREA_$chapter"), + 'task' => lookup_string($text_strings['TASKS'], $task_key) ]; } @@ -164,6 +268,62 @@ function getTaskList($seed){ } + return array($task_list, $text_strings); +} + +function get_text_strings($language_chosen = 'en') { + // TODO add code that gets some value of a Options + +
+
+ + + +
+
+
+ + + +
+ + + + + + + + +
+
+ +
+
-

What's this?

-

Inspired by the Ocarina of Time Bingo, Celeste Hunt generates, given a seed, a randomly assigned list of tasks to complete. Your goal is, from a new file, to reach the Summit and achieve all the tasks.

-

Each seed is deterministic, so you can share your seed by copying and pasting the URL in your browser.

+

+ +

+

+ +