From f0c1730a768e7e2a21661c6e18ffa75850214f7c Mon Sep 17 00:00:00 2001 From: Imperadeiro98 Date: Thu, 30 Oct 2014 17:01:27 +0000 Subject: [PATCH 01/14] Updated obsolete tip --- app/templates/play/level/level_loading.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/templates/play/level/level_loading.jade b/app/templates/play/level/level_loading.jade index 476a0a2a4..48fe4f7bb 100644 --- a/app/templates/play/level/level_loading.jade +++ b/app/templates/play/level/level_loading.jade @@ -11,7 +11,7 @@ #tip-wrapper strong.tip(data-i18n='play_level.tip_toggle_play') Toggle play/paused with Ctrl+P. strong.tip(data-i18n='play_level.tip_scrub_shortcut') Ctrl+[ and Ctrl+] rewind and fast-forward. - strong.tip(data-i18n='play_level.tip_guide_exists') Click the guide at the top of the page for useful info. + strong.tip(data-i18n='play_level.tip_guide_exists') Click the guide, inside game menu (at the top of the page), for useful info. strong.tip(data-i18n='play_level.tip_open_source') CodeCombat is 100% open source! strong.tip(data-i18n='play_level.tip_beta_launch') CodeCombat launched its beta in October, 2013. strong.tip(data-i18n='play_level.tip_think_solution') Think of the solution, not the problem. From 3c71d9901f2dc66f53975d51be98146f18ec1e82 Mon Sep 17 00:00:00 2001 From: Imperadeiro98 Date: Thu, 30 Oct 2014 17:01:31 +0000 Subject: [PATCH 02/14] Updated obsolete tip --- app/locale/en.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/locale/en.coffee b/app/locale/en.coffee index c558a0deb..f5cce8e62 100644 --- a/app/locale/en.coffee +++ b/app/locale/en.coffee @@ -241,7 +241,7 @@ infinite_loop_comment_out: "Comment Out My Code" tip_toggle_play: "Toggle play/paused with Ctrl+P." tip_scrub_shortcut: "Ctrl+[ and Ctrl+] rewind and fast-forward." - tip_guide_exists: "Click the guide at the top of the page for useful info." + tip_guide_exists: "Click the guide, inside game menu (at the top of the page), for useful info." tip_open_source: "CodeCombat is 100% open source!" tip_beta_launch: "CodeCombat launched its beta in October, 2013." tip_think_solution: "Think of the solution, not the problem." From da2ca3ec63982303e376043fc67c1a7ccaddf53e Mon Sep 17 00:00:00 2001 From: Michael Schmatz Date: Thu, 30 Oct 2014 14:12:58 -0400 Subject: [PATCH 03/14] Temporarily increased serialization limit for iOS --- app/initialize.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/initialize.coffee b/app/initialize.coffee index 2b724cbe5..9cb2e2954 100644 --- a/app/initialize.coffee +++ b/app/initialize.coffee @@ -132,7 +132,7 @@ window.serializeForIOS = serializeForIOS = (obj, depth=3) -> clone = {} keysHandled = 0 for own key, value of obj - continue if ++keysHandled > 20 + continue if ++keysHandled > 50 if not value clone[key] = value else if value is window or value.firstElementChild or value.preventDefault From b971a590cb3d34ae8e9488dadd0c0305a7cfcd51 Mon Sep 17 00:00:00 2001 From: Christelle Date: Thu, 30 Oct 2014 13:19:00 -0500 Subject: [PATCH 04/14] Update fr.coffee --- app/locale/fr.coffee | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/locale/fr.coffee b/app/locale/fr.coffee index c375f3beb..eb36d7572 100644 --- a/app/locale/fr.coffee +++ b/app/locale/fr.coffee @@ -58,7 +58,7 @@ module.exports = nativeDescription: "français", englishDescription: "French", t # next: "Next" # Go from choose hero to choose inventory before playing a level # change_hero: "Change Hero" # Go back from choose inventory to choose hero # choose_inventory: "Equip Items" -# older_campaigns: "Older Campaigns" + older_campaigns: "Anciennes campagnes" # anonymous: "Anonymous Player" level_difficulty: "Difficulté: " campaign_beginner: "Campagne du Débutant" @@ -605,7 +605,7 @@ module.exports = nativeDescription: "français", englishDescription: "French", t diplomat_launch_url: "lancement en octobre" diplomat_introduction_suf: "c'est qu'il y a un intérêt considérable pour CodeCombat dans d'autres pays, particulièrement au Brésil! Nous créons une équipe de traducteurs pour changer une liste de mots en une autre pour que CodeCombat soit le plus accessible possible à travers le monde. Si vous souhaitez avoir un aperçu des prochains contenus et avoir les niveaux dans votre langue le plus tôt possible, alors cette classe est faite pour vous." diplomat_attribute_1: "Des facilités en anglais et dans la langue que vous souhaitez traduire. Pour transmettre des idées complexes, il est important d'avoir une solide compréhension des deux!" - diplomat_join_pref_github: "Trouvez le fichier de langue souhaité" + diplomat_join_pref_github: "Trouvez le fichier de langue souhaité " diplomat_github_url: "sur GitHub" # diplomat_join_suf_github: ", edit it online, and submit a pull request. Also, check this box below to keep up-to-date on new internationalization developments!" more_about_diplomat: "En apprendre plus sur comment devenir un bon diplomate" From 4dd3f1724b88271f86c145a5cb338df875ce6b85 Mon Sep 17 00:00:00 2001 From: Igzok Date: Thu, 30 Oct 2014 20:24:25 +0100 Subject: [PATCH 05/14] BIG Update fr.coffee BIG Translation ! The most is translated ! --- app/locale/fr.coffee | 402 +++++++++++++++++++++---------------------- 1 file changed, 201 insertions(+), 201 deletions(-) diff --git a/app/locale/fr.coffee b/app/locale/fr.coffee index eb36d7572..c48262352 100644 --- a/app/locale/fr.coffee +++ b/app/locale/fr.coffee @@ -48,25 +48,25 @@ module.exports = nativeDescription: "français", englishDescription: "French", t play: play_as: "Jouer comme " # Ladder page spectate: "Spectateur" # Ladder page -# players: "players" # Hover over a level on /play -# hours_played: "hours played" # Hover over a level on /play -# items: "Items" # Tooltip on item shop button from /play -# heroes: "Heroes" # Tooltip on hero shop button from /play -# achievements: "Achievements" # Tooltip on achievement list button from /play -# account: "Account" # Tooltip on account button from /play -# settings: "Settings" # Tooltip on settings button from /play -# next: "Next" # Go from choose hero to choose inventory before playing a level -# change_hero: "Change Hero" # Go back from choose inventory to choose hero -# choose_inventory: "Equip Items" - older_campaigns: "Anciennes campagnes" -# anonymous: "Anonymous Player" + players: "joueurs" # Hover over a level on /play + hours_played: "heures jouées" # Hover over a level on /play + items: "Objets" # Tooltip on item shop button from /play + heroes: "Héros" # Tooltip on hero shop button from /play + achievements: "Succès" # Tooltip on achievement list button from /play + account: "Compte" # Tooltip on account button from /play + settings: "Réglages" # Tooltip on settings button from /play + next: "Suivant" # Go from choose hero to choose inventory before playing a level + change_hero: "Changer le Héro" # Go back from choose inventory to choose hero + choose_inventory: "Équiper des objets" + older_campaigns: "Anciennes Campagnes" + anonymous: "Joueur anonyme" level_difficulty: "Difficulté: " campaign_beginner: "Campagne du Débutant" choose_your_level: "Choisissez votre niveau" # The rest of this section is the old play view at /play-old and isn't very important. adventurer_prefix: "Vous pouvez passer à n'importe quel niveau ci-dessous, ou discuter des niveaux sur " adventurer_forum: "le forum de l'Aventurier" adventurer_suffix: "." -# campaign_old_beginner: "Old Beginner Campaign" + campaign_old_beginner: "Anciennes Campagnes pour Débutant" campaign_old_beginner_description: "... dans laquelle vous apprendrez la magie de la programmation." campaign_dev: "Niveaux aléatoires plus difficiles" campaign_dev_description: "... dans lesquels vous apprendrez à utiliser l'interface en faisant quelque chose d'un petit peu plus dur." @@ -74,8 +74,8 @@ module.exports = nativeDescription: "français", englishDescription: "French", t campaign_multiplayer_description: "... dans laquelle vous coderez en face à face contre d'autres joueurs." campaign_player_created: "Niveaux créés par les joueurs" campaign_player_created_description: "... Dans laquelle vous serez confrontés à la créativité des votres.Artisan Wizards." -# campaign_classic_algorithms: "Classic Algorithms" -# campaign_classic_algorithms_description: "... in which you learn the most popular algorithms in Computer Science." + campaign_classic_algorithms: "Algorithmes classiques" + campaign_classic_algorithms_description: "... dans lesquels vous apprendrez les algorithmes les plus populaires dans l'informatique." login: sign_up: "Créer un compte" @@ -99,14 +99,14 @@ module.exports = nativeDescription: "français", englishDescription: "French", t recover: recover_account_title: "Récupérer son compte" send_password: "Envoyer le mot de passe de récupération" -# recovery_sent: "Recovery email sent." + recovery_sent: "Email de récupération envoyé" -# items: -# armor: "Armor" -# hands: "Hands" -# accessories: "Accessories" -# minions: "Minions" -# misc: "Misc" + items: + armor: "Armure" + hands: "Mains" + accessories: "Accessoires" + minions: "Sbires" + misc: "Divers" common: loading: "Chargement..." @@ -176,11 +176,11 @@ module.exports = nativeDescription: "français", englishDescription: "French", t done: "Fait" home: "Accueil" skip: "Passer" -# game_menu: "Game Menu" + game_menu: "Menu du jeu" guide: "Guide" restart: "Relancer" goals: "Objectifs" -# goal: "Goal" + goal: "Objectif" success: "Succès" incomplete: "Imcoplet" timed_out: "Plus de temps" @@ -195,15 +195,15 @@ module.exports = nativeDescription: "français", englishDescription: "French", t victory_sign_up: "Inscrivez-vous pour recevoir les mises à jour" victory_sign_up_poke: "Vous voulez recevoir les dernières actualités par mail? Créez un compte gratuitement et nous vous tiendrons informés!" victory_rate_the_level: "Notez ce niveau: " # Only in old-style levels. -# victory_return_to_ladder: "Return to Ladder" -# victory_play_continue: "Continue" -# victory_play_skip: "Skip Ahead" + victory_return_to_ladder: "Retourner à l'échelle" + victory_play_continue: "Continuer" + victory_play_skip: "Passer" victory_play_next_level: "Jouer au prochain niveau" -# victory_play_more_practice: "More Practice" -# victory_play_too_easy: "Too Easy" -# victory_play_just_right: "Just Right" -# victory_play_too_hard: "Too Hard" -# victory_saving_progress: "Saving Progress" + victory_play_more_practice: "Plus de pratique" + victory_play_too_easy: "Trop Facile" + victory_play_just_right: "Juste" + victory_play_too_hard: "Trop Dur" + victory_saving_progress: "Sauvegarder la progression" victory_go_home: "Retourner à l'accueil" # Only in old-style levels. victory_review: "Dites-nous en plus!" # Only in old-style levels. victory_hour_of_code_done: "Déjà fini ?" @@ -215,117 +215,117 @@ module.exports = nativeDescription: "français", englishDescription: "French", t tome_cast_button_castable: "Jeter le sort" # Temporary, if tome_cast_button_run isn't translated. tome_cast_button_casting: "Sort en court" # Temporary, if tome_cast_button_running isn't translated. tome_cast_button_cast: "Sort jeté" # Temporary, if tome_cast_button_ran isn't translated. -# tome_cast_button_run: "Run" -# tome_cast_button_running: "Running" -# tome_cast_button_ran: "Ran" + tome_cast_button_run: "Exécuter" + tome_cast_button_running: "En cours d'exécution" + tome_cast_button_ran: "Exécuté" tome_submit_button: "Envoyer" -# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button. -# tome_select_method: "Select a Method" -# tome_see_all_methods: "See all methods you can edit" # Title text for method list selector (shown when there are multiple programmable methdos). + tome_reload_method: "Recharger le code original pour cette méthode" # Title text for individual method reload button. + tome_select_method: "Selectionner une méthode" + tome_see_all_methods: "Voir toutes les méthodes que vous pouvez éditer" # Title text for method list selector (shown when there are multiple programmable methdos). tome_select_a_thang: "Sélectionnez une unité pour" tome_available_spells: "Sorts diponibles" tome_your_skills: "Vos compétences" hud_continue: "Continuer (appuie sur shift ou espace)" -# code_saved: "Code Saved" + code_saved: "Code Sauvergardé" skip_tutorial: "Passer (esc)" keyboard_shortcuts: "Raccourcis Clavier" loading_ready: "Pret!" -# loading_start: "Start Level" + loading_start: "Démarrer le niveau" time_current: "Maintenant:" time_total: "Max:" time_goto: "Allez a:" infinite_loop_try_again: "Reessayer" - infinite_loop_reset_level: "Redemarrer le niveau" + infinite_loop_reset_level: "Redémarrer le niveau" infinite_loop_comment_out: "Supprimez les commentaire de mon code" tip_toggle_play: "Jouer/Pause avec Ctrl+P." -# tip_scrub_shortcut: "Ctrl+[ and Ctrl+] rewind and fast-forward." -# tip_guide_exists: "Click the guide at the top of the page for useful info." + tip_scrub_shortcut: "Ctrl+[ and Ctrl+] rembobinage et avance rapide." + tip_guide_exists: "Cliquez sur le guide en au haut de la page pour des informations utiles." tip_open_source: "CodeCombat est 100% open source!" tip_beta_launch: "La beta de CodeCombat a été lancée en Octobre 2013" tip_think_solution: "Reflechissez a propos de la solution et non du problème." tip_theory_practice: "En théorie, il n'y a pas de différence entre la théorie et la pratique. Mais en pratique il y en a. - Yogi Berra" -# tip_error_free: "There are two ways to write error-free programs; only the third one works. - Alan Perlis" + tip_error_free: "Il ya deux façons d'écrire des programmes sans erreur; seulement la troisième marche. - Alan Perlis" tip_debugging_program: "Si débugger est l'art de corriger les bugs, alors programmer est l'art d'en créer. . - Edsger W. Dijkstra" -# tip_forums: "Head over to the forums and tell us what you think!" + tip_forums: "Rendez-vous sur le forum et dites nous ce que vous en pensez!" tip_baby_coders: "Dans le futur, même les bébés seront des archimages." -# tip_morale_improves: "Loading will continue until morale improves." -# tip_all_species: "We believe in equal opportunities to learn programming for all species." + tip_morale_improves: "Le chargement se poursuivra jusqu'à ce que la morale s'améliore." + tip_all_species: "Nous croyons en l'égalité des chances d'apprendre la programmation pour toutes les espèces." # tip_reticulating: "Reticulating spines." # tip_harry: "Yer a Wizard, " -# tip_great_responsibility: "With great coding skill comes great debug responsibility." -# tip_munchkin: "If you don't eat your vegetables, a munchkin will come after you while you're asleep." -# tip_binary: "There are only 10 types of people in the world: those who understand binary, and those who don't." -# tip_commitment_yoda: "A programmer must have the deepest commitment, the most serious mind. ~ Yoda" -# tip_no_try: "Do. Or do not. There is no try. - Yoda" -# tip_patience: "Patience you must have, young Padawan. - Yoda" -# tip_documented_bug: "A documented bug is not a bug; it is a feature." -# tip_impossible: "It always seems impossible until it's done. - Nelson Mandela" -# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds" -# tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay" -# tip_hardware_problem: "Q: How many programmers does it take to change a light bulb? A: None, it's a hardware problem." + tip_great_responsibility: "Avec de grandes compétences en programmation vient une grande responsabilité de débogage." + tip_munchkin: "Si vous ne mangez pas vos légumes, un munchkin viendra après vous pendant que vous dormirez." + tip_binary: "Il ya seulement 10 types de personnes dans le monde: ceux qui comprennent le binaire, et ceux qui ne le comprennent pas." + tip_commitment_yoda: "L'engagement le plus profond, l'esprit le plus grave un programmeur doit avoir. ~ Yoda" + tip_no_try: "Faire. Ou ne pas faire. Il n'y a pas d'essai. - Yoda" + tip_patience: "Patience tu dois avoir, jeune Padawan. - Yoda" + tip_documented_bug: "Un bug documenté n'est pas un bug; c'est une caractéristique" + tip_impossible: "Cela semble toujours impossible jusqu'à ce que l'on y arrive. - Nelson Mandela" + tip_talk_is_cheap: "Discuter est facile. Montrez-moi le code. - Linus Torvalds" + tip_first_language: "la chose la plus désastreuse que vous ne pourrez jamais apprendre est votre premier langage de programmation. - Alan Kay" + tip_hardware_problem: "Q: Combien de programmeurs faut-il pour changer une ampoule? R: Aucun, c'est un problème de matériel." # tip_hofstadters_law: "Hofstadter's Law: It always takes longer than you expect, even when you take into account Hofstadter's Law." -# tip_premature_optimization: "Premature optimization is the root of all evil. - Donald Knuth" -# tip_brute_force: "When in doubt, use brute force. - Ken Thompson" + tip_premature_optimization: "L'optimisation prématurée est la racine de tous les maux. - Donald Knuth" + tip_brute_force: "En cas de doute, utiliser la force brute. - Ken Thompson" customize_wizard: "Personnaliser le magicien" game_menu: inventory_tab: "Inventaire" -# choose_hero_tab: "Restart Level" -# save_load_tab: "Save/Load" + choose_hero_tab: "Redémmarrer le niveau" + save_load_tab: "Sauvegarder/Charger" # options_tab: "Options" # guide_tab: "Guide" multiplayer_tab: "Multijoueur" -# auth_tab: "Sign Up" -# inventory_caption: "Equip your hero" -# choose_hero_caption: "Choose hero, language" -# save_load_caption: "... and view history" -# options_caption: "Configure settings" -# guide_caption: "Docs and tips" -# multiplayer_caption: "Play with friends!" -# auth_caption: "Save your progress." + auth_tab: "S'inscrire" + inventory_caption: "Équipez votre héro" + choose_hero_caption: "Choisissez votre héro, langage" + save_load_caption: "... et voir l'historique" + options_caption: "Configurer les réglages" + guide_caption: "Docs and conseils" + multiplayer_caption: "Jouer avec des amis!" + auth_caption: "Sauvegarder votre progression." -# inventory: -# choose_inventory: "Equip Items" + inventory: + choose_inventory: "Équiper des Objets" -# choose_hero: -# choose_hero: "Choose Your Hero" -# programming_language: "Programming Language" -# programming_language_description: "Which programming language do you want to use?" -# python_blurb: "Simple yet powerful, great for beginners and experts." -# javascript_blurb: "The language of the web. (Not the same as Java.)" -# coffeescript_blurb: "Nicer JavaScript syntax." -# clojure_blurb: "A modern Lisp." -# lua_blurb: "Game scripting language." -# io_blurb: "Simple but obscure." + choose_hero: + choose_hero: "Choisissez votre Héro" + programming_language: "Langage de programmation" + programming_language_description: "Quel langage de programmation voullez-vous utiliser?" + python_blurb: "Simple mais puissant, idéal pour les débutants et les experts." + javascript_blurb: "Le langage du web. (Pas le même que Java.)" + coffeescript_blurb: "Une syntaxe Javascript plus agréable." + clojure_blurb: "Un Lisp moderne." + lua_blurb: "Langage de script de jeu." + io_blurb: "Simple mais obscure." # status: "Status" -# weapons: "Weapons" -# attack: "Damage" # Can also translate as "Attack" -# health: "Health" -# speed: "Speed" -# skills: "Skills" + weapons: "Arme" + attack: "Dégât" # Can also translate as "Attack" + health: "Santé" + speed: "Vitesse" + skills: "Compétences" -# save_load: -# granularity_saved_games: "Saved" -# granularity_change_history: "History" + save_load: + granularity_saved_games: "Sauvegardé" + granularity_change_history: "Historique" options: -# general_options: "General Options" # Check out the Options tab in the Game Menu while playing a level + general_options: "Options Générales" # Check out the Options tab in the Game Menu while playing a level # volume_label: "Volume" -# music_label: "Music" -# music_description: "Turn background music on/off." -# autorun_label: "Autorun" -# autorun_description: "Control automatic code execution." + music_label: "Musique" + music_description: "Arrêter/Reprendre la musique de fond." + autorun_label: "Auto-exécution" + autorun_description: "Controler l'exécution automatique du code." editor_config: "Config de l'éditeur" editor_config_title: "Configuration de l'éditeur" editor_config_level_language_label: "Langage pour le niveau" -# editor_config_level_language_description: "Define the programming language for this particular level." + editor_config_level_language_description: "Définir le langage de programmation pour le niveaux en particulier." editor_config_default_language_label: "Langage de Programmation par défaut" editor_config_default_language_description: "Choississez le langage de programmation que vous souhaitez dons les nouveaux niveaux" editor_config_keybindings_label: "Raccourcis clavier" editor_config_keybindings_default: "Par défault (Ace)" editor_config_keybindings_description: "Ajouter de nouveaux raccourcis connus depuis l'éditeur commun." -# editor_config_livecompletion_label: "Live Autocompletion" -# editor_config_livecompletion_description: "Displays autocomplete suggestions while typing." + editor_config_livecompletion_label: "Saisie semi-automatique en direct" + editor_config_livecompletion_description: "Afficher les suggestions de saisie semi-automatique lors de la frappe." editor_config_invisibles_label: "Afficher les caractères non-imprimables" editor_config_invisibles_description: "Permet d'afficher les caractères comme les espaces et les tabulations." editor_config_indentguides_label: "Montrer les indentations" @@ -342,21 +342,21 @@ module.exports = nativeDescription: "français", englishDescription: "French", t why_paragraph_2_italic_caps: "NAN MAMAN JE DOIS FINIR MON NIVEAU!" why_paragraph_2_suffix: "C'est pourquoi CodeCombat est un jeu multijoueur, pas un cours avec une leçon jouée. Nous n'arrêterons pas avant que vous ne puissiez plus arrêter — mais cette fois, c'est une bonne chose." why_paragraph_3: "Si vous devez devenir accro à un jeu, accrochez-vous à celui-ci et devenez un des mages de l'âge de la technologie." -# press_title: "Bloggers/Press" -# press_paragraph_1_prefix: "Want to write about us? Feel free to download and use all of the resources included in our" -# press_paragraph_1_link: "press packet" -# press_paragraph_1_suffix: ". All logos and images may be used without contacting us directly." -# team: "Team" -# george_title: "CEO" -# george_blurb: "Businesser" -# scott_title: "Programmer" -# scott_blurb: "Reasonable One" -# nick_title: "Programmer" -# nick_blurb: "Motivation Guru" -# michael_title: "Programmer" -# michael_blurb: "Sys Admin" -# matt_title: "Programmer" -# matt_blurb: "Bicyclist" + press_title: "Bloggueurs/Presse" + press_paragraph_1_prefix: "Vous voulez écrire sur nous? Sentez-vous libre de télécharger et d'utiliser toutes les ressources incluses dans notre" + press_paragraph_1_link: "paquet de presse" + press_paragraph_1_suffix: ". Tous les logos et images peuvent être utilisées sans nous contacter directement." + team: "Équipe" + george_title: "PDG" + george_blurb: "Homme d'affaires" + scott_title: "Programmeur" + scott_blurb: "Raisonable" + nick_title: "Programmeur" + nick_blurb: "Gourou de Motivation" + michael_title: "Programmeur" + michael_blurb: "Sys Admin" + matt_title: "Programmeur" + matt_blurb: "Bicycliste" versions: save_version_title: "Enregistrer une nouvelle version" @@ -392,14 +392,14 @@ module.exports = nativeDescription: "français", englishDescription: "French", t new_password: "Nouveau mot de passe" new_password_verify: "Vérifier" email_subscriptions: "Abonnements" -# email_subscriptions_none: "No Email Subscriptions." + email_subscriptions_none: "Aucun email d'abonnement." email_announcements: "Annonces" email_announcements_description: "Recevoir des mails sur les dernières actualités et sur le développement de CodeCombat." email_notifications: "Notifications" email_notifications_summary: "Commandes pour personaliser les notifications automatiques d'email liées à votre activité sur CodeCombat." email_any_notes: "Toutes Notifications" email_any_notes_description: "Désactivez pour ne plus recevoir de notifications par e-mail." -# email_news: "News" + email_news: "Actualités" email_recruit_notes: "Offres d'emploi" email_recruit_notes_description: "Si vous jouez vraiment bien, nous pouvons vous contacter pour vous proposer un (meilleur) emploi." contributor_emails: "Emails des contributeurs" @@ -410,7 +410,7 @@ module.exports = nativeDescription: "français", englishDescription: "French", t error_saving: "Problème d'enregistrement" saved: "Changements sauvegardés" password_mismatch: "Le mot de passe ne correspond pas." -# password_repeat: "Please repeat your password." + password_repeat: "Veuillez s'il vous plaît répéter votre mot de passe" job_profile: "Profil d'emploi" # Rest of this section (the job profile stuff and wizard stuff) is deprecated job_profile_approved: "Votre profil d'emploi a été approuvé par CodeCombat. Les employeurs seront en mesure de voir votre profil jusqu'à ce que vous le marquez inactif ou qu'il n'a pas été changé pendant quatre semaines." job_profile_explanation: "Salut! Remplissez-le et nous prendrons contact pour vous trouver un emploi de développeur de logiciels." @@ -425,38 +425,38 @@ module.exports = nativeDescription: "français", englishDescription: "French", t enter: "Entrer" escape: "Echap" # shift: "Shift" -# cast_spell: "Cast current spell." -# run_real_time: "Run in real time." -# continue_script: "Continue past current script." + cast_spell: "Jeter le sort actuel." + run_real_time: "Exécuter en temps réel." + continue_script: "Continuer le script passé courant." # skip_scripts: "Skip past all skippable scripts." -# toggle_playback: "Toggle play/pause." + toggle_playback: "Basculer entre lecture/pause." # scrub_playback: "Scrub back and forward through time." # single_scrub_playback: "Scrub back and forward through time by a single frame." # scrub_execution: "Scrub through current spell execution." # toggle_debug: "Toggle debug display." -# toggle_grid: "Toggle grid overlay." +# toggle_grid: "Toggle grid overlay" # toggle_pathfinding: "Toggle pathfinding overlay." -# beautify: "Beautify your code by standardizing its formatting." -# maximize_editor: "Maximize/minimize code editor." -# move_wizard: "Move your Wizard around the level." + beautify: "Embellissez votre code en normalisant sa mise en forme." + maximize_editor: "Maximiser/minimiser l'éditeur de code." + move_wizard: "Déplacer votre Magicien à travers le niveau." community: main_title: "Communauté CodeCombat" -# introduction: "Check out the ways you can get involved below and decide what sounds the most fun. We look forward to working with you!" -# level_editor_prefix: "Use the CodeCombat" -# level_editor_suffix: "to create and edit levels. Users have created levels for their classes, friends, hackathons, students, and siblings. If create a new level sounds intimidating you can start by forking one of ours!" -# thang_editor_prefix: "We call units within the game 'thangs'. Use the" -# thang_editor_suffix: "to modify the CodeCombat source artwork. Allow units to throw projectiles, alter the direction of an animation, change a unit's hit points, or upload your own vector sprites." + introduction: "Découvrez les façons dont vous pouvez vous impliquer ci-dessous et de décider ce qui semble le plus amusant. Nous sommes impatients de travailler avec vous!" + level_editor_prefix: "Utiliser le CodeCombat" + level_editor_suffix: "pour créer et modifier des niveaux. Les utilisateurs ont créé des niveaux pour leurs classes, amis, hackathons, étudiants et leurs frères et sœurs. Si créer un nouveau niveau est intimidant, vous pouvez commencer par forker un des nôtres!" + thang_editor_prefix: "Nous appelons les unités dans le jeu 'thangs'. Utilisez le" + thang_editor_suffix: "pour modifier l'illustration de la source de CodeCombat. Permettre aux unités de lancer des projectiles, de modifier la direction de l'animation, de changer les points de vie d'une unité, ou de télécharger vos propres sprites vectorielles." # article_editor_prefix: "See a mistake in some of our docs? Want to make some instructions for your own creations? Check out the" # article_editor_suffix: "and help CodeCombat players get the most out of their playtime." -# find_us: "Find us on these sites" -# social_blog: "Read the CodeCombat blog on Sett" -# social_discource: "Join the discussion on our Discourse forum" -# social_facebook: "Like CodeCombat on Facebook" -# social_twitter: "Follow CodeCombat on Twitter" -# social_gplus: "Join CodeCombat on Google+" -# social_hipchat: "Chat with us in the public CodeCombat HipChat room" -# contribute_to_the_project: "Contribute to the project" + find_us: "Trouvez nous sur ces sites" + social_blog: "Lire le blog CodeCombat sur Sett" + social_discource: "Participez à la discussion sur notre forum Discourse" + social_facebook: "Aimer CodeCombat sur Facebook" + social_twitter: "Suivre CodeCombat sur Twitter" + social_gplus: "Rejoindre CodeCombat sur Google+" + social_hipchat: "Chattez avec nous dans la salle HipChat publique CodeCombat" + contribute_to_the_project: "Contribuer au project" classes: archmage_title: "Archimage" @@ -477,16 +477,16 @@ module.exports = nativeDescription: "français", englishDescription: "French", t article_title: "Éditeur d'article" thang_title: "Éditeur Thang" level_title: "Éditeur de niveau" -# achievement_title: "Achievement Editor" + achievement_title: "Éditeur de succès" back: "Retour" revert: "Annuler" revert_models: "Annuler les modèles" -# pick_a_terrain: "Pick A Terrain" + pick_a_terrain: "Choisir un terrain" small: "Petit" -# grassy: "Grassy" + grassy: "Herbeux" fork_title: "Fork une nouvelle version" fork_creating: "Créer un Fork..." -# generate_terrain: "Generate Terrain" + generate_terrain: "Générer le terrain" more: "Plus" wiki: "Wiki" live_chat: "Chat en live" @@ -503,7 +503,7 @@ module.exports = nativeDescription: "français", englishDescription: "French", t level_tab_thangs_add: "ajouter des Thangs" delete: "Supprimer" duplicate: "Dupliquer" -# rotate: "Rotate" + rotate: "Pivoter" level_settings_title: "Paramètres" level_component_tab_title: "Composants actuels" level_component_btn_new: "Créer un nouveau composant" @@ -525,14 +525,14 @@ module.exports = nativeDescription: "français", englishDescription: "French", t new_article_title_login: "Connectez vous pour créer un nouvel article" # new_thang_title_login: "Log In to Create a New Thang Type" new_level_title_login: "Connectez vous pour créer un nouveau niveau" -# new_achievement_title: "Create a New Achievement" -# new_achievement_title_login: "Log In to Create a New Achievement" + new_achievement_title: "Créer un nouveau succès" + new_achievement_title_login: "Connectez vous pour créer un nouveau succès" article_search_title: "Rechercher dans les articles" thang_search_title: "Rechercher dans les types Thang" level_search_title: "Rechercher dans les niveaux" -# achievement_search_title: "Search Achievements" + achievement_search_title: "Rechercher des succès" read_only_warning2: "Note: vous ne pouvez sauvegarder aucune édition, car vous n'êtes pas identifié." -# no_achievements: "No achievements have been added for this level yet." + no_achievements: "Aucuns succès ont encore été ajoutés à ce niveau." # achievement_query_misc: "Key achievement off of miscellanea" # achievement_query_goals: "Key achievement off of level goals" # level_completion: "Level Completion" @@ -552,7 +552,7 @@ module.exports = nativeDescription: "français", englishDescription: "French", t introduction_desc_signature: "- Nick, George, Scott, Michael, Jeremy et Matt" alert_account_message_intro: "Et tiens!" alert_account_message: "Pour souscrire aux e-mails, vous devez être connecté" -# archmage_summary: "Interested in working on game graphics, user interface design, database and server organization, multiplayer networking, physics, sound, or game engine performance? Want to help build a game to help other people learn what you are good at? We have a lot to do and if you are an experienced programmer and want to develop for CodeCombat, this class is for you. We would love your help building the best programming game ever." + archmage_summary: "Intéressé à travailler sur les graphismes du jeu, la conception de l'interface utilisateur, la base de données et l'organisation de serveur, réseau multijoueur, la physique, le son, ou la performance du moteur de jeu? Vous voulez aider à construire un jeu pour aider les autres à apprendre à ce à quoi vous êtes bon? Nous avons beaucoup à faire et si vous êtes un programmeur expérimenté et souhaitez développer pour CodeCombat, cette classe est pour vous. Nous aimerions votre aide pour bâtir le meilleur jeu de programmation ayant jamais existé." archmage_introduction: "L'une des meilleures parties de la création d'un jeu est qu'il regroupe tant de choses différentes. Graphismes, sons, réseau en temps réel, réseaux sociaux, et bien sur bien d'autres aspects de la programmation, de la gestion bas niveau de base de données, et de l'administration de serveur à l'élaboration d'interfaces utilisateur. Il y a tant à faire, et si vous êtes un programmeur expérimenté avec une aspiration à vraiment plonger dans le fond de CodeCombat, cette classe est faite pour vous. Nous aimerions avoir votre aide pour le meilleur jeu de développement de tous les temps." class_attributes: "Attributs de classe" archmage_attribute_1_pref: "Connaissance en " @@ -567,7 +567,7 @@ module.exports = nativeDescription: "français", englishDescription: "French", t join_url_hipchat: "conversation publique HipChat" more_about_archmage: "En apprendre plus sur devenir un puissant archimage" archmage_subscribe_desc: "Recevoir un email sur les nouvelles possibilités de développement et des annonces." -# artisan_summary_pref: "Want to design levels and expand CodeCombat's arsenal? People are playing through our content at a pace faster than we can build! Right now, our level editor is barebone, so be wary. Making levels will be a little challenging and buggy. If you have visions of campaigns spanning for-loops to" + artisan_summary_pref: "Vous voulez concevoir des niveaux et élargir l'arsenal de CodeCombat? Les gens jouent à travers notre contenu à un rythme plus rapide que nous pouvons le construire! À l'heure actuelle, notre éditeur de niveau est basique, méfiez-vous. Concevoir des niveaux sera un peu difficile et buggé. Si vous avez des visions de campagnes couvrant les boucles 'for' pour" artisan_summary_suf: ", alors ce travail est pour vous" artisan_introduction_pref: "Nous devons créer des niveaux additionnels! Les gens veulent plus de contenu, et nous ne pouvons pas tous les créer nous-mêmes. Maintenant votre station de travail est au niveau un ; notre éditeur de niveaux est à peine utilisable même par ses créateurs, donc méfiez-vous. Si vous avez des idées sur la boucle for de" artisan_introduction_suf: ", cette classe est faite pour vous." @@ -581,8 +581,8 @@ module.exports = nativeDescription: "français", englishDescription: "French", t artisan_join_step4: "Postez vos niveaux dans le forum pour avoir des retours." more_about_artisan: "En apprendre plus sur comment devenir un Artisan créatif" artisan_subscribe_desc: "Recevoir un email sur les annonces et mises à jour de l'éditeur de niveaux." -# adventurer_summary: "Let us be clear about your role: you are the tank. You are going to take heavy damage. We need people to try out brand-new levels and help identify how to make things better. The pain will be enormous; making good games is a long process and no one gets it right the first time. If you can endure and have a high constitution score, then this class is for you." - adventurer_introduction: "Soyons clair à propos de votre rôle : vous êtes le tank. Vous allez subir beaucoup de dommages. Nous avons besoin de gens pour essayer les nouveaux niveaux et aider à identifier comment améliorer les choses. La douleur sera énorme; faire de bons jeux est une longue tâche et personne n'y arrive du premier coup. Si vous pouvez résister et avez un gros score de constitution, alors cette classe est faite pour vous." + adventurer_summary: "Soyons clair à propos de votre rôle : vous êtes le tank. Vous allez subir beaucoup de dégâts. Nous avons besoin de gens pour essayer les nouveaux niveaux et aider à identifier comment améliorer les choses. La douleur sera énorme; faire de bons jeux est une longue tâche et personne n'y arrive du premier coup. Si vous pouvez résister et avez un gros score de constitution, alors cette classe est faite pour vous." + adventurer_introduction: "Soyons clair à propos de votre rôle : vous êtes le tank. Vous allez subir beaucoup de dégâts. Nous avons besoin de gens pour essayer les nouveaux niveaux et aider à identifier comment améliorer les choses. La douleur sera énorme; faire de bons jeux est une longue tâche et personne n'y arrive du premier coup. Si vous pouvez résister et avez un gros score de constitution, alors cette classe est faite pour vous." adventurer_attribute_1: "Une soif d'apprendre. Vous voulez apprendre à développer et nous voulons vous apprendre. Vous allez toutefois faire la plupart de l'apprentissage." adventurer_attribute_2: "Charismatique. Soyez doux mais exprimez-vous sur ce qui a besoin d'être amélioré, et faites des propositions sur comment l'améliorer." adventurer_join_pref: "Soit faire équipe avec (ou recruter!) un artisan et travailler avec lui, ou cocher la case ci-dessous pour recevoir un email quand il y aura de nouveaux niveaux à tester. Nous parlons aussi des niveaux à réviser sur notre réseau" @@ -590,8 +590,8 @@ module.exports = nativeDescription: "français", englishDescription: "French", t adventurer_join_suf: "si vous préférez être avertis ainsi, inscrivez-vous ici!" more_about_adventurer: "En apprendre plus sur devenir un brave Aventurier" adventurer_subscribe_desc: "Recevoir un email lorsqu'il y a de nouveaux niveaux à tester." -# scribe_summary_pref: "CodeCombat is not just going to be a bunch of levels. It will also be a resource of programming knowledge that players can hook into. That way, each Artisan can link to a detailed article that for the player's edification: documentation akin to what the " -# scribe_summary_suf: " has built. If you enjoy explaining programming concepts, then this class is for you." + scribe_summary_pref: "CodeCombat ne va pas juste être un tas de niveaux. Il sera également une source de connaissances de programmation sur lesquelles les joueurs pourront se référer. De cette façon, chaque artisan peut créer un lien vers un article détaillé pour l'édification du lecteur: documentation semblable à ce que le " + scribe_summary_suf: " a construit. Si vous aimez expliquer les concepts de programmation, cette classe est pour vous." scribe_introduction_pref: "CodeCombat n'est pas seulement un ensemble de niveaux. Il contiendra aussi des ressources pour la connaissance, un wiki des concepts de programmation que les niveaux pourront illustrer. Dans ce but, chaque Artisan pourra, au lieu d'avoir à décrire en détail ce qu'est un opérateur de comparaison, seulement lier son niveau à l'article qui le décrit et qui a été écrit pour aider les joueurs. Quelque chose dans le sens de ce que le " scribe_introduction_url_mozilla: "Mozilla Developer Network" scribe_introduction_suf: " a développé. Si votre définition de l'amusement passe par le format Markdown, alors cette classe est pour vous." @@ -600,12 +600,12 @@ module.exports = nativeDescription: "français", englishDescription: "French", t scribe_join_description: "parlez nous un peu de vous, de votre expérience en programmation et de quels sujets vous souhaitez traiter. Nous partirons de là!" more_about_scribe: "En apprendre plus sur comment devenir un Scribe assidu" scribe_subscribe_desc: "Recevoir un email sur les annonces d'écriture d'article." -# diplomat_summary: "There is a large interest in CodeCombat in other countries that do not speak English! We are looking for translators who are willing to spend their time translating the site's corpus of words so that CodeCombat is accessible across the world as soon as possible. If you'd like to help getting CodeCombat international, then this class is for you." + diplomat_summary: "Il ya un grand intérêt de CodeCombat dans d'autres pays qui ne parlent pas l'anglais! Nous recherchons des traducteurs qui sont prêts à passer leur temps à traduire le corpus de mots du site pour que CodeCombat soit accessible partout dans le monde dès que possible. Si vous souhaitez aider à obtenir CodeCombat international, cette classe est pour vous." diplomat_introduction_pref: "Si nous avons appris quelque chose du " diplomat_launch_url: "lancement en octobre" diplomat_introduction_suf: "c'est qu'il y a un intérêt considérable pour CodeCombat dans d'autres pays, particulièrement au Brésil! Nous créons une équipe de traducteurs pour changer une liste de mots en une autre pour que CodeCombat soit le plus accessible possible à travers le monde. Si vous souhaitez avoir un aperçu des prochains contenus et avoir les niveaux dans votre langue le plus tôt possible, alors cette classe est faite pour vous." diplomat_attribute_1: "Des facilités en anglais et dans la langue que vous souhaitez traduire. Pour transmettre des idées complexes, il est important d'avoir une solide compréhension des deux!" - diplomat_join_pref_github: "Trouvez le fichier de langue souhaité " + diplomat_join_pref_github: "Trouvez le fichier de langue souhaité" diplomat_github_url: "sur GitHub" # diplomat_join_suf_github: ", edit it online, and submit a pull request. Also, check this box below to keep up-to-date on new internationalization developments!" more_about_diplomat: "En apprendre plus sur comment devenir un bon diplomate" @@ -656,64 +656,64 @@ module.exports = nativeDescription: "français", englishDescription: "French", t no_ranked_matches_pre: "Pas de match classé pour l'équipe " no_ranked_matches_post: "! Affronte d'autres compétiteurs et reviens ici pour classer ta partie." choose_opponent: "Choisir un Adversaire" -# select_your_language: "Select your language!" + select_your_language: "Selectionnez votre langage!" tutorial_play: "Jouer au Tutoriel" tutorial_recommended: "Recommendé si tu n'as jamais joué avant" tutorial_skip: "Passer le Tutoriel" tutorial_not_sure: "Pas sûr de ce qu'il se passe?" tutorial_play_first: "Jouer au Tutoriel d'abord." simple_ai: "IA simple" - warmup: "Préchauffe" -# friends_playing: "Friends Playing" + warmup: "Échauffement" + friends_playing: "Amis en train de jouer" log_in_for_friends: "Connectez vous pour jouer avec vos amis!" social_connect_blurb: "Connectez vous pour jouer contre vos amis!" -# invite_friends_to_battle: "Invite your friends to join you in battle!" + invite_friends_to_battle: "Invitez vos amis à rejoindre la bataille!" fight: "Combattez !" watch_victory: "Regardez votre victoire" -# defeat_the: "Defeat the" + defeat_the: "Vaincre le" tournament_ends: "Fin du tournoi" -# tournament_ended: "Tournament ended" + tournament_ended: "Tournoi terminé" tournament_rules: "Règles du tournoi" -# tournament_blurb: "Write code, collect gold, build armies, crush foes, win prizes, and upgrade your career in our $40,000 Greed tournament! Check out the details" -# tournament_blurb_criss_cross: "Win bids, construct paths, outwit opponents, grab gems, and upgrade your career in our Criss-Cross tournament! Check out the details" + tournament_blurb: "Écrire du code, collecter de l'or, construire des armées, écraser les ennemis, gagner des prix, et mettre à jour votre carrière dans notre tournoi $ 40,000 Greed! Découvrez les détails" + tournament_blurb_criss_cross: "Gagnez des offres, construisez des chemins, déjouez les adversaires, emparez-vous de gemmes, et améliorez votre carrière dans notre tournoi Criss-Cross! Découvrez les détails" tournament_blurb_blog: "Sur notre blog" rules: "Règles" winners: "Gagnants" # user: # stats: "Stats" -# singleplayer_title: "Singleplayer Levels" -# multiplayer_title: "Multiplayer Levels" -# achievements_title: "Achievements" -# last_played: "Last Played" + singleplayer_title: "Niveaux solo" + multiplayer_title: "Niveaux multijoueurs" + achievements_title: "Succès" + last_played: "Dernièrement joué" # status: "Status" -# status_completed: "Completed" -# status_unfinished: "Unfinished" -# no_singleplayer: "No Singleplayer games played yet." -# no_multiplayer: "No Multiplayer games played yet." -# no_achievements: "No Achievements earned yet." -# favorite_prefix: "Favorite language is " + status_completed: "Terminé" + status_unfinished: "Non terminé" + no_singleplayer: "Aucunes parties solo encore jouées." + no_multiplayer: "Aucunes parties multijoueurs encore jouées." + no_achievements: "Aucuns succès encore remportés." + favorite_prefix: "Langage favori : " # favorite_postfix: "." -# achievements: -# last_earned: "Last Earned" -# amount_achieved: "Amount" -# achievement: "Achievement" -# category_contributor: "Contributor" -# category_miscellaneous: "Miscellaneous" -# category_levels: "Levels" -# category_undefined: "Uncategorized" + achievements: + last_earned: "Dernièrement gagné" + amount_achieved: "Quantité" + achievement: "Succès" + category_contributor: "Contributeur" + category_miscellaneous: "Divers" + category_levels: "Niveaux" + category_undefined: "Non classé" # current_xp_prefix: "" -# current_xp_postfix: " in total" + current_xp_postfix: " au total" # new_xp_prefix: "" -# new_xp_postfix: " earned" + new_xp_postfix: " gagné" # left_xp_prefix: "" -# left_xp_infix: " until level " + left_xp_infix: " jusqu'au niveau " # left_xp_postfix: "" # account: -# recently_played: "Recently Played" -# no_recent_games: "No games played during the past two weeks." + recently_played: "Joué récemment" + no_recent_games: "Aucuns jeux joués au cours des deux dernières semaines." loading_error: could_not_load: "Erreur de chargement du serveur" @@ -739,10 +739,10 @@ module.exports = nativeDescription: "français", englishDescription: "French", t # gplus_friends: "G+ Friends" # gplus_friend_sessions: "G+ Friend Sessions" leaderboard: "Classement" -# user_schema: "User Schema" -# user_profile: "User Profile" + user_schema: "Schéma d'utilisateur" + user_profile: "Profile d'utilisateur" patches: "Patchs" -# patched_model: "Source Document" + patched_model: "Document Source" # model: "Model" system: "Système" systems: "Systèmes" @@ -750,8 +750,8 @@ module.exports = nativeDescription: "français", englishDescription: "French", t components: "Composants" # thang: "Thang" # thangs: "Thangs" -# level_session: "Your Session" -# opponent_session: "Opponent Session" + level_session: "Votre Session" + opponent_session: "Session de l'adversaire" article: "Article" user_names: "Nom d'utilisateur" # thang_names: "Thang Names" @@ -760,7 +760,7 @@ module.exports = nativeDescription: "français", englishDescription: "French", t source_document: "Document Source" document: "Document" # sprite_sheet: "Sprite Sheet" -# employers: "Employers" + employers: "Employés" candidates: "Candidats" # candidate_sessions: "Candidate Sessions" # user_remark: "User Remark" @@ -769,10 +769,10 @@ module.exports = nativeDescription: "français", englishDescription: "French", t items: "Objets" heroes: "Héros" wizard: "Magicien" -# achievement: "Achievement" + achievement: "Succès" # clas: "CLAs" # play_counts: "Play Counts" -# feedback: "Feedback" + feedback: "Réaction" delta: added: "Ajouté" @@ -788,8 +788,8 @@ module.exports = nativeDescription: "français", englishDescription: "French", t multiplayer: multiplayer_title: "Préférences multijoueurs" # We'll be changing this around significantly soon. Until then, it's not important to translate. -# multiplayer_toggle: "Enable multiplayer" -# multiplayer_toggle_description: "Allow others to join your game." + multiplayer_toggle: "Activer le multijoueur" + multiplayer_toggle_description: "Permettre à d'autres de rejoindre votre partie." multiplayer_link_description: "Partage ce lien pour que tes amis viennent jouer avec toi." multiplayer_hint_label: "Astuce:" multiplayer_hint: " Cliquez sur le lien pour tout sélectionner, puis appuyer sur Pomme-C ou Ctrl-C pour copier le lien." @@ -867,9 +867,9 @@ module.exports = nativeDescription: "français", englishDescription: "French", t rank: "Rang" prizes: "Prix" total_value: "Valeur totale" -# in_cash: "in cash" -# custom_wizard: "Custom CodeCombat Wizard" -# custom_avatar: "Custom CodeCombat avatar" + in_cash: "en espèces" + custom_wizard: "Magicien CodeCombat personnalisé" + custom_avatar: "Avatar CodeCombat personnalisé" # heap: "for six months of \"Startup\" access" credits: "Crédits" # one_month_coupon: "coupon: choose either Rails or HTML" @@ -886,7 +886,7 @@ module.exports = nativeDescription: "français", englishDescription: "French", t clothes: "Vêtements" trim: "Tailleur" cloud: "Nuage" - team: "Equipe" + team: "Équipe" spell: "Sort" boots: "Bottes" hue: "Teinte" @@ -1039,7 +1039,7 @@ module.exports = nativeDescription: "français", englishDescription: "French", t candidate_top_skills: "Talents/Aptitudes" candidate_years_experience: "Années d'expérience" candidate_last_updated: "Dernière mise à jour" -# candidate_who: "Who" + candidate_who: "Qui" # featured_developers: "Featured Developers" other_developers: "Autres développeurs" # inactive_developers: "Inactive Developers" @@ -1048,7 +1048,7 @@ module.exports = nativeDescription: "français", englishDescription: "French", t # av_espionage: "Espionage" # Really not important to translate /admin controls. av_espionage_placeholder: "Email ou nom d'utilisateur" av_usersearch: "Recherche d'utilisateurs" -# av_usersearch_placeholder: "Email, username, name, whatever" + av_usersearch_placeholder: "Email, nom d'utilisateur, nom, peu importe" av_usersearch_search: "Recherche" av_title: "Vues d'administrateurs" av_entities_sub_title: "Entités" From 47c090f7c766d63abaab948645a97642aa53e013 Mon Sep 17 00:00:00 2001 From: Nick Winter Date: Thu, 30 Oct 2014 13:07:04 -0700 Subject: [PATCH 06/14] Hiding locked items with no slot selected. Silhouetting items that are too far above you. Only showing items with a gem cost in the inventory screen. Sorting items by gem cost. Animating double-clicking items to show their motion to the slot, sort of. --- app/models/ThangType.coffee | 13 ++++- app/styles/game-menu/inventory-view.sass | 22 +++++++++ app/templates/game-menu/inventory-view.jade | 2 +- app/views/game-menu/InventoryView.coffee | 47 ++++++++++++------- server/commons/Handler.coffee | 4 +- .../levels/thangs/thang_type_handler.coffee | 1 + 6 files changed, 67 insertions(+), 22 deletions(-) diff --git a/app/models/ThangType.coffee b/app/models/ThangType.coffee index add003f56..4a31875c0 100644 --- a/app/models/ThangType.coffee +++ b/app/models/ThangType.coffee @@ -294,7 +294,11 @@ module.exports = class ThangType extends CocoModel itemComponentRef = _.find( @get('components') or [], (compRef) -> compRef.original is LevelComponent.ItemID) - return itemComponentRef?.config?.slots or [] + return itemComponentRef?.config?.slots or ['right-hand'] # ['right-hand'] is default + + getAllowedHeroClasses: -> + return [heroClass] if heroClass = @get 'heroClass' + ['Warrior', 'Ranger', 'Wizard'] getFrontFacingStats: -> components = @get('components') or [] @@ -341,3 +345,10 @@ module.exports = class ThangType extends CocoModel display = display.join ', ' display = display.replace /9001m?/, 'Infinity' name: name, display: display + + isSilhouettedItem: -> + # TODO: have items have actual levels instead of just going by their gem count + return console.error "Trying to determine whether #{@get('name')} should be a silhouetted item, but it has no gem cost." unless @get 'gems' + points = me.get('points') + expectedTotalGems = (points ? 0) * 1.5 # Not actually true, but roughly kinda close for tier 0, kinda tier 1 + @get('gems') > (100 + expectedTotalGems) * 2 diff --git a/app/styles/game-menu/inventory-view.sass b/app/styles/game-menu/inventory-view.sass index eb7084142..165c1d0f4 100644 --- a/app/styles/game-menu/inventory-view.sass +++ b/app/styles/game-menu/inventory-view.sass @@ -14,6 +14,11 @@ $selectedAreaHeight: 150px $stashMargin: 20px $stashWidth: $totalWidth - $equippedWidth - $stashMargin +.ui-effects-transfer + outline: 2px solid #28f + @include box-shadow(0 0 10px #28f) + z-index: 9001 + #inventory-view position: relative height: $inventoryHeight @@ -200,6 +205,11 @@ $stashWidth: $totalWidth - $equippedWidth - $stashMargin padding: 4px background-color: white + &.Warrior .list-group-item:not(.Warrior), &.Ranger .list-group-item:not(.Ranger), &.Wizard .list-group-item:not(.Wizard) + // Our code hides and shows (modifies display), but we can be invisible this other way. + visibility: hidden + position: absolute + .list-group-item padding: 4px 0 @include transition(0.5s ease) @@ -244,6 +254,18 @@ $stashWidth: $totalWidth - $equippedWidth - $stashMargin .item-info:after content: ' (locked)' + &.silhouette + h4 + visibility: hidden + position: absolute + h4:before + content: '???' + visibility: visible + .item-info:after + display: none + img + @include filter(contrast(25%) brightness(25%)) + .item-view cursor: pointer diff --git a/app/templates/game-menu/inventory-view.jade b/app/templates/game-menu/inventory-view.jade index 3e5d3bd19..2b3248cae 100644 --- a/app/templates/game-menu/inventory-view.jade +++ b/app/templates/game-menu/inventory-view.jade @@ -55,5 +55,5 @@ h4#locked-description ul.list-group for item in lockedItems - li.list-group-item(class=item.classes, data-item-id=item.get('original')) + li.list-group-item(class=item.classes, data-item-id=item.get('original'), style="display: none") diff --git a/app/views/game-menu/InventoryView.coffee b/app/views/game-menu/InventoryView.coffee index 51ab7f6a1..c2cdb0d07 100644 --- a/app/views/game-menu/InventoryView.coffee +++ b/app/views/game-menu/InventoryView.coffee @@ -48,15 +48,24 @@ module.exports = class InventoryView extends CocoView context.equipped = _.values(@equipment) context.items = @items.models - context.unlockedItems = [] - context.lockedItems = [] for item in @items.models item.classes = item.getAllowedSlots() item.classes.push 'equipped' if item.get('original') in context.equipped locked = @allowedItems and not (item.get('original') in @allowedItems) - item.classes.push 'locked' if locked - (if locked then context.lockedItems else context.unlockedItems).push item - @items.models.sort (a, b) -> ('locked' in a.classes) - ('locked' in b.classes) + item.classes.push 'locked' if locked and item.get('slug') isnt 'simple-boots' + for heroClass in item.getAllowedHeroClasses() + item.classes.push heroClass + item.classes.push 'silhouette' if item.isSilhouettedItem() + + @items.models.sort (a, b) -> + lockScore = 90019001 * (('locked' in a.classes) - ('locked' in b.classes)) + gemScore = a.get('gems') - b.get('gems') + lockScore + gemScore + + context.unlockedItems = [] + context.lockedItems = [] + for item in @items.models + (if 'locked' in item.classes then context.lockedItems else context.unlockedItems).push item context.slots = @slots context.equipment = _.clone @equipment @@ -184,6 +193,7 @@ module.exports = class InventoryView extends CocoView @onSelectionChanged() slot = @getSelectedSlot() slot = @$el.find('.item-slot:not(.disabled):first') if not slot.length + $(e.target).effect('transfer', to: slot, duration: 500, easing: 'easeOutCubic') if e @unequipItemFromSlot(slot) @equipSelectedItemToSlot(slot) @onSelectionChanged() @@ -261,9 +271,9 @@ module.exports = class InventoryView extends CocoView @hideSelectedSlotItem() else unlockedCount = @$el.find('#available-equipment .list-group-item:not(.locked)').show().length - lockedCount = @$el.find('#available-equipment .list-group-item.locked').show().length + @$el.find('#available-equipment .list-group-item.locked').hide() @$el.find('#unlocked-description').text("#{unlockedCount} items owned").toggle unlockedCount > 0 - @$el.find('#locked-description').text("#{lockedCount} items locked").toggle lockedCount > 0 + @$el.find('#locked-description').text("#{lockedCount} items locked").hide() #@$el.find('#available-equipment .list-group-item.equipped').hide() @$el.find('.item-slot').removeClass('disabled') @@ -327,30 +337,30 @@ module.exports = class InventoryView extends CocoView # This is temporary, until we have a more general way of awarding items and configuring needed/locked items per level. gear = 'simple-boots': '53e237bf53457600003e3f05' - 'longsword': '53e218d853457600003e3ebe' + 'simple-sword': '53e218d853457600003e3ebe' 'leather-tunic': '53e22eac53457600003e3efc' 'leather-boots': '53e2384453457600003e3f07' 'programmaticon-i': '53e4108204c00d4607a89f78' - 'crude-glasses': '53e238df53457600003e3f0b' + 'crude-wooden-glasses': '53e238df53457600003e3f0b' 'builders-hammer': '53f4e6e3d822c23505b74f42' gearByLevel = 'dungeons-of-kithgard': {feet: 'simple-boots'} 'gems-in-the-deep': {feet: 'simple-boots'} 'forgetful-gemsmith': {feet: 'simple-boots'} 'shadow-guard': {feet: 'simple-boots'} - 'true-names': {feet: 'simple-boots', 'right-hand': 'longsword'} - 'the-raised-sword': {feet: 'simple-boots', 'right-hand': 'longsword', torso: 'leather-tunic'} + 'true-names': {feet: 'simple-boots', 'right-hand': 'simple-sword'} + 'the-raised-sword': {feet: 'simple-boots', 'right-hand': 'simple-sword', torso: 'leather-tunic'} 'the-first-kithmaze': {feet: 'simple-boots', 'programming-book': 'programmaticon-i'} 'the-second-kithmaze': {feet: 'simple-boots', 'programming-book': 'programmaticon-i'} - 'new-sight': {'right-hand': 'longsword', 'programming-book': 'programmaticon-i'} - 'lowly-kithmen': {feet: 'simple-boots', 'right-hand': 'longsword', 'programming-book': 'programmaticon-i', eyes: 'crude-glasses'} - 'closing-the-distance': {feet: 'simple-boots', 'right-hand': 'longsword', torso: 'leather-tunic', eyes: 'crude-glasses'} - 'the-final-kithmaze': {feet: 'simple-boots', 'right-hand': 'longsword', torso: 'leather-tunic', 'programming-book': 'programmaticon-i', eyes: 'crude-glasses'} + 'new-sight': {'right-hand': 'simple-sword', 'programming-book': 'programmaticon-i'} + 'lowly-kithmen': {feet: 'simple-boots', 'right-hand': 'simple-sword', 'programming-book': 'programmaticon-i', eyes: 'crude-wooden-glasses'} + 'closing-the-distance': {feet: 'simple-boots', 'right-hand': 'simple-sword', torso: 'leather-tunic', eyes: 'crude-wooden-glasses'} + 'the-final-kithmaze': {feet: 'simple-boots', 'right-hand': 'simple-sword', torso: 'leather-tunic', 'programming-book': 'programmaticon-i', eyes: 'crude-wooden-glasses'} 'kithgard-gates': {feet: 'simple-boots', 'right-hand': 'builders-hammer', torso: 'leather-tunic'} 'defense-of-plainswood': {feet: 'simple-boots', 'right-hand': 'builders-hammer'} 'winding-trail': {feet: 'leather-boots', 'right-hand': 'builders-hammer'} - 'thornbush-farm': {feet: 'leather-boots', 'right-hand': 'builders-hammer', eyes: 'crude-glasses'} - 'a-fiery-trap': {feet: 'leather-boots', 'right-hand': 'builders-hammer', eyes: 'crude-glasses'} + 'thornbush-farm': {feet: 'leather-boots', 'right-hand': 'builders-hammer', eyes: 'crude-wooden-glasses'} + 'a-fiery-trap': {feet: 'leather-boots', 'right-hand': 'builders-hammer', eyes: 'crude-wooden-glasses'} return unless necessaryGear = gearByLevel[@options.levelID] if @inserted if @supermodel.finished() @@ -363,7 +373,7 @@ module.exports = class InventoryView extends CocoView inWorldMap = $('#world-map-view').length for slot, item of necessaryGear continue if item is 'leather-tunic' and inWorldMap # Don't tell them they need it until they need it in the level - continue if equipment[slot] and not ((item is 'builders-hammer' and equipment[slot] is gear.longsword) or (item is 'leather-boots' and equipment[slot] is gear['simple-boots'])) + continue if equipment[slot] and not ((item is 'builders-hammer' and equipment[slot] is gear['simple-sword']) or (item is 'leather-boots' and equipment[slot] is gear['simple-boots'])) availableSlotSelector = "#available-equipment li[data-item-id='#{gear[item]}']" @highlightElement availableSlotSelector, delay: 500, sides: ['right'], rotation: Math.PI / 2 @$el.find(availableSlotSelector).addClass 'should-equip' @@ -386,6 +396,7 @@ module.exports = class InventoryView extends CocoView onHeroSelectionUpdated: (e) -> @selectedHero = e.hero @loadHero() + @$el.removeClass('Warrior Ranger Wizard').addClass(@selectedHero.get('heroClass')) loadHero: -> return unless @supermodel.finished() and @selectedHero and not @$el.hasClass 'secret' diff --git a/server/commons/Handler.coffee b/server/commons/Handler.coffee index 5cbd3e4d6..15ecc3b11 100644 --- a/server/commons/Handler.coffee +++ b/server/commons/Handler.coffee @@ -46,9 +46,9 @@ module.exports = class Handler omissions = ['original'].concat(deltasLib.DOC_SKIP_PATHS) delta = differ.diff(_.omit(document.toObject(), omissions), _.omit(req.body, omissions)) flattened = deltasLib.flattenDelta(delta) - _.all(flattened, (delta) -> + _.all flattened, (delta) -> # sometimes coverage gets moved around... allow other changes to happen to i18nCoverage - return _.isArray(delta.o) and (('i18n' in delta.dataPath and delta.o.length is 1) or 'i18nCoverage' in delta.dataPath)) + return _.isArray(delta.o) and (('i18n' in delta.dataPath and delta.o.length is 1) or 'i18nCoverage' in delta.dataPath) formatEntity: (req, document) -> document?.toObject() getEditableProperties: (req, document) -> diff --git a/server/levels/thangs/thang_type_handler.coffee b/server/levels/thangs/thang_type_handler.coffee index 69c663c1e..8013197dd 100644 --- a/server/levels/thangs/thang_type_handler.coffee +++ b/server/levels/thangs/thang_type_handler.coffee @@ -60,6 +60,7 @@ ThangTypeHandler = class ThangTypeHandler extends Handler query = slug: {$exists: true} if req.query.view is 'items' query.kind = 'Item' + query.gems = {$exists: true} # Items without gems don't show up anywhere else if req.query.view is 'heroes' #query.kind = 'Hero' # TODO: when all the heroes are tagged, just use this query.original = {$in: _.values heroes} # TODO: when all the heroes are tagged, don't do this From cec8350232d222cd44bd5a8cf3f82ec4effce166 Mon Sep 17 00:00:00 2001 From: Nick Winter Date: Thu, 30 Oct 2014 15:56:49 -0700 Subject: [PATCH 07/14] Added Missile ThangType kind and a couple misc hero data tweaks. --- app/lib/world/names.coffee | 10 ++++++++++ app/schemas/models/thang_type.coffee | 2 +- server/levels/thangs/thang_type_handler.coffee | 4 ++-- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/app/lib/world/names.coffee b/app/lib/world/names.coffee index f52974a6a..b64f41057 100644 --- a/app/lib/world/names.coffee +++ b/app/lib/world/names.coffee @@ -323,6 +323,7 @@ module.exports.thangNames = thangNames = 'Letholdus' ] 'Potion Master': [ + 'Omar' 'Snake' 'Amaranth' 'Zander' @@ -379,3 +380,12 @@ module.exports.thangNames = thangNames = 'Helena' 'Philips' ] + 'Ninja': [ + 'Amara' + ] + 'Sorcerer': [ + 'Pender' + ] + 'Samurai': [ + 'Hattori' + ] diff --git a/app/schemas/models/thang_type.coffee b/app/schemas/models/thang_type.coffee index e8477434e..a45b7dec7 100644 --- a/app/schemas/models/thang_type.coffee +++ b/app/schemas/models/thang_type.coffee @@ -105,7 +105,7 @@ _.extend ThangTypeSchema.properties, shapes: c.object {title: 'Shapes', additionalProperties: ShapeObjectSchema} containers: c.object {title: 'Containers', additionalProperties: ContainerObjectSchema} animations: c.object {title: 'Animations', additionalProperties: RawAnimationObjectSchema} - kind: c.shortString {enum: ['Unit', 'Floor', 'Wall', 'Doodad', 'Misc', 'Mark', 'Item', 'Hero'], default: 'Misc', title: 'Kind'} + kind: c.shortString {enum: ['Unit', 'Floor', 'Wall', 'Doodad', 'Misc', 'Mark', 'Item', 'Hero', 'Missile'], default: 'Misc', title: 'Kind'} terrains: c.array {title: 'Terrains', description: 'If specified, limits this ThangType to levels with matching terrains.', uniqueItems: true}, c.terrainString gems: {type: 'integer', minimum: 0, title: 'Gem Cost', description: 'How many gems this item or hero costs.'} heroClass: {type: 'string', enum: ['Warrior', 'Ranger', 'Wizard'], title: 'Hero Class', description: 'What class this is (if a hero) or is restricted to (if an item). Leave undefined for most items.'} diff --git a/server/levels/thangs/thang_type_handler.coffee b/server/levels/thangs/thang_type_handler.coffee index 8013197dd..5493fe758 100644 --- a/server/levels/thangs/thang_type_handler.coffee +++ b/server/levels/thangs/thang_type_handler.coffee @@ -62,8 +62,8 @@ ThangTypeHandler = class ThangTypeHandler extends Handler query.kind = 'Item' query.gems = {$exists: true} # Items without gems don't show up anywhere else if req.query.view is 'heroes' - #query.kind = 'Hero' # TODO: when all the heroes are tagged, just use this - query.original = {$in: _.values heroes} # TODO: when all the heroes are tagged, don't do this + #query.kind = 'Hero' # TODO: when ChooseHeroView is refactored, just use this + query.original = {$in: _.values heroes} # TODO: when ChooseHeroView is refactored, don't do this else if req.query.view is 'i18n-coverage' query.i18nCoverage = {$exists: true} From fa25cd9c32e9d6dc1a12e1d71dbf5234964e6df6 Mon Sep 17 00:00:00 2001 From: Nick Winter Date: Thu, 30 Oct 2014 16:21:08 -0700 Subject: [PATCH 08/14] Hide real-time playback countdown outside of flag levels. Later we can figure this out dynamically. --- app/lib/surface/CountdownScreen.coffee | 18 +++++++++++------- app/lib/surface/Surface.coffee | 2 +- app/lib/world/world.coffee | 7 ++++++- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/app/lib/surface/CountdownScreen.coffee b/app/lib/surface/CountdownScreen.coffee index 56f91cf8b..1f0b6925d 100644 --- a/app/lib/surface/CountdownScreen.coffee +++ b/app/lib/surface/CountdownScreen.coffee @@ -10,6 +10,7 @@ module.exports = class CountdownScreen extends CocoClass options ?= {} @camera = options.camera @layer = options.layer + @showsCountdown = options.showsCountdown console.error @toString(), 'needs a camera.' unless @camera console.error @toString(), 'needs a layer.' unless @layer @build() @@ -44,14 +45,17 @@ module.exports = class CountdownScreen extends CocoClass show: -> return if @showing - @showing = true - @dimLayer.alpha = 0 createjs.Tween.removeTweens @dimLayer - createjs.Tween.get(@dimLayer).to({alpha: 1}, 500) - @secondsRemaining = 3 - @countdownInterval = setInterval @decrementCountdown, 1000 - @updateText() - @layer.addChild @dimLayer + if @showsCountdown + @dimLayer.alpha = 0 + @showing = true + createjs.Tween.get(@dimLayer).to({alpha: 1}, 500) + @secondsRemaining = 3 + @countdownInterval = setInterval @decrementCountdown, 1000 + @updateText() + @layer.addChild @dimLayer + else + @endCountdown() hide: -> return unless @showing diff --git a/app/lib/surface/Surface.coffee b/app/lib/surface/Surface.coffee index 2d3a1a12e..6564ca02c 100644 --- a/app/lib/surface/Surface.coffee +++ b/app/lib/surface/Surface.coffee @@ -114,7 +114,7 @@ module.exports = Surface = class Surface extends CocoClass @screenLayer.addChild new Letterbox canvasWidth: canvasWidth, canvasHeight: canvasHeight @lankBoss = new LankBoss camera: @camera, webGLStage: @webGLStage, surfaceTextLayer: @surfaceTextLayer, world: @world, thangTypes: @options.thangTypes, choosing: @options.choosing, navigateToSelection: @options.navigateToSelection, showInvisible: @options.showInvisible - @countdownScreen = new CountdownScreen camera: @camera, layer: @screenLayer + @countdownScreen = new CountdownScreen camera: @camera, layer: @screenLayer, showsCountdown: @world.showsCountdown @playbackOverScreen = new PlaybackOverScreen camera: @camera, layer: @screenLayer @normalStage.addChildAt @playbackOverScreen.dimLayer, 0 # Put this below the other layers, actually, so we can more easily read text on the screen. @waitingScreen = new WaitingScreen camera: @camera, layer: @screenLayer diff --git a/app/lib/world/world.coffee b/app/lib/world/world.coffee index a6d2de5b8..828bfe546 100644 --- a/app/lib/world/world.coffee +++ b/app/lib/world/world.coffee @@ -17,6 +17,7 @@ REAL_TIME_BUFFER_MAX = 3 * PROGRESS_UPDATE_INTERVAL REAL_TIME_BUFFERED_WAIT_INTERVAL = 0.5 * PROGRESS_UPDATE_INTERVAL REAL_TIME_COUNTDOWN_DELAY = 3000 # match CountdownScreen ITEM_ORIGINAL = '53e12043b82921000051cdf9' +COUNTDOWN_LEVELS = ['sky-span', 'dueling-grounds', 'cavern-survival'] # TODO: determine flag usage dynamically module.exports = class World @className: 'World' @@ -104,7 +105,10 @@ module.exports = class World @realTimeSpeedFactor = 3 else @realTimeSpeedFactor = 1 - return setTimeout @finishCountdown(continueLaterFn), REAL_TIME_COUNTDOWN_DELAY + if @showsCountdown + return setTimeout @finishCountdown(continueLaterFn), REAL_TIME_COUNTDOWN_DELAY + else + @finishCountdown continueLaterFn t1 = now() @t0 ?= t1 @worldLoadStartTime ?= t1 @@ -199,6 +203,7 @@ module.exports = class World loadFromLevel: (level, willSimulate=true) -> @levelID = level.slug + @showsCountdown = @levelID in COUNTDOWN_LEVELS @levelComponents = level.levelComponents @thangTypes = level.thangTypes @loadScriptsFromLevel level From 57680f4a83b407a2534eb027819ba293e648c02b Mon Sep 17 00:00:00 2001 From: Nick Winter Date: Thu, 30 Oct 2014 16:59:32 -0700 Subject: [PATCH 09/14] Hide HUD until Kithgard Gates. --- app/styles/play/level/hud.sass | 4 ++++ app/views/play/level/LevelGoalsView.coffee | 3 ++- app/views/play/level/LevelHUDView.coffee | 4 ++++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/app/styles/play/level/hud.sass b/app/styles/play/level/hud.sass index a275d5a0f..2af9b4548 100644 --- a/app/styles/play/level/hud.sass +++ b/app/styles/play/level/hud.sass @@ -48,6 +48,10 @@ background-image: url(/images/level/hud_right_wing.png) background-position: left + &.hide-hud-properties .center .thang-props + visibility: hidden + position: absolute + .center width: 560px height: 120px diff --git a/app/views/play/level/LevelGoalsView.coffee b/app/views/play/level/LevelGoalsView.coffee index 882ca04f9..087e3831a 100644 --- a/app/views/play/level/LevelGoalsView.coffee +++ b/app/views/play/level/LevelGoalsView.coffee @@ -60,7 +60,8 @@ module.exports = class LevelGoalsView extends CocoView # This should really get refactored, along with GoalManager, so that goals have a standard # representation of how many are done, how many are needed, what that means, etc. li = $('
  • ').addClass("status-#{state.status}").text(text) - li.prepend($('').addClass('glyphicon').addClass(iconClass) if iconClass = stateIconMap[state.status]) + iconClass = stateIconMap[state.status] + li.prepend($('').addClass("glyphicon #{iconClass or ''}")) # If empty, insert a .glyphicon to take up space list.append(li) goals.push goal if not firstRun and state.status is 'success' and @previousGoalStatus[goal.id] isnt 'success' diff --git a/app/views/play/level/LevelHUDView.coffee b/app/views/play/level/LevelHUDView.coffee index 87691450e..544bbe9eb 100644 --- a/app/views/play/level/LevelHUDView.coffee +++ b/app/views/play/level/LevelHUDView.coffee @@ -30,6 +30,9 @@ module.exports = class LevelHUDView extends CocoView afterRender: -> super() @$el.addClass 'no-selection' + if @options.level.get('slug') in ['dungeons-of-kithgard', 'gems-in-the-deep', 'forgetful-gemsmith', 'shadow-guard', 'kounter-kithwise', 'crawlways-of-kithgard', 'true-names', 'favorable-odds', 'the-raised-sword', 'the-first-kithmaze', 'descending-further', 'the-second-kithmaze', 'new-sight', 'known-enemy', 'master-of-names', 'lowly-kithmen', 'closing-the-distance', 'assassinating-more-kithmen???', 'the-final-kithmaze', 'the-gauntlet'] + @hidesHUD = true + @$el.addClass 'hide-hud-properties' onClick: (e) -> Backbone.Mediator.publish 'tome:focus-editor', {} unless $(e.target).parents('.thang-props').length @@ -264,6 +267,7 @@ module.exports = class LevelHUDView extends CocoView $('.thang-elem', @$el).removeClass('secret') $('.dialogue-area', @$el).addClass('secret') $('.thang-actions', @$el).toggleClass 'secret', not @showingActions + @$el.find('.thang-canvas-wrapper').addClass('secret') if @hidesHUD update: -> return unless @thang and not @speaker From 40a2c6bbe8c90eabe57247bb2eb6d16a9c0d738b Mon Sep 17 00:00:00 2001 From: George Saines Date: Thu, 30 Oct 2014 19:11:12 -0700 Subject: [PATCH 10/14] slightly improving forest map icon --- .../images/pages/play/map_forest_icon.jpg | Bin 18967 -> 4325 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/app/assets/images/pages/play/map_forest_icon.jpg b/app/assets/images/pages/play/map_forest_icon.jpg index 30a7397ed05f2215a0675cd23a886f2f121ca0e7..2a86d18ff5b1818dccc0afc08adeebf6142528c6 100644 GIT binary patch literal 4325 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 Q>CDy?S3-3#5P8r4*>y}#`v3p{ From 01fccf5ab7983d9680b0327011b1373fc76b4ad0 Mon Sep 17 00:00:00 2001 From: Nick Winter Date: Thu, 30 Oct 2014 18:30:21 -0700 Subject: [PATCH 11/14] Started highlight arrow sound A/B test. Hid more of the HUD when hiding. Support for knowing whether your killer was hurt when firing world:thang-died notes. --- app/models/User.coffee | 10 ++++++++++ app/schemas/subscriptions/world.coffee | 1 + app/styles/play/level/hud.sass | 7 ++++--- app/views/kinds/CocoView.coffee | 3 ++- app/views/play/level/tome/SpellView.coffee | 1 - 5 files changed, 17 insertions(+), 5 deletions(-) diff --git a/app/models/User.coffee b/app/models/User.coffee index 1956ac06c..e7899b292 100644 --- a/app/models/User.coffee +++ b/app/models/User.coffee @@ -88,3 +88,13 @@ module.exports = class User extends CocoModel @branchingGroup = 'choice-explicit' if me.isAdmin() application.tracker.identify branchingGroup: @branchingGroup @branchingGroup + + getHighlightArrowSoundGroup: -> + return @highlightArrowGroup if @highlightArrowGroup + group = me.get('testGroupNumber') % 8 + @highlightArrowGroup = switch group + when 0, 1, 2, 3 then 'sound-off' + when 4, 5, 6, 7 then 'sound-on' + @highlightArrowGroup = 'sound-off' if me.isAdmin() + application.tracker.identify highlightArrowGroup: @highlightArrowGroup + @highlightArrowGroup diff --git a/app/schemas/subscriptions/world.coffee b/app/schemas/subscriptions/world.coffee index 80d97647d..bd0b8c2ce 100644 --- a/app/schemas/subscriptions/world.coffee +++ b/app/schemas/subscriptions/world.coffee @@ -8,6 +8,7 @@ module.exports = replacedNoteChain: {type: 'array'} thang: {type: 'object'} killer: {type: 'object'} + killerHealth: {type: ['number', 'undefined']} 'world:thang-touched-goal': c.object {required: ['actor', 'touched']}, replacedNoteChain: {type: 'array'} diff --git a/app/styles/play/level/hud.sass b/app/styles/play/level/hud.sass index 2af9b4548..ffd07d75b 100644 --- a/app/styles/play/level/hud.sass +++ b/app/styles/play/level/hud.sass @@ -48,9 +48,10 @@ background-image: url(/images/level/hud_right_wing.png) background-position: left - &.hide-hud-properties .center .thang-props - visibility: hidden - position: absolute + &.hide-hud-properties .center + .thang-props, .thang-actions + visibility: hidden + position: absolute .center width: 560px diff --git a/app/views/kinds/CocoView.coffee b/app/views/kinds/CocoView.coffee index 44f2cc082..ac6d9ecd9 100644 --- a/app/views/kinds/CocoView.coffee +++ b/app/views/kinds/CocoView.coffee @@ -351,7 +351,8 @@ module.exports = class CocoView extends Backbone.View animatePointer: => $pointer = @getPointer() $pointer.css transition: 'all 0.6s ease-out', transform: "rotate(#{@pointerRotation}rad) translate(-3px, #{@pointerRadialDistance-50}px)" - #Backbone.Mediator.publish 'audio-player:play-sound', trigger: 'dom_highlight', volume: 0.75 # Never mind, this is currently so annoying + if me.getHighlightArrowSoundGroup() is 'sound-on' + Backbone.Mediator.publish 'audio-player:play-sound', trigger: 'dom_highlight', volume: 0.5 setTimeout (=> $pointer.css transition: 'all 0.4s ease-in', transform: "rotate(#{@pointerRotation}rad) translate(-3px, #{@pointerRadialDistance}px)"), 800 endHighlight: -> diff --git a/app/views/play/level/tome/SpellView.coffee b/app/views/play/level/tome/SpellView.coffee index a71a5ae87..560635501 100644 --- a/app/views/play/level/tome/SpellView.coffee +++ b/app/views/play/level/tome/SpellView.coffee @@ -588,7 +588,6 @@ module.exports = class SpellView extends CocoView io: '//' commentStart = commentStarts[@spell.language] or '//' @_singleLineCommentRegexp ?= new RegExp "[ \t]*#{commentStart}[^\"'\n]*", 'g' - console.log 'got', @_singleLineCommentRegexp, 'from', "[ \t]*#{commentStart}[^\"']*", 'comment start is', commentStart, 'acuse lang is', @spell.language @_singleLineCommentRegexp preload: -> From a69e12fbc2a7ac2077bf194eb18cbb6a1ecb9bfc Mon Sep 17 00:00:00 2001 From: Nick Winter Date: Thu, 30 Oct 2014 19:14:40 -0700 Subject: [PATCH 12/14] Updated WorldMapView to new levels. --- app/views/play/WorldMapView.coffee | 122 +++++++++++++++-------------- 1 file changed, 63 insertions(+), 59 deletions(-) diff --git a/app/views/play/WorldMapView.coffee b/app/views/play/WorldMapView.coffee index 0c7f560cb..e6090b8e5 100644 --- a/app/views/play/WorldMapView.coffee +++ b/app/views/play/WorldMapView.coffee @@ -647,22 +647,35 @@ dungeon = [ x: 54 y: 9 nextLevels: - more_practice: 'munchkin-dodger' + more_practice: 'kounter-kithwise' continue: 'true-names' } { - name: 'Munchkin Dodger' + name: 'Kounter Kithwise' type: 'hero' difficulty: 1 - id: 'munchkin-dodger' - original: '541875da4c16460000ab990f' + id: 'kounter-kithwise' + original: '54527a6257e83800009730c7' description: 'Practice your evasion skills with more guards.' x: 61.19 y: 13.80 + nextLevels: + more_practice: 'crawlways-of-kithgard' + continue: 'true-names' + practice: true + } + { + name: 'Crawlways of Kithgard' + type: 'hero' + difficulty: 1 + id: 'crawlways-of-kithgard' + original: '545287ef57e83800009730d5' + description: 'Dart in and grab the gem–at the right moment.' + x: 63.19 + y: 15.80 nextLevels: continue: 'true-names' practice: true - disabled: true } { name: 'True Names' @@ -674,22 +687,21 @@ dungeon = [ x: 74 y: 12 nextLevels: - more_practice: 'munchkin-slayer' + more_practice: 'favorable-odds' continue: 'the-raised-sword' } { - name: 'Munchkin Slayer' + name: 'Favorable Odds' type: 'hero' difficulty: 1 - id: 'munchkin-slayer' - original: '5418aec24c16460000ab9aa6' + id: 'favorable-odds' + original: '5452972f57e83800009730de' description: 'Test out your battle skills by defeating more munchkins.' x: 80.85 y: 11.85 nextLevels: continue: 'the-raised-sword' practice: true - disabled: true } { name: 'The Raised Sword' @@ -709,27 +721,26 @@ dungeon = [ difficulty: 1 id: 'the-first-kithmaze' original: '5418b9d64c16460000ab9ab4' - description: 'The builders of Kith constructed many mazes to confuse travelers.' + description: 'The builders of Kithgard constructed many mazes to confuse travelers.' x: 70 y: 28 nextLevels: - more_practice: 'the-one-point-fifth-kithmaze' + more_practice: 'descending-further' continue: 'the-second-kithmaze' skip_ahead: 'new-sight' } { - name: 'The One-Point-Fifth Kithmaze' + name: 'Descending Further' type: 'hero' difficulty: 1 - id: 'the-one-point-fifth-kithmaze' - original: '5418cf256bae62f707c7e1c3' + id: 'descending-further' + original: '5452a84d57e83800009730e4' description: 'Another day, another maze.' x: 78.47 y: 34.38 nextLevels: continue: 'the-second-kithmaze' practice: true - disabled: true } { name: 'The Second Kithmaze' @@ -741,23 +752,8 @@ dungeon = [ x: 55.54 y: 26.96 nextLevels: - more_practice: 'the-two-point-fifth-kithmaze' continue: 'new-sight' } - { - name: 'The Two-Point-Fifth Kithmaze' - type: 'hero' - difficulty: 1 - id: 'the-two-point-fifth-kithmaze' - original: '5418d40f4c16460000ab9ac2' - description: 'You must really like doing these mazes!' - x: 49.02 - y: 25.78 - nextLevels: - continue: 'new-sight' - practice: true - disabled: true - } { name: 'New Sight' type: 'hero' @@ -767,8 +763,33 @@ dungeon = [ description: 'A true name can only be seen with the correct lenses.' x: 67 y: 41 + nextLevels: + continue: 'known-enemy' + } + { + name: 'Known Enemy' + type: 'hero' + difficulty: 1 + id: 'known-enemy' + original: '5452adea57e83800009730ee' + description: 'Begin to use variables in your battles.' + x: 80.17 + y: 45.31 + nextLevels: + continue: 'master-of-names' + } + { + name: 'Master of Names' + type: 'hero' + difficulty: 1 + id: 'master-of-names' + original: '5452c3ce57e83800009730f7' + description: 'Use your glasses to defend yourself from the Kithmen.' + x: 84.17 + y: 45.31 nextLevels: continue: 'lowly-kithmen' + skip_ahead: 'closing-the-distance' } { name: 'Lowly Kithmen' @@ -776,28 +797,13 @@ dungeon = [ difficulty: 1 id: 'lowly-kithmen' original: '541b24511ccc8eaae19f3c1f' - description: 'Use your glasses to seek out and attack the Kithmen.' + description: 'Now that you can see them, they\'re everywhere!' x: 74 y: 48 nextLevels: - more_practice: 'still-pretty-low-kithmen' continue: 'closing-the-distance' skip_ahead: 'the-final-kithmaze' } - { - name: 'Still-Pretty-Low Kithmen' - type: 'hero' - difficulty: 1 - id: 'still-pretty-low-kithmen' - original: '541b288e1ccc8eaae19f3c25' - description: 'Now that you can see them, they\'re everywhere!' - x: 80.17 - y: 45.31 - nextLevels: - continue: 'closing-the-distance' - practice: true - disabled: true - } { name: 'Closing the Distance' type: 'hero' @@ -808,22 +814,21 @@ dungeon = [ x: 76 y: 60 nextLevels: - more_practice: 'assassinating-more-kithmen' + more_practice: 'tactical-strike' continue: 'the-final-kithmaze' } { - name: 'Assassinating More Kithmen' + name: 'Tactical Strike' type: 'hero' difficulty: 1 - id: 'assassinating-more-kithmen' - original: '541b434e1ccc8eaae19f3c33' - description: 'They\'re, uh, coming right for us?' + id: 'tactical-strike' + original: '5452cfa706a59e000067e4f5' + description: 'They\'re, uh, coming right for us! Sneak up behind them.' x: 80.34 y: 55.60 nextLevels: continue: 'the-final-kithmaze' practice: true - disabled: true } { name: 'The Final Kithmaze' @@ -835,22 +840,21 @@ dungeon = [ x: 82 y: 70 nextLevels: - more_practice: 'okay-one-more-kithmaze' + more_practice: 'the-gauntlet' continue: 'kithgard-gates' } { - name: 'Okay, One More Kithmaze' + name: 'The Gauntlet' type: 'hero' difficulty: 1 - id: 'okay-one-more-kithmaze' - original: '541c9a30c6362edfb0f34479' - description: 'But you really gotta get outside after this, okay?' + id: 'the-gauntlet' + original: '5452d8b906a59e000067e4fa' + description: 'Rush for the stairs, battling foes at every turn.' x: 76.94 y: 74.22 nextLevels: continue: 'kithgard-gates' practice: true - disabled: true } { name: 'Kithgard Gates' From bab73531f2460047d6d1e87a42e2e95d22a1eba5 Mon Sep 17 00:00:00 2001 From: George Saines Date: Thu, 30 Oct 2014 19:47:24 -0700 Subject: [PATCH 13/14] modified the map? --- app/views/play/WorldMapView.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/play/WorldMapView.coffee b/app/views/play/WorldMapView.coffee index 0c7f560cb..a008a8834 100644 --- a/app/views/play/WorldMapView.coffee +++ b/app/views/play/WorldMapView.coffee @@ -1,4 +1,4 @@ -RootView = require 'views/kinds/RootView' +0RootView = require 'views/kinds/RootView' template = require 'templates/play/world-map-view' LevelSession = require 'models/LevelSession' CocoCollection = require 'collections/CocoCollection' From a0775e1bf212a23d65b889f3844dfe674a2347d0 Mon Sep 17 00:00:00 2001 From: George Saines Date: Thu, 30 Oct 2014 19:58:11 -0700 Subject: [PATCH 14/14] moved the practice levels into position --- app/views/play/WorldMapView.coffee | 60 +++++++++++++++--------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/app/views/play/WorldMapView.coffee b/app/views/play/WorldMapView.coffee index 75951f273..4d44e2b16 100644 --- a/app/views/play/WorldMapView.coffee +++ b/app/views/play/WorldMapView.coffee @@ -1,4 +1,4 @@ -0RootView = require 'views/kinds/RootView' +RootView = require 'views/kinds/RootView' template = require 'templates/play/world-map-view' LevelSession = require 'models/LevelSession' CocoCollection = require 'collections/CocoCollection' @@ -617,8 +617,8 @@ dungeon = [ id: 'gems-in-the-deep' original: '54173c90844506ae0195a0b4' description: 'Quickly collect the gems; you will need them.' - x: 32 - y: 15.5 + x: 29 + y: 12 nextLevels: more_practice: 'forgetful-gemsmith' continue: 'shadow-guard' @@ -631,8 +631,8 @@ dungeon = [ id: 'forgetful-gemsmith' original: '544a98f62d002f0000fe331a' description: 'Grab even more gems as you practice moving.' - x: 35.49 - y: 24.61 + x: 38 + y: 12 nextLevels: continue: 'shadow-guard' practice: true @@ -644,8 +644,8 @@ dungeon = [ id: 'shadow-guard' original: '54174347844506ae0195a0b8' description: 'Evade the Kithgard minion.' - x: 54 - y: 9 + x: 50 + y: 11 nextLevels: more_practice: 'kounter-kithwise' continue: 'true-names' @@ -657,8 +657,8 @@ dungeon = [ id: 'kounter-kithwise' original: '54527a6257e83800009730c7' description: 'Practice your evasion skills with more guards.' - x: 61.19 - y: 13.80 + x: 58 + y: 10 nextLevels: more_practice: 'crawlways-of-kithgard' continue: 'true-names' @@ -671,8 +671,8 @@ dungeon = [ id: 'crawlways-of-kithgard' original: '545287ef57e83800009730d5' description: 'Dart in and grab the gem–at the right moment.' - x: 63.19 - y: 15.80 + x: 67 + y: 10 nextLevels: continue: 'true-names' practice: true @@ -698,7 +698,7 @@ dungeon = [ original: '5452972f57e83800009730de' description: 'Test out your battle skills by defeating more munchkins.' x: 80.85 - y: 11.85 + y: 16 nextLevels: continue: 'the-raised-sword' practice: true @@ -736,8 +736,8 @@ dungeon = [ id: 'descending-further' original: '5452a84d57e83800009730e4' description: 'Another day, another maze.' - x: 78.47 - y: 34.38 + x: 78 + y: 29 nextLevels: continue: 'the-second-kithmaze' practice: true @@ -749,8 +749,8 @@ dungeon = [ id: 'the-second-kithmaze' original: '5418cf256bae62f707c7e1c3' description: 'Many have tried, few have found their way through this maze.' - x: 55.54 - y: 26.96 + x: 59 + y: 25 nextLevels: continue: 'new-sight' } @@ -761,8 +761,8 @@ dungeon = [ id: 'new-sight' original: '5418d40f4c16460000ab9ac2' description: 'A true name can only be seen with the correct lenses.' - x: 67 - y: 41 + x: 60 + y: 34 nextLevels: continue: 'known-enemy' } @@ -773,8 +773,8 @@ dungeon = [ id: 'known-enemy' original: '5452adea57e83800009730ee' description: 'Begin to use variables in your battles.' - x: 80.17 - y: 45.31 + x: 75 + y: 46 nextLevels: continue: 'master-of-names' } @@ -785,8 +785,8 @@ dungeon = [ id: 'master-of-names' original: '5452c3ce57e83800009730f7' description: 'Use your glasses to defend yourself from the Kithmen.' - x: 84.17 - y: 45.31 + x: 86 + y: 43 nextLevels: continue: 'lowly-kithmen' skip_ahead: 'closing-the-distance' @@ -798,8 +798,8 @@ dungeon = [ id: 'lowly-kithmen' original: '541b24511ccc8eaae19f3c1f' description: 'Now that you can see them, they\'re everywhere!' - x: 74 - y: 48 + x: 68 + y: 42 nextLevels: continue: 'closing-the-distance' skip_ahead: 'the-final-kithmaze' @@ -811,8 +811,8 @@ dungeon = [ id: 'closing-the-distance' original: '541b288e1ccc8eaae19f3c25' description: 'Kithmen are not the only ones to stand in your way.' - x: 76 - y: 60 + x: 95 + y: 58 nextLevels: more_practice: 'tactical-strike' continue: 'the-final-kithmaze' @@ -824,8 +824,8 @@ dungeon = [ id: 'tactical-strike' original: '5452cfa706a59e000067e4f5' description: 'They\'re, uh, coming right for us! Sneak up behind them.' - x: 80.34 - y: 55.60 + x: 93 + y: 47 nextLevels: continue: 'the-final-kithmaze' practice: true @@ -850,8 +850,8 @@ dungeon = [ id: 'the-gauntlet' original: '5452d8b906a59e000067e4fa' description: 'Rush for the stairs, battling foes at every turn.' - x: 76.94 - y: 74.22 + x: 89 + y: 64 nextLevels: continue: 'kithgard-gates' practice: true